?

心態(tài)差距
近年來(lái)由于互聯(lián)網(wǎng)的迅速發(fā)展,全國(guó)各地,IT人才的需求量都出現(xiàn)了飛躍式的增長(zhǎng),程序員的薪資也明顯高于其他行業(yè)。
但在國(guó)內(nèi),真正因?yàn)闊釔?ài)編程而從事這份工作的人其實(shí)并不多,很多人學(xué)習(xí)程序想得都是這個(gè)行業(yè)火,賺錢(qián)快,入行門(mén)檻低。什么技術(shù)火就學(xué)什么,然后進(jìn)入一個(gè)大公司,做幾個(gè)成功的項(xiàng)目,積累工作經(jīng)驗(yàn),幾年以后自己當(dāng)個(gè)小管理,拿著十幾萬(wàn),或幾十萬(wàn)的工資,再無(wú)追求的過(guò)著小日子就好。
甚至到了30歲,如果沒(méi)能進(jìn)入管理層,大多數(shù)人都會(huì)考慮轉(zhuǎn)行,或僅靠自身的知識(shí)累積開(kāi)始創(chuàng)業(yè)。
美國(guó)程序員大多數(shù)都是因?yàn)闊釔?ài)編程行業(yè)而從事這份工作的,他們會(huì)專(zhuān)注某一個(gè)領(lǐng)域幾十年。50歲以上的程序員還會(huì)安心待在同一個(gè)崗位寫(xiě)代碼,專(zhuān)研技術(shù)。他們想法很簡(jiǎn)單, 對(duì)于編程這種事情更多的是那種單純似的熱愛(ài)。
影響因素:國(guó)外的程序員,專(zhuān)心寫(xiě)程序并專(zhuān)研,他的級(jí)別和工資就會(huì)年年往上漲,和做管理的人員沒(méi)太大區(qū)別。國(guó)內(nèi)的程序員這方面就杯具了,寫(xiě)程序的工資基本低于管理者,迫于現(xiàn)實(shí)的生活壓力,不得不往賺錢(qián)更多的方向走。

溝通能力
和美國(guó)程序員交流的時(shí)候,你能從他的切入點(diǎn)和具體思路很清晰的理解他的問(wèn)題,在闡述問(wèn)題的時(shí)候背景信息也給得相當(dāng)全面,所以理解他們的問(wèn)題比較簡(jiǎn)單容易。
中國(guó)程序員闡述問(wèn)題時(shí)邏輯思維不清晰,背景知識(shí)沒(méi)給全,講了很多,但大家都get不到他要表達(dá)的重點(diǎn),有些人一味的自顧自說(shuō),完全不去思考和理解別人給他提的建議。
影響因素:編程所用的英語(yǔ),比較是美國(guó)人的母語(yǔ);另外就是思維方式的不同。

解決問(wèn)題能力
如果給我們中國(guó)程序員,規(guī)定好的方案,他們普遍完成的非常好。但如果沒(méi)有具體方案, 完全是一個(gè)開(kāi)放性課題,很多時(shí)候程序員會(huì)完全無(wú)法下手。
美國(guó)程序員這方面能力比較好, 他們的探索研究能力非常強(qiáng), 經(jīng)過(guò)一定時(shí)間的研究后, 能提出一套非常具體有效的方案然后一步一步去解決問(wèn)題。
在一定程度上,這種差距就如同現(xiàn)今機(jī)器學(xué)習(xí)和真正智能的差距。機(jī)器學(xué)習(xí)可以解決很多特定領(lǐng)域的問(wèn)題,模型可以?xún)?yōu)化得越來(lái)越好,但優(yōu)化的盡頭也不是真正的智能。
影響因素:兩國(guó)教育方式的不同,一個(gè)善于解決問(wèn)題, 另一個(gè)善于發(fā)現(xiàn)探索問(wèn)題。

技術(shù)實(shí)力
工作初期兩國(guó)程序員差距不大,5年是個(gè)分水嶺,這之后開(kāi)始出現(xiàn)變化了,在中國(guó)多數(shù)人工作個(gè)5-6年就開(kāi)始琢磨轉(zhuǎn)管理。雖然這5-6年我們代碼上的時(shí)間,積累的經(jīng)驗(yàn)可以說(shuō)很多時(shí)候是高于美國(guó)程序員的。但在某一項(xiàng)技術(shù)上我們有多少人專(zhuān)研超過(guò)10年,所以在國(guó)內(nèi)出現(xiàn)了程序員吃青春飯這種理論。
而美國(guó)程序員10年以上經(jīng)驗(yàn)的人有的是。 例如,一個(gè)工作經(jīng)驗(yàn)是30年, 從dos時(shí)代就開(kāi)發(fā)debugger一直干到現(xiàn)在, 一個(gè)24年工作經(jīng)驗(yàn)外加5年的博士研究經(jīng)驗(yàn), 還有兩個(gè)從畢業(yè)到現(xiàn)在一直從事CLR diagnostic api的開(kāi)發(fā)到現(xiàn)在基本都干了十幾年了。
在國(guó)內(nèi)真的很難想象有這種團(tuán)隊(duì)。 記得stackover上統(tǒng)計(jì)過(guò), 程序員的黃金年齡應(yīng)該在40歲左右, 但我們國(guó)內(nèi)40歲的時(shí)候有幾個(gè)還愿意寫(xiě)程序呢。cocoachina上,一篇寫(xiě)了40年程序的人發(fā)表的文章,竟久居排行榜前列不下!

職業(yè)訴求
中國(guó)的程序員更需要關(guān)注物質(zhì)回報(bào),因?yàn)槲覀兊奈幕瘡?qiáng)調(diào)盡早買(mǎi)房買(mǎi)車(chē)。歐美人在這方面要輕松自由得多,有大把的時(shí)間去嘗試創(chuàng)造,但其實(shí)大部分人是不創(chuàng)造的,只是概率比中國(guó)大而已。
中國(guó)人妄自菲薄沒(méi)有“創(chuàng)新”能力,是沒(méi)有意識(shí)到自己到了創(chuàng)造力高峰的時(shí)候卻被現(xiàn)實(shí)牽絆,我們用自己的青春和人家的大半生去比較,當(dāng)然妄自菲薄了,人家可以投入的時(shí)間就比你多得多。中國(guó)程序員職業(yè)黃金時(shí)期所要面對(duì)的干擾非常大,首先是要讓自己融入英語(yǔ)的技術(shù)圈子,其次是要應(yīng)付一個(gè)不爭(zhēng)氣沒(méi)追求強(qiáng)加個(gè)人的世俗文化。

當(dāng)然小編并不是在長(zhǎng)他人志氣,滅本國(guó)威風(fēng),只是想小小提醒作為程序員的你,一定不要以學(xué)編程、拿高薪作為自己唯一的人生目標(biāo)。就好像創(chuàng)業(yè)路上的你,無(wú)論在什么時(shí)候,我們都要不斷提升自己的專(zhuān)業(yè)度和競(jìng)爭(zhēng)力,永遠(yuǎn)保持一顆熱愛(ài)自己事業(yè)的工匠之心,堅(jiān)定的走下去?;ヂ?lián)網(wǎng)行業(yè)千變?nèi)f化,要不斷的學(xué)習(xí),更新知識(shí)系統(tǒng),才能永遠(yuǎn)不被這個(gè)社會(huì)所淘汰。
在我平時(shí)所見(jiàn)到的程序員中,如果純以編碼能力來(lái)看,個(gè)人覺(jué)得可以分為五類(lèi),依次是:
1.拷貝型
拷貝型選手就是傳說(shuō)中的“代碼拷貝員”了,他們對(duì)實(shí)現(xiàn)功能幾乎沒(méi)有思路,所作的事情就是從網(wǎng)上或是之前其他團(tuán)隊(duì)成員寫(xiě)的代碼中拷貝出片段,然后放到項(xiàng)目中,如果運(yùn)行項(xiàng)目出現(xiàn)了期望結(jié)果,則表示任務(wù)完成。
這類(lèi)人只會(huì)改代碼,卻不會(huì)寫(xiě)代碼。他們大多對(duì)編程毫無(wú)興趣,只是希望以此糊口而已。

2.新手型
當(dāng)產(chǎn)品有功能需求時(shí),由于經(jīng)驗(yàn)有限,程序員并不完全知道要如何實(shí)現(xiàn)這個(gè)功能,需要通過(guò)學(xué)習(xí)、尋找資料等方式來(lái)解決問(wèn)題。
這種情況下的編碼過(guò)程,程序員的主要目標(biāo)是“完成功能”,那么很難有多余的心思去考慮邊界條件、性能、可讀性、可擴(kuò)展性、編碼規(guī)范等問(wèn)題,因此代碼bug可能較多,穩(wěn)定性不高。常常會(huì)發(fā)生開(kāi)發(fā)花費(fèi)1個(gè)月,改bug卻要改上好幾個(gè)月的事情。

3.學(xué)習(xí)型
這類(lèi)程序員對(duì)所在領(lǐng)域的語(yǔ)言已經(jīng)比較了解,對(duì)于一般功能可以有較為清晰的實(shí)現(xiàn)思路,給出需求時(shí)可以通過(guò)自己的思路來(lái)實(shí)現(xiàn),并且會(huì)一定程度上考慮邊界條件和性能問(wèn)題。但僅此而已,他們對(duì)可讀性和可擴(kuò)展性考慮很少,也沒(méi)有項(xiàng)目級(jí)別的考慮,主要是希望通過(guò)實(shí)現(xiàn)代碼來(lái)練手或是學(xué)習(xí)。
這類(lèi)程序員最大的表現(xiàn)在于喜歡“創(chuàng)造代碼”,即使有現(xiàn)成的實(shí)現(xiàn),他們也希望自己來(lái)實(shí)現(xiàn)一套,以達(dá)到“學(xué)習(xí)”的目的。他們不喜歡復(fù)用別人的代碼,看見(jiàn)項(xiàng)目中別人實(shí)現(xiàn)了相類(lèi)似的功能,他們會(huì)以“需求不同”的借口來(lái)自己重新實(shí)現(xiàn)一套。這類(lèi)人一般來(lái)說(shuō)對(duì)技術(shù)有著較為濃厚的興趣,希望能夠通過(guò)項(xiàng)目來(lái)進(jìn)行學(xué)習(xí)。
從項(xiàng)目的角度來(lái)說(shuō),這種做法最大的麻煩在于開(kāi)發(fā)周期可能較長(zhǎng)(相比直接使用現(xiàn)成的實(shí)現(xiàn)),并且會(huì)使得項(xiàng)目代碼膨脹,影響未來(lái)的維護(hù)。但這類(lèi)程序員由于有興趣,如果好好培養(yǎng)或許會(huì)成為明天的牛人。

4.實(shí)現(xiàn)型
這類(lèi)程序員一般有較為豐富的經(jīng)驗(yàn),由于寫(xiě)得太多,因此不再追求“創(chuàng)造代碼”來(lái)進(jìn)行學(xué)習(xí),同時(shí)對(duì)所在領(lǐng)域可能涉及的很多第三方框架或是工具都比較熟悉,當(dāng)接受到產(chǎn)品需求時(shí),對(duì)功能實(shí)現(xiàn)方案已經(jīng)了然于胸,因此他們可以快速的實(shí)現(xiàn)需求,并且對(duì)邊界、性能都有一定程度的考慮。因?yàn)槟軌蚩焖賹?shí)現(xiàn)需求功能,經(jīng)常會(huì)被團(tuán)隊(duì)評(píng)價(jià)為“牛人”。但他們一般僅僅停留在“完成功能”級(jí)別上,對(duì)代碼的可讀性、可擴(kuò)展性、編碼規(guī)范等考慮較少,對(duì)項(xiàng)目總體把握也較少(例如控制項(xiàng)目膨脹、方便部署等架構(gòu)級(jí)別的東西)。
這類(lèi)程序員最大的表現(xiàn)在于喜歡“開(kāi)發(fā)項(xiàng)目”,卻不喜歡“維護(hù)項(xiàng)目”。他們產(chǎn)出的代碼最大的問(wèn)題就是維護(hù)較為困難,可能過(guò)上幾個(gè)月回頭看自己的代碼都會(huì)暈頭轉(zhuǎn)向。因此即使是自己寫(xiě)的代碼,仍然不愿意維護(hù),一般會(huì)苦了后來(lái)人。
因?yàn)榻涌谠O(shè)計(jì)的缺乏,當(dāng)需求變更時(shí),發(fā)現(xiàn)代碼要改的東西太多,然后抱怨需求變化,卻很少認(rèn)為是自己的代碼問(wèn)題。這樣的項(xiàng)目如果經(jīng)過(guò)長(zhǎng)時(shí)間的變更維護(hù),最終會(huì)變得難以維護(hù)(一般表現(xiàn)在需求變更響應(yīng)時(shí)間越來(lái)越長(zhǎng))甚至無(wú)法維護(hù),最終要么是半死不活,要么是被推倒重來(lái)。

5.架構(gòu)型
這類(lèi)程序員比實(shí)現(xiàn)型更進(jìn)一步,他們經(jīng)驗(yàn)豐富,對(duì)相關(guān)框架和工具等都很熟悉,“完成功能”“穩(wěn)定性”“性能”這些已經(jīng)不再是他們的追求,更優(yōu)美的代碼、更合理的架構(gòu)才是目標(biāo)。
這類(lèi)程序員代碼設(shè)計(jì)大多建立在對(duì)需求的詳細(xì)了解和對(duì)需求變更的預(yù)測(cè)上——可擴(kuò)展性較好;代碼細(xì)節(jié)也盡量多的考慮邊界情況、性能——穩(wěn)定高效;代碼命名和注釋都恰到好處——可讀性較高;同時(shí)在開(kāi)發(fā)過(guò)程中他們會(huì)不斷重構(gòu),對(duì)代碼做減法——保證項(xiàng)目可持續(xù)發(fā)展;等等。
但由于考慮問(wèn)題較多,單從“實(shí)現(xiàn)功能”階段來(lái)看,完成速度不一定會(huì)比“實(shí)現(xiàn)型”要快。只是到了項(xiàng)目中后期優(yōu)勢(shì)才會(huì)慢慢體現(xiàn)出來(lái)
也許還有更優(yōu)秀的程序員我沒(méi)有見(jiàn)過(guò),呵呵,歡迎大家補(bǔ)充。

抵制程序員雞湯
有很多特質(zhì)使得一個(gè)程序員是優(yōu)秀的程序員,那么什么特質(zhì)都沒(méi)有的自然是一般的程序員了。
1. 創(chuàng)造型/創(chuàng)新型
以創(chuàng)造/創(chuàng)新為樂(lè)的程序員。以新的方法解決現(xiàn)有問(wèn)題,發(fā)明方法解決尚未解決的問(wèn)題。問(wèn)題本身并不限于技術(shù)領(lǐng)域。硅谷很多技術(shù)創(chuàng)始人具備這類(lèi)的品質(zhì)。雖然他們創(chuàng)業(yè)后都不再全職寫(xiě)代碼,但他們這種品質(zhì)貢獻(xiàn)了他們事業(yè)的第一步;
2. 管家型
以管系統(tǒng)演化為樂(lè)的程序員。有潔癖,有強(qiáng)迫癥,容不得系統(tǒng)有一點(diǎn)的瑕疵。如果你招聘了一個(gè)程序員/架構(gòu)師,2-3年后你的互聯(lián)網(wǎng)產(chǎn)品再也沒(méi)有在可見(jiàn)/可擴(kuò)展性上遇到瓶頸,他多半是這種程序員;
3. 學(xué)院派型
通常在CS某一領(lǐng)域擁有博士學(xué)位,或者深受他們的影響的人。對(duì)該該領(lǐng)域興趣濃厚,通常參與企業(yè)核心競(jìng)爭(zhēng)力相關(guān)的研發(fā)工作。當(dāng)然,也有一部分也具備第一種特質(zhì),中途去改變世界去了;

4. 經(jīng)驗(yàn)型
在行內(nèi)具有多年豐富的經(jīng)驗(yàn),可承擔(dān)責(zé)任,考慮全面。團(tuán)隊(duì)擁有了這種人,通常會(huì)少走很多彎路。但面對(duì)新的挑戰(zhàn)還是要和其他人站在同一起跑線(xiàn)上的;
5. 鐘表匠型
喜歡并擅長(zhǎng)把一個(gè)系統(tǒng)從里到外研究通透的人。分享出來(lái)都是從里到外讓人垂涎欲滴的干貨。很多后端工程師都是這種類(lèi)型;
6. 折騰型
擅長(zhǎng)“折騰”,方案沒(méi)有最好的,只有最難的。:)興趣廣泛動(dòng)手能力強(qiáng),通過(guò)折騰留下很多技術(shù)積累。想用哪一塊的新技術(shù)?先問(wèn)問(wèn)他把,8成他很久前就已經(jīng)玩過(guò)了;
7. 肉盾型
哥甲高血條長(zhǎng),加班如同切菜一般,逼急了不睡覺(jué)也行。只伸手要過(guò)兩件東西:原型和咖啡。適合打閃電戰(zhàn)。當(dāng)然,可能事后要打打后勤重構(gòu)下代碼。
優(yōu)秀的程序員,會(huì)盡量避免犯這篇文章里提到的這些錯(cuò)誤:像專(zhuān)家一樣思考,像外行一樣實(shí)踐!

看過(guò)一篇文章:以色列軍隊(duì)是世界上最好的孵化器
文中提到:以色列軍隊(duì)中有一種很特別的現(xiàn)象,基礎(chǔ)訓(xùn)練給所有士兵設(shè)定了許多必須服從的條條框框。但當(dāng)你成為一名下級(jí)軍官以后,就需要學(xué)會(huì)自己思考解決問(wèn)題。另外,即使基礎(chǔ)訓(xùn)練使你具備了執(zhí)行任務(wù)的基本條件,但要完成任務(wù),必須要發(fā)揮自己的創(chuàng)造力。
不少人會(huì)看重上面這段話(huà)后面提到的創(chuàng)造力,在這里我感觸更深的是“基礎(chǔ)訓(xùn)練給所有士兵設(shè)定了許多必須服從的條條框框”這句話(huà)——這說(shuō)明先約束、先有諸多規(guī)矩,是日后能發(fā)揮創(chuàng)造力的基礎(chǔ),這和我們中國(guó)練書(shū)法要求先一絲不茍練習(xí)楷書(shū),到有一定基礎(chǔ)了才能修習(xí)行書(shū)乃至草書(shū)是一個(gè)道理。

在中國(guó)IT行業(yè)的“好工程師”應(yīng)該是什么樣的?有哪些客觀標(biāo)準(zhǔn)可供自我評(píng)估?這個(gè)回答中,列出了軟件工程師能力自我評(píng)價(jià)表(37條)。優(yōu)秀還是一般,看看37條做到了多少。
在構(gòu)建之法——現(xiàn)代軟件工程這本書(shū)的第三章軟件工程師的成長(zhǎng)里,小編寫(xiě)了一節(jié)技能的反面



在我看來(lái),沒(méi)有優(yōu)秀程序員和一般程序員,只有程序員和碼農(nóng)。
如果按排名第一的 的答案來(lái)分類(lèi),那就是5是程序員,1234是碼農(nóng)。
舉個(gè)栗子:
A:對(duì)于我們這種需要多方合作的項(xiàng)目,還是用git比較方便管理。
B:svn很牛逼的!我用了很多年了!
A:git的分支很方便,合并操作相當(dāng)簡(jiǎn)潔且沒(méi)有負(fù)擔(dān)。
B:svn也有分支!百度上說(shuō)svn更適合企業(yè)!
A:git只有一個(gè).git目錄來(lái)管理所有版本,在排除的時(shí)候很方便!
B:svn現(xiàn)在也支持單 .svn目錄了!
再舉個(gè)栗子:
A:為什么我們網(wǎng)站的根目錄下面還有個(gè).settings和.project文件夾?
B:我上傳時(shí)候直接用flashfxp一拖就上來(lái)了,沒(méi)看有什么文件夾。
A:為什么我剛才pull之后在項(xiàng)目庫(kù)下面多了個(gè) 未命名.txt 文件?
B:嗯,那是我自己做筆記備份用的。

三舉個(gè)栗子:
A:為什么Hero這個(gè)類(lèi)有1萬(wàn)行?
B:我覺(jué)得把所有功能寫(xiě)在一個(gè)類(lèi)里面很方便??!
A:為什么這段代碼復(fù)制了4次?封裝成函數(shù)??!
B:??!有么?
A:這幾個(gè)類(lèi)為什么不用適配器模式?
B:什么是適配器模式?

最后舉個(gè)栗子:
B:怎么加一個(gè)Sprite到Node中?
A:Node.addChild(Sprite)
B:我要在加的時(shí)候設(shè)置層級(jí)關(guān)系!
A:RTFM!
碼農(nóng)真正意識(shí)(而不是調(diào)侃)到自己是碼農(nóng)的時(shí)候,TA才可能成為一個(gè)程序員。

而當(dāng)TA成為一個(gè)程序員的時(shí)候,TA才有資格站在山腳下,憧憬著那那高聳入云的峰頂,開(kāi)始攀登。
目標(biāo)已經(jīng)有了,下面就看行動(dòng)了!記?。簩W(xué)習(xí)永遠(yuǎn)是自己的事情,你不學(xué)時(shí)間也不會(huì)多,你學(xué)了有時(shí)候卻能夠使用自己學(xué)到的知識(shí)換得更多自由自在的美好時(shí)光!時(shí)間是生命的基本組成部分,也是萬(wàn)物存在的根本尺度,我們的時(shí)間在那里我們的生活就在那里!我們價(jià)值也將在那里提升或消弭!
Java程序員,加油吧