工作上「需要早點應用新技術」的壓力,促使我嘗試用其它語言學到的知識,來解釋新的語言,
就結果而論,還滿不錯的,除了加快學習,上手的速度,也能夠對原來的知識有新的了解。
底下分享一些我學習程式的觀點。
練拳不練功,到老一場空… 那程式的基本功是什麼?
前文提到,理解是學習程式的真理。但是新手常面臨到的問題,卻是看似遠無止境的東西需要理解。
就事實而言,程式語言是一種集體創作的產物,所以總是有新的東西出現,可能是一個研究成果,或是一個框架想法。
因此對於新手,甚至是還沒有入門的人而言,我建議先嘗試去解釋基本規則背後用意,能夠講得出來,就表示有一定的理解。
不用太擔心解譯錯誤,當發現自己的解釋有誤,就去修正,這樣會慢慢的接近正確的想法。。
也許在剛開始的時候,不得不混雜著一些死背東西,當解釋的比例越來越多,需要死背的東西也相對減少。
會放在一開始說明,是因為在自己所看過的入門書,會說明背後想法的比例很低。
但是這些想法卻是程式發展中不能忽視的成分,既然書中不教,就只能靠自己一點一點的去體會。
舉個例子,許多程式語言有「import」語法…
以我的話來解釋,「它是一個能夠讓人在輸入程式碼時,可以少打幾個字(套件名稱)的機制」。
由於省了一些字,所以編譯器得先看過 import 設定,才能知道後面類別的完成名稱。
用這種方式思考,會認為「import 必須放在類別宣告之前」這個規則十分合理,也就不需要死背了。
當然有一些東西是理解不來的,像是「椅子」為什麼要叫「椅子」?
像是指令、關鍵字與保留字,許多就屬於這種不容易理解的東西,
但是其實只要程式多寫,範例多打,會發現它們很容易被記住,想忘記都很難。
反複的練習會讓人印象深印,因此有人說不需要去背指令、語法。
和其它自然語言不同,程式是一種學了就非得「寫」的語言。
練習即背誦一種,這就是應該把更多的精力用在理解的原因。
當然,如果英文程度夠,可以試著去體會一些專用名詞,想想它的創造者為什麼選這些單字。
有時候理解單字,對於它的相關應用有正向的幫助。
功夫分內外家,學習程式也不是只有一種套路可走。
我將學習程式簡單分成兩種不同的風格…理論派與感覺派,個人屬於是前者。
我喜歡先去了解一種概念的特性,或是設計者想要強調的概念,再去練習它們的範例。
這種模式的特點是會停留在所謂的入門課程許久,所以打下基礎會比較深。
因為一直到自認己經抓到程式的「感覺」,才開始接觸其它進階應用。
這些「感覺」讓我在寫作程式的時候,更有信心自己是「順著」語言的特性,能發揮更多語言特長。
缺點是花在「基礎」的時間久,相其另一種方式缺少「廣度」。
我的一位朋友走的是「感覺派」,喜歡嘗試不同新的技術與語法。
他藉由每一次的測試、實作,找出其中的變化與特長,體會程式寫作的原則。
簡單瀏覽入門課程,知道基本語法後,他就開始練習範例,或是想些主題試作。
他擅長切入新技術,也能很快的組合不同技術作出展示版本。
缺點則是在一些核心概念的理解,可能會有誤差,是比較重視「應用」的學習方式。
每個人適合的學習方式不盡相同,花時間找到符合自己的,不見得只有這兩種。
我的記性沒有朋友強,照他的方式,只會不斷忘記不久前發生的事,反而學不好。
既使偶而會用他的技巧來應付急迫的專案,但最終仍然會回到適合我的模式。
要注意的,重點是「有知識進到腦袋」,也就是無論快慢,讓自己持續累積。
當發現越來越多死背的東西,或是不知道為何使用的技法,就是該停下來將它們了解的時機。
累積太多死背的東西,會限制在程式領域裡的成長。
科技來自於人性,程式語言也能用「人性」去幫助理解…
從第一台,兩間教室大「計算機」開始,電腦的工作都是在於解決問題,或是滿足需求。
因為覺得某種語法難以學習、撰寫,導致新程式語言的發明,
希望寫更少的程式碼,不希望一直作重複的工作,造就各式各樣的函數庫、平台可以使用。
希望一同開發的眾人,能夠尊守某種規則讓開發順利,因而有許多模式、開發方法、設計原則、工具…等。
一直以來都這麼認為,越晚進入程式領域的人越辛苦,因為面對的已經發展多年,融合無數人想法的巨大結晶。
從來沒有經歷過那個時期的人,不能輕易能夠體會、理解為什麼程式發展到今天的面貌。
要有經驗的工程師說出以往的經歷是很困難的,這些已經「內化」的知識難以被條列說明。
所以去嘗試了解這些「結晶」的過程,無形中也就是在學習這些先輩們的經驗。
對於程式碼的撰寫,以至於軟體開發的規劃工作都能夠有所幫助。
學習的方式分享到此,下一篇談談學習、帶人的過程中,看到的錯誤及不好的習慣。
沒有留言:
張貼留言