三岁小孩不妨看一看_系统程序员成长计划书评-查字典图书网
查字典图书网
当前位置: 查字典 > 图书网 > > 系统程序员成长计划 > 三岁小孩不妨看一看
laoar 系统程序员成长计划 的书评 发表时间:2011-07-04 22:07:33

三岁小孩不妨看一看

      本着与人为善的原则,不打算作任何评论的。但是看到超过8分的评分,还有赞美之情溢于言表的众多书评,就有了忍不住想写的冲动。其实,我是希望有本事的人能够把自己所学写成书分享给大家,但是有句话说,长的丑不是你的错,出来吓人你就不对了!
      先来看封面,请注意“编著”这两个字,技术类的书籍不使用“著”,而是在它前面加个“编”字,是有一定道理的。
      再来看书名,什么是系统程序员?故名思议,从事系统软件的开发者谓之系统程序员。那么什么是系统软件?系统软件是和底层架构,操作系统,以及基础服务紧密关联的软件。例如操作系统,编译器,调试器,加载器,可执行文件解释器,反汇编工具等都属于系统软件。那么作者在这本书里描述了什么呢?well,请原谅我没有仔细阅读这本书,所以我也不知道这本书到底和系统软件有什么关系。不过我倒是看了它的目录,又大致翻了一下整本书。原来本书所谓的系统程序员,就是知道一些基本的数据结构,了解Makefile的基本应用,再加上TLS以及dumpstack这两个吓唬人的名词。oh,sorry,作者没说dumpstack,作者说的是backstrace。如果作者以为这就是系统软件,又或者让读者以为这就是系统软件,那我觉得中国出来几百个Bill Gates和Linus Tarvalds应该是小事一桩。
       再来看作者简介。“有着10年linux开发经验,5年手机开发经验...致力于linux嵌入式系统的学习和研究”。ok,那就从作者最拿手的linux开始说起。
       Linux开发者的圣经是什么?没错,linux内核,这是毋庸置疑的!linux内核发展到现在,已经积累了上千万行的代码,现在linux内核已经发布了3.0RC版,即将由2.6时代迈入3.0时代。那么从事linux开发的系统程序员他应该具备什么最基本的技能?毫无疑问,内存管理(mm)是每个linux开发者必须掌握的技能,而且内存管理也是linux最复杂的一部分,一旦你掌握了内存管理,再来看linux内核的其余部分,你会发现都是little case。那么作者在这里有什么心得体会要和读者分享哪?共享内存,内存分配器(貌似作者没有提到很重要的高速缓存分配器,比如slab),TLS(不明白作者为什么要把这个很少用到的技巧给在这薄薄的一本书中作为基础知识给罗列出来)。对于共享内存,不知道作者知不知道有POSIX和SHM。不仔细说了,毕竟作者自己也说了“这是写给应届生和业余爱好者的”。腾讯为什么能靠卖QQ币发大财?因为小学生的钱好骗。
       有人批评郎咸平,说它只会挑毛病,不会给方法。我不想重蹈郎教授的覆辙被人骂,也在这里写写自己给系统程序员的建议,主要针对linux开发者吧。linux的经典书籍很多,你只要阅读了以下几本书,并尽量做到吃透,你就能够成为大神了,不吃透也没关系,掌握其中的一成就足矣让你在神州这片土地混饭吃了。
     首先,阅读《unix环境高级编程》作为入门。接着,看《linux设备驱动程序》了解一下基本的模块。接着,看《深入理解linux内核》,重点学习内存管理,结合linux源码看。最后,搞linux的,网络是不得不接触的内容,你可以看《TCP/IP协议卷B》。还有一个国人写的书也挺不错的,比如《程序员的自我修养》可以用来学习连接器加载器以及ELF文件,比如《linux那些事儿之我是usb》。

展开全文
有用 30 无用 7

您对该书评有什么想说的?

发 表

推荐文章

猜你喜欢

附近的人在看

推荐阅读

拓展阅读

对“三岁小孩不妨看一看”的回应

prettykernel 2016-09-12 22:24:55

还有3个月

codevore 2014-10-25 04:42:19

lol大家2016年12月再见了~

mr.nop 2014-05-07 16:27:38

没口水仗不幸福。

theflyshit 2014-04-19 14:44:19

楼主还是有点假大空,有点咬文嚼字,我觉得还是值得一看的。多做事少说废话吧!

0xcc 2014-02-02 00:25:17

看了半天口水仗。。突然没有了,很不幸福,不知道啥时候出续集呢?

天行健198266 2013-12-20 17:21:28

这本书没事翻翻,其实蛮不错的一本书,也没有多少钱,我觉得可以看看了;而且作者本人也不错的,和他聊过QQ,人家也没有凭着这本书赚了多少钱的;还有就是其实国人写这类书应该多鼓励的,个人拙见。

7819570535 2013-12-20 14:14:44

@laoar 看到了你们的口水战,真的很搞笑。有啥好喷的呢?你不就被这本书的书名给误解了吗?看作者写的写作背景,人家已经写明了为什么是这样一个名称,以及作者要讲的内容,适合那些人,全部都说了。而且书名上带了“成长计划”,这已经说明了,只是指点一个方向,你非要啥深入的,那你不是看错书就是没事干纯个人癖好。对于你指出的ftk的代码bug,我觉得多余的return并非bug,这是某些程序员的个人习惯,而且这种习惯某种意义上来说可以避免很多bug。对于你贴出你的github,我真的上去看了,我只看的my-task-manager,直接打开task.c,第一个函数如下:
int get_allproc(struct allpid *pids)
{
int cnt;
int *pid_buffer;
// get the pid count in our Mac system.
if ((cnt = proc_listallpids(NULL, 0)) <= 0) {
perror("get_listpids");
return -1;
}

// apply mamory to store all these pids
if ((pid_buffer = (int *)malloc(cnt * sizeof(pid_t))) == NULL) {
perror("proc_pid malloc");
return -1;
}

// store all these pids to the buffer
if ((cnt = proc_listallpids(pid_buffer, cnt * sizeof(pid_t))) <= 0) {
perror("alloc pid buffer");
return -1;
}

pids->pid_list = pid_buffer;
pids->cnt = cnt;
}
你能否告诉我有没有bug?
其实我没去看你的代码用了啥高级算法,也没看你这东西要实现啥功能,能否告诉我函数要返回int,但结束却没返回任何东西,这么设计有啥过人之处?
看了里面6个函数有3个都是这样。
扯那么多有啥用?拿时间来喷还不如多用点时间写自己的代码。

laoar 2013-12-20 11:22:47

你说的很对,这个标题太过了。所以,我得承认,我要为我以前的年轻气盛买单。
而且,确实搞得我没心情工作。

prife 2013-12-20 11:20:52

因为你一上来就沙比呵呵的说我“装逼”, 那我就随你的意,尽情的装给你看,但是我不觉得装给你看后我有多爽。

------------------------------------------------------------------------------------------------
除了浪费了一个晚上+一上午,白费无数口舌,一点用也没有。我也很不爽。
你敢写这样的标题,就得准备好被别人喷。就这样吧。

laoar 2013-12-20 11:16:27

〉好像近几年才有方法大大减小 IPC 的开销的
是的, 进程切换的开销也是很大。 dpdk的代码我没有看过。 我觉得如果要研究微内核的优势的话,可以看下MacOS。

laoar 2013-12-20 11:13:40

回应@prife
因为你一上来就沙比呵呵的说我“装逼”, 那我就随你的意,尽情的装给你看,但是我不觉得装给你看后我有多爽。

Grissiom 2013-12-20 11:10:39

感觉微内核这块,因为 IPC 会大大增多,所以开销未必比 context switch 要小,何况,进程切换要比 trap 进内核态的开销要大得多……

好像近几年才有方法大大减小 IPC 的开销的?……

laoar 2013-12-20 11:04:48

呵呵。
我还是那句话, 装自己的逼,让一些人去叫唤吧。

prife 2013-12-20 11:03:08

我说了,不想让这个变成人身攻击和谩骂贴。但是楼主你实在是目前位置我见过的最装的人。最喜欢玩的就是LS这样的文字游戏。

你以为我是低头认输了? 我只是觉得有句话说的很对:
千万不要和S..B..争论,他会把你拉到和他相同的水平线上。然后用经验来打败你。

本来我都不想扯了,还跟那一直装。装个屁啊。一瓶子不满帮瓶子晃荡。

laoar 2013-12-20 10:57:10

〉工资从苦逼的8K
真不是。

〉涨了一倍到20K。
你再猜

〉你不幸面试成功进入华为
注意这个“不幸”, 你没选择华为是对的。

〉还喜欢再技术上喷别人,你可拉倒吧你。我是没看出来你哪里牛逼了。
我不需要你看出来。

prife 2013-12-20 10:51:06

我再贴几条你的装逼语录:
【如果你不幸面试成功进入华为,应该会跟我打交道。我是linux内核开发。】
但是后面又开始扯
【而且,我也无意去给你说我现在在哪里工作。】

大胆揣测一下,不就是从华为跳槽到Juniper了,工资从苦逼的8K涨了一倍到20K。

我打了几个错别字,你开始说我不懂signal了。

还喜欢再技术上喷别人,你可拉倒吧你。我是没看出来你哪里牛逼了。

再请楼主看看这个帖子:【程序员的困境】
http://blog.jobbole.com/46220/

说的就是你们这些搞了点内核开发,写了几个驱动。编译了几个系统就自以为是,不知道天高地厚的所谓内核开发者。

prife 2013-12-20 10:23:53

>我有说20K很高? 游戏行业(这算不算IT?)起薪都是20K+好不?
不知道你的第一份工作是不是华为。如果是,你有啥装逼的?我也有华为的offer。
就你喜欢拿工资说事,并以此证明自己牛逼。那你说说,你工作几年了?

太自以为是了。微内核宏内核的区别。在《操作系统设计与实现》(介绍Minix的那本书)的那本书第二章就已经明确说了。你是不是以为别人都一无所知?
不过我怀疑你可能没看过这本书,更不用说minix源代码了。

jffs2和yaffs咱也看过,也写过代码。有些话题我不想扯的太远。但是楼主你不装逼好好说话会死是吧?

我移植的jffs代码:
https://github.com/prife/rt-thread/tree/master/components/dfs/filesystems/jffs2

我移植的yaffs代码:
https://github.com/prife/rt-thread/tree/master/components/dfs/filesystems/yaffs2

你说你写过jffs2的代码。在联想到前面说自己build过gcc 的toolchain,我大胆设想一下,因为板子上是nand/nor的,所以需要这俩文件系统,而你不会在编译内核的时候修复了几个jffs/yaffs的编译错误吧?

你给出jffs2里你的commit,我立刻低头认输。

signal的问题还有啥可扯淡的?除了没完没了的扯皮还是没完没了的扯皮 。
还有你第一个所谓的 类型转换的问题呢? 强转就bug了? 又不是 32位转16位。你到是说说bug在哪里?
exit的问题,return是多余的,多余的是bug么? 顶多算是useless的代码。

20K不高,真心不高,我也这么觉得。我同事们的水平怎么样,我不管保证,薪水比我多多了去了,咱是新人。是否跳槽就不老你费心了。

>睡觉都没睡好
我只能说你这是装逼的资本还不够啊,还有点发虚。祝你在装逼的路上越走越远。

laoar 2013-12-20 10:01:29

回应@prife :
>否则你说你是20K。那我说我是50K,有意义?
你让我说你什么好?
我昨天跟你对喷了一晚上,导致我都没睡好觉。
回应你一下,
如果20K都让你觉得是在撒谎,那么,你,以及你周围的人可能都比较弱,劝你早点跳槽,或者说好好学习学到了本领跳槽吧。
另外我也不觉得20K有多高,真心不高。

laoar 2013-12-20 09:58:46

回应@Grissiom
很简单,因为省去了很多系统调用,而就避免context switch。 从用户太进入内核态是要保存很多context, 这是一个很大的开销。你可以看下malloc代码,它是自己先搞一个buffer来避免系统调用, 目的是一致的:节省开销。

Grissiom 2013-12-20 09:49:40

微内核为什么实时性好呢?

laoar 2013-12-20 00:27:13

知道错就是个好孩子。
能认错是个好汉子。

技术可以慢慢学,总有一天你会比大部分人都牛逼。

prife 2013-12-20 00:25:00

算了不喷了。自制力不行我得承认啊。从中间某一次偏离技术时我就该打住,但是毕竟年轻啊,忍不住啊。

楼主文字游戏我不陪你玩了。

laoar 2013-12-20 00:23:33

》三年之后再来比谁更牛叉
三年之后?
呵呵,我才懒得理你这根葱哪。

laoar 2013-12-20 00:22:56

》人身攻击也没啥意思
谁先傻逼呵呵开始人身攻击的?
谁傻逼呵呵先说别人是装逼的?

prife 2013-12-20 00:22:52

各自自求多福。三年之后再来比谁更牛叉,到时候就在内核上一较高下。主场客场算个屁,我不care。

laoar 2013-12-20 00:21:58

》这绝壁是最后一条了
你要搞清楚一点,男人,就得对自己说出去的话负责。 即使你说话如放屁。

prife 2013-12-20 00:20:54

打住吧,豆瓣无论如何也是块不错的地方。人身攻击也没啥意思。现在我们互相认定对方是傻叉。

还有网上讨论大家都算是诚信沟通,否则你说你是20K。那我说我是50K,有意义? 这个讨论,或者说争论到这已经没啥意思了,远离技术。
好歹我也受过高等教育。到此结束。

laoar 2013-12-20 00:19:30

》主场作战的感觉很好?
我们不是一直都在说内核嘛? 我也告诉你了,如果我们讨论机顶盒,显然就是你的天下了。
但是,你不是说我内核方面装逼嘛? 难道我要拿机顶盒的知识反驳你我技术比你牛?

》S..B..挣钱多的人多了去了。凤姐比你挣的多不?
难道你的身份跟我不一样? 你不是混码农这碗饭的? 您是跟凤姐一路的?

prife 2013-12-20 00:16:21

我得这么跟你说。FTK,你确实不懂。你不过是懂点内核,知道点驱动。离开内核就是个渣,所以才抱着signal不放。主场作战的感觉很好?

S..B..挣钱多的人多了去了。凤姐比你挣的多不?

laoar 2013-12-20 00:13:19

》我觉得你就是个S..B..
呵呵 如果SB拿的钱比你多,你觉得你是什么?

》把FTK彻底搞清楚
不是你傻逼呵呵拿这个我之前从不知道的东西说事嘛?搞的我还一阵紧张,以为遇到高手了。

prife 2013-12-20 00:11:16

你觉得你找到是槽点,我觉得你就是个S..B..,喷的完全不是地方。难道我为了反驳你还得去把FTK彻底搞清楚? 你付给我工资?我给你解释了你又不信。

laoar 2013-12-20 00:11:10

vxworks是注定要被淘汰了。 并发性的缺陷让它难以胜任多核。

prife 2013-12-20 00:08:34

微内核,据我所知,应用的较好的是苹果的MacOS,它的核心是Mach,从bsd衍生来的。
-------------------------------------------------
楼主是不会听说过有类OS叫RealTime Operation System的,有个著名的RTOS叫Vxworks的。而且它是微内核的。

laoar 2013-12-20 00:07:29

》我已经对你的逻辑不能忍了。
你没必要忍啊。
不是你一直在说我装逼嘛, 我一直在忍你啊。

laoar 2013-12-20 00:06:37

》装逼党们永远不会去试图看看那个宏到底是干啥的
我再重复一边, 首先这个文件是*linux.c文件,所以它的os是linux,不用再试图跟我扯什么其他的RTOS芭啦芭啦。linux的编译器,如果你们公司不是太碉堡,都会从gcc来做个交叉编译莲,所以这个文件名隐含的答案就是我们讨论的是gcc,所以别再傻逼呵呵的说这个编译器那个编译器。

》这个宏
你要让我跟你这个笨蛋说多少遍你才会明白,这个红不是linux的红,所以和我们讨论的signal函数没有半毛钱关系。

》到底是干啥的
你觉得我应该细细的看你们的代码,放着自己的事不做? 你付给我工资?

prife 2013-12-20 00:06:03

回应@prife :

你除了说这些没营养的话,还会说什么?
我希望你能够从技术上来反击我。

实在是不能忍了。还得跳出来回复一下
-----------------------------------------------------------------------------------
2013-12-19 22:41:39 prife

那个宏的问题。

从名字上来看,如果有启动高层次的exception处理机制,则屏蔽到系统的信号处理函数。不知道这个解释满意否
---------------------------------------------------------------------------

不知道没营养的话谁说的多,怕是阁下吧,拜托你自己回头浏览下我们相互回复。看看每一次话题分叉都是谁在推动。

这绝壁是最后一条了,我已经对你的逻辑不能忍了。

prife 2013-12-19 23:59:12

装逼党们永远不会去试图看看那个宏到底是干啥的,哪怕那个宏打开打开以后干了啥,他们都不会care的,然后四处扣帽子。
你太自以为是,自我感觉良好了。这个帖子就此打住。

我宣布你赢了,我落荒而逃。

laoar 2013-12-19 23:57:11

回应@prife :
你除了说这些没营养的话,还会说什么?
我希望你能够从技术上来反击我。

laoar 2013-12-19 23:55:27

回应 @Grission :
华为的内核是宏内核。
微内核的优势是实时性好,但是缺点是上层和cpu的通信消耗太大。

所以现在有个优化方案是做用户态驱动,就像intel的dpdk,来提高performance。

微内核,据我所知,应用的较好的是苹果的MacOS,它的核心是Mach,从bsd衍生来的。

prife 2013-12-19 23:50:31

我看了一眼就知道这个目录下是跟os强相关的, 因为要跨平台,所以搞了多个目录。

但是,你自己都fork了这个代码了,而且都拿它来说事。

但是,现在你竟然说你不懂???

这到底是谁在装逼。

我跟你说技术, 但是显然你回答不了我的答案,所以我只能说点形而上易于理解的。
---------------------------------------------------------

我还能说啥呢,你太牛逼了,那个目录的名字写着os。我不知道那个地方是os强相关的。我啥都不知道。

大神,你太牛了。我甘拜下风。

Grissiom 2013-12-19 23:35:49

华为的 OS 是微内核么?

laoar 2013-12-19 23:16:42

忠告你一点。
技术方面,如果你跟别人讨论,你要确保你懂一点,别人才会继续跟你说技术。

别人自己不了解的技术装逼。

我喜欢从技术角度喷人装逼, 显然你现在属于我喷的行列。

laoar 2013-12-19 23:14:36

》拜托你搞清楚。目前那个项目里还没有我一行提交
呵呵。
我看了一眼就知道这个目录下是跟os强相关的, 因为要跨平台,所以搞了多个目录。
但是,你自己都fork了这个代码了,而且都拿它来说事。
但是,现在你竟然说你不懂???
这到底是谁在装逼。

我跟你说技术, 但是显然你回答不了我的答案,所以我只能说点形而上易于理解的。

prife 2013-12-19 23:12:59

就此打住,越来越成为泛泛之谈,没有意义的争论。

回到正题:
这本书我会推荐给每个我认识的那些半路出家的程序员们,告诉他们,linux内核一点也不神秘,这本书可以引导他们进入编程世界。接下来,只要边读书边读代码就可以了,最重要的是要多思考,多写。

还有告诉他们,装逼适可而止。

prife 2013-12-19 23:07:00

》这个system一定是Linux? 不能是RTOS?不能是其他OS?这个世界除了Linux没别的了?

你不清楚你自己的代码是干什么的。 请参考我们讨论的这个文件的名字。

【这不是我的代码,这是FTK的代码。拜托你搞清楚。目前那个项目里还没有我一行提交。】

》不知道所谓的内核程序的结论从何而来

还是那就话, 你没有理解signal这个系统调用。

这个打住吧,按照你这个讨论说下去也没啥意思了。你也说不出啥来了。

》很多C库函数都调用了内核程序,都算内核程序?

你不知道什么是内核。
【这里明显属于拼写错误,原文如下】
FTK顶多算个中间件,不知道所谓的内核程序的结论从何而来。调用了内核系统调用就算内核程序? 很多C库函数都调用了内核程序,都算内核程序?

可见我想说的是【很多C库函数都调用了<系统调用>,都算内核程序?】。这也是很多装逼党人士的另一个讨厌之处,随便看看就开始吐槽。你真正搞清楚了别人的思路了么?这就开始给我按了一个不知道什么是内核的帽子了。我要是再打几个错别字,你就要说我不知道什么是编程了。

系统程序员是什么? system programmer。
>>你不能说的更具体些。

嵌入式系统不是系统,硬件系统不是系统?所有的系统都是Linux内核? 这是什么狗屎逻辑。

我感觉再扯皮下去你就要跟我讨论哲学问题了。

laoar 2013-12-19 23:04:01

》我之前提的那些技术问题全被抛弃了
我已经回答了你, 但是你没有理解。
我不想继续重复。

》 你成功把话题转向比公司、比比薪水,比年龄。
我是再回应你那句话“这些有什么用”。
或者说,用实际情况来回击那些惯于说别人装逼的人。

》我最喜欢的都是喷那些装逼的人装逼。乐此不疲。
我最喜欢看屌丝喷郭敬明矮, 屌丝喷黄晓明不懂英语。

prife 2013-12-19 22:58:36

>而且,我也无意去给你说我现在在哪里工作。
骚年,你的github暴露了你的信息。Juniper。这就是某些装逼党人的一贯思维,永远觉得别人啥都不知道。
>比完薪水还要比年龄?
好吧,满足你,我1989年生,小硕一枚。2013年六月毕业。

拜托楼主再反复读读自己写的帖子。
看看是不是够装。我之前提的那些技术问题全被抛弃了。你成功把话题转向比公司、比比薪水,比年龄。

我最喜欢的都是喷那些装逼的人装逼。乐此不疲。

laoar 2013-12-19 22:53:14

》这个system一定是Linux? 不能是RTOS?不能是其他OS?这个世界除了Linux没别的了?
你不清楚你自己的代码是干什么的。 请参考我们讨论的这个文件的名字。

》不知道所谓的内核程序的结论从何而来
还是那就话, 你没有理解signal这个系统调用。

》很多C库函数都调用了内核程序,都算内核程序?
你不知道什么是内核。

》系统程序员是什么? system programmer。
你不能说的更具体些。

laoar 2013-12-19 22:50:31

》这些有毛用?
用处你已经给出答案了-->我得勇敢的表示的确比我目前多

>难道我之后到不了这个薪资水平?
你应该跟我一样大, 或许有可能比我年龄还大。

》既然如此,楼主保重,希望你能在华为长久装下去。
我永远只对那些总是说别人“装逼”的人装逼。
而且,我也无意去给你说我现在在哪里工作。

还是那句话, 装自己的逼,让其他人去叫吧。

prife 2013-12-19 22:46:34

各大公司经典题目,比如《微软编程之美》还有一本 google/amazon面试题集合,英文版,题目是什么我忘记了。什么code xxx之类

FTK顶多算个中间件,不知道所谓的内核程序的结论从何而来。调用了内核系统调用就算内核程序? 很多C库函数都调用了内核程序,都算内核程序?

系统程序员是什么? system programmer。
这个system一定是Linux? 不能是RTOS?不能是其他OS?这个世界除了Linux没别的了?

prife 2013-12-19 22:41:39

楼主在炫耀自己薪资水平的时候,我得勇敢的表示的确比我目前多。这一点你成功了。不过我表示,难道我之后到不了这个薪资水平?

那个宏的问题。
从名字上来看,如果有启动高层次的exception处理机制,则屏蔽到系统的信号处理函数。不知道这个解释满意否?

【我写过dos代码,写过windows代码,写过linux代码,写过bsd代码,写过macintoash代码。
我写过linux内核代码和bsd内核代码,linux内核arch目录下的mips/ppc/x86我都有写过。】
我也想问你的是,这些有毛用?我不过是模仿你装逼的方式回答你而已。
全是GCC是吧?顶多再来个llvm。还是没听说过armcc, IAR是吧。CL是vs底层编译器。

>装自己的逼,让没实力装逼的人去骂吧。
既然如此,楼主保重,希望你能在华为长久装下去。

laoar 2013-12-19 22:30:23

》做内核研发的人的优越感从哪里来的?
因为我们在讨论内核知识。 如果我们在机顶盒,ok,就是你的天下了。

》不喷了,我还有很多bug要fix。我也有很多书要看。
加油

》然后征战各大公司经典笔试题目吧。
大公司是什么。

》考虑进入游戏行业或者大公司,挣得钱比所谓系统程序员的多得多。
我可以问一下, 你所接触到的系统程序员都是什么样的系统程序员?像这本书所宣称的吗?

prife 2013-12-19 22:25:13

我试着从你的认知角度来给你解释,确保我们两个在同一个认知层面来讨论问题。

装逼适合而止,是不是觉得自己知道的特别多,别人啥都不知道。。。
做内核研发的人的优越感从哪里来的?我表示十分费解。

不喷了,我还有很多bug要fix。我也有很多书要看。

最后给励志做嵌入式软件开发或者内核软件研发的同学们提一点个人建议。
1. 不要过分迷恋内核和驱动,这些东西没有你想象的那么复杂。不要自己吓唬自己。
2. 个人推荐的看书思路是:
Begining Linux Programming。 重点把后面6章看完。
然后APUE(Unix 环境高级编程)随便翻翻就成了,需要的时候再看即可
再然看最好配合《操作系统设计与实现》,配合《计算机体系结. 构量化研究方法》把处理器流水线部分、cache、TLB部分看懂。
内核,可以看《Linux内核源码情景分析》一本就够了,反复看。

如果不局限系统软件,无所谓是驱动还是中间件还是应用。那么去看
《算法导论》
《设计模式》
一本C++书籍
然后征战各大公司经典笔试题目吧。
再弄个github帐号,多参加几个开源项目,多写代码。
考虑进入游戏行业或者大公司,挣得钱比所谓系统程序员的多得多。

laoar 2013-12-19 22:17:40

> 2013年成都华为内核研发工程师
华为成研所不做linux内核开发, 目前华为只在甚至自研os。

》但最终没有选择华为
这是个明知的选择, 恭喜你。

》请先保证搞清楚了那些宏的含义在来看为什么那么实现。
这个宏不是linux内核的宏,但是,signal是内核的系统调用。 终归你这里有问题。

》(前面你说的一大坨东西以及后面这句-->)有毛用?!
用处就是, 我能直接指出你用的不对的地方, 但是,你不能给我正当合理的理由来解释。
另外, 如果你在上海月薪不到20K,就不要乱指责别人装逼。

》还有告诉他们,装逼适可而止。
装自己的逼,让没实力装逼的人去骂吧。

prife 2013-12-19 21:58:06

很不幸,我拿到了2013年成都华为内核研发工程师的offer,但最终没有选择华为。所以就无缘拜见大神了。目前在上海某软件公司做机顶盒类安卓系统的framework层软件开发,属于内核之上,应用之下的系统中间件。挣的不多,在上海也就是勉强生活吧。

handler的问题,之前我就说过了,那个用宏包了起来。请先保证搞清楚了那些宏的含义在来看为什么那么实现。不要问我,我也还不了解。

>在说别人装逼时,要想调查清楚别人的背景。
“想喷作者的人想看看人家写的代码,你以为你看的这几本书人家没看过?掂量下自己的水平再吐嘈吧"

“当然我不是说这些书不重要。这些书固然很重要,但是别以为看了一本牛逼的书自己就牛逼了,就我自己的感触来说,除了用来装逼之外,意义实在有限,个人的编程水平不见得提升多少。

软件领域不缺高深、牛逼的神书,缺少的正是简单、基础、务实的【用心】之作。”

既然你这么喜欢举例子,我也举个例子送给。
A:一年级的数学课本好SB啊,渣的要命。
B:你都三年级了。。。

我写51、msp430、dsp2812/28335,arm cortex M3、M4、A8的代码,少量汇编+大量C。
我还开发过DVB数据广播(C++),OTALoader代码(C)
我写过python程序,它可以在windows/linux/mac/bsd/unix 上跑(有毛用?!)。

这本书我会推荐给每个我认识的那些半路出家的程序员们,告诉他们,linux内核一点也不神秘,这本书可以引导他们进入编程世界。接下来,只要边读书边读代码就可以了,最重要的是要多思考,多写。

还有告诉他们,装逼适可而止。

laoar 2013-12-19 20:24:28

回应@prife :
作为“装逼党”, 我特意去看了@prife你的主页,
“我投递的职位是:内核驱动研发”
如果你不幸面试成功进入华为,应该会跟我打交道。我是linux内核开发。

另外,在说别人装逼时,要想调查清楚别人的背景。我承认写这篇文章时意气风发多少有些过,但我的立场依然没有改变:看这本书就是糟蹋生命!


laoar 2013-12-19 19:47:09

我试着从你的认知角度来给你解释,确保我们两个在同一个认知层面来讨论问题。

〉说的好像我没用过signal似的
将signal的handler注册为NULL,意味着OS接受到这个信号后不会将其分发到任何handler里面,意味着行为不可控,这对os是极其危险的。

〉OS是linux,编译器就托不了GCC?GCC也分64位的,32位的,51版、ARM版、MIPS版,另外,除了GCC还有armcc, IAR, CL
gcc是gnu的一个开源项目,它支持多个架构,包括arm/ppc/x86/mips等,这些架构代码均在gcc的machine子目录里。你所说的这些编译器都属于gcc的交叉编译链。
现在主流的编译器是gnu的gcc, apple的llvm-gcc, 以及微软的编译器(未开源,前两者均开源)。

〉估计这么多你可能编译器你可能都没用过,只用过GCC。
我制作过arm的交叉编译链, 是很特殊的一种,在业界没有使用的,所以我要自己制作,它是数据段大端代码段小端。
我写过dos代码,写过windows代码,写过linux代码,写过bsd代码,写过macintoash代码。
我写过linux内核代码和bsd内核代码,linux内核arch目录下的mips/ppc/x86我都有写过。

〉把你的代码贴出来给咱瞻仰一下吧
我在公司里写的代码请谅解我不能外传。
我自己因为生活需要在周末写过几行代码放到了github上:https://github.com/laoar?tab=repositories
其中有一个是围棋打谱软件,另一个是任务管理程序。 代码量都较小。

〉我很期待你找点真正的bug出来。
请在看一遍我的那个故事。 我精力有限,我自信我一天挣的钱比你多,所以我不会在你的项目上投入时间。

〉扯淡,文件系统你看过么?
我fix过linux2.6内核的jffs2和yaffs2的代码。



prife 2013-12-19 19:04:09

“一旦你掌握了内存管理,再来看linux内核的其余部分,你会发现都是little case。”
扯淡,文件系统你看过么?文件系统实现非常复杂。高级、复杂的数据结构用的比内存管理多了去了。不会是看了点VFS就以为自己就懂文件系统了吧。

到现在为止,我还没看到楼主以及楼上众多大神们真正有价值的吐嘈。首贴除了标题和内容太装逼之外,内容倒不无可取之处。不过装逼党太多也是豆瓣的一贯风格。再接再厉呦。

prife 2013-12-19 18:46:03

楼上正搞笑,说的好像我没用过signal似的。
https://github.com/prife/rt-thread/blob/master/libcpu/sim/posix/cpu_port.c
看看git log,就知道这是不是我写的。(这个代码也是有bug的,就看你能不能fix掉了)

把你的代码贴出来给咱瞻仰一下吧?就这个时间size_t究竟哪里引起bug了?我真的很好奇。

OS是linux,编译器就托不了GCC?GCC也分64位的,32位的,51版、ARM版、MIPS版,另外,除了GCC还有armcc, IAR, CL。(估计这么多你可能编译器你可能都没用过,只用过GCC。)

我很期待你找点真正的bug出来。

laoar 2013-12-19 15:06:46

回应@prife:

A承包了一座山头,上面种满了树,B经过的时候说,这山头其实可以整地更好些,A就接着说"你有能耐你帮我整好啊!你要是把我的山头给我弄好了我就朝你树大拇指"。 B:....
>size_t 是要看编译器的。一般来说 size_t 的宽度是32或者64.
OS是linux, 编译器脱不了GCC。

〉时间会是负值么? long转size_t就不会有任何问题
很多弱智bug都是这种想当然。

〉signal注册了NULL,自然是不想使用系统的handler机制
你没有清楚signal这个系统调用。或者说不知道我在问什么。

我现在在上班, 忙里偷闲回复你一下。 劝你沉下心来先把基础打好。

prife 2013-12-19 14:41:49

刚光顾吐槽忘记吐槽你所谓的bug了
size_t谁说一定是unsigned long的? size_t 是要看编译器的。一般来说 size_t 的宽度是32或者64.
第一个所谓的bug根本不是bug。时间会是负值么? long转size_t就不会有任何问题。

我可以帮你提个bug 。
"src/backend/native/ftk_backend_fb.c"
这里判断文件类型的时候用 d_type判断,这是不安全的,这才是bug。来,发个pull request出来看看?

prife 2013-12-19 14:34:53

楼主现身了,不错。
signal注册了NULL,自然是不想使用系统的handler机制。并且这个地方是有个宏
HAVE_EXECINFO_H

你先整明白这个宏是干啥的,然后再来吐槽。

最后那个return是否多余要看 _exit是怎么实现的,FTK除了支持Linux,还支持 RTOS,如ucos等。ucos上的_exit的行为是啥? 也麻烦想搞明白再说。

FTK有bug,这是毋庸置疑的,麻烦找点真正的槽点,然后发pull request出来。 咱们github见真章。

光说不练有毛用?有毛用?

我可以写个帖子 (草稿如下)
https://github.com/prife/documents/blob/master/qemu_buildroot.txt

介绍了如何用qemu 模拟arm板子,然后buildroot制作linux rootfs,如何编译内核。最后移植ftk。

所以楼主还有楼上众多准大神们可以大展身手,fix bug了。

来吧,欢迎来一发。

laoar 2013-12-19 14:13:50

无意去看ftk的代码逻辑,瞅了两眼和linux相关的一个文件ftk_linux.c, bug如下:

1.
size_t ftk_get_relative_time(void) // size_t 是unsigned类型
{
...
return now.tv_sec*1000 + now.tv_usec/1000; // 这里的类型是long
}

2.
static void signal_handler(int sig)
{
...
//猜测作者的本意是想只让这个handler进入一次。 这里将系统调用signal()的handler注册为NULL想必定有什么难言之隐,盼解释。
signal(SIGABRT, NULL);
signal(SIGSEGV, NULL);
signal(SIGILL, NULL);

_exit(0);

return; // 这里是多余的。
}

prife 2013-12-19 10:39:56

楼主已经楼上众多不装逼会死星人应该去看编译原理,操作系统设计与实现,深入Linux内核架构,程序语言设计,The art of proramming,具体数学等等

我觉得这样才能成大神,接受我等屁民膜拜。

还有某些推荐SICP的装逼党们,请问一下,你自己看完了么?习题做了多少?你公司的实际项目里用到了么?

软件开发需要看很多经典书不假,但从来没听说光看书就能成为大神。多读优秀代码,多写代码才是成就大神的不二王道。没听说Thompson,Jim boy看了上述任何一本书人家依然是大神(实际上人家牛逼的时候大部分你所谓的神书还没写出来)。

当然我不是说这些书不重要。这些书固然很重要,但是别以为看了一本牛逼的书自己就牛逼了,就我自己的感触来说,除了用来装逼之外,意义实在有限,个人的编程水平不见得提升多少。

软件领域不缺高深、牛逼的神书,缺少的正是简单、基础、务实的【用心】之作。

吐嘈完了,说点其他的,本书作者李先静的开源项目:ftk
http://code.google.com/p/ftk/

想喷作者的人想看看人家写的代码,你以为你看的这几本书人家没看过?掂量下自己的水平再吐嘈吧

PS:ftk项目已经停滞了(据了解因为李身体原因),所以我在github上将这个项目fork了,准备用在公司的项目里。

https://github.com/prife/ftk

欢迎楼上的准大神们前来发pull request。

AirSpuer 2013-08-10 14:13:20

始终看不出来你们说的弱,弱在那里?

黍离 2013-06-19 19:54:49

我也觉得弱。因为查了一下,我以前给了两颗星。已经很厚道了

听雨斋人 2013-06-19 14:49:27

《程序员的自我修养》这本书的确不错!~

leonhard 2012-10-08 23:24:52

书名很误导,不知道作者本意,也没看这本书,估计是指实现程序核心功能的那些程序员?

顽势布谷 2012-09-29 21:55:58

我X,楼内那几个傻逼的智商别学编程了真的。

罐头鱼 2012-08-27 22:59:32

的确是书名的问题,不过楼主也应该了解作者的原意才批别人,这书不是让你成为大神

Gold_Sachs 2012-06-21 09:45:45

帮顶ls,看是否是一本好书的几个方面:鞭辟入里的细节以及涉猎广泛,希望从业十年八年的广大it及软件从业者们写出更多的好书

eskimo叔 2012-04-10 17:03:49

说鸡蛋不好吃就非要生一个鸡蛋出来?

Gold_Sachs 2012-02-22 16:11:33

@ laoar
个人拙见:作者自己也说了“这是写给应届生和业余爱好者的”,像mvc,重构,多态等软件开发中的入门性东西,软件行业本来就千丝万缕,想要看的深入那还不如看一些《linker and loaders》《com本质论》《重构》等,即使一千多页的比较入门的《Computer Systems: A Programmer's Perspective》也都达不到你的要求,本书本来就定义的是入门书,建议您去别的书里找您要的银弹

laoar 2012-02-21 22:40:09

如果让我写这样一本书,我承认真的写不出来。一是没能力,二是没精力。但是,我看完这本书后,有我自己的一个评价。 如果你看了一本书后,都读不出来书怎么样,你读书还有什么用? @Yale杭州研究生

Gold_Sachs 2012-02-21 11:32:51

dont judge

黍离 2012-02-21 10:04:45

刚开始先看的lz的评论,还不以为然。等我看了这本书几章之后,我才觉得这本书其实比较烂。或许不该用这么牛x的书名。觉得有些程序段有问题,不过可能是我c语言比较烂。如果某人想看这本书,以书名的名义,我觉得就不必了。只能做茶余饭后看资。。。
伤心了,以后看书。不能看书皮...

Gold_Sachs 2012-01-05 18:14:01

有能耐自己写一本,唧唧歪歪,写书是个系统化的过程,你能系统化的写一本系统编程的书吗?怀疑你是半瓶醋

fuzhli 2011-10-22 22:57:18

作者自己也说了“这是写给应届生和业余爱好者的”,对于初学者,我觉得讲好了程序内存的使用和编程规范就足够了,没必要讲内核实现啊。

我最后打了2星,原因是:系统程序员不是这样炼成的。我觉得做系统程序员看《计算机系统结构-程序员角度》就可以入门了,之后再是评论者提到的LDD, ULK和TCP/IP详解这些书。

laoar 2011-08-06 23:28:28

to @flyfish30: 恩,正计划看<计算机程序的构造和解释>,这是讲解计算机理论基础的一本书。计算机不论怎么发展,万变不离其宗,这些最基础的东西是永远也不会变得。不过这本书MIT大一就是必修课了,有些汗颜。

flyfish30 2011-08-06 22:27:55

@laoar:非常赞同你的观点,评论也很中肯。这本书最大的问题就是书名非常不好,让人觉得系统程序员就是做这些事情的,太误导人了。系统程序员需要非常好的操作系统、计算机体系架构、指令集等方面的基础,和一定硬件方面的基础。这本书写的东西都是比较基础的东西,如此之多的赞美,实在是承受不起呀,难道系统程序员的追求就是这样的吗,明显不是吗。
你推荐的书都是非常好的书,我一般也是向公司学linux系统编程的人只要看这几本书就可以了。另外向大家推荐sicp这本书,函数式程序设计是今后的一个方向。