程序员需要克服的10大障碍

程序员软件开发中最艰巨的任务其实并不是代码。写代码是一种锻炼,一种逻辑思维上的锻炼,相比于开发人员在日常工作中要执行的其他任务,它可显得可爱多了。如果你觉得自己才刚刚跨入这个行业,只能算个业余程序员,那么为了确保能跻身专业领域,有些障碍你必须得克服……

1.      解释做了什么

解释软件开发过程是很让人崩溃的一件事。那些不会写代码的家伙可能在这一行有所了解,但是正如定义所说的,他们不会写代码。在他们眼中,我们就是一群待在昏暗的房间中弓着背噼里啪啦敲键盘的程序猿。

搞不好你的朋友家人还有同事,甚至有可能会有编码“不是正当职业”的想法呢,呵呵。

2.      可视化解决方案

假设给定一组简单的——难听点说就是考虑不周的——需求,你需要制定数据存储库、代码结构、算法、通信协议,以及只要能解决业务问题就得去完成的各种技术内容。然后,还需要用一种通俗易懂,哪怕是外行人也能明白的方式解释出来,并在规定期限内交付给客户。

很少有开发人员能真正做好这一点。

3.      预估交付时间

这是每个开发人员的噩梦。试想一下,以前一点也没有接触过的任务,突然要你确定完成它所需要的时间,是不是有点天方夜谭呢?可能曾经也写过类似的代码,但是却并不是在有着相同问题和限制的同一个系统中,好吧!

这个时候,那真的只能靠经验了。但是大多数程序员会低估时间,原因可能是因为他们只考虑了编码这部分而忽略了其他。

4.      借鉴别人的代码

条条大路通罗马,解决方案也是。借鉴别人的代码可能意味着要花上很多时间去研究上千行代码以了解整个的思路。而且,要是恰巧原先的开发人员一点也不留注释和文档的话——甚至只是个半途而废的半成品项目——那就更加令人头大了!

5.      范围蠕变和你自认为神奇的功能

敏捷开发会造成范围蠕变,这让人既沮丧又无奈——特别是当你突然心血来潮要加点什么愚不可及的功能的话,更甚。结果如何你自己心知肚明,你的团队也明白失败没商量。但是客户其实知道得更清楚,所以要是失败不可避免地降临时,那么就全都是你的责任,因为你居然不相信客户的眼光。

6.      优化不足和过度优化之间的平衡

复杂的软件永远达不到完美的境界。我们不可能无限制地优化,这也是为什么软件项目从不在规定日期到来之前发布的原因。

另一方面,很多人都会抱有“先就这样吧——以后再来改进”的心态。现在这些代码是可以好好工作,但是这些人也明白这会成为明日的烦恼和失败。当然,你不会再来修复和调试了,它们会被留给下一个可怜的开发人员。

7.      测试代码

既可以自己编写单元测试,也可以组团通过软件来测试,不过不要妄想能发现所有bug……

复杂的软件可能会包含成千上万行代码。系统可能有着数十亿种可能的相互作用和路径,想要全部测试是不可能的。

同样的,一个软件在不同的条件下,不同的系统里碰到的软件不同,其交互的结果也不尽相同。我们没办法测试所有可能的情况。

想要编写出好的单元测试是一件既繁琐又艰难的工作。在理想情况下,测试应该在软件开发项目开工之前就写好——但是要是我们先写这个的话,我们怎么向客户解释四个星期过去了为什么一点进程都没有?

单元测试不会突出显示每一个bug。虽然我们都希望能有一个专门的小组来编写测试然后积极去发现问题,但是由于现实条件的限制——成本控制和时间限制,这对于很多项目而言都是奢望,所以大都需要开发团队自己来编写测试。而他们在编写时总是会无意识地避免任何不妥当的边界情况。

程序员会用一种逻辑方式去解决问题,但是用户很少会这样做;所以有时候用户会帮我们找到一些我们自己察觉不出来或者根本想不到的问题。

8.      写代码文档

写文档的确是费时又费力。很少有开发人员擅长并愿意花时间去写/阅读文档。

9.      处理硬件问题

我们每天都需要处理各种技术问题,例如硬盘崩溃、驱动冲突、软件故障等等。虽然这并非是我们软件开发人员的工作,但是要是不解决这些的话,我们是没法继续工作的。

然而很多人却会莫名其妙地认为,搞IT的就应该懂所有关于电脑的东西。当他们碰到问题,他们第一时间想的就是联系我们来解决,而且不管什么问题都这样,真心是让人无语又崩溃。

当然这些中断时间不应该对交付进度产生影响或者增加成本,但是这可能吗?

10.   和人打交道

上述任务通通可以总结为“如何与人打交道”。令人奇怪的是,非专业人士不会去指点飞行员应该如何驾驶飞机,也不会跑去和电工说我的房子需要重新布线等等,但是他们却非常喜欢在软件开发上面指手画脚,提供各种异想天开的点子。

关于这一点,我还真提不出什么好的解决方法,所以,唉,各位,我们还是接受有一半的地球人他们的IQ低于平均值的事实吧!

免费领取兄弟连php原创视频教程光盘,详情咨询官网客服:http://www.lampbrother.net

时间: 2024-10-14 09:07:05

程序员需要克服的10大障碍的相关文章

程序员必须知道的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 从数列中挑出一个元

堆排序算法---《程序员必须知道的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

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

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

2020年Java程序员应该学习的10大技术

摘自:https://www.cnblogs.com/hollischuang/p/12170323.html 对于Java开发人员来说,最近几年的时间中,Java生态诞生了很多东西.每6个月更新一次Java版本,以及发布很多流行的框架,如Spring 5.Spring Security 5和Spring Boot 2等,这些都给我们带来了很大的挑战. 在2019年初,我认为Java 10还是比较新的,但是,在我学习完所有Java 10的特性之前,Java 11.Java 12.Java 12

程序员面试中常见10大算法汇总

以下是在编程面试中排名前10的算法相关的概念,我会通过一些简单的例子来阐述这些概念.由于完全掌握这些概念需要更多的努力,因此这份列表只是作为一个介绍.本文将从Java的角度看问题,包含下面的这些概念: 1. 字符串 如果IDE没有代码自动补全功能,所以你应该记住下面的这些方法. 1 2 3 4 5 6 toCharArray() // 获得字符串对应的char数组 Arrays.sort() // 数组排序 Arrays.toString(char[] a) // 数组转成字符串 charAt(

程序员必知的10大编码原则

每个程序员的职业生涯都是与一个又一个代码共度的,每天除了码代码还是码代码.总结回顾下我的职业生涯,经历的多了,总觉得不总结点有用的东西出来感觉对不起程序员码代码这份职业!编码多了,这里就给大家总结下编写和运行代码是一些需要注意的原则.仅供参考! 1.偏执 这一点与我而言几乎是天生的.原谅我可能是处女座的程序员! 我从不相信电脑,也不相信我刚刚修复的bug真的已经修复好了,总之我不相信任何东西.我甚至连自己都不相信.除非多次检验之后,我才会相信我已经如我所愿地理解了问题. 偏执是我的诤友,而且我认

困扰了百万程序员20年的10大难题!

程序猿最艰巨的任务跟编写代碼没得几个关系.编码是逻辑构思的一种实践,这跟程序猿日常工作中的其他任务比起来相对简单.如果你觉得自身還是1个技术水平普通的程序猿,在你真正的能进入到顶尖高手行列前,请保证你已经战胜了下述晋升的阻碍. 1. 解释你在干什么 解释软件开发过程是1个很艰难的事情.那些非程序猿岗位的人或许了解许多有关编程的事情,但很显然,他们不会编程.对于他们而言,我们的生活只是在一间漆黑的房间内趴到键盘前消耗着咖啡. 你会在你的朋友.亲人和同事中遇上这样的人,他会觉得编码并不是1个合理的岗

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

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