軟體開發學習建議 - 給就讀資訊相關科系的學生

我目前就讀五專資訊管理科二年級,實質年齡為高二,但比起別人早踏進大學校園。雖然並不是什麼高手,但在上了兩年多的課之後,發現了一些學校教育的問題以及一些一般學生不太知道的東西,於是想要分享給所有目前就讀資訊相關科系的學生們一些軟體開發學習上的建議。

我不敢保證我遇到的狀況適用於每所學校以及每個教授,但或許你也會遇到同樣的狀況,以下是我的分享。

不要學習重複的東西,先把一樣練起來,活用它解決任何你遇到的問題

我們一年級程式設計課程上的是 VB.net ,上課講到的都是程式語言 Syntax 的東西,有時老師會出一些練習作業,讓我們寫些「小程式」,例如列印三角形、求函數之類的東西。在入學之前,我已經有稍微寫過一些小程式了(很碰巧當時也是玩 VB.net ),不過因為國中的時候並沒有深入接觸,當時的程度也只是比完全沒碰過的人強一些而已,因此以當時的狀況來說,我認為一年級這樣上蠻 OK 的。

一年級下學期的時候,某天突然很想踏入 Web 開發的行列,於是便開始看書自學 Ruby on Rails ,當時我的學習方式是照著書本打 Code 做完整份專案,之後闔上書本閱讀我之前打的 Code ,試著釐清每一行的意思,之後便開了一個新專案,針對我想解決的一個問題設計網站,過程中忘了某個東西便回頭閱讀之前的 Code ,真的看不懂再回去翻書,如此獨立完成第一個專案後,又反覆這樣的流程好幾次,針對不同的問題設計專案,最後終於把 Rails 基本開發的能力練起來了。(如果您也對 Ruby on Rails 有興趣,歡迎閱讀我之前寫的文章「Ruby on Rails 自學推薦資源以及注意事項」)

到了二年級,程式設計課程換教 C (老師也換人了),但沒想到又是教 Syntax (聽說三年級換教 Java),透過自學 Ruby on Rails 這項技能的經歷,我驚覺學校教育的方向是錯誤,因為:

  1. 教的東西都是重複的。
  2. 老師只是教 Syntax ,讓我們寫一些小程式熟悉它們,卻不是讓我們運用這些東西解決問題。

因此如果您也是就讀資訊相關科系的學生,而且也遇到了與我相同的問題的話,我建議您:

  1. 挑選一個您有興趣的程式語言,把它練起來。
  2. 持續使用它解決生活上遇到的問題。

這樣比起你了解一堆程式語言的 Syntax 有意義多了,Syntax 無師自通並不困難,我認為學校教軟體開發上的思維意義是比較大的,因為這種東西是通用的,不會因為換了一個程式語言就不適用。

學會看錯誤訊息自己 Debug

平常上課的時候幫同學 Debug 發現:

  1. 他們不會自己看 compiler 的錯誤訊息除錯。
  2. 他們不太會思考為什麼會有這樣的錯誤發生。

以幫我同學 Debug 的經歷來說,我發現有九成以上問題的答案都在錯誤訊息中。

我建議資訊相關科系的學生們,遇到問題的時候先看錯誤訊息,看不懂錯誤訊息指的是什麼的話就 Google 找答案,如果 Google 找不到的話可以嘗試上 stackoverflow 詢問,真的逼不得已再詢問老師。

學會翻 Documents

這也是觀察我同學發現的現象,當他們不知道某個 function 的用途時,不是翻課本就是詢問別人,但事實上只要自己去翻 Documents 就可以知道使用方法了。

翻 Documents 可以發現很多好玩的事情,一個 Programming Language 提供給你的工具不是只有書本上寫的那些而已,有很多東西你沒有翻 Documents 是不會知道的。

練習寫作

寫作也是我非常建議大家練習的技能,這裡談的寫作並不是要你練習使用優美詞句敘述,我指的是「文字組織編輯能力」,若你能夠用文字清楚分享你所學的東西或是表達自己的思想,代表你的思考邏輯是很流暢不混亂的,寫程式跟寫作非常類似,如果你的邏輯混亂的話,寫出來的程式別人是沒有辦法輕易讀懂的,因此我發現寫作多多少少會影響到你程式寫作的能力,當然這並沒有絕對正相關。

寫作不只可以訓練你的邏輯思考能力,也可以檢視你自己對這個議題的熟悉度是否足夠,此外將你會的東西分享出來,別人可以從中受益也可以幫你釐清觀念,這對作者跟讀者都是有利的。

發表文章到 Blog 上也是展現自己的一種方式,從各方面來看,寫作都是非常值得你培養的技能。

學會使用 Version Control System (版本控制系統)

經由我的觀察發現多數就讀資訊相關科系的學生都是用以下方式管理自己的 Code :

  1. 如果要新增一個功能,就把原來的 Code 複製一份,改一個名字。
  2. 複製的這份 Code 確認正常無誤後,就把原來的 Code 刪除,把這份新版本的 Code 改成原來的名字。

如果 Code 只有一個檔案而且很少行的話,這樣的方式並不會造成什麼問題,但如果是開發一個專案的話,這種方式絕對會讓你抓狂的。

面對這種情況你需要的是「版本控制系統」,版本控制系統有很多種,我個人建議你使用 Git ,你可以上 CodeSchool 的這個免費課程了解如何使用 Git :Try Git

不要排斥原文內容

以前想學習某樣技術的時候,第一件事就是去書局找中文書,但直到我為了學習 Ruby on Rails 而勉為其難閱讀原文書籍之後,才發現原來很多原文書籍寫得非常好。

不只是書,網路上很多很棒的課程也都是英文的(如 CodeSchool ),如果你一味排斥英文內容的話,只會限制住自己的視野,讓自己無法更上層樓而已,因此我非常建議大家不要排斥原文的學習資源。

訂閱電子報 && 追蹤 Podcast

訂閱程式社群的電子報以及追蹤程式社群的 Podcast 對於自己實力的成長也非常有幫助,當然並不是每一期都會有適合自己學習的東西,但常常會看到一些大師寫的思維性文章、案例分享等等,此外透過訂閱電子報以及追蹤 Podcast 也可以幫助自己掌握最近的趨勢。

我平常有在追蹤的電子報和 Podcast 如下:

電子報

  1. Ruby Weekly : http://rubyweekly.com/
  2. Javascript Weekly : http://javascriptweekly.com/
  3. HTML5 Weekly : http://html5weekly.com/
  4. DB Weekly : http://dbweekly.com/

Podcast

  1. Ruby5 : http://ruby5.envylabs.com/
  2. 5 Minutes of JavaScript : http://five-js.envylabs.com/

提問的技巧

  1. 不要問別人「這個功能怎麼做」,這代表你連思考都沒有,只是冀望別人幫你做出來。
  2. 如果你真的不知道「這個功能是如何實現的」,至少要把自己思考的東西告訴對方,例如:「看這個架構,我猜應該是用 A 和 B 做出來的,只是具體的實現並沒有辦法很清楚地了解,可以麻煩您告訴我嗎?」

問問題也是成長很快的方式,我很常問問題,但並非毫無頭緒地隨意發問,在我詢問別人之前基本上都是在已經思考很多、四處尋找答案還是無解的狀況下才會求救的。

請人幫你 Code Review

請別人幫你 Code Review 也是成長非常快的方式,不過對於學生而言要找到人幫忙 Code Review 可能比較困難,有兩種方式可以嘗試看看:

  1. 找自己認識的工程師朋友。
  2. 找程式社群的朋友們。

但不論是尋求誰的幫助,都一定要好好感謝對方,畢竟別人在忙碌之餘還願意幫你免費 Code Review。

結語

這篇文章提到的每一點都是個人實戰後發現非常受益的事情,如果您也是就讀資訊相關科系的學生的話,相信或多或少這篇文章對您會有幫助的。

如果您有任何更好的建議也歡迎提出來,我相信一定還有很多是我沒看到的點。

comments powered by Disqus
分享至 Facebook 分享至 Google +