作者Aurim (Who cares?)
看板Soft_Job
标题Re: [请益] 请问学哪个比较实用
时间Wed Feb 24 09:46:37 2010
不同时期的人有不同看法吧。
当你的工作是OS/driver或比较大型的软体系统时,看到底下的#1,我想问:
哪时候才会没有问题发生呢?
小公司一个专案的bug编号了不起三位数、四位数,我会说你说得还好。
大公司一个长期维护的产品bug编号会是六、七位数以上,每天几百个人一起改code,
几乎每天都有固定数量以上的bug被提报,没问题发生就是要发生大事了。
如果你的工作大半都是在别人几天前、几星期前、几个月前写的code上抓bug,
某个程度上,你一定要知道别人、编译器、作业系统、硬体到底干了哪些事情的啊,
只是搞得多清楚的差别。
※ 引述《lgd1008 (lgd1008)》之铭言:
: 另外不必事事知道底层的例子, 可以参考自己与身旁同事的 program integration
: 你何时需要知道同事的实作细节? 太概就只有
: 1.问题发生的时侯, 2.交接的时侯, 3.想找东西学习的时侯...
: ※ 引述《lgd1008 (lgd1008)》之铭言:
: : 高阶语言不会是eye candy
: : 高阶语言compile出来之所以会比较慢/大, 是因为它引入的更多的附加物
你底下说的不一定,我都干过了,所以我不认为弄半天也没办法弄出那样的效能;
当然这感受是因人而异的。我会说那并不是什麽大不了的事情。
举个简单的例子,我高中时曾经用几个不同语言写阶乘计算的小东西来磨练自己,
目标是能够算出电脑记忆体能够允许的最多位数的阶乘。
这是个小题目,可是可以让一个人在已经做好的东西不断再去加强效能,
思考怎样可以让它跑得更快,比较各种手法的不同效率。
因为高阶语言的overhead,大数计算用组语作在执行效能上仍然会是最快的。
即使是今日,几乎天天在看微软的编译器生出来的机械码,我的意见不会改变。
凡事都有边际效益的差别,同样做个对照,低阶语言 vs. 高阶语言,C vs. Java:
Java JIT再怎麽强,跟C/C++生的原生code就是有效能差异。
就算单纯是一个固定比例的差异,10%来讲,当CPU时脉愈来愈高,
pipeline内能够同时执行的指令愈多,差那10%,可能代表的就是0.1 GFLOPS的差别。
实际上是差更多,我看过的一些案子就是,实际上处理的资料量明明就没那麽大,
可是因为garbage collection没办法那麽有效消化垃圾,应该是几台高档PC当server
跑起来应该要OK的东西,搞到要用很贵的机器来让客户觉得效能能够令人接受。
(几亿元的机器来跑,效能仍然令人不满意,只是可以接受而已)
关键在於你牺牲那些效能,能提高多少生产力,节省多少开发时间,
会不会有别的问题伴随而来?上面就提到了garbage collection的问题。
不同工具,适合的工作也不同。
: : 反过来说, 一些较复杂的algorithm, 或复杂的应用
: : 你用低阶语言也不一定做得出它的 performance
: : 因为光要做出与高阶语言特色能匹敌的library, 可能就是一件难事
: : 例如有些语言, 提供你不限大小的型别去做运算
: : 你用低阶语言去实作, 参考, 组合, 包装 .... 一些大数运算的library
: : 可能弄了半天都没有办法做出那样的 performance, 或写出相同简洁的程式.
: : 个人意见
我只是组语摸了20年,几个高阶语言跟VM的runtime library内部实作看透透,
在几个不同领域待过,一点浅见而已。
--
※ 发信站: 批踢踢实业坊(ptt.cc)
◆ From: 114.32.10.18
1F:→ iincho:问题在大部分的状况你的问题不是只有一个大数运算这种级数 02/24 10:51
2F:→ iincho:手工处理大量的组语的时候不见得会赢过在更上层花功夫的人 02/24 10:53
3F:→ yauhh:我认为你搞错论点了.声明一个语言不错,并不代表工作情况全都 02/24 10:53
4F:→ yauhh:套到那个语言上. 工作该做什麽,很多不是讲了就算数啊. 02/24 10:53
5F:→ yauhh:另外请问有没有看过像Lisp的底层呢?既然VM实作都"看透透" 02/24 10:54
6F:→ iincho:当然如果你的工作就是算Pi的话我想用组语刻可能最快啦..XD 02/24 10:55
7F:→ iincho:以现代软体工程的复杂度, 用组语最快除了tune performance 02/24 10:58
8F:→ iincho:在大部分的状况下, 这句话可以说是没有意义的.. 02/24 10:58
9F:→ TonyQ:但是话说回来,软体工程再怎麽复杂也逃不出工具的实做, 02/24 12:21
10F:→ TonyQ:tune performance 你我都很心知肚明在某些时候是很重要的.XD 02/24 12:21
11F:→ TonyQ:所以我认为他说「不同工具,适合的工作也不同」这点跟「牺牲 02/24 12:22
12F:→ TonyQ:效能换来多少生产力」这两点,他只是想说组语并没有该篇说的 02/24 12:23
13F:→ TonyQ:可以完全被编译器/最佳化取代吧 02/24 12:26
14F:→ iincho:我到不认为一定是牺牲效能, 假设把更多精力花在问题分析上 02/24 12:53
15F:→ iincho:你赚到的效能搞不好比那边弄组语快, 所以我说一定要tune 02/24 12:54
16F:→ iincho:这件事不一定是对的, 尤其在问题复杂度在某个级数以上... 02/24 12:54
17F:→ iincho:所以我认为用高阶语言 == 牺牲效能这件事不一定能成立 02/24 12:55
18F:→ iincho:某公司就发生过用组语手工刻SIMD刻输用C写的...XD 02/24 12:57
19F:→ remmurds:这篇不就是标准的老人思维吗? 02/24 20:53
20F:→ atst2:应该说是写东西给别人用,跟用别人写的东西,观点会不同. 02/24 21:40
21F:推 TonyQ:不一定能成立, 不过这或许也可以套你的话 , 02/25 14:31
22F:推 ggg12345:软体工程,写程式等不知道是否要考虑架构,把办公大楼盖成 02/25 16:59
23F:→ ggg12345:住家公寓,算那个环节的错?学习这类架构与需求的算实用吗? 02/25 17:07