从2019年9月初开始转行搞java开发,直到今天,Java开发已经3年时间。虽然之前的7年时间,偶尔会涉及到开发的工作。或是C#的WinForm客户端系统,或是FME和Arcgis的数据处理程序,或是数据库的入库软件。可以说,从2012年6月份毕业之后,断断续续的一直都在搞开发。但是,期间搞了水利测绘,三维扫描仪,三维点云处理,三维建模,视频剪辑,系统运维,等。所以,开发经验,应该算几年,自己真的说不清楚。
想起自己打羽毛球的经历,和软件开发的经历很类似,在此分享出来。在初中的时候偶尔打一下羽毛球,高中也会经常打羽毛球。但是,打羽毛球的水平很一般。大学选修了羽毛球课程,加上兴趣原因,有一段时间痴迷于羽毛球,练步伐,练高远球,等。经过半个学期的学习和练习,羽毛球水平得到了很大的提升。
关于软件开发,还得从上大学那会儿说起。刚上大学,就对软件开发感兴趣。只是,那时学的是C语言,后面学了C#,数据库,计算机网络,数据结构,软件工程,等。并且利用空余时间,去图书馆借阅数字逻辑,操作系统,离散数学,等。相关的书籍都看了一通。
2011年冬天,那时候,准备考研的同学在准备考研,准备工作的都在投简历找工作。当时本来是想去北上广搞开发的工作,但后面因为父母说希望回到贵州。也就回到了贵州,搞起了测绘的工作。再后来,就是上面说的,部门一路转型,我也跟着一路折腾。
再次回到2019年9月初,当时,因为水利测绘市场的萎缩,而信息化已经如火如荼。自己做了一个改变人生轨迹的决定,去参加“Java大数据”相关的培训。从2019年9月初到2020年3月底,为期7个月的脱产培训。为后面的Java开发,打好了坚实的理论和实战基础。
以上,是自己从事软件开发的前世,下文说说从事软件开发的今生。
从2019年9月初到2022年8月底,Java开发工作,刚好三年。从刚开始跟着项目经理写一个页面或是接口,到现在同时带着几个同事,搞几个项目。期间遇到了一些问题,然后解决问题。偶尔也会和时间赛跑,加班赶工。有时候,会忙于项目管理相关的事情,而错过了写代码的机会;有时候,会忙于运维相关的事情,而错过了写代码的机会。那么, 期间积累了什么呢?
这个问题,之前一直在想,并且之后也会一直想。经过反复的思考,个人觉得,这几年时间,主要积累了如下一些经验,在此分享出来:
俗话说的好,活到老,学到老。尤其是在互联网IT行业,技术更新日新月异,新技术层出不穷。作为其中的一员,需要不断的学习新的知识,掌握新的理念,使用新的技能。
有句话说的好,万变不离其宗。扎实理论基础后,对于新的框架,了解其原理,在需要使用的时候,可以快速的上手使用。后续再逐步深入。如果理论不扎实,不理解其原理,使用的时候,出现什么状况,也无法及时有效解决。
软件开发中,如果每一个项目都从第一个页面去开发实现。那么,很难做到快速交付。并且对于小型项目,会感觉一直在重复的写着“系统管理”相关的功能。而真正的业务功能,可能就和“系统管理”模块的功能差不多。如果有一套通用的开发框架,就可以直接基于该框架,写客户最关心的业务逻辑。专注于客户价值的交付,并且能够快速的响应客户。
假设现在已经有了一套通用的开发框架。那么,如果所需的系统的结构布局和通用框架的布局不一致,应该怎么办呢?显然不是从头开发,而是对通用框架进行结构布局的调整。并且,是快速的调整,比如,开始花费2-3天时间算快速,后面花费1天,再后来,1个上午,等。
学习项目管理的理论知识,作为项目经理,可以更有效地管理项目,而作为开发人员,能够更好的同项目经理沟通。软件开发应该是为了需求而开发,不应该是为了开发而开发。
作为开发人员,为什么需要学习架构相关的知识呢?学习架构相关知识的好处在于,对于不同的项目,能够更恰当的使用不同的架构。有句话说的好,杀鸡焉用牛刀。就比如,一个用户量100左右的项目,并发量不足100,业务涉及也就5-10个业务逻辑。这样的项目,使用微服务架构,是不是有杀鸡用牛刀的感觉。当然,如果是为了学习,可以理解。如果要快速响应客户,而之前又没有相关的微服务经验,个人是不推荐永微服务架构的。
总之,学习架构的好处,是在合适的地方,能够使用合适的架构。而不是因为某个架构流行或者火,就去使用它,而不去管使用的场景是不是合适。
以下引用敏捷宣言:
我们一直在实践中探寻更好的软件开发方法,身体力行的同时也帮助他人。 由此我们建立了如下价值观:
- 个体和互动高于流程和工具。
- 工作的软件高于详尽的文档。
- 客户合作高于合同谈判。
- 响应变化高于遵循计划。
也就是说,尽管右项有价值,我们更重视左项的价值。
当然,学习的目的。是为了更好的应用。既然为了更好的应用,那么,学习就应该像做项目一样,有相应的启动,规划,执行,监控和收尾。当然,学习也应该像搞运营一样,不断的去重复,不断的去强化,不断的去精进。要不然,怎么有人会说学海无边,回头是岸呢。
在写之前,感觉自己有很多想写的。而在写的过程中发现,虽然关于软件开发的积累的具体的东西不少,比如,前端相关的经验,后端相关的经验,数据库相关的经验,项目管理相关的经验,与客户对接相关的经验,需求分析相关的经验,等。但是,如果进一步抽象提取,却不过一句话的事情。**想起一句话,一花一世界,一叶一如来。反过来说,就是一世界一花,一如来一页。**所以,要深入学习,能走进去,也要能走出来。
对于新知识的渴求,不在于知识本身,而在于新知识能够解决复杂的问题,也在于新知识能够让曾经无序的思维变得有序,在于新知识能够让工作变得高效,让遇到的问题都能够找到好的对应的解决方案。
(好记性不如烂笔头。对抗遗忘的最好方式是:在解决问题的时候,记录下遇到的问题和解决的方式,后续遇到相同的问题,只需要翻翻笔记即可。)