和大学同学祥子聊天讨论到这几年对开发的体会的时候,他说:“我在用友的时候就是在框架的基础上把需求转换为代码,一没有学到业务,二没有学到技术!那是非常的抑郁!”.软件发展到今天,就是需要在框架的基础上大规模的复制API,把相关的需求转换为代码,让公司能够在最短的时间做出项目或者是一个新的产品。这样的操作对公司的好处是:1:分工细化,缺少了谁都行;2:可以大规模的利用外包来节约成本。一句话形容一下:提高开发效率,降低开发成本。但是对程序员来说,这样对个人的成长非常的不利。继续拿出几个问题来反思自己!
1:你在奉献智慧么?
书写代码的过程中,必然会涉及到N多的老代码的维护,有没有考虑去抽象公用方法,有没有考虑去改造包结构,有没有考虑一些代码上的重构,有没有考虑解决系统的性能瓶颈和可用性的问题?思考是必须的,只有在思考的过程中人才会成长起来。想办法去奉献智慧,人才可能慢慢的成长!
在项目组中,动手去解决问题要比说出自己的想法更加重要。因为在你考虑是否应该这样做的时候,别人很可能就走到了你的前面。所以,在提高软件可用性的前提下,任何的尝试都应该动手去实施,作为行动的巨人。(这个地方本人是吃亏不少,总是想着和系统架构师的想法保持一致了,有些情况下,系统架构师是错误的。)
2:看的知识是不是越来越底层?
在平时接触到不同的框架的时候,一般花上一天的时间看看架构图并且理解其中关键环节的配置调用就可以了。但是如果想提高自己的架构水平,还是不断的看别人的源代码,吸取别人思想的精华部分,然后自己在工作中去发挥智慧。Rod Johson写的spring框架也是在不断吸取别人思想的基础上逐渐的发展壮大起来的,在他大声疾呼“develop without EJB”的时候,这个人对EJB非常的熟悉,不信的话可以去看看《Expert One-on-One J2EE Development without EJB》看看前面几章的分析。其实EJB2.0是一个思想库,只是我现在还没有时间去研究这个。
cache对象的时候,有没有考虑到对象的clone,HashMap中的clone的方法是深clone还是浅clone,ArrayList和LinkedList呢?什么时候在创建ExectorService对象的时候使用newFixedThreadPool而不是newCachedThreadPool?java nio你知道多少?如果一开始我写了足够理解并发,积分计算和公共出发拉直的代码我会写成另外一个样子。那个为了改善性能的jobs我TMD也不会写一个quartz的job了。我只能现在慢慢的修改其中代码来提升系统的性能和程序的健壮性。我需要花大功夫研究java的基础知识。
3:和高手交流了么?
其实网上很多技术blog写的都很好,尤其那些持续更新的架构和技术的程序员们更是值得学习。找到他们,和他们讨论一个方面的技术。真正的高手都是谦虚的,讨教一些他们知道的东西,这些人会不遗余力的指导你,前提是他们不是很忙。
4:必杀技是?
行走江湖,怎么能没有看家本领,其实大部分程序员都没有。有人说自己精通java,但是我问一下他对concurrent包的了解情况的时候,却是一问三不知。如果是我写简历,我更乐意写:精通java 的并发编程和nio.其实其他方面也需要关注,但是谈到精通就差一点了。
如果未来和别人讨论技术的时候,我希望总是能够谈到一些让别人觉得成长的知识。
学习技术不怕慢就怕停,每天坚持编码,坚持总结,成为那个“焊火箭的民工”也是完全可能的!
本文来自:http://www.longtask.com/blog/?p=350