過往學習經驗:
2016年年初學了大概100個小時左右的HTML和CSS入录,今年8月辭職後花了約30小時學Ruby银伟。
但是後來發(fā)現(xiàn)太沒有系統(tǒng)性而且當時自學能力還不夠有系統(tǒng)寝并,所以我就報了XDite推薦他朋友創(chuàng)立的Launch School的課程自學(誰知道現(xiàn)在就打對臺了),從九月初有系統(tǒng)性的上課到現(xiàn)在大約4個月了曼尊。
為何開始學編程:
從工作的角度:(1)編程是相對不容易被取代的技能(2)復利效應好(3)一個底薪高而且相對來說沒有收入天花板的職業(yè)
從個人的角度:我一直想要不受地域限制腺办,有一臺電腦和網(wǎng)路就能工作,而顯然編程能夠完美的符合這個條件。作為一個過往沒有什麼積累和成就的加上興趣相對廣泛栅贴,既然要從頭開始所以我選擇了一個能滿足自己目標丶收入丶未來發(fā)展的技能。
為何選擇Ruby:
因為在先前的實習還有打工經驗都會碰到網(wǎng)站熏迹,曾經用wordpress架網(wǎng)站檐薯。但發(fā)現(xiàn)花了數(shù)百個小時只學會了下載一堆套件丶跟客服寫信溝通丶自己手動調整網(wǎng)頁,完全沒有技術可言注暗,加上當時想要離職而且深信會coding是未來的機會坛缕,所以我就跳下去學了。
而Ruby作為架網(wǎng)站的語言之一捆昏,有慣例優(yōu)於設定丶DIY等特點赚楚,感覺起來雖然有限制性,但卻給了初學者有更多的時間專注在真正有價值的事物上骗卜,所以我才開始學Ruby宠页。(但讓我晚幾個月開始我可能會學Python就是了)
是否該選擇線下/上課程:

以臺灣的alphacamp為例(澄清一下我沒上他們的課程哈),這個營隊最大的好處是寇仓,他會把同時在進行營銷丶iOS開發(fā)丶網(wǎng)頁開發(fā)丶UI設計的學生組合在一起举户,讓不同領域的人一起做出一個畢業(yè)專案,讓在老師手把手的情況下進行像業(yè)界一樣開發(fā)產品的過程遍烦,而這種學習協(xié)作的能力是一般線上課程辦不到的俭嘁。
除此之外在入門時有高手手把手教你,絕對可以讓你在未來省下很多力氣乳愉,像是如何debug丶怎麼寫出漂亮的代碼丶如何設計userstory等兄淫。這樣的課程強度高效率又好,但是唯一的缺點就是:貴蔓姚。
相反的捕虽,線上課程的最大好處在於相對便宜和時間自由,還有另外一點是可以鍛煉個人的英文跟自學能力坡脐。所以最終要衡量的話應該要把學費丶總共學習時間丶何時能找到工作丶第一份薪水多少錢等等納入計算泄私。
像是臺灣的alphacamp要3.5w人民幣,耗時兩個月,但是在畢業(yè)一個月內可能可以找到一份1.3w人民幣的工作晌端,所以這樣以一年的區(qū)間來看捅暴,我的凈收入應該是13 X 9 - 35 = 82 k人民幣。
相反的咧纠,如果今天一個學生自學6個月蓬痒,每個月學費1.2k人民幣,在畢業(yè)一個月內找到工作漆羔,以一年來看凈收入是13 X 5 - 1.2 X 6 = 57.8 k人民幣梧奢。雖然這個計算可能會隨著個人的學習效率還有很多變動因素影響,但我在這邊是想提供一個比較完整的計算方式供大家參考演痒。
如何選擇編程的教材:
「花錢買時間和注意力」亲轨,我一開始適用codecademy的課程上,這個課程的好處就在於它幫你一些大觀念拆分成小觀念鸟顺,不要求你先理解但會帶你跑過一遍惦蚊,并在之後一步步給你解答,而且他的價錢算是相當便宜又有線上助教讯嫂,確實是初學者不錯的選擇蹦锋。
但是我後來發(fā)現(xiàn)這樣的課程也是有點問題,像是:
(1)codcademy的助教有時不太靠譜:之前有幾次其實只是我漏打了一些什麼端姚,結果助教debug就花上了30-50分鐘晕粪,而事後也發(fā)現(xiàn)是些特別小的問題
(2)codecademy的平臺有時不太靠譜:我曾經有幾次代碼出了點問題,不論怎麼debug或是向助教求助都沒辦法解決渐裸,後來助教跟我說是系統(tǒng)本身的問題巫湘,跟我說聲抱歉。但這種情況也發(fā)生好幾次昏鹃,累積起來好幾個小時也就這樣過去了尚氛。
(3)很好的入門教材,但強度可能不夠:這教材很適合入門洞渤,但是在我下個階段的學習歷程這樣的強度可能不夠阅嘶。
每個人有自學選擇教材的喜好,但是至少當時我真的覺得被浪費了太多時間载迄,所以我後來就跟他說掰掰了讯柔。
注:我2017年2月份又再次使用codecademy的課程學jQuery,發(fā)現(xiàn)平臺已經穩(wěn)定許多护昧。但我依舊認為Codecademy比較適合初學者入門魂迄,要更進一步勢必要找其他教材。
所以我後來學乖了惋耙,再加上看到笑來老師提到注意力>時間>金錢捣炬,所以我就直接選擇當是市面上最貴的教材Launch School熊昌,一個月要1.2k人民幣。但是我現(xiàn)在完全體會到了這個課程的好處湿酸,因為它真的很扎實婿屹,一個月內學到的東西可能比我更早一個月自學的多太多。
學編程需不需要英文能力
學編程初期可能英文不重要推溃,但是要成為厲害的程序員英文很重要昂利。簡單來說就是在程序員的世界中,最新最好的資料大多都還是用英語寫成的铁坎。
當然有人會說我們可以看翻譯過的就好页眯,但是那些高深的技術和詞匯通常也都需要牛人消化丶整理過後再翻譯,但是哪來那麼多牛人幫你翻厢呵,而且牛人真的有那麼多時間幫你翻嗎?所以我個人的觀點是傀顾,學編程英文能力不一定要好襟铭,但從長遠來看,把英文搞好絕不是壞事短曾。
不過學編程的另外一個好處就是英文會同時進步寒砖。我的英文能力還算可以,TOEIC大概800多分的程度嫉拐,但是我一開始在看英文教材的時候還是很吃力哩都,一方面英文還是不夠好,一方面不夠理解婉徘。
但我知道英文這種技能也是會越用越上手的漠嵌,所以我還是每天看,一天大約看個6個小時盖呼,加上每天早上我都會朗讀15分鐘儒鹿,所以自學現(xiàn)在閱讀能力進步不少。
還有一個另外的收獲就是几晤,因為我有意地想要提升學習速度和效率约炎,所以我到後來都會試著把教學影片加快到1.25倍,平時聽電子書也都加快蟹瘾。幾個月下來圾浅,慢慢的我現(xiàn)在聽TED或是影片都可以到1.5-2倍。
雖然不敢說英文聽力變得多好憾朴,但是大概就像是能夠用1.5-2倍的速度聽懂原本用原速播放的音檔狸捕。
關於Xdite的建議:先抄代碼再理解?
關於這個想法我也是不停地在測試伊脓。我一開始遇到的問題是府寒,往往花了好幾個小時看完一個章節(jié)開始要做題目時魁衙,一開始看的東西已經忘了差不多,往往又要邊寫邊回頭復習株搔,而且若是閱讀時間拉得越長效果越差剖淀,而我也認為這是讓我目前學習編程速率較差的原因之一。
因為我平常都會看很多書纤房,也會希望能夠提高讀書效率纵隔,所以我陸陸續(xù)續(xù)在一些書中找到了跟以往讀書方法不一樣的觀念,像是直接從解答開始學習炮姨,而不是課本捌刮。這幾本書分別是《狡猾的讀書法》丶《關於考試,你用的方法都是錯的》丶《關鍵20小時,快速學會任何技能!》
前兩本書似乎只在臺灣有翻譯本舒岸,所以我建議大家可以看看第三本绅作。第三本書的作者喬許考夫曼花了90個小時從零開始自學編程(但是他在大學也有一點學編程的經驗),然後就做出了兩個程序(而根據(jù)喬許在書中的說法蛾派,把一個大概念拆成小概念學習俄认,并藉由直接的反饋修正是很好的學習方法)。
當我看到這一段是我簡直是無地自容洪乍,因為我們兩個都用得是Ruby眯杏,但我覺得我學了幾百個小時卻似乎還沒有辦法真的見一個作品,但他一下就做到了壳澳,是不是我的學習方法出了問題岂贩?(當然這跟我目前上的Launch Scool刻意放慢教學速度跟加深深度有關。)
所以我就開始嘗試直接打代碼學編程的嘗試巷波。由於目前學ruby已經有了一段時間跟萎津,我就這樣一步一步地靠直接做題目丶看解答丶查資料就搞懂了不少JS的問題,而且我到現(xiàn)在沒開始看教科書褥紫。
當然我并不是在倡導教科書無用論姜性,我只是在分享我測試學習方法的觀點,至少就實驗結果來看髓考,直接從零開始從小的習題丶甚至是從完整的作品開始著手是有可能的部念,雖然一開始的挫折感會重一些,但是長遠來看我覺得整體速度可能更快氨菇。
實際的例子
舉例來說如果你現(xiàn)在完全不懂Ruby儡炼,我丟了一段Code給你,你要怎麼解查蓉?
題目:
Write a method that takes one argument in the form of an integer or a float; this argument may be either positive or negative. This method should check if a number is odd, returning true if its absolute value is odd. You may assume that only integers are passed in as arguments.
解答:
也許看起來很可怕乌询,但是不用慌。在這邊我們可以看到幾個關鍵字:method丶def丶return true丶%丶==豌研。接下來你要做的就是到Google搜尋 “what is def in ruby?" “what is method?" “what is double equal sign ruby"等等妹田。
大概半小時左右的時間你就可以知道如何建立Method丶%和==代表什麼丶argument又是什麼唬党,而不用從頭看一大堆的文檔再開始練習。
而還有一件很重要的問題值得詢問:「為什麼很多從學校丶補習班丶職業(yè)訓練所出來的人鬼佣,依舊沒辦法找到一個工作驶拱?這些地方的功能(之一)不就是為了達到這個目標嗎?」晶衷。
這的確是一個很耐人尋味的問題蓝纲,這就像是在問一個從小到大十幾年考英文都考高分卻說不出幾句話,跟到了國外用英文生活了一年的人比起來晌纫,還是只能不斷被啪啪啪打臉的份一樣税迷。因為很多時候我們都自以為自己在解決問題,但是顯然并非像我們想像的這麼美好锹漱。
我的一些學習方法:
目前我是在用LS的課程上課箭养,但是我在學習過程中發(fā)現(xiàn)了幾個問題(1)沒抓好復習的時間效果大打折扣(2)練習時進步最多,而不是閱讀(3)練得越熟下次看到類似的題目解得越快哥牍。
先前跟大家提到的三本書露懒,還有Xdite(ruby&rails專家)都推崇把一些項目做熟的好處,以下我擷取Xdite的一段文字:
「比如說很多人以為我寫 code 這麼快是因為 rails 寫項目很快砂心。這根本是大錯特錯。那是因為我寫過了一兩百個小項目中項目練手(很多人根本不知道這件事)蛇耀,我寫到最後任何 idea 到了根本不用想不用折騰的境界辩诞。」
「我做項目做到已經到了可以看完寫完 user story 就知道可以「非常準確」算出一個項目要花多少時間人力纺涤。(誤差在1%译暂,而且在職場上沒有失誤過。)正因為我有這樣的能力撩炊。所以我的學生打 hackathon 也會有同樣的速度結果(比如說幾個人八小時搞出一個項目而且效率奇高)外永。因為這對我來說根本已經是一套公式。
」
所以我也開始把題目練熟這件事情放在自己心中拧咳,加上LS的課程在每完成一個階段需要分享螢幕live coding伯顶,并由老師評分及格才算通過,并且才能進到下一個課程骆膝,所以能不能熟練的coding就變得很重要祭衩。
所以大部份章節(jié)都有大量的練習題,而因為有了過往的一些體悟阅签,我現(xiàn)在練習是這樣練習的:看了五分鐘發(fā)現(xiàn)腦海里沒有想法的話掐暮,直接開解答看步驟,觀察別人的編程丶學習新的觀念丶了解如何推演過程政钟,接著看熟之後試著自己重頭寫一遍路克。
然後從隔天開始每天都復習樟结,復習的方法分成回想練習(也就是只看題目名稱,然後在大腦推演)精算,還有實際練習瓢宦。也就是說我的練習次數(shù)是一天至少一次,不是久久才一次殖妇,而這個過程可能會持續(xù)1丶2個禮拜以上直到這個段落的課程結束刁笙。
再加上我現(xiàn)在不像以前看了整個章節(jié)才開始寫習題丶復習丶準備考試,而是直接開始寫習題抓重點谦趣,看書丶每天復習丶準備考試疲吸,整體下來我的練習量會比原本的做法多很多。而我現(xiàn)在也開始準備直接嘗試做一個完整的作品前鹅,因為對我來說這顯然是更快的學習方法摘悴。
每天記錄學習心得
我目前除了每天固定寫一篇非技術性文章之外(中文),我還會每天花時間寫一篇技術性文章(英文)舰绘。這個技術性文章不需要很高深蹂喻,我的作法就是每天記錄學到了什麼丶哪些事情該注意。
這樣的做法除了能夠讓你總結一天所學當做復習之外捂寿,還能同時記錄你的學習歷程口四,你之後有遇到類似的問題可以回頭來看看,而且另外一個重點就是把你的作品集和思考過程分享給大家秦陋。
一來不論對錯大家都可以互相交流蔓彩,而且未來如果有面試機會也可以把自己的博客當作作品集之一,加上用英文寫作也可以順便練習英文驳概,即使一開始在糟赤嚼,人總是會慢慢進步的不是嗎?
學會一門語言學其他更快
雖然對其他大牛來說這根本就是嘗試顺又,但是我現(xiàn)在在寫題目學JS確特別有體悟更卒。
就拿學習日語跟韓語這件事情來說,會說日語的人學韓語特別快稚照,會說韓語的人學日語特別快蹂空,因為這兩種語言在文法架構丶社會禮俗丶語言使用時機上有高度的相似,更不用說在韓國去漢字化之前也使用漢字果录,所以在那個時代這兩個國家的人互相學習對方的語言簡直是快到不像話腌闯,其他國家的人只能望塵莫及。
相同的編程(或是任何的知識)也是一樣雕憔,你說得越多會發(fā)現(xiàn)其實一些重要的概念早就在別的地方介紹過了姿骏。
關於找工作
雖然由我這個自學編程才幾個月的人談論這個話題似乎有點愚蠢,但是我覺得如果學編程的目的是希望能夠找到一份工作的話斤彼,這件事情就不能不在意分瘦。而活在未來最好的方式就是像專家一樣生活蘸泻,所以為了找到理想中的職務,最好現(xiàn)在就開始準備嘲玫。
以英語流利說這間公司的面試標準來說悦施,如果為了有機會能夠面試這間公司,我必須要熟悉如何測試輔助開發(fā)(如Rspec)丶熟悉如何開發(fā)RESTful API丶熟悉系列行數(shù)據(jù)庫(如MySQL)丶熟悉如何自動化部屬Ruby/Rails丶熟悉使用Git去团。而當我足夠熟悉這些技能時抡诞,對流利說這間公司來說,我就是那個有可能替他們解決這些問題的人土陪。
所以我不能傻傻地埋頭苦練昼汗,而是要開始花更多的時間加強這方面的能力,這才是合理的準備方式鬼雀。而要如何準備顷窒,我個人的想法是直接抓幾個會牽涉到這些點的代碼來練習,像是多產出一些API相關的作品集等等源哩。
當你有足夠多這樣的作品集跟經驗鞋吉,在同一群能力差不多的人來看你的履歷會更好看;而即使沒有機會面試励烦,至少你加強了一些公司看重的能力谓着,何樂而不為呢?
最後
專精任何一項技能都是需要花費很長的時間才能達到的目標坛掠,雖然專注和持續(xù)是絕對不可少的漆魔,但是在這個過程中我們可以用各種方法來提高效率但卻不致於走偏,幫助自己能夠有更多的時間跟注意力去做自己想做的事却音,而這也是我還不斷在學習的。
希望這篇文章能夠給看到的朋友們帶來一點點的幫助矢炼,若是有任何說錯或是不夠精確的地方系瓢,還請多多指教。