1 LSGO软件技术团队
贡献人:马燕鹏
如果喜欢这里的内容,你能够给我最大的帮助就是转发,告诉你的朋友,鼓励他们一起来学习。
If you like the content here, the greatest help you can give me is forwarding, so tell your friends and encourage them to learn together.
试考虑下面这些场景:
一门计算机编程的课程结课了,考试也通过了。一段时间以后,回想这门课程所学的内容,可大脑一片空白,学的知识好像又还给老师了;
下了很大的决心要把一本计算机编程的书籍看完,可是看到后面,前面的基本忘光了,感觉自己还没有入门就要放弃;
想一想,我们在学习计算机编程的道路上,是不是也遇到过这种情况。会不由自主的抱怨写代码真不是人干的,对编程产生抵触心里,更有甚者用“反正以后,我也不用编程”来安慰自己。
坦白的说,学习哪门技术不难呢?不都得通过刻意练习才能掌握么。只不过有些人方法得当,学的快些,有些人方法不当,学的慢些,最后放弃罢了。那么,学习编程正确的姿势,是怎样的呢?这其实,就需要我们想清楚学习编程的第一性原理是什么?
在往下写之前,先跟大家说说经常被埃隆·马斯克(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 上把自己学习的知识点,遇到的坑以及解决方案分享出来。经过这般折腾,既满足了自己验证交易策略的需求,又把编程的知识应用于实际,没准还收获了友谊和一众技术粉。
总的来说,经过两三次这样的折腾,编程的技能就搞定了,也为自己多了一个竞争的维度。这就是 第一性原理 指导我学习编程的全过程,不盲目地追求跟别人一样,回溯学习编程的本质,然后重新思考怎么做。
经过8年多的发展,LSGO软件技术团队在地理信息系统、数据统计分析、计算机视觉领域积累了丰富的研发经验,也建立了人才培养的完备体系。
欢迎对算法设计与实现感兴趣的同学加入,与我们共同成长进步。
本微信公众平台长期系统化提供有关机器学习、软件研发、教育及学习方法、数学建模的知识,并将以上知识转化为实践。拒绝知识碎片化、耐心打磨技能、解决实际问题是我们的宗旨和追求。
联系客服