1. 程式人生 > >優秀程式設計師和一般程式設計師差別在哪?

優秀程式設計師和一般程式設計師差別在哪?

摘要:在這個世界上有兩種程式設計師:Day Programmers(白班程式設計師)和Night Programmers(夜貓子程式設計師),你知道優秀程式設計師和一般程式設計師有哪些差別嗎?你又是哪一型別的呢?俗話說不想當CEO的程式設計師,不是好的產品經理。程式設計師們,加油吧!

還記得研發頻道此前發表過的一篇《白班程式設計師 VS. 夜貓子程式設計師》嗎?在這個世界上有兩種程式設計師,我們稱之為:Day Programmers(白班程式設計師)和Night Programmers(夜貓子程式設計師)。本文我們將探討優秀程式設計師和一般程式設計師有哪些差別,看看您是屬於那一種?來自知乎網上的大牛們各抒己見,一起來看下他們是如何區分的。

秀程式設計師和一般程式設計師差別在哪?

創業者 郭凜:如果純以編碼能力來看,可分為五類

1. 拷貝型

拷貝型選手就是傳說中的“程式碼拷貝員”了,他們對實現功能幾乎沒有思路,所作的事情就是從網上或是之前其他團隊成員寫的程式碼中拷貝出片段,然後放到專案中,如果執行專案出現了期望結果,則表示任務完成。這類人只會改程式碼,卻不會寫程式碼。他們大多對程式設計毫無興趣,只是希望以此餬口而已。

2. 新手型

當產品有功能需求時,由於經驗有限,程式設計師並不完全知道要如何實現這個功能,需要通過學習、尋找資料等方式來解決問題。這種情況下的編碼過程,程式設計師的主要目標是“完成功能”,那麼很難有多餘的心思去考慮邊界條件、效能、可讀性、可擴充套件性、編碼規範等問題,因此程式碼bug可能較多,穩定性不高,常常會發生開發花費1個月,改bug卻要改上好幾個月的事情。

3. 學習型

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

這類程式設計師最大的表現在於喜歡“創造程式碼”,即使有現成的實現,他們也希望自己來實現一套,以達到“學習”的目的。他們不喜歡複用別人的程式碼,看見專案中別人實現了相類似的功能,他們會以“需求不同”的藉口來自己重新實現一套。這類人一般來說對技術有著較為濃厚的興趣,希望能夠通過專案來進行學習。從專案的角度來說,這種做法最大的麻煩在於開發週期可能較長(相比直接使用現成的實現),並且會使得專案程式碼膨脹,影響未來的維護。但這類程式設計師由於有興趣,如果好好培養或許會成為明天的牛人。

4. 實現型

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

這類程式設計師最大的表現在於喜歡“開發專案”,卻不喜歡“維護專案”。他們產出的程式碼最大的問題就是維護較為困難,可能過上幾個月回頭看自己的程式碼都會暈頭轉向。因此即使是自己寫的程式碼,仍然不願意維護,一般會苦了後來人。因為介面設計的缺乏,當需求變更時,發現程式碼要改的東西太多,然後抱怨需求變化,卻很少認為是自己的程式碼問題。這樣的專案如果經過長時間的變更維護,最終會變得難以維護(一般表現在需求變更響應時間越來越長)甚至無法維護,最終要麼是半死不活,要麼是被推倒重來。

5. 架構型

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

這類程式設計師程式碼設計大多建立在對需求的詳細瞭解和對需求變更的預測上——可擴充套件性較好;程式碼細節也儘量多的考慮邊界情況、效能——穩定高效;程式碼命名和註釋都恰到好處——可讀性較高;同時在開發過程中他們會不斷重構,對程式碼做減法——保證專案可持續發展等等,但由於考慮問題較多,單從“實現功能”階段來看,完成速度不一定會比“實現型”要快。只是到了專案中後期優勢才會慢慢體現出來。

知乎刪程式碼工程師 安江澤:創造型、管家型、學院派、鐘錶型、折騰型

1. 創造型/創新型

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

2. 管家型

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

3. 學院派型

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

4. 經驗型

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

5. 鐘錶匠型

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

6. 折騰型

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

7. 肉盾型

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

iApp4Me創始人、iOS開發者郝培強:七大標準 邏輯思維很重要

優秀程式設計師的標準:

  1. 要懂邏輯,這點其實挺難達到,很多很不錯的程式設計師其實邏輯能力不行,所以我覺得限制了他們更深一層次的發展,或者說限制了他們解決特別複雜問題的能力。
  2. 要有分析能力。這也是解決複雜問題不可或缺的能力。
  3. 要會自學,技術發展速度很快,如果沒有自學能力會被淘汰的。所以在中國英語要好,不然看不懂最新的技術走向。
  4. 要有良好的時間管理習慣和意識。
  5. 要有耐心,肯於付出。
  6. 要有良好的工作習慣。
  7. 會看且勤於看文件。

產品管理、IT專案管理 何明璐:優秀程式設計師具有較明顯的自戀和偏執特徵

  1. 對程式設計有濃厚的興趣,由興趣能驅動自己的探索和鑽研精神,優秀程式設計師一般喜歡用業餘時間探索和自己琢磨點東西,研究點開源框架和原始碼,關注新技術,喜歡研究和探索演算法,邏輯方面的內容。
  2. 優秀程式設計師一般比較懶於做重複的事情,對於重複事情有獨有的程式設計師思維,即通過程式或其它自動化方式解決重複問題,而留更多時間去思考。
  3. 優秀程式設計師更多的會從簡單功能實現,花哨的介面轉移到對安全,效能,可擴充套件等底層架構的關注。
  4. 優秀程式設計師一般有較明顯的自戀和偏執特徵,有較為希望獨自工作的特徵,比較難於被非技術背景管理者駕馭,高度強調自我能力價值的被認可,而且很多優秀程式設計師並不是好教練。
  5. 優秀程式設計師一般有較為紮實的演算法,資料結構等理論知識的基礎。這些讓他們在迅速進入新領域的時候快人一籌。

總結:

不管是優秀程式設計師還是一般程式設計師,小編認為只要你喜歡思考,愛學習,對編碼有興趣,那麼你就是最好的。當然掌握技術才是硬道理,套用別人的一句話“不想當CEO的程式設計師,不是好的產品經理”。程式設計師們,加油吧!