非著名程序員
❶ 頂級的程序員是怎麼樣的
所謂的高手在人間,低調才是真正的高調,頂級的一般都是默默無聞的。
公司有個技術總監,每次跟他聊天總是覺得我錯過了他這樣的方式,人們都很親切,總是說「我要學」,但可怕的是無論他跟他說什麼「哦,這我知道,我們可以交換一個共同的學習」。不管什麼。
他很會照顧我,由於我不是科班出身的,他和我交流盡量不用術語,比如依賴倒置,他和我講的時候告訴我原理以及如何實現,並不會特意提這個名詞。
之後我再看他們寫的代碼,無論什麼情況都能扛得住,並能給出正確的錯誤處理。而我的代碼,簡短,有力,漂亮,滿是奇技淫巧,然而就是不耐操。
我的經歷所認識到的優秀程序員就是這樣:博學,謙虛,積極向上,良師益友,還有代碼十分健壯。
❷ 頂級的程序員是怎麼樣的
1. 勇於去研究你不懂的代碼
一般人都不願意去研究自己不曾接觸過的代碼,很多人都沒有嘗試就放棄了。如果你經常去研究你沒有接觸過的代碼,你就會越來越熟悉不同的代碼結構和設計模式。現在人們很容易就接觸到優秀的開源代碼資源,你可以很方便的就下載下來做一些改動或者調試,去研究為什麼代碼可以這么寫。
除了代碼之外,很多人對於陌生的工作內容也會感到恐懼。每次換工作的時候,你可能都會遇到新公司的工作內容和以前工作的內容不一樣的情況,以至於剛開始的時候工作效率沒有以前那麼高。很多人甚至覺得,他們是不是騙了面試官。
其實,大家都是在學習的過程中。在一個陌生的領域,沒有人從一開始就是大神。如果你想變得越來越好,無論是寫代碼,與人溝通或者其它的技能,都是需要投入時間去學習的。
2. 精通代碼調試(debug)
很多人在寫代碼的過程中,經常會有的一個問題就是:為什麼我寫出來的代碼不能運行?為什麼運行的結果不是我想要的?
幾乎所有的程序員寫代碼都不是一遍就能寫好的。但是頂尖的程序員非常快的就明白自己代碼的問題可能是什麼。這是一個很重要的能力,但是偏偏學校里不教,面試的時候考官也不經常提及。
那麼怎麼去調試代碼呢?其實核心就是以下幾個方法:
不妨先猜測一下到底發生了什麼。
假設你的猜測是對的,想想你的猜測會導致程序有什麼結果。
試著觀察這些結果有沒有異常的地方。
如果你沒有發現異樣,那麼說明你的猜測就是對的。
如果你發現了異樣,那麼說明你的猜測是錯的,接下來換一個猜測試試。
對於頂尖程序員來說,這個過程在腦海中就是電光火石的一瞬間。只要你解決的問題足夠多,你做出來的猜測就會越准確。
至於如何發現異樣?你就需要有一套自己的工具或者方法論了。最簡單的就是在代碼里輸出日誌來判斷。但是這是比較笨的辦法,你需要去接觸一些高級的工具或者直接帶有Debug功能的編輯器。
3. 重視能夠節約時間的工具
最近打敗人類的AlphaGo每天可以進行上百萬局的下棋訓練,我們人類一萬個小時的訓練卻需要10年之久。也就是說,電腦運行幾分鍾,可能就等於人類工作好幾年。
曾經在Facebook擔任技術總監的Bobby Johnson描述過,高效率的程序員都把時間花在製作工具上。
很多人也認為工具是很重要的,但是他們並沒有花時間去製作、整合自己的工具。但是,Jonson團隊最出色的員工耗費了他們1/3的時間在工具製作上,這些工具可以用來發布代碼,監控系統,以及能讓他們花更少的時間去做更多事情。
總之,不要花時間去做機器可以代替你去做的事情。
4. 優化你的迭代速度
假設你要花12秒鍾去搜索某個函數是在哪裡定義的。再假設你每天做這個動作60次,那麼你每天就要花12分鍾去搜索函數定義。
如果你用一個好一點的編輯器,每次找到函數定義只要2秒鍾,那麼你每天就會節約10分鍾。每年你就可以節約40個小時。
如果你能找到3個這樣的場景去優化一下,那麼你每年可以節約一個月的時間。想想這一個月你可以做多少有意義的事情。
再假如你在調試一個App的bug的時候,改完一次代碼都需要重啟一下App,然後點擊4、5次才能看到bug有沒有改好。那麼你是不是可以先花幾分鍾設置以下,讓App一啟動就轉到顯示Bug的頁面呢?
千萬不要小看這些瑣碎的細節,改善它們的回報是巨大。
5. 系統性的思考方式
當你在寫代碼的時候,你很容易就認為只要你按照需求實現了指定的功能,你的代碼就寫完了。但是這其實只是冰山一角。任何沒有發布到生產環境的代碼都不會產生任何價值。
如果想寫出真正有影響力的代碼,你需要從整個系統去理解你的工作:
你的代碼和其他人寫的代碼在功能上是什麼關系?
你有沒有好好測試你的代碼?或者其他人是否很容易測試你的代碼?
為了部署你的代碼,線上生產環境的代碼是不是需要改動?
新的代碼會不會影響到已經運行的代碼?
在新的功能下,你的目標用戶的行為是不是你期望的?
你的代碼有沒有產生商業上的影響?
❸ 低級程序員和高級程序員的區別
低級程序員認為自己與高級程序員的區別, 主要是高級程序員任何功能都能編碼實現, 編碼速度快, 代碼無 bug. 正如一慣的那樣,
低級程序員之所以低級, 正是因為他們勉強能看到(或者根本看不到)事物的表象而看不到本質. 所以, 低級程序員總結出的一切東西,
你都可以大膽的忽略.
所以, 我們來聽聽高級程序認為自己與低級程序員的區別是什麼. 高級程序員之所以高級, 在於他們認識到代碼 bug 是不可避免的,
有千萬種理由可以導致 bug, 但他們可以在設計和邏輯上保證(追求)滴水不漏, 並用邏輯的百分之百准確性還減少代碼 bug. 沒錯,
嚴謹的邏輯能力是高級程序員區別於低級程序員的最主要原因.
可以舉一個簡單常見例子: 網路購票終端的開發. 當然, 比低級程序員還低級的程序員做不出來. 我們先看看低級程序員是怎麼做:
order = Db::new_order();
ret = Network::place_order(order);
if(ret == TRUE){
order.finish();
}else{
order.cancel();
}
你看到的沒錯, 這段代碼邏輯清晰, 一般 90% 的情況都能正常工作, 有的甚至能達到 99%, 在某些特定的時間段, 這樣的系統 100% 能正常工作(幾乎是完美的系統).
你可能發現了問題: 網路是不可靠的, 網路請求可能發出去了, 也可能沒發出去; 對方可能收到了, 也可能沒收到; 響應可能由對方發出去了, 也可能沒發出去; 你可能收到了響應, 也可能沒收到.
但是, 低級的程序員會這樣解釋: 我用的是 TCP 協議, "TCP 是一種可靠的傳輸協議", 哈! 可笑的照本宣科. 這種低級程序員,
不僅在於他們寫出了邏輯上不完備的系統, 而且還惡劣地引經據典來做錯誤的辯護. 但他們引用的經典是不合時宜的(不能支撐他們的結論).
正確的做法應該是假設上面的每一行代碼都可能中斷執行, 然後進行相應的對策. 正如狹義上的網路協議其實是廣義上的交互協議, 我們可能把 TCP/IP 協議上的許多思想和機制應用到系統間的交互上來.
簡單來講, 可以加上就是重試(超時重傳)和對賬(請求確認). 所以, 邏輯上更准確的代碼應該是這樣:
Process_0{
order = Db::new_order();
}
Process_1{
order = Db::find_new_order();
ret = Network::query_order_result(order);
if(ret == NOT_FOUND){
ret = Network::place_order(order);
if(ret == TRUE){
order.finish();
}else{
order.cancel();
}
}
}
Process_0 和 Process_1 是相互獨立的處理邏輯.
Process_0 即處理用戶交互, 接受訂單.
Process_1 請求服務提供商進行對賬. 進行采購下單(補單), 更新訂單狀態.
上面的代碼邏輯實現了重試(超時重傳), 對賬(請求確認). 但上面的代碼在邏輯上還不是 100% 准確的, 例如, 如果對方系統誤報呢? 但其它的異常情況可以根據實際情況來忽略. 如果你發現這段代碼還有重要的邏輯上缺陷, 歡迎告訴我.
記住, 低級程序員和高級程序員的區別在於邏輯和抽象.
❹ 西方的程序員眼裡,東方的程序員是什麼樣的
最近,在國外著名的stackexchange網站上出現了一個有趣的問題,有人問:西方的程序員眼裡,東方的程序員是什麼樣的?
他描述道:
世界的東方(印度/中國/菲律賓)是西方(美國/歐洲)的主要軟體外包服務提供者。
你是否有過與這種離岸外包團隊合作的經歷?如果有,感覺如何?
你對這些來自東方的程序員有沒有一些總結性的看法和觀點(比如:他們是否合作,是否能按時提交代碼,寫出的程序是否有質量?)。依據是什麼?
讀者的回復很踴躍,其中一個被頂的最高的回答是關於印度人的,回答中他說一個印度分包商給他們開發了一個組件,他認為這是他接觸過的最恐怖的程序,裡面最大的一個文件體積超過600KB,大概有3萬多行。他向上天乞求希望自己永遠不需要去維護這樣的代碼。這位答復者說他在印度生活了3個月,發現東方人和西方人在文化上的差異很大,印度人很勤奮,但常常卻不能把事情做對。印度人里有個根深蒂固的文化,就是從不說no,他說即使你到副食品商店裡要求買一條毯子,店主也會說「是,先生,稍等一會」,然後派一個小孩到外面商店把東西買回來。這雖然在生意上是好的做法,但未必適用於做軟體開發。
另外一個回復是關於俄國人的,同樣,他覺得這些俄國人寫的代碼頂多當作原型來使用,最終都會被丟掉,不能用。
我找了很久,終於在帖子的最底部發現一個關於中國程序員的回復,不過內容非常的有趣:
到現在,我在中國已經待了2年多一點時間了(我是個加拿大人),跟中國的開發人員一起共事你會感到非常的奇特。我敢說上面這些關於東方的程序員的總結都是正確的,至少對於中國人是這樣的。我遇到的/一起共事的大多數開發人員基本屬於這種情況:
*缺少上進心和創造性。這里我並不想說他們很差勁或愚蠢。也許更可能是一種文化。在歷史上他們就有一種官本位和崇尚權威的傳統。於是他們對來自「上面」的糟糕的設計從不提出疑議。同樣,他們更多的是關注技術技巧,而忽略業務領域知識。我費力九牛二虎之力教他們模式和各種抽象概念,直到他們能應用這些東西到他們手頭的任務中。然而,過不了多久,就像是決堤的洪水,他們竟然肆無忌憚的挑戰權威,至少在技術層面上是這樣的,我可不想弄得簽證被撤銷。;-)
*磨擦前面這個問題說過,但我要強調一下。這也許是最重要的一個問題,是產生中國開發人員跟這里的海外同事(這里是加拿大人)共事時產生緊張關系的原因。通常,我在這里共事的西方人會特意的誇大跟東方人共事時東方人的一些不好的方面。我這些加拿大同事對人友好但在代碼審查時極其的苛刻。如果發現這些中國程序員一個小失誤或沒有使用好的編寫方法,他們就是發脾氣、大呼小叫。但當他們自己被禮貌的要求也按照這種要求完成他們自己的任務時,他們也會發脾氣、大呼小叫。
*犧牲中國人並不以介意使用蹩腳的二手器械。我坐壞了三把椅子後才終於要了一把稍微舒服一點的椅子。可是當我坐上這把較好的椅子後,突然感覺不是很好,因為看到這些中國人仍然坐在好像是中世紀那麼原始的椅子上。然而,等我訪問了這家公司的總部後,我發現這里的程序員的一張桌子就有我們4~6個人的團隊的佔地面積那麼大,更別提他們的椅子了!
在起初,他們編寫的程序並不是很好。這當然是文化上產生的裂痕,但這也是開始時糟糕的系統設計產生的很陡的學習曲線造成的。但你們知道嗎,兩年之後,這個系統中一些最優秀的模塊都是出自中國公司。於是這就更加明顯的導致了雙方程序員的磨擦加劇…
坦白的說,這幾年走過來不容易,以個人經驗判斷事情的趨勢,我認為對這個問題的看法是正確的。
做為一個中國人,對於西方人對我們的看法和觀點,我覺得不需要去急著找他們的論點漏洞進行反駁。你可感到到他們對東方人的不滿是一種普遍彌漫的氣氛,俗話說,蒼蠅不叮無縫的蛋,我們應該還是先從自身找問題,有則改之,無則加勉。
❺ 國外程序員編程水平真的不如中國程序員嗎
世界上任何一個程序員都必須知道黑客等級,黑客等級是世界上權威的編程競賽組織(或軟體工程師編程水平測試平台)。大約三個月前,hacker rank再次組織並發起了一系列的編程競賽,涉及全球數十萬程序員。
此外,中國百昌匯首席技術官朱瑞卿表示:「我個人覺得,僅僅通過黑客排名的數據,就可以看出中國工程師在培訓和積累方面已經排在世界第一位,缺乏說服力的有中國背景的工程師比其他國家的工程師強得多。」數學邏輯的。但同時,負面影響是我們在數理邏輯上花太多時間,缺乏探索性技能訓練中國工程師更注重單打獨斗。一個人或一個小團隊可以完成非常困難的任務,並且完成得很好。」
❻ NASA 頂級程序員是如何編程的
你好:美國國家航空航天局(NASA)開發人員的工作是編程界最具挑戰性的工作之一。 他們編寫代碼並開發關鍵任務應用程序,安全是他們主要關注的重點。
在這種情況下,制定嚴謹的編碼准則並遵循,對於他們來說十分重要。這些規則涵蓋了軟體開發的各個方面,如應該如何編寫軟體,應該使用哪些語言特性等等。
盡管很難就一個編碼標准達成共識,NASA 的 JPL 首席科學家 Gerard J. Holzmann 還是制定了一套名為「發展安全關鍵代碼的十大規則」的代碼准則,由所有工作人員共同遵循。
由於 JPL 的工作內容與 C 語言相關,因此本指南主要關注用 C 編程語言編寫的代碼。但也可以靈活運用到其他語言上。
NASA 的十大編碼准則如下:
1、簡化控制流程:使用盡可能精簡的控制流程構造編寫程序 – 不要使用 setjmp 或 longjmp 構造、goto 語句,以及直接或間接的遞歸調用。
2、為循環使用固定次數上限:所有的循環必須有一個固定的上限。 必須可以被某個檢測工具靜態證實,該循環不能達到預置的迭代上限值。如果該上限值不能被靜態證實,那麼可以認為違背該原則。
3、不要在初始化完成後進行動態內存分配。
4、不使用冗長的函數:如果標准格式為一個語句一行、一個聲明一行,那麼函數的長度應在一張紙的范圍內,即每個函數的代碼行不能超過 60。
5、低斷言密度:代碼中斷言的密度平均低至每個函數 2 個斷言。斷言被用於檢測在實際執行中的異常情況。斷言必須沒有副作用,並應該定義為布爾測試。當一個斷言失敗時,應該執行一個明確的恢復操作,例如,把錯誤情況返回給執行該斷言失敗的函數調用者。對於靜態工具來說,任何能被靜態工具證實其永遠不會失敗或永遠不能觸發的斷言違反了該規則(例如,通過增加無用的 assert(true) 語句是不可能滿足這個規則的)。
6、以最小范圍級別聲明數據對象:該原則同時也是數據隱蔽(Data hiding)的基本原則。所有數據對象均必須以盡可能最小的范圍級別進行聲明。
7、檢查參數和返回值:應在每次調用函數後檢查非空函數的返回值,並在每個函數內部檢查參數的有效性。
8、限制預處理程序的使用:預處理器的使用僅受包含頭文件和簡單的宏定義的限制。符號拼接、可變參數列表(省略號)和遞歸宏調用不被允許。所有的宏必須擴展為完整的語法單元。通常不建議使用條件編譯指令,但也不總是能夠避免每次在代碼中這樣做的時候必須有基於工具的檢查器進行標記,並有充足的理由。
9、限制指針的使用:具體來說,不允許有超過一級的解除指針引用。解除指針引用操作不可隱藏在宏定義或類型聲明中。不允許使用函數指針。
10、編譯所有代碼:從開發工作第一天開始時,在編譯器開啟最高級別警告選項的條件下對代碼進行編譯。在此設置之下,代碼必須零警告編譯通過。代碼必須通過源代碼靜態分析工具,每天檢查一次以上,且零警告通過。
請參考!
❼ 你知道世界上有哪些著名的程序員嗎
麥咖啡最牛逼
❽ 作為一個java程序員經常上的網站
1、深度開源:一個成立於2005年的開源技術社區,致力於開源項目的推廣與開源價值內發掘,java程序員在這里可以分享容開源項目相關資訊、文檔、資源,以及任何任何技術編程相關的問題及知識;
CSDN社區
❾ 怎樣能成為頂級的程序員
我是程序員。實習過兩家公司,說說我的觀察。
第一家公司有個技術總監,每次跟他聊天總是只感覺我差一點兒就能超過他的那個樣子,人很和藹,總是會說『我也要學一下』,然而恐怖之處在於無論和他聊什麼他都有那種『哦,這個我了解過一些,我們可以交流一下,共同學習』。無論什麼。
他很會照顧我,由於我不是科班出身的,他和我交流盡量不用術語,比如依賴倒置,他和我講的時候告訴我原理以及如何實現,並不會特意提這個名詞。
我和他聊過一些東西,從應用層到ASCII碼,從前端到GC,無所不知。而且他總是特別謙虛。
最後我走的時候說實話是很不捨得的。他拉著我說了很多,告訴我以後應該怎麼做,要多了解整個項目架構,不能只是做自己的工作。要學會幫助其他同事,解決他們的問題。要穩住自己。
我離開之後才發現,那家公司是多麼好。
第二家公司是個大公司。
我的lead,七零後。他周末在家還在學習,晚上會補作業到12點。我見過他寫lazyload,也見過他給iOS講性能優化。當然,還有非常高超的領導力。
他們寫的代碼並沒有上面說的特別優雅,我見過的,而且要說代碼的好看程度,比我寫得規范漂亮的應該也不多。他們有一個共同特點是很繁瑣,非常的繁瑣。我一度很不喜歡這種代碼,覺得很醜,而且很復雜。我問過以後終於發現和他們的差距,那叫做代碼的健壯性。
之後我再看他們寫的代碼,無論什麼情況都能扛得住,並能給出正確的錯誤處理。而我的代碼,簡短,有力,漂亮,滿是奇技淫巧,然而就是不耐操。
我的經歷所認識到的優秀程序員就是這樣:博學,謙虛,積極向上,良師益友,還有代碼十分健壯。
❿ 為什麼程序員特別容易出高智商低情商的人以及憤青
注意,此文的背景是西方國家,所提的程序員也是西方國家的人,和中國的程序員無關。 首先糾正一個偏見,就是說純粹科學家都是書獃子,其實不然,20世紀早期的著名物理學家個個都是高富帥(就是貴族精神,真正的高富帥,不是土豪,土著),例如薛定諤有幾個情婦,一點也不見得書獃子,主要是媒體宣傳得多霍金,導致普通人都認為物理學家就是那樣的。數學家雖然比物理學家們沉默的多,但是也很少做出一些出格的不經思考的問題。至於其他種類的科學家,因為實驗設備的限制,不可能完全自己閉門研究,因此必定要和別人交往。而純粹程序員(特別是學院派的)卻有很多低情商(此處指不懂社會)憤青,學院里除了社會科學就是軟體工程會出憤青了 但是在同樣要求嚴謹思維的計算機軟體行業,卻出現了很多高智商低情商的人,他們的編程水平屬於世界一流,但是很多行為要麼就是反社會,要麼就是不經思考。此處的程序員指對軟體進行深入研究者,就像純粹科學家那樣,不包括比爾蓋茨等成功企業家。很多著名程序員都是黑客出身,專門入侵美國政府網站,成為麻煩份子。更多的學院派程序員是極左的憤青,例如理查德斯托曼(GNU創始人),推行所謂的「自由軟體」,實質上是「軟體共產主義」,問題是,他自己開源就行,卻要討伐任何不開源的軟體,一廂情願地以為所有人都能夠像他那樣「為了興趣」而編程。而且他的很多行為都已經成了行為藝術了,為了彰顯他的理念故意做一些愚蠢的行為,例如喬布斯死了他就踩一腳說活該,頗有韋斯特波羅教派的作風,還有賣「龍芯」電腦,說這個電腦連BIOS都是開源的(諷刺的是,做硬體的都知道龍芯的內幕,難道他認為抄襲等於自由?)而且他宣揚的自由軟體意識形態,本意是鼓勵更多人參與開發軟體(或者學習軟體源代碼,應用到工作中,實質上就是通過這玩意兒賺錢),但是恰好會毀掉軟體業,因為軟體業的發展事實上都是靠利益推動的。 還有前段時間(大概幾個月前,以前的豆瓣賬號寫過那篇文章的)把MIT弄得天翻地覆的黑客,被抓了就乾脆自殺,以及最近的斯諾登,硬要往更不自由的地方逃(他是間諜我無話說。如果不是間諜,那麼肯定相信了古巴社會主義那套童話了,不過也有很多憤青被朝鮮、古巴的幾棟樣板樓房就騙倒了,如果他逃往古巴,那就出不來了,那些死要面子的獨裁者肯定不想讓幻想破滅的他向全世界宣揚國內的丑聞吧,不要也用不著沒收旅遊者的手機了) 至於普通程序員(和黑客),更是不懂時事的憤青,輕易被利用,例如匿名者組織,基本上都被恐怖分子利用來進行破壞了,他們宣揚網路自由,總是去攻擊民主國家的政府和公司網站,但是卻從來不敢動一下中國的大防火牆,或者亞非拉各種獨裁國家的網路。還有本來認為可以防止政府操縱經濟而創立的比特幣,結果成了國際犯罪的綠色通道(交易查不到,而且多一種方法洗錢,找個高智商低情商程序員來接盤比特幣,和傳銷一樣,找個傻逼下家接盤)基本上用一句概括就是這些程序員活在自己一廂情願的童話里,做事不考慮後果。 如果他們僅僅是「相信能夠創造更美好的世界」就算了,但是他們很多本質上是自大的(越來越覺得他們心理上還是十四歲),例如ubuntu社區的態度,一點也不ubuntu(自己查ubuntu的本意),倒是充滿了美國高中生的「小社團」(clique)特色。