如果您只是要精通寫程式(coding),兩個建議:
1. 建議你找Linux 的 Sources code 認真的去 trace. 國際頂級高手極大部分是這樣養成的!
2. 找機會多寫程式,並一直挑戰自己(專業術語叫 code review),思考如何用最短的行數寫出同樣功能的模組(程式)。
但精通 coding 在軟體界不過是一名"砌磚工"而已,"砌磚工"是沒能力設計穩固的大樓的。
如果你的目標是成為 Engineer 未來要帶領設計及蓋樓,你必須要進大學的資訊工程系軟體組。要學習最基本的硬體觀念,才能知道如何高效率的驅動硬體機能。並同時修軟體工程,人機界面,軟體測試、網路等科目,方方面面都要懂,才能掌握所有的技術細節,成為一個好的Architect,才能成為真正一等一的高手。Language/程式語言在一級大學的資工系是不算學分的,因為那只是必備的基本能力。而且英文也一定要好,因為最先進的know how 都是以英文release。好的軟體人員是無國際的,有問題都是以英文在專業討論區,彼此分享討論,英文能力不行,在電腦資訊界是沒機會成為高手的! 但優秀的 engineer 也都必須曾經是優秀的programmer! Programming 訓練(歷練)的目的是讓 engineer 知道如何監督"砌磚工"好好做事,看得懂什麼是好程式,手下的"砌磚工"才不會亂砌一通,蓋的大樓才不會搖一搖就垮的!
建議你可以上大學資工系的網站,參考他們的學習地圖,有些大學有非常詳盡的資料,能給你完整的學習方向,你可以參考。
加油!高中就懂得思考自己的方向,非常值得鼓勵!
BBdog3388 wrote:
在軟體業 Programmer 跟 Engineer 的差別,就像建築業裏的"砌磚工"跟"建築師"!
如果您只是要精通寫程式(coding),兩個建議:
1. 建議你找Linux 的 Sources code 認真的去 trace. 國際頂級高手極大部分是這樣養成的!
2. 找機會多寫程式,並一直挑戰自己(專業術語叫 code review),思考如何用最短的行數寫出同樣功能的模組(程式)。
但精通 coding 在軟體界不過是一名"砌磚工"而已,"砌磚工"是沒能力設計穩固的大樓的。
如果你的目標是成為 Engineer 未來要帶領設計及蓋樓,你必須要進大學的資訊工程系軟體組。要學習最基本的硬體觀念,才能知道如何高效率的驅動硬體機能。並同時修軟體工程,人機界面,軟體測試、網路等科目,方方面面都要懂,才能掌握所有的技術細節,成為一個好的Architect,才能成為真正一等一的高手。Language/程式語言在一級大學的資工系是不算學分的,因為那只是必備的基本能力。而且英文也一定要好,因為最先進的know how 都是以英文release。好的軟體人員是無國際的,有問題都是以英文在專業討論區,彼此分享討論,英文能力不行,在電腦資訊界是沒機會成為高手的! 但優秀的 engineer 也都必須曾經是優秀的programmer! Programming 訓練(歷練)的目的是讓 engineer 知道如何監督"砌磚工"好好做事,看得懂什麼是好程式,手下的"砌磚工"才不會亂砌一通,蓋的大樓才不會搖一搖就垮的!
BBdog3388清楚的表達了我想傳遞的,前面在說什麼「資工系幾乎是不會教物件c的」﹑「上不上資工根本不是重點」,我個人無意批判,不過是把事情看的太表面了一點(不是要袒護資工,也沒唸過資工系,過去在半導體業從事數位IC電路設計)
拿中文來舉例吧,聽說讀寫你我都會吧,那你有把握寫出一篇好文章嗎?您的文學造詣夠嗎?
英文假設你背了所有的單字,那文章你一定看的懂,但是若是讓你來寫一篇呢?
程式語言只是工具,就像中文或英文只是工具一樣,要把他利用的好,還有很多要學的
i.e, a=a+1跟a++得出來的答案是一樣的,但是為什麼用a++稍微好一些?這要從computer architecture的instruction set談起。等你過了這座山,你會發現後面還有好多座山,爬過後回頭一望,也許你會發現,演算法其實是核心
2. 想要"完全精通"是個很危險的想法,通常結果不是以為自己很精通了,就是因為發現在程式語言背後的知識太多了而感到失落。我建議用“可以學到沒學過的有趣知識而前進”這樣的想法比較好。
3. 能花時間把 CS193P 上完,想必你也不是個簡單人物,只要保持熱情並持續沉浸在資訊科技的氛圍裡,遲早可以成為優秀的人才。
4. 最後,如果暫時沒有頭緒,可以從“高中生程式解題系統”先下手練習,借由解題去學習相關的知識更有目標與成就感。
延伸閱讀:
追求神乎其技的程式設計之道
Mason.Lyu wrote: a=a+1跟a++得出來的答案是一樣的,但是為什麼用a++稍微好一些?
老實說這種問題一直都是很難追究的,因為你的程式碼會有可能被編譯器或是該架構給特殊優化也說不定。像是你舉的此例,如果連我們肉眼看都知道a要遞增,沒道理編譯器會傻傻地不優化。考慮到很多硬體架構,也不少演算法會是比較快但容易造成cache miss或是管線預測失敗的狀況,這部分可以參考有些遊戲引擎的簡報或是底層優化。
而且如果同樣要遞增,我認為++a會更勝a++一籌,因為沒有temp value。
rockindy wrote:
4. 最後,如果暫時沒有頭緒,可以從“高中生程式解題系統”先下手練習,借由解題去學習相關的知識更有目標與成就感。
雖然我也是高中生,但我還蠻討厭解題系統的......
我覺得朝著自己喜歡的方向研究就好,不一定得先從演算法開始。
Mason.Lyu wrote:
BBdog3388清...(恕刪)
沒錯我是資工學位,資工系軟工組畢業後從基本的programmer 一路做起,第一個主管是來自美國軍方軟體開發團隊(美籍),工作後第一個練習的project 是一個人一個月在PC 上只用 bios 及 dos 開發一個 windows OS(piece of cake), 至今帶產品開發團隊十幾年。我這輩子看過太多只會 coding 沒有完整電腦資訊觀念,永遠不懂如何開發"高效率"又"穩定" 產品的砌磚工。
我兒子今年申請大學,他自己堅持要專攻軟體開發裡最 hardcore 的大型遊戲軟體開發。在我兒子決定大學方向前我從未讓我兒子trace 過任何程式,只從小給他 PC/NB/tablet/smart phone/kindle/iPod nano .....及螺絲起子一盒,讓他當玩具玩而已。
電腦這行很現實,知識及經驗的厚度決定一個人未來的發展高度,英文不好就永遠沒機會吸收最先進的知識,也無法加入全球頂尖高手間的討論,這些一點都騙不了人。我對還在高中樓主的建議其實只是保持興趣,考間好大學的資工系,然後努力充實自己而已!