那么作為數(shù)學(xué)系的學(xué)生,如果仍想把編程學(xué)好,并為數(shù)學(xué)這把“屠龍刀”找到用武之地,有沒有其它的辦法呢?答案是肯定的。
目前各種開源編程語言、操作系統(tǒng)、應(yīng)用軟件以及編程工具都已經(jīng)發(fā)展的相當(dāng)成熟好用,它們一起構(gòu)成了整個互聯(lián)網(wǎng)的開源技術(shù)底座,而且大多都形成了非常成熟開源社區(qū)。個人通過這些開源社區(qū),可以找到非常豐富的入門教程、幫助文檔、教學(xué)視頻等學(xué)習(xí)資源,還可以在線獲得很多技術(shù)大咖的及時答疑解惑,完全可以彌補學(xué)校編程教育資源的不足和問題。
基于這些互聯(lián)網(wǎng)上的學(xué)習(xí)資源,個人想學(xué)好編程,還需要充分發(fā)揮自己的主觀能動性,拋棄所謂的天賦、喜不喜歡、有沒有興趣等主觀的、道聽途說的、廉價的、即無法證實也無法證偽的想法和疑問,在認(rèn)真調(diào)查研究基礎(chǔ)上,結(jié)合自己的實際情況,以及學(xué)習(xí)和職業(yè)發(fā)展目標(biāo)的需要,制定一個合理可行的學(xué)習(xí)計劃和方案,然后在不斷學(xué)習(xí)中實踐、在不斷實踐中學(xué)習(xí)。
下面我將從思想、原則、方法三個層面,分享我們團隊在學(xué)習(xí)編程過程中的一些經(jīng)驗。
從思想觀念的角度來講,首先要給自己的大腦洗個澡,洗去那些錯誤有害的觀念,植入能夠反映客觀現(xiàn)實的思想。有以下幾點需要注意:
停止去問我有沒有編程天賦這個問題,這不是一個好問題,因為是與否的回答都不能證實和證偽。
停止去問我對編程有沒有興趣、喜不喜歡的問題,因為在沒有深入了解一件事情之前,我們沒有資格回答這個問題。
停止去抱怨學(xué)校教育的不足之處,因為一個社會組織的發(fā)展也有它的內(nèi)在客觀規(guī)律(比如經(jīng)濟利益是驅(qū)動并決定組織向不同方向發(fā)展的根本動力),所以一個組織最后發(fā)展到讓組織內(nèi)所有人都不爽的狀態(tài),都有它不可抗拒的一面,整天的抱怨只是在宣泄情緒、浪費自己的時間而已。如果你在一個組織中浪費了青春年華,最后還要承擔(dān)其不好的后果,那就下決心用行動去改變自己,從而把對自己成長的影響降到最低。
作為數(shù)學(xué)系的學(xué)生,我們要對數(shù)學(xué)本身有信心。不要僅僅停留在數(shù)數(shù)、買菜這么低的層次上來看待數(shù)學(xué)。數(shù)學(xué)是人類智慧皇冠上最燦爛的明珠,是一切自然、社會和工程科學(xué)的通行語言,這是真理,不用費時間和腦力去懷疑,我們最好能把數(shù)學(xué)當(dāng)成一種信仰。我們暫時看不到、感受不到,不是因為這是不是真理的問題,而是我們還沒有達(dá)到相應(yīng)的高度。編程本質(zhì)上就是把用數(shù)學(xué)語言描述的解決方案“翻譯”為程序代碼而已,只要我們能學(xué)好數(shù)學(xué),就能學(xué)好編程。
在智能信息時代,軟件才是連接一切的關(guān)鍵,而數(shù)學(xué)思想和算法則是所有軟件的靈魂。因此,身處數(shù)學(xué)系的你,如果想找一份好工作,成為技術(shù)大牛,或者想知道數(shù)學(xué)到底是如何與自然、科學(xué)和工程學(xué)科相互作用的,想把數(shù)學(xué)變成真正的生產(chǎn)力,就需要把編程學(xué)好。
從原則的角度來講,有如下原則我們需要堅持:
少即是多,慢即是快
循序漸進(jìn),日積月累
先入門存活,再實踐精通
從方法的角度來講,有如下的方法你可以嘗試:
首先快速入門 Linux 及開源編程生產(chǎn)力工具,如:ubuntu、git(版本控制)及開源代碼托管平臺、cmake、vim、gcc、gdb、vscode 等等,然后在不斷的使用過程中實踐精通。這里強調(diào)的是要用開源工具來學(xué)習(xí)編程。
在學(xué)習(xí)編程的過程中,每天堅持寫學(xué)習(xí)復(fù)盤總結(jié),通過不斷反觀、反思、反省自己學(xué)習(xí)編程的過程,不斷提煉總結(jié)經(jīng)驗教訓(xùn),看清自己在學(xué)習(xí)過程中的思維與行為模式,并不斷調(diào)整優(yōu)化。這是一個向自己學(xué)習(xí)的過程,也是自主學(xué)習(xí)的核心要義。
可以找一個或多個引路人,定期尋求指導(dǎo)和反饋,幫助及時發(fā)現(xiàn)學(xué)習(xí)中存在的問題,答疑解惑,這樣會少走很多彎路,少踩很多坑。
在編程之前,首先要寫好編程數(shù)學(xué)文檔。文檔要盡量以最簡潔明了、邏輯清晰的數(shù)學(xué)語言來描述要實現(xiàn)的算法,保證每一個計算步驟的正確性。簡潔明了、邏輯清晰的數(shù)學(xué)語言往往意味著對應(yīng)的程序?qū)崿F(xiàn)也是簡潔明了、邏輯清晰的。注意,這里所說的編程數(shù)學(xué)文檔,不是通常教材上看到的那種偽代碼,因為這種偽代碼大部分是無法直接翻譯成程序語言的。
精通數(shù)學(xué)中的張量語言,經(jīng)驗表明用它寫出的編程數(shù)學(xué)文檔,大部分是可以直接翻譯為代碼的。
在編程之前,你還要準(zhǔn)備好可以用來測試程序運行的簡單算例,用于在編程過程中隨時測試你的程序。
要實現(xiàn)復(fù)雜的算法,先進(jìn)行分解設(shè)計,把算法“正交”分解成很多簡單的模塊,其中每個模塊有明確的功能和輸入輸出,然后采用增量開發(fā)的模式,逐個實現(xiàn)并測試其正確性,最后再集成測試正確性。
去閱讀別人的代碼時,有與編程相關(guān)的數(shù)學(xué)文檔,要先看數(shù)學(xué)文檔。如果沒有,就要在看代碼的過程中,不斷嘗試用數(shù)學(xué)語言來重新闡述這些代碼,并寫成編程數(shù)學(xué)文檔,再結(jié)合一些必要的運行測試,可極大提升理解學(xué)習(xí)別人代碼的速度。
反過來把編程作為學(xué)習(xí)數(shù)學(xué)的工具,幫助自己更深刻地理解數(shù)學(xué)本身。
學(xué)會使用符號計算工具,代替紙筆進(jìn)行數(shù)學(xué)公式的推導(dǎo),比如 Python 中 sympy 符號計算工具箱。
以上是我們團隊在編程過程中總結(jié)的實戰(zhàn)經(jīng)驗。目前團隊小伙伴陳春雨已通過這一系列學(xué)習(xí)和實踐,成功的從編程菜鳥晉升為大蝦,初具亮劍江湖的實力,可見以上經(jīng)驗還是頗具參考性。希望這些經(jīng)驗?zāi)軌驇偷礁嘞氚丫幊虒W(xué)好的學(xué)生。我也會一如既往地探索,從而可以幫助更多學(xué)生快速提升編程能力,為社會培養(yǎng)更多既懂理論、又懂實踐的綜合型人才。
歡迎更多有志于把計算數(shù)學(xué)變?yōu)檎嬲a(chǎn)力的老師、學(xué)生加入我們!
算法時代,未來已來!作為計算數(shù)學(xué)人,我們應(yīng)心懷使命,肩扛責(zé)任,迎難而上,以攻堅的姿態(tài)開拓創(chuàng)新,為解決國家重大“卡脖子”問題貢獻(xiàn)自己應(yīng)有的一份力量,同時為培養(yǎng)新一代中國數(shù)學(xué)的中堅力量而努力。
相信我們在一起,就會了不起!
(原文鏈接:https://mp.weixin.qq.com/s/vB0qAz2e1QmNMKnBGitEYw)