提到 Linux,做爲程序員來講必定都不陌生。但若是說到「懂」Linux,可能就沒有那麼多人有把握了。到底用 Linux 離懂 Linux 有多遠?若是決定學習 Linux,應該怎麼開始?要學到什麼程度?懂一點 Linux,對於程序員有什麼價值?經過馬蜂窩內容中心高級研發總監李鴻的此次內部分享,你會獲得一些答案。前端
(本文根據馬蜂窩技術研發團隊內部分享整理,搜索馬蜂窩技術公衆號,後臺回覆 「linux」獲取 PPT 全文。)linux
你們好。我先簡單介紹一下本身,我是李鴻,目前負責馬蜂窩內容中心的技術研發和團隊管理。程序員
接到今天這個任務的時候,我就在思考要分享什麼內容。在座的同窗應該有一些工做的時間比較久,也有一些剛從學校畢業。因此今天所講的東西,若是能讓不一樣階段和技術背景的同窗產生共鳴,讓你們改變了一些對技術的見解,甚至是產生了一點對職業規劃上的影響,我認爲此次分享纔有意思。面試
出於這些考慮,我選擇了今天的主題——每一個程序員均可以「懂」一點 Linux。編程
(李鴻,現爲馬蜂窩內容中心技術團隊負責人。擁有十餘年移動互聯網從業經驗,多年從事移動地圖 App、LBS 企業級服務和智慧交通相關產品研發。我的技術興趣聚焦在 Linux 生態,包括 Linux 內核等底層技術。)後端
想到這個內容,也是基於我本身在技術成長上的一些感悟。安全
我比在座大多數同窗年長几歲,大概十幾年前大學畢業。今天我在跟不少面試候選人聊的時候,我會問他們「爲何選擇計算機專業」,大部分人給個人答案都是碰巧選了計算機,或者據說這個專業的就業前景不錯。網絡
固然也會有同窗和我同樣,是出於喜歡。我最先接觸到計算機仍是讀初中的時候,當時電腦很貴,家裏也沒有。有一次在商店裏我看到了一臺「小霸王」學習機,有人經過在鍵盤上敲一敲,就能真的在屏幕上出現一點東西,我以爲簡直太有意思了,就在當時,我知道本身之後必定會學計算機。架構
大學以後,基本大一大二接觸的都是 Windows。一天偶然看到一些 Linux 代碼,從那以後我就開始自學 Linux,直到鑽研 Linux 的內核。十幾年後我再來看,仍是會感嘆 Linux 世界的神奇,並且慶幸本身的選擇沒錯。框架
因此今天,我想分享下在學 Linux 這個過程當中的一些思考:什麼纔是真正的 Linux、它爲何好、咱們應該從哪裏入手開始學習,但願你們能夠有所收穫。
當問到是否是懂 Linux 的時候,包括我身邊的不少朋友都會說「還能夠啊,我一直都在用」;也可能會說「懂一點,我據說過 Linus 這我的」,等等。但至少我認爲,若是你只是在說如下這些,真的不叫「懂」Linux:
那什麼才叫「懂」Linux ?若是把這件事講透,我認爲核心要解決的就是三個「W」——What,Why,How。
What:一些同窗在開始投入某個技術領域的時候,可能基礎比較薄弱,會很辛苦地學習。學了一段時間之後本身以爲學到了好多東西,但其實不少人並無學到這個方向的關鍵、核心和本質。好比我遇到過不少作大數據分析的人,說到 Hadoop、Spark,相關的單詞能夠說很多,但問到「Spark 和 Hadoop 有什麼本質的區別」,「Spark 對數據的界定有什麼本質的不同」這些問題的時候,仍是說不上來。
每一個程序員的時間和精力是很寶貴的。在咱們整個職業生涯中,可能用十年、二十年去學透1、兩個東西已經很不容易了。若是決定花時間去學習某個技術以前,必定要想清楚學的是什麼,千萬不要學偏了,甚至都沒走在本身規劃的職業方向上。
Why:爲何學?是出於興趣愛好?是對實施架構很重要?是會影響你的職業規劃?是這項技術未來會有很好的市場收益?……無論你的答案是什麼,本身要比較清晰。
有一些同窗技術學得很雜,問哪一個都說比較熟。但問他哪一個技術他比較有研究,是他比較資深的,好像又都沒有。這就是他沒想清楚「Why」,也就想不清楚本身的重心要放在哪裏。
How:前兩個問題解決完,就應該去思考「How」。到底應該怎麼學,才能學得愈來愈好。
今天咱們是圍繞 Linux 在解決這三個 W,換成任何別的技術,其實都有相通之處。最近 七、8 年我面試過不下 500 個 Java 研發,幾乎每次我都會問「能不能用七八個概念說說你對 Java 的認識,或者你爲何喜歡 Java」,不多有候選人人能真的把這個問題說清楚。
因此我建議各位同窗,之後再投入一項技術的學習以前,都先從以上三個 W 去審視一下,看你是否是真的清楚要學的是什麼,爲何學,怎麼才能學好。
必定不是說由於 Linux 「時髦」,也不是如今的工做中急需用它去解決某個問題,而是確實會對長遠的知識架構和的職業發展產生質的影響,才值得花費精力和時間。
學習一個東西要先看全局,要去想 Linux 總體的知識架構、各部分佔的比重、在它背後還須要掌握哪些知識、學習它帶來的收益是什麼等等,真正造成系統和規範化的學習。若是一開始沒有創建起整個知識架構的話,後面會浪費大量時間。
這裏特別強調「專攻」。我認爲專攻某個方向的價值遠遠大於泛泛地瞭解。你們職業生涯越是走得遠,越會發現專攻某個方向的意義。若是開始就是泛泛地學,後面對本身的定位會很是困難,由於你不知道本身的優點是什麼,適合在什麼崗位,應該選擇什麼路徑來發展。
要想學好 Linux,最核心的仍是要找到正確的方法。什麼纔是學 Linux 最好的方法?是去翻翻文章、看看文檔嗎?是去學敲命令嗎?是去學 SHELL 嗎?若是這些都不叫「學」,什麼纔是學 Linux 最優的方法?
咱們身邊有不少技術同窗關注的都是怎麼使用 Linux ,因而就去把書裏是怎麼講的、用過的人是怎麼說的通通記下來,根本不會思考記錄的這些內容背後體現了什麼。若是長期只處在一個單向接收信息的過程裏,你就沒法練習出反思和總結的能力,更不要說能夠達到批判性地審視某個技術,甚至提出質疑的水平。
而要想真正從學習中得到成長,可以和接收到的信息產生互動,去引起更多的思考,就要去知道 Linux 背後的設計哲學、它的優點、歷史文化是什麼。
學習的辛苦、作研發的辛苦,相信你們都深有體會。那麼堅持去學習、去學好某個技術的最大前提,是你要喜歡它,甚至熱愛它。由於只有這樣你纔會以爲這個過程有意思,纔會產生繼續向下深挖的興趣,纔會願意去作更多的推理。
不僅是 Linux,包括如今工做中用的語言、開發環境等等,若是你們實在喜歡不起來,我建議你再去探索一下,去找到本身真正喜歡的領域。
說了這麼多,若是用一個詞來判斷什麼是「懂」Linux,我想應該是去看本身能不能真正「理解」Linux。
今天的主題是「每一個」研發均可以懂一點 Linux ,這是爲何?其實不少技術是能夠不懂的。比對後端須要的是處理業務邏輯,那就不須要必定去懂前端的 WebGL;再好比作大數據的同窗,也不須要太懂編譯。爲何 Linux 我就建議每一個同窗都要去學一點?並且爲何在那麼多操做系統中,我只挑了 Linux 呢?
投入一個有開放的心態、開放視角的技術,給咱們帶來的成長和收益將是無窮的,這也是開源世界帶給咱們的一個重要課題。我很是相信一點,隨着國內經濟的發展、你們認識的逐漸完整,中國的軟件市場也會愈來愈開放,你們所處的大環境會愈來愈好。
Linux 的成功也必定離不開它的開放,離不開整個開源社區的貢獻、生態的參與,以及由此帶給你們的成就感,驅動他們更願意去把一些成就分享出去,去開放合做,等等,這些都是促使 Linux 不斷走向強大的緣由。
對標準的遵循也是 Linux 能夠達到今天這樣成就的關鍵。這也是很大的話題。其中有一點我認爲很是重要,就是它繼承了 Unix 的設計思想,它的 Unix-alike (類 Unix 系統) 設計哲學。
所以,選擇 Linux 就是由於它足夠優秀,能夠帶給咱們值得去探索和深思,而且能夠運用到學習和工做中的知識和思想。
那學習操做系統的意義又是什麼呢?
簡單畫了一個圖來表明我對計算機世界的一些理解,能夠看到圖中每一個圓是一環套一環的
最裏面的圓表明的就是一個最小的視野,它對應的是用戶擁有的視野。由於做爲軟件的使用人員,用戶是不會去關心背後的開發原理、邏輯實現的,用戶只關心這個軟件是否是好用。
對於咱們學計算機、作研發的人來講,去使用一個軟件實際上是比較容易的。由於咱們所在的是「開發軟件」這個圈子,相對於用戶來講,咱們站在一個更外圍的視角,咱們對使用軟件這件事看得更加透徹,角度更開闊。
聊一個生活中的例子,我有一次去參觀南京中山嶺的宋美齡宮,在去以前聽別人說,美齡宮像一顆寶石同樣,被許多由不一樣顏色樹葉構成的項鍊包裹在中間。聽起來就很美,也我很是好奇,因而去了以後我一直在找這條「項鍊」。結果固然是找不到。由於你們所說的「項鍊」是經過航拍看到的圖形,我是走在樹林中,那確定看不到。
你會發現,站的高度不同,你的視角就會不同。一樣的道理,研發同窗之因此理解和使用軟件更快,就是由於與用戶相比站的角度更高,看的範圍更廣,咱們知道軟件設計背後的原理,以及它的交互邏輯,就會很快上手。
若是你們去聽一個前端的講座,爲何當介紹到講師是某個框架的做者時,咱們就會以爲這個分享很厲害?
絕大部分研發,可能 80%~90% 甚至 95% 的同窗都是處在「開發軟件」這個層面的,咱們使用各類現存的框架、開發庫去實現業務邏輯。
可是必定有少部分研發關注的是更外圍的事情,去作一些開發框架、開發庫的實現。這一層的研發須要的能力確實要更強,由於他要思考整個框架怎麼拆分模塊,怎麼樣去適應接口讓程序員用更好地用起來等等,因此要考慮得更深、更廣,挑戰也更多。
細心的同窗可能注意到了我在「開發軟件」與「開發框架和庫」中間畫了一條紅線。我想表達什麼意思是,軟件研發同窗會作出一些很棒的軟件,是由於你有這樣的能力,也是由於你們頭上是戴上了一頂那些開發框架和庫的同窗給的安全帽的。好比 Java 開發會考慮內存的管理和回收,但這個機制實際上是作 Java 開發環境的人幫你作了考慮,幫你提供了應對問題的策略,可讓你更「安全」地作事情。
再往下看,全部的開發庫和開發框架,都是放在一個操做系統上的,與之對應的這一層的研發人員考慮的東西會更加複雜,由於他們要提供的是最基礎的環境,是上層實現的基石。
你們看到再往下我畫了一個骷髏,也就是說這一層是真正厲害的人,他們作的是硬件、規範和協議,好比說指令系統,咱們說的複雜指令系統和簡潔指令系統這兩個大的指令系統的陣營,在二三十年的時間裏都一直在爲本身的陣營 PK,目的是爲了討論出更適合軟件發展的規範。再好比發明 TCP/IP 協議的人,他們最初在一片混沌的狀態下,竟然可以提出 TCP/IP 的概念,讓咱們如今能夠很是簡單地去作通信。因此達到這一層的人,咱們已經稱爲天才了。
再往下就是數學。我認爲計算機回到最後必定是數學,好比說在大學咱們都要學習的離散數學、統計學、範式、邏輯學、圖靈機等等。數學是對整個計算機體系提高一個最基礎的支撐。
因此經過這個圖形咱們還能夠看到,研發同窗若是要持續地成長,是絕對存在路徑的。我以爲有兩個角度是你們能夠思考,一是你在專一的方向持續地積累,造成本身的競爭壁壘;同時你能夠嘗試走入下一個更大的層面,看一看是否是會你的視野,對服務的一些思考,對解決問題的能力都帶來一些幫助。
學習 Linux 另一個很是有用的地方就是「效率」的提高。研發同窗天天都要和操做系統打交道,在上面作大量的工做和學習,無論是寫代碼、看文檔、自動跑一些任務、作一些搜索、寫一些東西等等。若是懂一點 Linux,懂它的設計哲學,你能更好掌握怎麼去用 Linux 更高效。
不誇張地說,若是你真的可以成爲一個 Linux 的 Hacker,我認爲你的工做和學習效率提高十倍以上是沒問題的。我本身就會用 VIM 的話來解決幾乎全部問題。
搞技術作工程,若是思想越高、越宏觀、越系統,能達到的能力就會越強。懂一點 Linux,首先就是爲咱們提供這樣一種提高視角的方法,幫咱們站在一個更外圍的角度思考天天的工做和專攻的技術,它們背後是什麼樣的實現原理和設計思想,它處在怎樣的一個體系中,得到了怎樣的支撐。
計算機一個最本質的地方就是「自動化」,因此你們要真的可以理解「自動化」這個詞的意義。咱們寫軟件、作管理系統,都是爲了要解決之前須要人工來作的事,更好地解放咱們的大腦。
既然自動化是最本質的,咱們就應該反思在本身的工做和學習中,是否是用到了自動化的思想,你是否是還能夠忍受機械、繁瑣、低效地處理問題?如今的方式是否是應該改進?經過去學 Linux,能夠幫助咱們構建一個高效的學習和工做環境,去解決這些問題。
第三個就是對 Linux 的借鑑。其實全部的計算機工程問題,無非都是圍繞架構設計、技術選型、代碼質量、設計風格、工做流程,自動化程度等相關的問題。若是能夠作到理解 Linux,你就會發如今這個操做系統上的不少組件,其實就爲咱們提供瞭如何解決計算機工程問題很是多有益的實例。
就如你們在關注一些優秀的開源項目的討論列表時,你也會以爲有一些人提出的建議並很差,但你可能說不清緣由。這時有人作出了一些列舉,論證這個建議爲何很差,你就會很是認同,而且吸收他思考問題和解決問題的方法。學習操做系統的過程也同樣,Linux 自己就是一個很好的樣板和實例,包括它的設計理念、代碼質量、文檔編寫、協同、軟件工程、演進以及它的文化,方方面面都會爲咱們提高很是好的借鑑。
這裏我想再展開說一下演進和文化。
演進是什麼?其實咱們不少人在作項目的時候是很容易走偏的,由於計算機世界每增長一個維度,它可選擇的結果都會帶來級數級別的增加。而咱們在一個軟件項目的推動實現中,要考慮的維度可能成百上千。要在這些紛繁複雜的選擇中真的找準方向去演進,須要很是清晰地思考。經過去看一個軟件的發展歷史,你能夠去體會那些優秀的人是如何在一些關鍵的點上把握方向,來爲你本身在作判斷的時候提供指導。
另外就是文化。我認爲包括 Linux 在內的開源項目,核心的文化就是「就事論事,有技術情懷,追求極致,Open 的溝通」。這些理念對每一個技術人員的成長都很是重要。好比當咱們身處一個規模比較大的公司,成員之間不免會存在溝通上的障礙,可能就會致使誤解的產生和對對方的不承認。若是你們以一個統一的文化做爲前提,就會用彼此認同的理念和方式去思考問題,也就更容易達成協做。
最後咱們看看用什麼方法去學習,纔可以愈來愈懂 Linux。
咱們只有對一件事有了深入的認識,而且認同以後,纔有可能去花時間學好。因此首先我認爲要深入認識到 Linux 背後的設計哲學是什麼。
關於 Linux 的設計哲學不少地方都有介紹,我這裏也特地沒有進行翻譯,但願你們對錶述中關鍵的英文單詞也創建起認知:
下面我把每一個點簡單地說一下。
Everything is a process; if it's not a process, it's a file
Linux 操做系統認爲「任何事都是一個進程,或者說一個線程,是一個執行體;若是它不是一個線程,那麼它就是一個文件。」
你們不要認爲這句話理所固然,其實不少操做系統都沒有這樣一個概念,可是在 Linux 的世界,大量的東西是以進程的概念存在的。若是你認爲它不是一個能夠運行的東西,那它極大可能就是個文件。你會發現不少新的技術都是在這樣的設計思想之上,好比說容器。
這種思想的好處是什麼呢?咱們說解決計算機的問題有一個重要的技巧,就是當你可以把各類複雜的事情都當作是一碼事兒,可以從統一的視角去歸納它,而且面對它、處理它,那解決起來就會容易不少。由於當計算機面對複雜的現實世界,它能作的就是一層一層的抽象,最後抽出一個很是簡單且統一的視角,能夠直接地去處理。這是你們在寫代碼的時候能夠去思考的。當你發現你作出的設計可以把兩、三個不同的東西,從一個更高的視角進行統一,這時的你就會比不少人了不得。
One tool to do one task
第二點,一個工具解決一個問題。它的理念是說要把東西作好、作到極致,就要去作專。若是你作的不能比別人更好,你就不要去作,而是要去想如何經過一種方式讓用戶能夠在你的應用上調用本身喜歡的東西,這就是 One tool to do one task。對咱們在作程序的時候也有不少幫助,好比是否是能把如今的應用作得很是內聚,而不是去作更多的東西。
Three standards I/O channel
第三點是說每一個進程都有三個標準的 I/O:標準輸入、標準輸出、標準錯誤,好處是你就會清楚地知道任何終端進程默認都有這三個數據交流的端口,能夠自由的進行拼裝或者 I/O 重定向,進行功能組合,這其實也就是第四個哲學所說的——
Combine tools seamlessly
把工具無縫地拼接起來。
Plain text preferred
這一點也是我很是喜歡的,就是能用 Text 必定要用 Text。Text 是一種人能夠讀,機器也能夠處理的內容,能夠解決好多問題。咱們通常說 Plain Text 是指英文。好比說你們寫註釋要用英文寫,它帶來的好處是,咱們能夠經過腳本自動化分析各類 Comment,誰的 Comment 寫得多,誰的單詞拼錯了,誰的 Comment 中包含很是重要的信息,須要重點去跟蹤等等。
CLI, not GUI
提倡用命令行,不要用圖形化界面。由於命令行能夠很是高效進行人機對話,圖形化界面對程序員來講是很是低效的。若是作一次更改,咱們更但願經過敲鍵盤的方式來快速告訴計算機應該作什麼。
Provide the mechanism, not the policy
這點我建議你們背下來,就是若是你作一個好的大型框架,應該去提供機制,而不是提供策略。也就是要提供創造更多可能性的能力,不要把須要適應到特殊場景下的定製化的內容寫死在代碼裏。全部的軟件在這種設計上這點是很是相通的,好的軟件必定是爲你們提供更多的靈活性和適用場景。
以上的設計哲學都很是重要。那麼知道了這些,該怎麼學 Linux 呢?你們不要在一開始學的時候就必定要去學內核,或者想要全都懂,因而就認爲 Linux 很難。關於「懂」Linux 的階段,我簡單分紅了三個層次:
第一個層次就是 Use,先用起來。但前提是用的時候要符合上面提到的那些標準,也就是要了解它的設計哲學,要知道它的優點,而不是隻聽別人說怎麼配、怎麼選才好。
若是把懂 Linux 分爲十個「檔」,那麼 Use 對應的大概是 1-3。其實對於咱們 70-80% 的程序員來講,到這裏已經很是不錯。
第二個層次是 Code。這裏的 Code 不是指在後臺寫一個 Java 的業務程序,或者是前臺寫一個網頁,而是指系統編程(System Programm),經過編碼的方式和操做系統直接對話,而再也不是點擊鼠標去控制。
雖然系統編程跟大部分人的工做不會強相關。可是經過在應用層用語言(主要是 C 語言)去跟操做系統對話,你會看到在整個操做系統背後的一系列東西是怎麼構建起來的,去咱們提升視野、提高效率,以及獲得更多優秀的借鑑都有不少幫助。除了 Code,若是你們有時間和精力,我建議還能夠去了解一下 C 語言。C 語言很是純粹,就是來告訴你內存長什麼樣,怎麼去控制內存、指令、堆棧,怎麼去進行參數傳遞的方法調用等,你會學到大量計算機架構相關的原理。
第三層是 Hack,它的檔到對應到 8-10, 這多是每一個但願作到極致的技術人最後的追求,去了解內核這一層。
(1)終端、鍵盤、命令。剛纔在講 Linux 的設計哲學時,咱們提到過一條——「CLI, not GUI」。因此對於程序員來講,在學如何跟 Linux 操做系統對話的時候,必定是使用終端、鍵盤、命令。我想跟你們說,若是你如今還習慣用鼠標,那你可能要檢討,看看本身對自動化理解的程度是否是過低了。
(2)一個字符編輯器。要去找一款本身喜歡的字符編輯器,而且用起來。
(3)SHELL。第三,若是要用 Linux 理論去提升咱們的視角,就必定要掌握一版 SHELL 腳本,而且去深入理解。至於用哪一個版本你們能夠根據本身的喜愛決定,目前我用的是 ZSH,感興趣的同窗能夠去了解下。
(4)文件系統、進程線程、IO 組合、用戶權限、資源管理。再往下咱們能夠嘗試經過編程的方式去調用文件系統、進程線程、IO、用戶權限、資源管理等等,去更加系統的瞭解。這些都會了以後會發現慢慢,之後再寫一種高層的代碼也就沒那麼難了。
(5)解剖 Linux。經過解剖 Linux 能夠知道 Linux 是怎麼裝拼起來的,對它會有一個更直觀的認知。我大概在十年前開始接觸 LFS(Linux From Scratch LFS),如今它已經演化出了無數個版本,它會告訴你如何開始從零構建一個 Linux 系統,並且它好的地方在因而從源代碼的方式去講怎麼編譯,最後拼成一個操做系統。這個工做由於須要比較多的精力,因此建議你們三個月到半年的時間跑一次,會頗有成就感。
(6)深入理解背後的文化和哲學。關於 Linux 背後的文化和哲學,可能總結起來就是那麼簡單幾句話,開始會比較難理解。可是你們若是把這幾句話當成一種「信仰」,每次在學和用的時候都能再深入地體會一遍,可能過了半年,說不定某一天你會忽然發現想通了。
(7)參與社區。你們在參與社區的時候,必定要知道知識的價值是要經過 10 年、20 年的努力去沉澱、去積累的,要持續地參與到社區當中。
(8)最後一個就是鍥而不捨,去融入到你的工做、學習和生活當中。Linux 學習曲線的特色是一開始就很陡,不像 Windows,一開始很平滑。但一旦爬過這個陡坡,就會看到一個全新的世界,而且能夠一直持續往上走。
這個階段就是剛纔咱們講到的,要用編程語言去和 Linux 對話,經過 Code 開始瞭解二進制 ELF。ELF 是在 Linux 世界的執行文件格式,經過了解 ELF 能夠知道一個執行文件是怎麼拼寫的,它的內存是怎麼存在的,指令是怎麼跑的,數據是怎麼取的,動態庫是怎麼加載的……若是把這些都搞定,至少在 Linux 領域,就不會再有什麼是讓你以爲理解起來比較吃力的事情。
關於如何 Hack,這個問題很是龐大和複雜。若是你們有嘗試走到這一層的勇氣和願望,我很是願意和你們一塊兒交流。
總結一下今天咱們講到的一些內容:
知道爲爲何要學 Linux:視野、效率、借鑑
知道要構建什麼樣的 Linux 知識架構,並對本身專攻的技術方向提供源源不斷的能源:三個 W(What, Why , How)
知道學習 Linux 最優方法:肯定層次 (Use, Code, Hack),實踐,鍥而不捨,融入天天的工做、學習和生活
知道 Linux 背後的設計哲學、優勢、歷史和文化
喜歡上 Linux,愛上她
在分享最後,我想和你們聊聊最近常常思考的一個問題。如今咱們總會聽到身邊一些人在抱怨,說計算機行業已經很是飽和,互聯網也已經發展到了必定階段,再過五年十年計算機就要被淘汰了,研發人員也會面臨失業。
我對這個觀點是很是不贊同的。
每一個人均可以不用工做,天天很開心地享受生活,這應該是大多數人理想的狀態。可是人類總要養活本身,惟一能達到這種理想狀態的狀況,就是由計算機、機器人、電腦幫咱們人類完成大部分的工做,無論是作家務、交通出行、蓋房子等等。若是這個理想狀態的標準是 100 分,對比咱們如今,可能僅僅處在 0.1 分的階段。因此怎麼可能會存在純粹的失業呢?
爲何你們還要進行這樣一個討論?我只能認爲有些程序員尚未喜歡計算機,擔憂本身學很差。學習這個過程的確不容易。就像咱們看一本哲學書,開始想要讀懂很是困難,但隨着人生閱歷的增加,隨着咱們在生活、學習和工做中不斷驗證書中的道理,你就會體會到其中的道理,提高本身看問題的視角和解決問題的能力。因此最後,我但願你們不要懼怕學習,而且相信這個行業的前景,和程序員這份職業能夠創造的價值。
以上就是個人分享,謝謝!
(馬蜂窩技術公衆號原創內容)