学不会编程?试试我的方法
試考慮下面這些場景:
- 一門計算機編程的課程結課了,考試也通過了。一段時間以后,回想這門課程所學的內容,可大腦一片空白,學的知識好像又還給老師了; 
- 下了很大的決心要把一本計算機編程的書籍看完,可是看到后面,前面的基本忘光了,感覺自己還沒有入門就要放棄; 
想一想,我們在學習計算機編程的道路上,是不是也遇到過這種情況。會不由自主的抱怨寫代碼真不是人干的,對編程產生抵觸心里,更有甚者用“反正以后,我也不用編程”來安慰自己。
坦白的說,學習哪門技術不難呢?不都得通過刻意練習才能掌握么。只不過有些人方法得當,學的快些,有些人方法不當,學的慢些,最后放棄罷了。那么,學習編程正確的姿勢,是怎樣的呢?這其實,就需要我們想清楚學習編程的第一性原理是什么?
在往下寫之前,先跟大家說說經常被埃隆·馬斯克(Elon Musk)提及的 第一性原理,這個原理也常被 李善友 和 羅振宇 提及。
什么是第一性原理呢?
這個原理出自古希臘哲學家 亞里士多德 ,維基百科對第一性原理的描述為:
A first principle is a basic, foundational, self-evident proposition or assumption that cannot be deduced from any other proposition or assumption.
這句話翻譯成中文就是:第一性原理是基本的、根本的、不言而喻的命題或假設,不能由其它的命題或假設推導出來。
說的是什么鬼?咱們不用糾結這個概念的意思。咱們先想想,為什么要提出這個原理就夠了。那就是為了解釋我們生活中所看到的各種現象。他認為任何現象的發生,都不是無緣無故的,其背后一定存在一個本質原因。
亞里士多德的這個想法深深影響了Elon Musk 。他把第一性原理作為創業的指導法則,連續打造了最炫的電動汽車Tesla,最酷的私人火箭 SpaceX,以及最具未來感的中短途交通工具 Hyperloop,取代飛機和高速鐵路,被譽為硅谷的“鋼鐵俠”。
Elon Musk 在做電動車 Tesla時,很多人覺得不可能做成,因為電池成本降不下來。當時大概是 600 美元/千瓦時。但 Elon Musk 說:“我不管現在的電池有多貴,我就回到本質問一個問題,電池的硬成本是什么構成的?無論如何也減不下去的成本是什么?”無非就是鐵、鎳、鋁這些金屬,除了買這些金屬的成本是絕對降不下去的,剩下來的成本都是人類協作過程中產生的,那就有優化的空間。
比如: 
 - 在美國生產可能稅費比較高,那就不要在美國生產了; 
 - 可能是某個技術路線它比較昂貴,那隨著它的大規模普及應用,這個價格就能降下來; 
 - 可能是某種模塊設計上本身出了問題,那就改變設計。
最后 Elon Musk 做出來的電池比松下的電池價格便宜了20%多。
同樣的思路,Elon Musk 也用在了制造火箭的項目上。這事本來只有國家才有財力干,但是 Elon Musk 說不對,我算了一筆賬:一架火箭,它的原料成本只占火箭的總成本的2%,就算還有其他成本,那都可以優化。所以,他放話說,可以把現在火箭的制造成本,降低到只有現在的10%。
以上兩個例子均來源于《硅谷鋼鐵俠》這本書,同樣第一性原理也運用在 Elon Musk 的 Hyperloop(真空膠囊高鐵)項目中。Elon Musk 首先回溯人類制造火車的本質目的 – 將較多的人或貨物從指定點A運送到指定點B。所以他放棄了人們習慣中的動力牽引技術,改用膠囊列車在管道中通過壓縮空氣作為運行的動力和升力,使得這種列車最高時速達到1300公里,比飛機和高鐵更安全。
總結一下,Elon Musk 利用第一性原理,以及批判性思維和懷疑精神拷問人們固化的認知,回溯事物背后的第一性原理,即事物的本質,圍繞著這個本質,重新思考怎么做。正是在第一性原理的指導下,Elon Musk 創建了一家又一家享譽全球的科技公司。
回到我們剛才的問題 – 學習編程的第一性原理是什么呢?
很簡單:通過編程來解決實際問題。
僅僅是上課、看書、聽課、考試而不去解決問題,知識沒有內化,淡忘就是自然而然的事情了。所以,我們在學習編程時,一定要先找到和列出需要解決的問題。以解決該問題為目的來學習編程,這樣才能更快的掌握這門技術。比如,賺錢是所有人的剛需。我們都想通過數據分析來驗證自己的交易策略是否可行,這個問題就可以通過編程來解決。
首先,掌握編程的最少必要知識。
無外乎就是以下這些: 
 - 程序的入口在哪里? 
 - 程序的輸入怎樣提供,程序的結果怎樣輸出? 
 - 程序接收的數據都有哪些常用類型? 
 - 怎樣定義變量,怎樣定義常量? 
 - 怎樣定義一個函數? 
 - 怎樣控制程序的流向,順序流向是怎樣的,判斷流向是怎樣的,分支流向是怎樣的,循環流向是怎樣的? 
 - 怎樣定義一個命名空間,怎樣寫一個類,也就是所謂的封裝。 
 - 怎樣引入一個命名空間,有的語言叫做package。 
 - 怎樣寫類之間的繼承,以及編譯和運行時的多態?
其次,根據問題找對應的知識點來學,比如怎樣分析這個URL:
http://vip.stock.finance.sina.com.cn/corp/go.php/vMS_MarketHistory/stockid/000300/type/S.phtml?year=2018&jidu=1怎樣進行網絡請求;怎樣利用正則表達式把數據從HTML文檔中提取出來;怎樣利用GDI+可視化數據;如果需要持久化,就學學SQL語句把這些數據存入數據庫為自己的下一步分析做準備,等等。
最后,在 GitHub 或 Stack Overflow 上把自己學習的知識點,遇到的坑以及解決方案分享出來。經過這般折騰,既滿足了自己驗證交易策略的需求,又把編程的知識應用于實際,沒準還收獲了友誼和一眾技術粉。
總的來說,經過兩三次這樣的折騰,編程的技能就搞定了,也為自己多了一個競爭的維度。這就是 第一性原理 指導我學習編程的全過程,不盲目地追求跟別人一樣,回溯學習編程的本質,然后重新思考怎么做。
總結
以上是生活随笔為你收集整理的学不会编程?试试我的方法的全部內容,希望文章能夠幫你解決所遇到的問題。
 
                            
                        - 上一篇: 鱼的记忆[较为重要的知识点/技巧]
- 下一篇: VS2022安装.Net Framewo
