標籤:style blog http io 使用 ar 檔案 資料 sp
其實我今年大三,充其量也剛剛大三一個月,並沒有什麼資格在這裡班門弄斧,與其是說寫給大一孩子的一封信,倒不如說是對我這兩年來的學習做一個概述和總結,談一談經驗和教訓,能給新人們一些借鑒 便足矣.
我呢,就讀在一個不知名的重本大學,學計科的,眾人口中的二流學校的三流專業. 上大學前,我也沒有接觸過編程,小時候家裡有一台windows98不能上網也玩的不亦樂乎,再後來就跑到朋友家上網打遊戲,憑著這一腔熱血和父母的任我選擇遷就我的態度,我就走上了電腦的道路,立志學好電腦,因為它實在太神奇,對我太有魅力.(^-^)
上大學之前,我對自己的概括就是喜歡思考,喜歡數學.高考後那兩個月裡,我有幸認識了一個學長,我呆在家裡沒什麼意思,就向他請教電腦要學什麼(其實他也就比我大一屆),他告訴我要學c語言,這幾乎是所有學校選擇的入門語言,於是我就這樣開始接觸了編程------->譚浩強,c程式設計語言.. 我還順便找他要了一個編譯器,vc++6.0 . 就是這樣 無聊的我天天在家看c, 我的很認真,也沒有覺得太難, 遇到問題就把書上的代碼寫到vc裡面編譯運行一下,也常常因為少了個分號而頭疼了幾個小時..(畢竟那個時候還不知道有調試這種東西).於是就這樣 一點點的把這本書看完了. 其實總結下自己能看完這本書的原因有一下幾點:1.這書寫的很基礎,易於理解,基本沒錯誤.2.自己有興趣能認真看下去. 唯一不懂的地方當然是指標了.對於那時的我的理解就是 指標就是一個 地址的東西,地址是什麼 我也不知道.. 反正就是這麼回事(A是B,B是C ,可是我不知道B是C是什麼意思,但老師也不會問,只要你能說出來A是B就行....Σ( ° △ °|||)︴)
於是就這樣,我來到了我的大學,大一上的專業課就是離散數學和c語言了,c語言我聽起來當然很輕鬆,但是幾門數學就讓人很難受了,有高等數學,離散數學,線性代數, 每次上這些課 我的頭都暈暈的, (這裡先不吐槽,放到後面一起談).. 對於一個剛上大學來學離散的人,沒有點基礎說能聽懂都是騙人的. 剛上大一的孩子, 眼裡只有從高中數學繼承而來的數學觀念,似乎從來沒有想過為什麼會有這麼多數學,離散數學作為一個電腦的核心課程,不是能夠輕鬆講明白和輕鬆理解透的.事實證明 既沒講明白也沒理解透.
大學的時間 對於大一的孩子來說總是忙碌的,常常要早早的趕著去上課,下課後又趕著去開社團的例會,隔三差五還要舉辦些憑空而來的活動,或者常常收到一個 下午**點在**辦公室開會 的觸目驚心的簡訊.
不過在我大一上的時間裡,也有幸加入了ACM社團,學長們說,搞好演算法,以後就會變得了不起,就會....就會XXX.. 演算法在我心目中的位置頓時高大上了多少倍,於是每周都會有培訓,大家在一起做題,刷題,感覺還是不錯的. 不過好景不長,漸漸地我發現了,貌似搞演算法的學長沒有那麼多,學姐更是一個都沒有,也沒有那麼多熱愛演算法的人,而且貌似帶我們的人 也不是很會演算法, 我也有些小失望,漸漸的 似乎刷題的人越來越少 最後就沒人了.. 偶爾回來看看我在hdu上刷的題, 也就200+道. 但是搞ACM確實是有收穫的,就好像 c語言是一把工具,而演算法就是讓你通過這把工具 做你想做的事情!
大一下的專業課是 資料結構和c++ , 資料結構是什麼, 其實就是資料的結構而已, 只不過大家沒寫過應用沒做過軟體,始終不能理解到這個簡單的本質, 當然當時我也沒理解到. c++更不用說了, 物件導向也就是OOP. 我敢肯定教這麼課的老師我不知道什麼是OOP, 在她眼裡以及 其實在眾多的同學眼裡, c++只不過是有了對象的c,或者說 只不過是一門基於對象的語言吧(真的談不上物件導向設計開發)
大一就學了這麼點東西,可是我真的好難受, 學了一年的電腦也就只能在黑框框裡面寫個電腦而已,寫個老師規定的input(a+b) , 我時常笑笑我自己, 雖然我很努力,但是收穫的可能有一些,但並不總是快樂的.比如我看了c語言的四書五經(c和指標 c缺陷和陷阱 c專家編程 c程式設計語言(機械工業出版社的那本)) ,很多地方都是看了不懂,理解不進去, 自己常常很懊惱,很鬱悶,也沒有人能問,老師上完課就走,也不會關心你.似乎專業的學長們大部分也都是很水.(我不提學校,看看就好)
顯而易見,學習知識的快樂當然沒有打英雄聯盟來的簡單和方便,就像喝酒一樣, 你總是可以麻痹自己,不去想那麼多是是非非,怎麼學好電腦. 放下自己那顆上進心,投身到夜色下的歡樂和日光下的瞌睡中. 大一越往後 變得越不積極,不主動,偶爾也會像良心驚醒一樣想想該做什麼,但是看看遊戲,又想想學電腦是多麼痛苦,還是轉身投入到自己那14.4英寸的筆記本裡面的遊戲中, 寢室這麼多人, 開黑從來不缺人. 我比較喜歡玩打野, 我不喜歡太複雜的東西,簡單點,快樂點,我就知足.就這樣大一過去了
大二來了,大一就這麼快的翻過去了.更過分的是,學校第一學期的課程竟然沒有安排專業課,唯一一個相關的勉強算得上的也就是 類比電路,天啊 這是硬體啊, 我一個計科的學這個 確實好痛苦啊, (其實這個東西學組成原理的時候可能會用到) 不過掛科倒是不會的,反正 大學的期末考試 你懂得.^_^
我問過很多人,該學什麼,怎樣能學好電腦,問過老師,問過學長,問過畢業的學長,百度搜過,csdn上也找過,各種論壇也轉過.似乎答案有很多 ,千奇百怪. 大二上我還試著看 Qt呢, 我還看了Windows程式設計呢..看的簡直是雲裡霧裡 要生要死的..雖然我沒有什麼進步,但是我知道不能像大一那樣頹廢下去,南方的冬天真是寒冷,我一個來自東北的孩子,穿著羽絨服,坐在沒有空調的實驗室裡,簡直了,,凍的要死..就這樣,在一個小太陽的陪伴下,勉強度過了這個寒冷的南方的冬天.,(每次一用小太陽,烤的就想睡覺..有的時候就只能凍著自己,實在不行了用一下. 本科生不給空調, 但是 老師的辦公室裡都有空調, 教室裡, 這個學校裡有天花板的地方都有空調,我真是無語,自己出錢 自己付電費裝空調都不行,學校到底是要幹嘛!)
似乎我上面亂七八糟的說的太多了吧,不過我只是一一的把我的經曆都記下來,如果只挑一些重點寫寫就會讓別人覺得我像在寫傳奇一樣,反正能認真看下來的也會看下去,不能認真看下去的估計也看不到這句話.
其實我就是這樣,一直在嘗試,學了很多東西,碰壁了很多次,也不知道自己有了多少想不明白的問題,也不知道自己在百度裡面搜尋的了多少問題. 不過功夫不負有心人, 在一個學長告訴我要看 深入理解電腦系統 後,我似乎找到了方向,(也挺痛苦)..不管怎麼說也要感謝這個學長吧,畢竟保研去了中科院,果然是有實力的..
深入理解電腦系統這書,真是不薄,我就這樣又開始啃了一本新的書,反正我已經習慣了, 第一章是概述,電腦系統漫遊,一開始看 看的我是雲裡霧裡的,,直接過了.第二章是電腦中的二進位, 各種二進位的表示, 看起來還是可以理解的,到了後面講浮點數的二進位表示,我勒個去..跪了,第二章就看這麼多吧 ,,於是我就來到了第三章,第三章是講彙編的, 彙編這種東西,看著頭不頭疼? 頭疼! 難不難? 其實不難. 彙編就是一種簡單而十分基本的語言,1就是1 ,0就是0. 但是我還會好奇 怎麼書上的彙編和別的地方的彙編不一樣 怎麼這裡寫的是movsbl 到了別的地方 還有MOV DWORD ... 亂七八糟的... 暈了,不管怎麼說 在這本書上 彙編的格式還都是一樣的,,讓我蠻欣慰的,能讓我有了繼續看下去的勇氣,(其實後來才知道 彙編是與硬體相關的,所以彙編有多種多樣,書上採用的是ATT格式的彙編, 我看的另外的那種事IBM的彙編,不同的彙編用的不同種類的彙編器,彙編還分16位的32的64的 說不定以後還會有128的 不過從個人觀點來看,短時間內暫時不會到128,畢竟64位支援的記憶體已經不小了 是4G*4G這麼大,這裡的G是計數單位,不是容量).
我就這樣一點一點看下去,第四章是處理器的指令流水,寫這篇日記的時候這本書放宿舍了 所以我只能憑記憶去想了..(我覺得根據記憶寫更好一點,記住什麼是什麼). 這一章講了程式是怎麼在處理上啟動並執行, 其實仔細一想,處理器就是一個能夠執行指令的東西,只不過為了提高效率,做了各種處理,比如每一條指令都分為 取指,解碼,.........應該是7個步驟吧,我記得不大清楚了, 然後還涉及到了多級流水, 我記得我當時還去看了大話處理器,之類的電子書, 反正是看了,但是反正也沒看懂!. 其實這一章我看到後面也不大懂,就過了..
接下裡是第五章: 講程式最佳化的,從代碼層次上,到深入點的彙編層次上的.反正就是最佳化.我就是這麼理解的. 第六章講的是 儲存空間結構, 不得不說 ,人類真是個偉大的發明家, 針對於馮諾依曼體系而言, 處理器+儲存空間 這樣的一個體系,對於提高效能力來說可真的是費盡心機, 眾所周的儲存空間山 ,從上到下分別是 寄存器,cache(1,2,3),主存,本地檔案系統(硬碟),遠程檔案系統. 就是這樣的一個順序,儲存速度越來越慢,造價越來越低, 但是處理器的速度很快,而主存的讀取速度根本跟不上,正是由於局部性原理, 才有了cache這種東西,而且從1級緩衝開始,又有了2級,3級 分別是8位,16位和64位吧.
書中還講解了 快取命中和不命中, 後來又提到了多線程,其實這種一種對快取的汙染,是一種記憶體凍傷吧, 我覺得其實人類一直在 需求與效率直接進行權衡.思想真的很偉大.
第七章講的是連結,當時我是沒怎麼看懂,當時還草草的翻了翻編譯原理,看了一下詞法分析和文法分析,我勒個去,頭大了,不看了. 但是目的還是達到了 連結是什麼,把編譯好的東西 連結到一個 成為一個可執行程式(也就是exe) (這是最簡單的形式,其實還有動態連結,千萬不要像我理解的這麼狹隘).
第八章講的是異常控制流程,控制異常嘛,唯一的感覺就是異常並不代表錯誤,這裡面還講到了作業系統通過訊號量控制異常,看的不是很好懂,但是主題思想我還是領會了的,至少沒算白看...(不要瞧不起我這種阿Q精神,至少能支援我繼續看下去..)
第九章是虛擬儲存空間了, 這一章真的是把我之前學的東西慢慢的都聯絡在一下了,編程其實就是寫一些人類能懂的語言,然後把這些東西翻譯成電腦的能懂的語言,也就是機器指令儲存在硬碟上,然後在執行,也就是把這寫機器指令載入到記憶體中,但是作業系統做了一個很聰明的調用,就是虛擬儲存空間,它給所有進程提供了一種假象,每個進程都可以從0開始使用所有的記憶體,而實際上只不過是當進程需要用到記憶體時,再把它分配到實際的記憶體中去, 我想再誇一下,人類是多偉大, 學電腦的過程中,漸漸的不再覺得電腦是個多麼神奇的東西,它簡直笨死了!
剩下幾章是講 IO.網路編程.伺服器編寫.差不多是這麼些吧. 其實因為前面的基礎打的不牢,而且第一次也打不牢,後面越看越吃力是顯而易見的,所以後幾張就沒有看的太細. 不過最近我又把後面幾章補了補.這本書的真的是功不可沒.
其實看完這本書,也就可以說是真的對電腦有個整體的認識了,不過這本書真的很難,不是一遍兩遍能看懂的.有的章節我都看過三遍了, 電腦系統這個東西,沒有幾個人敢寫這樣的書,因為它太複雜了,我還想去看看linux核心源碼.看了一眼還是算了..我應該好好思考自己該做什麼了,學會學知識,更要學會吸收和思考,這本書真的很好,我在看這麼書的時候也看了很多其他的資料,看到彙編的時候去看了別的彙編,看處理器的時候看了看大化處理,後來還看了電腦網路,tcpip編程,還翻過編譯原理,組成原理,作業系統. 這本書就想一根線一樣,把我的知識脈絡理清了,雖然這些書我能看懂的不多,但是我認識了電腦,知道了各種東西在電腦的體系中佔據了一個什麼樣的地位.在學習的過程中,我也知道,我並不是一個喜歡數學的人,我很懶,懶到希望寫一段code完成我想做的事情,在這個IoE的時代,我還是對電腦充滿信心的. 我也整理過大一的時候買過的書,加起來1000多元啊... 心疼..
這裡寫給新生們的幾點建議吧,作為一個比你們大兩年,(也就是剛入行兩年);
1.學會百度, internet上的資訊什麼都有,只要你學會搜尋,關鍵字知道吧? 要是你想搜點更高深的去找找google hacking . 在Google的搜尋方塊裡輸入一個 inurl:php?id= ,看看會發現什麼?
2.學會思考.
3.要有興趣,並學會堅持.
4.客觀的看別人的見解,別人說的,別人認為的,別人說怎麼樣怎麼樣,一定要有獨立的觀點,
做一個獨立思考者.
5.不要太著眼於新技術, 那些趕時髦的東西也都是從 下面向上發展而來的,而他們的出現,只不過為瞭解決低一層解決起來不方便問題是衍生的.
6.電腦科學和電腦技術是兩個不同的領域,對於我的理解,就是一個需要很nb的數學,一個不需要數學, ( 不過 貌似 底層的東西應該也需要數學吧 )
7.拓寬自己的知識面.最好也能看看這本書--深入理解電腦系統
我想到什麼就說什麼啊 ,怎麼思考是你們的事情.我不想誤導你們.
想起自己大二下的時候每天抱著這麼一本聖經遊走於實驗室和圖書館之間,在實驗呆不下去了就去圖書館看,圖書館不想看了,就抱回實驗室看,騙騙自己,換個環境.翹課也翹的不少,不過時間都是用來看書的,常常上午空了兩個小時去圖書幹看書,或者下午2點去圖書管看到6點再走,或者7點看到9點 回到實驗室再看, 不要以為時間很多,有的時候兩個小時也就看了幾頁,我也會拿著紙和筆在我的書上寫來寫去,能不看暈,也是個能力..嘿嘿..
多看書,才能保證自己不愚昧,想寫軟體,可以去看看設計模式,搞搞數學建模,看看運籌學(這個我沒看過,不過這書我有) 搞搞演算法 看看演算法導論(這個太難),看看那個樓教主寫的那本,還有一本白色書皮的那個作者姓巫的書也挺好的.反正我是沒堅持下來,或者搞搞影像處理,(我沒搞) 我的興趣還是在偏向底層一點,最近爆出的bash執行漏洞.,,前一陣子的openssl ,看了很多,但是我真的看不懂..
對了,對Web感興趣的話,看看asp,php,jsp等指令碼語言,還有python,覺得也不錯,瀏覽器語言js學學也挺好的..指令碼語言見效快..學起來有信心,瞭解一下 web頁面就是dom的這樣的一個結構,**p也只不過是一種指令碼解析方式, 看看電腦網路,瞭解一下電腦網路體繫結構也是挺好的,看過之後覺得自己懂了,心裡就很舒服,你可以拿著burpsuite截獲個http包看看.
底層的話看看反組譯碼逆向分析,0day安全那書,當時查了有好多,沒記住,都存在我的電腦裡了..
附一張我當時各種搜集資料的圖,亂七八糟的,感興趣的也可以按照自己的認知方向分類.
.最後提一下比較經典的書(經典的書不一定那麼容易懂):
c語言的四書五經:c程式設計語言(機械工業出版社的),c和指標,c缺陷和陷阱,c專家編程
資料結構: 國內的那個考研專用書嚴蔚敏的,還有一本是機械工業出版社的資料結構 寫的不錯,還有一本是大話資料結構,寫的簡單易懂,(易懂的東西一般寫的稍微淺一點,但是他易懂的,都是我看過的 ,沒看過的我盡量不亂推薦)
c++: c++ primer(我沒看過,外人說的經典), c++ primer plus(不推薦看..太長了太厚了)
還是隨便找一本的吧..
仔細想想我還是不推薦了, 畢竟我就是一個小菜, 我一般看書的話都會去找各種資料,因為每一份資料都是一種觀點,當有好多人在向你講述一個東西時候你看的才會全面.
其實我大二結束的時候就想寫了,但有的時候想想還是算了,不想被說成賣弄,面對學校這種教育,以及可能會有很多像我這樣的 把自己現身於水深火熱的迷茫中的大一孩子,希望你們看到後,多少能有點方向,並且做好心裡準備,往後的路 ,走起來不會那麼容易.大家都在慢慢長大.
(我不想吐槽學校了. 它真的不重要,(不要問我是哪個學校的))
多說一句,知道為什麼往往比知道怎麼做要重要的多.
不知不覺寫了兩個多小時,希望贊同的人能支援一下,也希望能有想學電腦的人能看到這個文章,並真心希望多少能對你們有些協助,能簡單解決的問題不叫問題,能輕鬆做好的事不叫大事.就這樣吧
.
by 晴天小豬
2014.10.2
(轉載請註明出處 :http://blog.csdn.net/airuozhaoyang/article/details/39736111)
寫給剛入行學電腦孩子的一封信