学编程的正确姿势
前言
先说结论,很多人学编程长久不得进展本质上是思维方式尚未到位。
网络上流行过穷人思维与富人思维的说法。
编程自然也会有编程思维。
下面介绍几个 coding man 常用的思考姿势。
这几个思维能助你早日从 coding man 的视角看问题,学习起来事半功倍。亲身体会,在以这些思维作思考姿势的情况下,学新的语言如喝水一样。曾在 0 手机APP开发经验的情况下,接了朋友一个手机开发的项目。3天时间把 flutter 摸了个底便开始开发,最后还提前半个月完成了项目。
第一性原理
首先提到第一性原理是因为马斯克,辣个无所不能的男人,所用来描述他的思维模式的词。
虽然这个词最早出自古希腊哲学家亚里士多德提出的一个哲学术语:“每个系统中存在一个最基本的命题,它不能被违背或删除。”
看看马斯克这个男人创办的企业。
Zip2:企业黄页
Paypal:电子支付
Spacex:太空技术探索公司
Tesla:电动汽车
Boring:地下交通开发公司
这几个企业所涉及的领域完全不同,多数人能在一个领域有所建树已是难事。而马斯克几乎在这些领域都做到了行业第一。
在采访中,马斯克透露自己非常推崇的思维模式是 “First principle thinking”(第一性原理)。
原话:我们运用“物理性”思维而不是“比较”思维去思考问题是非常重要的。我们在生活中总是倾向于比较——别人已经做过了或者正在做这件事情,我们就也去做。这样的结果是只能产生细小的迭代发展。“第一性原理”的思考方式是用物理学的角度看待世界的方法,也就是说一层层剥开事物的表象,看到里面的本质,然后再从本质一层层往上走。
马斯克会这样说跟他是物理学出身有关。但简单理解,不就是老师常说的:“要先理解原理再做题吗”。
我见过很多新手学编程喜欢做笔记,满满一本子的内容。借过来一看,好家伙,全是各类库的接口变说明,比官方文档还详细。
开发的时候不是有google可以查吗,费这劲折腾干嘛。学习时该花的精力应该在理解代码背后设计的原理上。
学习原理对我们有什么好处呢?
因为计算机构成是一层一层搭建起来的。当我们理解系统层的原理后, 由于系统层开放出来的接口对于每个语言都是一致的。 我们就会发现每个语言能做的好像都差不多,语法上的不同更像是一些语法糖。
这样子你会发现 C、java、python等都差不多,设计模式上也都几乎通用,只是由于他们的侧重点不同,应用场景略微不同而已。
我们学编程语言的时候就可以有一个路线可寻了。
- 了解其应用场景
- 学习其基本类型与运算操作
- 理解其面向对象的写法
- 接触应用场景下常用的第三方库
- 实战开发
这条路子对任何语言的学习都是相通的,遵照这条路子便能几天内轻松上手一门新的编程语言。
黑盒子思维
黑盒子思维的意思是当我们使用一个东西时,需要把它当作一个黑盒子,无需看透其实现原理,只管使用。
“黑盒子”的思路正在各行各业运用着,即使你并不清楚它的名字。最流行的面向对象的程序设计,就是由底层编程者将很多功能和属性封装到对象中,顶层编程者只需要调用这些属性和功能即可,而不需要关心它是如何实现的。
这条理论乍看之下与刨根问底的第一性原理相互矛盾。
但两者的前提不同,学习时需要应用的是第一性原理,而实际应用时需要我们使用黑盒子思维。
使用黑盒子理论后,可以让我们的代码高内聚低耦合。
黑盒子理论乍听起来很抽象,但无非是多多运用以下写法
- 多多运用函数封装代码。
- 将可复用的代码写成组件。
- 将功能不同的代码抽离成服务,使用 socket 或 端口通信。
- 面向接口开发,养成写代码先定义函数参数、服务接口再写实现代码的习惯。
积木思维
积木思维讲究的是整体上的思考,从大到小来规划我们的代码结构。
我们在搭积木时通常会先构思一个大概框架,再通过对框架的查漏补缺来完成我们的积木。
写代码亦是如此。
比如要写一个网站,便可以像搭积木般进行拆分。
如此便可以将其大致架构理清楚,一步一步往里面添轮子即可。
这样的好处是让我们避免写代码时无头绪,同时能维护一个健壮可扩展的代码架构。
结语
以上这三个思维是日常学习与开发中常用的思维方式。
按照这些思维模式来学习便可达到一个事半功倍的效果。
也可针对自身的习惯再加以微调,内化成自身的思维习惯。本质上还要多练,多多阅读大佬所写的项目,通过实战来固化自己的思维方式。