程序员经常遇见的9大困难你造么?

那些非程序员认为软件开发是非常困难的,确实如此,但这种困难不像那些外行人理解的那样。最近的一次讨论,程序员分享了他们认为工作中的最大困难,架构师米洛就在这里为大家呈现出其中的9个。你可以看到,写代码并不是最难的事情,如果你也在从事软件开发,看看哪些内容你认为也是很难的。

1. 设计解决方案

 

任务描述:给你一系列的需求,你被要求设计和构造技术上的解决方案。这包括了设计数据结构,算法,逻辑上的封装等等,还要考虑到用户安全方面的因素。

挑战:确保你的设计可以满足客户需求,让客户认为合理。当然还要在项目时间允许范围内。

2. 写测试

 

任务描述:写单元测试,确保代码中每一个小部分的功能正确。这样做可以让你尽早发现bug,让你后续的回归测试变得更容易。一些开发的方法论甚至鼓励开发者在编写程序之前就可以写好测试程序。

挑战:为每一部分进行测试是一件很枯燥乏味的事情,让人感觉是在做多余的事情。

3. 编写文档

 

任务描述:撰写文档,说明你代码的含义并解释应用的工作原理。这包括了独立的文档文件和代码注释,让更多的人理解你的代码。

挑战:这是一件耗时的工作,如果没有人去读它们的话就是纯属浪费时间了。相比于写文档,程序员还是更爱写程序。

4. 实现那些你不认可的功能

 

任务描述:有时候你会不得不去实现一些功能和特征,它们不是你的本意,你觉得它们不应该出现在这个项目里,但是客户一定要坚持如此。

挑战:你需要抛开一切个人的感觉和意见,把时间和精力专注于客户提出的功能需求。

5. 维护他人的代码

 

任务描述:有时候你需要维护和调试其他程序员的程序,或一部分代码。

挑战:你需要用尽一切办法理解前任开发者的意图,他是如何设计的这些代码。特别是当这些代码写得很差,也没有注释和文档可以帮助到你时,那就很糟糕了。

6. 与他人打交道

 

任务描述:作为开发者,你要从客户那里得到需求,向经理提交报告,和测试人员一起工作,更要和其他工程师讨论项目。

挑战:你需要向外行人解释技术上的事情,有时候你的工作会依赖于他人的认可或辅助。期间也会出现你和QA人员或其他工程师有不同意见的时候。

7. 预估项目工期

任务描述:项目一开始的时候,你要预估这个项目的完成需要多长时间。

挑战:一般情况下你要预估的是一个你之前没有做过的项目,而且你只能基于那些模糊的需求,再给未来可能发生的问题分配些时间。

8. 解释我的工作

 

任务描述:向周围的非程序员朋友,家人,同学解释你的工作是在做什么,不做什么。

挑战:你爱的那些人可能不理解你在做什么,而且你还不断地被问及计算机相关的一切问题。

9. 程序中的命名

 

任务描述:想出一些名字,为你程序中的变量、过程、函数、类、对象、数据库等命名。

挑战:即使是很小的程序或应用都需要给很多东西命名,你要想出那些适合的,简洁的,可以表达正确含义的一些名字。

你是程序员么,你认为在开发中最困难的是什么?

我是架构师米洛,产品和技术经理,助你升职加薪。觉得文章有用,请点转载,赠人玫瑰,手有余香。

时间: 2024-07-30 20:35:14

程序员经常遇见的9大困难你造么?的相关文章

细数被程序员吐糟的9大困难(转)

英文原文:Arg! The 9 hardest things programmers have to do 那些非程序员认为软件开发是非常困难的,确实如此,但这种困难不像那些外行人理解的那样.最近在 Quora 上的一次讨论,程序员分享了他们认为工作中的最大困难,在这里为大家呈现出其中的 9 个.你可以看到,写代码并不是最难的事情,如果你也在从事软件开发,看看哪些内容你认为也是很难的. 1.  设计解决方案 任务描述:给你一系列的需求,你被要求设计和构造技术上的解决方案.这包括了设计数据结构,算

程序员必看的十大电影

程序员必看的十大电影 1. 骇客帝国(1999) 概念:在线/离线,递归,循环,矩阵等. 这部具有革命性的电影.一种文明的结束是另一种文明的开始.它成了后来的很多电影效仿的对象. 2. 环形使者(2012) 概念:循环 如果生活变成了一种无休无止的循环,如何终止它? 3. 创:战记(2010) 概念:虚拟和现实 很多到了年纪的计算机科学家都会承认,他们对计算机计算或战争游戏的热爱来自一种憧憬. 4. 遇见未来(2007) 概念:递归 这部电影运用到了计算机里递归的概念,特别是最后的搜索那部分,那

程序员必须知道的10大基础实用算法及其讲解

程序员必须知道的10大基础实用算法及其讲解 原文出处: cricode 算法一:快速排序算法 快速排序是由东尼·霍尔所发展的一种排序算法.在平均状况下,排序 n 个项目要Ο(n log n)次比较.在最坏状况下则需要Ο(n2)次比 较,但这种状况并不常见.事实上,快速排序通常明显比其他Ο(n log n) 算法更快,因为它的内部循环(inner loop)可以在大部分的架构 上很有效率地被实现出来. 快速排序使用分治法(Divide and conquer)策略来把一个串行(list)分为两个子

程序员必知的10大基础实用算法

    算法一:快速排序算法 快速排序是由东尼·霍尔所发展的一种排序算法.在平均状况下,排序 n 个项目要Ο(n log n)次比较.在最坏状况下则需要Ο(n2) 次比较,但这种状况并不常见.事实上,快速排序通常明显比其他Ο(n log n) 算法更快,因为它的内部循环(inner loop)可以在大部分的 架构上很有效率地被实现出来. 快速排序使用分治法(Divide and conquer)策略来把一个串行(list)分为两个子串行(sub-lists). 算法步骤: 1 从数列中挑出一个元

Java常用排序算法+程序员必须掌握的8大排序算法+二分法查找法

Java 常用排序算法/程序员必须掌握的 8大排序算法 本文由网络资料整理转载而来,如有问题,欢迎指正! 分类: 1)插入排序(直接插入排序.希尔排序) 2)交换排序(冒泡排序.快速排序) 3)选择排序(直接选择排序.堆排序) 4)归并排序 5)分配排序(基数排序) 所需辅助空间最多:归并排序 所需辅助空间最少:堆排序 平均速度最快:快速排序 不稳定:快速排序,希尔排序,堆排序. 先来看看 8种排序之间的关系: 1.直接插入排序 (1)基本思想:在要排序的一组数中,假设前面(n-1)[n>=2]

计算机世界的道(C/ASM)生一(OS),一生二(API),二生万象(MFC/COM)——学包装技术的程序员将来会损失比较大,因为不了解本质,一旦包装过时就会被淘汰

道生一,一生二,二生万象.OO的思想就是抽象,万象归宗,化繁为简.99%的程序员使用OO,或者所谓的类库的目的就是好用,不必了解内部实现就可以直接达到所期望的结果.这时一种生产力的进步,一种流水线式半零件式的生产流程.程序员只是最后再流水线上拼接起来上个螺丝的工人而已(严格说来是码农).C++就是抽象万象的利器.用Windows举例子,从无到有这个关键的一步(所谓的底层),通产是C或者汇编.Windows源码大多是C/ASM编写,实现了硬件的抽象统一了抽象接口(中介有众厂商的驱动提供),然后从一

堆排序算法---《程序员必须知道的10大基础实用算法及其讲解》

> 原帖地址:http://www.oschina.net/question/1397765_159365 快速排序算法的基本特性: 时间复杂度:O(N * logN) 堆排序为不稳定排序,不适合记录较少的排序. var arr = [], count = 100, i = 0, parentIndex, exeCount = 0, startTime = + new Date(), stackSort = function(a){ if(a.length === 1) return a; va

程序员应具备的7大技能

1.  对技术的热忱 热情是一种无形的东西,当你所列清单上的所有事情都做不好的时候,它常常能帮你熬过这段时间.对IT的强烈热爱,也会让你的其他大部分特点都遥遥领 先,这是纯粹的智商和商业头脑所无法比拟的.当你在IT行业工作了多年之后,热情也会帮你在早上起床之后期待今天的工作.没有热情,IT领域将会成为一个 空有外壳没有灵魂的地方. 2.  懂得数据分析 数据是IT企业和它所服务的企业的命脉.对公司数据有深入的了解,可以对软件应用程序与数据的衔接提供重要的见解.此外,从商业的角度看,如果你对 一个

《转》程序员必须知道的10大基础实用算法及其讲解

来源: Cricode  发布时间: 2014-06-19 08:27  阅读: 2018 次  推荐: 8   原文链接   [收藏] 算法一:快速排序算法 快速排序是由东尼·霍尔所发展的一种排序算法.在平均状况下,排序n个项目要Ο(nlogn)次比较.在最坏状况下则需要Ο(n2)次比较,但这种状况并不常见.事实上,快速排序通常明显比其他Ο(nlogn)算法更快,因为它的内部循环(innerloop)可以在大部分的架构上很有效率地被实现出来. 快速排序使用分治法(Divideandconque