2013年11月29日 星期五

資深開發者給後輩的七個 Coding 學習心得

來源
http://techorange.com/2013/11/29/wish-someone-had-told-me-when-learn-coding/



(作者 Cecily Carver 目前為資深軟體開發者,她在 Medium 有一系列關於學習 Coding 的文章。以下文字以作者第一人稱撰寫)

我承認選擇學習 Computer Science(電腦科學)是為了證明我是個聰明人,而我想要做聰明人的工作。學習  Computer Science 、Coding 剛好可以滿足我喜歡數學以及理論的興趣。
但,單就這個原因並不能維持我長久以來的動力,將科技與音樂、文學結合在一起,才是我真正想做的事情。
我現在要試著告訴你們一些,在我學習程式設計時非常希望有人可以事先告訴我的事情。
  • 在你開始 Coding 之前,你必須先知道你想做些什麼
學習 Coding 是為了打造某些事物,有可能是網站、有可能是某些系統,也有可能是 App,Coding 這條路會隨著你個人目標越來越清楚而越顯寬廣而明確。
如果你只是為了「學習 coding」而沒有一個明確的目標的話,這條路可能會走得比較艱辛。
而你到底想要做些什麼?
網站、遊戲、iPhone App、成立一家可以讓你致富的新創公司、互動藝術(Interactive art),或者你只是想要完成學位、找個工作、在履歷表上加註一條說明,這些不同標都很不錯,並沒有優劣之分,確定你真正想要的是什麼,並勇敢地朝那個方向前進
  • 學習 Coding 沒有秘訣
學習 Coding 就像學習一個新語言一樣,你必須要了解文法與基本字彙;就像學數學一樣,針對不一樣的問題有不同的解決方法;就像一切其他的技藝或是藝術創作一樣,有一些技巧、工具,有一些前人累積下來的做法可以學習。
你不用害怕不夠聰明,我在 Computer Science 的課程中學習指標(pointer)還有遞迴(recursion),當我到職場上開始工作,發現完成一份工作、一個專案與這些概念的相關性並不大。
不過當你的 Coding 工作越來越高深、層級越來越高,所需要的知識也就越多、越來越專業,不過哪個領域的工作不是這樣呢?
  • 第一次也許不會成功,也許第二、第三次也不會
當你真正開始學習 Coding 你一定會遇到這種狀況:
明明已經設定好一切該做的設定,也再三確認過程式碼了,但是程式卻一直 compiler 失敗,也找不出原因,反正他就是不讓你成功。
這時候的你一定很想大罵髒話,甚至覺得自己一輩子都找不出失敗原因,而想要放棄。我也曾經有這種感覺,當時我試著寫 C++ 程式,「segmentation fault」不停不停地跳出來煩我。
其實這種經驗是每一個程式設計師都會遭遇到的情形,這跟你聰不聰明無關,如何回應問題、回應錯誤,才是要點。
我發現在新手程式設計師與老手之間最大的不同之處就在於「信念」,不管是對於問題還是完成目標的信念。一個程式從「不會動、compiler 失敗」到「成功地運行」之間的秘訣也許並不容易找到,但帶著你的耐心、堅持著信念去尋找,終將找到成功的路徑。
  • 也許常常有人說你是錯的
大括號應該要放在下一行、大括號應該要再同一行;你應該要為你的程式加註解、好的程式是不用註解的;括號裡的程式應該要齊頭、齊不齊頭可以看個人習慣。諸如此類的評論不斷地在你身邊出現,指責你的錯誤。
有很多程式設計師非常指責別人的錯誤,或是要別人改成他習慣的模式,但並不代表那是唯一的真理,也許還有很多解決的方式。在我早期從事 Coding 事業生涯的壓力之一,就是總是有人說我做錯了。其實我並沒有做錯,只是並不是用他們所習慣的方式來完成。
在 Coding 生涯中必然會遇到需要與其他人一起完成專案的時刻,也許開始有人指出你的方法錯誤,他們有可能是對的,這也是個反省、更正自己錯誤的好時機。但有時候,他們只是無法習慣別人不照著手冊、不照著過往遵循下來的方法做事,這只會造成許多無意義的爭執。
  • 也許常常會有人跟你說「你並不是個 Coder」
HTML 並不是一種程式語言,是一種標籤、如果你不是用 vi,根本不算 Coding、真正的程式設計師都懂 C 語言、你根本不應該學 coding、你根本就不是個程式設計師(但我是)。
「Coding」對不同人來說有很多不同的意義,現在的程式語言看起來跟以前也不一樣。有趣的是,現在因為工具或是框架(framework)工具的發展,讓寫程式變得比以前更快、更簡單,這不只是對新手來說,對受過訓練的老手同樣有幫助。
但,這似乎也被貼上了「不是真正的 coder」標籤。
更多時候他們是害怕,如果有一天人人都可以稱自己是程式設計師,那這個稱號將越來越沒有意義、社會地位不再。
就算讓你走進 Coding 世界的只是簡單的 HTML,或是 excel 的巨集,只要這是你願意堅持的,那就值得花時間繼續努力。 當一段時間之後,你越來越習慣了,自然而然會去找尋更有力量的工具來輔助,得以進階。
  • 不要在意外表,能力才是一切
我以前總是非常擔心自己不像個「real geek」,特別是在學校,我浪費了很多時間在讓自己的衣服、談吐、閱讀的書籍甚至是軟體設定符合 geek 看起來的樣子。因為這根本不代表什麼,你的 Coding 能力並不會因為你越融入 geek 文化而變得更好。
但是你如果已經是個標準的 geek,下次在評估別人的時候千萬不要再以「他看起來不像個 geek」為標準。
  • 堅持比方法更重要
有關如何「正確的」、「最好的」方法學習 Coding 的文章並不缺乏,而且還有很多其他不同的方法。你可以從一本書網路上的互動練習或是幫其他人 debugging 中學習 coding。你也會因為不同的原因或是帶領者走進不同語言的領域中。
而在學習 coding 一事中我們常常可以看見一種狀況,不管你是買書自學,還是從網路上學習,一開始當新手、初學者的快樂時光一下子就結束了,隨之而來的是令人煩躁的瓶頸。你知道如何印出「hello world!」,去卻不知道如何開始一個「真正」的專案,你只是跟著別人一步一步照做,而不是真正的了解背後的意義。
Coder 應該不斷學習,追求進步
當你走到這個階段,大部分網路上的學習網站對你來說已經沒有什麼用處,他們把你斷定為一個「有經驗」的程式設計師,問題在於「你並不知道你不知道什麼(you don’t know what you don’t know.)」,找出下一步該學習的東西,就是學習的一部分。
學習 Coding 總會遇到撞牆期,唯一可以克服的方法就是繼續堅持下去,這代表你要常是學習新東西、找更多的資訊,從這些破碎的資訊與資源中建立起自己的知識與專案,將會在其中與專案的結尾了解到 coding 的初衷。
如果你持續地把磚頭一個一個疊起來,在經過一段時間,也許是一段很長的時間,你總會獲得一面牆。這就是前面所講到的「信念」,你如果相信時間與耐心可以讓你把 Coding 完成,那你肯定可以做到。
(參考資料:Medium;圖片來源:Desarrollando América Latina, CC Licensed)

沒有留言:

張貼留言

請留言,謝謝囉!Thank you.