已经工作了很长时间,一直也没有说一下这个“关于程序员坚守的思考”的问题,这个问题不是针对现在的公司,只是我这么长时间来工作的一些心得,特别是关于做为一个程序员一些心得。
在产品开发过程中,肯定是会有不同的人承担不同的职责并在团队中做自己相应的任务,每个人的目的都不同,比如产品的目的是要尽快的发布产品,而程序员的目的是要写出高质量的代码等等。实际上,写出高质量的代码并不是一件很难的事情,随着经验的增长和阅历的丰富,高质量的代码并不是一个难以攀爬的高峰,但是为什么产品会出现越来越慢或者越来越差的局面呢,我觉得这是有几个因素造成的。
首先是程序员的能力,虽然我们这个地方主要不会探讨程序员的能力。因为我们首先将程序员当成是有责任心,能力可佳的人,至少这样的人不在少数,如果说程序员不能在相应的时间里(并不是开会所说的时间)完成相应难度的任务,那么这个程序员本身就是不可靠的,那剩下的就没有讨论的意义。所以在讨论之前,我们都至少能够相信程序员是可以靠的住的(虽然代码性能和优化上不会太完美)。
当程序员这一方面没有问题之后,又是什么导致产品出现走下坡路的局面呢?我个人认为是沟通和计划,一个好的产品一定要有一个好的计划,并不能只局限于(或者说着重于)所谓的“快速发布”和“敏捷开发”,如果在整个团队中,使用了错误的“敏捷开发”并以“快速发布”作为指导的话,那么这个产品肯定会有局限性,因为速度和质量并不能完全的达到一致。
很简单,一个程序员可以一周时间开发一个产品,但是不代表这个产品就能够发布或者上线,因为无论是多么好的程序员,总会犯一些这样那样的错误,甚至还会有手抖的情况(比如多打了一个i或者之类的),那么就要花时间去修复和优化,但是产品人员和一些运营的人员可能不会理解,因为从他们的呈现的结果来看,他们的测试只是针对部分的功能进行测试,比如点了之后能不能用,能不能正确的安装,能不能跨平台等,所以他们的思考方式是从一个外在的而不是内在的因素去考虑,而程序员可能更多的是在扩展性,可持续性和维护性去考虑的。所以产品可能会觉得这个东西可以马上发布(甚至今天下午就能发布,只是有一些很小很小很小的问题),甚至认为做完一个产品就等于做好一个产品,这是非常不正确的。但是对于程序这边,一个小问题可能会有很多改动,甚至会造成重构等。所以,肯定是会有冲突的。
那么出了这种问题(而这种问题是会经常出现的,并不是一个团队存在的,可以说是几乎所有的团队都有这样的情况),一般如何解决呢。我觉得国内的一些公司主要是这样去解决的,因为产品的时间是一定的,几乎可以说是不能变的,那么就要从程序上改变,于是快速更改和hot fix就来的特别的多,那么这样几乎无法保证程序的质量,那么在后期的维护中,这个程序将会是一个重大的隐患,很可能在某一天就忽然爆发,然后危害整个产品,这样不仅危害到整个公司,整个团队,产品部门,甚至危害到程序员本身(和生存),于是就有了程序员的坚持问题。
这个时候,我认为程序员是应该坚持自己的一些“职业操守”的,也是我想说的一个关于程序员坚守的思考。程序员首先应该做的是考虑这款产品的持久性,如果自己还想在这里混下去,还想有更多的空间提高,那么就需要坚持这个职业操守,因为只有坚持了职业操守,那么产品的看不见的部分就能够更有持续性,维护性,提高整个团队的维护性能,也就间接的节约了成本,从而发挥了一个“好的”程序员的价值,也让自己的生存更具有持续性。
当然,这么说是很容易的,做起来很难,因为毕竟产品这一边肯定是有一个固定的计划的,就像我原来开发一些浏览器插件一样,况且每个人的想法也不同,比如要业绩,写Daily report的时候需要写一些东西才行,那么就需要逼着一些相关人员完成相关工作,这个时候很容易出现讨论(甚至争论)的情形,如果这个时候妥协进而放弃代码上的职业操守,那么很容易就会出现产品走下坡路和失败的情况,当然,如果不遵守,甚至可能出现争吵,团队内讧等情况,这样对项目更不好。
所以,在一定条件的允许下(例如公司氛围,团队氛围和公司的导向),如果公司愿意花更多的时间在产品质量上,而不是在产品速度上,那么程序员可以在一定程度上进行团队内部的讨论,然后和产品以及上级进行讨论,规划;如果公司更愿意执行“快速发布”,那么虽然这不是你我所想看到的,但是也只能执行,也就是说在这种公司去说程序员的职业操守是非常无聊的,简直就等于说废话,所以如果这样,那么没办法,该怎么做就怎么做(这样就会导致程序员想:反正也不是我的代码。导致质量下降),干活完了回家。
不过,相比之下,我更觉得程序员是有责任和义务对项目负责的,也就是说,无论公司的性质和氛围如何,好的程序员都应该提出自己的想法然后尽量的去实践,去说服其他相关人员,这样不仅能够让自己学到东西,也能够提高产品质量,这是大家都愿意看到的。
在实际工作中,我也经常遇到这样的问题,很多时候我选择了妥协,即妥协于产品和时间,虽然很多时候这个时间规划并不是很正确。妥协的直接结果就是我放弃了代码的复用和拆分,性能上的优化的考虑和性能上的测试,现在想想是非常不正确的,虽然某一个角度来说完成一个还不错的任务(及时发布),但是真正做的好不好和以后会不会有问题,只有我自己知道。也随着时间的增长和负责的项目越来越多,越来越大,我也更加深切的体会到“职业操守”对程序员来说是多么的重要。
所以,无论在任何项目,任何产品的开发或者是迭代过程中,都应该找到一个最好的切入点和切入方式,在一定的程度上尽量的保证程序员的职业操守的执行和坚持,是对于程序员来说最难实现,但是是最重要的。当然,一开始的计划和讨论也是非常必要的,虽然这不是我们讨论的范围(我们只讨论出现了这种情况下,程序员应该如何去做),而且也没有一个人,一个团队能够完整的规划好项目时间,说到哪一天就一定能发布。虽然,这种事情经常发生,也没有一个很好的解决方案,但是我希望自己以后能够在这方面多做努力,也希望这个行业的同行们多做努力,改善现在这样的整体环境和行业规范。让产品能够在一个良性的循环中逐渐成长。
多数情况还是很少有前期计划好后(我是说周前,基本的小问题都考虑一遍)去做产品的,产品跟公司的利润成正比,公司希望快些赚钱(占多数)所以强制执行(管理者:“先别说那么多先做出来你们再改…”做出来以后管理者又说:“哇靠这地方不应该这样,”程序员回去一看这功能基本就是整个程序的命门硬着头皮重新写…)。
很长的文字。
这是一个好的程序员的必要条件。
沟通很重要,通常是这个能省大部分时间。
从长远角度来看,写高质量的代码更省时间,更易二次开发和维护。
@stmadman
你说的我同意,但是想知道作为一个程序员,遇到这种情况应该如何去抉择,是按部就班的做还是讨论并坚守职业操守。
@dlfen
一不小心就写了很长,虽然从程序员的角度来看写高质量的代码是很重要的,可是公司和产品不一定这么认为。
喜欢这个行业,那就用心做,相信会有应有的汇报的吧!
目前处在两难中,做程序员,还是做其他
再怎么说,还是喜欢编程,哎!
一个团队,还是重在沟通,写程序的人一般都不善于开口,都自己埋头做自己的事,这样也不利于个人发展
一个团队要有统一的目标,技术老大要有很强的沟通和解决问题的能力。责任心是灰常重要的。
看来我还不是一名合格的程序。