如何找一份程式開發工作?(一)正心誠意 by zanyking | CodeData
top

如何找一份程式開發工作?(一)正心誠意

分享:

身為一個軟體開發者在這行也做了快十年了,這些年來不敢說做出了什麼成績,但至少大部分的時間做的事情自己都還蠻喜歡的,收入與專業價值持續穩定的累積著,也逐漸的發展出確立自身社會價值的方式。

我總覺得自己運氣很好,雖然一畢業之後沒多久就砍掉重練,踏入軟體開發這個與大學四年念的東西無關、還被稱作是血汗爆肝的行業,但一路走來我沒後悔踏入這行過,倒是非常感謝那些曾經共事過、給我機會的人們。

於是當親戚的小孩資工系畢業,跟我說他也打算從『碼農』出發,來探究軟體開發是否是適合自己的職業未來的時候,我沒辦法參考那些將這個行業批為沒有生活、爆肝、宅、科科新跪的說法去『勸退』他。畢竟如果想當年,我這樣沒有資訊產業相關專長只有時間與青春的人,也能有機會去累積、去追尋自己想要的生活,那時間來到現在,總是有某些東西是值得分享給那些跟我有著一樣初始條件的人去努力、去嘗試的。

以下是我個人對於一個菜鳥,該如何在軟體開發這個領域,找到第一份『值得』的工作的一些心得。

第一份工作的基礎

雖說每個人的價值觀不同,每個人在工作中想追求的事物也不同,但有些東西是一份好的軟體開發工作,特別是第一份工作一定得要可以帶給開發者的,那就是:一定要可以鍛鍊開發者的基礎知識與專業技能。

拿起畫筆、把顏料塗在紙上,任何人都可以說自己在畫圖,但不會有人說自己是畫家;敲著鍵盤、把文字打進文件裡,任何人都可以說自己在寫作,但不會有人說自己是作家;同樣的『寫程式』這種行為任何人也都可以隨意開始,但要能自稱軟體工程師或軟體開發者,那就得掌握許多必需的、能讓人在現代的專業軟體開發團隊裡找到位子與他人合作的基礎專業技能。

比如說,開發者至少得非常熟悉一套程式語言的語法;得熟練對那套語言來說好用的開發工具集(IDE編輯器、測試平台與測試工具、Log 系統等、編譯器、腳本建置工具等);得至少摸熟一套系統軟體堆疊(OS, Server, DB);得知道在他所選擇的程式語言下開發人員廣泛使用的架構設計模式、框架與函式庫;而在軟體專案管理上頭,他也至少要學會一至兩套版本管理系統,以及業界常用的開發方法(Agile, Scrum)等等。

一個軟體開發者對自身專業的自尊,就是建立在確實掌握這些基礎技能,並隨科技的發展與時俱進上,而一間公司裡的軟體開發者對這些基礎技能掌握的程度,就決定了這間公司的知識能夠或不能夠、並以什麼樣的效率將公司的商業知識轉換成價值。

對於上述軟體開發專業技能的導覽與相關的技能圖像,我強力推薦Pete Goodliffe 著、蔡學鏞譯的:編程創藝:編寫出卓越的程式碼 (Code Craft: The Practice of Writing Excellent Code)。它以Java Programmer 所用的技術工具與相關堆疊出發,鉅細靡遺的介紹了開發者在各個區塊所該磨練的專業技能知識與應該追求的目標水準。也許每個開發者所用的語言不同、領域不同,但任何平台都一定會發展出自己的一套『作那件事的工具與方法』,所以就算不是要做Java開發,這本書的參考價值仍舊很高。

甚至可以說,某公司開出一個『軟體工程師』的職缺來找人,並不代表它想找的真的是作軟體開發的人,在台灣很多公司會在缺乏領域知識背景的情況,下從『Get the Job Done』的思考方向出發來劃出職務內容,這並沒有不對,只是它想找的並不是軟體開發者,而比較該稱作『幫本公司寫程式的』。

那這樣的公司所開出的職務,對於一個以軟體開發作為職志的人來說一定不好嗎?這也難說,或許因緣際會,那間公司所提供的環境與條件剛好足夠培育身為一個軟體開發者的要件,但現在有以後不一定有,工作者如果沒有對自身專業有清楚的定位與要求,那時間一拖,就是職涯往『在A公司寫程式的』或往『專業的軟體開發者』方向發展的分歧。

找對工作跟找對對象一樣重要 – 定義適合自己的好工作

畢竟人不會因為交到一個超棒的男女友工作就會一帆風順,但一個因為錯誤的工作而受苦的人,要是情緒管理能力差了些,是會把風暴帶進感情生活裡的。到底什麼叫做『對』的、適合自己的工作呢?

薪水多的工作嗎?不是,因為如果時薪130,一天工作16小時,一週7天,月薪也有六萬出頭。但這種工作,只會讓人在PTT上藉由嘲笑22k,來催眠自己比上不足比下有餘,然後直到身體開始出狀況、或是發覺生命除了這份工作外一片空白的時候,才會醒悟這機會成本何等可怕。

是事情少的工作嗎?不是,事情少的工作常常就是缺乏積極意義、讓人影薄的工作,除了那種確實很自卑對於自己的不重要完全沒有不甘心的,大部分心理正常的年輕人只會越做越對未來的生存感到恐懼。

我認為,一份『對的』工作,就是一份能讓人以『兩年後把這份工作經歷寫在履歷上,它有什麼價值?』為題目,寫出一篇及格作文的工作。及格的標準是:這篇文章有說服我相信,這就是我想要的,而且我也願意承諾要去為它付出,因為這看起來確實可以達到。

比如說:『這份工作要有大量使用英文的機會,因為我知道程式開發這行所有的最新發展與訊息都是英文的,同時這份工作要能讓我盡量在晚上七點前下班,因為我要去上英文課。』

或者:『這份工作要能夠讓我有機會參與開放原始碼專案開發,因為我對開源的系統堆疊很感興趣,而這些知識也比較不會貶值。』

又或者:『我覺得我還蠻擅長跟人溝通的,所以我想要參與那種需要與很多人溝通協調的專案開發工作,好發展這方面的技巧,同時這個專案如果能夠有點名氣,可以能當成我未來找工作時的籌碼那就最好。』

找工作的人對職業生涯的階段性目標與機會追求,在這份工作中是否有比其他地方更有機會達成,才是唯一的考量點。工作操不操、福利好不好、穩不穩定都是在這個前提下推導出來的。當人有了明確的、想要在一份工作中成就的中心目標,也就是對未來想做什麼事情有了想像,他就會關心市場、關心需求、關心求職公司的運作與文化,他會去思考到底這一切對他到底有什麼意義、在工作中自己什麼東西可以作為籌碼、什麼不行。而更重要的,是他會在往後無數的選項中做出有益目標方向的選擇,於是每個選擇所帶來的成就與能量不會消散到不同的方向,而是持續的聚焦累積,最後量變然後質變成就與機會才會出現。

找工作前所該有的準備

想像一下,如果你是一位面試官,今天要幫公司找一位英文秘書,結果來了個應徵者,連第三人稱單數、現在式動詞要不要加s都不太確定,你覺得如何?那如果要找一位速記打字員,結果來了位食指神功、中打一分鐘不到50個字呢?越好的機會、越大的挑戰,就要求越多的準備、越多次的失敗、以及比起其他選項更多更大的犧牲…而這就是價值的來源。

想要應徵上一份好的程式開發工作,必要的基本知識技能水平絕對是必須的。

一間好的軟體公司或許會按部就班的訓練、評估、給菜鳥簡單的工作入手,但它不會跟人討論ArrayList 與 LinkedList這兩者間有什麼差別(以下以Java為例)、它不會接受有人面對NullPointException 的時候手足無措、它也不會容忍任何人對於交付的程式碼中,有那種肉眼可見的編譯錯誤(例如:忘記加分號、括弧不對稱)卻不知不覺。

如果一個人有志從Java programming入門軟體開發,那如果他沒用過Java,他就該先去買一本 Java SE7 技術手冊之類打基底的書,乖乖的把範例寫過跑過一遍,或是他想要找一份Python的工作,那他就應該要把Python tutorial 寫過跑過一遍。

做事情最要緊的就是誠意與自信,而這兩者都來自於事實的累積。『我把那本書裡每一行範例程式碼都寫過、跑過一次搞懂它在幹嘛』是一個事實;『我花了一週把Android 開發環境建起來,在裡面寫了一個簡單的小APP可以作…』是一個事實;『我嘗試翻譯了很多篇關於XXX的技術文章,累積了許多stackoverflow的積點』也是一個事實。無數這樣的事實積累,就是誠意與應徵面試時自信的來源。事實上,乖乖的把書看完,或是對一個完全不熟的課題作點研究,瞭解它的概念與範疇,是一個就算是已經工作很多年、很有實力的專業開發者,也都時不時會去做的。

結語

找一份寫程式的工作簡單,找一份可以把人鍛鍊成專業軟體開發者的工作困難,但所有結果看起來很困難的事情,其實總是由很簡單的小小累積開始。希望這篇文章能給想要加入這個行業的朋友們一點想法與方向。

下一篇文章,我想來討論一些在實際找工作的過程中,有用的技巧與準備。

後續 >> 如何找一份程式開發工作?(二)馬相伯樂

分享:
按讚!加入 CodeData Facebook 粉絲群

相關文章

留言

留言請先。還沒帳號註冊也可以使用FacebookGoogle+登錄留言

關於作者

在 Java 裡打滾了 9 年的 programmer,平常喜歡爬爬郊山、騎腳踏車亂逛,擅長 Java Web 應用開發、Eclipse Plugin 開發、GUI 設計、Meta Programming,閒暇之餘玩玩 Android,最近比較把精力放在團隊開發的方法論與合作模式上,歡迎有興趣的朋友一起研究。

熱門論壇文章

熱門技術文章