當前位置:
首頁 > 知識 > 中國程序員VS美國程序員,差距在哪裡?

中國程序員VS美國程序員,差距在哪裡?

心態差距

近年來由於互聯網的迅速發展,全國各地,IT人才的需求量都出現了飛躍式的增長,程序員的薪資也明顯高於其他行業。

但在國內,真正因為熱愛編程而從事這份工作的人其實並不多,很多人學習程序想得都是這個行業火,賺錢快,入行門檻低。什麼技術火就學什麼,然後進入一個大公司,做幾個成功的項目,積累工作經驗,幾年以後自己當個小管理,拿著十幾萬,或幾十萬的工資,再無追求的過著小日子就好。

甚至到了30歲,如果沒能進入管理層,大多數人都會考慮轉行,或僅靠自身的知識累積開始創業。

美國程序員大多數都是因為熱愛編程行業而從事這份工作的,他們會專註某一個領域幾十年。50歲以上的程序員還會安心待在同一個崗位寫代碼,專研技術。他們想法很簡單, 對於編程這種事情更多的是那種單純似的熱愛。

影響因素:國外的程序員,專心寫程序並專研,他的級別和工資就會年年往上漲,和做管理的人員沒太大區別。國內的程序員這方面就杯具了,寫程序的工資基本低於管理者,迫於現實的生活壓力,不得不往賺錢更多的方向走。

溝通能力

和美國程序員交流的時候,你能從他的切入點和具體思路很清晰的理解他的問題,在闡述問題的時候背景信息也給得相當全面,所以理解他們的問題比較簡單容易。

中國程序員闡述問題時邏輯思維不清晰,背景知識沒給全,講了很多,但大家都get不到他要表達的重點,有些人一味的自顧自說,完全不去思考和理解別人給他提的建議。

影響因素:編程所用的英語,比較是美國人的母語;另外就是思維方式的不同。

解決問題能力

如果給我們中國程序員,規定好的方案,他們普遍完成的非常好。但如果沒有具體方案, 完全是一個開放性課題,很多時候程序員會完全無法下手。

美國程序員這方面能力比較好, 他們的探索研究能力非常強, 經過一定時間的研究後, 能提出一套非常具體有效的方案然後一步一步去解決問題。

在一定程度上,這種差距就如同現今機器學習和真正智能的差距。機器學習可以解決很多特定領域的問題,模型可以優化得越來越好,但優化的盡頭也不是真正的智能。

影響因素:兩國教育方式的不同,一個善於解決問題, 另一個善於發現探索問題。

技術實力

工作初期兩國程序員差距不大,5年是個分水嶺,這之後開始出現變化了,在中國多數人工作個5-6年就開始琢磨轉管理。雖然這5-6年我們代碼上的時間,積累的經驗可以說很多時候是高於美國程序員的。但在某一項技術上我們有多少人專研超過10年,所以在國內出現了程序員吃青春飯這種理論。

而美國程序員10年以上經驗的人有的是。 例如,一個工作經驗是30年, 從dos時代就開發debugger一直干到現在, 一個24年工作經驗外加5年的博士研究經驗, 還有兩個從畢業到現在一直從事CLR diagnostic api的開發到現在基本都幹了十幾年了。

在國內真的很難想像有這種團隊。 記得stackover上統計過, 程序員的黃金年齡應該在40歲左右, 但我們國內40歲的時候有幾個還願意寫程序呢。cocoachina上,一篇寫了40年程序的人發表的文章,竟久居排行榜前列不下!

職業訴求

中國的程序員更需要關注物質回報,因為我們的文化強調儘早買房買車。歐美人在這方面要輕鬆自由得多,有大把的時間去嘗試創造,但其實大部分人是不創造的,只是概率比中國大而已。

中國人妄自菲薄沒有「創新」能力,是沒有意識到自己到了創造力高峰的時候卻被現實牽絆,我們用自己的青春和人家的大半生去比較,當然妄自菲薄了,人家可以投入的時間就比你多得多。中國程序員職業黃金時期所要面對的干擾非常大,首先是要讓自己融入英語的技術圈子,其次是要應付一個不爭氣沒追求強加個人的世俗文化。

當然小編並不是在長他人志氣,滅本國威風,只是想小小提醒作為程序員的你,一定不要以學編程、拿高薪作為自己唯一的人生目標。就好像創業路上的你,無論在什麼時候,我們都要不斷提升自己的專業度和競爭力,永遠保持一顆熱愛自己事業的工匠之心,堅定的走下去。互聯網行業千變萬化,要不斷的學習,更新知識系統,才能永遠不被這個社會所淘汰。

在我平時所見到的程序員中,如果純以編碼能力來看,個人覺得可以分為五類,依次是:

1.拷貝型

拷貝型選手就是傳說中的「代碼拷貝員」了,他們對實現功能幾乎沒有思路,所作的事情就是從網上或是之前其他團隊成員寫的代碼中拷貝出片段,然後放到項目中,如果運行項目出現了期望結果,則表示任務完成。

這類人只會改代碼,卻不會寫代碼。他們大多對編程毫無興趣,只是希望以此糊口而已。

2.新手型

當產品有功能需求時,由於經驗有限,程序員並不完全知道要如何實現這個功能,需要通過學習、尋找資料等方式來解決問題。

這種情況下的編碼過程,程序員的主要目標是「完成功能」,那麼很難有多餘的心思去考慮邊界條件、性能、可讀性、可擴展性、編碼規範等問題,因此代碼bug可能較多,穩定性不高。常常會發生開發花費1個月,改bug卻要改上好幾個月的事情。

3.學習型

這類程序員對所在領域的語言已經比較了解,對於一般功能可以有較為清晰的實現思路,給出需求時可以通過自己的思路來實現,並且會一定程度上考慮邊界條件和性能問題。但僅此而已,他們對可讀性和可擴展性考慮很少,也沒有項目級別的考慮,主要是希望通過實現代碼來練手或是學習。

這類程序員最大的表現在於喜歡「創造代碼」,即使有現成的實現,他們也希望自己來實現一套,以達到「學習」的目的。他們不喜歡復用別人的代碼,看見項目中別人實現了相類似的功能,他們會以「需求不同」的借口來自己重新實現一套。這類人一般來說對技術有著較為濃厚的興趣,希望能夠通過項目來進行學習。

從項目的角度來說,這種做法最大的麻煩在於開發周期可能較長(相比直接使用現成的實現),並且會使得項目代碼膨脹,影響未來的維護。但這類程序員由於有興趣,如果好好培養或許會成為明天的牛人。

4.實現型

這類程序員一般有較為豐富的經驗,由於寫得太多,因此不再追求「創造代碼」來進行學習,同時對所在領域可能涉及的很多第三方框架或是工具都比較熟悉,當接受到產品需求時,對功能實現方案已經瞭然於胸,因此他們可以快速的實現需求,並且對邊界、性能都有一定程度的考慮。因為能夠快速實現需求功能,經常會被團隊評價為「牛人」。但他們一般僅僅停留在「完成功能」級別上,對代碼的可讀性、可擴展性、編碼規範等考慮較少,對項目總體把握也較少(例如控制項目膨脹、方便部署等架構級別的東西)。

這類程序員最大的表現在於喜歡「開發項目」,卻不喜歡「維護項目」。他們產出的代碼最大的問題就是維護較為困難,可能過上幾個月回頭看自己的代碼都會暈頭轉向。因此即使是自己寫的代碼,仍然不願意維護,一般會苦了後來人。

因為介面設計的缺乏,當需求變更時,發現代碼要改的東西太多,然後抱怨需求變化,卻很少認為是自己的代碼問題。這樣的項目如果經過長時間的變更維護,最終會變得難以維護(一般表現在需求變更響應時間越來越長)甚至無法維護,最終要麼是半死不活,要麼是被推倒重來。

5.架構型

這類程序員比實現型更進一步,他們經驗豐富,對相關框架和工具等都很熟悉,「完成功能」「穩定性」「性能」這些已經不再是他們的追求,更優美的代碼、更合理的架構才是目標。

這類程序員代碼設計大多建立在對需求的詳細了解和對需求變更的預測上——可擴展性較好;代碼細節也盡量多的考慮邊界情況、性能——穩定高效;代碼命名和注釋都恰到好處——可讀性較高;同時在開發過程中他們會不斷重構,對代碼做減法——保證項目可持續發展;等等。

但由於考慮問題較多,單從「實現功能」階段來看,完成速度不一定會比「實現型」要快。只是到了項目中後期優勢才會慢慢體現出來

也許還有更優秀的程序員我沒有見過,呵呵,歡迎大家補充。

抵製程序員雞湯

有很多特質使得一個程序員是優秀的程序員,那麼什麼特質都沒有的自然是一般的程序員了。

1. 創造型/創新型

以創造/創新為樂的程序員。以新的方法解決現有問題,發明方法解決尚未解決的問題。問題本身並不限於技術領域。矽谷很多技術創始人具備這類的品質。雖然他們創業後都不再全職寫代碼,但他們這種品質貢獻了他們事業的第一步;

2. 管家型

以管系統演化為樂的程序員。有潔癖,有強迫症,容不得系統有一點的瑕疵。如果你招聘了一個程序員/架構師,2-3年後你的互聯網產品再也沒有在可見/可擴展性上遇到瓶頸,他多半是這種程序員;

3. 學院派型

通常在CS某一領域擁有博士學位,或者深受他們的影響的人。對該該領域興趣濃厚,通常參與企業核心競爭力相關的研發工作。當然,也有一部分也具備第一種特質,中途去改變世界去了;

4. 經驗型

在行內具有多年豐富的經驗,可承擔責任,考慮全面。團隊擁有了這種人,通常會少走很多彎路。但面對新的挑戰還是要和其他人站在同一起跑線上的;

5. 鐘錶匠型

喜歡並擅長把一個系統從裡到外研究通透的人。分享出來都是從裡到外讓人垂涎欲滴的乾貨。很多後端工程師都是這種類型;

6. 折騰型

擅長「折騰」,方案沒有最好的,只有最難的。:)興趣廣泛動手能力強,通過折騰留下很多技術積累。想用哪一塊的新技術?先問問他把,8成他很久前就已經玩過了;

7. 肉盾型

哥甲高血條長,加班如同切菜一般,逼急了不睡覺也行。只伸手要過兩件東西:原型和咖啡。適合打閃電戰。當然,可能事後要打打後勤重構下代碼。

優秀的程序員,會盡量避免犯這篇文章里提到的這些錯誤:像專家一樣思考,像外行一樣實踐!

看過一篇文章:以色列軍隊是世界上最好的孵化器

文中提到:以色列軍隊中有一種很特別的現象,基礎訓練給所有士兵設定了許多必須服從的條條框框。但當你成為一名下級軍官以後,就需要學會自己思考解決問題。另外,即使基礎訓練使你具備了執行任務的基本條件,但要完成任務,必須要發揮自己的創造力。

不少人會看重上面這段話後面提到的創造力,在這裡我感觸更深的是「基礎訓練給所有士兵設定了許多必須服從的條條框框」這句話——這說明先約束、先有諸多規矩,是日後能發揮創造力的基礎,這和我們中國練書法要求先一絲不苟練習楷書,到有一定基礎了才能修習行書乃至草書是一個道理。

在中國IT行業的「好工程師」應該是什麼樣的?有哪些客觀標準可供自我評估?這個回答中,列出了軟體工程師能力自我評價表(37條)。優秀還是一般,看看37條做到了多少。

在構建之法——現代軟體工程這本書的第三章軟體工程師的成長里,小編寫了一節技能的反面

在我看來,沒有優秀程序員和一般程序員,只有程序員和碼農。

如果按排名第一的 的答案來分類,那就是5是程序員,1234是碼農。

舉個栗子:

A:對於我們這種需要多方合作的項目,還是用git比較方便管理。

B:svn很牛逼的!我用了很多年了!

A:git的分支很方便,合併操作相當簡潔且沒有負擔。

B:svn也有分支!百度上說svn更適合企業!

A:git只有一個.git目錄來管理所有版本,在排除的時候很方便!

B:svn現在也支持單 .svn目錄了!

再舉個栗子:

A:為什麼我們網站的根目錄下面還有個.settings和.project文件夾?

B:我上傳時候直接用flashfxp一拖就上來了,沒看有什麼文件夾。

A:為什麼我剛才pull之後在項目庫下面多了個 未命名.txt 文件?

B:嗯,那是我自己做筆記備份用的。

三舉個栗子:

A:為什麼Hero這個類有1萬行?

B:我覺得把所有功能寫在一個類裡面很方便啊!

A:為什麼這段代碼複製了4次?封裝成函數啊!

B:啊!有么?

A:這幾個類為什麼不用適配器模式?

B:什麼是適配器模式?

最後舉個栗子:

B:怎麼加一個Sprite到Node中?

A:Node.addChild(Sprite)

B:我要在加的時候設置層級關係!

A:RTFM!

碼農真正意識(而不是調侃)到自己是碼農的時候,TA才可能成為一個程序員。

而當TA成為一個程序員的時候,TA才有資格站在山腳下,憧憬著那那高聳入雲的峰頂,開始攀登。

目標已經有了,下面就看行動了!記住:學習永遠是自己的事情,你不學時間也不會多,你學了有時候卻能夠使用自己學到的知識換得更多自由自在的美好時光!時間是生命的基本組成部分,也是萬物存在的根本尺度,我們的時間在那裡我們的生活就在那裡!我們價值也將在那裡提升或消弭!

程序員,加油吧


喜歡這篇文章嗎?立刻分享出去讓更多人知道吧!

本站內容充實豐富,博大精深,小編精選每日熱門資訊,隨時更新,點擊「搶先收到最新資訊」瀏覽吧!


請您繼續閱讀更多來自 程序員之家 的精彩文章:

人工智慧是不是對人體油畫有什麼誤會?
程序員偷懶神器

TAG:程序員之家 |