学不会编程?试试我的方法

试考虑下面这些场景:

  • 一门计算机编程的课程结课了,考试也通过了。一段时间以后,回想这门课程所学的内容,可大脑一片空白,学的知识好像又还给老师了;

  • 下了很大的决心要把一本计算机编程的书籍看完,可是看到后面,前面的基本忘光了,感觉自己还没有入门就要放弃;

想一想,我们在学习计算机编程的道路上,是不是也遇到过这种情况。会不由自主的抱怨写代码真不是人干的,对编程产生抵触心里,更有甚者用“反正以后,我也不用编程”来安慰自己。


坦白的说,学习哪门技术不难呢?不都得通过刻意练习才能掌握么。只不过有些人方法得当,学的快些,有些人方法不当,学的慢些,最后放弃罢了。那么,学习编程正确的姿势,是怎样的呢?这其实,就需要我们想清楚学习编程的第一性原理是什么

在往下写之前,先跟大家说说经常被埃隆·马斯克(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 上把自己学习的知识点,遇到的坑以及解决方案分享出来。经过这般折腾,既满足了自己验证交易策略的需求,又把编程的知识应用于实际,没准还收获了友谊和一众技术粉。


总的来说,经过两三次这样的折腾,编程的技能就搞定了,也为自己多了一个竞争的维度。这就是 第一性原理 指导我学习编程的全过程,不盲目地追求跟别人一样,回溯学习编程的本质,然后重新思考怎么做

猜你喜欢

转载自blog.csdn.net/lsgo_myp/article/details/80837614