chipset009 发表于 2023-7-31 22:23:43

开发一款大点的商业软件是一件极其困难的事!

先讲个古老的段子吧。

几十年前(操作系统还是DOS时代)不知道哪个大人物想对抗AutoCAD,于是纠集了从清华大学...至大连理工,十几所985高校联合起来开发一款独立自主,功能和AutoCAD类似的软件。教授博士生应有尽有,资金当然也是大手笔,历时十几年。这么庞大的阵容,却远远不是Autodesk Inc.当时才几十名程序员的对手...

其实现实中绝大多数高材生都写不了像样的程序,这就如同搞中文教学的教授和博士生比某某作家识字多却写不出某某文学作品一样的道理。更何况软件是一门工程,恰恰是纯搞理论的人士们最欠缺的东西。

基础软件一般是很难做的,例如,开发一款具有商业价值的编译器或操作系统难度肯定超过做火箭或者做核弹。打个比方,F35战斗机控制系统的源代码大约2千9百万行,仅在模拟器上调试这些程序至少会敲坏10万块键盘不止...体力尚且如此,智力活动就更不用说了...

拿路人皆知的高考作为比较吧,考名牌985获得什么状元,跟开发一款像样的软件比起来,难度可以忽略。因为软件要想很好的活下来需要做到世界第一,很多时候第一吃肉第二连汤都喝不上几口。题目再难也有人会,因为考试都是已知的东西。开发一款软件会遇到太多未知的东西,需要很多创新。形式上,考试都是个人“英雄主义”,开发软件则是集体作战,每人都得“强”而且优势互补。持续时间上,考试完后可以如释重担再不用理会过去,软件则需一年又一年的持续迭代升级下去。

举例容易明白。例如操作系统,Windows在PC上占绝对优势,iOS小众,免费的Linux连3%都不到...再如Office,Microsoft Office第一,第二是谁已经不重要(LibreOffice, OpenOffice,WPS...),即使免费也没多少人用。再如PDF编辑器,Adobe占据92%以上份额,其余十几家合起来市场份额还不足8%...这是一般软件,专业软件更是残酷,例如前面说的AutoCAD,业界几乎没有对手,第二名根本就活不下去!

敲字太苦,网上搜一下,果然有文笔功厚人士,直接贴过来,https://www.zhihu.com/question/22508677/answer/956755281

--------------------分割线----------------------

买苹果

普通人:

我今天要买一斤苹果。

程序员:

我今天要买一斤苹果。

因为我只喜欢红富士苹果,所以我只买红富士苹果。

我能接受的最高价格是10元/斤。

正常情况下一斤苹果用一个袋子能装下,但是为防万一,我会带两个袋子。

我知道附近的3家水果店,所以我会依次访问这3家水果店。

根据上述条件,我设计出以下的买苹果的流程:

买苹果流程开始
    对水果店0、水果店1、水果店2依次执行:
    拜访一家水果店流程开始
      走到此水果店
      如果此水果店没有开门,则结束当前的“拜访一家水果店流程”
      如果此水果店没有苹果,则结束当前的“拜访一家水果店流程”
      如果此水果店的苹果当中没有红富士苹果,则结束当前的“拜访一家水果店流程”
      如果此水果店的红富士苹果剩余不到一斤,则结束当前的“拜访一家水果店流程”
      如果此水果店的红富士苹果的价格高于10元/斤,则执行3次:
      讲价流程开始
            询问店主是否愿意将价格降到10元/斤或更低
            如果店主愿意,则跳过剩余的“讲价流程”
      讲价流程结束
      如果此水果店的红富士苹果的价格仍然高于10元/斤,则结束当前的“拜访一家水果店流程”
      打开一个袋子,将其作为当前的袋子
      重复执行以下流程,直到总重量大于一斤:
      装袋一个苹果流程开始
            从所有的不在袋子中的红富士苹果中选出最好的一个
            如果此苹果能装入当前的袋子,则将此苹果装入当前的袋子,否则执行:
            换袋子流程开始
                如果我有剩余的袋子,则从中任意选出一个并作为当前的袋子,否则执行:
                向店主要袋子流程开始
                  向店主索要一个袋子
                  如果店主拒绝给我袋子,则将我的所有袋子里的所有苹果取出,然后结束当前的“拜访一家水果店流程”
                  将店主给我的袋子作为当前的袋子
                向店主要袋子流程结束
            换袋子流程结束
            测量我的所有袋子里的所有苹果的总重量
      装袋一个苹果流程结束
      根据我的所有袋子里的所有苹果的总重量和店主给出的价格,计算我应付的价格
      向店主询问我应付的价格
      如果我不接受店主索要的价格,则执行3次:
      校对流程开始
            向店主解释我计算出的价格,并询问其是否同意
            如果店主同意,则跳过剩余的“校对流程”
      校对流程结束
      如果我仍然不接受店主索要的价格,则将我的所有袋子里的所有苹果取出,然后结束当前的“拜访一家水果店流程”
      如果我没带钱,则将我的所有袋子里的所有苹果取出,然后结束当前的“拜访一家水果店流程”
      付钱拿走苹果
      跳过剩余的“拜访一家水果店流程”
    拜访一家水果店流程结束
买苹果流程结束
这个流程怎么样?我来设计一些测试样例,测试一下这个流程。

测试发现一个问题:如果水果店0和水果店1都有红富士苹果并且价格都低于10元/斤,而且水果店1的价格比水果店0更低,那么我希望买水果店1的苹果,但我设计的流程会让我买水果店0的苹果。

为了解决这个问题,我应该先询问所有水果店的价格,然后去价格最低的那一家买苹果。

经过修改,我重新设计出以下的买苹果的流程:

买苹果流程开始
    对水果店0、水果店1、水果店2依次执行:
    询问一家水果店的红富士价格流程开始
      走到此水果店
      如果此水果店没有开门,则视此水果店的红富士价格为无穷大元/斤,并结束当前的“询问一家水果店的红富士价格流程”
      如果此水果店没有苹果,则视此水果店的红富士价格为无穷大元/斤,并结束当前的“询问一家水果店的红富士价格流程”
      如果此水果店的苹果当中没有红富士苹果,则视此水果店的红富士价格为无穷大元/斤,并结束当前的“询问一家水果店的红富士价格流程”
      如果此水果店的红富士苹果剩余不到一斤,则视此水果店的红富士价格为无穷大元/斤,并结束当前的“询问一家水果店的红富士价格流程”
      向店主询问此水果店的红富士苹果价格并记录
    询问一家水果店的红富士价格流程结束
    从3家水果店中选出红富士价格最低的一家(如果有并列则随机选择),将其作为目标水果店
    如果目标水果店的红富士苹果价格为无穷大元/斤,则结束当前的“买苹果流程”
    走到目标水果店
    如果此水果店的红富士苹果的价格高于10元/斤,则执行3次:
    讲价流程开始
      询问店主是否愿意将价格降到10元/斤或更低
      如果店主愿意,则跳过剩余的“讲价流程”
    讲价流程结束
    如果此水果店的红富士苹果的价格仍然高于10元/斤,则结束当前的“买苹果流程”
    打开一个袋子,将其作为当前的袋子
    重复执行以下流程,直到总重量大于一斤:
    装袋一个苹果流程开始
      从所有的不在袋子中的红富士苹果中选出最好的一个
      如果此苹果能装入当前的袋子,则将此苹果装入当前的袋子,否则执行:
      换袋子流程开始
            如果我有剩余的袋子,则从中任意选出一个并作为当前的袋子,否则执行:
            向店主要袋子流程开始
                向店主索要一个袋子
                如果店主拒绝给我袋子,则将我的所有袋子里的所有苹果取出,然后结束当前的“买苹果流程”
                将店主给我的袋子作为当前的袋子
            向店主要袋子流程结束
      换袋子流程结束
      测量我的所有袋子里的所有苹果的总重量
    装袋一个苹果流程结束
    根据我的所有袋子里的所有苹果的总重量和店主给出的价格,计算我应付的价格
    向店主询问我应付的价格
    如果我不接受店主索要的价格,则执行3次:
    校对流程开始
      向店主解释我计算出的价格,并询问其是否同意
      如果店主同意,则跳过剩余的“校对流程”
    校对流程结束
    如果我仍然不接受店主索要的价格,则将我的所有袋子里的所有苹果取出,然后结束当前的“买苹果流程”
    如果我没带钱,则将我的所有袋子里的所有苹果取出,然后结束当前的“买苹果流程”
    付钱拿走苹果
买苹果流程结束
现在这个流程是不是完美了呢?不是,我还能发现很多问题。
如果3家水果店都有红富士苹果但都不到一斤,但是三家店加起来能达到一斤,那么我不应该结束流程回家,而是应该把三家店的红富士苹果都买下来。
如果我向水果店询问价格的时候这家店还有红富士苹果,但我询问完所有水果店的价格后这家店的红富士苹果卖完了,那么我的流程会让我试图处理不存在的红富士苹果。
我走路的过程中可能会遇到突发事件,比如发现了新的水果店,比如袋子破掉了苹果掉一地,对于这些情况我的流程都无法进行处理。

啊问题太多了我懒得再改流程了。我还是去X宝买吧。
那么接下来我要设计一个在X宝买红富士苹果的流程……


打鸟


某日,老师在课堂上想考考学生们的智商,就问一个男孩: “树上有十只鸟,开枪打死一只,还剩几只?”
  男孩反问:“是无声手枪,还是其他没有声音的枪么?”
  “不是.”
  “枪声有多大?”
  “80~100 分贝.”
  “那就是说会震的耳朵疼?”
  “是.”
  “在这个城市里打鸟犯不犯法?”
  ‘不犯.”
  “您确定那只鸟真的被打死啦?”
  “确定.”老师已经不耐烦了,”拜托,你告诉我还剩几只就行了,OK?”
  “OK.鸟里有没有聋子?”
  “没有.”
  “有没有鸟智力有问题,呆傻到听到枪响不知道飞的?”
  “没有,智商都在 200 以上!”
  “有没有关在笼子里的?”
  “没有.”
  “边上还有没有其他的树,树上还有没有其他鸟?”
  “没有.” “方圆十里呢?” “就这么一棵树!”
  “有没有残疾或饿的飞不动的鸟?”
  “没有,都身体倍棒.”
  “算不算怀孕肚子里的小鸟?”
  “都是公的.”
  “都不可能怀孕?”
  “………,决不可能.”
  “打鸟的人眼里有没有花?保证是十只?”
  “没有花,就十只.” 老师脑门上的汗已经流下来了,
  下课铃响起,但男孩仍继续问:“有没有傻的不怕死的?”
  “都怕死.”
  “有没有因为情侣被打中,自己留下来的?”
  “笨蛋,之前不是说都是公的嘛!”
  “同性恋可不可以啊?”
  “………….,性取向都很正常!”
  “会不会一枪打死两只?”
  “不会.”
  “一枪打死三只呢?”
  “不会.”
  “四只呢?”
  “更不会!”
  “五只呢?”
  “绝对不会!!!”
  “那六只总有可能吧?”
  “除非你他妈的是猪生的才有可能!一枪只能打死一只!”
  “…好吧,那么所有的鸟都可以自由活动么?”
  “完全可以.”
  “它们受到惊吓起飞时会不会惊慌失措而互相撞上?”
  “不会,每只鸟都装有卫星导航系统,而且可以自动飞行.”
  “恩,如果您的回答没有骗人,”学生满怀信心的回答,“打死的鸟要是挂在树上没掉下来,那么就剩一只,如果掉下来,就一只不剩.”
  老师推推眼镜,强忍着要昏倒的感觉,颤抖地说道:“你可以去当程序员了……”

测试

一个测试工程师走进一家酒吧,要了一杯啤酒
一个测试工程师走进一家酒吧,要了一杯咖啡
一个测试工程师走进一家酒吧,要了0.7杯啤酒
一个测试工程师走进一家酒吧,要了-1杯啤酒
一个测试工程师走进一家酒吧,要了2^32杯啤酒
一个测试工程师走进一家酒吧,要了一杯洗脚水
一个测试工程师走进一家酒吧,要了一杯蜥蜴
一个测试工程师走进一家酒吧,要了一份asdfQwer@24dg!&*(@
一个测试工程师走进一家酒吧,什么也没要
一个测试工程师走进一家酒吧,又走出去又从窗户进来又从后门出去从下水道钻进来
一个测试工程师走进一家酒吧,又走出去又进来又出去又进来又出去,最后在外面把老板打了一顿
一个测试工程师走进一家酒吧,要了一杯烫烫烫的锟斤拷
一个测试工程师走进一家酒吧,要了NaN杯Null
一个测试工程师冲进一家酒吧,要了500T啤酒咖啡洗脚水野猫狼牙棒奶茶
一个测试工程师把酒吧拆了
一个测试工程师化装成老板走进一家酒吧,要了500杯啤酒并且不付钱
一万个测试工程师在酒吧门外呼啸而过
一个测试工程师走进一家酒吧,要了一杯啤酒';DROP TABLE 酒吧
测试工程师们满意地离开了酒吧。
然后一名顾客点了一份炒饭,酒吧炸了...

juley 发表于 2023-8-1 10:13:01

程序代码必须具备一定的功能,否则就是无效代码。

代码的功能分两类,一类是实现功能。另一类是非实现非功能。

实现功能是算法,这部分是数学家的工作,然后程序员把算法用代码表达出来。这部分代码在程序中运行,实现程序的功能,如同工厂的工人。

非实现非功能是异常状况处理,不允许功能之外的结果出现,这部分是程序员自己思考的工作,保证算法代码正确运行,如同维护治安的人员。

大的商业软件重点在于架构,在于算法模型,这些工作本身不属于程序员。用程序员的思维开发这些软件肯定是不行的。

chipset009 发表于 2023-8-1 10:10:25

jlfzx 发表于 2023-7-31 23:17
目前矿石论坛后台数据库应该是MySQL

Mysql之父-Monty Widenius   大学都没有毕业就辍学了


创造力很多时候不是靠教育出来的,而是天生的。看看那些知名小说作者,识字水平肯定比不过语文老师,但有几个语文教师写出过哪怕一部知名小说?

软件行业比金字塔还金字塔,太多时候是“千军易得,一将难求”。微软想做Windows挖的DEC的David Cutler,否则哪来Windows?微软起初全靠挖墙脚,把Borland都挖黄了…再如,龙芯为了能执行不同的指令,当时想过解释执行。调查了一下相关JAVA技术,国内大约有600万Java程序员,技术含量高在JAVA虚拟机,懂JAVA虚拟机的低于6个,这还只是“懂”,距离做出来还有十万八千里!

chipset009 发表于 2023-8-10 14:54:58

往事已去 发表于 2023-8-10 08:53
那美国的五年级学啥?

奥巴马之前没有统一教材,各州不一样…不过一般就是语文,数学,科学,社科。语文就是英语啦。

奥巴马之后有了统一教材指导,不过教材还是五花八门。我只看过两种版本,总体来说都非常厚,比咱们课本厚很多。语文1K页水平,数学700-800左右,科学500-600左右,社科我没看过。

语文跟咱们完全不是一个基调,科技文比例1/5-1/4左右,其余都是各国故事,政治文也有,都是号召人们起来争取权利,还有就是时代性质的文章,辩论啦,跟人相处啦,体育赛事啦,偶尔也有话剧和诗歌。所有文章基调全部是励志。

数学其中大约一半是理论,另一半是随堂练习题。题目也是五花八门,很多是生活琐事和科技最新发展,看上去很像读故事,题目难度总体不大,给人的感觉像放养。

科学教材讲究精确,编者名单好几页,教授一大堆。内容上,比我们的科学教材难度大很多倍。感觉就像把我们中学的生物,物理,地理都下放到小学科学课本里了。每章后面都有职业生涯介绍,给人的感觉就是培养兴趣。

ssffzz1 发表于 2023-7-31 22:57:54

LinusTorvalds,当时肯定没想这么多。

我们只不过是自己不会,又不想承认。但是我们也知道害臊。于是就往脸上擦粉,久而久之,竟然擦出来一个厚厚的硬壳。

girlexplorer 发表于 2023-7-31 22:38:39

本帖最后由 girlexplorer 于 2023-7-31 22:48 编辑

这种大型商业软件的难度,和工程软件相比,相差很远。
这种商业软件,主要是复杂,需要很多人密切配合,但技术含量不高。软件架构很重要。

工程软件:常见的matlab,三大eda。
工程软件,编程工作量估计占5%,公式工作量估计占95%,
而且,编程技术含量比写公式的技术含量低n个数量级。

大学毕业编程就能凑合了,现代cpu过剩,内存白菜价,也不用讲究代码的精炼。
但是,大学毕业,远远写不出公式。



ssffzz1 发表于 2023-7-31 22:52:13

"
F35战斗机控制系统的源代码大约2千9百万行
"
这个数据可靠吗?

bis 发表于 2023-7-31 22:53:12

girlexplorer 发表于 2023-7-31 23:15:13

操作系统开发也不容易,需要两点:
1,首席软件架构师。
2,团队协作。

团队协作尤其难,需要每个程序员讲究职业道德,一个程序员写的代码,其它程序员看一眼就能看懂。

很多程序员本身就没有好的编程习惯,再加上有意不让别的程序员看懂,一个程序员写的代码,别的程序员看不懂,一旦这个程序员跳槽,代码优化、增加功能、查bug等都无法进行。

盖茨曾亲自检查代码,一旦程序员写的不规范或有bug,立马挨批。



jlfzx 发表于 2023-7-31 23:17:20

本帖最后由 jlfzx 于 2023-7-31 23:21 编辑

目前矿石论坛后台数据库应该是MySQL

Mysql之父-Monty Widenius   大学都没有毕业就辍学了:lol

当时他也没想太多,只是低头干活。

这人要是在国内估计。。。。。。。。。



小花猫长高了 发表于 2023-8-1 00:36:46

据谣传,阿三的程序员很多。

往事已去 发表于 2023-8-1 08:39:28

看这些程序好弱智,可见学编程会降低智商损伤大脑:lol ,不是好事。但是不这样编还不行,要不然遇到意外情况就完了;P 。现在很多东西都需要程序,还是学会好,但是确实很烦,在人看来很不起眼的东西程序要写一堆。曾经朋友在厕所地上发现一条老鼠偷鸡蛋留下的拖痕,心生疑惑:“老鼠为什么遇到坑会绕着走?而不是掉进坑里?”:lol 还说了个相关的问题:鸟孵蛋的时候把蛋换掉它会继续孵,超期了仍然孵。这就是孵蛋程序中少了条程序;P 。老鼠偷蛋好像高级,实际上是动物生存需要的基本操作,但是编程的话不知道需要多少行代码?

ssffzz1 发表于 2023-8-1 09:24:14

往事已去 发表于 2023-8-1 08:39
看这些程序好弱智,可见学编程会降低智商损伤大脑 ,不是好事。但是不这样编还不行,要不然遇到意外情 ...

所以我不看好人工智能,至少是当前阶段。

chipset009 发表于 2023-8-1 09:28:44

girlexplorer 发表于 2023-7-31 22:38
这种大型商业软件的难度,和工程软件相比,相差很远。
这种商业软件,主要是复杂,需要很多人密切配合,但 ...

你说的外包或者网页那类的吧,拼人头就行了,国内很多在做。

公式难度?开玩笑吧,再难的理论毛都算不上!

大学生?微软想做Windows Phone时鼓动40万大学生给他开发App。用过WP手机的人都知道,没有几款像样的App,而且还Bug无数…如果你要是觉得国内大学生比美帝大学生水平强太多,那当我没说…

chipset009 发表于 2023-8-1 09:30:58

ssffzz1 发表于 2023-7-31 22:52
"
F35战斗机控制系统的源代码大约2千9百万行
"


2900万,C++,系统用的Green Hills的RTOS Integrity 178-B微内核系统。

ssffzz1 发表于 2023-8-1 09:33:46

chipset009 发表于 2023-8-1 09:30
2900万,C++,系统用的Green Hills的RTOS Integrity 178-B微内核系统。

谢指教。看来这个系统很复杂了。这个量级的代码够一个操作系统了。

chipset009 发表于 2023-8-1 09:48:17

ssffzz1 发表于 2023-8-1 09:33
谢指教。看来这个系统很复杂了。这个量级的代码够一个操作系统了。

民用系统代码量都很大,内核本身没多大,文件系统,协议栈,无穷无尽的驱动,UI等等都是大块头,占了太多。Win7大约5千万,Linux 2千4百万不算UI,安卓也超过1千万。

随便个像样的程序代码量都不小。之前给宝马和大奔做车载导航,大约300万行C++,日系车也有250万-300万。手机上的App导航估计会小一些。
页: [1] 2 3 4 5 6
查看完整版本: 开发一款大点的商业软件是一件极其困难的事!