文档章节

1 代码,软件和价值

暗夜在火星
 暗夜在火星
发布于 2017/03/08 21:52
字数 2514
阅读 10
收藏 0

1 代码、软件和价值

作为一名软件开发人员,我希望可以:致力于编写容易理解的代码,专注于软件开发领域,努力创造更大的价值

1.1 编写容易理解的代码

最近比较流行“工匠精神”,搜了一下,百科解释如下:

工匠精神,是指工匠对自己的产品精雕细琢,精益求精、更完美的精神理念。

在编写代码时,我们也能亲近深切地体会到这一过程里微妙的精神。

对于一个功能的代码集,再到一个函数的代码块,最后到可执行的一行代码甚至是一个变量的命名,我们可以粗糙地实现功能即可,也可以按照良好的设计、遵循统一的代码风格、结合测试驱动开发进行小步重构,还可以再进一步深入思考、探索应用业务领域,从而编写出能够存活很久并仍具有活力的浮现式代码。

可能会有同学觉得,需求总是那么赶,留给开发的时间总是那么少,又要调试,又要修bug,还要开会联调等等,没有那么多时间对所写的每一行代码进行精雕细琢。但是我们能不能反过来想,会不会是因为我们还没具备比较良好的专业技能和素质,能在短时间内一步到位编写出高质量的代码?

现在有多混乱,以后就有多痛苦。

如果说编程是一种艺术、一种技巧,那么在开发项目时,我们应该把项目当作一个艺术品来制作。既然我们开发人员作为软件系统这一艺术品的创造人,那么就应该是由我们来决定何时(当然应该是在合理的排期内)交付产品,而不是迫于需求方的时间压力就随意交付次品。因为根据守恒的定律,研发一个高质量产品所需要的时间是一定的,现在为了赶进度,投入的时间和精力少了,那么日后维护时就需要更大的成本来填补曾经所留下的坑。

那么问题来了,受限于局促的开发时间,又要交付高质量、有价值的产品,我们应该怎么做?参考中学时代的这一公式:

路程 = 速度 * 时间

我们可以类似得出这样的开发公式:

产品 = 开发速度 * 时间

所以当所需要的产品功能点和开发时间是固定时,要想在预期的里程碑内按时交付,我们只好提高自身的开发速度了。提高效率其中一个途径就是少返工,一步到位,把所发现的问题以及可预见的问题在开发初期就早早地解决,这些都要求我们能够编写出容易理解的代码。正如托尼·霍尔所说的:

设计软件有两种方法:一种是简单到明显没有缺陷,另一种复杂到缺陷不那么明显。

尤其是现在,计算机的硬件成本已经越来越廉价,曾经开发者前辈需要排队才能用得上大型计算机,现在随手都是笔记本这些智能移动设备,而且花几十块钱就能租到一台服务器24小时运行。相比之下,人的成本则越来越高,而且人的工作效率在某种程度上容易受到情绪的影响。只要能通过编译的代码,计算机都可以不断重复完美地精确运行并得到期望的结果,不管代码是汇编写的还是高级语言写的,也不管代码有多么丑陋。但如果开发人员看到难以理解的代码,会大大增加理解成本,而且心情烦躁,产生抵触心理,进而导致开发不顺畅,障碍重重。毕竟,程序员的快乐,更多在于创造,而不是维护历史遗留系统。但如果原来的代码是短而美,那么将会是另一番景象。

作为外行,他们可能关注的是产品的界面好不好看,交互够不够人性化这些表面的东西,但作为内行,作为开发人员,我们应该关注所隐藏在系统背后的代码是否规范,是否能让别人容易理解,是否能够恰到好处地体现所要表达的意思。

不管怎么说,编写容易理解的代码,总是会有好处的。

软件开发的本质

最初的世界,什么都没有,慢慢地有了人类。当农业时代来临时,我们的祖先才有丰富的食物得以保证生存,从而迎来了人类史上一次大飞跃。物质充实后,需要更大的能量才能更好的运输、流通和扩大,所以当伴随着蒸汽机的工业时代来临时,人类史上又发生了巨大的飞跃。物质有了,所需的能量也有了,现在更需要的则是信息,而我慢慢发现我们所从事的软件开发这一行业,正是为了将会再一次发生飞跃的信息代时代服务。说白了,软件开发最终服务于信息流。

我刚毕业时,我的Team Leader兼导师不止一次地告诫我:不要只限于技术。诚然,我觉得程序员所学的东西也不要局于代码,所做的事情也不要局限于编码。作为开发人员,代码是我们和外界交流、交互的媒介,也是我们用于构建有价值服务的基础,但除了关注代码,我们还需要关注软件开发这一领域,还要深入了解探索软件开发的各个方面,才能更有把握交付成熟稳定的系统。

如果想要给家里的花园砌一道墙,那么只需要掌握把一块块砖头和搅拌好的水泥粘合在一起就差不多了,即便不美观,但能够起到防护的功能也算是一道很好的墙。但如果需要建筑的是一个客流量成千上万的大型商场,那么除了要掌握砌墙外,还要掌握排水通风、防雷抗震、商场的业务性质、各个店铺的设计等一系列问题,这时就不再是建一道墙那么简单,而是相当于构建一个复杂的系统。

同样,在软件开发中,我们要构建的系统越大、价值越大,就要求我们所要掌握的范围面更广,要考虑的因素就越多。因为这时,软件开发是一门工程,一门需要团队一起交流、协助、共同努力完成既定目标的工程。

创造更大的价值

以前一百万人养活一个君王,现在一个天才就能养活一万多人。

当然,不是每个人都能成为天才,但我们作为软件开发工程师,可以通过软件创造更大的价值。

某种程度上,软件开发也是一种服务,它服务于特定的用户。但不同银行的业务窗口,速度慢而且同一时间一个业务员只能服务于一个客户,相反,我们的软件一旦开发完成发布上线后,就可以同时服务大量的用户,而且还可以是遍布世界各地的用户。可想而知,所能创造的价值有多大。

一个包子做好了,只能给一个人吃(当然也可以分着吃),所以包子铺的老板创造的价值,相比之下不会特别大(这里完全没有其他意思,对于辛勤劳动的人民,我总是致于最高的敬意)。而且,包子铺的老板哪天休息放徦了,他就没有包子可卖,自然就没有创造新的价值。值得庆幸的是,开发好的软件系统与此不同,我们做开发的软件不仅能同时服务于大量的用户,而且一旦我们发布上线后,我们就可以抽身继续开发新的软件,不断创造更大的价值。我觉得这是一件很棒的事情!

想一想,如果国外的人民使用我们编写的代码所提供的服务,那是一件多么让人激动的事情。作为技术开发人员,真正让我们兴奋不起的是我们所研发的产品出名了,而是我们的产品每天被人们在生活中不断使用,被依赖。

我一直认为,开发出来的软件,应该是能够帮人们解决某种问题,如提升工作效率、帮助更好地学习、或是改善生活,而不是给人们带来苦恼,带来压力。我很庆幸我这一生能有机会一直从事我所深爱的职业 -- 软件开发,也非常庆幸我能有此创造更大价值的机会。

当然,能力越大,责任越大。

如果处理得不好,我们也会面临项目夭折,或是交付有诸多问题的产品,甚至是系统上线运行后出现故障而导致损失重大。

所以,在这里,希望能通过分享一些自己的经验和总结,帮助更多的同学提升开发效率,了解软件开发这一领域,最后创造更大的价值。

© 著作权归作者所有

暗夜在火星

暗夜在火星

粉丝 168
博文 176
码字总数 326355
作品 1
广州
程序员
私信 提问
为什么需要敏捷软件开发

当前各大互联网公司都宣传自己是敏捷开发,各种技术论坛上也讨论得非常多得议题也是敏捷,好像公司不敏捷都好不意思跟人打招呼。那么我们到底为什么需要敏捷呢?传统软件开发到底存在什么样的...

杨武兵
2015/12/16
184
1
敏捷软件开发总结

背景介绍 我从大学05年开始直到现在就总共干了10年的软件开发,期间参与了各种类型的软件项目开发,包括高校和企业应用软件项目,外企的金融软件项目以及互联网软件项目,也参与过最近流行的...

杨武兵
2015/11/24
175
0
记录直播礼物爬虫

【业务需求】 web端进入一个直播房间,能从弹幕中记录下此房间主播接收了哪些礼物(礼物的种类,数量,每种礼物价值总和,所有礼物加起来价值总和),最大要能支持一台电脑同时开启50个房间下...

电饭锅烧豆腐干
2017/03/06
0
2
警惕那些产生负价值的开发者

在软件开发者的职业生涯中,我们一定会遇上一两个产生负价值的同事。你也许会想:负价值是个什么鬼? 曾经就有过这样一个同事。在 6 个月的时间里,他对代码库进行了两次更改。而这些更改不但...

局长
2016/12/23
5.2K
37
软件开发中的“瑞士军刀综合征”

如果大家认为这篇文章更多是在喷,我先说抱歉。“瑞士军刀综合征”的想法是起源于我和项目经理、客户、甚至其他开发者打交道的过程中产生的沮丧感,他们都以一种狭隘特殊的方式思考问题。我称...

oschina
2014/05/29
5.3K
31

没有更多内容

加载失败,请刷新页面

加载更多

中国地理位置四至点及计算方法

中国地理位置四至点(China's geographical position is four o'clock),是指中国领土最东、西、南、北的四个地理位置。处于太平洋西岸,亚洲东部。 中文名 中国地理位置四至点 外文名 Chin...

boonya
13分钟前
0
0
8.eclipse 安装 lombook插件

1.效果 2.安装过程 参考: https://blog.csdn.net/zflovecf/article/details/80178679 2.1 下载插件 https://projectlombok.org/download.html 并放入eclipse所在目录 (位置参考下图) 2.2 ......

20190513
14分钟前
0
0
java io的编码和解码

public class copyFIle { public static void main(String[] args) throws UnsupportedEncodingException { String str="中国人民";//编码byte data[]=str.getBytes("gbk");//解码Sys......

南桥北木
29分钟前
0
0
SpringBoot中使用Filter

1.在传统web项目中添加filter <filter> <filter-name>TestFilter</filter-name> <!--定义filter名称 和filter类 --> <filter-class>com.jiafeng.filter.TestFilter</filter-class>......

贾峰uk
29分钟前
1
0
?为什么要学这个技术(有什么优秀的地方,可以解决哪些问题?

今天来总结一下Struts2的知识点,学习编程我的思路一般是这样的:     ① why ?为什么要学这个技术(有什么优秀的地方,可以解决哪些问题?)。     ②what ? 这个技术是什么玩意?有...

SEOwhywhy
今天
3
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部