{{ $root.errMsg }}

怎樣才算是好的 programmer?

(已刪除)

(已關閉)

(已標記為濫發)

(已保護)


這陣子西杰在想,到底怎樣才算是一個好的 programmer?這個問題相信大家都有思考過吧,這裏我就提出一些想法給大家參考,看看大家認不認同。在開始討論之前,要先定義一下題目的界限,不然下面的討論會太廣泛。這裏的“好”只是指能力上好,其他的“好”都不討論,原因是我覺得這方面比較直接地反映一個 programmer 的好與壞。

以下五項指標可以說是按程度來排列,亦可以說是沒有排列,因為某些 programmer 可以做到第五項指標,但卻做不到第四項指標,大概是因為每一項指標之中亦可以再細分不同程度吧,但總體方向還是順序的。

一、有能力 Google

這個應該是最基本的要求了,要學會編程,必先學會 Google,在這個資訊爆炸的世代,我們沒有可能把所有東西都學一遍,但我們一定要確保當我們想學某一種東西時我們知道在哪以及如何可以找到資訊,Google 就是一個好幫手了。

西杰記得之前曾經想找一種編程思想來學習,當時我心中其實已經對這個思想有一個大概的印象,就是要用 Linux pipe 的模式來寫程式,然後西杰試了不少關鍵字的組合也找不到有關的網站,但直覺又告訴我這一定有人研究過,終於偶然地找到一篇 stackoverflow 上的問題,才知道原來這個模式叫做 flow-based programming。

試想想,沒有 Google 的話我們可以怎樣做?上討論區問?當然可以,可是這種小眾玩意根本就沒有很多人認識,問了也未必有人回覆。唯有靠 Google 才可以在這個資訊泛濫的互聯網上找到你想要的資訊。

二、有能力使用別人的 library

Don’t Repeat Yourself (DRY) principle,世界上遇到過你的問題的人多的是,因此很有可能你在想的問題別人一早想過並且有一個很好的答案,因此一個好的 programmer 應該要學懂如何使用別人的 library,站在巨人的肩膀上,把人家的知識用過來。

三、有能力理解複雜的 algorithm

開始進階一點了,如果你已經有能力使用別人寫的 sorting library,那你又有能力理解當中的原理嗎?就拿 sorting 來說,這個一般來說所有教 programming 的課程都會教的,你可以不看維基不看網上資源就說出 quick sort 是幹什麼的嗎?如果不能的話那大概是因為你不夠理解 quick sort。又,如果現在要你學習一個新的 algorithm,比如說 Shunting-yard algorithm,你有信心可以學得懂嗎?

這個能力可以算是通往進階 programmer 的必經之路,掌握它你就能站在巨人的肩膀上,把人家的知識用學過來。

四、有能力由頭寫起一個 algorithm

好了,有能力學會別人的東西,然後就要有能力由頭寫一個 algorithm。很多 programmer 接到一個新任務的時候第一件做的事就是上網找別人的 library,我並不能夠說這是一個錯的做法,但我認為你需要先思考怎樣去解決你遇到的問題(不是指 Google),思考一下答案並把想法做出來,然後才在網上找 library 看看人家的做法,這樣的學習模式會令你印象更加深刻,並且可以訓練你的思考模式。

五、有能力把你的代碼封裝成 library

學會由頭寫起一個算法之後就要學會由頭寫一個 library,會寫 algorithm 只能幫助你解決當前問題,會把 algorithm 封裝成 library 可以幫你解決以後更多的問題。在把 algorithm 封裝成 library 的時候你要有強大的組織能力和分析力,因為你要把遇到的問題抽象起來,使它變得更加 general,更加 reusable,而如果你可以把它和現實世界的問題或者一個已知的問題連結起來就更佳了。

最後也是最重要的,一個好的 programmer 一定要實踐,並不是一味用口說“有能力”就可以,西杰相信要實踐頭兩項完全沒有困難,但要實踐第三、四、五項就需要不少時間。當然,時間永遠是有限的,但請勿讓這成為你不進步的藉口,可以的話還是爭取更多時間來提昇能力比較好。

programmer  


{{ ctrl.votes | shortNumber: 0 }}
寫於 {{ '2017-08-15T01:59:00.087Z' | calendarTime }}

{{ $root.errMsg }}