A. 有什麼東西,程序員覺得很普遍普通,而別人卻沒有的
《The Effective Engineer》的作者在寫書的過程中,為了了解那些頂級程序員和普通程序員的區別,采訪了很多矽谷頂級科技公司的頂尖軟體工程師。他發現這些給世界帶來巨大影響的的工程師們至少有以下5個共同的思維模式:
1.勇於去研究你不懂的代碼
一般人都不願意去研究自己不曾接觸過的代碼,很多人都沒有嘗試就放棄了。如果你經常去研究你沒有接觸過的代碼,你就會越來越熟悉不同的代碼結構和設計模式。現在人們很容易就接觸到優秀的開源代碼資源,你可以很方便的就下載下來做一些改動或者調試,去研究為什麼代碼可以這么寫。
除了代碼之外,很多人對於陌生的工作內容也會感到恐懼。每次換工作的時候,你可能都會遇到新公司的工作內容和以前工作的內容不一樣的情況,以至於剛開始的時候工作效率沒有以前那麼高。很多人甚至覺得,他們是不是騙了面試官。
其實,大家都是在學習的過程中。在一個陌生的領域,沒有人從一開始就是大神。如果你想變得越來越好,無論是寫代碼,與人溝通或者其它的技能,都是需要投入時間去學習的。
2.精通代碼調試(debug)
很多人在寫代碼的過程中,經常會有的一個問題就是:為什麼我寫出來的代碼不能運行?為什麼運行的結果不是我想要的?
幾乎所有的程序員寫代碼都不是一遍就能寫好的。但是頂尖的程序員非常快的就明白自己代碼的問題可能是什麼。這是一個很重要的能力,但是偏偏學校里不教,面試的時候考官也不經常提及。
那麼怎麼去調試代碼呢?其實核心就是以下幾個方法:
1、不妨先猜測一下到底發生了什麼。
2、假設你的猜測是對的,想想你的猜測會導致程序有什麼結果。
3、試著觀察這些結果有沒有異常的地方。
4、如果你沒有發現異樣,那麼說明你的猜測就是對的。
5、如果你發現了異樣,那麼說明你的猜測是錯的,接下來換一個猜測試試。
對於頂尖程序員來說,這個過程在腦海中就是電光火石的一瞬間。只要你解決的問題足夠多,你做出來的猜測就會越准確。
至於如何發現異樣?你就需要有一套自己的工具或者方法論了。最簡單的就是在代碼里輸出日誌來判斷。但是這是比較笨的辦法,你需要去接觸一些高級的工具或者直接帶有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.系統性的思考方式
當你在寫代碼的時候,你很容易就認為只要你按照需求實現了指定的功能,你的代碼就寫完了。但是這其實只是冰山一角。任何沒有發布到生產環境的代碼都不會產生任何價值。
如果想寫出真正有影響力的代碼,你需要從整個系統去理解你的工作:
1、你的代碼和其他人寫的代碼在功能上是什麼關系?
2、你有沒有好好測試你的代碼?或者其他人是否很容易測試你的代碼?
3、為了部署你的代碼,線上生產環境的代碼是不是需要改動?
4、新的代碼會不會影響到已經運行的代碼?
5、在新的功能下,你的目標用戶的行為是不是你期望的?
6、你的代碼有沒有產生商業上的影響?
這些問題都不是很容易就能回答的,但是在寫代碼的時候,你需要明白你的代碼最後會不會得到最好的結果。
B. 普通程序員和優秀程序員的區別是什麼
鏈接:
程序員進階攻略。如何才能持續成長,是每一個程序員都繞不開的話題。入行之初,你可能會困惑於技能選擇的方向和掌握的方法;編程前期,你可能會苦惱於Bug的調試與修復;技術水平達到瓶頸期,你可能又急於尋求突破和上升。除此之外,職業倦怠了,如何去面對?技術停滯了,如何去解決?人到中年,是選擇工作還是選擇生活?換工作?換城市?換方向?如是種種,磨蝕著曾經的樂觀和現在的不甘,是放任自流還是逆流而上?
課程目錄:
開篇詞 (1講)
開篇詞 | 程序行知:走在同樣的路上,遇見自己的風景
征途:啟程之初 (4講)
01 | 初心:為什麼成為一名程序員?
02 | 初惑:技術方向的選擇
03 | 初程:帶上一份技能地圖
04 | 初感:別了校園,入了江湖
修煉:程序之術 (10講)
05 | 架構與實現:它們的連接與分界?
......
C. 頂級的程序員是怎麼樣的
我是程序員。實習過兩家公司,說說我的觀察。
公司有個技術總監,每次跟他聊天總是覺得我錯過了他這樣的方式,人們都很親切,總是說「我要學」,但可怕的是無論他跟他說什麼「哦,這我知道,我們可以交換一個共同的學習」。不管什麼。
他很會照顧我,由於我不是科班出身的,他和我交流盡量不用術語,比如依賴倒置,他和我講的時候告訴我原理以及如何實現,並不會特意提這個名詞。
之後我再看他們寫的代碼,無論什麼情況都能扛得住,並能給出正確的錯誤處理。而我的代碼,簡短,有力,漂亮,滿是奇技淫巧,然而就是不耐操。
我的經歷所認識到的優秀程序員就是這樣:博學,謙虛,積極向上,良師益友,還有代碼十分健壯。
D. 普通程序員和大神級的程序員有啥區別
低級程序員和高級程序員的區別如下:
1、高級程序員之所以高級, 在於他們認識到代碼 bug 是不可避免的。
有千萬種理由可以導致 bug, 但他們可以在設計和邏輯上保證(追求)滴水不漏, 並用邏輯的百分之百准確性還減少代碼 bug。嚴謹的邏輯能力是高級程序員區別於低級程序員的最主要原因。
2、不僅在於他們寫出了邏輯上不完備的系統, 而且還惡劣地引經據典來做錯誤的辯護. 但他們引用的經典是不合時宜的(不能支撐他們的結論)。
正確的做法應該是假設上面的每一行代碼都可能中斷執行, 然後進行相應的對策. 正如狹義上的網路協議其實是廣義上的交互協議, 我們可能把 TCP/IP 協議上的許多思想和機制應用到系統間的交互上來。
3、低級程序員和高級程序員的區別在於邏輯和抽象。
E. 低級程序員和高級程序員的區別
低級程序員認為自己與高級程序員的區別, 主要是高級程序員任何功能都能編碼實現, 編碼速度快, 代碼無 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% 准確的, 例如, 如果對方系統誤報呢? 但其它的異常情況可以根據實際情況來忽略. 如果你發現這段代碼還有重要的邏輯上缺陷, 歡迎告訴我.
記住, 低級程序員和高級程序員的區別在於邏輯和抽象.
F. 初級程序員、中級程序員、高級程序員最大的區別是什麼
程序員之間也是存在很大的區別,他們之間最大的區別主要表現這這個方面,跟大家分享一下。
能力。一些程序員剛剛進入一個單位,學習的東西還不多,他們的能力差距要比老員工差很多。
經驗。有的程序員,自身的能力是提升上去了,但是,由於呆的時間相對比較短,經驗還不是很足,面對一些疑難雜症,還是不能解決。
薪資待遇。因為能力不同,所以獲得的回報也是不一樣的,一般高級程序員的薪資都是非常高的,畢竟他們能夠解決很多困難以及復雜的問題。
當然,除了這幾個方面之外,還有一些也是有差距的,比如說頭發,思維以及工齡等等。
G. 你覺得大神級別程序員與普通程序員差別在哪
具有探索精神,共享精神
H. 大神級程序員和普通程序員的區別
一般神級的程序員會願意去深究自己不懂和不熟悉的代碼,但是普通的程序員還不太適應,他們會選擇逃避,但是時間越久會越發現自己不能這樣。當然,除了代碼,對於工作也是,很多人對於陌生的工作內容也會感到抵觸。但是要想自己能不斷成長就必須要不斷學習的。……還有很多了
I. 普通的程序員和大神級的程序員有什麼區別
普通程序員沒有編程思想,不懂得在工作中思考,工作十年也是個普通程序員,沒有學習路線,不會用Git,命名不規范,結構不規范,不知道如何解決BUG,不會用搜索引擎,如果擁有科學上網的能力,可以使用搜索引擎進行搜索,效率更高,答案更准確。