时间过得很快,抛开高中自学编程和在长沙学习的时间,正式任职软件开发七年多。在这七年的时间里,从未荒废代码。程序员每天编码就像武者每天都要练功,拳不离手。只有不断重构才更容易一次性写出健壮的程序。
刚开始几年,接到一个外面项目。突发奇想写了一套基于注解的持久层自动映射的框架。支持各种数据库切换,自定义sql语句扩展。那时功能是勉强达到,但和当时熟悉的mybatis比起来差太远。我是一个有代码洁癖的人,于是推倒重构。后因项目周期比较紧,并没有去维护。直到再过一年多,发现开源中国有位程序员发布了一个类似的框架,功能几乎相同。那个时候心中感概万千,恨不得发布人是自己。再后来发现spring data也用了类似的方法。
无独有偶,几年前另外一个外部项目,管理平台使用了RBAC权限验证。当时写了一框架可以把权限控制精确到表格的某个字段是否可见。而且还自定义jstl标签用于jsp嵌入。后来也是发现早有shiro和spring security解决方案。比如shiro,它也有jstl标签,命名都很像。但shiro更强大,有域的概念,加入了缓存,还有基于注解配置。
最近在看spring boot2时,发现配置文件加载管理方式,和现在设计并做了一年多的项目,规则很相似。想到之前写的框架和一些工具类,觉得这些都是发展的必然。所谓的框架就是做同一件事久了,把它提炼出来,或用来加快开发效率,或用来约束编码提高团队编码合作。那些主流框架中的某些解决方案都是经过筛选后得出来的最优。当发现自己方案和spring boot2中用的一样,有一种英雄所见略同的感受。
那么,为什么写不出好的框架?我认为主要有几个原因:
1.对于同一个程序代码,提炼不够。就像做同一件事,熟能生巧。编码也一样,好的架构不是设计出来的,而是进化来的。
2.经验不够。越有经验考虑越全面,更容易发现一些潜在的问题和找到隐藏的更优方法。这需要在平时不断的积累。
3.缺少志同道合的同伴。一个人精力有限,写些小工具,小框架,解决小问题。要是想写像spring一套平台,没有同伴很难完成,即使作了也没人维护。这一点,要么开源,要么有公司出资。不过前提是你的框架已经足够优秀和有价值。
如是,以后该怎么做?
基于前三个例子,其实也是属于重覆造轮子。有句话说得好,虽然不用重覆造轮子,但至少知道轮子怎么造。对于第一件事,我不知道自己先想出来写出这个框架还是spring data早就实现了。但可以确定的是,之前写过类加载器等工具,那些开源早就已实现。因为我不知道是不是有这个轮子,所以自己造了。同样,这个结论也用在了第二件事。因为我在接触spring boot2时不知道它的配置是这样管理的。总之一句话,见识太少。
很多刚毕业喜欢技术的轻年会像我以前一样,所有都自己实现。其实最后发现自己做的并不是最好,或者说很简陋。然而时间却花了,没有产出价值。java之所有在编程语言中或企业中有现在的地位,和它有很多框架分不开的。对于企业来说,无论什么技术,能满足业务需求是最重要的。至于扩展性,伸缩性,这是做项目架构时需要考虑的。从架构的层面考虑好,一些细节产生的问题其实不会导致很大的错误。
我觉得自己现在最重要的是增大横向知识面,把已有的优秀资源整合起来形成一套解决方案。只有不断去做一个东西才能形成积累。或许最后它会成为我一个方向一项选择。
发表回复