“朋友,你还会修电脑啊?”这是小史在朋友中听到过的最多的一句话。每当听到这句话时,他也很无奈。难道程序猿就一定要会修电脑嘛?但是没办法,在朋友眼中,编程是一个很高深的工作。可能动动手指,哪边就会出什么事,生活十分精彩。嗯,电影看多了。作为一名不会修电脑但努力想学习修电脑的程序猿来说,除了修电脑的技能,也还要具备大部分其他程序猿共有的特质。比如:宅、闷。可能也具备独有的特质,喜欢陪老婆逛街。。。

挨踢部落故事汇(18):程序猿与代码的基情_第1张图片

小史·Java开发

严肃的简单介绍下本期主人公小史童鞋,从事Java后台开发工作已经三年有余,目前服务于一家创业公司做驻场开发。期间经历过kafka,大数据等领域的开发。作为程序猿,大家应该每天都在和26个字母做着你死我活的斗争,对于编程应该也都有自己独到的见解。借着这个机会,小史抛个砖头,粗浅的和大家聊聊关于代码的一些事。

一、对复制/粘贴说NO

小史看过一篇文章《程序员的进步从每一天少写一点代码开始》里面提到说Google与网络的帮助可以让你写出一行又一行的代码。这句话不禁让小史想起大学实习,面试工作时候,测试主管对他说的一句话:“写代码没什么难的,不就是复制、粘贴嘛”。当听到这句话的时候,他的脑海中不禁又浮现出了同学对他说的话:“我现在在公司里整天干的活就是复制、粘贴”。当时小史不经意间产生一种疑问,难道程序猿的工作这么简单和枯燥嘛?带着这个疑问,他踏入了程序开发的大军中。

小史参加工作的第一天,他的领导就反复强调一句话:“写代码不要复制、粘贴”。这对于刚参加工作的他不是太能理解这句话的含义。当时,他一心就是为了工作效率,工作赶紧完成,让领导知道自己的能力。这就导致了功能代码的命名、结构差劲,后来返工反而浪费了更多的时间。现在他回头想想,当时的行为是多么的幼稚,如果只是复制粘贴,并没有尝试了解背后的运作机制,充其量代表了工作完成而已。

二、码农的追求——高品质代码

“你的代码像一坨翔”。相信这句话大家或多或少的在平时工作中都有听过。曾经在网络上看见过一个帖子是这样说的:“相信很多人都认为自己的代码是最棒的,别人的代码都是很糟糕的,因为看不懂”。毕竟程序猿都有一颗工程师的心,所以当他们到新的场地想做的第一件事就是,将旧的一切推倒重来。是的,他们决不会满足于简单的增量劳动。或许这种微妙的心理定位可以解释:为什么程序猿进入新项目组后宁愿丢掉旧代码重新写,也不愿意修修补补。他们认为旧代码简直一团糟。

好的代码,就像是好的笑话,无须解释就能让人轻易明白;坏的代码,就像是古文言,即使写满了注解,也不一定能轻易看懂;好的代码,就像是一本写作技巧高超的人所写的书,它容易理解、分章明确;坏的代码,就像是刚刚学会写字的人所写的书,它错乱复杂,自我推翻。

那么,如何写出一段好代码呢?小史曾经看过一篇文章,觉得解释的很好,它是这样说的:

  • 可读性——你所写出的代码,不仅你自己要明白,你身边合作的开发者也要能在最短的时间内看懂。(这个尤其要注意)

  • 可维护性——让你的代码在修改的时候很简单。

  • 简洁性——不要让你的代码看上去毫无必要的复杂。

  • 效率性——尽可能的让你的代码获得最快的运行速度。

  • 明确性——类的命令、方法的命名要清楚的表达出具体动作的含义。

三、代码优化很有必要

代码优化,一个很重要的课题。可能有些人觉得没用,一些细小的地方有什么好修改的,改与不改对于代码的运行效率有什么影响呢?关于这个问题,小史有深刻的体会。举个例子,之前他写过一个功能用到redis的排序。本着有轮子不造轮子原则,毅然决然的使用了redis提供的排序方法。写完之后,他还挺高兴的,对redis的学习又深了一点。然而,事与愿违,当代码放到生产环境上运行出来的结果直接把他干懵逼了,在大规模的数据洗礼下,完全跑不动。那晚,小史一行一行打着日志,分析慢的原因,最后定位到了redis的排序上(具体代码细节不作阐述),然后写了一个算法代替了redis排序。

关于代码优化,小史做了很多笔记,如:

1、尽量指定类的final修饰符带有final修饰符的类是不可派生的。

2、尽量重用对象。特别是String 对象的使用中,出现字符串连接情况时应用StringBuffer 代替。

3、尽量使用局部变量,调用方法时传递的参数以及在调用中创建的临时变量都保存在栈(Stack)中,速度较快。其他变量,如静态变量、实例变量等,都在堆(Heap)中创建,速度较慢。另外,依赖于具体的编译器/JVM,局部变量还可能得到进一步优化。

4、在Java+ ORACLE 的应用系统开发中,Java中内嵌的SQL语句尽量使用大写的形式,以减轻ORACLE解析器的解析负担。

5、尽量减少对变量的重复计算
例如:for(int i = 0;i < list.size; i ++) {
             …
}
应替换为:
for(int i = 0,int len = list.size();i < len; i ++) {
             …
}

6、尽量采用lazy loading的策略,即在需要的时候才开始创建。
     例如:     String str = “aaa”;
             if(i == 1) {
                 list.add(str);
}
应替换为:
             if(i == 1) {
String str = “aaa”;
                 list.add(str);
}

等等……

四、书籍很重要

Web行业知识更新特别快,今天一个框架的新版本,明天又是另一个新框架,有时往往根据项目的需要来不断学习新东西。所以,我们大家在平时闲暇的时候不妨多看两本好书,如果实在没时间看的话,也建议大家去找一些看过这本书的大牛写的博客。因为,这上面可能就是整本书的精华所在。

以上观点来自51CTO社群核心开发者小史的个人见解,欢迎加群(群号312724475)共同交流学习~