有人问我:“什么是软件开发?”。回答这个问题前,咱们须要先理解什么是软件。微信
关于软件,一些优秀的人已经给出了简单易懂的定义,举个例子:工具
软件是计算机系统的一部分,它适配各类不一样用途的机器。例如,经过同一台计算机但不一样的软件,咱们能够玩游戏、计算缴税、写信或者写书,以及得到约会邀请的答复。测试
—— 杰拉尔德·温伯格优化
这句话是做者解释给他的朋友的,他的朋友是一名电脑小白。编码
有了上述定义,什么是软件开发也就显而易见。设计
软件开发研究如何让运行在计算机里的不一样系统解决人们在现实中遇到的问题。对象
咱们常常见到这样的句式,试图一句话就把事情讲得面面俱到。游戏
让咱们简化一下。开发
软件开发研究如何让计算机解决问题。get
目前看起来不错。
假若你听过“一切问题都是人的问题”这句话,而且愿意相信它,那咱们就能够接着简化。
软件开发解决人的问题。
这个定义充满了敷衍的味道。若是你敢向你的女朋友这么解释,她大抵会提到“你是不不爱我了”之类的话题。
回到正题,它好在足够笼统,把全部的细节概括为“人的问题”,一言以蔽之,至少不会有多大误差。
关于什么是“人的问题”,咱们没法一一列举。但经过下面的例子,也许能够窥探到一些奥秘:早在 1995 年,有人便以为软件开发要解决的问题陷入了困境。
咱们遇到了史无前例的困难,不知道在作出电子表格(Excel)后,计算机还能够用来作什么。
—— 查尔斯·西蒙尼
从今天来看,这个观点颇失谦逊,软件行业历来没有止步于表格处理程序。固然,咱们不是要批判什么,它是用来引出如下软件开发的三点特性。
“人的问题”不可预料。
世界在改变,人的需求也是一直变化的,咱们不知道下一步会发生什么。值得一提的是,有时咱们甚至不知道过去发生了什么。
“人的问题”具备延续性。
在 1977 年,人们开始用电子表格处理数据。在今天的办公自动化领域,电子表格仍具备着不可替代的做用。这是值得庆幸的,总有些问题和解决方案会持续很长一段时间。
“人的问题”具备复杂性。
尽管软件技术在当今的 IT 领域开花结果,人们探索出了各类各样的成型解决方案,但开发者和开发团队依旧面对着复杂的开发环境。
复杂性足够咱们花费一整节的内容来阐述它,欢迎阅读下一节。
随手翻开一本介绍软件工程的书,你都会看到它会说起复杂性。软件复杂性的本质是,现实世界是无比复杂的。至于现实为何是复杂的,不在本文讨论的范畴。本文更关心的问题是:
是什么让软件变复杂的?
咱们在上文提到“软件是运行在计算机里的系统”,这里直接给出系统的通常定义:
系统是对世界的一种观点。
你可能一时没法接受这个它。
换种说法,系统是对世界的一种抽象。
抽象意味着要从繁复的具象世界里剥丝抽茧,不一样的抽象就会产生不一样的系统。
观点或者说抽象能够简单也能够复杂。
一个软件从无到有,愈来愈复杂,根本缘由就在于特性不断增长和改变,不一样角度会产生不一样的观点。
举个食品行业的例子。
一家公司以独家配方生产一种食品,每一个季度的销售额上涨 10%。
管理层但愿业绩进一步提升,具体到研究部门,目标是调制出更好吃的配方。
研究团队计划每月只改动一点点,一年过去了,不断地有顾客投诉食品再也不是原来的味道了。
公司董事决定开会。
“咱们生产的食品更好吃了吗?”
“固然,咱们的销售额增加达到了 30%。”
“可是咱们的顾客不这样说。”
“他们只是不肯意改变!”
再举个例子,打开你的手机,各种软件源源不断地弹出新闻资讯类消息。大部分软件工具成熟之后,再也不愿意仅作好它的本职工做,当你使用一个小众 APP 时,你能够亲眼见证它从小而美到臃肿不堪的历程。
这是复杂性的一面,面对它,咱们惟一可以作的就是“不要多余的特性”,它有个经典表述:
不要过早的考虑优化。
回到上面的故事,也许那家公司什么也不作,销售额一样会上涨。
你能够能会质疑“说的轻巧,咱们总不能什么都不作?”
回答它,涉及到咱们作出决定时绕不开的一个问题。
你愿意付出什么样的代价?
付出什么,就要准备好获得什么。你愿意付出多少薪资雇佣员工,你愿意增长多少特性,你愿意采用什么样的解决方案,你愿意为这个 Bug 留出多少工做量。
拿出什么样的筹码,是真实摆在咱们眼前的问题。
如今,咱们能够正式回答这个问题了。
首先,“预料”对方真正的目的是什么?
1. 对方只是随口一问。
2. 对方想打探你的薪资,而后向你介绍相亲对象。
3. 对方对软件行业这个话题感兴趣,并想深刻了解更多。
4. 其余可能性。
对于项庄舞剑;意在沛公,你翻开和老妈的微信聊天记录,阅读一番《不得不看,职场新老手都有用的一百条话术!》,基本能够应付了。
至于第三种状况,先给他来个含辞模糊的定义,好比
软件开发经过设计、编码、测试以及持续地维护解决人的需求。
通常地,对方发现本身听得云里雾里后,就会识趣的中止这个话题。但也有可能,尤为是碰到其余领域的工程师时,会引出更为具体的问题。
不幸的是,有时候问题根本就不存在,正以下面的寥寥数语,它会让你全部准备好的说辞付之流水。
“工做忙吗?”
“还行。”
“天天都干啥?”
“主要是写代码。”
“不懂,据说挺累的。”
“有时候是累,工做不都这样么。”
“嘿,说的也是。”