Being a Professional Programmer

Matthias Endler

成為專業的程式設計師

原文由 Matthias Endler 發布,訂閱此部落格

我大概 12 歲的時候,就立志要成為一名專業的程式設計師。
之所以記得這麼清楚,是因為當時我刻意決定要用右手操作滑鼠——儘管我是左撇子。

我的想法是,如果哪天同事的電腦出了問題需要我幫忙,我可不想在開始之前還得先把她的滑鼠移到另一邊,那多尷尬。(當然,我當時沒預料到無線滑鼠的出現……事實上,到現在我還是習慣用右手。)

一直以來,我都很好奇程式設計師典型的一天是怎麼過的。走這條路會不會是在浪費時間?這個答案我後來才找到——但得先自己成為專業的程式設計師才行。這篇文章的目的,就是幫你省下幾年的迷惘。

在深入閱讀之前,別忘了先看看這個系列的第一篇文章「Why I love Programming」

「專業」與「業餘」程式設計有什麼差別?

用一個詞來說:責任
你必須為自己的工作負責。

業餘時間寫程式,就像辦了一場不用自己收拾的派對:純粹就是好玩。覺得無聊了,隨時可以換別的事做。但專業的程式設計可不是這樣,你得把工作完成。

每個應用程式都需要不斷地修 bug、重構,有時甚至得靠 monkey patch 來應急。維護程式碼一點也不像逛遊樂園;尤其是當那不是你自己寫的程式碼時。

身為菜鳥開發者

剛從學校畢業時,你可能會覺得自己是個超強的程式設計師。老實說:你還不是。你無法想像那些真正有天分的人能用這些會發光的機器做出什麼來。在最初的幾年裡,你還有一大堆東西要學。

專業的軟體開發是一個漫長的過程。寫出易讀、經過充分測試、文件完整的程式碼需要付出相當大的努力。你需要耐心,非常多的耐心。不管是對自己,還是對別人。

還是菜鳥的時候,你看事情總是非黑即白。看到一段程式碼,就覺得全是錯的。到底是哪個正常人會寫出這種可怕的怪物?!等你經驗多了,就會看見其中的灰色地帶。

最後你會明白,那些老鳥們不是比你慢,而是比你更謹慎。你會學會如何測試自己的程式碼、如何為它寫文件。你甚至會開始懂得欣賞 UML 圖。

面臨淘汰

「世界變化太快了。你今天學的東西明天就過時了,何必費事呢?」這句話在我的職涯中聽過無數次。它既流行,又是錯的。

如果一項技能會過時,那它就稱不上是真正的技能。在你的職涯中,你不會想被稱為「那個只會 Jenkins 的人」,你會想成為軟體品質領域的專家。提示:如果你不知道 Jenkins 是什麼,那正好說明了重點。你不該把自己的領域限縮得太窄。真正有價值的技能永遠不會過時。

有時候,會因為公司的新政策,你嘔心瀝血的作品就此被束之高閣。聽起來很沮喪,但這就是軟體業的常態。你必須去適應。我能給你的一個建議是,別太往心裡去。放下專案,留下經驗。擁抱改變。

在不完美的世界中寫軟體

專業的程式設計師得時時刻刻處理各種不足與缺陷。這個遊戲的名字叫做「權衡限制」。期限、預算和程式碼品質,只是我們必須考量的幾個相互衝突的限制。優雅的設計在現實面前往往會褪色。歸根究柢,你想靠軟體賺錢,就得把它做出來、推出去!

我認識最優秀的開發者,都能在務實與優雅之間取得平衡。他們知道哪些部分重要、哪些不重要。做不到這一點的人,有需要時就會被取代。

就我個人而言,我總是比較偏向優雅那一端。說好聽一點,就是我是個完美主義者。務實的那一面,是我靠著努力才慢慢學會的。

指導資淺的程式設計師

你越會寫程式,寫的程式碼就越少。

取而代之的,你會花更多時間思考軟體架構、整體設計,以及如何把工作拆成更小的區塊交給其他開發者去執行。你會開始指導資淺的開發者。招募新人會占去你很多注意力。你會花時間開會,和業務人員討論專案目標。有人會說,你扮演的是協調者的角色。也有人會直接稱你為主管。

一旦你摸透了業務的各個層面,你就會成為公司不可或缺的重要資產。你可能會被邀請去擔任主管,或者至少,管理專案會慢慢變成你職責的自然延伸。但要小心!這種緩慢而漸進的過程其實很危險。想再回到全職寫程式的日子並不容易。在你忙於專案管理的同時,其他人正忙著精進他們的程式技能。你可以試著利用閒暇時間跟上進度,但那很困難。

我看過優秀的開發者成為出色的主管。在職涯的某個時刻,這是你必須自己做出的選擇。

無論你怎麼決定,花點時間學習如何溝通都是值得的。同理心在其中扮演著關鍵的角色。團隊開發軟體是如此複雜,以至於大部分時間都花在協調目標和溝通問題上。事實上,你領薪水就是為了溝通。這包括了文件、測試,還有程式碼本身。

多和別人聊聊,傾聽他們的問題。讀一些關於軟體專案管理的書,即使你自己並不想當主管。這會幫助你理解主管的角色。

談談錢的事

在 IT 產業工作有很多好理由,但賺錢不是其中之一。

雖然根據預期的薪水來做職涯決定很誘人,但別這麼做。你會非常不快樂。你每天得花八小時或更久的時間坐在閃爍的游標前。那是非常長的時間,而時間遠比金錢寶貴。

別誤會我的意思。薪水不錯的工作多的是。但你很可能不會因此致富。如果你想賺大錢,我幫不上忙。或許可以去看看房地產之類的……身為開發者,唯一能致富的方式就是投入某個極具挑戰性的題目,花上大量的時間,然後碰上好運。基本上就是新創公司。記住:一個比爾·蓋茲的背後,有一千次失敗的嘗試。另一種方式就是不再當程式設計師,轉去當主管。關於這點,我在上一節已經分享過我的看法了。

結語

雖然你應該學習閱讀(或許也學習撰寫)程式碼,但以專業程式設計師為業並不適合每個人。你可能會問:「值得嗎?」對我來說,這是正確的決定。希望我能幫助你做出屬於你自己的選擇。

本文章由 muse-spark-1.2-contributor 進行翻譯

留言