惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

WordPress大学
WordPress大学
www.infosecurity-magazine.com
www.infosecurity-magazine.com
博客园 - 聂微东
博客园 - 【当耐特】
Last Week in AI
Last Week in AI
量子位
S
SegmentFault 最新的问题
Hugging Face - Blog
Hugging Face - Blog
B
Blog RSS Feed
V
V2EX
酷 壳 – CoolShell
酷 壳 – CoolShell
雷峰网
雷峰网
GbyAI
GbyAI
Jina AI
Jina AI
宝玉的分享
宝玉的分享
腾讯CDC
Cyber Security Advisories - MS-ISAC
Cyber Security Advisories - MS-ISAC
CTFtime.org: upcoming CTF events
CTFtime.org: upcoming CTF events
D
Docker
博客园_首页
N
News and Events Feed by Topic
奇客Solidot–传递最新科技情报
奇客Solidot–传递最新科技情报
Help Net Security
Help Net Security
Recent Commits to openclaw:main
Recent Commits to openclaw:main
C
Cisco Blogs
F
Fortinet All Blogs
SecWiki News
SecWiki News
AI
AI
S
Schneier on Security
让小产品的独立变现更简单 - ezindie.com
让小产品的独立变现更简单 - ezindie.com
The Last Watchdog
The Last Watchdog
Martin Fowler
Martin Fowler
A
About on SuperTechFans
T
Troy Hunt's Blog
P
Proofpoint News Feed
Blog — PlanetScale
Blog — PlanetScale
Hacker News: Ask HN
Hacker News: Ask HN
F
Full Disclosure
cs.CV updates on arXiv.org
cs.CV updates on arXiv.org
钛媒体:引领未来商业与生活新知
钛媒体:引领未来商业与生活新知
I
InfoQ
S
Security @ Cisco Blogs
Project Zero
Project Zero
Simon Willison's Weblog
Simon Willison's Weblog
C
Cyber Attacks, Cyber Crime and Cyber Security
J
Java Code Geeks
N
News | PayPal Newsroom
IT之家
IT之家
大猫的无限游戏
大猫的无限游戏
H
Hacker News: Front Page

博客园 - 北京的201个蓝天

没有使用IaC的DevOps系统都是耍流氓 SmartIDE v1.0.23 一个非常不敏捷的发布 SmartIDE v0.1.19 - 码云(Gitee)最有价值开源项目奖项、工作区策略、类虚拟机镜像VMLC、Server安装手册 【视频】k8s套娃开发调试dapr应用 - 在6月11日【开源云原生开发者日】上的演示 为什么Dapr是比SpringCloud和Istio更优雅的微服务框架? SmartIDE v0.1.18 已经发布 - 助力阿里国产IDE OpenSumi 插件安装提速10倍、Dapr和Jupyter支持、CLI k8s支持 README.exe 是的,你看错是EXE SmartIDE v0.1.17 已经发布 - 模版库远程模式和插件市场公测 SmartIDE v0.1.16 已经发布 - 支持阿里&蚂蚁开源的国产 IDE OpenSumi GitHub和75亿美金 d4d#9 玩Docker只要浏览器就够了,PWD是个神奇的网站 g4e基础篇#6 了解Git历史记录 g4e基础篇#5 创建分支和保存代码 g4e基础篇#4 了解Git存储库(Repo) g4e基础篇#3 Git安装与配置 g4e基础篇#2 Git分布式版本控制系统的优势 g4e基础篇#1 为什么要使用版本控制系统 Git 企业开发者教程 Windows Container 和 Docker:你需要知道的5件事
软件开发的自然属性
北京的201个蓝天 · 2017-05-11 · via 博客园 - 北京的201个蓝天

什么是软件的生产制造过程?需求收集,分析,设计,开发,测试,打包,发布;这些是软件的生产制造过程吗?

看上去好像没有问题,这不就是将软件从无到有制造出来的过程吗?好吧,那让我们用下面这张图来比较一下:一辆汽车的生产制造过程和一个软件的生产制造过程有什么区别。

nature-of-software

汽车上到生产线,工人按照既定的程序不停“重复”的生产着同样规格的产品,对于汽车来说,生产线上同一批次的汽车一定是一样的;对于软件来说,如果是同样的软件,生产的过程可以被简化为“复制”和“粘贴”。而我们所理解的所谓软件的生产制造过程其实对应的是“原型车”的设计过程,因为每次经历这整个过程的软件都不再是统一批次(版本)。

从这个角度来说,软件开发其实一直处于“设计”过程,而从来不会进入和传统制造业类似的“生产”过程。传统的瀑布模式的软件项目管理思路其实就是在用管理不停重复”生产“过程的方法来管理一个不断变化的“设计”过程,注定是不适合的。

yuan_befb91c29c0712b9c840b64f61431624

也许大家对汽车生产线还是不够熟悉,那我们来举个做菜的例子。你要做一道西红柿炒鸡蛋,正常的工序是:炒蛋,拿出,放油,放葱,放西红柿,放糖,放入炒好的蛋,放盐,出锅。没毛病,这就是一盘正常的西红柿炒蛋,按照这个工序,任何经过简单培训的人都可以很容易的快速复制这道菜。但是,假设你已经完成了放糖的步骤,这时候客人说他有糖尿病,怎么办?你只能倒掉西红柿从来,还好炒好蛋还可以用。又或者,客人点了西红柿炒蛋,上了桌客人说这个不对,我要的是黄瓜炒蛋 … … 作为大厨的你是否会提刀见客?好吧,其实软件开发的过程远比这个复杂,推倒重来算好的,盖好了大楼再拆掉地下室这种事在软件行业也是家常便饭,用户搞不清西红柿和黄瓜算好的,至少他承认搞不清,很多用户会要求你把黄瓜做成西红柿的味道。现在你理解为什么会有程序员暴打产品经理的事情出现了吧?

这就是软件开发的自然属性,它不是一门科学,更不是一门工程;因为科学和工程都是把已经解决的问题作为经验/定理,供大家重复使用;而软件开发更像是炒菜,就算是最有经验的大厨,每次的菜也都要重做,再详细菜谱也无法保证炒出一样的味道;环境,时间,材料甚至大厨心情的都会对味道有影响。更糟糕的是,至少做菜的材料和过程是可见的,软件开发的过程是不可见的,你看到的只是设计人员写了一堆菜谱,程序员不停的把代码仍到锅里,而这些好像和最后那道菜都没啥关系。

牢记这一点,这才是软件开发的本质,任何希望用既定的计划去约束这个过程,任何希望用代码工人和管理流程代替开发人员的自主性和创造性的努力都将失败;软件开发永远在设计,就像陆远说的:每个厨子都是一名设计师。

101809373

我要说的是:不会做菜的程序员不是好设计师 … … 但至少我们都是设计师,不是编码工人。


请关注微信公众号 【devopshub】,获取更多关于DevOps研发运维一体化的信息

qrcode_for_gh_b7c158df1fd1_430