程式設計師的職業生涯是一段充滿起伏的有趣經歷。考慮到其陡峭的學習曲線,完全可以預見你將經歷挫折、啟蒙、驕傲自大這幾個時期,以及穿插其間的各種心路歷程。在這篇文章中讓我們輕鬆一下,通過一系列搞笑 gif 圖來回顧其中的每一個階段 。
階段1-菜鳥
初入職場的日子,我們都充滿激情。在此期間,你毫無頭緒,根本不知道該做什麼。就像魚兒離開了水,每一行程式碼對你來說都是個迷。Doctype?哈?見鬼,這個<div>到底是幹什麼用的?第一個階段令人生畏、讓人提心吊膽,卻又激動人心。到底有多少種該死的語言要學啊?
不過,你最大的優勢或許就是你不知道水有多深(譯者注:原文”you have no idea how deep the rabbit hole goes”,典故出自《愛麗絲夢遊仙境》中愛麗絲掉進了一個深不見底的兔子洞)。學習HTML只是向前邁出的一小步。
階段2-起步
雖然花了些功夫,你最終還是學到了足夠的知識,邁出了你進入程式設計世界的第一步。儘管第一階段完全是“我該怎樣/該從哪裡開始?”的懵懂狀態,到了第二階段你已開始慢慢地建立自己的技能體系。當然,CSS定義樣式的語法對你來說依然陌生,但至少你能夠在剛買的程式碼編輯器中改動一下程式碼,並在瀏覽器中看看改動的效果。那真是一種美妙的感覺!
階段3-極度沮喪
想象一下你在洞穴裡迷路,打著手電照亮每一個隧道以尋找出路。每走一步,你都希望看到一絲光亮。不幸的是,我們這一行的學習曲線非常陡峭。我只能很抱歉地說,那一絲光亮不會持續很長時間。你必須做好在這個階段花費數百小時的準備。當你絕望地試圖搞清楚那些讓你抓狂的東西是什麼意思的時候,你需要不斷,不斷,不斷地閱讀技術書籍。
如果你覺得太過沮喪而難以承受,請平復一下心情,想想我們每一個人都曾在職業生涯的這個階段或那個階段有過和你一樣的感受。你不是一個人在戰鬥。堅持下去,不久之後你就將到達“頓悟”階段。
階段4-頓悟時刻
“頓悟”那一刻是世界上最棒的感覺之一:一瞬間,突然,你“搞定了”“哦哦哦,現在我終於明白了”。拿我自己來說,我發現程式設計中的重大突破通常出現在夜裡,此時其他人正在睡夢之中。當我讀了八遍程式碼之後,原本捉摸不透的地方,現在至少有點兒清楚了。
這個階段,你學的所有技術和語言都開始派上用場了。
階段5-脆弱的程式碼
如同之前的階段,“脆弱”階段也相當漫長。在這一階段,你成功地構建了應用程式並實現了預想的結果,但是底層程式碼無法應對客戶需求的突然改變(At this point, you are successfully building applications and achieving your desired end result, but the underlying code is one client feature-request away from popping。譯註:but 後半句不大好翻譯,還望高手解救。)。此時,你編寫的方法長達幾十行,而測試的觀念尚未在你腦海中形成。
但至少你在做一些實際的東西了。就目前來說,請將你在GitHub上的pull請求侷限於書寫文件和改正拼寫錯誤。不要低估了這些工作能給他人帶來的幫助。
階段6-模仿
模仿階段很重要。模仿你心目中的大神編寫的程式碼——甚至是一行行地複製他們的程式碼,除此之外沒有什麼更好的辦法來學習恰當的程式設計技巧了。別灰心,每種帶有藝術性的職業生涯都少不了模仿階段。幸運的是,GitHub讓這種無聲的崇拜比以往更容易了。當然,複製程式碼只能幫到你這麼多,但它開了個好頭。模仿那些能夠啟發你的人,最終,你將開始形成自己的風格。
階段7-自以為是
此時,你終於開始陷入這樣一種境地:你當然還有巨大的改進空間,但自信心也在快速膨脹-或許太快了!人們常說,在頭幾年裡,你還不足以認清自己有多無知!
在這個階段,避免衝動讓自己變得太驕傲自大。驕傲自大對任何人都沒好處,只會讓未來更出色的你在回顧過去時連連搖頭。當你想要在GitHub、Reddit或者StackOverflow中留下嘲諷性的評論“哥們,學學怎麼程式設計吧”的時候,千萬別這麼做。不久以前你自己也曾是個十足的菜鳥。請傳遞正能量,而不是打擊別人。我們在同一條戰線上,只是處於不同的階段。
階段8-學習Vim
如果你曾觀察過與你共事的開發者,驚訝於他在程式碼編輯器中操作的速度,那麼他有可能是在用Vim。儘管Vim的學習曲線十分陡峭,但一旦你精通了它,你的工作流程在旁觀者看來也將如魔術一般神奇。
這是你開始掌控你的程式設計技術和工作流程的階段,合適的工具跟技術一樣重要。
階段9-當程式碼成為藝術
儘管要花上數千小時,但終有一天,你看著自己的程式碼,閱讀起來就像操作命令列那樣輕鬆,你會意識到它簡直就跟藝術品一樣。你的程式碼有版本控制、良好的抽象、完美的可測試性、可伸縮性,而且易於閱讀。在你職業生涯的某個階段,你可能曾陶醉於自己能夠寫出神祕、令人困惑但能正常執行的程式碼。但是,利用程式語言中每一個可能的技巧和隱藏特性,或者只是為了炫耀自己的聰明才智而把複雜的邏輯簡化為一行程式碼,這些都不是成熟開發者的標誌。相反,它展現的是一個自以為是的開發者,完全不為將來的程式碼維護者著想。
當程式碼的可讀性和它實現的功能對你來說同樣重要時,程式碼就變成了藝術。到了這個階段,你就是在為人類而不是為機器編寫程式碼。
階段10—經驗豐富
當程式設計成為一種本能,你就到達了職業生涯的下一個階段。此時你不再思考語言和框架層面的東西,而僅僅是發現問題並從你的開發工具箱中選擇正確的工具來提供解決方案。一個經驗豐富的開發者懂得西部牛仔式的單槍匹馬蠻幹為何很少是正確的道路。與專案組所有成員討論每一個新特性、準備白板、編寫故事(譯者注: story)、生成測試,這些都是在開始寫第一行實際程式碼前完成的工作。
至此,你已成為一個成熟、思慮周全、其他人都願意與你共事的開發者。恭喜!
階段11——搖滾巨星
很少有人能達到這個階段。搖滾巨星階段是職業生涯的巔峰。除了日常工作,你經常在研討會上發言,成為無數開源專案背後的領軍人物;你要抽時間通過郵件列表參與到web的未來發展併為之貢獻力量,同時還要在IRC上幫助新人。你是那種以編寫編譯器和解析器為樂的人。
別人稱呼你為搖滾巨星或是忍者,但你厭惡這類標籤。你比其他任何人都清楚——學無止境!