发信人: zhaoce (米高蜥蜴), 信区: Java
标 题: 从软件工程和计算机科学说开去
发信站: BBS 未名空间站 (Wed Feb 1 15:12:09 2012, 美东)
今天把美工的需求压给外包去做了
忙里偷闲,有点时间,敲点字
说说java
先从软件工程和计算机科学的差异说起
不知道其它学校是怎么设置专业的
但是在我们学校,cs系里面只有两个major,一个是软件工程,另外一个就是传统的cs
cs不仅仅在cs系里面有,数学系也有cs的major
但是软件工程这个major只有cs里面有
看软件工程这个东西的历史,你会发现
它诞生的时候就是计算机行当发生巨大危机,几乎发展不下去的时候
ibm一个1000人左右的团队,就已经算是“超大型”的项目了
这在今天是不可想象的,今天超过1000人以上的项目随处可见
而在当时,这几乎就已经到了合作的极限了
其实传统的cs压根不是工程学这种应用科学,而是数学
因为cs捣腾的是算法,是数学,真正的数学系里面
最优秀的人搞的都是几何,代数,分析
这个层次是数学理论层次,也就是基础数学major干的事
次优秀的去搞统计,统计已经是应用数学,包括统计极其以下搞的都是应用数学
数学系里面长期有搞理论的看不起搞应用的说法,因为名声都是搞理论的拿去
剩下的去搞应用的都是去套利之辈,所以到了统计,女生的比例陡然升高
因为虽然证明很难,但是用起来实在是不难
搞理论和搞统计都不行的,去搞计算数学,计算数学就是搞算法那些东西
后来衍生出了一个行当,叫做cs,所以今天的cs就是从这个行当搞出来的
最早就是为了捣腾计算,为了方便计算而搞出来的一个学科
所以统计major还需要学学数学分析,而到了计算数学和cs这个major
干脆连数学分析都不学了,因为彻底用不上了
既然到了应用领域,那么随之而来的就是各种工程学所普遍遇到的问题
也就是如何协作才能更有效率,一般来说
沟通成本跟团队人数的数量是呈指数相关
也就是说,随着团队人数的增多,沟通成本会呈指数级上升
两个人的合作跟100个人的合作沟通成本的差异不仅仅是50倍的差异,而很有可能是e^
50倍的差异
所以1000人的团队就很容易变成“超大型”的项目
幸运的是,人类发展的历史过程中不仅仅只有数学,还有物理,应用物理造就了工程学
所以当计算机发展到这个瓶颈的时候,有足够的经验可以直接套用
所以发展出了计算机工程和软件工程这两个major
前者在ee那个系里面,后者还是留在cs系里面
那么如何降低沟通成本成了首要任务,这个时候其实软件工程已经脱离了传统的cs领域
也就是数学领域,软件工程这个major已经不再强调数学,而强调对其他学科知识的应用
不是说数学不重要,而是重要性退步了,变得不是最重要的了
最重要的是如何协作,所以同时诞生了有各种新生事物
比如面向对象和模块化,这些东西的本意都是为了降低沟通成本
所谓降低沟通成本就是说,我不想也不需要知道你在干什么,我只需要知道你能给我什
么就够了
顶多我再处理一下,如果你给我的不能满足我的要求,我该怎么办
至于你如何实现的?关我屁事
这是软件工程和计算机科学的核心差异
计算机科学是科学,丫的计算机每天捣腾的就是探索宇宙的秘密,如何实现不重要,关
键是能不能实现
以及为什么能实现,所以这一定关你事
而软件工程是工程,丫的讲究的是协作,关键是不是能不能实现,而是如何更好地实现
至于为什么能实现,这就可以不关你屁事了
所以面向对象特别重要,因为封装了他人的工作,降低了沟通的成本
所以java才这么流行,当然这是java流行的一方面,另外一方面是因为它的语法跟c接近
大部分流行过的高级语言都是c like的
所以封装很重要,所以当你在学习java的时候,你应该想到的是如何去利用别人的工作
成果
而不是去把别人做过的给再做一遍,这是十分愚蠢而又装逼的
因为你真要装逼,去数学系,到时候就怕你会觉得自己蠢得无可药救
要是不想装逼,那就不要浪费时间去看别人的源码,因为搞懂别人的源码所耗费的时间
还比不不上你自己去写一个来得快,但是要看文档,javadoc要熟练,这是别人用来降
低沟通成本的努力
所以你学spring也好,学jboss也罢,都不要去看源代码,直接做实例学习
源码有空再看,当然这里面有一定风险,那就是如果错了怎么办?
错误是工程的一部分,不存在没有错误的项目
一定会有,不要指望你一下子就能搞定所有问题,完成大部分,小部分的慢慢改
整体构架不要变形,大方向对,小细节可以放一放
而且我们还有一个环节叫做测试,其实java的相关几乎就是软件工程所有环节的最好体现
你会发现需求其实是最难搞定的,需求搞定了之后,后续的环节会变得无比可爱
如果需求搞得不三不四的,那后面你就等着哭吧,这个星球上一半以上的项目都是失败的
一个经典的面试题就是,你认为软件工程各个环节最难的是哪一个?
标准答案一定是越靠前的越难,越靠后的越简单
做过项目的人应该都清楚,业务需求一变,杀人的心都有
这就能解释为什么软件工程强调其他学科的知识,而不是数学
在现实生活中,最普遍的数学应用一般都会在金融领域优先体现
因为银行业是一个国家的命脉,所有行当都要跟银行业打交道
所以无论是统计还是软件工程,都在business里面有对应的应用学科,前者是精算
后者是business系里面有一个major叫做information system
这个major是专门用来跟it里面软件工程major相挂钩的一个专业
这个major每天教学生的就是如何转换业务需求成it能够看得懂的方式
所以有空去了解了解business的知识对于你找工作也好,升迁也罢都是大有帮助的
所以学完了java,求职最理想的去处也是银行,只不过这个银行不是投行
而是各个商业银行,汇丰,花旗这种,这些银行都有自己的it部门,甚至很多是it子公司
比如汇丰电子
然后这个时候有一个核心问题,就是保密的问题
你设想一下,如果一个银行的核心技术掌握在某一家it公司手里会有什么后果?
银行那些鬼精的人会上这个当么?
所以在很早以前,就有无数的人冲击sun,要求sun开放java源代码
后来当sun宣布java开源的时候,无数的人欢呼雀跃
sun作为一家商业公司是不合格的,但是作为一家大学的研究机构,却是非常称职的
然后说说商业公司,一个public商业公司存在目的是什么?
很简单,最大化商业公司的价值,这是教科书上的标准答案
这也是股东的利益所在,否则没有人会愿意购买这家公司的股票了
所以追功逐利是一家商业公司一定要做的事,否则董事会会直接把ceo赶走
就像对付jobs一样,给我滚
所以如果一个it公司掌握了银行的定价权之后,它会怎么做?
只要有利润,它一定会毫不客气地挥起屠刀
幸运的是,这个星球上还有一个东西叫做开源
感谢这些共产主义者的努力,使得我们不再受制于人
你要收费?我换
但是开源是否绝对靠谱?
well,作为长期持有左倾思想的人,我始终相信一点
那就是,群众的智慧是无穷的
不过这个星球上还有另外一群人
就是不掏钱买东西,他就浑身不自在,觉得这个不可信
一定要掏钱买了别人的东西,他才感觉舒服
事实上这种匪夷所思违背常理的动物的存在本身也是一大奇迹
任何一个资本家遇到这种动物,做梦都会笑醒来,一只长得肥厚膘肉嗷嗷待宰的猪啊
事实上开源的存在对于软件工程是有利的
因为开源往往不会开到商业逻辑去,你见过什么开源的银行前台软件?或者是开源的精
算软件?不是没有
但是现实的复杂性让人们很难对这些经常性变化的需求做出一个普适性的软件
而且搞it的有几个懂business的?就算做出来了,其它人有几个能看懂的?看懂的里面
又有几个愿意贡献的?
如果再看其它领域,什么物流,化工,交通等领域就更少了
事实上开源的真正冲击是对那些搞传统cs那些搞系统软件的
想想现在有多少已经开源的,db,os,appserver遍地都是
这些都曾经是长期用来给那些搞cs的混饭吃的产品
现在还剩下几家公司在搞db?几家搞os?
应用软件也好不到哪去
以前用来赚钱的browser现在就干脆没有公司用来收费了,类似的还有ftp软件,im聊天
软件……
这些领域大部分搞it的都多少懂一点,而他们里面有的是开源的爱好者
先说到这里,下次再说说为什么你不要去“学”一些东西,比如.net
事实上你说你去学本身就是一个joke,同一个公司的产品,用户界面完全可以傻瓜化
学.net就跟说去学用bt下黄片一样可笑,开源的很多产品也不需要“学”
只是说开源的产品傻瓜化的进度慢一点而已,但是也快了
都是工具,要理解什么时候用,怎么用,剩下的……
快,装逼犯,是你登场的时候了,来,说说回字有几种写法
标 题: 从软件工程和计算机科学说开去
发信站: BBS 未名空间站 (Wed Feb 1 15:12:09 2012, 美东)
今天把美工的需求压给外包去做了
忙里偷闲,有点时间,敲点字
说说java
先从软件工程和计算机科学的差异说起
不知道其它学校是怎么设置专业的
但是在我们学校,cs系里面只有两个major,一个是软件工程,另外一个就是传统的cs
cs不仅仅在cs系里面有,数学系也有cs的major
但是软件工程这个major只有cs里面有
看软件工程这个东西的历史,你会发现
它诞生的时候就是计算机行当发生巨大危机,几乎发展不下去的时候
ibm一个1000人左右的团队,就已经算是“超大型”的项目了
这在今天是不可想象的,今天超过1000人以上的项目随处可见
而在当时,这几乎就已经到了合作的极限了
其实传统的cs压根不是工程学这种应用科学,而是数学
因为cs捣腾的是算法,是数学,真正的数学系里面
最优秀的人搞的都是几何,代数,分析
这个层次是数学理论层次,也就是基础数学major干的事
次优秀的去搞统计,统计已经是应用数学,包括统计极其以下搞的都是应用数学
数学系里面长期有搞理论的看不起搞应用的说法,因为名声都是搞理论的拿去
剩下的去搞应用的都是去套利之辈,所以到了统计,女生的比例陡然升高
因为虽然证明很难,但是用起来实在是不难
搞理论和搞统计都不行的,去搞计算数学,计算数学就是搞算法那些东西
后来衍生出了一个行当,叫做cs,所以今天的cs就是从这个行当搞出来的
最早就是为了捣腾计算,为了方便计算而搞出来的一个学科
所以统计major还需要学学数学分析,而到了计算数学和cs这个major
干脆连数学分析都不学了,因为彻底用不上了
既然到了应用领域,那么随之而来的就是各种工程学所普遍遇到的问题
也就是如何协作才能更有效率,一般来说
沟通成本跟团队人数的数量是呈指数相关
也就是说,随着团队人数的增多,沟通成本会呈指数级上升
两个人的合作跟100个人的合作沟通成本的差异不仅仅是50倍的差异,而很有可能是e^
50倍的差异
所以1000人的团队就很容易变成“超大型”的项目
幸运的是,人类发展的历史过程中不仅仅只有数学,还有物理,应用物理造就了工程学
所以当计算机发展到这个瓶颈的时候,有足够的经验可以直接套用
所以发展出了计算机工程和软件工程这两个major
前者在ee那个系里面,后者还是留在cs系里面
那么如何降低沟通成本成了首要任务,这个时候其实软件工程已经脱离了传统的cs领域
也就是数学领域,软件工程这个major已经不再强调数学,而强调对其他学科知识的应用
不是说数学不重要,而是重要性退步了,变得不是最重要的了
最重要的是如何协作,所以同时诞生了有各种新生事物
比如面向对象和模块化,这些东西的本意都是为了降低沟通成本
所谓降低沟通成本就是说,我不想也不需要知道你在干什么,我只需要知道你能给我什
么就够了
顶多我再处理一下,如果你给我的不能满足我的要求,我该怎么办
至于你如何实现的?关我屁事
这是软件工程和计算机科学的核心差异
计算机科学是科学,丫的计算机每天捣腾的就是探索宇宙的秘密,如何实现不重要,关
键是能不能实现
以及为什么能实现,所以这一定关你事
而软件工程是工程,丫的讲究的是协作,关键是不是能不能实现,而是如何更好地实现
至于为什么能实现,这就可以不关你屁事了
所以面向对象特别重要,因为封装了他人的工作,降低了沟通的成本
所以java才这么流行,当然这是java流行的一方面,另外一方面是因为它的语法跟c接近
大部分流行过的高级语言都是c like的
所以封装很重要,所以当你在学习java的时候,你应该想到的是如何去利用别人的工作
成果
而不是去把别人做过的给再做一遍,这是十分愚蠢而又装逼的
因为你真要装逼,去数学系,到时候就怕你会觉得自己蠢得无可药救
要是不想装逼,那就不要浪费时间去看别人的源码,因为搞懂别人的源码所耗费的时间
还比不不上你自己去写一个来得快,但是要看文档,javadoc要熟练,这是别人用来降
低沟通成本的努力
所以你学spring也好,学jboss也罢,都不要去看源代码,直接做实例学习
源码有空再看,当然这里面有一定风险,那就是如果错了怎么办?
错误是工程的一部分,不存在没有错误的项目
一定会有,不要指望你一下子就能搞定所有问题,完成大部分,小部分的慢慢改
整体构架不要变形,大方向对,小细节可以放一放
而且我们还有一个环节叫做测试,其实java的相关几乎就是软件工程所有环节的最好体现
你会发现需求其实是最难搞定的,需求搞定了之后,后续的环节会变得无比可爱
如果需求搞得不三不四的,那后面你就等着哭吧,这个星球上一半以上的项目都是失败的
一个经典的面试题就是,你认为软件工程各个环节最难的是哪一个?
标准答案一定是越靠前的越难,越靠后的越简单
做过项目的人应该都清楚,业务需求一变,杀人的心都有
这就能解释为什么软件工程强调其他学科的知识,而不是数学
在现实生活中,最普遍的数学应用一般都会在金融领域优先体现
因为银行业是一个国家的命脉,所有行当都要跟银行业打交道
所以无论是统计还是软件工程,都在business里面有对应的应用学科,前者是精算
后者是business系里面有一个major叫做information system
这个major是专门用来跟it里面软件工程major相挂钩的一个专业
这个major每天教学生的就是如何转换业务需求成it能够看得懂的方式
所以有空去了解了解business的知识对于你找工作也好,升迁也罢都是大有帮助的
所以学完了java,求职最理想的去处也是银行,只不过这个银行不是投行
而是各个商业银行,汇丰,花旗这种,这些银行都有自己的it部门,甚至很多是it子公司
比如汇丰电子
然后这个时候有一个核心问题,就是保密的问题
你设想一下,如果一个银行的核心技术掌握在某一家it公司手里会有什么后果?
银行那些鬼精的人会上这个当么?
所以在很早以前,就有无数的人冲击sun,要求sun开放java源代码
后来当sun宣布java开源的时候,无数的人欢呼雀跃
sun作为一家商业公司是不合格的,但是作为一家大学的研究机构,却是非常称职的
然后说说商业公司,一个public商业公司存在目的是什么?
很简单,最大化商业公司的价值,这是教科书上的标准答案
这也是股东的利益所在,否则没有人会愿意购买这家公司的股票了
所以追功逐利是一家商业公司一定要做的事,否则董事会会直接把ceo赶走
就像对付jobs一样,给我滚
所以如果一个it公司掌握了银行的定价权之后,它会怎么做?
只要有利润,它一定会毫不客气地挥起屠刀
幸运的是,这个星球上还有一个东西叫做开源
感谢这些共产主义者的努力,使得我们不再受制于人
你要收费?我换
但是开源是否绝对靠谱?
well,作为长期持有左倾思想的人,我始终相信一点
那就是,群众的智慧是无穷的
不过这个星球上还有另外一群人
就是不掏钱买东西,他就浑身不自在,觉得这个不可信
一定要掏钱买了别人的东西,他才感觉舒服
事实上这种匪夷所思违背常理的动物的存在本身也是一大奇迹
任何一个资本家遇到这种动物,做梦都会笑醒来,一只长得肥厚膘肉嗷嗷待宰的猪啊
事实上开源的存在对于软件工程是有利的
因为开源往往不会开到商业逻辑去,你见过什么开源的银行前台软件?或者是开源的精
算软件?不是没有
但是现实的复杂性让人们很难对这些经常性变化的需求做出一个普适性的软件
而且搞it的有几个懂business的?就算做出来了,其它人有几个能看懂的?看懂的里面
又有几个愿意贡献的?
如果再看其它领域,什么物流,化工,交通等领域就更少了
事实上开源的真正冲击是对那些搞传统cs那些搞系统软件的
想想现在有多少已经开源的,db,os,appserver遍地都是
这些都曾经是长期用来给那些搞cs的混饭吃的产品
现在还剩下几家公司在搞db?几家搞os?
应用软件也好不到哪去
以前用来赚钱的browser现在就干脆没有公司用来收费了,类似的还有ftp软件,im聊天
软件……
这些领域大部分搞it的都多少懂一点,而他们里面有的是开源的爱好者
先说到这里,下次再说说为什么你不要去“学”一些东西,比如.net
事实上你说你去学本身就是一个joke,同一个公司的产品,用户界面完全可以傻瓜化
学.net就跟说去学用bt下黄片一样可笑,开源的很多产品也不需要“学”
只是说开源的产品傻瓜化的进度慢一点而已,但是也快了
都是工具,要理解什么时候用,怎么用,剩下的……
快,装逼犯,是你登场的时候了,来,说说回字有几种写法
发信人: rightback (就回), 信区: Java
ReplyDelete标 题: Re: 从软件工程和计算机科学说开去
发信站: BBS 未名空间站 (Thu Feb 2 04:29:56 2012, 美东)
随便点进来的,所以不知道 context,见谅。其实 lz 论点没什么大意见,就是细节、
论据方面有些实在难以认同(有些太离谱)。(我本人目前用 java 开发apache open
source projects)。实在忍不住瞎说以下。
> 今天超过1000人以上的项目随处可见
what!! 能举个例子吗?除了ms我不了解外,从没听说过上千人的软件项目,上百人的
都很少耳闻。相反,现在的趋势是用越来越少的人,在最短的时间内,实现最重要的功
能。比如fb, google 经常吹嘘的,某个新的项目是5-6个devs 在6个月内实现的。对现
代软件工业来说,十几个月还做不出东西,就该被cancel 掉。
现在公司里,应该很少人fan 传统软件工程这玩意了。基本共识是,富士通那套人海战
术,在软件开发上行不通,人越多越没戏。
> 你设想一下,如果一个银行的核心技术掌握在某一家it公司手里会有什么后果?
> 银行那些鬼精的人会上这个当么?
银行最爱的不就是ibm吗?无论中国,美国。对banks 来说,都是越close 越好。
> 不过这个星球上还有另外一群人
> 就是不掏钱买东西,他就浑身不自在,觉得这个不可信
> 一定要掏钱买了别人的东西,他才感觉舒服
> 事实上这种匪夷所思违背常理的动物的存在本身也是一大奇迹
> 任何一个资本家遇到这种动物,做梦都会笑醒来,一只长得肥厚膘肉嗷嗷待宰的猪啊
你太偏激。我本人现在工作中使用ubuntu, eclipse, ff, thunderbird, gcc, trac,
git, hudson 全是开源的,但我强烈反对你的观点。5%的人可以handle open source
tools(每次upgrade ubuntu 都很痛苦), 并不意味着可以说其他95%是``匪夷所思违
背常理的动物''。我觉得我买的ipad, mac 完全值的他们的价钱。
从另一个角度说,如果我开一个公司,我当然会花钱买ms enterprise系统(win
servers, exchange, office),买商业安全公司的security,and CRM, ERP, etc. 你
会用open source 搭建你的 enterprise 系统?谁能提供support?
> 这些都曾经是长期用来给那些搞cs的混饭吃的产品
> 现在还剩下几家公司在搞db?几家搞os?
oracle, ibm, ms 最赚钱的不是db, os吗? ios, android, macos 也是公司搞得呀。
open source 和商业软件并不是你死我活的关系,我们开发开源系统,后面也有商业区
动,并不是光为了当sb共产主义战士,砸别人砸自己的饭碗。
你也许不知道,open source projects 后多数有公司在支持,比如我现在做的是
apache 上最火的projects,开发者其实都是 yahoo, fb, 还有相关商业公司的全职员
工。
lz 要kick .net butt 我没意见,但一些说法、论据实在不准确。