我們不可能期待去種一些樹,然後一夜間收穫有著2000年樹齡的紅杉樹,無論其需求有多大。
人格特點
一個人首先得是自學者來學習程式設計。僅僅是超過你能寫出可用的小程式這個基本水平,你也需要很多年在實踐中學習一切必要的技能。從沒有人僅通過上課和讀書就成為了一個卓越的程式設計師。這通常需要無數小時的程式設計實踐。並且和普遍流行的觀點相反,計算機專業不是教你程式設計的,而是傳授理論的。
作為程式設計師,你必須得有幾乎無盡的毅力來不斷繼續嘗試調錯、修復和開發。堅持做到這些的人是需要具備特殊本領的,尤其是當你看起來沒有取得任何進步的時候。這是非常需要具備的一項人格特點,而沒有這種層次的毅力,足以使大多數沒有毅力的人遠離程式設計師這一職業。
- 你需要精通數學和善於解決問題。程式設計是解決各種各樣的問題的。
- 你需要有出色的短時記憶(和長時記憶)能力,這樣你才能在大腦中像變戲法一樣同時處理它們,而且你還要記得一個月前你寫了什麼。
- 你需要對事物間如何相互關聯的以及如何設計優良的架構有著深刻的瞭解。如果我在這個地方改動了一點,在其他地方可能會產生什麼樣的破壞呢?
- 你需要對細節進行高度關注。“接近”這一詞在程式設計中並不適用。在哪兒忘了一個分號?程式無法通過編譯!錯拼了一個函式名?你的程式可能在做和你期望中完全不同的事。
Subject Matter 學科特點
- 你需要對資料結構和類的概念有很深入的理解,並且知道何時以及如何使用它們。
- 你需要熟知一些已經開發出來的函式庫,這樣才不至於去重複造輪子。
- 你需要知道大量的基礎(和高階)的演算法,同樣才不會去重複造輪子。
- 通常你需要知道工作中的硬體的極限,這樣你才可以做類似於恰當管理記憶體並且避免耗盡記憶體的事情,又或者合理利用記憶體來消除處理器內浪費的資料傳輸耗時從而加快處理過程。
有大量的知識你需要知道,而且它們還在不斷變化!除非是你的主要關注領域,否則你不可能真正精通它。你不可能是一個“週末程式設計師*”。
*譯者注:意為程式設計師在週末也需要學習。
工作/生活環境
你需要有大塊不被打斷的時間,這樣你才不至於在程式設計(和學習程式設計)時注意力分散。很多人的工作(和家庭)環境很難提供這一點。電話又響了?好的,你又得花15分鐘來重拾你的思路了。
你經常不得不在忙忙碌碌中對一些權衡利弊做出決定。當然,你可以寫個程式來處理每件事情,但是一個人又會有多久才將“0”作為輸入呢*?除此之外,我們跟不上計劃,更重要的是立馬使得程式啟動並且正確執行。
*譯者注:這個問題旨在說明為每件事寫程式意義不大,因為事情重複出現的概率很小。
基於這些,你認為是下一種熱門的程式語言也會過時並且5年之後沒人會用它。現在你正在使用下一門很酷的語言,而它很有可能5年之後並不會被用到。你不得不時常關注這些事。
還有管理層面的考慮
程式設計師經常被當做工廠工人一樣對待。沒有程式設計才能(而且很少有商業頭腦)的人經常去負責一些專案。他們認為程式設計師就是機器中的零件。而真相是:程式設計師是工匠,要從專案中得到最好的結果,最明智的做法就是去問精通程式設計的人事情該如何去做!對於每個最終超出預算和落後於進度的專案,往往是逼迫程式設計師去花大量沒有補償而且不被欣賞的時間去釋出一款設計和測試都很槽糕的產品。
優秀的程式設計師意識到他們不會比蹩腳的程式設計師得到更多報酬,因為管理上看不出區別,在此之上還要做出額外工作來彌補低劣程式設計師的不足。而且優秀程式設計師會說出事情並且試著去優化,這經常會令想要擺脫他們的經理生畏(這種常見的就業趨勢在其他文章中也被討論到)。
夠了,這些就容易明白為什麼很多人對程式設計師這個職業感到厭倦,尤其是有大量的其他機會時。而一些甚至是一般般的程式設計師,只要他們擅長和人交往,就有足夠的本事在其他各種各樣的工作中取得成功。程式設計師這個行業可以很容易換行,而轉進來卻不同。
優秀程式設計師貌似不太可能隨隨便便去找工作
找程式設計師容易,找優秀程式設計師不容易。蹩腳的程式設計師可能一直在找工作。而優秀的程式設計師,如果公司意識到他們是優秀的,就該做所有能做的去留著他們,所以他們可能找工作的情況就少多了。而且一旦他們出來找工作,他們就會很挑剔他們想要工作的地方,而這點也可以解釋為何一些公司聲稱“沒有什麼好程式設計師了-我們能招到的都是蹩足的。”
記得有個地方說過,一個優秀的程式設計師的價值是一般程式設計師的好幾倍(見《一些鮮為人知的程式設計真相》),而蹩足的程式設計師實際上還有副作用。對於一般的和蹩足的程式設計師來說要成為優秀程式設計師真的很難(就算不是不可能)——而且對於一般的初創企業來說,作為本該專注於快速開發推出產品的他們顯然不值得這份投資。
來自:PHP100
相關閱讀
評論(1)