软件开发中最困难的任务实际上并不是代码。编写代码是一种锻炼,一种逻辑思维的锻炼,它比开发人员在日常工作中执行的其他任务要甜蜜得多。如果您觉得自己只是作为一名业余程序员闯入该行业,那么您必须克服一些障碍才能确保您闯入专业领域……1.解释所做的工作解释软件开发过程可以令人沮丧的一件事。不会编码的人可能对这一行有所了解,但正如定义所说,他们不会编码。在他们眼里,我们只是一群呆在黑屋子里埋头敲键盘的程序员。也许你的朋友、家人和同事甚至有这样的想法,编码是“不正当的职业”,呵呵。2.可视化解决方案假设给定一组简单的——或考虑不周的——需求,你需要开发数据存储库、代码结构、算法、通信协议,并完成各种技术内容。然后,需要用一种即使是外行也容易理解的方式来解释,并在规定的期限内交付给客户。很少有开发人员能够真正做好这一点。3.预计交付时间这是每个开发者的噩梦。试想一下,突然让你确定完成一项你从未接触过的任务所需的时间,是不是有点天方夜谭?可能曾经编写过类似的代码,但不是在具有相同问题和限制的同一系统中,好吧!这个时候,真的只能靠经验了。但是大多数程序员低估了时间,可能是因为他们只考虑编码部分而忽略了其余部分。4.学习别人的代码条条大路通罗马,解决方案也是如此。借用别人的代码可能意味着花费大量时间仔细研究数千行代码以理解整个想法。而且,如果碰巧原始开发者根本没有留下任何笔记或文档——甚至是半成品的项目——那就更让人头疼了!5.范围蔓延和你神奇的功能敏捷开发会导致范围蔓延,这会令人沮丧和沮丧——尤其是当你突然想一时兴起添加一些愚蠢的功能时。你知道结果会是什么,你的团队也明白失败是没有商量余地的。但是客户知道得更多,所以如果失败是不可避免的,那都是你不信任客户的错。6.优化不足和过度优化之间的平衡复杂的软件从来都不是完美的。我们无法无限优化,这就是为什么软件项目永远不会在指定日期之前发布的原因。另一方面,很多人都有一种“就这样吧——以后再解决”的心态。代码现在运行良好,但这些人也明白明天会很麻烦和失败。当然,你不会再修复和调试了,它们将留给下一个可怜的开发人员。7.测试代码你可以自己写单元测试,也可以通过软件分组进行测试,但不要指望能找到所有的bug……复杂的软件可能包含几千行代码。系统可能有数十亿种可能的交互和路径,不可能对它们全部进行测试。同样,一个软件在不同的条件下,在不同的系统中遇到不同的软件,其交互的结果也是不同的。我们无法测试所有可能的情况。编写良好的单元测试是一项乏味而困难的工作。理想情况下,测试应该在软件开发项目开始之前编写——但如果我们先写这个,我们将如何向客户解释为什么四个星期过去了却没有??取得任何进展?单元测试不会突出显示每个错误。虽然我们都希望有一个专门的团队来写测试,主动发现问题,但是由于实际条件的限制——成本控制和时间的限制,这对很多项目来说是一种奢望,所以大部分都需要开发团队来做它自己写测试。而且他们总是不自觉地编写它以避免任何不合适的边缘情况。程序员会用合乎逻辑的方式解决问题,但用户很少这样做;所以有时候用户会帮我们发现一些我们根本检测不到或者根本想不到的问题。8、写代码文档写文档确实费时费力。很少有开发人员擅长并花时间编写/阅读文档。9.处理硬件问题我们每天都要处理各种技术问题,例如硬盘崩溃、驱动程序冲突、软件故障等等。虽然这不是我们作为软件开发人员的工作,但我们不能在不解决这些问题的情况下继续工作。但是,很多人会莫名其妙地认为,搞IT的人应该对计算机无所不知。他们遇到问题,第一时间想到的就是联系我们解决,而不管是什么问题,真的让人无语,心碎。当然,这些停机时间不应影响交货时间表或增加成本,但这可能吗?10、为人处事以上的工作,都可以概括为“如何为人处事”。奇怪的是,非专业人士不会告诉飞行员如何开飞机,也不会告诉电工我的房子需要重新布线等等,但他们却很喜欢指挥软件开发,提供各种异想天开的想法。我真的想不出一个好的解决方案,所以,唉,伙计们,让我们接受这个星球上有一半人的智商低于平均水平吧!英文原文:TheTenToughestTasksinDevelopment翻译链接:http://www.codeceo.com/article/10-toughest-task-in-programming.html
