欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

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

程序员文章站 2022-06-24 17:46:17
...
技术感悟汇总:
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%的工作量。
相关标签: 工作