程序員初年
你作為一名程序員,第一年的時光可能是最為讓你困擾的一段時期。你從一個含糊不清的人際溝通世界來到了一個冰水般寒冷的正確之地。機器不知道如何與你妥協,它只會按照你的指令精確地執行任務,不多,也不少。
你將花費大量時間處理代碼錯誤
你會花費很多時間檢查你編寫的代碼,把它們與教程上的內容進行比對,有時候,你會瞅著這些代碼,琢磨它們為什么無法有效運行。諸如此類的事情將會一次又一次地出現。這種事情的發生總量大約是你決定學習編程語言數量的一個乘數。
所有開發者都要經歷這一過程。有時候,你在一個問題上投入幾個小時也不得其解,然后睡了一覺,醒來之后幾分鐘之內就把它解決了。另外一些時候,你會發現,不管你做什么,你就是無法找到解決這個問題的辦法。
在你親身體驗這些代碼錯誤若干年后,你將能夠在你同事的編輯器上快速定位這些錯誤。這種能力最終會成為你的第二本能。這些煩惱和困惑就是鍛造你技術技藝的火焰。
你會收到相互矛盾的建議
你會從其他開發者那里得到很多建議,其中絕大多數相互沖突且自相矛盾。一位高級工程師可能會說,真正的軟件開發者可以在命令行做任何事情。另一位開發者則會告訴你,那些死盯著命令行的家伙思想陳舊迂腐。你會在博客文章中了解到,測試驅動的面向對象開發為什么是神諭的產物。另外一些開發者可能更喜歡宣揚 不變性 和函數式編程的好處。
那些經驗比你豐富的開發者會為你描繪完全不同的方向。究竟應該聽取誰的建議呢?誰的建議是正確的?誰的建議錯誤的?
當涉及實際編程時,沒有絕對的對與錯。一個開發者的技術觀點來自他們各自的經歷,他們閱讀過的書籍,以及那些碰巧他們用過的技術。在他們公開支持一種特定的工具、應用程序或者方法論之前,沒人做過完整的技術領域的調查。
推遲你的判斷。當一位開發者告訴你,她認為 PostgreSQL 是一種比 MySQL 更好的數據庫時,你應該詢問她為什么。如果你運氣不錯,他們會逐一向你說明他們這一看法的真實原因,你也會借此學到一些東西。你應該學會從一個以上的開發者那里收集意見和想法。找出其中的共同點。必要的話,閱讀原始資料,自己動手研究。不要把任何人的觀點看作圣諭,相反,你應該努力形成你自己的思想。
你不知道應該學些什么
在視覺設計上,你應該投入多大精力呢?你是否應該精通 CSS 的全部屬性?SQL 技能到哪種程度就足夠了?這些看似流行的『面向對象』的概念到底是什么意思?你應該學習 Ruby、Python 或者 PHP 嗎?DOM?AJAX?命令行技術掌握到什么地步就算合格了?如果非要學習全部這些技術,學習順序應該是怎樣的呢?
想要成為一名真正的 Web 開發者,你在第一天就應該混合學習上述這些知識與技能。但是在現實世界里,這是一種不切實際的想法。因此,你需要在工作中學習,圍繞著你的技能盲點多下工夫。你所能期待的最好結果就是,羅列出你已知的未知知識和技能,把它們放入未來學習的清單中。
如果你非要從頭學起。以下是我為了自主提高技能所要做的一些事情:
- 長期保留一份你認為應該學習或者有助于工作的技術清單。
- 按照你認為的重要性和不熟悉程度排序。
- 挑選一項在兩類排名均最靠前的技能,認真研讀兩到三本相關主題書籍。如果你的經濟能力有限, Zed Shaw 有一份 免費圖書清單 ,那上面的一些技術主題,你肯定有興趣學習。
- 在下一項最重要的技能上,請重復步驟 1 -3,直至你對自己的綜合技能感到滿意。
求知若饑,虛心若愚
你很快就會發覺,你代碼中任何一處失敗就是你作為一名開發者的失敗。如果有人在你的代碼中發現了一處錯誤,你將會把這一行為看作是對你的人身攻擊。
學習更好地編寫代碼就像學習如何寫作:在你能夠寫出優質代碼之前,你需要輸出成千上萬行糟糕的代碼。對此你根本無法逃避。對你來說,最好的辦法可能是坦然接受這一現實 - 你一定會寫出很多很多垃圾代碼。
那些極富經驗的開發者始終與他們編寫的代碼保持一定的距離。他們已經編寫了大量他們自認為非常可怕的代碼。他們歡迎大家的批評,因為這是一個學習和提高的好機會。當你對自己的代碼加以『保護』的時候,你剝奪了這項你應有的權利。
你發覺自己必須做到無所不知
你身邊的每一個人都在使用一些你太不明白的專業術語進行技術討論。他們拋出一個頗具啟發意義的概念,但是從不對其加以解釋。為了能夠有所貢獻,你覺得你有太多的知識有待學習。
壞消息是,你的確有很多東西需要學習。但是沒人可以獲知,一個開發者為了開發出優秀軟件應該需要多少知識,就是說,一個普通人究竟能夠處理多少信息。唯一的真正解決方案就是,按部就班地處理這些新的詞匯。經過一段時間之后,當新的主題出現時,你就會更容易發現其中的一些規律和模式,但是在剛開始的時候,這的確是一份辛苦的差事。
你身邊的絕大多數人并不完全理解他們輕松拋出的那些概念。為了你的個人成長與發展以及依靠你寫出優秀軟件的那些人,你應該對任何新主題新概念保持一顆謙卑之心。
如果你對某些主題上過于自信,而實際上你在這方面的知識卻是匱乏的,你所編寫的軟件可能將會變得非常糟糕。那些真正知道他們正在說些什么的人很可能也會對你失去信任。如果你希望那些高級程序員認真對待你的建議,但你又發現自己正處于知識的邊界時,請養成說『我不知道』的習慣。
關于如何學習編程,在主流媒體中有很多看似熱門的話題。但是他們從未談到過編程第一年就是一種困惑、卑微以及精神疲憊的體驗。
你需要堅定的信念和決心,這一點比熱情更為重要。如果你能夠堅持不懈,投入足夠的時間,你的技能一定會提高。學習如何編程不要求超過正常水平以上的智力。但是就像任何值得學習的東西一樣,在你具備一定能力之前,你必須花費一定精力和時間。請擁抱這一過程,并且保持前進的動力,編程對你來說,就會變得越來越輕松。
作者: Najaf Ali ,程序員, Happy Bear Software 創始人,生活在英國倫敦。
原文: Your first year as a programmer
感謝:Qingniu 幫助審閱并完成校對。