乡下人产国偷v产偷v自拍,国产午夜片在线观看,婷婷成人亚洲综合国产麻豆,久久综合给合久久狠狠狠9

  • <output id="e9wm2"></output>
    <s id="e9wm2"><nobr id="e9wm2"><ins id="e9wm2"></ins></nobr></s>

    • 分享

      計算機系的同學應(yīng)該有更高的雄心壯志

       mynotebook 2022-05-24 發(fā)布于湖南

      把這篇文章送給計算機專業(yè)的同學,大學四年看起來很長,其實很短, 希望大家努力向上,有更高的雄心壯志,預(yù)祝大學旅途順利。

      前些天有個計算機系的同學和我聊天,想在暑假做個人網(wǎng)站,博客之類的系統(tǒng),我勸他說計算機系的學生(其實不止是計算機系,可以擴展到所有熱愛編程的在校同學)應(yīng)該有更高的雄心壯志,去挑戰(zhàn)更有難度的東西。

      為什么這么說呢?因為我大學時吃過虧??!

      我也是讀計算機系,上學的時候迷迷糊糊的,把計算機系的基礎(chǔ)課程學得一塌糊涂。

      計算機基礎(chǔ)課被灌輸了一大堆的術(shù)語和概念:進程、線程、信號量、分段、分頁,關(guān)系代數(shù),關(guān)系演算,范式,E-R模型,事務(wù),分層模型,TCP/IP,CSMA/CD,路由協(xié)議。 考試完就忘了,就還給老師了,反正和實際也聯(lián)系不起來。

      還有C語言,我老是抱怨它沒有辦法實現(xiàn)漂亮的界面,運行結(jié)果在一個黑糊糊的窗口中,做不了有用的東西。

      我那個時候在忙乎啥呢?主要學習怎么樣用VB做桌面系統(tǒng),怎么樣用HTML, JS去做網(wǎng)站,主要就這兩件事,小項目確實折騰了好幾個,但是技術(shù)水平一直停留在應(yīng)用層的最表面。

      工作多年以后回頭看,基礎(chǔ)太重要了,大學期間有大塊的學習時間,沒有把這些計算機基礎(chǔ)知識學好實在是太可惜了。

      所以如果你是在校的同學,不要去折騰博客系統(tǒng),在線商城這些簡單的東西了,你應(yīng)該有更高的雄心壯志:要努力地去造輪子,造這些計算機基礎(chǔ)的輪子。

      為什么要造輪子?因為基礎(chǔ)課有點枯燥,概念太多,和實踐聯(lián)系太少,教材也不怎么樣,如果老師再照本宣科,那基本上就完了。

      通過造輪子的方式驅(qū)動、可以引領(lǐng)對這些基礎(chǔ)知識的學習。

      現(xiàn)在至少有這些輪子可以供你選擇:


      數(shù)據(jù)庫

      關(guān)系數(shù)據(jù)庫是軟件開發(fā)中最常見的一個組件,它的工作原理是必然要掌握的,造一個輪子涉及到這么多知識:

      1. 實現(xiàn)對SQL的解析,你需要實現(xiàn)一個語法分析器, 《編譯原理》的基礎(chǔ)知識就用上了。 

      2. 數(shù)據(jù)需要保存到硬盤上,你需要考慮存儲引擎,涉及到《操作系統(tǒng)知識》需要對外提供接口,設(shè)計數(shù)據(jù)結(jié)構(gòu),《數(shù)據(jù)結(jié)構(gòu)》的知識就會用上 

      3. 需要實現(xiàn)索引,B+樹是必須的,又是數(shù)據(jù)結(jié)構(gòu) 

      4. 需要做表的Join,事務(wù)的ACID,  又有各種算法 

      5. 如果需要提供網(wǎng)絡(luò)訪問,還要涉及到socket等計算機網(wǎng)絡(luò)的知識。

      可能會覺得有點難, 但是現(xiàn)在有一個開源的例子:SQLite, 核心代碼只有幾萬行左右,網(wǎng)上相關(guān)的小書,文章多如牛毛,官方的文檔寫得也很棒,例如這個講 SQLite Architecutre 的文章:

      https://www./arch.html

      圖片

      GitHub上還有人在教你一步一步地實現(xiàn)SQLite, 比如這一個:https://cstack./db_tutorial/, 你也可以參與進去,成為一個貢獻者,這要比整一些面經(jīng)、盜版PDF來賺star不知道好多少倍。

      關(guān)鍵是看你有沒有定力,愿意深入進去學習了。你要是把它搞定了,會學到很多知識,在大廠面試中也是極大的兩點。

      操作系統(tǒng)

      不是讓你寫一個像Windows、Linux那樣完整的操作系統(tǒng),那是成千上萬的人經(jīng)年累月的勞動完成的。

      我這里說的操作系統(tǒng)是操作系統(tǒng)的內(nèi)核,或者更簡單一點,操作系統(tǒng)課程的大實驗,就是能把一個小系統(tǒng)跑起來,能夠把進程、線程、分頁、調(diào)度這些概念能夠真真切切地體現(xiàn)到代碼中,有個直觀的認識。

      中國的知名大學,世界知名大學的操作系統(tǒng)課都有大實驗,有一個現(xiàn)成的小系統(tǒng)讓你去學習,分析。比如MIT有xv6,哈佛有OS/161,伯克利有Nachos,斯坦福有PrintOS, 清華有ucore等等。這些代碼全是開源的,也都在1兩萬行上下,完全可以在大學期間啃下來。

      有些還有配套的視頻,比如清華在線的慕課:https://next./course/THU08091000267/1516699

      編程語言

      現(xiàn)在市面上的編程語言太多了,你可能會選擇一個作為自己吃飯的語言,比如Java, 但是在工作以后,你會受到各種新語言,尤其是熱門語言的誘惑,忍不住就想去碰一下。

      實際上語言雖多,但是語言特性卻沒多大的發(fā)展,無非是面向過程,面向?qū)ο?,函?shù)式,元編程,錯誤處理,泛型,靜態(tài)類型,動態(tài)類型,字節(jié)碼等等。

      (參見文章《兩年,我學會了所有的編程語言》)

      如果自己能實現(xiàn)一個語言,把這些特性包含進去,豈不是很爽?這樣你以后無論看到任何語言,你都能理解它為什么那么設(shè)計,有什么優(yōu)缺點,對語言的認識會非常深刻。

      不用擔心從哪里下手,市面上有很多的資料,叫《自制編程語言》的書都有兩本, 還有《兩周自制腳本語言》,編譯器相關(guān)的書也非常多。

      很多現(xiàn)代的語言都是基于虛擬機和字節(jié)碼的,例如Java, Python, Ruby , 連JavaScript都要編譯成字節(jié)碼被瀏覽器執(zhí)行了。

      (參見文章《字節(jié)碼萬歲》)

      所以寫一個高級語言虛擬機也是一個非常有用的實踐,你需要理解字節(jié)碼指令,實現(xiàn)順序、分支、循環(huán),函數(shù)調(diào)用,多態(tài)等功能,非常有趣。

      網(wǎng)絡(luò)程序

      這個范圍很廣,可以是:

      像Ngnix 那樣的HTTP服務(wù)器:實現(xiàn)HTTP協(xié)議,學習epoll,反向代理,模塊化設(shè)計等等

      或者像Tomcat這樣Web應(yīng)用服務(wù)器,既支持HTTP協(xié)議,又可以運行Servlet和JSP。 

      或者是Redis這樣的高性能的緩存服務(wù),學習它和客戶端的協(xié)議設(shè)計,如何快速地存取數(shù)據(jù),對外提供的API,持久化等。

      有人說它們屬于中間件,也有道理,因為不是OS和數(shù)據(jù)庫這樣的基礎(chǔ)軟件,又不是單純的應(yīng)用軟件,將來工作以后,日常打交道非常多,造一個輪子,發(fā)到GitHub上, 寫到簡歷中,非常吸睛。 

      總結(jié)

      在大學期間能搞定其中的一個就行, 我個人更推薦數(shù)據(jù)庫和操作系統(tǒng)。

      這些輪子非常考驗人的專注力和耐性,你的同學都在寫漂亮的網(wǎng)頁,而你呢,孤獨地面對著C語言和指針, 有點結(jié)果也只會輸出到黑乎乎的命令行窗口中,很容易放棄。

      但是你知道,這才是技術(shù)這顆大樹的根,把根栽好了,剩下的枝和葉都是非常容易得到的東西。

      越是厲害的公司,越是厲害的崗位,對根基的要求就越高,因為招式容易練習,但是基礎(chǔ)卻需要長時間的艱苦積累。

      和大家一起共勉。

      圖片
      ·················END·················

        本站是提供個人知識管理的網(wǎng)絡(luò)存儲空間,所有內(nèi)容均由用戶發(fā)布,不代表本站觀點。請注意甄別內(nèi)容中的聯(lián)系方式、誘導購買等信息,謹防詐騙。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請點擊一鍵舉報。
        轉(zhuǎn)藏 分享 獻花(0

        0條評論

        發(fā)表

        請遵守用戶 評論公約

        類似文章 更多