前言

今年,想说的和总结的其实挺多的,但奈何不善写作,卯足劲才憋出这篇总结(文笔不好,所以文章语言会很生硬且没有衔接感)。

对待技术


对待技术方面,一直以来的观点是“不要过分执迷技术,应该学习的是技术背后的东西”,但总觉得措词怪异。直到今年,看到下面阮一峰老师博客里的这段话,才明白应该这样去表述。


实施细节并不是知识,而是操作步骤。如果技术栈发生变更,实施细节就会毫无用处。但是,你又不能不学习它,不知道实施细节,就没法做出项目。我觉得,程序员应该要警惕,不要落入实施细节的陷阱,不要把全部精力花在实施细节上面,然后以为自己学到了真正的知识。对待各种语言和工具,正确的态度应该是"进得去,出得来",既要了解足够的细节,也要能够站在宏观的角度看待它,探寻底层到底是怎么实现的。

摘自阮一峰博客《每周分享第 28 期》
<http://www.ruanyifeng.com/blog/2018/10/weekly-issue-28.html>

总而言之,就是要以宏观角度来看待实施细节,才能学到真正的知识。下文阐述的内容,是今年的经历、想法与思考,这些让我对这个观点有了更深刻地感触。

从项目经验中“掘金”


今年暑假留在了学校,导师布置了个项目,并充当提出需求的客户和前期设计的分析师,团队四个人参与整个项目的生命周期。由于没有经验及技术不成熟,整个过程是边学习摸索着边推进。但暑期结束了也没大进展,因而项目只能被搁置了。不过从此次经历中学习到了很多知识,同时也总结了项目推进失败的教训。

转变开发方式


项目开始前,导师给我们讲述许多关于软件开发的问题,其中提到了“基于领域驱动”的软件设计模式。同以往课设项目围绕着“数据库”进行开发不同,基于领域驱动的开发注重领域的知识,领域模型更加符合自然系统,而围绕数据库开发只会将重心偏移到数据的设计和处理。


可惜的是,早先没有基于领域驱动开发软件的经验,以至于暑假项目上的前期分析还是以往的方式。下半年拜读《领域驱动设计》后,对软件开发方式有了不同理解与体会,同时也将该开发方式应用在一门课设上。

项目失败的教训

此次项目失败有技术原因也有工程上的问题,但主要还是败在工程问题上。


在项目架构选择上,犯了很大的错误,选择过于激进的微服务架构。由于项目的复杂程度,还不至于使用该架构,导致对项目的划分粒度过细,就像是为了微服务而微服务。而且这导致了维护成本变高,由于划分过细,修改一处就得重新改写其它关联的部分,当然这也与前期设计不当脱不了关系。最后,由于种种问题放弃了还不熟悉的微服务架构,转而使用传统的单块架构。


此次项目,采用了前后端分离的开发方式,但前后端测试成了问题。最开始使用原始的手工测试,测试非常耗时间,而且有时候难以判断错误发生在哪一端。于是,后来采用了替身测试,前端使用
Mock.js 框架模拟接收到的数据,而后端使用 JUnit 框架模拟发送的请求。虽然解决了前后端测试问题,但开发中接口的统一,就只能靠传递定义接口文档实现。

框架的优秀思想

这个项目的后端用到了 Spring 框架,前端用到 Vue.js 框架,这两个框架都十分优秀且其设计思想耐人寻味。

模块解耦

首先,非常欣赏 Spring 框架解决软件复杂性的思想,而且让我了解到原来模块可以这么解耦。

Spring
框架通过依赖注入来解决模块间高耦合的问题,框架负责代码模块的依赖,就像是代码模块的粘合剂。且其低侵入的特性,使得编写代码时基本无需考虑框架的存在。

数据驱动视图

大一也曾接触过 Vue.js 框架,老师让我用其做个登录演示页面,于是花了两天阅读了官方文档,草草做了个演示。当时只觉得其写法很奇怪及别扭,并没有过多的思考。

上半年做 Oracle 数据库课设时,用手动修改 DOM 来实现视图变化,但当项目变得复杂时,代码也会变得非常难维护。而 Vue.js
框架的优秀之处在于,让数据驱动视图的变化,从而不需要手动修改 DOM ,降低了数据与视图关联的复杂性。

重新接触前端

由于项目需要,又重新接触了前端。虽然清楚前端这几年发展迅速,但当真正接触时,更是惊叹其巨大变化。

学习成本变高

现在编写前端工程,不仅需要掌握最基本的 HTML 标记语言、CSS 样式表和 JavaScript 脚本语言,还得搭建 Node.js
环境及会使用依赖包管理工具 NPM,同时会配置使用例如 Webpack 之类的构建工具。

掌握了上面这些,还得学习一个热门的框架,例如我使用的 Vue.js 还有基于此的前端界面库 ElementUI
。学习这些内容的成本是很高的,而且上面提到内容,还只是整个“大前端”的冰山一角。

前端工程化


前端的学习成本随着其发展不断增加,而前端发展的同时也使其复杂性增加,于是就有了“前端工程化”一说。前端工程化同软件工程为了解决软件复杂性一样,首要任务是为了解决前端的复杂性。


前端工程化涉及诸多方面的内容,由于篇幅有限,只阐述我认为的核心内容。首先一个是,强调前端工程进行组件化开发,同模块化用于封装隔离不同,组件化更强调复用,一个很好的例子便是
Vue.js 的模板文件。还有便是规范化的开发,项目需要考虑语言规范、编码规范、项目结构规范等等方面,而这些也有利于团队的开发与维护。

寄望 2019 年

今年算起,入门也大概有六七年头了吧,现在自己的境遇是涉猎广但深度不够,所以计划明年着重研究大数据计算方面。同时,希望明年 ACM
比赛能有个好成绩,不会像今年一样只是去走个过场。还有,继续练好自己的写作水平。

友情链接
KaDraw流程图
API参考文档
OK工具箱
云服务器优惠
阿里云优惠券
腾讯云优惠券
华为云优惠券
站点信息
问题反馈
邮箱:ixiaoyang8@qq.com
QQ群:637538335
关注微信