成為專業程式設計師
大約十二歲時,我立定志向要成為一名專業的程式設計師。
我之所以這麼肯定,是因為那時我刻意決定用右手操作滑鼠——儘管我是左撇子。
我的想法是,如果哪天需要幫同事解決電腦問題,我可不想在開始之前還得把她的滑鼠移到另一邊,那樣太尷尬了。(當然,我當時沒預料到無線滑鼠的出現⋯⋯事實上,出於習慣,我到現在還是用右手操作。)
我一直很想知道,程式設計師典型的一天究竟是什麼樣子。我追求這個職涯是不是在浪費時間?直到後來我才找到答案——但我得先自己成為一名專業的程式設計師。這篇文章的目的,就是幫你省下幾年的迷惘。
在深入閱讀本文之前,請務必先閱讀本系列的第一篇文章 Why I love Programming(《為什麼我熱愛寫程式》)。
「專業」與「業餘」寫程式的差別是什麼?
用一個詞來說:當責。
你被期待要負起責任。
業餘時間寫程式就像辦派對卻不用收拾:純粹的樂趣!如果你覺得無聊,隨時可以換做別的事。但專業寫程式可不是這樣,你被期待要把工作完成。
每個應用程式都需要不斷地進行錯誤修復、重構,有時甚至需要 monkey patching(猴式修補)。維護程式碼可不是逛遊樂園;尤其是當那不是你自己的程式碼時。
擔任初階開發者
剛從學校畢業時,你可能會覺得自己是個超強的程式設計師。讓我告訴你:你不是。你無法想像那些有才華的人能用這些閃爍的機器做出什麼事。在頭幾年裡,你會有大量的東西要學。
專業的軟體開發是一個漫長的過程。撰寫可讀性高、經過充分測試、文件完整的程式碼是一項浩大的工程。你需要耐心,非常多的耐心。無論是對自己還是對他人都是如此。
身為初階人員,你只會以非黑即白的方式思考。你看到一段程式碼,就覺得全都錯了。到底是哪個正常人會寫出這種可怕的怪物?!隨著經驗增長,你會開始看見灰色地帶。
最終,你會明白那些留著鬍子的資深前輩並不是比你慢,而是比你更謹慎。你會學到如何測試程式碼、如何為它撰寫文件。你甚至會開始懂得欣賞 UML 圖。
變得過時
「世界變化太快。你今天學的東西明天就過時了。何必費心呢?」在我的職涯中,這句話我已經聽過無數次。它既流行,卻也是錯的。
如果一項技能會過時,那它就不是真正的技能。在你的職涯中,你不會想被稱為「那個 Jenkins guy」,你會想成為 Software Quality(軟體品質) 領域的專家。提示:如果你不知道 Jenkins 是什麼,那正好說明了重點。你不應該把自己的範疇限縮得太窄。正確的技能永遠不會過時。
有時候會發生這種事:由於公司的新政策,你嘔心瀝血的傑作變得一無是處。聽起來很沮喪,但這是軟體產業的常態。你需要適應。我能給你的一個建議是,不要看得太重。放下專案,留下智慧。擁抱變化。
在不完美的世界中寫軟體
專業的程式設計師必須時時刻刻處理各種缺陷。這場遊戲的名字叫做「權衡限制」。期限、預算和程式碼品質只是我們必須考量的幾個相互競爭的限制。優雅的設計在現實面前往往會褪色。歸根究柢,你想靠軟體賺錢,所以你必須把它交付出去!
我所認識最優秀的開發者,能在務實與優雅之間取得平衡。他們知道哪些部分重要、哪些不重要。做不到這一點的人,有需要時就會被取代。
就我個人而言,我總是比較傾向優雅。這只是把我是個完美主義者說得比較好聽而已。我必須透過努力學習務實的那一面。
指導資歷較淺的程式設計師
你越擅長寫程式,寫的程式碼就越少。
相反地,你會花更多時間思考 Software Architecture(軟體架構)、高階設計,以及如何把工作拆解成更小的區塊,讓其他開發者接手。你會開始指導初階開發者。招募會佔據你大量的注意力。你會花時間開會,與業務人員討論專案目標。有人可能會說,你扮演的是協調者的角色。也有人會稱你為主管。
一旦你熟悉了業務的來龍去脈,你就會成為公司不可或缺的資產。你可能會被邀請擔任主管,或者至少管理專案會慢慢變成你職責的自然延伸。但要小心!這個緩慢漸進的過程是危險的。想回到全職程式設計師的崗位並不容易。在你忙於專案管理的同時,其他人正忙著提升他們的寫程式技能。你可以試著在空閒時間保持與時俱進,但那很困難。
我看過優秀的開發者成為出色的主管。在職涯的某個階段,這是你必須為自己做出的決定。
無論你如何決定,花點時間學習如何溝通都是值得的。同理心在其中扮演著重要的角色。以團隊方式開發軟體是如此複雜,以至於大量時間都花在協調目標和溝通問題上。事實上,你領薪水就是為了溝通。這包括文件、測試以及程式碼本身。
多與他人交流,傾聽他們的問題。閱讀關於 Software Project Management(軟體專案管理) 的書籍,即使你自己並不想成為主管。這將幫助你理解老闆的角色。
談談錢
在 IT 產業工作有很多好理由,但賺錢不是其中之一。
雖然根據預期薪資來做職涯決定可能很誘人,但千萬別這麼做。你會非常不快樂。你每天要在閃爍的游標前坐上八小時甚至更久。那是很長的時間,而時間比金錢寶貴得多。
別誤會我的意思。有很多薪水不錯的工作。不過,你很可能不會因此致富。如果你想賺大錢,我幫不了你。也許可以考慮房地產之類的⋯⋯身為開發者,致富的唯一方法就是投入某個極具挑戰性的事物,付出大量的時數,然後碰上好運。基本上就是新創公司。請記住:一個 Bill Gates(比爾·蓋茲)的成功背後,是一千次失敗的嘗試。另一個方法則是別再當程式設計師,轉去當主管。關於這一點,我已經在上一節分享過我的看法。
結語
雖然你應該學習閱讀(或許還有撰寫)程式碼,但以專業程式設計師為業並不適合每個人。你可能會問:「這值得嗎?」對我而言,這是正確的決定。希望我能幫助你做出自己的決定。
隨機一篇部落格