【转载】我为何放弃了 Linux 内核学习?

最近学习内核非常心累,碰巧看到这篇文章,有点意思~css

转自http://happypeter.github.io/index.html,如下为原文内容:html

我在国内的技术类网站 / 博客上, 时常会看到分析 Linux 内核代码的文章. 图书馆 / 书店也有国内做者写的 Linux 内核书籍. 常常看到网友在讨论编译内核的事情. 通过一段时间的 Linux 学习, 至今还没发现有学内核的必要. 我不明白会什么要看 Linux 内核代码. 难道学习 Linux , 必定要懂内核吗?java

简短回答:python

在一次采访中 Linus 说:若是你在编程中没有涉及到内核的内容,那就不用考虑研究内核,直到有一天你用到了一个让你不太满意的内核接口,你对本身说:” Hey, I can do better… “。 我本人的建议是:水深,危险!用到了最好也别碰。就普通的 Linux 程序员这我的群而言,我是相对花在对 Linux 自己上的时间比较多的,从技术层面讲,使用 Linux,并不意味者你须要去看内核代码,若是真的用到内核相关的东西,也是读一些别人总结好的文档。git

下面是完整回答:程序员

我本人的状况是这样,2006 开始学习 Linux,由于要作嵌入式项目,直接上手就是内核,06 年到 08 年基本上都像一头猪冲进了原始森林,处处乱撞,受伤不少,收获不多。我目前的主攻方向是 Linux 系统管理和 web app 开发,距离内核方面的知识很远啊,对我来讲当初学习内核是个严重错误,因此把个人故事分享在这里,供你们参考。 第一个结论:github

初学者是不应碰内核的web

若是你 C 语言还不太熟练,那抓紧学 C 吧,北京这边我去面试的 Unix 类的公司,基本上笔试都有大量的 C 的内容。固然针对考试而学习是愚蠢的,我这里的意思只是说若是你学了两年多的内核,到最后在面试的时候人家发现你 C 都不过关,那内核的事就基本上不用问了,像我那时就是这样,空中造楼,学了不少内核的知识,最终是一场空。面试

因此说,我当时倒不如把 C 学好,这样之后不论是向上发展作应用,或是向下作系统编程作内核,知识结构上都是一个更为合理的基础。 而后若是真的想作内核的话,还要有 bash 脚本的基本功,比较强的各类编程工具的使用技巧。退而言之,内核是世界上最大的软件项目之一,若是你连一个小项目都还没作过的话,着手内核也是明显不合理的。编程

不过幸运的是个人英文水平还好,同时又会一些 Qt,因此毕业之后有幸到 Asianux 工做,维护系统的 updater(就是 apt-get 和 yum 一类的东西),也是从那时开始我才意识到 Linux 真正的魅力在于它是 Internet 的支撑,互联网才是属于个人舞台。因此我最终放弃学习内核倒不是由于困难和挫折,主要仍是由于我的的兴趣和价值取向。学编程就跟学音乐学美术同样,做用是表达咱们本身的思想,最终目的是可以服务人群。我是那种技术平庸的人,可是我喜欢作东西,同时喜欢像别人炫耀东西,比较人文情怀的一个手工艺人(推荐你看一下 Hackers and Painters ),因此我以为仍是作 app 更加的舒畅,由于

内核编程是面向硬件的,应用编程是面向人的。

Linus Torvalds 老是说:” My interest has always been how to get hardware to work “, 因为 Linus 本人的强大魅力,因此忽悠不少连什么是 software 什么是 hardware 都分不清的年轻人,奋不顾身的投入到内核编程的大军,我本人当初就是这样,不过通过几年我发现其实硬件编程的时代早已通过去了。早期的制造硬件的 Steve Wozniak,后来赋予人民群众驱动硬件能力的 Linus,都是时代的英雄,而如今这些砖块基石都已经具有,重造车轮没什么意义。因此 2000 年以来,世界一流的程序员都在关注使用这些砖块表达某种思惟,RubyOnRails, google, facebook…

扯得有点远了,我有一个井底之蛙的结论:国内的状况是搞硬件不太好找工做,找到了也是薪水很低,并且企业文化不好的地方。说的可能有些偏颇,可是记住我本人就是从单片机焊板子过来的,因此这算是一个老青蛙的看法。 我每次见到各个高校电子设计协会的人都会很耐心的劝他们早点放弃硬件投身互联网,赶忙学习 html+css,虽然每次都会遭到鄙视。 搞 kernel 的人,我见到的发展也不太理想。我在的一个同事,一直负责公司的 kernel 部门,前一段跳槽到 Oracle,再也不搞 kernel 了。一个同窗之前在 AMD 工做,往 Linus 的 Tree 里打过几个 Patch,如今跳槽到 Intel,作 Andriod,离 kernel 也有十万八千里。

最后,给 Linux 新手的建议是

从简单的出发,边作边学

若是上天给我机会重来一次,我会从最简单的开始学,不但不会碰内核代码,语言也会先学一门简单语言例如 Python 或是 Ruby。而后动手作一些简单有趣的网络应用,就像相似于 Facebook 的这种” html + java thing “,而后随着项目做大,可能某些部件须要用 C 重写才能知足要求,我才会去学 C。好像有人说过,用 C 编程好像穿着旱冰鞋打乒乓球,只有超级聪明的人才能作到。不论是作 C, 仍是作 kernel,个人感受都是

NO.1 要有十年左右的计算机软硬件背景, 半路出家的人最好不要去搞 C。C 编程是很须要计算机科学功底的,像我这种研一才下决心搞编程的人,但愿靠毅力解决这个问题,实际上是愚蠢的,由于你根本再也抽不出 10 年的时间补基础。 因此 python, ruby, java 这些东西才是首选。

NO.2 足够锋利的技术敏锐度。 若是作了几年,你发现你不是个技术控,这也没准是好事。IT 是个行业,技术水平恐怕对于一个 IT 人是否成功所起的做用还不足 5%,更重要的是综合的创造力。

相关文章
相关标签/搜索