如果项目中有很多垃圾,而你有代码洁癖,如何树立充满正能量的世界观

在睡前上传文件的空当,我想谈一下如何面对题目中所提到的这个问题。在项目中,如果你有代码洁癖,常常,你会花费过多的时间去整理,而最终在开发进度和成果上受到牵累,你在老板面前很为难的赶出来一些重要的功能,但是因为洁癖症,浪费了很多时间。那么,如何树立正确是世界观,不让“你的内心是崩溃的”呢?

首先,我们看下一般有代码洁癖的人,在看到哪些情况时会有抓狂的感觉。

  1. 目录结构混乱
  2. 命名混乱
  3. 风格混乱,例如换行、缩进等
  4. 接口混乱,导致调试的时候根本找不到要改哪里
  5. 垃圾代码,不知道这段代码到底有没有用

有一段时间,我特别喜欢把大括号换行来写,例如:

if (...)
{
    // ..
}

也不知道哪里来的劲,我硬生生花了一个下午把整个模块中的{}都处理了一遍。现在想来,真是有种傻得可爱的感觉。

有的时候,看到代码中的一些状况,会非常抓狂,会反复的跟自己确认“尼玛这都是啥!!”。有这种感觉的时候,要么你接手项目,开始看别人的代码,要么是你回头看自己以前写的代码,而当你内心几近崩溃的时候,你脑海中闪现的念头一定是:重构吧!

重构代码说的好听,叫“重新用比较好的代码代替原来的代码”,说的不好听,就是“这他妈都是啥,还不如老子重写一遍”。

但是,如果你真的遇到这样的情况,请一定要先让自己去狂奔20公里,把自己累趴下失去冲动的时候,再来思考一下:你真的需要重构吗?

我曾经读过一篇文章,标题大概是“怎样写出让别人无法维护的代码”,文章中指出,最高境界,就是连自己都无法维护自己的代码……其实“写出让别人无法维护的代码”这种思维方式并不坏,它是一种从他人出发的思维方式,只不过不是从“用户体验”的角度出发,想法是为对方创造BUG的角度出发,按照这种思维去写代码的时候,必须找到能够让对方程序员无法理解(但同时又能正常运行)的代码,这就要求写代码的人对代码逻辑、语法、框架、算法有比较高的造诣,才能反过来创造别人无法轻易理解的但同时能正常运行的代码。也就是说,这种bug是一种有逼格的bug。

当你遇到这样的高手的时候,你是应该抓狂呢?还是应该抓狂呢?还是应该抓狂呢?说实话,你真的不可能从他的代码中学不到太多东西。

但是,天下代码,万变不离其宗。只要你发挥自己的水平,总能解决自己水平能解决的问题,超出你水平的问题,那得等。

我上面所列出的5种代码混乱的情况,其实说到底,要么是这些代码超出了你的习惯范围,要么是你确实不知道写代码的重点在哪里。

首先来说说习惯问题。

我们学习写代码都有一个过程,就像我们人生成长过程中一样,如果你是一个安静腼腆的人,你就是无法习惯那种放浪不羁花前月下的社交,如果你是一个习惯了品质生活的人,自然无法习惯粗矿低俗的生活方式,这是再正常不过了。你无法习惯别人写代码的习惯,就像别人无法习惯你的一样。

但是这里面有一个问题,如果你知道这个代码是一个大神写的,你一定不会那么轻易发狂,你可能会专研一下,大神为什么要写这么烂的代码?莫非这里面有什么玄机?莫非我的境界太低,领悟不到?

有的时候,事实是你确实还没到一个水平,写代码无法像大神那么自由,不受上述混乱的垃圾的干扰,而更多的时候就是,你想多了。

一个人喜欢想多是很正常的,因为人们心里总会去比较哪一家的更好,当你认为怎么样书写代码更好更精致的时候,就会觉得不这样写的代码比较烂。

比如,如果你觉得Codeigniter的代码风格好,那么必然会觉得laravel的写法乱,如果你习惯了将javascript合并后载入,那么使用seajs之后,就会问这他妈都是什么鬼!

情况总是这样,因为你以往的代码经验告诉你,那样写会让你的代码看起来舒服。但实际上,我们必须谈到第二个问题。

写代码真正的重点在哪里?

写代码真正的重点莫非是在让代码风格看起来很漂亮?或者目录逻辑结果让人点赞?或者代码算法精妙?或者没有任何多余的文件,每个变量名一看就知道意义,甚至注释每行都要有?

统统都不是,写代码,实际上是一个工程学问题,所以程序员后面被成为工程师,比如PHP开发工程师、安卓开发工程师。工程学的概念是什么?是要建立一套稳定高效的系统,实现既定的盈利目标。

写代码,是要在最短的时间,最完美的解决问题,从而为公司的目标服务。所以当我们看laravel的vendor目录下的各个库,各种.gitignore文件都还在,目录直接从github上download下来。但这有什么关系,对于laravel而言,一旦依赖这些库,就可以完成既定目标,自己只需要写一些其实并不重要的代码,就可以实现想要的功能。

我工作半年多,得到的最大感悟就是:如果一个程序员,连第三方库都不会用,那么说明他还在最低的层次写代码。

说到这里,有人会问,如果功能都靠第三方实现,自己就是用过来,那还有什么意思?怪不得别人叫”码农“,就是因为这种搬来搬去的搬砖啊,创新都在哪里?

我想说的是,如果你愿意这么耗下去,那随你吧。

我相信,只有当有一天,你确实找不到某个库帮你完成一些特定功能的时候,你会主动去开发,并且开源出来给别人用。

2016-02-21