一朝入编程,一天三个坑(已经很客气了)。
软件工程的复杂性,在于需求的不确定、问题的虚拟化无实体、方法无固定规律可循(大学软工课所学)。为了降低编程的复杂度,使软件工程尽可能可控,各路大牛创语言、构框架、建模板,努力营造良好的编程生态。
两年前,作为新一代初入编程坑的无名小辈,我切实的感到编程环境对我满满的恶意——不是编程本身的逻辑复杂性导致的束手无策,而是可用的工具太多引起的选择慌乱——且不提语言琳琅满目,单论一种语言就填塞着密密麻麻的框架、模板等一系列功能需求之外的“技术故事”,以致于我不知道从何学起、如何高效了。迷茫的原因还是对这诸多工具的生疏,仅仅道听途说了些学长经验和网络建议,只知其一不知其二。所以这两年间我不断通过实践和理论学习体会众多编程工具的意义,努力给他们分类、定位,如今思路终于清晰,故特此记录。
编程语言是最为庞大的概念,java、c、c++等等。它们各自有自己的语法,各自形成自己的完整生态环境。理论上每门语言都能编写一整套软件系统。但是有的语言适用范围相对狭小,需要与其他语言配合使用。
既然如此,为什么我们光学会语法却只能编写“helloworld”过家家,无法参与真正的项目开发?因为我们对整套软件的架构、分工全然不知,后者说思维混乱。我曾从零开始手撕一个小游戏,从界面到底层逻辑和数据,我的工程结构极为混乱,使用的编程语句功能弱小,极其琐碎,封装性很差。后来我学习了框架知识,大获裨益。经过框架的封装,只需要一条简单的语句就能完成手撕数行代码才能做到的功能。框架把底层的琐碎代码封装成能具有功能性的全新语句,屏蔽了底层细节,便利开发人员。web中框架分为前端和后端,前端框架比如jQuery、Vue、React、Angular等,功能就是上文所述的代码组织封装;后端框架除了代码封装之外,还有组织项目结构的功能,它们会为你的项目分包分工,让你更好的组织代码,比如java的Spring boot,Nodejs的express等,从功能范围上说,后端框架更广阔,直接框定了项目结构。
照理说有了框架支持,项目已经可以着手了,但如果急于开始,过程中便会发现缺少关键支撑——前端数据渲染和代码复用。模板引擎为此而生。java web的jsp、freemark、thymeleaf,nodejs的jade和ejs等模板都提供了这类功能,如此一来项目的“技术故事”才算基本解决,开发技术才算初步完备。
清楚了上面三个概念,终于万事俱备,可以正式投入项目开发,去踩更多的坑了。