※ 引述《godspeedlee (妳,我可以)》之铭言:
: 标题: Re: [讨论] n万行的code
: 时间: Thu Jul 21 22:19:17 2016
:
: ※ 引述《randomly (伦敦铁桥垮下来)》之铭言:
: : (帮以前同学代po)
: : 背景:四大资工硕,役退。
: : 同学最近才刚工作两三个月
: : 听他说一进公司,主管直接丢了一份project的source code给他
: : 原本负责这个project的前辈已经离职了,所以当时是由主管代职,
: : 这份source code林林总总大概有6~7万行
: : 主管表示:试用期过后,这份code之后就交给你maintain了
: : 所以他从第一天进公司开始每天都在看code
: : 三个月也一转眼过去了,
: : 刚刚吃饭听他说,上礼拜开会主管突然问他
: : “某case发生时会有bug,请问是在哪个function什么原因造成的?”
: : 同学自己也不熟,只好回说待会回去看一下再跟主管回报
: : 主管只丢了一句话就离开了:
: : “你前三个月试用期都在干嘛?
: : 才问一个case也答不出来,之后你是要怎么开发,怎么maintain?”
: : 各位认为这件事是我同学能力不足? 还是主管太严苛?
..........
这个问题显然如前面有人在推文就说 是抱怨主管 的贴文.
主管严不严苛, 是比较的问题.
自从美式派遣工在世界各地流行, 美式概念的公司已经跟台湾过去的概念
有所不同.
发展软件是 Team work, 所以台湾过往流行高阶资深员工要带领训练新进
员工. 但美式新管理方式想法不同, 认为员工一来就要能上工直接作事,
上层一看花不来就立即辞退, 马上招新人. 反正, 挑好的能做的何必训练?
派遣工就是电话通知派遣公司马上就换人来. 替换招募管人到班 是派遣公
司该做的服务, 用钱就解决了.
四大硕毕是会有老学长照顾, 但国外进来的洋硕士渐多, 派遣就泛滥.
================================================================
万行没有文件的程式如何维护?
在没有学长资深同事传承下, 整个程式就像个黑箱子, 又是限时限日那是
常人干的事?
做软件的或许在工作环境上很少遇见这种如何 "仿制" "山寨" 产品的事.
就是弄个现成产品来, 工程师就要能造个同样功能的类似品出来.
电玩对任何正常小孩都能"不用教"就能自动学习上手. 虽然小朋友可能办
不到立即山寨出一个成品, 但拿现有旁边类似的东西也是可以模仿, 用口
头嘴泡某些功能, 就能自个用言语假设虚拟出类似的部件玩将起来.
用资本主义只顾钻钱的角度聘员工做事, 不必训练新进员工似乎也不是不
可以的事. 人本来就有学习能力, 在台湾何况是四大筛选出来的?
========
电脑就是被数学家归类为 finite state machine. 做硬件的或是做机械工
具的工程师, 常常是被要求看见这种黑箱子就要能造出来, 山寨是理所当
然的要求. 早期去中科院造飞弹的, 工研院造电子产品的不就如此?
软件因破解密码出名的 Turing 提出了抽象的 Turing Machine 使用了可
以无限长的磁带内存, 电脑就被归类在 Turing finite/infinite state
machine 这类别上. 但也都是能从 state machine 被认识清楚的.
打开一个机器的黑箱子是要用到一些道具的.
要弄懂一个毫无文件说明的程式, 以前就是反组译可以减去记住指令码的
麻烦, 能设断点追踪的 debug 程式就能显现执行过程. 若是已有可编译
但没有备注的程式, 这麻烦就减省很多了.
没有备注说明的程式, 就是内部有那些 state 并不让读者看见, 从一个
state 变换到另一个 state 的过程也没有条件(或规格)说明, 也就是流
程不清.
=========
若是自动控制系统的领域里, system identification 就是从 I/O 的反
应里要把可见的状态(Observable state)观测出来, 同时也要找出可从外
部影响操控的可控状态(Controllable state)找出来. 小孩对任何的电玩
都是能从 IO 反应得出电玩的状态机功能.
若有高阶语言的程式保留, 高阶程式语言的辅助编译/避错工具就能协助
将程式的状态变量列出, 只是这些工具还不能做更有意义的命名. 同样的
类似流程图的自动产生工具也是能将不同模组的流向画出来.
底下由 godspeedlee 大大提出的个人使用经验就是 利用电脑工具 减省
烦人的学习认知工作.
===============================================================
: 除非在学时就常常把玩 open source,上 github 帮忙解 issue,
: 不然第一次就追几万行,除非你天生神力,不然一定觉得很吃力
:
: 我第一次碰上这种工作是 12 年前,那份 code 不只 6-7 万行,
: 起码 40 万行以上,用当时最新的电脑完整编译一次大概要 20 分钟,
: 我大概看了一年,每星期我要都把看懂的部份写成文件给主管 review。
:
: 那时候笨笨的,只会用 grep 来看原始码,然后用 word/ppt 很辛苦
: 的把 call graph、资料结构、继承阶层画出来,那时候认识了一位高手
: ,他说要把 data flow 找出来,这对我帮助很大。
:
: 大概是因为我是烂私大毕业,薪水又低,所以老板可以
: 忍受我一年吧XD
:
: 那时候也没有人跟我讲要用 vim+ctags+cscope or SourceInsight,
: 或是用 doxygen 产生 call graph,白走很多冤旺路,如果是现在
: 还可以用 valgrind 在 Run-time 时产生 call graph,比起当初,
: 现在可以用的工具很多了。
:
: 如果是现在的我,还会设法用 profiling 工具找出最常被执行的区块,
: 按照80/20 法则,6万行的程式只有约一万行是最常被执行的,理解一万行
: 应该要比理解 6 万行容易许多。
:
: 所以我想你同学最大的问题是...他怎么没跟学长或板友求救?
:
: → badyy: 除了cscope,ctags外glimpse cindex好像也不错用 07/21 23:03
: → godspeedlee: 忘了提...记得用SSD,搜寻速度加倍啊~!! 07/21 23:05
: → manaup: SSD真的很重要! 07/21 23:36: 推 ggg12345: 这篇回文指出了工具的重要性. 07/22 12:52
可以维护的就找免付费的高手来做.
open source 的协同开发, 彼此成长成似乎是免付费的高手互助.
写出程式, 别人若都看不懂是要如何加入合作? 透过网络又如何紧密合作?
对发展中的软件若不是架构与构想良好, 高手怎肯投入?
好的量测评估工具, 甚至协助除错的工具因之被会被导入, 协助分析流程的
工具也随高手的加入而带进来.
展示出有潜力的专案自然会吸引金主进来投资. 这个open source 就有机会
了.
此时, 就是不给改的(受封锁保护的)就可以投资付费造平台工具 找高手造
新工具直破或另从他途突破, 也可再造其他保护(如法律智财权)工具阻挡泄
密破解.
密码解译就是一个对防卫做破解的工作.
落后地区要追上先进国, 学习与山寨不可免. 但先进国岂有不防备的道理?
防火长城与网站审批 是大陆阻止先进国资讯技术入侵或迟滞对手的办法,
追赶的产业就拼命学习跟上, 不仅是 me too. 有些环境大陆不具备, 例如
有线电话与信用卡, 大陆就用实名注册的手机做刷卡代替.
大陆的飞机技术跟不上先进国, 钱学森就建议做高速导弹, 毕竟导弹没做好
还是有一次性使用机会. 做可再反复使用的民航机费时费力远水救不了近火
. 烂土枪对洋砲, 还是先有一片发展的天地顶住, 不被消灭再说.
当然, 所有缺的都要补上, 才能追上先进国.