小小程式設計師的學習方法

葉糖糖發表於2017-03-29

enter image description here

種一棵樹最好的時間是十年前,其次是現在。這是我比較喜歡的一句諺語。不管做什麼事情,我都會用這諺語提醒自己。我自認為自己絕不是一個很聰明的小孩,因為剛開始學習VB的時候,感覺老師講的完全是天書,自己一點也聽不懂。年幼的自己,也未曾想過多年後會依靠寫程式碼為生。

一、凡事預則立,不預則廢

聽說每個人都會有一段屬於自己的叛逆時光,如果不在青春期,那麼就在以後。而我的青春期叛逆時光,就如同一場急驟的雷陣雨,急匆匆的來臨,又靜悄悄的結束,好似有人當頭棒喝,讓自己覺醒。覺醒後,又迅速為自己定一系列的小目標。人的一生其實就像一串珍珠項鍊,那些小目標就是一顆顆美麗的珍珠。

青春期的自己比較叛逆,不知道未來是什麼,更不知道為什麼要去學習?所以在那些古怪又憂傷的問題沒想明白之前,從進入高中的校門那一刻開始,就註定自己將要成為一段時間的不良青年,每天吊兒郎當,惹事生非。沒錯,就是您想的那樣。

渾渾噩噩的日子每天過得總是那麼漫長,卻又流逝的這麼快,轉眼就消失的無影無蹤。在高一寒假期間,我突然想通了很多事情,就像程式中阻塞的執行緒,不再阻塞一樣。昔日的迷茫已不復存在,於是在高一的第二學期,我轉學去了市裡的另一所高中。在新的環境裡開始好好學習,參加社團活動。沒多久就擔任了班上的數學課代表,也加入了校廣播站。在那一學期中還參加了演講比賽、辯論比賽等,為班級爭取到了榮譽,在學期結束還獲得了三好學生和獎學金。真是有趣的事情。

任何人其實只要目標明確,同時又肯努力的話,好運就必然會眷顧你。在那一學期裡,我補習了上學期落下的所有課程,包括VB程式設計。以前一直覺得程式設計難於上青天,然而再次學習時候發現是自己高估了VB了。想象中的困難都是那麼的不堪一擊,只要自己想學習,就一定能學好。

二、程式設計之初、打牢基礎

作為初學者剛開始學習一門語言的時候,一般建議先從如何使用開始起步。就像我們買了一個新玩具一樣,不要著急去弄清楚,別人是怎麼製造出來的。只要先去動手試一試,看看該如何去玩,就行。而不建議直接從閱讀原始碼開始學習,當然對於上神們來說可以這樣。個人還是喜歡用一些笨方法來學習,具體如下:

2.1 手眼結合,熟悉語法

自己是從VB入門的,後來學習了C#、Java、Objective-C、Swift、C、C++、Python、Go等,真正有人教的是C#和Java,剩下來的都是自己利用時間學習的。不管是學習哪種語言,都需要掌握語法。除了少部分語言語法差異比較大,大多還是有相似之處的。一般在掌握了某種語言之後,對於其它語言的語法很快就能熟悉,可以說是觸類旁通。真正的掌握了一種語言之後,去學習其它語言所花的成本還是比較低的。

言歸正傳,對於新語言的學習,我們需要做到手眼結合的去熟悉語法。所謂手就是勤於敲程式碼,不要眼高手低,在看程式碼的時候,感覺自己什麼都能看明白,然而在寫程式碼的時候,寫一行程式碼能報三個錯。當然這是第一個要素。第二個要素是要勤於檢視官方文件,最好的學習資料永遠是官方文件。有條件的話可以在白紙或者本子上抄寫(默寫程式碼)。(無聊的時候,在沒有電腦、沒有紙筆的情況下,可以小聲的在嘴裡讀程式碼給自己聽,一定得注意安全,不要在馬上路上,車輛較多的地方

注意,如果之前沒有任何程式語言學習的經歷,個人不建議直接買本書去學習。如果都能看書學會各種知識的話,那還要去學校上課做什麼呢,是不是?所以,對於這些小夥伴來講,可以先去一些知名的線上學習站點,看一些相關的視訊教學課程,跟著視訊能玩起來了,然後再去買本不錯的書,進行系統的技能學習。——這是個人的愚見,畢竟我們先得學會走路,才能去學著奔跑,否則會容易失控 。

2.2 學會自己理解問題,動手尋找答案

正常情況下在程式設計中遇到問題,都可以利用搜尋引擎找到我們想要的問題答案。在編碼的過程不要一遇到問題,就不假思索的去向別人提問。尤其是在一些技術群裡去提問一些基礎的問題,當然運氣好的話會有一些熱心的大牛願意回答我們的問題,也不排除沒有任何響應這種極端情況,這樣其實就是白白耽誤時間。在準備學習之前,最好可以看看《提問的藝術》這本書,學習一下如何高效的提問。提問也需要,學習麼?答案是肯定的。

如果條件允許,你可以帶上電腦去圖書館學習。自己以前也常常這麼做,因為圖書館查閱資料方便,所以我基本上一有時間,都會跑去圖書館,一待就是一整天。

2.3勤做筆記,常做總結

把一些常見的錯誤,在學習之初可以記錄下來。以防後續遇到同樣的問題,而忘記如何去解決。同樣的,對於新知識點的學習,在理解了要點之後,可以將重要的部分記錄在自己的筆記上或者自己的博文裡。這是一個很好的習慣,雖然梳理知識會花點時間,但是經過梳理後的知識點,我們會記憶的比較牢靠些。對於還在上學的朋友來說,課前預習是需要做的功課,課前把有疑問的地方記錄下來,上課認真聽講,然後找時間向老師提問,同時還要做好課後注意複習。

2.4學以致用,不浪費技能

自己會在掌握了一些技能之後,根據日常生活中的實際情況,然後編寫一些小的軟體來玩玩。這樣既可以解決生活中的小問題,還能有效的鞏固自己所學到的知識,真是一舉兩得。何樂而不為呢?比如,自己常常會記不清公眾號的賬號或者論壇的賬號密碼,就在學了iOS開發之後寫了一個管理賬號和密碼小工具。

2.5培養長時間注意力

做技術的人得耐得住寂寞,忍受得了孤獨。擁有無下限的耐心,懂的堅持。因為我們常常得重複的去做同一件事情,時間一長難免會感覺枯燥,所以還得學會調節自我的心態。用心做點事情,這樣至少對得起光陰歲月,對得起自己。

業精於勤,荒於嬉,這句話一點也不假。當然該玩的時候,還是得去玩。培養長時間注意力,可以讓學習事半功倍。我們可以先從15分鐘開始鍛鍊起來。學習15分鐘,然後給自己一點小獎勵,然後繼續,迴圈往復。

慢慢的可以延長時間15分鐘、30分鐘、45分鐘、60分鐘......全神貫注的去學習某個知識,這樣效率會很高。自己也是這麼去做的,可以配合《番茄工作法》來練習。如果感覺自己當天的狀態不佳,可以視具體情況安排學習計劃。最好每次學習的時候只去做一件事情,在進入學習狀態之前,自己會把手機靜音,關閉各類社交軟體,然後安安心心的去做事情。儘量的不要讓不相干的事情來打斷自己的學習,這樣可以培養自己的注意力和自我約束能力。

說件有趣的事,去年在上海參加Intel的Iot比賽的時候,自己曾通宵玩過Edison開發板。團隊裡華為的小夥伴早就回去休息了,然後就剩下自己在比賽現場查資料,編碼。那是一場48小時的比賽,其實自己的想法很簡單,既然是比賽,那就要玩的開心一些,畢竟這樣的機會也不是常有。當然個人不提倡熬夜,這樣對身體的傷害比較大。

三、進階之路,衣帶漸寬終不悔

80%的知識,我們只需要花20%的時間就能夠掌握;而剩下的20%的知識,我們則需要花80%的時間去學習與研究。這是一個非常有趣的法則。所以作為一個程式設計師還得耐得住性子。

3.1 善於閱讀,勤于思考

正常來講1~2個月,就能掌握一門語言的80%使用技巧。在這個階段,我們可以嘗試著買一些進階的書看看。在能夠熟練使用這門程式語言之後,可以學習設計模式、資料結構、演算法等知識。有時間的話,還可以讀一讀《人月神話》、《人件》之類的書。趁有時間的時候寫寫讀書筆記。

3.2每天合理的花點時間瀏覽技術論壇

閉門造車,是件可怕的事情。所以自己每天會用一部分時間去瀏覽技術論壇,例如:開源中國,CSDN,開發者頭條、碼雲、Github等。在這些站點上,可以學習到很多有用的知識,也可以瞭解到別人是怎樣使用某些技術以及為什麼要這麼去做?然後我會結合自身的情況去做一個比較和總結,將學習到的好的一方面,融入到自己的開發過程中。嘻嘻,這就也許就是拿來主義。

3.3參加社群技術交流活動

我為什麼要去參加線下技術交流活動?原因其實很簡單,因為我需要跟人交流。需要去了解那些我不知道自己不知道的知識和我知道自己不知道的知識。其實一開始我也很懶,很宅,不願意出門,也不善於跟人交流。可是我清楚的知道,自己始終都得改掉這些毛病。於是我會安排自己,每隔一段時間就去參加一些對自己有幫助的活動。一般都是在活動行這個app上得到一些活動的資訊的,這是一款不錯的app。(真的沒收人家錢,o(>﹏<)o不要打我)。參加線上下活動,不僅可以得到與大牛交談的機會,也會結識一些的志同道合的開發者朋友,增長自己的知識面和見識。

3.4興趣是最好的老師

在日常生活中,我經常遇到一些面試者,在面試中的回答問題的時候說“抱歉,這些基本的知識,這個我忘記了”。個人覺得其實這都是藉口,都是剛培訓出來的,剛學習的知識怎麼會忘記了呢?這其實從側面反映的是,他對程式設計這事情不感興趣,只是跟風去學習了程式設計。這種情況很常見,所以才說興趣是最好的老師。

那麼如何培養興趣就顯得尤為重要。我是把程式語言和電腦當做自己的朋友來培養感情的。

在學習某種開發語言之前,可以先去了解其由來和發展。這可以作為培養興趣的第一個步驟,然後可以制定一些獎勵計劃,當然是自己獎勵自己。興趣也是可以是慢慢培養出來的,有了興趣之後,就會自覺沉醉於程式設計的世界裡。如果感覺哪天只要不寫程式碼,會感覺不舒服。那就厲害了,說明你已經入坑了。

四、捨棄存量,推倒重來

做為一個技術宅,最可怕的不是不會技術,而是什麼技術都懂點皮毛,沒有擅長的領域。這是作為技術派來說比較悲哀的一件事情。

市面上的程式語言種類繁多,具體要學習什麼可以根據自己的實際目標去選擇。我開始入門的時候沒想過這個問題,一開始只是要掌握一門開發語言而已。後來 學習了C#和Java,因為自己比較喜歡Web開發,於是就走向了Web開發者之路。花一個月時間學習了兩種開發語言,接著開始學習HTML,CSS,JavaScript,SQL,各種框架。最後自己將Java作為了主要前進方向,雖然我覺得C#會更好,更簡單一些。選擇Java的原因可能是因為他可以做嵌入式開發,雖然後來我也沒用Java做過嵌入式開發。

不要在意這些細節,反正要有一門自己擅長的技能傍身,是必須的。如果還是不知自己要學習什麼語言或者技術,可以看看自己想入職的公司的相關崗位的招聘要求。一般在學校的孩紙不用擔心這個問題,主要還是半路出家的小夥伴得思考這個問題。

2~3年之後,稍微有點存量了,可以嘗試的去學習一門新的語言或者技術。這樣可以防止自己的思維固化,所以我之後也學習了Android和iOS技術,並參與實際的專案開發。先學的Android開發,主要因為學習成本比較低,用PC配置好開發環境,就能上手開發。偶然的機會幫學妹做課題研究,接觸了微控制器。然後就被學妹坑了,自己會在業餘時間研究:51微控制器、arduino開發板、Edison等。接觸未知領域一開始是膽怯的,身邊都是學軟體的,懂這些的小夥伴還真是不多。好在自己有耐得住寂寞的天分,開始是各種搜尋,翻閱論壇的帖子,好在最後經過一番折騰之後總能解決問題。

通過學習C、C++和硬體開發,發現原來很多知識是可以串通理解的。動手實踐之後,還幫助自己理解了很多以前記住的概念性知識,就像小和尚頓悟了師傅講的道理一樣。人們不是總說,小和尚唸經,有口無心麼?這下好了,小和尚開始有心了。

語言只是一種開發工具。具體要用什麼語言,學習什麼語言,要根據自己和團隊的實際情況去定。殺雞焉能用在牛刀?所以作為一個開發者,要勤于思考。也要懂得捨棄存量,該學習的時候,勇敢的去學習一些可以提高效率的技能。

捨棄存量的過程,好比武俠小說中,修煉多年的武功被反派給廢了。起初會很難受,然後會漸入佳境,收穫良多,更近一層。自己在開發Java Web專案的時候,起初非常喜歡用Spring(java的開發框架)+mybatis+html+ajax這個套路。但是遇到一些體量很小的專案,就讓我犯難了?於是我就開始想,能不能使用更簡單的技術,去完成開發任務。最終我鎖定了jfinal(國內開源,Java開發框架),剛開始使用的時候,那感覺太糟糕了,只有自己能體會那種小絕望。好在自己快速調整了心態,按照官方文件來學習,一天之內就完成了框架的切換學習。

既然選擇作為一名程式設計師,就應當保持終身學習者的姿態。不用怕捨棄存量,推倒重來。合理的推倒重來,能讓我們對過去掌握的知識,理解的更透徹。最怕的就是手裡拿著錘子,眼裡只能看到釘子。在我的成長過程中,我有兩年沒有寫過一行程式碼,是兩年時候重拾起來的。所以不用覺得這世界上真的有什麼很難的事情。

五、經常鍛鍊,打造健壯的身體

經常鍛鍊可以讓我們心情愉悅,身體健康。原因大家都懂的,為了寫好程式碼。

PS:關於學習的方法,最重要的還是離不開努力、肯花時間和獨立思考。學習寫程式碼,真的是一件簡單,又讓人沮喪並快樂的事情。尤其是柳暗花明又一村的那一瞬間。其實只要多寫,多看,多問,多交流,多想就足夠了。當然,我所講的都是錯的。因為那是個人的一些學習經歷與方法,不一定完全適合你,所以找到適合自己的學習方法很重要。加油!

相關文章