如何學(xué)編程速侈?


此文最早發(fā)布在新生大學(xué)平臺率寡,是為在新生大學(xué)學(xué)習(xí)編程的初學(xué)者而寫
詳情參見[xinshengdaxue.com]


凡是可以被思考的,都可以被清楚地思考倚搬;
凡是可以被言說的冶共,都可以被清楚地言說;
----維特根斯坦

什么是編程每界?

現(xiàn)代計算機的起點是源于萊布尼茨的一個夢想:將人的理性還原為計算捅僵,并且有強大的機器能夠執(zhí)行這些計算。這就需要兩個前提:

  • 一切都可以被計算眨层;
  • 可以執(zhí)行一切計算的機器庙楚;

從十七世紀以來,數(shù)學(xué)家和哲學(xué)家主要就是在圍繞上面兩個問題展開自己的研究趴樱。
在數(shù)學(xué)領(lǐng)域馒闷,人類已經(jīng)可以用一套統(tǒng)一的符號來處理代數(shù)表達式,并不斷嘗試用符號來表征全世界所有的概念和事物叁征。另一方面纳账,另外一些科學(xué)家,例如笛卡爾和費馬捺疼,已經(jīng)論證了疏虫,可以將幾何通過某種方式轉(zhuǎn)換為代數(shù)。因此啤呼,那個時代最頂尖的數(shù)學(xué)家在嘗試下面的步驟:

  1. 將全世界的知識歸納起來卧秘;
  2. 針對上述的全集用一套符號體系進行表征;
  3. 用萊布尼茨所述的“推理演算”針對這些符號進行運算官扣。

這一艱苦但充滿挑戰(zhàn)的過程翅敌,在那個偉大時代也產(chǎn)生了大量優(yōu)秀的人才和成果,希爾伯特醇锚、康托爾哼御、哥德爾等人都做出了重大的貢獻坯临。其中布爾在《思維的法則》中證明了邏輯問題可以演變?yōu)閿?shù)學(xué)問題焊唬,現(xiàn)代編程語言的運算邏輯由此奠定恋昼。而現(xiàn)代編程語言的概念就源自弗雷格在《概念文字》所描述的:所有演繹推理都可以歸納在一個邏輯體系內(nèi)。
這段時間內(nèi)赶促,哲學(xué)家也為編程語言和計算機的產(chǎn)生做出了重大貢獻:維特根斯坦在邏輯哲學(xué)論中為現(xiàn)代編程語言的面向?qū)ο笏枷氲於藞詫嵉幕A(chǔ):

“對象包含了事務(wù)的全部狀態(tài)的可能性液肌,……,這種固定不變的模式由對象組成”鸥滨。

在數(shù)學(xué)家和哲學(xué)家將一切均可計算的夢想逐漸實現(xiàn)的時候嗦哆,圖靈描述了一種通用的計算機模型,圖靈機由此誕生婿滓。馮諾伊曼等人用電子管實現(xiàn)了這種模型老速,“可以執(zhí)行計算的機器”發(fā)明出來了。
一直到今天凸主,現(xiàn)代編程語言依然沿著當(dāng)年的套路發(fā)展橘券,而硬件形態(tài)不管變化多大,圖靈機的基本原理和馮諾伊曼體系也始終沒有本質(zhì)變化卿吐。
因此旁舰,簡單來說,現(xiàn)代編程語言(或者更精確一些的說是一種“圖靈完備”編程語言)嗡官,應(yīng)該能夠完整的描述某一個現(xiàn)實領(lǐng)域的問題箭窜,并通過運算規(guī)則,操作計算設(shè)備獲得分析過程和結(jié)果衍腥。
所謂學(xué)習(xí)編程磺樱,就是學(xué)習(xí)使用一種特定的語言,來描述現(xiàn)實世界的一個問題婆咸,再將這個問題通過計算機的運算坊罢,給出分析和解答。

進入程序的思維邏輯

很多人說編程難擅耽,主要是因為還沒有具備所謂的“編程思維”活孩。而編程思維,正如上面所述乖仇,需要用一種新的語言形式來描述世界憾儒。我們都知道那個著名的笑話:

老婆給當(dāng)程序員的老公打電話:“下班順路買一斤包子帶回來,如果看到賣西瓜的乃沙,買一個起趾。”
當(dāng)晚警儒,程序員老公手捧一個包子進了家門训裆。眶根。。 老婆怒道:“你怎么就買了一個包子边琉?属百!”
老公答曰:“因為看到了賣西瓜的”湟蹋”

這個故事族扰,充分的表達了用程序思維和生活思維的差異。那么定欧,為什么程序思維會有如此的不同渔呵?
第一,人類的常用表達方式和邏輯習(xí)慣的是不完備的砍鸠,很多信息包含在模棱兩可的描述中扩氢,而用編程的方式來描述問題,必須做到完備和精確爷辱,因為截止到目前录豺,機器的寬容度在很大程度上還遠不如一個低年齡的兒童。不管多么厲害的代碼托嚣,一個逗號都不能出錯巩检。
第二,“圖靈機”的思維模式示启,是一種機械方式兢哭,因此,當(dāng)前的編程語言夫嗓,難免需要符合機械流程迟螺,也就是一種線性邏輯。而人的邏輯舍咖,本質(zhì)上是一個非線性的反饋系統(tǒng)矩父。所以在思維決策模型上的差異,導(dǎo)致編程的邏輯過程必然與人腦思維過程不同排霉。

因此窍株,學(xué)習(xí)編程,需要讓自己養(yǎng)成這種線性思維攻柠,或者說是一種理性的反饋系統(tǒng)球订。否則,很難從所學(xué)的知識中舉一反三瑰钮,并建立自己的知識體系冒滩。因此,在學(xué)習(xí)時浪谴,經(jīng)常的畫流程圖和時序圖是一個好的習(xí)慣开睡。用一些圖表將自己的思維表達清楚能夠有助于用機械邏輯來表述自然思維因苹。另一個方式是寫偽代碼。有興趣的同學(xué)可以搜索一下篇恒。

了解你所寫的代碼

不可否認扶檐,現(xiàn)在寫代碼已經(jīng)變得越來越容易,老一輩程序員執(zhí)念的很多東西已經(jīng)不再被年輕人提及婚度。隨著技術(shù)的演進蘸秘,越來越多的普通人官卡,只需要簡單的訓(xùn)練蝗茁,就可以完成業(yè)務(wù)邏輯的編碼工作,這是技術(shù)的進步寻咒,是生產(chǎn)效率提高的標(biāo)志哮翘。
但是對于立志成為偉大程序員的人而言,解決業(yè)務(wù)問題并非其終極目標(biāo)毛秘。在這個世界中饭寺,能夠?qū)懸恍┐a的人不少,但能成為優(yōu)秀程序員的人卻并不多叫挟。這導(dǎo)致
了一方面很多學(xué)編程的人找不到工作艰匙,另一方面,很多高薪的工作卻無人應(yīng)征抹恳。

怎樣才能從一個普通碼農(nóng)演變成一個專家級程序員员凝?上網(wǎng)搜一下會有很多分析,我在這里只想提一個很基本的觀點:“了解你所寫的代碼”奋献。
比如隨便一行最簡單的代碼:
var a = 1;
如果你是一個普通的程序員健霹,你應(yīng)該知道這行代碼解決了什么問題。如果你是一個專家級的程序員瓶蚂,你應(yīng)該知道這些:

  1. 系統(tǒng)是如何執(zhí)行這行代碼的糖埋?
  2. 系統(tǒng)因為執(zhí)行了這行代碼,發(fā)生了哪些改變窃这?

如果要做到這兩點瞳别,你需要對以下內(nèi)容有比較深刻的理解:

  1. 深刻的掌握你所使用的編程語言;
  2. 了解和掌握你的程序所運行的操作系統(tǒng)杭攻;
  3. 在某些情況下祟敛,需要了解硬件的一些特性和限制,以及操作系統(tǒng)在這些硬件上的影響朴上。

因為你寫的代碼垒棋,作用于一臺圖靈機,中間需要有操作系統(tǒng)痪宰,可能還有你所使用的編程語言所使用的運行時(例如Java Runtime)叼架。

如果你立志成為一名優(yōu)秀的程序員畔裕,你需要從一行程序出發(fā),一步步的追蹤到硬件的執(zhí)行乖订。這時候扮饶,你會發(fā)現(xiàn)很多隱藏在程序之下的東西。

優(yōu)雅的控制機器

很多不懂程序的人乍构,都會發(fā)現(xiàn)一個現(xiàn)象:凡是會寫代碼的甜无,都會修電腦,修手機哥遮,修一切的電子產(chǎn)品……
可是岂丘,寫程序和修電腦之間有什么必然聯(lián)系么?
事實上眠饮,是真的有聯(lián)系的奥帘。修手機的能力,來源于對手機的理解和對手機的控制力仪召。這種控制力寨蹋,包括各種輸入輸出設(shè)備(攝像頭,傳感器扔茅,藍牙)已旧,包括操作系統(tǒng),包括工具類的應(yīng)用軟件召娜。
如果一個程序員希望自己的代碼能夠在一臺設(shè)備上運行良好运褪。他確實需要關(guān)注以上這些東西。一個程序是否可以合理的使用外設(shè)萤晴?是否在操作系統(tǒng)中兼容性良好吐句?是否和主流軟件不沖突?都是一個程序員需要考慮的問題店读。因此嗦枢,一個合格的程序員,確實需要習(xí)慣性的搗鼓自己的手機屯断、自己的電腦文虏。
對程序員而言,一個幸福的事實是殖演,隨著可穿戴設(shè)備和智能家居設(shè)備的逐步普及氧秘,越來越多的傳統(tǒng)設(shè)備配備了操作系統(tǒng),成為了可編程設(shè)備趴久。
如今丸相,一個程序員懂得Android開發(fā),就可以使用程序控制電視定時播放彼棍,可以控制智能手表表針的顯示樣式灭忠,可以控制空調(diào)的出風(fēng)溫度膳算,可以將手機和門禁連接,可以在汽車的中控臺上部署一個程序和手機共享音樂……
身為一個當(dāng)代程序員弛作,有太多的機會掌握一個以前只有專業(yè)人員才能掌握的設(shè)備涕蜂,可以將不同的硬件和服務(wù)連接在一起創(chuàng)造出新的使用場景,在這個機器拼接的世界中自由發(fā)揮自己的智慧映琳。

常學(xué)常新机隙,吐故納新

學(xué)習(xí)編程是一件無止境的事業(yè),其一是編程語言和相關(guān)的知識技能如浩瀚星河萨西,無窮無盡有鹿,其二是新技術(shù),新思路層出不窮原杂,日新月異印颤。因此您机,僅僅是能在一個領(lǐng)域跟上時代的發(fā)展穿肄,都需要付出相當(dāng)?shù)臅r間和精力。但這種快速的變化也為程序員帶來了無窮的機遇际看,隨著新技術(shù)的引進咸产,一些傳統(tǒng)的問題可以有新的解決方案,更高的效率仲闽。作為一個優(yōu)秀的程序員脑溢,理應(yīng)不斷的自我革新,用新知識和新技能自我革新赖欣。事實上屑彻,所有的高階程序員,具備的一個基本能力和素質(zhì)顶吮,就是不斷的嘗試新鮮事物社牲,不斷的閱讀新的項目代碼。也會主動的改進之前做過的項目悴了,那怕它們當(dāng)前運行良好搏恤。

同時,也不必因為新技術(shù)太多而產(chǎn)生恐慌湃交,任何技術(shù)都有其特定的價值和適用范圍熟空。不必因為出現(xiàn)了新東西就急于否定手頭正在學(xué)習(xí)和使用的技術(shù)。每一個新技術(shù)的掌握搞莺,都建立在對現(xiàn)有技術(shù)的充分理解之上息罗,因此,學(xué)好當(dāng)下才沧,恰恰是掌握未來的最佳方式迈喉。

學(xué)到不如做到

學(xué)習(xí)編程的最佳方式俏扩,就是把它做到可以運行。在學(xué)習(xí)任何一門語言或技術(shù)之前弊添,都可以給自己設(shè)定一個目標(biāo)录淡,例如學(xué)習(xí)JavaScript,可以要求自己做一個博客油坝;學(xué)習(xí)Android嫉戚,可以要求自己做一個日歷App。一個可以運行的程序澈圈,不管多簡陋彬檀,都具備必要的完整性和穩(wěn)定性,在完成一個可運行程序的過程中瞬女,必然涉及到諸多方面的問題和陷阱窍帝。解決這些問題的過程,正是學(xué)習(xí)的最佳路徑诽偷。在學(xué)習(xí)過程中坤学,將各種新知識和新技能應(yīng)用于一個自創(chuàng)項目,使之不斷完善报慕,是一個非常好的辦法深浮,它天然的幫助學(xué)習(xí)者制定了學(xué)習(xí)規(guī)劃和進度。有一個明確的目標(biāo)眠冈,就會有明確的學(xué)習(xí)路徑飞苇,解決問題時就不容易發(fā)散。更有助于提升效率蜗顽,也更容易衡量學(xué)習(xí)效果布卡。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市雇盖,隨后出現(xiàn)的幾起案子忿等,更是在濱河造成了極大的恐慌,老刑警劉巖刊懈,帶你破解...
    沈念sama閱讀 222,627評論 6 517
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件这弧,死亡現(xiàn)場離奇詭異,居然都是意外死亡虚汛,警方通過查閱死者的電腦和手機匾浪,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 95,180評論 3 399
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來卷哩,“玉大人蛋辈,你說我怎么就攤上這事。” “怎么了冷溶?”我有些...
    開封第一講書人閱讀 169,346評論 0 362
  • 文/不壞的土叔 我叫張陵渐白,是天一觀的道長。 經(jīng)常有香客問我逞频,道長纯衍,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 60,097評論 1 300
  • 正文 為了忘掉前任苗胀,我火速辦了婚禮襟诸,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘基协。我一直安慰自己歌亲,他們只是感情好,可當(dāng)我...
    茶點故事閱讀 69,100評論 6 398
  • 文/花漫 我一把揭開白布澜驮。 她就那樣靜靜地躺著陷揪,像睡著了一般。 火紅的嫁衣襯著肌膚如雪杂穷。 梳的紋絲不亂的頭發(fā)上悍缠,一...
    開封第一講書人閱讀 52,696評論 1 312
  • 那天,我揣著相機與錄音亭畜,去河邊找鬼扮休。 笑死,一個胖子當(dāng)著我的面吹牛拴鸵,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播蜗搔,決...
    沈念sama閱讀 41,165評論 3 422
  • 文/蒼蘭香墨 我猛地睜開眼劲藐,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了樟凄?” 一聲冷哼從身側(cè)響起聘芜,我...
    開封第一講書人閱讀 40,108評論 0 277
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎缝龄,沒想到半個月后汰现,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 46,646評論 1 319
  • 正文 獨居荒郊野嶺守林人離奇死亡叔壤,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 38,709評論 3 342
  • 正文 我和宋清朗相戀三年瞎饲,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片炼绘。...
    茶點故事閱讀 40,861評論 1 353
  • 序言:一個原本活蹦亂跳的男人離奇死亡嗅战,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情驮捍,我是刑警寧澤疟呐,帶...
    沈念sama閱讀 36,527評論 5 351
  • 正文 年R本政府宣布,位于F島的核電站东且,受9級特大地震影響启具,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜珊泳,卻給世界環(huán)境...
    茶點故事閱讀 42,196評論 3 336
  • 文/蒙蒙 一富纸、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧旨椒,春花似錦晓褪、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,698評論 0 25
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至示惊,卻和暖如春好港,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背米罚。 一陣腳步聲響...
    開封第一講書人閱讀 33,804評論 1 274
  • 我被黑心中介騙來泰國打工钧汹, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人录择。 一個月前我還...
    沈念sama閱讀 49,287評論 3 379
  • 正文 我出身青樓拔莱,卻偏偏與公主長得像,于是被迫代替她去往敵國和親隘竭。 傳聞我的和親對象是個殘疾皇子塘秦,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 45,860評論 2 361

推薦閱讀更多精彩內(nèi)容

  • 最近幾年,程序員這個職業(yè)逐漸升溫动看,學(xué)編程的人也越來越多尊剔,國外有個非盈利的開源社區(qū),叫做FreeCodeCamp菱皆,目...
    程序員在深圳閱讀 5,027評論 16 153
  • 本文把程序員所需掌握的關(guān)鍵知識總結(jié)為三大類19個關(guān)鍵概念须误,然后給出了掌握每個關(guān)鍵概念所需的入門書籍,必讀書籍仇轻,以及...
    dle_oxio閱讀 11,143評論 6 244
  • Android 自定義View的各種姿勢1 Activity的顯示之ViewRootImpl詳解 Activity...
    passiontim閱讀 172,324評論 25 707
  • 看到簡書上寫德國一些事情的文章京痢,會讓我恍然大悟原來這些也可以寫啊,而且會有那么多人看拯田,而后我想大概呆了幾年历造,缺少好...
    鮮于早早閱讀 376評論 6 8
  • True and True True False and True False 1 == 1 and 2 == 1...
    Mango907閱讀 552評論 0 0