作者guest0079 (火辣辣的大姊姊)
看板Soft_Job
标题Re: [请益] 如何快速的看懂程式码?
时间Sat Oct 25 03:48:46 2008
※ 引述《changeway (我爱洗澡不怕跌倒)》之铭言:
: ※ 引述《gogogogoooo (...)》之铭言:
: : 目前刚进去工作
: : 主管便把他们Team开发成品到现在的source code丢给我看
: : 大概数十万行吧 里头的注解非常的少 可以说是没有
: : 主管叫我自行trace code 看懂整个程式码在干麻
: : 常常看到一大堆变数 却完全不晓得意义为何
: : 也不知道干麽用 觉得非常的挫折
: : 那种感觉就有点像是你写了一个算式
: : 例如说 3*2=6 看得懂式子
: : 可是我却不晓得他实际在干麻
: : 或许他的意义可能是有3个人 每个人有2颗苹果 总共有6颗苹果
: : 公司是写韧体的 算是网通厂 最近又丢了一份datasheet给我看
: : 因为程式码里头有些是写入Register的 要看datasheet才知道在干麽
: : 以前也从来没碰过硬体 看了spec也是一个头两个大
: 我自己也是待网通厂的 想我刚开始的时候 也是很慌不知该如何看起
: 所以就找到main()从头开始看起 (好在那时只是8051的系统 程式不算多)
: 然後边看边做投影片画流程.. 把整包程式的区块分隔开来一个一个看
: 我建议你可以先把硬体板子拿来看 把上面的主要元件搞懂
: (我那时缠着给我板子的硬体RD问阿.. 好在人家不嫌弃我菜 @@)
: MCU是那个? 主要的IC又长怎样? Flash, eeprom, RAM...
: 或是有温度监控 RTC 还是PoE IC 这些板子上都可以看得到..
: 那为什麽会有这些元件在上面 当然有他的原因..
: 个别ic的功能拼起来就是这个产品要做的事...
: 可以去跟同事要或是google找到这些IC的datasheet
: 也不用一拿到就猛K 看前几页就好 就会告诉你这颗ic会有啥spec跟然後是做啥的
: 看不懂的spec wiki是你的好夥伴
: 弄懂硬体是做啥後 再来好好的看程式码..
: 就如你说的程式码里头有要写入Register的 要看datasheet才知道在干麽
: 那就切换到datasheet的视窗 找这个位址 这个开关的功能
: 有些IC的datasheet还会好心的告诉你这功能的目的为何
: 相关的register应该也是在上下页而已
: 软体叫硬体去做的事 硬体怎麽做 软体管不着 (这就是传说中的硬体限制)
: 但是要怎麽用程式码让IC去达成什麽样的功能 就是用这些register控制
: 例如一颗switch没有vlan tag/untag的功能 这颗IC就不能做802.1q VLAN的功能
: 简单讲就是给使用者一个介面(Web, console, SNMP...) 去控制这块板子
: 我到觉得你刚开始这这份工作 不用急着把全部程式码看懂在干嘛
: 看懂这份程式码的主架构跟运作的流程比较重要
: 因为之後会做的工作应该不外乎就是在这个架构跟流程中增修某个客户要的功能
: 或是做其他的案子 把这份程式套用到不同的IC
: 弄清楚现在程式的架构 之後拿到其他包的程式码再看的时候也会上手许多
我也是网通厂的 看到认识的人回应,我也来回一下
我不是写driver也不是写firmware,我没这麽伟大
我只是个写AP的小杂碎
最近老板叫我改driver,其实只是改个小功能,但是对外行人真的很困难
第一次改的时候,跟老板两个人改到深夜,只为了改两颗小LED灯的闪烁模式
一开始就从整个网卡driver source code找到某支程式
喔! 就档名就叫 wlan_led.c,一看才一千行不到,太简单了
花了点时间看完整支程式,大概知道要怎麽改
改完後LED的行为还是一整个怪
看datasheet的资料要改register第17个bit,但原程式明明改的是21bit
该bit应该只有三个地方会改到,但是把那三个地方拿掉後,值还是会变
总之就是一整矛盾,连我老板也没辄
最後老板拿出以前旧程式来比对,比对後发现几乎一模一样
但旧程式是work的,把lan_led.c改为旧档後就好了
问题很明显是发生在两个档案不一致的地方,那地方只是一行程式罢了
但问题是,明明知道问题是发生在这一行,但就是不知道为什麽要改成那样
就好像已经给你看攻略本了,还没办法破关
明明正妹就已经在倒追你了,你还被发卡一样
白痴啊~~~
不过还好,因为我只是一个小小系统厂的一个小小写程式的小杂碎罢了
自信心完全不会受到打击
整套系统包含规格、实作、业界惯例、问题与解法…都是许多人花许多时间发展的
初入门的人很难一窥全貌,就好像光看一小片拚图是无法知道整套拚图的图案一样
一定要等到拚到一定的数量才慢慢猜得出全貌
一开始担心自已没碰过硬体,怕自已看spec.一个头两个大都是多余的
只要把眼前的事做好,只要你一直能够撑得下去,一两年後回过来看当时的自已
就会知道当时的担心都是多余的
n年前看过郭靖郭大侠学武的方式,他的师父们知道他笨,都跟他说你只要照着学就好
心法照着背,不懂没关系,以後自然就懂了
招式照着练,很弱没关系,以後自然就强了
我知道这只是小说,没什麽说服力
不过想当初我只是一个企管系的毕业生,退伍後为了讨生活自学Java
後来再自修作业系统,当时只看懂五成,慢慢的把计组、组语、C、C++看过学过
读工数电子学电路学电磁学…(当然很多都没看完或只看一点点)
当时看书也是看得一知半解的,但慢慢的心里就有个底了
写程式不就是:利用编译器把所用的语言转成CPU看的懂的码来执行
再广义一点:利用工具(编译 直译器)产生适当的程式码(机器语言)给某个chip执行
再广义一点:在一系统内,把某些资讯丢给某资讯处理机去处理,转成有用的资讯
再广义一点:利用已知的物理、数学原理,制造一些好用的工具,利用该工具达成目的
现在小的写程式写得可顺的咧,从高阶到低阶都还过得去
之前老板花了几万块派我去上driver课程,想开始凹我写driver
所以我写写AP、解解bug应该还过的去吧,我还是企管系的咧
时间花在哪里,成就就在哪里,如此而已
会来做这一行的人都不会是什麽天才,但多少都肯下点工夫
填填register谁不会,看看spec谁不会
register要怎麽填一定会有文件,spec一定也是人看得懂的语言
事出必有因,只要遵着因就能找到果
万一spec是外星人写的怎麽办?万一填register时没文件看怎麽办?
没足够的资源,天才来解也一样啦,赌神?你还真当他是神!
再说到敝公司某位测试部们的同事,电子+资工背景
知道本人非本科系在做RD大受激励,也想转当写程式的工程师
问题是他对自已太没信心了,C看完改看C++,看完後又从头看C,重覆一直看
就是不敢跟老板表示想转换工作内容
(敝公司RD QA都是同一个老板管的,老板也希望QA能转RD,毕竟找外面的RD太贵了)
C怎麽看就只有那二百页,C++他说不定都看得比我熟了
他只要开始写程式→发现问题→google问题→找不到解答很沮丧
慢慢地变成写程式→发现问题→google问题→找到解法有成就感
不出一年,绝对够格当个称职的RD (应该说是称职的台湾RD)
想要速成,就只能靠天份
但在这行混的人,大都不是速成,而是慢慢累积过来的
协定、规格、工具、多如牛毛,懂得愈多的人就显的愈强
有谁听过别人说某人对某协定很有天份的吗?隔壁的Eric是高手,因为他对这晶片的
规格很有天份?
硬体不会,不会先学电子学吗?
电子学不会,不会先看电路学吗?
电路不会,不会先学工数吗?
工数不会,不会先学微积分吗?
……
再怎麽不济,从四则运算学起总行了吧
平常要多累积啊,不要想学硬体才发现要从微积分开始学起
--
※ 发信站: 批踢踢实业坊(ptt.cc)
◆ From: 220.136.216.41
1F:推 TKyo:电子学不会, 我是推荐去看 "基本电学/电子仪表" :D 10/25 03:57
2F:推 hokoshigo:基本电学是电路学的基础 10/25 08:26
3F:推 andymai:我电子系的看到史密斯三个字就想杀人了... 10/25 08:56
4F:推 samurai7:我资工的 也是看了史密斯就想...嘿嘿 10/25 13:23
5F:推 mingtai1:史密失 当初低空PASS飞过... 真的看到会吐血 @_@. 10/25 13:34
6F:推 OnlyRD:我猜你一定没有把写下去的值又立刻读回来检查过 10/25 19:04
7F:→ OnlyRD:很可能你那行程式被compiler optimize掉了 10/25 19:05
8F:→ OnlyRD:根本就没写值或读值 又或者ALIGNMENT有问题 10/25 19:06
9F:→ OnlyRD:所以以前的人用try的try出改21bit 10/25 19:06
10F:→ OnlyRD:电子学我修过1.2.3 会不会跟写DRIVER没啥关系 10/25 19:07
11F:→ OnlyRD:我觉得为了当韧体工程失去修电子学没啥不可 但是不用太精 10/25 19:08
12F:→ OnlyRD:毕竟你们公司是有硬体工程师的 找来一起co work就好 10/25 19:09
13F:→ OnlyRD:看过太多sw整天把ASM跟硬体挂嘴上 因为HW在台湾比较赚吗? 10/25 19:10
14F:推 kikiow:不得不推一下楼上..深有同感..不过HW在台湾真的比较赚 10/26 23:21
15F:→ kikiow:HW只要省一些元件,整个cost down下来,再加上量在大.. 10/26 23:23
16F:→ kikiow:整个案子就赚钱(只要别一直re-work),相对赔钱的也是HW 10/26 23:24
17F:→ kikiow:後面错整个re-work就赔钱,FW/SW是稳赚不赔. 10/26 23:24
18F:→ kikiow:但赚的不够HW赔..这是我在系统厂的感受.. 10/26 23:27
19F:推 kikiow:而且我发现OnlyRD你似乎也是系统厂或者晶片厂的RD 10/26 23:36
20F:推 OnlyRD:我待过ic design 也待过系统厂 10/27 04:17
21F:推 OnlyRD:认为SW不花钱在IC DESIGN跟系统厂都一样 10/27 04:20
22F:→ OnlyRD:简单讲 台湾电子业老板 对SW有概念的不多 10/27 04:21
23F:→ OnlyRD:偏偏纯软大部分不赚钱...也排斥靠HW赚钱... 10/27 04:22
24F:→ OnlyRD:其实以软体为核心 配合软体自己做硬体 才是正确的路 10/27 04:23
25F:→ OnlyRD:所以一大堆软体公司就只懂搞网路 搞客制化 10/27 04:24
26F:→ OnlyRD:搞网路的缺点是 大家都搞 而且整合服务的难度高於硬体 10/27 04:25
27F:→ OnlyRD:搞客制化的缺点是:信用难累积 案子不稳定 利润被砍价 10/27 04:26
28F:→ OnlyRD:我看过一些小软体公司20eps以上的 都是搭硬体出售软体 10/27 04:27
29F:→ OnlyRD:所以我的结论是 想靠软体赚钱最简单的路就是自己出硬体 10/27 04:28
30F:→ OnlyRD:事实上现在IC DESIGN已经开始有这种味道了... 10/27 04:29
31F:→ OnlyRD:只是IC DESIGN的头机乎都HW出身 还有一段路要走 10/27 04:30
32F:→ OnlyRD:我敢说类似cyberlink只要自己出player或appleTV那种产品 10/27 04:32
33F:→ OnlyRD:下单去给代工厂做 搞不好可以赚钱 10/27 04:33
34F:→ OnlyRD:只是他们可能没有嵌入式软体的人吧... 10/27 04:34
35F:推 RickyOrange:大哥 卡在最後一句 微积分看不懂啊!! 11/01 16:12
36F:推 ykjiang:回楼上的,楼主有建议从四则运算开始练起 :p 11/02 13:54