這是某人在問答**知乎上的提問,很多熱心的程式設計師兄弟作了解答,挑出幾個贊同數高的,大家來對號入入坐?或者對比一下你心中的優秀程式設計師和一般程式設計師?
獲得贊同數最多的回答:
郭凜,簡介:軟體手藝人,自學程式設計18年至今,創業中,愛玩不愛束縛
在我平時所見到的程式設計師中,如果純以編碼能力來看,個人覺得可以分為五類,依次是:
1. 拷貝型
拷貝型選手就是傳說中的「**拷貝員」了,他們對實現功能幾乎沒有思路,所作的事情就是從網上或是之前其他團隊成員寫的**中拷貝出片段,然後放到專案中,如果執行專案出現了期望結果,則表示任務完成。
這類人只會改**,卻不會寫**。他們大多對程式設計毫無興趣,只是希望以此餬口而已。
2. 新手型
當產品有功能需求時,由於經驗有限,程式設計師並不完全知道要如何實現這個功能,需要通過學習、尋找資料等方式來解決問題。
這種情況下的編碼過程,程式設計師的主要目標是「完成功能」,那麼很難有多餘的心思去考慮邊界條件、效能、可讀性、可擴充套件性、編碼規範等問題,因此**bug可能較多,穩定性不高。常常會發生開發花費1個月,改bug卻要改上好幾個月的事情。
3. 學習型
這類程式設計師對所在領域的語言已經比較了解,對於一般功能可以有較為清晰的實現思路,給出需求時可以通過自己的思路來實現,並且會一定程度上考慮邊界條件和效能問題。但僅此而已,他們對可讀性和可擴充套件性考慮很少,也沒有專案級別的考慮,主要是希望通過實現**來練手或是學習。
這類程式設計師最大的表現在於喜歡「創造**」,即使有現成的實現,他們也希望自己來實現一套,以達到「學習」的目的。他們不喜歡復用別人的**,看見專案中別人實現了相類似的功能,他們會以「需求不同」的藉口來自己重新實現一套。這類人一般來說對技術有著較為濃厚的興趣,希望能夠通過專案來進行學習。
從專案的角度來說,這種做法最大的麻煩在於開發周期可能較長(相比直接使用現成的實現),並且會使得專案**膨脹,影響未來的維護。但這類程式設計師由於有興趣,如果好好培養或許會成為明天的牛人。
4. 實現型
這類程式設計師一般有較為豐富的經驗,由於寫得太多,因此不再追求「創造**」來進行學習,同時對所在領域可能涉及的很多第三方框架或是工具都比較熟悉,當接受到產品需求時,對功能實現方案已經了然於胸,因此他們可以快速的實現需求,並且對邊界、效能都有一定程度的考慮。因為能夠快速實現需求功能,經常會被團隊評價為「牛人」。但他們一般僅僅停留在「完成功能」級別上,對**的可讀性、可擴充套件性、編碼規範等考慮較少,對專案總體把握也較少(例如控制專案膨脹、方便部署等架構級別的東西)。
這類程式設計師最大的表現在於喜歡「開發專案」,卻不喜歡「維護專案」。他們產出的**最大的問題就是維護較為困難,可能過上幾個月回頭看自己的**都會暈頭轉向。因此即使是自己寫的**,仍然不願意維護,一般會苦了後來人。
因為介面設計的缺乏,當需求變更時,發現**要改的東西太多,然後抱怨需求變化,卻很少認為是自己的**問題。這樣的專案如果經過長時間的變更維護,最終會變得難以維護(一般表現在需求變更響應時間越來越長)甚至無法維護,最終要麼是半死不活,要麼是被推倒重來。
5. 架構型
這類程式設計師比實現型更進一步,他們經驗豐富,對相關框架和工具等都很熟悉,「完成功能」「穩定性」「效能」這些已經不再是他們的追求,更優美的**、更合理的架構才是目標。
這類程式設計師**設計大多建立在對需求的詳細了解和對需求變更的**上——可擴充套件性較好;**細節也盡量多的考慮邊界情況、效能——穩定高效;**命名和注釋都恰到好處——可讀性較高;同時在開發過程中他們會不斷重構,對**做減法——保證專案可持續發展;等等
但由於考慮問題較多,單從「實現功能」階段來看,完成速度不一定會比「實現型」要快。只是到了專案中後期優勢才會慢慢體現出來。
我個人特別贊同的回答:
何明璐,網名人月神話。關注產品管理,it專案…
1.對程式設計有濃厚的興趣,由興趣能驅動自己的探索和鑽研精神,優秀程式設計師一般喜歡用業餘時間探索和自己琢磨點東西,研究點開源框架和源**,關注新技術,喜歡研究和探索演算法,邏輯方面的內容。
2.優秀程式設計師一般比較懶於做重複的事情,對於重複事情有獨有的程式設計師思維,即通過程式或其它自動化方式解決重複問題,而留更多時間去思考。
4.優秀程式設計師一般有較明顯的自戀和偏執特徵,有較為希望獨自工作的特徵,比較難於被非技術背景管理者駕馭,高度強調自我能力價值的被認可,而且很多優秀程式設計師並不是好教練。
5.優秀程式設計師一般有較為紮實的演算法,資料結構等理論知識的基礎。這些讓他們在迅速進入新領域的時候快人一籌。
很文藝范的回答:
安江澤,知乎清資料工程師
有很多特質使得乙個程式設計師是優秀的程式設計師,那麼什麼特質都沒有的自然是一般的程式設計師了。
1. 創造型/創新型
以創造/創新為樂的程式設計師。以新的方法解決現有問題,發明方法解決尚未解決的問題。問題本身並不限於技術領域。矽谷很多技術創始人具備這類的品質。雖然他們創業後都不再全職寫**,但他們這種品質貢獻了他們事業的第一步;
2. 管家型
以管系統演化為樂的程式設計師。有潔癖,有強迫症,容不得系統有一點的瑕疵。如果你招聘了乙個程式設計師/架構師,2-3年後你的網際網路產品再也沒有在可見/可擴充套件性上遇到瓶頸,他多半是這種程式設計師;
3. 學院派型
通常在cs某一領域擁有博士學位,或者深受他們的影響的人。對該該領域興趣濃厚,通常參與企業核心競爭力相關的研發工作。當然,也有一部分也具備第一種特質,中途去改變世界去了;
4. 經驗型
在行內具有多年豐富的經驗,可承擔責任,考慮全面。團隊擁有了這種人,通常會少走很多彎路。但面對新的挑戰還是要和其他人站在同一起跑線上的;
5. 鐘錶匠型
喜歡並擅長把乙個系統從裡到外研究通透的人。分享出來都是從裡到外讓人垂涎欲滴的乾貨。很多後端工程師都是這種型別;
6. 折騰型
擅長「折騰」,方案沒有最好的,只有最難的。:)興趣廣泛動手能力強,通過折騰留下很多技術積累。想用哪一塊的新技術?先問問他把,8成他很久前就已經玩過了;
7. 肉盾型
哥甲高血條長,加班如同切菜一般,逼急了不睡覺也行。只伸手要過兩件東西:原型和咖啡。適合打閃電戰。當然,可能事後要打打後勤重構下**。:)
引用典籍的回答:
雁渡,講古 | 前microsoft,現創業。
著名部落格作家alex iskold在《明星軟體工程師的十種特質》一文中給出答案:1.熱愛程式設計;2.完成事情;3.持續重構**;4.使用設計模式;5.編寫測試;6.善用現有**;7.專注可用性;8.編寫可維護的**;9.能用任何語言程式設計;10.知曉基本的電腦科學。
特別是2,3,5,6,8,10我覺得是最重要的。
這就是優秀程式猿。
......
優秀的程式設計師和一般的程式設計師差別在哪?
1.拷貝型 拷貝型選手就是傳說中的 拷貝員 了,他們對實現功能幾乎沒有思路,所作的事情就是從網上或是之前其他團隊成員寫的 中拷貝出片段,然後放到專案中,如果執行專案出現了期望結果,則表示任務完成。這類人只會改 卻不會寫 他們大多對程式設計毫無興趣,只是希望以此餬口而已。2.新手型 當產品有功能需求時...
程式設計師人生 優秀程式設計師的法則
本文章的指導法則,使寫 更高效,更容易維護,並且bug和缺陷更少。不要重複 don t repeat yourself 程式設計中乙個最根本的原則就是要避免重複。許多程式設計結構 比如迴圈 函式 類等 的存在就是為了避免重複。每個在程式中有意義的功能片段應該只在源 的一處地方實現。簡單性 避免複雜性...
黑馬程式設計師 一般處理程式(1)
windows phone 7手機開發 net培訓 期待與您交流!在乙個asp.net的專案中新增乙個一般處理程式頁面 ashx 後,檔案中的內容如下,現在就這些內容總結一下裡面的知識點。1.ihttphandler介面 屬性isreusable是用來標示頁面類物件是否能夠被其它請求重用,true表...