摘要: 如何才能成為一個頂尖的程序員呢?Java頂尖程序員Lukas Eder和我們分享了偉大程序員應該具備的十大特質,他表示這十大特質並不是偉大程序員所特有的,任何領域的領導者可以說都有這些特質。
《天下無賊》中由葛優飾演的黎叔曾說過一句話:“21世界什麼最貴?——人才最貴。”人才對成功來說至關重要,而且人才和天才還是不一樣的,天才大部分是要有天賦的,而人才即使你沒有天賦,遵照規律發展,通過後天努力也可以達到。
如何才能成為一個頂尖的程序員呢?Java頂尖程序員Lukas Eder和我們分享了偉大程序員應該具備的十大特質,他表示這十大特質並不是偉大程序員所特有的,任何領域的領導者可以說都有這些特質。當然這只是Lukas Eder的一家之言,如果你有不同觀點或者其它補充歡迎在下方留言評論。
1.學會提問
在日常的工作和生活當中,我們常常會遇見以下幾種人:
完美主義者:當開源工具出現問題時,可能這時程序員通過調試代碼找到了問題的真正原因就萬事大吉了。但是完美主義者就不會這樣,他們往往會重新看待這個問題,重現步驟,並找到潛在的解決辦法。
善談者:這一類人幾乎不會正式的提出問題。因為他們很喜歡和大家交流自己的想法,在交談中他們就會提出自己的疑問,徵詢大家的意見或者自己主動去找到答案。
代碼搬運工:這類人面對問題往往會是這樣的反應,“這是一段代碼,為什麼它會出問題呢?”少年,請不要放棄治療啊!
經理:這類人由於職業的特殊性,他們往往尊崇時間就是金錢,出現問題一定要在最短的時間內解決。大多數情況下,這種“急行軍”式解決問題的方式會忽略掉一些細節,導致問題的解決治標不治本。
抱怨者:這類人也不會提出問題,他們遇到問題就只會抱怨,但是你要知道抱怨其實是無濟於事的。
工作學習到如今,相信每一個程序員都明白解決一個問題比書本知識要收穫多,所以在日常工作中一定要善於發問,遇到問題要積極解決。
2.學會自我思考
上一條我們講瞭如何提問,這一條我們又要講如何避免提問,你可能會想這是不是自相矛盾呀。其實這並不矛盾,上一條我們是要大家善於發現問題,而這一條我們講的是發現問題之後,首先要嘗試自己解決,而不是尋求他人幫助。
很多人認為遇到問題尋求他人幫助是解決問題最有效的途徑。其實不然,如果你去嘗試自己解決問題,就會發現這種方式好處不要太多:
首先,你會掌握一種自我學習的方法,請記住,方法永遠比知識更重要。
自己解決的問題印象更深刻,自己找到的知識更有價值。
剔除掉無用的“噪音”,因為每個人對於問題的理解不同以及個人表述的局限,向別人求助時,往往不會準確的獲得問題的解決方案。
解決問題不能一味圖快,如果短時間內問題不能得到完美解決,那麼你可以再給自己一段時間去收集更多的信息,這樣往往會得到更好的解決。
通過解決問題來訓練自己,從而提出更有價值的問題。
3.欲速則不達
在這個被“快餐文化”充斥的世界,人類想要所有的事情都加速進行,程序也不例外。在現實生活中,程序員為了趕進度,及時上交項目,往往會找捷徑來解決。但是代碼不會說謊,你對代碼不給予足夠的重視,那麼你的應用程序效果不好就幾乎是必然事件。
本傑明·富蘭克林曾說過:低價格的甜蜜被忘記後,低質量的痛苦會存在很久。所有的事情都是如此,當我們通過某種手段快速獲得勝利,這勝利背後一定會有很嚴重的後遺症。
4.理想的軟件應該是確定性的
在理想的世界中,軟件中的一切都是“確定性的”,而我們是功能性的程序員,只編寫特定功能,就像String.contains(),無論執行多少次結果總是和預期的相同,這就是確定性。
我們也可以在自己的程序中編寫類似的side-effect (副作用)模塊,這會讓我們的編程有更多的選擇空間。確定性編程可以使用任何語言來完成,有些語言可能有很多工具通過複雜的類型系統來規避意外的副作用。但是,在下面的例子中,我們是允許確定性的:
5.墨菲定律
上文中我們說到理想的世界是確定性的,而現實世界卻是不確定的,處處充滿驚喜和意外。相信看過《愛情公寓》的人,都對胡一菲說過的墨菲定律印象深刻,簡單來說,墨菲定律就是當一件事情看似是好壞機率相同,但是它往往會朝著壞的方向發展。
所以,在編寫代碼的時候,我們也要考慮墨菲定律,對於代碼中的小漏洞不要抱有僥倖心理,要盡量完善自己的代碼。
6.摒棄“教條主義”
Jochen Mader曾說:“A good developer is like a werewolf: Afraid of silver bullets.”(中文可以理解為一個好的開發者就像狼人一樣,也懼怕銀子彈。)
我們所學到或者教授的知識都存在潛在的錯誤,尤其是在你風頭正盛的時候。
程序員這個職業其實並不純粹,我們總是喜歡把自己當做數學家,認為最純粹的思想會一直存在,並且一定是正確的。其實,程序員的職業建立在數學之上,是滿足現實世界業務需求的務實世界,坦白的說,這並不完美。
我們來看一些最流行的編程語言:
C
Java
SQL
這些語言都和數學既有關聯又不完全一樣,例如C語言的段錯誤、Java泛型或者是SQL三值邏輯。編程語言是由實用主義者建立的平台,所以我們會發現有些功能的背景很淺白,而那些理論背景很酷的往往沒有被採用。
不僅是編程語言,建立在編程語言之上的庫、設計模式、架構等等都是如此。為上下文設計的工具沒有對錯,它們的本質就只是工具而已。作為程序員,有時你不必搞清楚這些工具的來龍去脈,只要用好它們就可以了。
XML
JSON
功能編程
面向對象編程
設計模式
微服務
三層架構
DDD
TDD
In fact:* DD
7.溫故而知新
論語中有這麼一句話“溫故而知新”。很多程序員停留在“好”或者是邁向“好”的路上,而沒有成為偉大的程序員,原因就是因為他們只實踐了這句話的前半段。
這些程序員總是在做自己熟悉的事情,並通過多次練習逐漸更快的完成任務。
而偉大的程序員還得看重這句話的後半段,完成這個功能,不僅要完成的快,還要完成的有新意。
8.專注於一個目標(這裡指的是長遠目標)
最近,全棧工程師是很火的一個概念,其實在我看來,好的全棧工程師不常有,大多數的全棧工程師是各方面都成績平平,可能他熟悉很多業務邏輯,可以快速引導一個新的軟件,但是這種工作是非常粗糙的,也許對於最小可行的產品階段是好的,但從長遠來看,這會導致更複雜的問題,甚至會使整個開發團隊的成員都無法進行正確分析。
與其,做一個馬虎的全棧工程師,還不如只專註一個方向,並且紮根下去,精益求精。
9.廣泛涉獵
雖然我們在上一條讓大家選擇一個方向來仔細專研,但是偉大的程序員要有千手千眼,技術的更新速度大家是有目共睹的,如果故步自封,不去積極接受新的知識,那麼在計算機這個領域,你很快就會被淘汰掉。
通過新的範式和技術的學習,你可以接觸到和以前完全不同的思維方式,而這種全新的思維方式可能會在未來的某一時刻給你帶來意想不到的效果。
10.一切都應該盡可能地簡單,但不要太簡單
愛因斯坦曾說過:“一切都應該盡可能地簡單,但不要太簡單!” 在軟件中,複雜性是最好的殺手,而簡單性則是推動者。簡單性說起來容易,但是真正實現卻需要大量的時間和實踐。
首先,實現簡單性,遵循前輩流傳下來的規則就是一條捷徑。例如,我們大家都知道String.contains()方法,所以當“abcde”.contains(“bcd”)出現的時候,我們立馬就知道結果了。當然,軟件的業務邏輯可能不像上面的例子那麼簡單,但是通過多次練習,也是可以有規律可循的。
End.
轉貼自: 36大數據
留下你的回應
以訪客張貼回應