前段時間一個新來的博士問我怎么學(xué)習(xí)編程全陨。這位博士之前是學(xué)習(xí)自動化的灌砖,編程經(jīng)驗基本接近沒有刁品。鑒于她是一個編程小白,我只好按照“模仿+超越”的思路來給她提供學(xué)習(xí)編程的一些建議回论。
選擇模仿對象
先說“模仿”吧散罕。
我個人認(rèn)為大多數(shù)學(xué)習(xí)都是從模仿開始,小孩子會模仿家長的行為和性格傀蓉。當(dāng)你在一個城市迷路的時候欧漱,你會用谷歌搜索路徑,然后模仿地圖提供的路徑去行動僚害。當(dāng)我寫程序遇到一個之前沒遇到過的問題的時候硫椰,我也會在網(wǎng)上搜索這個問題的解決方案繁调,并且按照網(wǎng)友提供的方案嘗試解決這個問題萨蚕。當(dāng)然,就是在網(wǎng)上搜索解決方案這個行為也是我在剛開始接觸電腦之后向別人模仿學(xué)習(xí)到的蹄胰。
在上述的例子里岳遥,小孩模仿的對象是家長,你模仿的對象是谷歌地圖裕寨,我模仿的對象是在網(wǎng)上提供解決方案的“網(wǎng)友”浩蓉。在自學(xué)習(xí)編程的時候,我們沒有一個老師可以模仿宾袜,貌似沒有一個明確的模仿對象捻艳。其實不然,我們可以模仿的對象很多庆猫,比如書本认轨,技術(shù)博客,別人的指導(dǎo)等等月培。在學(xué)校里嘁字,老師會告訴我們什么是正確的、什么是不正確的杉畜。但是在自學(xué)編程的道路上纪蜒,我們需要自己去判斷和選擇什么是正確的模仿對象。如果輕易聽信別人的介紹此叠,可能會為此付出一定的“智商稅”纯续。包括我在這篇文章里給出的建議。
因此,我們自學(xué)編程的第一步是猬错,自己選擇一個優(yōu)秀的模仿對象牙丽。無論是別人介紹的資料兔魂,或者自己查到的信息烤芦,都要經(jīng)過自己仔細(xì)篩選后做出最后的選擇。用學(xué)習(xí)python舉例析校,我在碩士期間是跟著一本Python基礎(chǔ)教程學(xué)習(xí)的构罗。當(dāng)時我是把這個教程里的代碼一句一句地敲進(jìn)電腦里,在抄代碼和看結(jié)果之間不斷地感受Python的運行機理智玻。
當(dāng)然遂唧,我們還可以選擇《A Byte of Python》,這本書就在各個領(lǐng)域里受到廣泛的好評吊奢。而且這本書已經(jīng)被翻譯成中文盖彭,相應(yīng)的內(nèi)容被放在網(wǎng)上供大家免費瀏覽和學(xué)習(xí)。
英文原版可通過http://python.swaroopch.com/在線閱讀页滚。
中文翻譯版可通過https://bop.molun.net在線閱讀召边。翻譯版本最后修訂于 2017 年 3 月 19 日。
你可以訪問https://www.gitbook.com/book/lenkimo/byte-of-python-chinese-edition/以獲得本書以下格式的下載:
EPUB (可在 iPhone裹驰、iPad隧熙、電子書閱讀器上閱讀)
在我看來,這兩本書的任意一本都可以讓絕大多數(shù)Python小白學(xué)會使用Python編程幻林。我個人更傾向于后者贞盯。
堅持執(zhí)行到底
在走出第一步的選擇之后,我們需要開始自學(xué)編程的第二步沪饺,毫不猶豫地把學(xué)習(xí)計劃執(zhí)行下去躏敢。
我覺得堅持不能依靠毅力。堅持的關(guān)鍵在于修心整葡,只要在思想上能認(rèn)清堅持下去的益處件余,并提前對中途可能產(chǎn)生的困難進(jìn)行預(yù)演和解決,堅持下去就幾乎可以做到掘宪。說“幾乎”是因為生活中總是存在一些我們預(yù)先想不到的意外出現(xiàn)蛾扇。
就拿學(xué)習(xí)Python舉例,如果我們忙于主業(yè)魏滚,學(xué)習(xí)python只是利用業(yè)余時間進(jìn)行的镀首,那我們就必須舍棄掉一些之前的愛好。比如我每周末必須抽出一段連續(xù)的時間來進(jìn)行寫作鼠次,這個習(xí)慣已經(jīng)堅持了一年多更哄,除了去英國看老婆那些天芋齿,幾乎是堅持做到了。為此成翩,我舍棄了周末看電視劇觅捆、電影、綜藝節(jié)目的時間麻敌。久而久之栅炒,我自己對電視劇、電影和琳瑯滿目的綜藝節(jié)目已經(jīng)無感术羔,提不起太大的興趣了赢赊。其實這和佛學(xué)的“戒貪”是一個道理。人的精力是有限的级历,為此释移,我們必須明確一個目標(biāo),并為了這個目標(biāo)而放棄掉其他大多數(shù)意義更小的目標(biāo)寥殖。
我認(rèn)識的一個南開大學(xué)的教授玩讳,84年出生,是南開大學(xué)的百名學(xué)科帶頭人嚼贡、天津市的青年千人熏纯,前段時間剛被選入國家萬人青年計劃。據(jù)我所知编曼,他是從讀博開始就基本不看任何電影豆巨、電視劇以及一些他認(rèn)為無聊的娛樂活動剩辟,而是從早到晚全心全意放在科研和學(xué)習(xí)上掐场。這種堅持絕對不是靠毅力,而是靠覺悟贩猎,也就是覺得這些娛樂不僅得不到快樂反而讓我感覺到無聊甚至是浪費時間熊户。
說真的,我現(xiàn)在也是這樣的感受吭服,想不起來上次看電影是什么時候了嚷堡,但我依然覺得每天都很充實。在堅持這一點上艇棕,我并不贊同村上村樹在關(guān)于跑步的話題上說的“喜歡的事情自然可以堅持蝌戒,不喜歡的事情怎么也堅持不了”。我認(rèn)為沼琉,在理性的考量下北苟,如果十分想得到某種利益(比如名聲、權(quán)力打瘪、金錢)友鼻,那么任何暫時不喜歡的事情都可以讓人堅持下去傻昙,直到讓人感受到“多巴胺”帶來的幸福,從而變成喜歡的事情甚至是一種習(xí)慣一直堅持下去彩扔。
超越需要智慧
在上述的過程中妆档,我們依然只是在模仿和學(xué)習(xí),什么時候可以超越呢虫碉?
這個問題的答案就是我們自學(xué)編程的第三步贾惦,多與別人的交流、向更專業(yè)的人學(xué)習(xí)敦捧。
與別人交流這個事情沒那么難纤虽,我一般秉持著向別人提供一些想法,并從別人那里得到一些建議的“交換式”交流方式绞惦。
向更專業(yè)的人學(xué)習(xí)則可以通過瀏覽專門研究逼纸、優(yōu)化甚至開發(fā)編程語言的專家的個人主頁得到。在我眼里济蝉,這些人不是那些寫代碼有很多經(jīng)驗的人杰刽,而是專門研究編程語言的人,至少是在編程語言這個領(lǐng)域發(fā)表過頂級會議或者權(quán)威期刊的專家學(xué)者王滤。我目前比較受益的是UC San Diego大學(xué)的Philip Guo教授開發(fā)的Python Tutor軟件贺嫂,這個軟件可以把Python程序的每一句代碼都可視化,從而讓學(xué)習(xí)Python的我們更加生動地理解Python代碼是如何運行的雁乡。
Python Tutor軟件地址:http://pythontutor.com/
例子:
用python學(xué)習(xí)深度學(xué)習(xí)
目前深度學(xué)習(xí)很熱門第喳,想學(xué)習(xí)的人很多,但是大多數(shù)人不知道如何入門踱稍。
其實我們只需要了解Python曲饱,然后利用強大的PyTorch這個軟件包,我們就可以輕松上手深度學(xué)習(xí)了珠月。
這個軟件包讓深度學(xué)習(xí)變得非忱┑恚“傻瓜”,舉個例子啤挎,我們只需要寫一行代碼驻谆,就可以在輕松地加入新的神經(jīng)網(wǎng)絡(luò),并進(jìn)行調(diào)參等操作:
PyTroch頁面:http://pytorch.org/
今天的教程就到這里了庆聘,下一次我會跟大家詳細(xì)介紹Pytorch這個軟件的胜臊。敬請期待。