最近學習內核非常心累,碰巧看到這篇文章,有點意思~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%,更重要的是綜合的創造力。