最近,我突然想瞭解一個問題:「養成一名飛行機師需要多少時間與金錢?」在網路上一陣搜尋之後得知,從完全沒有經驗到成為副機師,至少需要兩年,就金錢上來說,至少也得六百萬左右,接下來還有飛行時數累積、測驗與良好飛行紀錄,要成為正機師,差不多得要十年以上。那麼「成為一名程式設計師,需要多少時間與金錢?」

低門檻的矛盾?

如果告訴你,從完全沒有經驗到成為程式設計師,至少需要兩年,就金錢上來說,至少也得六百萬,你還會想進入程式設計這個行業嗎?就不少人來說,也許馬上就嚷嚷著「哪來兩年的時間慢慢磨?」,就公司管理階層來說,也許會更不可置信地吼著「六百萬?你在開玩笑嗎?」就外頭補習班來說,答案或許比較明確,大概三個月,了不起六個多月,就可以生產一批程式設計師,費用大概從幾萬塊到十幾萬不等!

程式設計似乎沒什麼難的?別的不說,程式設計界許多人不都是這樣在推廣著嗎?語言很簡單,框架很簡單、工具很簡單,重點是你有想法,對程式設計有興趣,就可以來嘗試,不用本科系,不分性別,不分年齡,全民學程式,從小學程式,就連美國總統歐巴馬都實際寫過程式了不是嗎?程式設計有什麼難的?相較於這種說法之下,〈科技之島找不到軟體工程師〉這一篇中談到的現象,就滿矛盾的了,若真的門檻如此低,成本如此少,訓練時程如此短之下,那一一批生產出來的程式設計師到哪去了?

你要小心那些低進入門檻,但需求量又極大,特別是人才缺到各報章雜誌都會開始報導的行業。一個簡單的事實是,如果每三到六個月就能生產出一批程式設計師,那麼前三到六個月踏入程式設計行業的那些人,是否有可能被這批生產出來的人替換掉?也就是說,從踏入這行業開始開始,就有許多人等著被淘汰了。

就如身邊許多求才若渴的朋友們說的:「求職者很多,可用的不多」,或許更殘酷的,在準備踏入這行業前的訓練過程中,很多人就會被逐一淘汰,因為,在過程中,好的都被先挑走了,剩下的那些人,只是留著虛耗時間。

反過來說,如果被淘汰的人如此之多,不就表示程式設計的門檻,並沒有全民寫程式、姊姊妹妹一起寫程式、從小寫程式這類活動說的那麼低?從管理者的角度來看,若覺得程式設計師養成可以速成而低成本,那麼又為什麼老是找不到人呢?

需要知道的太多!

從2012年4月開始有機會為程式人專欄撰寫文章開始,至今三年多來累積了不少的文章,每次寫著寫著,總會說到程式人應該知道這個,程式人應該曉得這個,程式人應該如何如何,而各篇文章的背後,也許都還伴隨著更多篇的參考文章,每當回顧過去三年多來闡述過的主題與內容(以及閱讀過的文章),我總會詫異著,身為一名程式人,真的需要知道這麼多東西嗎?

那麼我寫過些什麼呢?當然,程式人需要瞭解他們使用的語言、程式庫,由於現代應用程式通常有著一定的規模與架構,因此,程式人得掌握與熟悉某些框架,也要知道技術生態系中的慣例,認識某些模式與最佳實踐,瞭解怎麼處理錯誤,在運用技術便利性的同時,別忘了資料結構、演算法甚至數學等基礎理論的重要性,他們要能善用各種工具,像是編輯器、IDE、建構、版本控制、虛擬化,身為一名程式人,要懂得重構、可讀性、效能、文件、註解……,身為一名軟體開發者,還不能看到硬體就軟下去!

別忘了還有安全問題呢!大多數時間上,程式開發者只關心如何寫出正確功能的程式,卻少了安全方面的防護,這不能怪他們,在許多程式教育或者是書籍中,本來就甚少提到安全相關議題,更何況在實際軟體開發過程中,不屬於功能方面需求的安全議題,也甚少被考量在內,然而,如果你看過《打造安全無虞的Web Applications》,或者是《Java網站安全防護實務手冊》這類書籍,也會覺得,身為一名程式開發者,都應該對這些安全議題有所認識。

寫出一個軟體,不單是能動就好!如果真的想成為一名程式開發者,需要知道的太多!以機師作對照是個合適的比喻嗎?

當我看著手上講述著安全方面的書籍時,由於安全議題縱橫了軟體的各個層面,我的腦海裏浮現的,就是機師養成嚴格而耗時的概念,養成一名機師要十幾年,養成一名程式開發者又何嘗不需要十幾年呢?Peter Norvig不就曾經發表過〈Teach Yourself Programming in Ten Years〉,十年養成並不誇張!

你的等級目標是?

接觸程式設計「不代表著就要走程式設計這行」、「重點是學習解決問題的思考方式」、「能多知道一種解決問題的工具」……這類理由都沒有錯,我不反對接觸程式設計,也贊成或設計過程式設計之類的體驗活動,藉由一系列安排而做出點東西來,能讓參與者知道程式設計大概是怎麼一回事,能夠多接觸一些創造工具,藉此引發各種可能性,總是件好事!

不過,這邊所謂的程式開發者養成之難,指的真的是成為一名真正的程式設計師!

這視你將程式設計師定位在哪,就最基本而言,也許是能混口飯吃,在〈Why Learning to Code is So Damn Hard〉這篇文章就談到了,要能真正用程式設計獲得一份工作,在體驗程式設計、做出第一個玩具,充滿成就與自信感的蜜月期之後,旅程才剛開始,這之後還得經過信心大失、不知天南地北等兩個階段,才能進入逐漸獲得正向回饋的階段,獲得用程式設計糊口的能力。

到達不了這個階段的人,就是我方才說的:「在準備踏入這行業訓練過程中,很多人就會被逐一淘汰了」。

不幸地,這時還不夠專業,也許只是個糟糕或一般的程式開發者,接下來還會遇到許多狀況,你得研究各種解決的方式,漸漸從實戰中獲取經驗,想辦法在接下來的二到三年內存活下來,也許就能比較不用擔心失業問題,因為就算想面試新工作也比較能被接受。

然而,如果想獲得更好的薪資待遇,就得繼續在這條路上精進個三到五年,這時間點往往也是個門檻,有人開始對程式設計感到厭倦或失去熱情,期待著轉往管理角色,這也是程式人養成的困難之一,這個領域要知道的太多,而能力與經驗往往就此而中斷的人卻很多。

走日不走心,十年如一日

有位朋友曾經提到,團隊成員中有人對他說到:「我並不想像你一樣不斷地成長」,確實地,更多時候,不少人只是想要有個工作,在可能的範圍內擁有自己的生活,這不能說是錯,只不過對仍然不斷演進,過去是最佳實踐,而現在卻可能是最差實踐的程式設計領域來說,更突顯出一名程式開發者的養成難度,因為,許多人的能力不見得隨著年資成長。

你想成為一名真正的程式開發者嗎?十年磨一劍的比喻並不誇張,相信這條路上,還有許多東西要精進,而不只是以那些速成或快速開發的噱頭而自滿,也才是對這門行業的尊重,尊重自己的行業,別人也才能尊重程式開發者,這並不是說你得時時刻刻逼著自己前進,總之別原地不動就是了,永遠記得,接觸程式設計很容易,然而,程式開發者的養成很難!

專欄作者

熱門新聞

Advertisement