学编程的正确姿势

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