看了Joel的《給計算機系學生的建議》這篇文章,覺得講的還是比較精辟的.Joel正好也是我剛聽到的名字.因為最近一本熱門的圖書《Joel說軟件》,手邊就有這本書,大家的評價很高.我也正在看.

 

Joel對于計算機系的學生給出了七條建議:

1.       畢業前學會寫作

2.       畢業前學會C語言

3.       畢業前學習微觀經濟學

4.       不要因為某些非計算機課程枯燥無趣就敬而遠之

5.       學習有大量編程實踐的課程

6.       不要擔心工作都跑到印度去了

7.       好好做夏季實習

下面再截取一些Joel的經典的解釋,每一點都和上面的建議對應:

1.       會寫作就更能闡述自己的思想.軟件開發組織中,最有權力和影響力的人是那些可以用自信,準確,舒適的英語腳爐的人.
一個合格的程序員和一個偉大的程序員的區別不在于懂得多少中變成語言,而在于他們是否善于表達.能夠說服他人,就能夠獲得權力.
會寫作的人,能夠寫清晰的用戶手冊,還有代碼的注釋,用戶明白了軟件的用途,明白了他的工作價值.
最后,Joel建議學生要重視寫作方面的課程,給自己建立一個網絡日志.寫的越多,寫地越容易;寫地越容易,寫地就越多,這是一個良性循環.

2.       C語言比某些現代語言更接近及其語言.不會C語言,你不可能使用高級語言寫出高效的代碼,別人不相信你能夠為大項目設計架構.

3.       微觀經濟學是現代商業的理論基礎.理解商業基本規律的程序員對于商業界來說是更有價值的程序員.

4.       你需要讓你的學分平均分看起來漂亮一點,許多招聘主管就喜歡看這個.有時候編程同樣是很枯燥的,每份工作都會有讓人厭煩的時候.我是不會聘請那些只愿意感有趣工作的人.

5.       計算機科學和軟件開發不一樣.如果你想成為一個程序員,你可以進計算機系,這是一個非常好的專業,但是你學的不是軟件開發.如果你喜歡編程,不要為你不能理解教授諸如lambda算子或者線性代數等課程重點而沮喪,在這些課程里你連摸一下計算機的機會都沒有.要注重去學習一些和事件相關的課程.

6.       首先,根據眼前的商業時尚選擇事業是非常愚蠢的.
其次,即使編程的工作真的都跑到印度和中國去了,編程對于其他有趣的工作來說都是極好的訓練
第三,無論是在美國還是在印度,好的程序員還是非常短缺的,請相信我.好的程序員找工作還是非常容易的.

7.       明知的招聘者會知道:真正熱愛編程的人,初中就為當地的牙醫寫數據庫程序,工作暑假就在計算機夏令營教課,為校報開發內容管理系統,并在某個軟件公司做暑假實習.
當你畢業時,你的建立上應該羅列上一堆的編程實習工作.

 

看過Joel的建議后,感覺自己好多問題之前也有認識,不過還是有些沒有意識到的地方.但是,自己雖然有認識但是還是做的很不到位或者沒做,說來慚愧呀,好多的機會沒有把握.針對Joel的七點,我總結一下我在學校的時候是如何實踐的,做的不好的地方,請大學生朋友提高警惕,吸取經驗:

1.       對于寫作,我沒有專門得學習,在學校的時候也有這方面的選修課,但當時認為這種課程沒有什么用處.其實在高中的時候語文就不好,作文也是一塌糊涂,所以,真的是錯過了學習提高的機會,一位大學還是很有時間的,我想這點大家都會認同.

2.       說起C語言更是慚愧,一開始學習的是Pascal,這也是我接觸的第一門編程語言,其實說實在的學完了那門課程后,除了了解了點語法之外,根本就不知道編程是怎么一回事!學校語言方面的課程都教的很差,老師水平平平,每門課程頂多就是教個語法就ok.C語言在我們學校及其不重視,我覺得很重要的原因就是老師都不熟悉.C語言作為選修課開,記得當時只上過不到十次的課,知識嘛也沒學會.最后考試,成績非常悲慘,60,還得感謝老師的照顧.這門課也是我大學所有成績中最最低的一門課程,其他的再差也沒低于70分的時候.現在想想就這水平怎么好意思在程序員里面混.

3.       當時在學校的時候也有意識:不能一心只搞技術,還要有管理/經濟方面的知識.當時只是一種很淺的意識和需求(也可以理解為一種需求),但是并不是很清楚,應該怎么去做,什么知識需要學習,需要學好.正好學校有機會修雙學位,我馬上就選擇了修工商管理專業,一方面原因是因為:可以拿到兩個學位,另一方面原因是:我那淺薄的意識.但是,真正到了上課的時候,那點淺薄的意識全無,對什么微觀經濟學/宏觀經濟學/財務管理/企業管理等課程毫無興趣,最后這些課程幾乎沒有學到知識,只是了解了一些名次和概念,浪費了好多的時間.換來了一張毫無分量的學位證書,現在想想證書是次要的,重要的是能力和學到有用的知識,又一次好的機會錯過了.

4.       對于這一點,我更想說的就是計算機方面一些基礎課程的學習.當時老師總是一個勁得講數據結構很重要,很重要,但是對于我們對于計算機編程還沒有任何感性認識的人來說理解數據結構的重要,那簡直是不可能的.之所以認為它重要是因為計算機研究生要考這門課程,老師跟我們也是這樣說的.之后又是一些很基礎很重要的課程,比如:操作系統/編譯原理/計算機組成/數據庫/網絡,老師說很重要,但是我們依然重視不起來,因為這幾門課都是非常抽象/理論的,學起來味同嚼蠟,巨枯燥.所以,同樣被我一一混過了!
還有一點在大學里面學習計算機,一定要想想自己是不是對計算機這個專業很有興趣,搞軟件開發興趣和好奇心非常重要.如果感覺沒有興趣,那么趕緊想別的出路,省得到時候后悔.如果非常感興趣,那我只能祝賀了!

5.       學習軟件開發一定要實踐-上機!這方面我一直比較積極的.不過這里也得感謝我姨,無償得為我提供了一臺嶄新的電腦,所以一開始我就有了比較好的條件.其實,對于現在的大部分計算機系的學生來說條件真的已經是非常優越了,不論是學校和個人都有豐富的資源,宿舍里有寬帶網絡,機房都是嶄新的機器,而且記得到了大三,我們班30個人,已經擁有了20多臺電腦,男生僅有三個人沒有.但是事實卻非常令人遺憾,大部分人的電腦都成了電視機/VCD/DVD,聊天工具,外加游戲機.所以后果也是非常殘酷的,我們班到現在為止也就有四五個人還從事著軟件開發的工作.其實不是有些同學不想搞軟件開發,而是真的是沒學到多少知識.

6.       在學校里面也是聽到了好多關于畢業的學生太多,就業難之類的報道.但是我當時沒什么感覺,因為我在大學最后的兩年里面還是積累了一點實踐的經驗.我是比較順利在CSDN論壇上通過一篇招聘的帖子找到了工作,一個是第一家公司當時比較缺人,加之我美工和PHP都會一些,也有項目經驗,所以比較順利的就找到了第一份工作,然后我就只身一人從山東來到上海,我也參加了幾場招聘會,主要是看看有沒有更好的機會,還是有幾個公司有了意向.所以我的感覺也是這樣的,工作并不難找,學歷學位不是最重要的,關鍵是看你的能力和有沒有相關的工作經驗.

7.       找機會實習.這方面要從我參加我們學校的網絡教育中心開始.我從大一下學期就開始學習網頁制作,然后就學習了一些PHP開發web程序的知識.大二的下學期有機會加入到了網絡教育中心,我加入后主要也就是4個人,我們負責開發和維護學校的學生信息管理系統.在那里我還是學到一些軟件開發實踐方面的知識,后來我到了大四之后,我們成立了藍天工作室,我們的隊伍也壯大的起來,最多的時候達到了十多個人,但是我們做的項目卻沒有什么太多的進展,主要還是繼續開發和維護學生信息管理系統,本來要做一個校園的社區,結果只做了一半的功能就放下了沒有完成.現在想想當時的機會和資源真是浪費了,其實可以好好組織工作室的,可以學到更多的知識,拉到更多的項目來做,但是現在想想也不知道當時都忙什么去了.大學四年軟件開發方面的知識,大部分都是從我們的這段經歷中學到了.
之前我也有為我們學院設計主頁,為別的學校的學院設計主頁的經歷,這樣的經歷也很好,可以認識更多的人,還有就是有小費的呵呵.大四上學期最后的接近兩個月的實踐,我們工作室的幾個人有機會和外面的一家軟件公司合作為地稅局開發一套web系統,這也是一次難得的經歷,因為做項目可以學到很多實踐方面的知識,雖然會比較辛苦.大四的下學期我已經開始到公司上班了.所以,我一直還是比較重視實踐的機會的,如果在學校里面學不到東西,那就盡快走出來學習.

 

最后,我想再針對我現在的情況和切身的感受,給自己,也給在校學生一點符合國情的建議:

1.       真正工作的時候表達和溝通能力是非常非常重要的,每個公司都非常重視員工的溝通能力.而據我觀察程序員由于長期從事編程工作都變得非常內向,不善于與人溝通.所以的確很容易發現,公司里面懂技術會溝通,表達能力好的人,往往都會提升.所以,我現在也是要積極溝通,多看一些相關的書,參加一些培訓,還有就是多跟同事朋友交流.網絡日志就是非常好的平臺,要養成寫網絡日志的好習慣,因為寫網絡日志可以激發思考,可以總結經驗,可以記錄知識,可以鍛煉寫作和表達能力,同時可以結交朋友.所以這么多好處就不要再猶豫了.還有一點就是盡量爭取和利用公司內部培訓的機會,主要要求提供為別人培訓的機會,這樣既可以鍛煉自己的演講和表達能力,也能夠鞏固自己的知識,樹立自己的信心和在別人心中的形象,如果你善于表達,你就能更好地分享自己的知識,這樣很多人就會喜歡你,人際關系也會搞得不錯.

2.       現在我真的能夠清楚的知道一些計算機方面的基礎課程的重要了.所以,我現在還是要把基礎打好首先是一些基礎理論方面的知識比如操作系統/TCP/IP協議/數據庫等.同時要重視學習面向對象/UML/設計模式相關的知識,還有就是軟件工程方面的知識,例如:極限編程/測試驅動開發/RUP.同時也包括其他一些實用的技術,所以作為程序員一定要不斷地充實自己.

3.       我現在才發現,只有懂得商業你才能更好得理解客戶需求,你就不會對產品或者業務部門的需求感到莫名其妙.還有也是要多關注經濟方面的知識和現象,懂得一些經濟原理.最好對于財務知識和理財知識也要掌握.

4.       端正態度,要么不做,做就要全心全力地做,追求卓越.學計算機興趣和好奇心非常重要.興趣和好奇心是你不斷學習新技術的驅動力.

5.       積極實踐,對于出現的新技術新的框架,不要只是簡單看看,或者聽別人說好或者說壞.自己寫個實例試試,然后自己來判斷.別偷懶!!!!同時結合著項目進行實踐,不斷嘗試,不斷思考.最近我就會看一些架構方面的書,發現問題我就會在項目中積極調整,還有就是我在看設計模式的知識的時候我就會想我手頭的項目中是不是也有同樣的問題,是不是可以用設計模式進行優化.

6.       軟件公司還是非常缺人的,特別缺優秀的開發人員,什么是優秀的軟件開發人員呢?我認為無非就是包括兩方面:能力和態度.任何人做好這兩方面都會是一位非常優秀的程序員.其中能力主要包括了:軟件開發的技術能力,分析解決問題的能力, 團隊合作的能力,學習能力,溝通協調能力.態度方面主要包括了:工作態度,工作要認真負責,積極主動地發現問題解決問題,任勞任怨的高質量完成工作任務.

7.       大學生朋友要積極尋找實習的機會.軟件開發人員把工作做到卓越,然后利用個人的空閑實踐不斷充實完善自己.養成好的習慣,做好計劃,嚴格執行!

 

看過了Joel的文章,我馬上把感想寫了下來.因為我要積極改變自己,勤于總結.