Zilk1988年14岁开始编程,此后尝试过多种职业,最终在1997年决定成为一名职业程序员(又称码农),如今39岁的他依然无怨无悔他的选择。但后来他发现了一个问题,经验越多,完成项目或任务的时间就越长。他犹豫不决,因为他见过太多可能出问题的情况。举个例子,假设当他刚刚想到要写一段写文件的代码时,他已经开始担心下面一系列的问题:权限、锁、并发、原子操作、走弯路/框架、不同的文件系统,目录中文件的数量,可预测的临时文件名,PRNG(PseudoRandomNumberGenerator)的随机性质量是否足够,运行中断电怎么办,写API怎么看,怎么写文件等等等。总之,他的问题从“怎么做”变成了“怎么做***/最安全”。结果是他做的版本坚如磐石,但这也导致他比菜鸟完成项目的时间更长。齐尔克说,他自己精通算法,热爱数学,喜欢复杂的项目,专注没有问题。可能是经验有问题(尽管已经39岁了),导致害怕犯错导致项目耗时。于是他邀请了StackExchange上的同行帮他解决这个问题。以下是一些解决方案:Telastyn:您完成项目的速度并不慢。您认为您的菜鸟项目已经完成,但实际上并没有。你应该向客户推销质量。“公司可以做得更快,成本更低,但项目真的完成了吗?还是你愿意花数年时间寻找错误?”另外,您应该了解并接受这句老话:“***是好敌人”。sevenseacat:“好,快,保存只能三选二”。以前你因为知道的少而牺牲“好”,现在你因为知道的多而牺牲“快”。mouviciel:看来你的经验确实不足:)。经验教训:按照要求去做就行了,别想别的。这样就不会实现不必要的功能。Satish:应该考虑敏捷方法而不是瀑布方法。先交付并迭代交付。此举有助于降低风险和成本。DXM:好像你加入了黑暗面:管理时间。我并不是建议您放弃编程并成为一名经理。但是从你的描述来看,你的经历仅限于技术层面。写一个文件这么简单的事情你都能想到10个问题,这对于不成熟的开发者来说是绝对做不到的。这不是坏事,但是...黑暗面的一切都与现值有关。它需要考虑的是如何以最小的投入实现最大的产出(成本效益分析)。商业中的一切都归结为成本、成功几率、失败几率、潜在回报等问题。对此进行计算并采取相应的行动。如果您是开发人员也没关系:创建一个临时文件只需要5分钟,忽略权限和命名冲突。净收益:团队的其他成员可以开始编写依赖于此文件的代码。这是一个安全的解决方案吗?当然不是。99%呢?95%?90%?这些可能性是存在的。我还想问你一个问题:你怎么看待技术债务(注:快速解决但增加后续维护成本的做法)?有些人认为不应该有技术债务。我不同意。像商业一样,技术债务允许你借“钱”和“时间”来稍后交付一些东西。2年时间来制定一个全面的解决方案,还是4个月来解决问题并做出客户可以使用和购买的东西,哪个更好?判断当然要看情况,但在大多数情况下,如果你要让客户等两年,客户可能已经与竞争对手签约了。关键是管理你的技术债务和你的商业债务。如果你没有借到足够的钱,你就不会获得最好的投资回报。但是如果负债太多,利息会让你不堪重负。我的建议是使用番茄工作法。专注于小时间间隔(番茄钟),然后将这些时间段分配给未来的工作/研究,并在进行时不断调整优先级。Saul:编程的关键之一是管理和控制复杂性,这是我的首要任务之一。如果忽视复杂性管理,要么缺陷频繁出现,要么软件的ETA(预计到达时间)急剧增加。管理软件复杂性有许多不同的层次和方法,一个好的实践可能是这样的:“任何软件项目的首要任务是客户满意度,这是客户期望的函数。”换句话说,软件的复杂性取决于你在多大程度上控制了客户的期望。如果您接受这个观点,那么有两件事也是显而易见的:必须说明客户期望客户期望总是可以更改和协商的。您给出了“直接写入”与“许多其他考虑因素”的一个很好的例子。想一想,如果有人把两者的需求详细写下来,两边的功能描述是不是一样的?同样是做飞机,F16可以飞,航模也可以飞,但是能一样吗?本来打算摘录所有的建议,但考虑到以上精彩的见解足以解决Zilk的困惑,为了落实这些建议,本文就此打住,有兴趣的可以参考完整讨论。***我再补充一点:你也可以看看麦当劳的理论。英文原文:programmers.stackexchange.com翻译链接:http://www.36kr.com/p/210780.html
