`
herman_liu76
  • 浏览: 99621 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

代码快看哭了-吐槽与感悟汇总

阅读更多
技术感悟汇总:
1.一直做项目,重点关注在用户需求变化上,而技术要求是稳定可靠,不在技术上花时间,所以导致技术进步比较慢,当然考虑需求上更全面,更高效。

2.想起分析过的源码,使用其它人的产品时,目前发现三种典型方式。
一种是简单包装,比如我看到的一些log4j的包装。
另外是深入到每个引用层次,比如看到过一个上传监控,为了在底层的写入中做额外记录,继承了一下,结果上面每一层引用都继承了一遍。
还有一种,本来只有一个其它产品对象,使用时变成多个。比如dubbo中使用netty时,为了使用各种传输工具,抽象了channel等上层,使用时还是同一个netty对象,由于实现不同的接口,同一对象分饰不同的角色。

3.网上查到的资料,很少有说明意图的。比如介绍红黑树,一上来就标准的红黑树是什么,要求是什么,却很少有介绍设计红黑树的人是怎么想到这里的。比如为什么有2-3树,要想平衡,不是从树根向叶子出发,而是叶子不断向上拱树根的过程。2-3树的3就是预备分裂的,这有点象从基层选总统,这样总是比较平衡的。
又比如图中最短距离算法,没有去猜测作者是怎么想出来的。也许是想到,我和习CORE最近距离怎么算,亲疏远近就是权重?从我直接认识的人开始找,先是我所有认识的,从最亲的人开始,也许有一天我同学认识了CORE,那我这条线就是最近的。也许就是从直观的感悟去悟到这样的算法吧。

4.最近看andriod的ui线程,是单线程消息触发处理事件的方式。貌似与nio的单线程处理各注册事件的方式是一样的么,与node.js也是一样的么。那么现在有两种处理多请求的方式,一种多线程;一种单线程,循环处理事件,但是不是空循环,而是没有事件就阻塞,耗时的事件才另开线程去处理,处理好又是一个新事件。



-------------------------------开始 吐槽 了 --------------------------------------------------
   技术还可以的中级开发人员陆续都走了,留下的与新招的,太多的人虽然比较努力,也有良好的工作态度,但...技术水平比较差,有时看代码看的我要哭了


接手一个烂摊子
   不是第一次了,昨天接手了某系统的烂摊子,之前做的人完全没有能力从事一个系统的开发,不停止的delay,结果交给我,并要的很急。

   今天晚上加班中,看看左边的同事和另一同事讨论,一个复杂的统计报表不知道从何下手,弄了复杂的hashmap从后台传过来,我说可以一句复杂的SQL就搞定了,写了部分示例给他。右边同事碰到一个js脚本问题,我先是让命令规范,后脚本前置,马上解决了问题。我知道没有人指导,一个简单的东西都会做的超乎想象的复杂,乱,以及不灵活,后期更是带来不断的修改,或者重写。

   我负责技术的项目组里,一般我来确定所有需求的方案与路线。恰好有个需求没经过我,这是一个主页面嵌套不同子页面的提交功能,要补充校验,原来简单的easyui校验。应该是子页面写子页面的校验,主页面写公共的。同事一是不知道研究easyui复杂校验,二是不知道父子页面的分工,都用原始js方式写公共页面,结果乱啊。要求的时间根本完不成。后来我找来三个同事一起讨论,让他们说说思路,另一个说他会分开写,但不知道用easui自定义校验,只会用js降维开发(js / jquery/ easyui)。实际上只要在公共页面写几个自定义的(先攻关,完善的工具应该有,简单BAIDU就知道,就怕想不到),子页面简单一写,没多少代码就完成了,又整洁又快,又好修改。唉,每个人的思路都不一样,跟不上怎么办呢?

想来已经见识太多的开发问题了
   还安排他处理这个框架页面中的其他修改,让开工前一定多想想,有a,后来也想不出来,我只好告诉他:可能主页面用一句话就搞定了,不用10几个页面分别去写。遇到某种重复的时候就是需要动脑筋查资料的时候,也是最能提高水平的时候。

   同样上周需要处理excel的复杂的数据,我直接ctrl+c贴到文本里,简单读写就处理好了 ctrl+v贴回excel,绕过不太熟悉的,并且非核心的poi部分,很快就搞定要的内容了。

   同样是处理excel,需要非常复杂的拼接,合并。经理安排同事手工在弄,我也处理一部分。后来看他们弄的那么晚那么累,我仔细全面研究了一下,发现还不如我写代码来处理呢。并不需要一次就加工到位,可以让软件解决最重复,最耗时的那部分工作。

   以前有一个复杂的表格页面,我安排一个同事,结果上午到了下午都没弄好,我一看在研究复杂层次的rowspan、colspan,后来我说你大表格套小表格循环,结果半小时就好了。

   有安排一个同事开发页面,结果明明可以写一个页面的,只是参数不同,非要写两个页面。
   有安排一个同事接手我的项目,要求字典统一管理,结果偏偏另建一张表,冗余乱用。
   有接手一个烂项目,领导名字都写死在代码中。
   一个很多页面用到的统计表头,不知道写在公共的页面中。
   一个很多页面用到的下拉选择,不知道写在统一的字典中。
   前面一个人已经使用了枚举类型,可以新增加每个枚举类属性的时候,却写在其它地方,或者不知道去用枚举类。
   不知道可以通过反射循环来取需要的数据,而是全部一个个手写出来。或者已经有的工具不知道去用,可能另写一个。
   不知道action层与service层的区别,把request对象当参数传到service层。一问是参考其它地方的代码,为什么不知道。
   不能理解复杂的权限系统设计,不知道都是由最基本是就是什么人可不可以做什么事,然后人之上会有群组,事情之上会有角色,再之上更多的分类组合而已。
   不知道ACCOUNT,ID,NAME产生的原因与作用,分不清乱用。不会想到自己用的功能应该是全局的,也许其它地方已经有了,是不是找一找或者问一问。
   不理解命名规范的好处,中文首字母,保留字,简单拼音什么都有。
   有的宁可做重复的工作,也不愿意查点资料写点代码来,即使我提供了方向,并愿意支持。
   如果是每行有几乎重复的内容,我会每间隔5个空一行,或者按分类中间空一行。无论查找或者计数都一目了然。有点象写“正”字的感觉,而不会一直写“一”。
  
   前台与后台的人调试代码不通,我来查找原因,发现ID参数的问题,到底谁应该处理呢?我打开已经写好的系统管理代码给他们看,他们自然明白由谁来处理,风格必须一至。
   技术好点的写了工具,不知道放在公共的地方并通知大家或者汇报上来。

   一个复杂的统计报表头,可能会发生变化,或者就是动态的,不想到去做嵌套表格,而是去弄复杂的跨行跨列。
 
   不知道名称规范的好处,从数据库向上都可以自动生成,统计的字段名称如果有数字,可以方便的循环,反射。代码非常精简。及时是复杂的表头,用在好几个地方,也不知道做成公共的,有点改动则到处改。

    写的数据库查询,只知道设计一些明显的字段,一些隐含的类型就不知道了,最后关联数据时,不断用各种like来查询统计,速度可想而知。有些其它部门导入的数据的PK出现了空格,不知道去指导督促完善,而把系统中所有的关联查询的等号字段都加了trim。

   稍微复杂点的权限角色就搞不清楚了,和什么只读,读写混在一起。不能忘记什么人user可以做什么事operate是最基本的控制,其上对人进行组合,从而有了群组概念;其上对事进行组合,有了角色概念。当然也可以把事按只读、读写进行分组,从而进行另一层控制。

   之前有一个老系统,上面希望完全整合到新系统中来。这个事情从用户来说没要求,从我们来说额外工作,于人于已都没有明显的好处,除非给钱给时间。虽然这个老系统技术不一样,但基本上代码还可以。不象有的系统太差,必须重构的。我建议还是先不整合,系统间用远程调用。现在过了半年多老系统有些功能开销上去了,又需要把其中与业务操作无关的定时任何剥离出来,以减轻应用服务器压力。呵呵~

   多数人不能主动的思考问题,比如修改一个页面,稍微美化一点,比如:间距。结果就只知道调整间距,明显的按钮都不一样也不会主动统一一下。出现一点点水平滚动条也不知道避免一下。都要一小步的推着走。

   这样的事情,也许页面上看都可以操作下去,似乎功能都做好了,可以遗留的问题太多太多了...

努力从源头进行控制
   目前我负责技术的项目,几乎所有的需求都是经过我,我会与同事仔细讨论如何做,否则不放心。而多数经理技术不熟,只是分任务定时间,是不是灵活,是不是乱完全不看。之后我再按不同人的能力,放心让水平高一个人做模块。或者我带着水平中等的和我一起做,我解决难点,他处理简单的。或者让水平最低的一个人做最简单的体力开发,甚至写示例。

   最好的是我全面把关所有的需求,做难点,做攻关,用我的技术经验可以把总体效率提高很多,去解决别人卡住的工作。我负责的项目组基本部分实现了我的想法。

   但是,现在客户要求我回来,一边又做我之前负责的项目,但我现在是被安排开发工作,这边完全是按难度各自分工,我做有有难度的系统,还有更多的体力开发;
   但其它同事的系统有写的乱的,效率低下的,半天卡住的,没有能力硬安排的都不考虑,结果总体效率低下,最后个别烂摊子还要我处理。却不能从源头上控制好项目,而我如果减少体力开发,去指点他们几下,会节省他们至少30%的开发时间,还不留后患,但我没那个精力了...
    这样的事情越多越悲哀,人的精力时间感觉用不到点子上,浪费时间与生命...





分析下原因

1.一方面项目经理,能力体现在沟通与协调上,但控制质量方面就不够了。
    由于不做技术,交流协调方面是强项,但与客户沟通具体需求也不一定做的好,可能会问的没问,细化的没问,应该引导用户的地方没有引导,也许换总方式用户认可我们也方便的没有问。造成反复沟通,如果具体做的人没有经验就会被牵着鼻子走,反复改需求,开发人员也会崩溃。

2.在安排工作上,由于对个人能力也没有足够的认识,划块水平分工,技术感觉好的做难的,技术差的做简单的,实际上简单只是能够实现,隐患多我。能力不足的就加压力,或者不行走人,最后烂摊子。或者人家已经在辛苦加班了,能力不足要求的薪水也低,也还是烂摊子。

3.在时间安排上,大概估计个时间,不会讲解细节怎么做,至于代码质量,后期隐患谁都不清楚。演示OK就行了,出了问题再要求派高手来解决烂摊子。


作为技术负责,手上项目模块太多了,有的人又没办法使用
    以前我喜欢单干,最多找别人做些简单的重复工作。现在手上系统太多了,而且没年轻人精力好,要学会挖掘他们的潜力。现在尝试了一阵新方式:

1.所有的需求我来把握,分出需求大致分析出怎么做。可能是无技术难度的,有个别难点的,需要查资料的来确定的。

2.根据难度与平时检查代码,明确知道各人的能力。之后找相关的开发人员,如果是值得学习的地方,会找所有的人员一起。
    先是讲需求,并问打算怎么做,是不是思路与我一致,让大家都一起想想。最后明确到细节,比如这个统计要求一个sql,要求用公共的调用,这个分类写在那个字典中,名字怎么取。大概做几个页面,要参考那些页面。如果是数据库,一般我来建。
    难点我会指出,也许我安排花一小时,共同查资料后再确定下一步。
    有的需求,我把见过的解决方案告诉他们,先听听他们如何选择,再告诉我怎么选择。

3.我确认能力好的就放心交给模块做,适当关心下进度和效果就行。难度最大的我和另一个精力强的做,比如复杂的递归算法我来写,页面总体逻辑我写一半,其它交给他,我不时和他交流具体处理。还有技术差的就做导入导出,数据处理等工作。

4.任何半小时以上卡住的问题都找我处理。可能会走弯路的地方有时先让开发人员自己试,动动脑,过一会我再查看。

5.基础框架都有我来处理,放心的人员也要告诉我具体的处理,我要心中有数。

    尽量让一个项目和我一个人做的差的不多,即使我没有精力,也要划好格子,尽量不能有出格的代码。
    如果有可能,我真想组织一个代码展览...把这么多奇葩的东西挂出来。如果我有时候充分的控制项目前期与技术难点方案,估计很多烂项目,我可以其减少40%的工作量。
0
0
分享到:
评论
2 楼 herman_liu76 2017-04-10  
ZHENFENGSHISAN 写道
太累了啊,哥


唉~ 我也觉得很累,真是命啊!有的人工作累的要死,有的人玩游戏忙的要死。
1 楼 ZHENFENGSHISAN 2017-04-10  
太累了啊,哥

相关推荐

Global site tag (gtag.js) - Google Analytics