如何學習程式語言成為程式設計師
本文只告訴你該做什麼,而不是實際教你,讓你學會這些事。
因為自己實際去尋找答案,就是學習一門程式語言最重要的心理要素,你現在就跨出這一步的話,那就有了程式設計師強大的心理條件了!
所以我故意只給個方向,而不是就地把答案整理好讓你學會這些事情。
但我會把方向指得很到位,就像看著衛星導航地圖找路一樣,只會覺得能找到答案,不會迷失~
了解自己選擇這門語言的理由,但告訴自己它不是最好的
這樣才不會自己騙自己,而能冷靜分析癥結點在哪,然後懂得做適當的取捨。程式設計過程中,不懂得捨棄不適合的項目,硬迷信自己選擇的是萬靈丹,結果產生出來的程式往往都在破壞原則,搞爛掉整個設計。
就算每個階段都有最好的程式語言,但如果你 BASIC 用沒一年換 C,沒一年又換 Java,沒一年又換 Python,我看你能做的事情可能比 BASIC 用三年的人還少。最好的程式語言不等於完美的程式語言,而真正接近完美的其實是長期對某一語言之缺陷所累積的解決經驗。
覺得語言不夠用,所以多學其他領域的程式語言則另當別論,例如 BASIC 無法滿足網頁程式設計需求,所以多學 JavaScript,然後又學 PHP,這種是各種領域都學一種語言,而不是同樣一個領域不停換新的語言。
初學程式設計,一種語言請起碼堅持三年的使用經驗,才會帶給你學習效果。
熟練語法,但別耽誤太多時間在這上面,其實語法不是程式設計的重點
以結構化程式設計的觀點(而不是物件導向的觀點),熟練「變數」「型態」「陣列」「條件」「迴圈」「函式」等語法;能說明這些東西的用途即可,不用過度深入研究。
很多人誤以為這些就是程式設計,而準備花一整個月、甚至整個學期去學習。其實這些都只是「語法」,是相當簡單的東西,會用就好,根本不需要花太多時間在上面。
想花時間練習是因為「語法」被誤會成「邏輯」,不過「邏輯」不是靠練習「語法」能有效獲得的,而是在實際嘗試寫軟體時,思考出解決問題的方式,有效獲得的。
所以別耽誤太多時間在語法上面,一天專心練習其中一個語法,一星期就能練完這些基本的語法。然後開始嘗試寫軟體,想辦法用這些語法展現你心目中想要的功能,自然會發現到有好多種「邏輯」可以嘗試其演算結果。
明白電腦運作原理,能讓你思考程式設計時,清楚自己在做什麼
了解 CPU 與 RAM 是怎麼搭配起來運作的,這不僅是電腦運作的基本原理,更是程式實際執行的方式,所以能讓你知道程式設計是什麼東西,清楚自己透過程式設計應該讓電腦怎樣動作,從此對程式語言就得心應手了。
此外也應該思考 HD 與 OS 在這運作原理上對程式設計帶來的變化,程式語言演變成讓作業系統動作,而不是直接對電腦下達命令。不過這並不影響最原先的運作原理,只要知道有這種狀況就好。
CPU 演進成微處理器的架構後,BUS 對整個電腦運作原理也是很重要的議題,但如果我們學的不是組合語言或者用 C 語言開發驅動程式,那基本電算原理以外的複雜主機板架構,對應用軟體的程式設計師而言可以忽略。
在明白電腦運作原理後,你會發現電腦的本質是運算,而程式的本質是用來操作電腦、讓電腦運算,這就對了!能有這觀念很重要,不要誤以為程式的本質是運算1,那會讓你寫不成軟體,只是在把玩程式語言而已。所以別小看電腦運作原理這件事,它能讓你處處展現電腦科學的精神,感覺不出是自學的程式設計師,宛如科班出身的專業人才。
務必學會查閱 library reference 來設計程式
以 Java 程式語言為例,首先你要掌握的是傳統結構化程式設計的語法如何靈活應用,接著要了解物件導向程式語言有哪些組織程式的方式,然後就是研究 JDK 提供那些 API 供我們使用。
所以,學會查閱 Java API Specification 來使用各個類別的功能,是非常關鍵的一環!如果你看不懂且不會用 Java API Specification,注定就是個鱉腳入門者,很難晉升為程式設計師,無論如何都要學會才行!
每個程式語言,都跟 Java 一樣,有一套這樣的程式庫,你要學會查閱這種文件。
這不是一次性學會的,因為每個程式語言的文件有其不同格式、甚至不同學術理念、更別提有些文件寫得很糟,所以是要花時間去熟悉怎樣查閱文件的,花個兩三天才知道重點在哪是很正常的事。
成熟的程式設計師,不在於技術,而在能以平常心除錯
初學程式設計的人,想達到每次程式寫出來保證都能通過編譯的境界,在於除錯經驗的累積,讓你懂得規避錯誤。絕對不是因為在學習時,靠著聰明才智而充分理解語法,所以能寫出正確無誤的程式。因此,千萬不要在寫的程式總是編譯錯誤時,自認為沒天分而感到氣餒,那是靠除錯經驗而來的。以平常心面對錯誤,心平氣和地逐步解決,才是成熟的程式設計師。
況且,很多錯誤並不是語法上的錯誤,而是邏輯上的錯誤,軟體執行時才發現運算情況不對。這事很常發生,想完全不除錯不太可能,所以一名成熟的程式設計師是不會對除錯感到意外,只會很稀鬆平常的接手處理。
甚至高竿的程式設計師,會故意寫錯誤的程式碼讓編譯器咆哮,以確保程式的品質。所以不要把編譯錯誤的訊息當作責備感到挫折,而要把會發出錯誤訊息的編譯器當聊天對象;日後你還會嫌它話太少、口風太緊,打探不出你想聽的八卦 XDDD
如果你實在做不到這一點,那放棄學程式設計吧,這不適合你:「我是說真的,沒在開玩笑!」你會找到再怎麼出錯也很有耐心去處理的工作項目,那才是適合你的技術,你一定會具備那方面的專長…但顯然程式設計不是。反過來說,如果你不得不成為一名程式設計師,那關鍵就在於你是否能耐住性子,跨越「除錯」這道難關,有這樣成熟的工作態度,那就是一名貨真價實的程式設計師了!技術會隨著經驗的累積而成長,不是問題,關鍵在於是否成熟面對除錯這件事~