2021-02-08 分類: 網(wǎng)站建設(shè)
大家好。我先簡單介紹一下自己,我是李鴻,目前負(fù)責(zé)馬蜂窩內(nèi)容中心的技術(shù)研發(fā)和團(tuán)隊(duì)管理。
(1)使用軟件
最里面的圓代表的就是一個(gè)最小的視野,它對應(yīng)的是用戶擁有的視野。因?yàn)樽鳛檐浖氖褂萌藛T,用戶是不會(huì)去關(guān)心背后的開發(fā)原理、邏輯實(shí)現(xiàn)的,用戶只關(guān)心這個(gè)軟件是不是好用。
(2)開發(fā)軟件
對于我們學(xué)計(jì)算機(jī)、做研發(fā)的人來說,去使用一個(gè)軟件其實(shí)是比較容易的。因?yàn)槲覀兯诘氖恰搁_發(fā)軟件」這個(gè)圈子,相對于用戶來說,我們站在一個(gè)更外圍的視角,我們對使用軟件這件事看得更加透徹,角度更開闊。
聊一個(gè)生活中的例子,我有一次去參觀南京中山嶺的宋美齡宮,在去之前聽別人說,美齡宮像一顆寶石一樣,被許多由不同顏色樹葉構(gòu)成的項(xiàng)鏈包裹在中間。聽起來就很美,也我非常好奇,于是去了之后我一直在找這條「項(xiàng)鏈」。結(jié)果當(dāng)然是找不到。因?yàn)榇蠹宜f的「項(xiàng)鏈」是通過航拍看到的圖形,我是走在樹林中,那肯定看不到。
計(jì)算機(jī)一個(gè)最本質(zhì)的地方就是「自動(dòng)化」,所以大家要真的能夠理解「自動(dòng)化」這個(gè)詞的意義。我們寫軟件、做管理系統(tǒng),都是為了要解決以前需要人工來做的事,更好地解放我們的大腦。
既然自動(dòng)化是最本質(zhì)的,我們就應(yīng)該反思在自己的工作和學(xué)習(xí)中,是不是用到了自動(dòng)化的思想,你是不是還可以忍受機(jī)械、繁瑣、低效地處理問題?現(xiàn)在的方式是不是應(yīng)該改進(jìn)?通過去學(xué) Linux,可以幫助我們構(gòu)建一個(gè)高效的學(xué)習(xí)和工作環(huán)境,去解決這些問題。
3. 借鑒優(yōu)秀的學(xué)習(xí)樣板和實(shí)例
第三個(gè)就是對 Linux 的借鑒。其實(shí)所有的計(jì)算機(jī)工程問題,無非都是圍繞架構(gòu)設(shè)計(jì)、技術(shù)選型、代碼質(zhì)量、設(shè)計(jì)風(fēng)格、工作流程,自動(dòng)化程度等相關(guān)的問題。如果可以做到理解 Linux,你就會(huì)發(fā)現(xiàn)在這個(gè)操作系統(tǒng)上的很多組件,其實(shí)就為我們提供了如何解決計(jì)算機(jī)工程問題非常多有益的實(shí)例。
就如大家在關(guān)注一些優(yōu)秀的開源項(xiàng)目的討論列表時(shí),你也會(huì)覺得有一些人提出的建議并不好,但你可能說不清原因。這時(shí)有人做出了一些列舉,論證這個(gè)建議為什么不好,你就會(huì)非常認(rèn)同,并且吸取他思考問題和解決問題的方法。學(xué)習(xí)操作系統(tǒng)的過程也一樣,Linux 本身就是一個(gè)很好的樣板和實(shí)例,包括它的設(shè)計(jì)理念、代碼質(zhì)量、文檔編寫、協(xié)同、軟件工程、演進(jìn)以及它的文化,方方面面都會(huì)為我們提升非常好的借鑒。
這里我想再展開說一下演進(jìn)和文化。
演進(jìn)是什么?其實(shí)我們很多人在做項(xiàng)目的時(shí)候是很容易走偏的,因?yàn)橛?jì)算機(jī)世界每增加一個(gè)維度,它可選擇的結(jié)果都會(huì)帶來級數(shù)級別的增長。而我們在一個(gè)軟件項(xiàng)目的推進(jìn)實(shí)現(xiàn)中,要考慮的維度可能成百上千。要在這些紛繁復(fù)雜的選擇中真的找準(zhǔn)方向去演進(jìn),需要非常清晰地思考。通過去看一個(gè)軟件的發(fā)展歷史,你可以去體會(huì)那些優(yōu)秀的人是如何在一些關(guān)鍵的點(diǎn)上把握方向,來為你自己在做判斷的時(shí)候提供指導(dǎo)。
另外就是文化。我認(rèn)為包括 Linux 在內(nèi)的開源項(xiàng)目,核心的文化就是「就事論事,有技術(shù)情懷,追求極致,Open 的溝通」。這些理念對每個(gè)技術(shù)人員的成長都非常重要。比如當(dāng)我們身處一個(gè)規(guī)模比較大的公司,成員之間難免會(huì)存在溝通上的障礙,可能就會(huì)導(dǎo)致誤解的產(chǎn)生和對對方的不認(rèn)可。如果大家以一個(gè)統(tǒng)一的文化作為前提,就會(huì)用彼此認(rèn)同的理念和方式去思考問題,也就更容易達(dá)成協(xié)作。
How 怎么做到懂 Linux
最后我們看看用什么方法去學(xué)習(xí),才能夠越來越懂 Linux。
1. 理解設(shè)計(jì)哲學(xué)
我們只有對一件事有了深刻的認(rèn)識,并且認(rèn)同之后,才有可能去花時(shí)間學(xué)好。所以首先我認(rèn)為要深刻認(rèn)識到 Linux 背后的設(shè)計(jì)哲學(xué)是什么。
關(guān)于 Linux 的設(shè)計(jì)哲學(xué)很多地方都有介紹,我這里也特意沒有進(jìn)行翻譯,希望大家對表述中關(guān)鍵的英文單詞也建立起認(rèn)知:
下面我把每個(gè)點(diǎn)簡單地說一下。
"Everything is a process; if it's not a process, it's a file"
Linux 操作系統(tǒng)認(rèn)為「任何事都是一個(gè)進(jìn)程,或者說一個(gè)線程,是一個(gè)執(zhí)行體;如果它不是一個(gè)線程,那么它就是一個(gè)文件?!?/p>
大家不要認(rèn)為這句話理所當(dāng)然,其實(shí)很多操作系統(tǒng)都沒有這樣一個(gè)概念,但是在 Linux 的世界,大量的東西是以進(jìn)程的概念存在的。如果你認(rèn)為它不是一個(gè)可以運(yùn)行的東西,那它極大可能就是個(gè)文件。你會(huì)發(fā)現(xiàn)很多新的技術(shù)都是在這樣的設(shè)計(jì)思想之上,比如說容器。
這種思想的好處是什么呢?我們說解決計(jì)算機(jī)的問題有一個(gè)重要的技巧,就是當(dāng)你能夠把各種復(fù)雜的事情都看成是一碼事兒,能夠從統(tǒng)一的視角去概括它,并且面對它、處理它,那解決起來就會(huì)容易很多。因?yàn)楫?dāng)計(jì)算機(jī)面對復(fù)雜的現(xiàn)實(shí)世界,它能做的就是一層一層的抽象,最后抽出一個(gè)非常簡單且統(tǒng)一的視角,可以直接地去處理。這是大家在寫代碼的時(shí)候可以去思考的。當(dāng)你發(fā)現(xiàn)你做出的設(shè)計(jì)能夠把兩、三個(gè)不一樣的東西,從一個(gè)更高的視角進(jìn)行統(tǒng)一,這時(shí)的你就會(huì)比很多人了不起。
"One tool to do one task"
第二點(diǎn),一個(gè)工具解決一個(gè)問題。它的理念是說要把東西做好、做到極致,就要去做專。如果你做的不能比別人更好,你就不要去做,而是要去想如何通過一種方式讓用戶可以在你的應(yīng)用上調(diào)用自己喜歡的東西,這就是 One tool to do one task。對我們在做程序的時(shí)候也有很多幫助,比如是不是能把現(xiàn)在的應(yīng)用做得非常內(nèi)聚,而不是去做更多的東西。
"Three standards I/O channel"
第三點(diǎn)是說每個(gè)進(jìn)程都有三個(gè)標(biāo)準(zhǔn)的 I/O:標(biāo)準(zhǔn)輸入、標(biāo)準(zhǔn)輸出、標(biāo)準(zhǔn)錯(cuò)誤,好處是你就會(huì)清楚地知道任何終端進(jìn)程默認(rèn)都有這三個(gè)數(shù)據(jù)交流的端口,可以自由的進(jìn)行拼裝或者 I/O 重定向,進(jìn)行功能組合,這其實(shí)也就是第四個(gè)哲學(xué)所說的——
"Combine tools seamle
第一個(gè)層次就是 Use,先用起來。但前提是用的時(shí)候要符合上面提到的那些標(biāo)準(zhǔn),也就是要了解它的設(shè)計(jì)哲學(xué),要知道它的優(yōu)勢,而不是只聽別人說怎么配、怎么選才好。
如果把懂 Linux 分為十個(gè)「檔」,那么 Use 對應(yīng)的大概是 1-3。其實(shí)對于我們 70-80% 的程序員來說,到這里已經(jīng)非常不錯(cuò)。
第二個(gè)層次是 Code。這里的 Code 不是指在后臺寫一個(gè) Java 的業(yè)務(wù)程序,或者是前臺寫一個(gè)網(wǎng)頁,而是指系統(tǒng)編程(System Programm),通過編碼的方式和操作系統(tǒng)直接對話,而不再是點(diǎn)擊鼠標(biāo)去控制。
雖然系統(tǒng)編程跟大部分人的工作不會(huì)強(qiáng)相關(guān)。但是通過在應(yīng)用層用語言(主要是 C 語言)去跟操作系統(tǒng)對話,你會(huì)看到在整個(gè)操作系統(tǒng)背后的一系列東西是怎么構(gòu)建起來的,去我們提高視野、提升效率,以及得到更多優(yōu)秀的借鑒都有很多幫助。除了 Code,如果大家有時(shí)間和精力,我建議還可以去了解一下 C 語言。C 語言非常純粹,就是來告訴你內(nèi)存長什么樣,怎么去控制內(nèi)存、指令、堆棧,怎么去進(jìn)行參數(shù)傳遞的方法調(diào)用等,你會(huì)學(xué)到大量計(jì)算機(jī)架構(gòu)相關(guān)的原理。
第三層是 Hack,它的檔到對應(yīng)到 8-10, 這可能是每個(gè)希望做到極致的技術(shù)人最后的追求,去了解內(nèi)核這一層。
第一階段:Use Linux
(1)終端、鍵盤、命令。剛才在講 Linux 的設(shè)計(jì)哲學(xué)時(shí),我們提到過一條——「CLI, not GUI」。所以對于程序員來說,在學(xué)如何跟 Linux 操作系統(tǒng)對話的時(shí)候,一定是使用終端、鍵盤、命令。我想跟大家說,如果你現(xiàn)在還習(xí)慣用鼠標(biāo),那你可能要反省,看看自己對自動(dòng)化理解的程度是不是太低了。
(2)一個(gè)字符編輯器。要去找一款自己喜歡的字符編輯器,并且用起來。
(3)SHELL。第三,如果要用 Linux 理論去提高我們的視角,就一定要掌握一版 SHELL 腳本,并且去深刻理解。至于用哪個(gè)版本大家可以根據(jù)自己的喜好決定,目前我用的是 ZSH,感興趣的同學(xué)可以去了解下。
(4)文件系統(tǒng)、進(jìn)程線程、IO 組合、用戶權(quán)限、資源管理。再往下我們可以嘗試通過編程的方式去調(diào)用文件系統(tǒng)、進(jìn)程線程、IO、用戶權(quán)限、資源管理等等,去更加系統(tǒng)的了解。這些都會(huì)了之后會(huì)發(fā)現(xiàn)慢慢,以后再寫一種高層的代碼也就沒那么難了。
(5)解剖 Linux。通過解剖 Linux 可以知道 Linux 是怎么裝拼起來的,對它會(huì)有一個(gè)更直觀的認(rèn)知。我大概在十年前開始接觸 LFS(Linux From Scratch LFS),現(xiàn)在它已經(jīng)演化出了無數(shù)個(gè)版本,它會(huì)告訴你如何開始從零構(gòu)建一個(gè) Linux 系統(tǒng),而且它好的地方在于是從源代碼的方式去講怎么編譯,最后拼成一個(gè)操作系統(tǒng)。這個(gè)工作因?yàn)樾枰容^多的精力,所以建議大家三個(gè)月到半年的時(shí)間跑一次,會(huì)很有成就感。
(6)深刻理解背后的文化和哲學(xué)。關(guān)于 Linux 背后的文化和哲學(xué),可能總結(jié)起來就是那么簡單幾句話,開始會(huì)比較難理解。但是大家如果把這幾句話當(dāng)成一種「信仰」,每次在學(xué)和用的時(shí)候都能再深刻地體會(huì)一遍,可能過了半年,說不定某一天你會(huì)突然發(fā)現(xiàn)想通了。
(7)參與社區(qū)。大家在參與社區(qū)的時(shí)候,一定要知道知識的價(jià)值是要通過 10 年、20 年的努力去沉淀、去積累的,要持續(xù)地參與到社區(qū)當(dāng)中。
(9)最后一個(gè)就是持之以恒,去融入到你的工作、學(xué)習(xí)和生活當(dāng)中。Linux 學(xué)習(xí)曲線的特點(diǎn)是一開始就很陡,不像 Windows,一開始很平滑。但一旦爬過這個(gè)陡坡,就會(huì)看到一個(gè)全新的世界,并且可以一直持續(xù)往上走。
第二階段:Code Linux
這個(gè)階段就是剛才我們講到的,要用編程語言去和 Linux 對話,通過 Code 開始了解二進(jìn)制 ELF。ELF 是在 Linux 世界的執(zhí)行文件格式,通過了解 ELF 可以知道一個(gè)執(zhí)行文件是怎么拼寫的,它的內(nèi)存是怎么存在的,指令是怎么跑的,數(shù)據(jù)是怎么取的,動(dòng)態(tài)庫是怎么加載的……如果把這些都搞定,至少在 Linux 領(lǐng)域,就不會(huì)再有什么是讓你覺得理解起來比較吃力的事情。
第三階段:Hack Linux
關(guān)于如何 Hack,這個(gè)問題非常龐大和復(fù)雜。如果大家有嘗試走到這一層的勇氣和愿望,我非常愿意和大家一起交流。
總結(jié)
總結(jié)一下今天創(chuàng)新互聯(lián)講到的一些內(nèi)容:
在分享最后,我想和大家聊聊最近經(jīng)常思考的一個(gè)問題?,F(xiàn)在我們總會(huì)聽到身邊一些人在抱怨,說計(jì)算機(jī)行業(yè)已經(jīng)非常飽和,互聯(lián)網(wǎng)也已經(jīng)發(fā)展到了一定階段,再過五年十年計(jì)算機(jī)就要被淘汰了,研發(fā)人員也會(huì)面臨失業(yè)。
我對這個(gè)觀點(diǎn)是非常不贊同的。
每個(gè)人都可以不用工作,每天很開心地享受生活,這應(yīng)該是大多數(shù)人理想的狀態(tài)。但是人類總要養(yǎng)活自己,唯一能達(dá)到這種理想狀態(tài)的情況,就是由計(jì)算機(jī)、機(jī)器人、電腦幫我們?nèi)祟愅瓿纱蟛糠值墓ぷ?,不管是做家?wù)、交通出行、蓋房子等等。如果這個(gè)理想狀態(tài)的標(biāo)準(zhǔn)是 100 分,對比我們現(xiàn)在,可能僅僅處在 0.1 分的階段。所以怎么可能會(huì)存在純粹的失業(yè)呢?
為什么大家還要進(jìn)行這樣一個(gè)討論?我只能認(rèn)為有些程序員還沒有喜歡計(jì)算機(jī),擔(dān)心自己學(xué)不好。學(xué)習(xí)這個(gè)過程的確不容易。就像我們看一本哲學(xué)書,開始想要讀懂非常困難,但隨著人生閱歷的增長,隨著我們在生活、學(xué)習(xí)和工作中不斷驗(yàn)證書中的道理,你就會(huì)體會(huì)到其中的道理,提升自己看問題的視角和解決問題的能力。所以最后,我希望大家不要害怕學(xué)習(xí),并且相信這個(gè)行業(yè)的前景,和程序員這份職業(yè)可以創(chuàng)造的價(jià)值。
新聞名稱:每個(gè)程序員都可以懂一點(diǎn) Linux
本文來源:http://jinyejixie.com/news/99915.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供網(wǎng)站改版、靜態(tài)網(wǎng)站、服務(wù)器托管、建站公司、網(wǎng)站導(dǎo)航、搜索引擎優(yōu)化
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來源: 創(chuàng)新互聯(lián)
猜你還喜歡下面的內(nèi)容