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

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

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

简短回答:

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

下面是完整回答:

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

初学者是不该碰内核的

如果你 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%,更重要的是综合的创造力。

【转载】我为什么放弃了 Linux 内核学习?的更多相关文章

  1. linux内核学习之七 可执行程序的装载和运行

    一 程序的装载和运行的基本知识补充    1 当进程开始执行一个新的程序时,从父进程继承的所有页被释放,以便在新的用户地址空间开始执行新的计算,甚至进程的特权都可能发生改变,但是,进程的PID不会改变 ...

  2. linux内核学习之六 进程创建过程学习

    一 关于linux进程概念的补充 关于进程的基本概念这里不多说,把自己的学习所得作一些补充: 1. 在linux内核中,系统最多可以有64个进程同时存在. 2.linux进程包含的关键要素:一段可执行 ...

  3. Linux内核学习总结

    1.<简单C程序生成的汇编代码分析> http://www.cnblogs.com/snowfox2016/p/5225937.html 2.<时间片轮转多道程序代码分析>(未 ...

  4. 关于Linux内核学习的误区以及相关书籍介绍

    http://www.hzlitai.com.cn/article/ARM9-article/system/1605.html 写给Linux内核新手-关于Linux内核学习的误区 先说句正经的:其实 ...

  5. Linux内核学习笔记-2.进程管理

    原创文章,转载请注明:Linux内核学习笔记-2.进程管理) By Lucio.Yang 部分内容来自:Linux Kernel Development(Third Edition),Robert L ...

  6. Linux内核学习笔记-1.简介和入门

    原创文章,转载请注明:Linux内核学习笔记-1.简介和入门 By Lucio.Yang 部分内容来自:Linux Kernel Development(Third Edition),Robert L ...

  7. Linux内核学习趣谈

    本文原创是freas_1990,转载请标明出处:http://blog.csdn.net/freas_1990/article/details/9304991 从大二开始学习Linux内核,到现在已经 ...

  8. Linux内核分析——Linux内核学习总结

    马悦+原创作品转载请注明出处+<Linux内核分析>MOOC课程http://mooc.study.163.com/course/USTC-1000029000 Linux内核学习总结 一 ...

  9. Linux内核学习总结(final)

    Linux内核学习总结 符钰婧 原创作品转载请注明出处 <Linux内核分析>MOOC课程http://mooc.study.163.com/course/USTC-1000029000 ...

随机推荐

  1. jsp实现大文件上传分片上传断点续传

    1,项目调研 因为需要研究下断点上传的问题.找了很久终于找到一个比较好的项目. 在GoogleCode上面,代码弄下来超级不方便,还是配置hosts才好,把代码重新上传到了github上面. http ...

  2. learning java AWT 布局管理器 GridLayout

    GridLayout布局管理器将容器分割成纵横线分格的网格,每个网格所占的区域大小相同. import java.awt.*; public class GridLayoutTest { public ...

  3. 洛谷 P1950 长方形_NOI导刊2009提高(2) 题解

    P1950 长方形_NOI导刊2009提高(2) 题目描述 小明今天突发奇想,想从一张用过的纸中剪出一个长方形. 为了简化问题,小明做出如下规定: (1)这张纸的长宽分别为n,m.小明讲这张纸看成是由 ...

  4. 替罪羊树 ------ luogu P3369 【模板】普通平衡树(Treap/SBT)

    二次联通门 : luogu P3369 [模板]普通平衡树(Treap/SBT) 闲的没事,把各种平衡树都写写 比较比较... 下面是替罪羊树 #include <cstdio> #inc ...

  5. 洛谷P1039侦探推理题解

    #include<cstdio> #include<cstring> #include<string> #include<iostream> using ...

  6. 域渗透复盘(安洵CTF线下)

    复盘线下域渗透环境Write Up 0x01 外网web到DMZ进域 外网web入口 joomla应用   192.168.0.5 反序列化打下来 GET /index.php HTTP/1.1 Ho ...

  7. 制作OpenFOAM计算结果的gif动画【转载】

    转载自:http://blog.sina.com.cn/s/blog_6277cbbf0100niqi.html PS:对其中错误地方进行了修正 1.用ParaView将每一帧都输出成图片(File- ...

  8. elasticsearch routing

    当索引一个文档的时候,文档会被存储到一个主分片中. Elasticsearch 如何知道一个文档应该存放到哪个分片中呢?当我们创建文档时,它如何决定这个文档应当被存储在分片 1 还是分片 2 中呢?首 ...

  9. 范仁义web前端介绍课程---1、课程意义

    范仁义web前端介绍课程---1.课程意义 一.总结 一句话总结: 提供的这一整套学习方法和资源,配合艾宾浩斯遗忘曲线等各种复习.学习算法和后续会有的娱乐化学习方式,能否真正做到让学过的东西不再忘记. ...

  10. text-align-last 实现文本居中对齐

    1.示例代码 <!DOCTYPE html> <html> <head> <meta charset="utf-8" /> < ...