程序员最头疼的事情,跟写代码没什么关系。编码是逻辑思维的练习,与程序员日常工作中的其他任务相比,它相对简单。如果你认为自己还是一个普通的程序员,在你真正进入高手行列之前,请确保你已经克服了以下晋升障碍。1.解释你在做什么解释软件开发过程可能很困难。不是程序员的人可能对编程了解很多,但显然,他们不会编程。对他们来说,我们的生活就是在黑暗的房间里对着键盘喝咖啡。您会在朋友、家人和同事中遇到一些认为编码不是正确职业的人。2.可视化软件解决方案根据一些简短的要求——通常是一知半解,你需要设计数据结构、软件架构、代码算法、通信协议以及业务问题解决方案的所有其他组成部分。那你就需要通俗的表达出来,你需要在规定的时间内交付给客户。很少有程序员能做到这一点。3.评估持续时间这是程序员痛苦的来源。在开发任务完成之前,你是绝对不可能确定完成这个任务所需要的时间的。可能程序和以前写的很像,但是环境变了,问题变了,约束变了。经验会提供一些判断,但大多数程序员习惯于低估问题的难度。这样做的原因是他们只考虑编码方面而忽略了这个待办事项列表上的其他事情。4.维护别人的代码一个问题可能有10000种解决方案,10000种写法。接手别人写的代码,意味着你要花费无数的时间在几千行代码中摸索,才能理解原作者的思路。而如果是不相信注释和文档的程序员留下的半个项目,那就更麻烦了。5.软件边界的模糊蔓延和让人吐血的千奇百怪的功能需求虽然敏捷开发方式为软件范围的扩展提供了一定的空间,但是并没有起到任何作用——尤其是当你遇到一些由功能需求引起的时候一时兴起。你知道你注定要失败。你的团队知道它注定要失败。但是客户感觉很好,当失败不可避免地发生时,这都是你的错,因为你没有理解他们的真实意图。6.在优化不足和优化过度之间找到平衡复杂的软件永远不会完美;总会有更好的东西。您可以无休止地优化,这就是软件项目永远不会提前完成的原因。另一方面,“就是这样-我稍后会优化它”的心态也很普遍。该代码今天运行良好,但您知道它明天可能会崩溃或无法运行。当然你不用修改,留给下一个倒霉的程序员吧。7.测试你的代码你写了单元测试,软件被提交到测试组,但是错误仍然存??在……软件很复杂,可能包含几千行代码。系统中可能有数以百万计的各种交互和逻辑路径;您不可能对它们进行全部测试。同样,软件会在不同的条件下与不同平台上的不同软件进行交互。你无法衡量所有这些。编写良好的单元测试是一项乏味而艰苦的工作。理想情况下,应该在开始开发之前编写测试-但是您如何向客户解释为什么四个星期后仍然没有可用的软件?单元测试并没有涵盖每一个问题点。在一个理想的世界里,应该有一个独立的团队编写测试并积极发现问题。不幸的是,对于大多数项目来说,这太过昂贵和耗时,因此开发团队编写了测试。开发团队下意识地避免了许多极端的边缘情况。程序员喜欢以合乎逻辑的方式处理所有问题。但是用户很少这样。他们会发现您意想不到的问题。8.编写软件文档编写代码文档既费力又费时。很少有程序员擅长这个,像这样,也很少有程序员花时间去阅读它们。9.与IT打交道你每天都在从事技术工作。您可能是一名HTML或PHP程序员,但您很可能会遇到一些问题,例如硬盘损坏、驱动程序冲突或软件崩溃。修复这些问题不是您的主要责任,但除非您修复它们,否则您将无法继续您的开发工作。不幸的是,对于IT圈外的人来说,程序员应该是精通硬件和软件的人。当他们遇到问题时,他们不花时间就解决了,他们会直接来找你。不管是什么问题:你在电脑上,你知道如何将预算导入Sage,如何配置Oracle,或者为什么他们不能在他们的黑莓手机上发送电子邮件。当然,这些打扰永远不能成为你不完成工作的理由,你也不会得到报酬,不是吗?10、处理人的问题以上问题可以概括为“人的问题”。很少有外行会建议飞行员如何驾驶飞机或电气工程师如何给飞机接线。但是很多人会愉快而勇敢地建议如何开发软件。我相信这些人没有什么好办法。你需要接受这个世界上一半的智力低于平均水平的事实!
