编程技术思想论
作者:秋了秋 发表时间:2017年04月02日
思想是开启一切的源泉,每一个产品的诞生都是从思想开始,一个好的idea才能带起一个产品的进化过程。所以根基一定要打牢,把好守门关,就已经成功了一半。正所谓千里之行始于足下,万事开头难,现在我们来解决这个开头问题。
我所说的编程思想指的是What is this?和How to do?。What is this指的是这个有什么功能?用来干什么?为什么要用它?它解决了什么问题?一定要做个明白人,比如说jq框架,它有什么优点?为什么不用原生JavaScript,因为它对JavaScript封装了一些函数简化了我们的编程,函数内部做了各种浏览器的兼容性,我们使用的时候只要调个函数即可替代我们用原生写几行到几百行的JavaScript代码。How to do指的是如何使用,通俗点就是文档,比如说jq使用的时候要先引入jq库,css方法定义多个属性的时候要传个对象,对象键名是样式的属性名,键值是样式的属性值css({left:"20px",width:"100px"})。
For example, what is body-parse in node?body-parser是对request参数的解析,解析后均可获得一个JSON化的数据以方便我们读取。How to do ?首先我们要安装这个中间件(npm install body-parse --save-dev),然后在入口文件的地方布置我们的中间件(app.use(bodyParser())),假设app是我们的express()。
编程思想在一套架构中都是相似的,所以掌握一个编程技术思想,在整个架构中都是通用,就比如说nodejs服务端架构。它是通过commonJS规范来管理模块,也即是require("模块名称");来引用模块里面暴露出来的方法或者属性。这跟前端页面script标签引入js资源来使用的思想是相似的但又有区别,相似在于都是在一个页面中引入另一个资源进行使用,但是前端是通过http请求从服务器下载资源,但node是通过开IO读写硬盘索引去找文件,显然硬盘直接读取比http请求要快太多。因为http请求要经过许多步骤才能与服务器通信,服务器也要经过多步才能完成处理请求,这些对于计算机来说都是小case,关键是Internet传输,受宽带运营商的限制,往往在这里会占用总时间90%以上。而服务端的require是直接读文件的形式。open=>read,连send都省了。作为一个前端来写后端,如果你没弄清这些思想,你会很confuse,为什么nodejs到处都是require,这样臃肿的网站还能跑得动吗!一个文件就十几甚至几十的require,所以node的编程思想正是在于此,他是模块化开发,就是几乎通过模块开发的, 这要是以前端的思想来讲的话,就是都是通过插件开发的,这样的网站一般很烂。但node不一样,node写原生是很累的也不现实的,但是借助模块就可以牺牲点 IO而快速开发我们的服务端逻辑。硬盘读写速度的影响是微乎其微的,尤其是固态硬盘服务器。所以在前端我们提倡的原生html、css、js而后端是提倡框架,这是两个相反的思想。这就意味着你在服务端要学许多模块的What is this?和How to do?一个一个模块去攻破。
说到模块开发,就牵涉到架构选型,这是一个整体或者全局的概念,模块的学习使用是从小而全,架构的思想是从大而细,比如说后端使用java还是php还是node语言,前端是使用哪个UI框架和mvvm数据框架。是用ejs模板,还是handlebars、jade模板渲染页面,是用mongoDB还是用MySQL存储数据,服务器是用Linux还是windows。网站文件的目录结构如何规划,用gulp还是webpack做自动化开发,命名规范、进程管理用什么、layout和patial。也就是整个网站的前期部署搭建工作,一定要谨慎,必须具备效率、性能、可读、易维护性的思想。
编程最大的乐趣就是“老子做到了”。打好心理战术,这也是编程过程最大的动力,我们要利用这个心理邪术帮助我们平步青云~,比如说制作一张网页,按照我的思想惯例是从上到下,从左往右依次一部分一部分来顺序完成,这也是浏览器渲染网页的顺序。顺序制作指的是一部分完全做好再做另一部分,包括细节,比如说头部、导航栏、侧边栏、内容栏、页脚。当然有的时候我也会先写好整体框架,再细调局部。但是我发现,按顺序制作的时候我很快乐,做得有激情,每完成一部分都会欣赏下自己完成的部分,然后感叹一句:perfect!离胜利还有1/5、1/2、3/4、完成。路踩在脚下,能明确的感知进度条的走动,每完成一步都给自己打了鸡血似的~而先整体再细节这种做法,总是给你的感觉,还没完成、还没完成、还没完成、终于完成了。需要强大的意志力做驱动。这是做页面的心理战术,网站整体功能也一样。你要搭建一个网站,一定要有良好的规划,比如说逐步攻破nodejs架构选型、配置路由、数据库设计、登录注册、后台管理、发表文章、邮件发送、短信发送、第三方登录。。。切不可急躁,你这些步骤知识巩固的越牢固对后续的开发越有利。一个一个功能去研究实现,你会发现以前看似做不到的我如今完成了,鸡血就来了,接着下一个目标。一定要实践,程序不难,程序只是学不完。没有自己实践完成过的技术,面试你都不敢说你会,即使你能快速的边学边做。很多能力强的面试都有担忧和顾虑 ,其实就输在心理上,要清楚技术对于能力强的人没有会不会,只有知不知道。
经常听到有人抱怨,入行如入坑,其实是自己的问题,不是行业问题,他们总把一些自己碰到的稀奇古怪的现象归到程序中来。然而程序是具备严谨逻辑性的语言,有错就一定有原因,它自己本身是不会错,除非把它写错了,或者是写得不好,自己把自己坑进去了,其中的因果关系一定是明确的。书写严谨有条理的代码是给自己轻松的维护铺路。