給校園程式人的參考方向


iThome 網站首載:給校園程式人的參考方向

學校教育、教育訓練與業界需求之間,三者都存著許多結構複雜的問題,這類問題不單只是發生在臺灣,Joel Spolsky在《Joel on Software》、Robert C. Martin在《The Clean Coder》中都有闡述過類似問題。不少人基於經驗與觀點,點出了問題並提出不錯的建議,身處學校教育與業界需求之間的教育訓練這麼多年,倒也有幾個方向想提供給校園程式人作為參考。

確定是否要逃離程式設計

如果執行教育訓練的對象是社會新鮮人,在第一天我必然會告訴他們:「在這一連串課程之後,希望你真正獲得的是兩個結果。結果之一是覺得講師上得太好了,激發了你對程式設計的無限熱情,這就是你日後的道路;結果之二是覺得講師上得實在太爛了,讓你感到程式設計前途無亮,不會亮的亮,逮到機會的話,你一定要逃離程式設計這領域...」雖然這句話大都講給社會新鮮人,不過對於還在校園的程式人來說一樣適用,「程式設計這行很辛苦,要逃趁現在」!

這當然是玩笑話,不過強調的是確認未來道路的重要性。只是若要逃離程式設計,那麼幾年來學校所學不就白費了嗎?今年11月我在逢甲做了個非技術性演講〈給校園程式人的三個故事〉,第一個故事就是在告訴大家,過去的一切並不會白費,至少過去的經歷與思考,足以摸索出你不適合這條路,這個結果是非常可貴的,在學校這段最重要的時間裡,真正要學會是探索的技能,而該探索的第一件事,就是自己是否適合這條路。

許多人以為,在校學生的問題在於沒有學到業界實際運用的技術,不過實際上我接觸過的學生,都還沒有能力去面對這個問題,你越是去教導他們具體的路線,他們就越只會依循路線前進,不再去思考與探索,Mr. Monday曾經發表過〈學用落差的假議題〉,就談到了探索的重要性,其中就講到「當前面不再是鋪好的道路時,大家慌張了,大家開始質疑著自己之前所花的教育時間是否白費」。

確定是否要逃離程式設計很重要,應該說學會探索能力很重要,一旦探索出自己想走的道路,學習的樂趣才會呈現,如同我上篇專欄〈對Y Combinator的好奇與挑戰〉,就算沒有暫時實用性,也會一笑置之,有樂趣才不會怕失敗,不怕失敗對於過去發生的每件事才都能視作經驗,這些經驗在未來才有連接在一起的可能性。很少人一開始就能決定自己想走的路,如果你一開始就確定了當然很好,如果你還沒確定,別擔心,你並不孤單,怕的只是你不去獨立思考與探索。

在校時就養成寫作的習慣

如果真的要我建議具體的技能,那我的建議之一就是,在學校時就養成寫作的習慣,因為是在校程式人,姑且就更具體地說是技術寫作吧!為什麼是寫作?在我先前專欄〈程式設計者的技術文筆與寫作〉中談過,文筆代表溝通與組織能力,技術寫作能訓練重構與抽象能力,大量閱讀才能淬煉想法與文筆,技術寫作可以記錄假設與論證。Joel Spolsky在〈給資訊科系學生的建議〉中也談到「在畢業前學會寫作」,你應該去看一下!

不過我承認,在寫〈程式設計者的技術文筆與寫作〉時,我設定的對象並不是在校程式人,對學生而言寫作有那麼難嗎?如果你沒有認真地做過技術寫作,我可以告訴你「很難」,至於讓寫作成為習慣,我可以告訴你「真的很難」,iThome鐵人賽三十天不間斷地發表文章,基本上就突顯出持續寫作的困難度。

養成持續寫作習慣的方式之一,就是記錄自己學習的歷程,前題就是別相信自己的腦袋能記住一切的事物,把自己的心得、可能遺忘的細節,試著有組織地記錄下來,省視自己寫作的頻率,就會發覺自己學習的頻率,太久沒寫作多半是荒廢了學習;記錄自己學習的歷程很有趣,很多時候會自以為是的覺得自己懂了,只有在面對寫作時才會發現自我無知的部份;記錄會有對的也會有錯的,將來回顧記錄過程時,發現以前的錯誤是很正常的一件事,你該覺得高興,因為至少表示這段日子是有成長的。

養成寫作習慣之後,漸漸地,就會發現自己有能力陳述並釐清問題,許多學生明顯可見地連陳述問題的方式都不會,更別說與他人溝通自己的想法了。在持續寫作上實際一點的用處是,這可以是你將來履歷上具體可查驗的一份證明,因為留下的寫作成果,就是你學習、探索的詳細記錄,即使你將來不走程式設計這條路,都無損於記錄中呈現的學習、探索能力;如果你持續地走程式設計這條路,寫作呈現出來的實際效果,比之其他領域都來得多,特別是在這幾年來,技術寫作已經被認為是優秀開發者必備的特質之一。

培養抓取搜尋關鍵字的能力

在談抓取搜尋關鍵字之前,我得先談談閱讀原文技術書籍或文章的能力。如果你處於培養技術能力的起步階段,從中文技術書籍開始很好,因為沒有語言障礙,一本書呈現的知識體系也比較循序漸進且完整,無論是原創或是翻譯,中文技術書籍市場中有很多好書值得閱讀,不過現階段得承認的是,如果你有技術能力的進階需求,中文技術書籍與文件的選擇就相對地少,你得學會閱讀閱讀原文技術書籍或文章。

閱讀原文技術書籍或文章,英文當然是必要的能力,不過請你採取實用主義,以看得懂你手中的原文技術書籍或文章就可以了,看懂沒那難,語言一開始都是這樣,一篇一篇看,自然你就熟悉了,想想小嬰兒不也是牙牙學語開始(就算程式語言也是如此);採取實用主義的另一個意思是,如果你手上的原文書看不懂,別死啃那本書,試著釐清看不懂的問題,抓取問題的關鍵字在網路上搜尋相關文件,然後看懂他們。

一旦有抓取搜尋關鍵字的能力,你就開啟了多方吸收觀點的能力,知道不同的人怎麼解釋同一件事,你就有機會從中找到問題的答案,搜尋到的文件會有中文也有原文,別排斥看原文,如果你找到翻譯文章,試著找到原文出處並閱讀,閱讀原文技術文件的能力,就是這樣一點一滴自然而然累積起來的;只要你能養成釐清問題、抓取關鍵字、搜尋答案的這個習慣,將來面對問題時,就不會慣性地處於被動狀態,而會自發地思考如何解決問題;就如同寫作一樣,抓取搜尋關鍵字的能力也是能越練越純熟,在利用不同關鍵字搜尋答案的過程,你就會發現對關鍵字敏感度的差異,經常影響了解決問題的效率。

參與社團或社群活動經營

只要是正當的社團或社群,任何類型都可以,試著參與社團或社群活動經營,注意!不單只是參與活動,而是活動經營與籌劃的過程,這跟技術無關,而是跟溝通、合作、協調、責任等能力有關,程式設計發展至今,已經不是單打獨鬥就可以通吃一切的領域,套句流行術語,除了自己的技術專長之外,還得擁有「跨界」交流的能力,就目前這個時間點來說,擁有在前端與後端、程式人與設計師、開發者與社群經營等之間跨界交流能力的人,往往能將一件事做得更好。

我不知道各位校園程式人現在過得怎麼樣,你對本科系的東西有無興趣我並不清楚,因而我不想告訴你該學什麼技術、做什麼專題、參與什麼專案之類的,就連這邊的方向也僅作參考;實際上任何建議與參考你都得獨立思考過,然後擁有跟隨內心與直覺的勇氣,這樣你才能夠不畏懼失敗!