2013年个人工作与学习总结

时间:2022-08-12 03:30:37

一、问题的解决

    2013年下半年,我积累的一堆的问题来到JY软件继续我的程序员之路。问题来自于我之前经历的项目。经过下半年的工作与学习,差不多把上半年在脑子里积累的一些大问题解决的七七八八了。下面作一个简单的总结:

1、迭代式开发

    之前的公司做项目,由于公司性质,项目基本都是以瀑布+原型的方式进行,也就是说,几乎只有一轮。从软件工程的相关书中了解到的迭代式开发一直没有什么机会去实际的了解。来到JY软件最大的收获之一便是对迭式代的开发体验。这包括对SVN中使用项目分支的理解。

 

2、贫血模型的问题

    这个问题由来已久,三层架构的代码写多了就开始迷茫。虽然分了层,但方法套方法,本质还是面向过程。虽然有POVO,但实际上与值对象没多大区别,根本不面向对象。很多情况下,新需求一到,代码的变动经常牵连三层。那么多设计模式,面向对象的思想,项目中似乎很难用到。跨表的复杂查询到底该放在哪一个Service中,等等。这些问题在脑中转了很久,书上的概念也对不上,但想不通的太多。直到下半年逐步的了解到领域驱动设计(DDD)的一些思想。原来这一切都是贫血模型带来的。我们需要充血,需要把数据和行为融合到一起,形成真正的面向对象。我们的项目不应该是数据库驱动,更不应该是页面驱动。应该以业务逻辑为核心而构建代码。之前的积累一系列问题都迎刃而解。

    可以说对DDD学习是我个人在2013年最大的提升,没有之一。DDD还有很多概念需要去挖掘。

 

3、图表问题

    之前经历过两个项目,都有图表显示的需求。Java使用JFreeChart.Net使用微软提供的Chart控件。但都需要服务器生成图片,响应缓慢,个人觉得又丑又难用。若使用HTML5canvas,在IE中又不能兼容。本来想要学习Flash的图表,但绝大部分的Flash图表是收费的,而且学习Flash也需要时间成本。年中的时候,了解了一点ExtJs,其漂亮的图表是基于Raphaël.js库实现的。Raphaël.js是一个开源且免费的矢量绘图库,在支持HTML5的浏览器中使用SVG绘图,在不支持HTML5IE中使用VML绘图,所以保障了浏览器兼容,而且能实现非常漂亮复杂的图形与动画。简直是神器。于是花了大概一个礼拜时间学习,总结,写了些Demo。所以若以后的项目中若有图表显示的需求,Raphaël.js便能发挥威力了。

 

4、项目中的JavaScript

    之前在某个项目中,看见一个页面中写了一千多行Js代码,没有任何的封装。那样的代码丑陋不堪,简直没法维护。而JY软件的Js都是使用到了简单的模块化方法。之后顺着这个的方向,对Js面向对象和模块化做更深入的学习。

 

5Bug修改的问题

之前公司Bug是程序员自测的。没有比较靠谱的对Bug处理的流程。所以改起Bug来非常乱。JY软件的Bug处理流程与使用MantisBug进行管理,虽然比较普通,但对于我自身却是成长。

 

 

 

二、其他技术的学习

    以下对下半年所学的其他重要技术做一个简单的总结:

1、Java基础的更深入的学习

泛型:之前对Java中的泛型太忽视了,其实泛型有很多难点。

NIO2012年年底的时候,接触过网络通信方面的编程工作。那时由于对网络通信没什么概念,所以那个项目是使用的BIO的编程模型,那时知道这种编程模型,效率上很有问题。于是下定决心一定要把NIO搞定。

多线程框架:对Concurrent框架做了一个学习总结。项目中很少遇到多线程,但多线程编程确实非常难。

JavaFx 2.xJavaFx非常漂亮。可以以类似HTML/CSS的方式构建界面。比起SwingJavaFx靠谱太多了。最有趣的是JavaFx2中内置了一个Webkit组件。唯一不足的是无法实现弹出窗。所以实际工程中需要结合Swing,希望在Java8中,JavaFx可以更给力。

 

2、通信服务器:OpenFireApache Mina2

    对OpenFire的学习更多是在XMPP协议,包括使用Smack框架让客户端与Openfire服务器交互。

    Mina2的学习是对Java NIO学习的延续。由于NIO编程比较繁杂,Mina2通过封装NIO,提供事件机制,使异步非阻塞的通信变得容易。OpenFire的底层就是使用Mina2写的。幸运的是JY加密系统中,可以对Mina加以实践。

 

3、Web推送技术:CometBOSH

    Comet是学习Servlet3、多线程的源动力。在了解这种机制后,异常兴奋,简直太神奇了。通过一定时间的学习了解到长连接的形式进行服务器推送存在很多问题。之后了解到长轮询即BOSH,最初编写Demo是使用Servlet3实现服务器端的,在学习OpenFire对这种长轮询的方式增加了信心。

 

4、构建工具的学习:AntMaven

    JY的项目中使用了Ant,所以学习了下,很简单。收获是,认识到以前做项目确实过于依赖IDE了。

    学Maven是为了接触更多的开源项目。很多开源项目下载下来后,基本都看不懂,因为大多数开源项目都是用Maven构建的。Maven构建项目确实是有优势的。最明显的就是Maven存在有模块化的思想。目前只是知道怎么用Maven,如何搭建私服,还需要继续学习。

 

5Web标准

    table布局或者div+css的布局,都是对HTMLCSS的误解。下半年看了《编写高质量代码:Web前端开发修炼之道》原本繁杂的Web有了小清新的感觉。包括HTML语义化,CSS框架,Js/HTML/CSS解耦合。这些不能说是技术,但很重要,这是写出优秀前端代码的必要条件。

 

6JVM的学习

    参照《深入理解Java虚拟机》进行学习的。主要是针对JVM优化去看的。由于缺乏测试与实践,体会不是很深,学的不理想。需要有时间继续深入学习。

 

7Linux运维与系统架构

51CTO了解到的Linux培训。以网络视频的形式进行学习。报名费交的有点心疼,但课程丰富。对学习如何构建一个高性能网站和计算机原理非常有帮助。课程很长,目前还在学习中。

 

8、工作流引擎与搜索引擎的学习

l 工作流上半年初步学习了一下jbpm,但考虑到jbpm34已经没人维护了,所以下半年稍微折腾了一下Activity。大概了解是个什么东西,怎样简单的使用,但如何在项目中用好,就不知道了。

l 一个成熟的搜索引擎网站是极端复杂的,GoogleBaidu的技术更是不可想象。网络爬虫还没有仔细学习。对Lucene也只有初步的认识,距离实际的应用还差的很远。

    这两样东西的学习,在2013年进行的很失败。但这两个方向每一个拓展开来都是极其复杂的,而且不在实际项目中去使用这些东西也很难真正去理解这些技术。

 

9、其他

l 动态代理:简单的学习了Cglib

l JQuery:自己写了几个简单的UI插件。初步阅读了一下JQuery源码。

l Git:分布式的版本管理。有了一些了解与使用。

 

 

 

三、对目前JY软件项目的一些建议

以下建议可能有点站着说话不腰疼,但这确实我真实的想法,如有不妥的,还望宽容并给出纠正。

1、希望可以加强文档的建设

    来到公司,很多东西都是看代码和数据库连蒙带猜的去理解。对于一个新人,这太痛苦了。我觉得需要加强的主要是以下两点:

1)需求文档,一些概念性的东西,希望可以有一个标准的定义。而目前接触到的文档,更多的只是页面设计。

2)项目里的注释,特别是公用代码的注释,实在太少,很多情况下,我需要看实现代码才能知道某个方法是干什么用的。

 

2、如果有新的项目,希望可以使用市场较为流行优秀技术。

    比如我一直觉得Struts2实在及不上Spring MVC优秀。比如JavaEE的版本。又比如jQuery的版本,MySQL版本等等。

 

3、团队的工作氛围,希望可以活跃一点。

    JY软件的工作比我之前公司的工作要轻松很多,但工作却没有快乐多少,有时甚至会有点尴尬。半年时间不知道多少次,一天没说一句话。这阻碍了同事间的交流,也间接的降低了我工作的热情。我不知道这种气氛可以用什么方法解决,我只是提出各种问题,希望可以得到领导的重视。

 

4、Hibernate的使用

    目前项目中的Hibernate是最让人受不了的地方。项目中大部分实体类都是一张表一个类,字段映射到字段,没有建立one-to-many之类的静态关系。对象与对象的关系仅仅是靠所谓的数据库文档维护着。这样使用Hibernate顶多算是表模块,并没有做到ORMHQLCriteria也发挥不出威力,而封装的SearchBean也远远不如Hibernate离线查询灵活。在涉及一些多表查询的情况下,还是需要借助SQL完成,但是SQL就失去了Hibernate跨数据库的特性。

    我觉得对于企业级应用,速度的要求不是特别严苛,使用OpenSessionInView是非常不错的选择。另外延迟查询是Hibernate非常好的特性,我觉得完全可以使用。最后不明白为何项目中没有使用二级缓存。

    Hibernate确实比较难用,由于Hibernate的使用方式是框架搭建初期就决定了的,所以有些可能已经无法改变了。但我坚持我的观点,速度不是Hibernate的优势,优雅的架构,易维护的代码才是Hibernate最犀利的特性。

 

 

 

四、我在工作中的问题

1、牙齿的问题

    由于年底牙疼,所以请了好几次假去医院补牙,非常麻烦。占用了工作时间。

 

2、迟到的问题

    由于天气越来越冷。电瓶车越开越慢。总会比预定的时间差点。但说到底还是在睡觉与起床的问题上不够坚决。这个问题在2014年一定最优先的改正掉。

 

 

 

五、2014上半年的初步计划

1、认真的完成JY加密系统服务器端的开发。

22013年下半年的学习到的技术多而杂,部分掌握的还非常肤浅,距离“熟悉”还有非常远的距离。所以不断的复习与实践是必须的。

3、加深JavaScript等前端只是的学习。包括学习一些新技术如Node.jsBootstrap等。

4Linux运维方面的知识继续学习。其中包括加深MySQL的学习。

5、学习MangoDB

6、复习PythonPython有些东西确实是忘的差不多了。

 

    总的来说,在2013下半年在JY软件的工作与学习收获非常大,2014年继续前行。

 

 

 

------------------------------------------------------------------------------------------------------------------------------------------------------------

以上总结是公司要求写的,需要上交的。基本反应出了我的学习状况和我对现公司的一些看法。下面补偿一些:

    工作流引擎与搜索引擎可以先放一下,毕竟比较难。

    Linux那块必须加快速度了。

    JVM必须继续加强。