① 讀書活動個人讀書方法總結
讀書活動個人讀書方法總結
書是智慧的翅膀,書是我們人類最寶貴的財富。在學校組織的營造書香校園系列活動中,為了給學生營造一個書香環境,為了讓每一個孩子都與書交朋友,為了激發他們讀書的興趣,讓他們想讀書、愛讀書、會讀書,從小養成熱愛書籍、博覽群書的好習慣,我班主要做了以下系列工作:
一、閱讀時間,得到保證
1.每兩周安排一節課外閱讀指導課,主要是利用早讀進行必要的指導。
3.回家後學生自主閱讀40分鍾,並做好讀書筆記。基本上每周兩次摘記。
二、為學生提供了閱讀交流和展示的平台
1.生生共讀。每天利用課余時間最少進行四十分鍾的閱讀,並進行讀書心得交流。
2.師生共讀。從老師自身做起,以身作則,每天做到和同學們一起讀書。師生同讀一本書,在班上講故事相互交流。
3.教給學生掌握幾種常見的閱讀方法:一是精讀法,要求每分鍾讀200字以上,理解率在90%以上;二是略讀法,要求每分鍾讀200~400字之間,理解率在80%左右;三是快讀法,能一目十行法,要求每分鍾讀400字以上,理解率達到70%。
4.指導學生針對性的閱讀。
(1)告訴學生讀書要在心中有個自讀提綱:比如①看見了題目你想到些什麼②讀後你知道了什麼還想知道些什麼③你還有哪些不明白的問題要求學生做到眼到心到。
(2)然後重點強化「不動筆墨不讀書」的方法:①圈點勾畫。即用相關的符號在書上記錄下自己閱讀時的見解、感受。②做批註。即在文章旁邊寫出自己的見解和感受。
5.布置實踐性作業,鍛煉實踐能力。為了檢查學生的閱讀質量,開展相應的活動。如利用讀書卡開展「向你推薦一本好書」、「讀書心得」等內容,讓學生聯系實際談讀書心得,大家一起進步。通過讀書筆記、手抄報讓學生展示從課外閱讀中獲取的知識。
三、閱讀內容,得到落實
1、發揮班級讀書角的作用。鼓勵每位學生從家裡拿五本書來,和學生交換看,豐富讀書資源。
2、利用好語文同步閱讀。和課文配套的同步閱讀我們都要求學生能閱讀好。
3、利用好校本教材《國學》,進行經典閱讀。
有付出必有收獲。一學年來,學生讀書並沒有多少可供量化的成果,但從很多學生的寫作水平的逐步提高就可見端倪了。雨果說:「書籍是改造靈魂的工具。」確實好書就如同是好的生活教科書,它能夠教人怎樣做一個正直的人。我相信,隨著時間的推移,只要學生能在老師的引導下,變得熱愛讀書了,變得喜歡思考了,學會怎樣做人了,就是他們讀書後最大的收獲。
個人讀書方法總結2
不過看這個的前提是:每個人的讀書習慣都是不同的,不要隨便「全盤」拿別人的習慣來培養自己的習慣,找到合適自己的才是最重要的。「全盤」二字重點,不要全盤接受別人的習慣。我下面所說的也不一定是讀到我文章的人所需要的。
我的讀書方法,一些是我爸爸培養的,一些是我以後總結的。
1、挑選合適的時間連續閱讀。
我也一樣不推薦計劃閱讀。看了Jun Yang的文章,在這一點有些共鳴。
C專家編程的作者Peter Van Der Linden曾經玩笑的解釋「什麼時候數組與指針相同」這個標題的時候說:
The C Programming Language,第二版(K&R)99頁的底部是:
作為函數定義的形式參數,
然後翻到第100頁,緊接前一句,
char s[]和char* s是一樣的。
嗚呼,真是不幸,這么重要的一句話竟然在K&R第二版種被分別印在兩頁上。
嗯,如果按計劃看這樣的書,恰巧看到99頁,而不看100頁,那麼100頁的關鍵部位豈不是看不到?呵呵,玩笑。
畢竟連續閱讀頭腦才有印象。看書不是鍛煉,看書不是鍛煉記憶力,獲取書本知識不能「量化」。
2、快速瀏覽,然後多看幾遍。
這個是我爸爸在我小時候就給我提的,我接受了這個建議到現在。他給我說:書你一遍看完就掌握其中重要的內容是不現實的。但是在掌握之前要有個大概的印象,掌握這個印象的方法就是快速瀏覽,不要知道某些條目是為什麼,需要研究的重點就記下來,第二次看的時候再去仔細看,能理解多少就是多少,第一次要以看完為目的。而真正掌握,是隨後的通讀,有了第一遍的基礎,隨著看這本書的次數增加,看書速度會越來越快,因為頭腦里早已經知道那些是沒有掌握的,已經掌握的就會快速略過,但是會加深印象。此後可以帶著實際問題從新來翻閱該書,會有更深的理解。《C++Primer第三版》潘愛民老師翻譯的版本,我在2002年購買到現在看了不知道多少遍了。從最初的花了近3個月的瀏覽第一遍,到現在的可以花一天就可以通讀一遍。期間給我帶來了不少好處。
曾經非常非常不待見這種方法,自從親身使用過好感到確實是好方法。特別是一些技術書籍,盡管你第一遍看的很仔細,你仍然不能記住對你來說第一次接觸到的概念,讀多了(可能跟艾賓浩斯曲線有關吧),記住的概念多了,也就更好理解了。
3、學會記憶也要學會忘記。
記住重點,盡量忘記細節。甚至記住哪本書可以找到這個概念就夠了,然後忘記它。每個人對待書的態度不同的,或許與自己的成長經歷有關。我的習慣是,記住重點,想了解細節再去查。學會記住很難,其實學會忘記也很難。有時候記憶是一種負擔,日積月累會很沉重,不用的知識會越來越多,而且書承載的是作者他的想法,看書在吸收知識的時候,無形中也在被作者所「干涉」思想。但模仿的過程是學習的重要過程,但脫離不了模仿就不能成為自己的思想和知識。學會查是一種重要的手段,還是《C++Primer》,前幾天我還就構造函數和析構函數的細節,特別對多繼承的析構函數作為重點仔細看了一下,有時候一些類似常用的概念,有很多種形式,平時也就用最常用的,那些不常用換言之特殊的概念,能查就可以了。嗯,看了Jun Yang的第二點,他說「知識存儲機器」,呵呵有些誇張了。不過也可以理解他這么說,上面我已經提到書本給我們帶來的負面影響了。
「看書」而不是「讀書」,讀書也是中國常用詞語。英語就是read book。很多人都喜歡用嘴去「讀」書,或者邊看書邊自言自語。這是不太好的一個習慣,讀是一種干擾人思維的方式。語言雖然能加深記憶,但會影響思考。
4、不要「太」強迫自己。
不喜歡就不要看,看不進去可以極端的選擇乾脆不看,或者隔一段時間再看,或者靜下心來的時候再看,或者換一本同類的書,按照自己需要的知識點來尋找書籍。曾經和朋友交流過,他說《編譯原理》也就是那本經典的「龍書」,雖然他也知道很好,可怎麼也看不進去,不知道為什麼。但是看《編譯原理與實踐》,他很容易的就看進去了,之後,他根據掌握的編譯原理寫了一個匯編語言的代碼著色器,可以生成UBB代碼和HTML代碼。
我為什麼要突出不要「太」強迫自己這個「太」呢?有時候也需要強迫一下自己,不能太隨性,也得掌握一個度。有時候很重要的概念書籍,看起來是很枯燥的,朋友建議看的書,可能有他受益過的地方。比如我看《Structure and Interpretation
of Computer Programs(SICP)》,就是那位只能看《編譯原理與實踐》的朋友推薦我看的,北大裘宗燕老師已經翻譯為中文版。經典的SICP是用Lisp描述的,一本古老的介紹functional編程的書。看一點就感覺很乏味,但稍微強迫一下自己,就知道這本書的優異之處。我就是看了求解費波那契數列的使用遞歸,以及遞歸優化那一章,對我以後寫任何語言遞歸的分析,受益那是一輩子的。比如C++之父寫的書,就被公認的哲學味太濃,不適合絕大多數人閱讀,但我就很喜歡看,書本就是這樣,因人而宜,就像配偶一樣,自然有適合自己的一位。
5、有時候需要追根溯源一下,有時候需要換一種角度來看書。
下面是來自:Bejarne Stroustrup在《C++語言的設計與演化》裡面有關「引用」這個概念的提出時候的細節,更多的描述見該書裘宗燕老師翻譯的版本第56頁和第57頁:
引入引用機制主要也是為了支持運算符的重載。Doug McIlroy還記的,有一次我向他解釋某個預示了目前運算符重載模式的問題。他用的術語引用挑起了我的思緒,我嘟囔了一聲謝謝就離開了他的辦公室。當我第二天再出現時就帶著已經基本完成的目前模式。Doug使我想起了Algol 68。
現在引用機製得到了大家認可,一些崇尚C語言高效,但有些抵制C++的牛人們也稱贊了它,這是C++優於C的地方。這里不是討論語言的,關於這些我就不再多說了。自從我看了這一段話之後,我頭腦中所記憶的引用的概念就是「為了支持重載運算符而添加的機制」。嗯,現在可以在很多書或者文章里找到解釋這個引用字眼,引用也不僅僅只用在「重載運算符」上。不過追根溯源看了重載運算符這里,什麼時候該用指針,什麼時候該用引用,我自認為寫的代碼里用的還算合適。中國人非常喜歡對某個知識追根溯源,如果時間允許的話這是好事,從源頭找起,更有助於加深理解。
6、做筆記只是手段而不是最終目的,總結為自己的思想才是最重要的。
看書的最終目的,就是吸收書本知識,成為自己的思想。我個人不喜歡做筆記,我也不喜歡批註,我就喜歡一遍遍的看書。但記住,這是我個人的喜好而已,我父親40歲之前看書就喜歡做讀書筆記,而且很喜歡用沒有條格的速寫本做筆記,但是現在年齡大了看書多反而不去做筆記,喜歡小批註。喜歡做筆記的人,一般是喜歡把自己想要知道的重點記錄下來,可以省卻再次閱讀書本的時間。或者用紙張記錄自己的觀點,給自己做自我總結。這是好習慣,但是我自己就是不喜歡,哈哈:)。我喜歡用我頭腦需要的概念在頭腦中總結,哪怕挑重點的再把這本書看兩遍。以前研究COM的時候做過一段時間的筆記,後來逐漸就放棄了。
7、看到好書後不能讀死書,更不能信奉為「天書」。
看書後不能白看,多多的反思自己,然後有批評的眼光看待這本書,看待自己甚至別人的觀點或者代碼。很早就感悟到「適度」的重要性,盡量不走極端,包括批評本身。但不知不覺就會慢慢走向極端,這時需要適度的修正自己,應用書本的知識。我聽到過許多別人的話,比如C/C++已經過時,JAVA才是最先進的,或者C#有多麼多麼先進,或者UNIX哲學一派,面向對象就是些花哨的東西C語言就足夠用了。這類極端的話有些是自己想的,但絕大多數是人雲亦雲的跟風和受書本的影響。說JAVA先進的,我會問他,你能用JAVA寫操作系統嘛?說面向對象花哨的,我會拿出一些C語言很不容易編寫的方面給他看,比如3D游戲。聽到我的話這些人會閉嘴的,總有長處和短處存在。知其然,知其所以然。
8、書面知識是死的,實際應用才是活的,根據自己的需要,活用參考書。
有些書涉及的知識面很廣,比如參考書,通讀真的很難。如果條件允許的話,尋找一些實際的問題看書,會更好的理解。為了工作,我曾經就快速排序做過研究,也和許多朋友交流過。我帶著這個問題翻看了許多演算法書籍,包括《計算機程序設計藝術》《C演算法》《編程珠璣》之類的經典著作,也參考了許多代碼。《計算機程序設計藝術》很厚,我只取其中一章而已,這本書我沒有看完,不過裡面單獨的幾章,我看的很仔細。當然,我沒看完也沒資格給蓋茨發簡歷.
9、給自己定位,你是否適合從書本獲取知識。
我有個朋友,他幾乎不看技術書,但是他的思維很開闊,很容易理解新概念和方法,我只需要和他說一說他隨便上網看看資料就夠了。他做的系統很耐用,我也不容易挑出毛病。看書反而限制他的思維方式,這點我拍馬趕不上,我只能看看書,呵呵。所以說獲取知識並不一定只有看書,朋友們的交流,網路上的論文和資料都是很好的資源。只給自己一個定位,是不是真的適合看書才能增長你的知識。記得以前和tinyfool有過一些交流,此人就是不需要看太多書籍的.人。
10、最好能和作者交流一下。現在互聯網豐富,我們也可以通過郵件和作者交流了。
我研究快速排序的時候,曾經和Julian Bucknall,《Delphi演算法和數據結構》的作者用電子郵件交流過,他給我指出了我理解上的偏差,讓我受益匪淺。高山仰止,外加猜測理解,還不如直接去問作者。
最後,就用《論語》里的那句話來總結一下:學而不思則罔,思而不學則殆。
很贊,其中的幾個建議也是我的習慣.
此外,我在學習一個知識點的時候,心中始終抱著一個目標,就是最終要能寫出一篇很好的survey,這樣一來在閱讀思考的時候總是有意無意地在整理知識的結構,並且往深處想。我的實踐表明這是一個很棒的技巧。
在樓主的基礎上,補充幾個我自己的讀書習慣
1、在看新書的時候,就會拿幾本一起聯合著來看(而不管那其中的某一本書有多經典)。理解->總結->求交集->挑毛病->求證->結論或疑問(算是critical thinking的一種表現吧)
2、經常重復閱讀。就是說,在這次開始讀的時候,不是接著上次停掉的地方讀,而是多向前覆蓋一些,比如:一大段,幾頁,甚至前面的一整章。有時候還隨機地翻開一本書來讀,如果一旦發現找不到感覺,跟不上作者思路,就努力補充知識直到滿意。
3、先在某些人面前表現得"強大"一些,然後為了彌補自己的過度膨脹,就必須要努力加倍地讀書了……百試不爽的辦法,呵呵,從小學時就這樣幹了
我的想法是,有時候換個角度從作者的角度來思考問題,比如說作者為什麼要這么組織結構,作者是怎麼說明某個問題的,這樣思考的話,有時候會有意想不到的收獲:-)
樓主說的很對,最近在看《演算法導論》,症狀基本和你說的差不多,剛開始時雄心勃勃,但過了一陣,效率降低很多,感覺樓主好像在說我,呵呵,開玩笑了。
前一段時間,為了自己的成就感,我只讀書或者說只在意今天讀了多少頁,對於習題,做得不多或者做得不好。因為讀書的時間相對於做題來說少的多,對於《演算法導論》,你一個小時能看不少頁,但當中的習題,有的一個小時根本做不完,因為你得思考。所以讀書時的成就感大受打擊,久而久之,就只看書,不思考了。當然,但我很興奮的讀完一章之後,發現自己的收獲沒有想像中的那麼多。所以現在,自己把讀書分為兩個階段--首先,對於一章,我會不看習題,一口氣把它快速讀完,這可以提高自己的成就感;之後,我會一節一節的細讀、思考和做題,這期間自己的成就感很高(我一看完這一章了,呵呵),不過第二階段的時間不宜過長,否則自己的成就感會降的很低,所以關鍵還得靠努力。這樣用的時間或許很多,但收獲也會很多。以上兩個階段,有點像預習、讀書和復習。當然,這只針對於好書。一般的書,以增長見識為主。
個人讀書方法總結3
一、 存疑。
要帶著質疑的眼光去讀書,不被作者的觀點和思路牽著
鼻子走,任何事情都有特定的環境,任何觀點都是辯證的,任何真理都是相對的,如果不抱著懷疑的眼光去看書思考,就會越看越迷惑,就會「盡信書不如無書」,無法獲得真知。為了存疑,甚至可以強制自己對作者的觀點去攻擊一番,不把作者的觀點駁倒不放手。
二、 精選。
盡量選經典和暢銷書看,對難以讀下去的書盡快丟進垃
圾桶。
三、 系統。
最好成系統地看書,圍繞一個課題看書,在一段時間集
中看某一方面的書,通過對比、聯系、發散、總結,形成對某個問題的較深入和全面的認識;
四、 濃縮。
每看完一本書都要濃縮成摘要,對好書最好回顧,做筆
記寫心得,寫出自己的概括,貼在書前,作為自己以後復習的內容。看一本消化一本,再看其他的書,以達到書越讀越薄、能力越積越厚的目的;
五、 提綱。
但凡看一本書或者一篇文章,務必先看其目錄或結構,
並記憶揣摩這個結構,如果是一篇文章,還可以先考慮一下作者會寫一些什麼。然後再看某段下邊又寫了幾個層次,這樣從宏觀到微觀逐步領會。在讀完之後,再對自己感興趣的內容進行重讀精讀;
六、 復習。
定時對看過的書和文章進行復習。
七、 帶著問題去讀書。
;② 編譯原理
C語言編譯過程詳解
C語言的編譯鏈接過程是要把我們編寫的一個C程序(源代碼)轉換成可以在硬體上運行的程序(可執行代碼),需要進行編譯和鏈接。編譯就是把文本形式源代碼翻譯為機器語言形式的目標文件的過程。鏈接是把目標文件、操作系統的啟動代碼和用到的庫文件進行組織形成最終生成可執行代碼的過程。過程圖解如下:
從圖上可以看到,整個代碼的編譯過程分為編譯和鏈接兩個過程,編譯對應圖中的大括弧括起的部分,其餘則為鏈接過程。
一、編譯過程
編譯過程又可以分成兩個階段:編譯和匯編。
1、編譯
編譯是讀取源程序(字元流),對之進行詞法和語法的分析,將高級語言指令轉換為功能等效的匯編代碼,源文件的編譯過程包含兩個主要階段:
第一個階段是預處理階段,在正式的編譯階段之前進行。預處理階段將根據已放置在文件中的預處理指令來修改源文件的內容。如#include指令就是一個預處理指令,它把頭文件的內容添加到.cpp文件中。這個在編譯之前修改源文件的方式提供了很大的靈活性,以適應不同的計算機和操作系統環境的限制。一個環境需要的代碼跟另一個環境所需的代碼可能有所不同,因為可用的硬體或操作系統是不同的。在許多情況下,可以把用於不同環境的代碼放在同一個文件中,再在預處理階段修改代碼,使之適應當前的環境。
主要是以下幾方面的處理:
(1)宏定義指令,如 #define a b。
對於這種偽指令,預編譯所要做的是將程序中的所有a用b替換,但作為字元串常量的 a則不被替換。還有 #undef,則將取消對某個宏的定義,使以後該串的出現不再被替換。
(2)條件編譯指令,如#ifdef,#ifndef,#else,#elif,#endif等。
這些偽指令的引入使得程序員可以通過定義不同的宏來決定編譯程序對哪些代碼進行處理。預編譯程序將根據有關的文件,將那些不必要的代碼過濾掉
(3) 頭文件包含指令,如#include "FileName"或者#include <FileName>等。
在頭文件中一般用偽指令#define定義了大量的宏(最常見的是字元常量),同時包含有各種外部符號的聲明。採用頭文件的目的主要是為了使某些定義可以供多個不同的C源程序使用。因為在需要用到這些定義的C源程序中,只需加上一條#include語句即可,而不必再在此文件中將這些定義重復一遍。預編譯程序將把頭文件中的定義統統都加入到它所產生的輸出文件中,以供編譯程序對之進行處理。包含到C源程序中的頭文件可以是系統提供的,這些頭文件一般被放在/usr/include目錄下。在程序中#include它們要使用尖括弧(<>)。另外開發人員也可以定義自己的頭文件,這些文件一般與C源程序放在同一目錄下,此時在#include中要用雙引號("")。
(4)特殊符號,預編譯程序可以識別一些特殊的符號。
例如在源程序中出現的LINE標識將被解釋為當前行號(十進制數),FILE則被解釋為當前被編譯的C源程序的名稱。預編譯程序對於在源程序中出現的這些串將用合適的值進行替換。
預編譯程序所完成的基本上是對源程序的「替代」工作。經過此種替代,生成一個沒有宏定義、沒有條件編譯指令、沒有特殊符號的輸出文件。這個文件的含義同沒有經過預處理的源文件是相同的,但內容有所不同。下一步,此輸出文件將作為編譯程序的輸出而被翻譯成為機器指令。
第二個階段編譯、優化階段。經過預編譯得到的輸出文件中,只有常量;如數字、字元串、變數的定義,以及C語言的關鍵字,如main,if,else,for,while,{,}, +,-,*,\等等。
編譯程序所要作得工作就是通過詞法分析和語法分析,在確認所有的指令都符合語法規則之後,將其翻譯成等價的中間代碼表示或匯編代碼。
優化處理是編譯系統中一項比較艱深的技術。它涉及到的問題不僅同編譯技術本身有關,而且同機器的硬體環境也有很大的關系。優化一部分是對中間代碼的優化。這種優化不依賴於具體的計算機。另一種優化則主要針對目標代碼的生成而進行的。
對於前一種優化,主要的工作是刪除公共表達式、循環優化(代碼外提、強度削弱、變換循環控制條件、已知量的合並等)、復寫傳播,以及無用賦值的刪除,等等。
後一種類型的優化同機器的硬體結構密切相關,最主要的是考慮是如何充分利用機器的各個硬體寄存器存放的有關變數的值,以減少對於內存的訪問次數。另外,如何根據機器硬體執行指令的特點(如流水線、RISC、CISC、VLIW等)而對指令進行一些調整使目標代碼比較短,執行的效率比較高,也是一個重要的研究課題。
2、匯編
匯編實際上指把匯編語言代碼翻譯成目標機器指令的過程。對於被翻譯系統處理的每一個C語言源程序,都將最終經過這一處理而得到相應的目標文件。目標文件中所存放的也就是與源程序等效的目標的機器語言代碼。目標文件由段組成。通常一個目標文件中至少有兩個段:
代碼段:該段中所包含的主要是程序的指令。該段一般是可讀和可執行的,但一般卻不可寫。
數據段:主要存放程序中要用到的各種全局變數或靜態的數據。一般數據段都是可讀,可寫,可執行的。
UNIX環境下主要有三種類型的目標文件:
(1)可重定位文件
其中包含有適合於其它目標文件鏈接來創建一個可執行的或者共享的目標文件的代碼和數據。
(2)共享的目標文件
這種文件存放了適合於在兩種上下文里鏈接的代碼和數據。
第一種是鏈接程序可把它與其它可重定位文件及共享的目標文件一起處理來創建另一個 目標文件;
第二種是動態鏈接程序將它與另一個可執行文件及其它的共享目標文件結合到一起,創建一個進程映象。
(3)可執行文件
它包含了一個可以被操作系統創建一個進程來執行之的文件。匯編程序生成的實際上是第一種類型的目標文件。對於後兩種還需要其他的一些處理方能得到,這個就是鏈接程序的工作了。
二、鏈接過程
由匯編程序生成的目標文件並不能立即就被執行,其中可能還有許多沒有解決的問題。
例如,某個源文件中的函數可能引用了另一個源文件中定義的某個符號(如變數或者函數調用等);在程序中可能調用了某個庫文件中的函數,等等。所有的這些問題,都需要經鏈接程序的處理方能得以解決。
鏈接程序的主要工作就是將有關的目標文件彼此相連接,也即將在一個文件中引用的符號同該符號在另外一個文件中的定義連接起來,使得所有的這些目標文件成為一個能夠被操作系統裝入執行的統一整體。
根據開發人員指定的同庫函數的鏈接方式的不同,鏈接處理可分為兩種:
(1)靜態鏈接
在這種鏈接方式下,函數的代碼將從其所在地靜態鏈接庫中被拷貝到最終的可執行程序中。這樣該程序在被執行時這些代碼將被裝入到該進程的虛擬地址空間中。靜態鏈接庫實際上是一個目標文件的集合,其中的每個文件含有庫中的一個或者一組相關函數的代碼。
(2) 動態鏈接
在此種方式下,函數的代碼被放到稱作是動態鏈接庫或共享對象的某個目標文件中。鏈接程序此時所作的只是在最終的可執行程序中記錄下共享對象的名字以及其它少量的登記信息。在此可執行文件被執行時,動態鏈接庫的全部內容將被映射到運行時相應進程的虛地址空間。動態鏈接程序將根據可執行程序中記錄的信息找到相應的函數代碼。
對於可執行文件中的函數調用,可分別採用動態鏈接或靜態鏈接的方法。使用動態鏈接能夠使最終的可執行文件比較短小,並且當共享對象被多個進程使用時能節約一些內存,因為在內存中只需要保存一份此共享對象的代碼。但並不是使用動態鏈接就一定比使用靜態鏈接要優越。在某些情況下動態鏈接可能帶來一些性能上損害。
我們在linux使用的gcc編譯器便是把以上的幾個過程進行捆綁,使用戶只使用一次命令就把編譯工作完成,這的確方便了編譯工作,但對於初學者了解編譯過程就很不利了,下圖便是gcc代理的編譯過程:
從上圖可以看到:
預編譯
將.c 文件轉化成 .i文件
使用的gcc命令是:gcc –E
對應於預處理命令cpp
編譯
將.c/.h文件轉換成.s文件
使用的gcc命令是:gcc –S
對應於編譯命令 cc –S
匯編
將.s 文件轉化成 .o文件
使用的gcc 命令是:gcc –c
對應於匯編命令是 as
鏈接
將.o文件轉化成可執行程序
使用的gcc 命令是: gcc
對應於鏈接命令是 ld
總結起來編譯過程就上面的四個過程:預編譯、編譯、匯編、鏈接。了解這四個過程中所做的工作,對我們理解頭文件、庫等的工作過程是有幫助的,而且清楚的了解編譯鏈接過程還對我們在編程時定位錯誤,以及編程時盡量調動編譯器的檢測錯誤會有很大的幫助的。
是否可以解決您的問題?
③ c(a/g/w)ll選擇哪個
熱門頻道
首頁
博客
研修院
VIP
APP
問答
下載
社區
推薦頻道
活動
招聘
專題
打開CSDN APP
Copyright © 1999-2020, CSDN.NET, All Rights Reserved
打開APP
c語言lr文法還是ll文法,編譯原理復習題 轉載
2021-05-20 05:05:24
Tim Pan
碼齡4年
關注
一、單項選擇題 概述部分
1.構造編譯程序應掌握 。D A. 源程序 B. 目標語言 C. 編譯方法 D. 以上三項都是 2.編譯程序絕大多數時間花在 上。D
A. 出錯處理
B. 詞法分析
C. 目標代碼生成
D. 表格管理 3.編譯程序是對 。D
A. 匯編程序的翻譯
B. 高級語言程序的解釋執行
C. 機器語言的執行
D. 高級語言的翻譯 4. 將編譯程序分成若干「遍」,是為了 。B
A. 提高程序的執行效率
B. 使程序的結構更為清晰 C 利用有限的機器內存並提高機器的執行效率 D. 利用有限的機器內存但降低了機器的執行效率
詞法分析部分
1.DFA M(見圖1-1)接受的字集為 。D A. 以0開頭的二進制數組成的集合
B. 以0結尾的二進制數組成的集合
.png
C. 含奇數個0的二進制數組成的集合
D. 含偶數個0的二進制數組成的集合
2.詞法分析器的輸出結果是 。C
A. 單詞的種別編碼
B. 單詞在符號表中的位置
C. 單詞的種別編碼和自身值
D. 單詞自身值 3.正規式M1和M2等價是指 。C A. M1和M2的狀態數相等 B. M1和M2的有向邊條數相等 C. M1和M2所識別的語言集相等 D. M1和M2狀態數和有向邊條數相等 4.詞法分析器的加工對象是 。 C A .中間代碼 B .單詞 C .源程序 D .元程序 5.同正規式(a|b )*等價的正規式為 。D A .(a|b)+ B .a*|b* C .(ab)* D .(a*|b*)+ 6. 兩個DFA 等價是指: 。 D A. 這兩個DFA 的狀態數相同
B. 這兩個DFA 的狀態數和有向弧條數都相等
C. 這兩個DFA 的有向弧條數相等
D. 這兩個DFA 接受的語言相同
7. 下列符號串不可以由符號集S ={a,b}上的正閉包運算產生的是:(A ) A. ε B. a C. aa D. ab 8.稱有限自動機A1和A2等價是指________。D A .A1和A2都是定義在一個字母表上的有限自動機 B .A1和A2狀態數和有向邊數相等
圖1-1
1
相關資源:編譯原理賦值語句的翻譯LL文法LR文法簡單優先法-專業指導文檔類...
文章知識點與官方知識檔案匹配
C技能樹首頁概覽
110422 人正在系統學習中
打開CSDN APP,看更多技術內容
編譯原理五 LR(1)分析法【C語言實現】_wangkay88的博客
1、使用 LR 的優點: (1)LR 分析器能夠構造來識別所有能用上下文無關文法寫的程序設計語言的結構。 (2)LR 分析方法是已知的最一般的無回溯移進-歸約方法,它能夠和其他移進-歸約方法 一樣有效地實現。 (3)LR 方法能分析的文法...
lr參數與C語言函數參數的區別_weixin_30254435的博客
LR參數是lr自己封裝的一個鍾對象, LR參數的表達方式:{ParamName}
編譯原理習題——第2章 文法和語言試卷
第2章 文法和語言試卷 1. 文法:G:S→xSx|y所識別的語言是(D)。 A. xyx B. (xyx)* C.x*yx* D. xnyxn(n≥0) 2. 給定文法A→bA|ca,為該文法句子的是(C)。 A. bba B. cab C. bca D. cba 3. 文法G產生的(D)的全體是該文法描述的語言。 A. 句型 B. 終結符集 C. 非終結符集 D. 句子 4. 若文法G...
繼續訪問
編譯原理習題(含答案)——2程序設計語言及其文法——哈工大陳鄞配套版本
程序設計語言及其文法1 文法:G:S→xSx | y所識別的語言是( )。 2 給定文法A→bA|ca,為該文法句子的是( )。A. bbaB. cabC. bcaD. Cba 3 設有文法G[S]:S->S1|S0|Sa|Sc|a|b|c,下列符號串中是該文法的句子有( )。A. ab0B. a0b01C. a0b0aD. bc10 4 文法G產生的( )的全體是該文法描述的語言。A. ...
繼續訪問
c語言lr分析器的設計與實現_[源碼和文檔分享]基於LR分析法的簡單分析法...
通過設計、編制、調試一個簡單計算器程序,加深對語法及語義分析原理的理解,並實現詞法分析程序對單詞序列的詞法檢查和分析。 二、課程設計內容及步驟 本次課程設計需要使用 LR 分析法完成簡單計算器的設計,其中算術表達式的文法如下: ...
C語言實現編譯原理的LR分析法,編譯原理LR(0)分析器(C語言).pdf
1LR 分析法 LR LR 「 分析法是一種自底向上進行的規范規約的語法分析方法, 指 自左向 右掃描和自底向上進行歸約」。LR 分析法的一個主要缺點是,若用手工構造分析 LR 器則工作量相當大,因此必須求助於自動產生 分析器的產生器。
編譯原理 第三章 詞法分析
1、詞法分析器的輸出結果是單詞的種類編碼和自身值 2、詞法分析器不能發現括弧不匹配 3、不存在語言能被確定的有窮自動機識別但不能用正則表達式表示 4、兩個有窮自動機等價實質它們的所識別的語言相等 5、詞法分析器用於識別單詞 6、正則表達式R1和R2等價是指R1和R2代表同一正則集 7、已知文法G[S]:S->A1, A->A1|S0|0,與G等價的正規式是0(1|10)^1 8、與(a...
繼續訪問
【編譯原理-練習題-1】概述部分與詞法分析部分選擇,填空,判斷,多選題
一、單項選擇題 1.構造編譯程序應掌握 (D ) 。 a. 源程序 b. 目標語言 c. 編譯方法 d. 以上三項都是 2.編譯程序絕大多數時間花在 (D) 上。 a. 出錯處理 b. 詞法分析 c. 目標代碼生成 d. 表格管理 3.DFA M(見圖1-1)接受的字集為(D ) 。 a. 以0開頭的二進制數組成的集合 b. 以0結尾的二進制數組成的集合 ...
繼續訪問
LR中用C語言比較兩個字元串變數_花露絲雨的博客
6.lr_save_string( "We can see the string:nancy","string1" ); 7.lr_save_string( "We can see the string:nancy","string2" ); 8.lr_output_message("the string1 is %s.",lr_eval_string("{string1}")); ...
c語言字元串變數的比較,LR中用C語言比較兩個字元串變數.doc_夢符佳月...
LR中用C語言比較兩個字元串變數 Zee的早期文檔.一:以下腳本,定義兩個一樣的字元數組,對比後,列印出result的值: vuser_init() { int result; ? ???char string1[] = "We can see the string:zee"; ...
最新發布 編譯原理刷題(個人向)
編譯原理刷題
繼續訪問
【編譯原理】課後習題
1.構造編譯程序應掌握:源程序、目標語言、編譯方法 2.編譯程序絕大多數時間花在表格管理上 3. 4.一個程序是正確的,包括兩層含義:一是書寫正確;二是含義正確 (合乎語法規則、合乎語義規則) 5.描述高級語言語法常用的方法有語法樹、BNF範式、擴充的BNF範式等 6.程序語言一般可以分為低級語言和高級語言兩大類,其中低級語言通常又稱為面向機器的語言。面向機器語言指的是特定計算機系統所...
繼續訪問
C語言實現編譯原理的LR分析法,實驗三編譯原理綜合實驗報告——(LR...
注意:本例是利用LR(0)分析來實現的語法分析,同學在寫實驗報告的時候,在結果分析這一塊可以選用課堂講過的LR(0)文法來說明驗證結果即可。 同時附上你所選用的文法對應的LR(0)分析表。
編譯原理總結,看這一篇就夠了!_LeeDuo.的博客_編譯原理
1.詞法分析:對源程序的字元串進行掃描和分解,識別出每個單詞符號。 2.語法分析:根據語言的語法規則,把單詞符號分解成各類語法單位。 3.語義分析與中間代碼生成:對各種語法范疇進行靜態語義檢查,若正確則進行中間代碼翻譯。 4.代碼優化:...
C語言LR(1)文法
用C語言編寫,對一個LR(1)文法分析,文法為:實現兩個數的加減乘除四則運算。並能得出計算結果。
熱門推薦 編譯原理習題(含答案)——3詞法分析——哈工大陳鄞配套版本
詞法分析1 詞法分析器的輸出結果是( )。A. 單詞自身值B. 單詞在符號表中的位置C. 單詞的種別編碼 D. 單詞的種別編碼和自身值2 詞法分析器不能( )。A. 識別出數值常量B. 過濾源程序中的注釋C. 掃描源程序並識別記號D. 發現括弧不匹配 3 ( )這樣一些語言,它們能被確定的有窮自動機識別,但不能用正則表達式表示。A. 存在B. 不存在C. 無法判定是否存在D. 以上答案都不對 4 ...
繼續訪問
C--編譯器:C--編譯器,實現LL(1)\ LR(0)\ SLR \ LR(1)並生成語義分析和MIPS
實現了自製的C--語言的一遍掃描編譯,包括詞法分析,LR(1)語法分析,屬性文法+中間代碼生成,MIPS編譯生成編譯腳本由python實現,兼容python2.7與3.7,圖形界面由WPF實現,使用了IronPython進行腳本執行 支持以下特性: 一種基本類型int 賦值表達式,循環/選擇/判斷/跳出語句 函數定義與函數調用 未實現: 浮點數,字元,字元串 斑點 錯誤檢查
編譯原理之LR(0)分析演算法的c實現
LR(0)分析器的構造演算法如下: 對一個文法構造了它的LR(0)分析表後就可以在LR分析器的總控程序(驅動程序)控制下對輸入串進行分析,即根據輸入串的當前符號和分析棧的棧頂狀態查找分析表應採取的動作,對狀態棧和符號棧進行相應的操作即移進、歸約、接受或報錯。具體說明如下: (1)若ACTION[S,a]=Sj,a為終結符,則把a移入符號棧,j移入狀態棧; (2)若ACTION[S,a]=rj,
繼續訪問
編譯原理第一章自測題
第一章 高級語言與編譯程序概述 一、單項選擇題 1.將編譯程序分成若干個「遍」是為了____ 。 A. 提高程序的執行效率 B. 使程序的結構更加清晰 C. 利用有限的機器內存並提高機器的執行效率 D. 利用有限的機器內存但降低了機器的執行效率 2.構造編譯程序應掌握 ____ 。 A. 源程序 B. 目標語言 C. 編譯方法 D. 以上三項都是 3.編譯程序絕大多數時間花在 ____ 上。 A. 出錯處理 B. 詞法分析 C. 目標代碼生成 D. 管理表格
C語言語法分析程序(編譯原理:LR)
北郵大三編譯原理課程序 注釋很詳細
用c++實現LR語法分析器
通過LR分析表及三個棧形成對輸入表達式的判斷! 。
c語言lr文法還是ll文法,編譯原理第五章語法分析課後題
(先補到這里,後面如果有需要的話,垃圾博主還會回來繼續更的。。。)5.1 遞歸子程序法屬於()語法分析方法A. 自頂向下B. 自底向上C. 自左向右D. 自右向左5.2 採用確定的自頂向下分析時,必須()A. 消除左遞歸B. 消除右遞歸C. 避免回溯D. 提取左公因子5.3 自上而下語法分析的主要分析動作是A. 推導B. 移進C. 歸約D. 匹配5.4 一個字元屬於FOLLOW(S),這個字元的含...
繼續訪問
編譯原理,C語言實現LR(0)分析(擴展文法的生成、項目集規范簇的生成、ACTION GOTO表的生成、句子的分析)
編譯原理,C語言實現LR(0)分析(擴展文法的生成、項目集規范簇的生成、ACTION GOTO表的生成、句子的分析) (1)根據提示輸入文法的個數 (2)輸入文法 (3)擴展文法的生成、項目集規范簇的生成、ACTION GOTO表的生成 (3)分析句子 (4)生成分析過程 C語言實現LR(0)分析源代碼
繼續訪問
編譯程序基本原理
編譯程序和解釋程序 人們利用高級語言與計算機進行交互, 但計算機仍然只能理解和執行由 0, 1序列構成的機器語言, 因此高級程序設計語言需要翻譯, 擔負這一任務的程序稱為"語言處理程序", 由於應用的不同, 語言之間的翻譯也是多種多樣的. 大致可分為 匯編程序、解釋程序和編譯程序. 用某種高級語言或匯編語言編寫的程序稱為 源程序, 源程序不能直接在計算機上執行. 如果源程序是用匯編語言寫的, ...
繼續訪問
LR腳本用戶自定義C語言函數
LR腳本實戰:用戶自定義C語言函數 Loadrunner可以使用標准C語言的函數,因此我們可以在腳本中編寫自己的函數用於調用,把腳本結構化,更好的進行重用。 先看一個例子: Action() { int i,j; j = 1; for (i=0;i<10;i++) { lr_message("i+j=%d",sum(i,j)); j++; } ...
繼續訪問
編譯原理,第一章緒論
編譯過程和編譯程序結構 五個階段: 詞法分析 語法分析 語義分析和中間代碼生成 優化 目標代碼生成 編譯程序的開發 自編譯:用某種高級語言編寫自己的編譯程序稱為自編譯, 交叉編譯:用A機器上的編譯程序來產生可在B機器上運行的目標代碼 自展:首先確定一個非常簡單的核心語言L0,然後用機器語言或者匯編語言寫出它的編譯程序T0,再把語言L0擴充到L1,用L0編寫L1的編譯程序T1,這樣不斷擴展下去...
繼續訪問
c語言是 ll文法和lr文法哪個好
c語言lr文法還是ll文法
寫評論
評論
收藏
點贊
踩
分享
④ 編譯原理的終結符和非終結符如何理解
一、非終結符:
1、非終結符可以再分成更細的東西。
2、不是終結符的都是非終結符。非終結符可理解為一個可拆分元素,而終結符是不可拆分的最小元素。終結符號就是語言中用到的基本元素,名詞、動詞、形容詞、助詞等等基本語言單位。
二、終結符:
1、終結符直接就代表一個意思,比如關鍵字if就不能再分成i和f了。
2、通俗的說就是不能單獨出現在推導式左邊的符號,也就是說終結符不能再進行推導。非終結符則是"語法"中用到的元素,除非談論"語法",一般交談語言中並不會用到非終結符。比如:主語、短語、片語、句子。
(4)編譯原理總結反思擴展閱讀:
終結符和非終結符在計算機科學和語言學的領域是用來指定推導規則的元素。在某個形式語法之中,終結符和非終結符是兩個不交的集合。
從形式語言中定義看,終結符(T)就是不可再分的字元或串。而非終結符(N)是一個遞歸形式的定義:由終結符和至少一個非終結符號組成的串。
如果編譯過程中發現源程序有錯誤,編譯程序應報告錯誤的性質和錯誤的發生的地點,並且將錯誤所造成的影響限制在盡可能小的范圍內,使得源程序的其餘部分能繼續被編譯下去,有些編譯程序還能自動糾正錯誤,這些工作由錯誤處理程序完成。
需要注意的是,一般上編譯器只做語法檢查和最簡單的語義檢查,而不檢查程序的邏輯。
網路-終結符
網路-編譯
⑤ 大學生如何提高編程能力
作為一個計科專業畢業的學生,也作為一個工作多年的程序眼,我來講講吧,大學生大學期間,該如何學習編程,提高自己的能力。
我首先想說的是:作為計算機專業的學生,學生最重要的一個階段就是學習基礎和理論知識。
基礎最重要,比如:在大學期間一定要把演算法,數據結構,二叉樹,鏈表,紅黑樹等基本演算法搞清楚,還有就是編譯原理,計算機組成原理,計算機網路,編程語言上 C,C++ 學習好,可能還有 Java,這些語言課程也要深入理解。
一定要學習明白,理解到位。
我經常說的一句話就是: 看似最枯燥、最基礎的東西往往具有最長久的生命力。所以,對於我們程序員成長過程中來說,最重要的是什麼?對,就是那些最基礎的知識。
不要天天談什麼框架,什麼庫,框架每年層出不窮,可是扒下框架那層炫酷漂亮的外衣,裡面還是那些最基礎的知識和原理。
以後你編程這道路,所有的東西都「萬變不離其宗」。如果你基礎好,學習什麼都很快。
作為學生前三年的階段就是要把地基打好。
第二個階段,也就是大四,實踐,去找實習,了解目前業界都在做什麼?最流行的技術是什麼?框架有哪些?在實習階段要學會總結,積累和反思,找到自己在哪方面不足,就往哪方面練習,實踐最重要的兩點就是:一是瘋狂寫代碼,積累經驗。二是尋找自己的不足,再努力改變和學習。
在大學期間,經歷這兩個階段的淬煉,相信你步入社會,能夠找到一份不錯的工作。尤其是大型互聯網公司在校招的時候,對於學生來講,重點面試你們的是基礎知識和演算法,而不是工作經驗。還是那句話,對於學生時代的你們,基礎原理和演算法最重要。
基礎和原理,演算法學好了,才是精通編程最重要的基石。
⑥ 請軟體工程師進
一個老程序員的心裡話! (轉)
風雨十年:一個老程序員的心裡話!
曲折的實踐之路
1.希特勒地堡與cih病毒
99年4月,我來到北京參加研究生復試。復試完了之後就不回去了,我拿著一張光碟,裡面刻著我用vb和authorware3.5編的一個cool 3d的教學軟體,到處參加招聘會,開始了在北京的打工生涯。
說句實話,我心中真是一點底也沒有。北京人才濟濟,我一個三流大學的畢業生,又不是計算機專業的,有人要我嗎?
我在北京無依無靠,沒有任何一個親戚在北京,住成了大問題。北京這地方,錢太不經花,生活費用太高,我四處尋找便宜的地方住。後來,我在北京化工大學對面的招待所中租了個床位,每晚20元,地下室。這個招待所的地下室非常大,每天回去的時候,都要走過長長的曲曲折折的通道,加上那昏黃的燈泡,每次我都有走進了希特勒地堡的感覺。地下室里潮濕陰暗,不見天日。地下室里人員很雜,什麼人都有,永遠沒有一種安全的感覺,所幸的是我也是個窮光蛋,光腳的還怕穿鞋的?別人能呆我也能呆,唯一讓我擔心的是錢,沒錢,在北京連流落街頭都不夠格,立馬被收容去昌平篩沙。呵呵,我沒這種經歷,這是當時住一塊的一個外地要考北京中醫葯大學的博士生說的(我倆居然住到了一個屋裡,大家都沒錢,只能擠地下室,只是他老兄晚上打呼,我可真受了不少罪)。
日子一天天過去,袋裡的錢一天天少了,但工作還是沒著落,心中越來越慌,除去學費,來京時父母給我2000元,大哥資助我的1000元就是我當時的全部資金(3000元在北京能呆多久?!)。我當時訂了個計劃,留下500元保底,打死都不能動,要靠它作路費回家的。我當時說,一定得找到一家公司,再少的錢都干,只要有口飯吃,有張床讓我睡我就滿足了。
我一共應聘了四五家公司,最具傳奇色彩的是到西單附近一家公司的應聘經歷。那時,我帶去了我的作品,公司項目經理要看,於是我給他們演示,很奇怪,程序一打開就死機,一連兩台電腦都一樣,末了,兩台電腦都啟動不起來了。用瑞星一查,cih病毒——那天正是4月26日!於是,cih破壞了電腦主板的同時,也無情地摧毀了我的就業機會。還算老闆可憐我,沒要我賠。其實我當時快到山窮水盡的地步了,真要我出錢,我可能連家都回不了啦。陳盈豪(cih病毒的作者),你小子這么的聰明做什麼不行,偏要去做病毒,害人害已,弄得我連個飯碗也找不到,晚上回「希特勒地堡」,把這小子罵了無數次!
總算天無絕人之路,在我數著最後還剩餘600元錢的時候,終於有一家公司要我了,做中小學教育軟體,月薪1600。幹了兩星期,又給我在公司的倉庫挪開貨物,搭了個床位,我就在那住下了,慶幸再也不用到「希特勒地堡」里當沖鋒隊員了。每天下班後,我就睡在林立的大紙箱之中,如果來個地震,呵呵,我就埋在紙箱中了,休想爬得出來!
我幹得非常努力,第一個月工資開出來,扣掉個人所得稅,我拿了1500多元。你們不知道我拿到第一筆工資的感覺!這錢在很多人眼裡簡直不算錢,但對於一個沒工作近兩年,工作也一個月收入不到200的窮小子而言,就象陳佩斯小品中所演的:「我王老五活了一輩子,還從沒見過這么多錢啊!」。好笑嗎?我一點也不覺得好笑。我只是心酸,我到了28歲才可以用自己的知識與技能養活自己,再不用依靠父母和兄長的資助,才真正完全用自己的力量在社會上站起來,一個沒有經濟自立能力的人,只能是個不成熟的人,一個躺在父母身上的人,不是一個真正的男子漢!我當這樣的孬種當了28年!
我找到工作後向家裡寫過一封長信,信中講了我對父母平時不好意思說的很多心裡話,當時,我父親說,母親接到信都哭了。 我剛拿到工資,馬上打了個電話回家裡告訴母親,以緩解他們的焦慮,畢竟兒行千里母擔心啊!父母有退休金,一再表示不需要我贍養,而我再這樣不要臉下去,我還是人嗎?我就是從那時候開始,下定決心,從今往後,再不向家中要一分錢!今後三年讀書和生活的費用我一定要用自己的勞動來獲取。
2
--------------------------------------------------------------------------------
2 一個老程序員的心裡話!!
金錢帶給我的激動就是在那段時間,溫飽問題解決之後,金錢對我的誘惑就再沒有了,哪怕讓我一個月賺一萬,給套房子給我,也不可能再給我帶來幸福的感覺了,錢是重要的,但不能成為它的奴隸,家中不需要我負擔,我一個人有吃有喝,干著我喜歡的工作,足矣!
我在那公司一直干到九月學校開學為止。我走的那一天,公司居然還開了個歡送宴會,老闆封了500元的封包給我。我真是感動。我大學畢業後在社會上掙扎求生,得到的大都是冷眼與蔑視,社會終於認可了我的價值,我不是一個只知道吃飯的廢物!
1999年9月9日上午9點,在這個最多9字的時刻,我到學校報道來了,放下行李,我坐在分配給我的床上,心中終於踏實下來。
現在,我在北京終於有一張屬於我的床了,一張真正屬於我的床了,終於有個地方可以讓我安穩地睡覺了。沒有這段經歷,我怎麼體驗到「安居樂業」這一個詞的真實含義!個人如此,國家要做到,中國要做到,更難!
2.編程生涯
讀研兩年半的時間,我四處打工,這兩年半我至少在七八家公司做過,編了十幾萬行代碼,為自己賺了一台電腦,兩部手機(丟了一部),還有讀研期間的所有費用,實現了我的目標:沒向家裡要一分錢。
我水平不高,但在打工過程中,發現許多中國軟體公司的水平更菜!
2000年暑假,我參加一個商品軟體的開發,搬到了北大燕北園的一個宿舍,在那兒搞封閉式開發。在這個項目採用vb6開發,主力程序員除我之處,還有一個華北電力大學的研究生。大家都沒開發商品軟體的經驗,沒經過正式的設計,就匆忙編碼了。我曾經想採用分層的系統架構,但遭到另一位程序員的反對,爭吵沒有結果,老闆也不能做決定,結果各行其是。現在看起來,那時真是太菜了,任何一本軟體工程書都會指出這種做法是不對的。
我們直接就熱火朝天的幹了起來,那位華北電力大學的老兄,真讓我佩服,他可以在一個sub過程中寫上2000行代碼!我覺得奇怪,為何他能寫這么多的代碼?一看,頓時我暈倒,他居然將每個控制項的left,top,width等屬性都用代碼來設定!想想這樣的程序,調試時光單步執行就需要按多少次f8鍵!
我們在電腦旁邊搭了個行軍床,每天都是干到早上6點才睡,12點吃中飯,然後又是一個通宵。當時整個工程只有一個類模塊,被我用於封裝訪問資料庫的ado數據引擎,這是整個工程中唯一一處用到了最簡單的面向對象技術的地方,然後,我寫了近十個bas公用模塊,每個模塊代碼規模都有一兩千行,還有十幾個窗體,每個窗體中都塞滿了事件驅動的vb代碼,整個軟體應該有10萬行代碼,我一個人在此期間至少就寫了3萬多行vb代碼。程序的主處理流程我甚至用ado與寫了兩套!
現在想起來,我們當時根本就不知道面向對象為何物,更不理解許多對軟體開發至關重要的理論,就憑著一種熱情。在這段痛苦的開發經歷中,我不僅精熟了vb,而且從中學到了很多。現在再開發同樣功能的東西。我至少可以砍掉2/3的代碼。怎麼學都不如從失敗中學得多。
後來我總結vb程序員的三個境界:
(1)所有代碼都只放在窗體文件中的,屬於菜鳥級,他們只會從面板上拖控制項,設置屬性,然後再給事件編碼
(2)工程中有bas模塊的,屬於中間級,他們已意識到有大量的代碼是重復出現的,應該將其抽取出來作為公用模塊
(3)工程中有cls模塊的,屬於高手,他們已掌握了面向對象的思想,並能應用這種思想來解決實際問題
正是這次開發經歷,促使我反思:到底如何開發軟體?我個人可以用vb完成各種各樣的功能,為什麼湊在一起就會那麼困難?更正一個bug為何那麼難?為什麼一個看似簡單的軟體,要拖半年的時間還看不到結束的日子?
作者: streakinging 2006-8-23 17:15 回復此發言
--------------------------------------------------------------------------------
3 一個老程序員的心裡話! (轉)
九月,研究生要開題,我自擬了個課題:軟體體系結構設計。我決心弄明白,好軟體到底是怎麼做出來的。
我放下了vb,開始研究c++,原來學過vc,但沒學會,就直接從c++ builder入手。borland公司的vcl類庫讓我大為嘆服,很快就迷上了它,為此連帶學了delphi,並參與了一個delphi項目。給我真正震撼的是《設計模式》這本書,看了才知道,原來好軟體是這么設計出來的!在此,我強烈推薦所有有一定編程經驗的程序員一定要看這本書!
作者: ╱╲╳▔ 2006-3-19 10:16 回復此發言
--------------------------------------------------------------------------------
3 一個老程序員的心裡話!!
一邊學習理論,一邊可沒忘記我沒經濟來源,於是又四處打工,接一些小項目與小模塊來賺些生活費,國內一家橫跨家電與軟體的著名公司是我打工期間去過的最大的公司。但無論什麼公司,都給我一種感覺——爛!公司中充滿了對員工的剝削與不尊重,對軟體開發這一事物的錯誤認識,管理混亂。我沒機會去外企,技術水平不到,別人不要我但我所見到的軟體公司,我敢說沒一家能做出世界一流的軟體!
我上的研究生課程也讓我失望,整個就是本科教育的再版。經過高考與考研兩次重大考試,我對考試已是深惡痛絕,但讀研期間仍要考試,而且是閉卷!我就不知道我去背那些條文對我的研究與學習有何幫助?2000年7月當我考完最後一門,終於大松一口氣,我終於擺脫了考試的壓迫,可以在剩餘的一年半中真正搜索我渴望已久的軟體技術了。這年,我29歲。
悲哀嗎?一個中國的程序員要到29歲才可以真正自由地學習想學的東西!
我開始研究面向對象理論,看了大量的書,每天都在實驗室學習到深夜12點,天天上網,csdn成了我最常去的網站。
隨著我對軟體技術的了解越多,就越深刻地感到國內與國外技術水平的差異是如此的巨大,巨大得甚至有讓人絕望的感覺。同時,在北京這個中國軟體人才最集中的地方,我也見到了許多牛人,一個清華的本科學生,做程序員可以拿到一個月12000元的工資,一個北大的計算機系研究生,一畢業就到外企,一個月一萬多收入,每年發16個月工資!幹了兩年就開了自己的公司。我看到了一個北方交大的本科生作品,在半年的業余時間里,用delphi寫了十幾萬行代碼,他甚至在代碼中嵌入匯編,自行編寫數據存取引擎讀寫foxpro,速度超快!軟體中有一個計算公式解析模塊,他用編譯原理理論居然做了一個小型的公式解析器,就象c++編譯器檢查c++程序一樣,不僅可以判斷是否公式正確,而且給出的出錯信息還相當准確!其基本功之扎實,水平之高讓我望塵莫及!中國優秀的人才真還是不少的!在精英集聚的北京,面對著博大精深的軟體科學,我深感自身的渺小。
但我畢竟是靠自己奮斗出來的,我並不自卑,這世界需要牛人,同樣需要大批合格的勞動者,我成為不了牛人,但我作一名程序員是合格的。
時間過得飛快,一年半根本就不算時間,馬上就要畢業了,學習的成績如何,要到社會上去競爭了,讓社會考場來決定你是否及格。
[color=#FF1493]3.畢業求職[/color]
98級的研究生是it業最後輝煌的回光反照。當時,各大公司都發了瘋似的要人,象華為,當時是來者不拒。計算機專業的研究生是一搶而光,本科生也供不應求。2001年畢業的我的師兄師姐們,平均每個人手頭都至少有兩三個offer,談的工資沒有低於每月6000的,許多人去了外企,工資在8000~10000每月的也有。真是畢業生的黃金時間。
但好景不常在,911事件我看來好象成了分水嶺,911之後,整個it業急剎車,就業形勢急轉直下,各大公司都在消化去年吃得過飽的胃口,我形容是大家都吃壞了胃,再也不可能有我師兄師姐們的風光了。雖然時間相隔僅大半年。
從10月開始,11月和12月,我幾乎是在招聘會與公共汽車上渡過的,北京東南西北地去面試,上午在上地,下午可能就要跑到朝陽區,疲於奔命。
作者: streakinging 2006-8-23 17:15 回復此發言
--------------------------------------------------------------------------------
4 一個老程序員的心裡話! (轉)
在找工作過程中,我良好的心理素質與豐富的編程經驗起到了很大的作用,並沒有遇到很大的困難,就先後有幾家公司表示要我。
其中我想說的有兩家公司。
一家是台灣公司,應該說他們做得是不錯的,但我非常反感他們那種自認為高於大陸人的那種優越感,而且待遇也不高。面試之後,回來感覺很不好。當時台灣是民進黨上台主政,我就稱之為「民進黨」看不起「」(雖然我不是黨員,但我們都是中國人,都希望中國能強大,讓她的人民能挺直腰桿)。
我想:我們大陸確實是不如台灣發達,難怪別人看不起我們,這世界勢利得很,社會如此,國家亦然。但我中華960萬平方公里的國土,13億人口,難道要依靠一個小小的島嶼來撐門面?難道除了台灣公司,我就無處可去了?雖然改變不了什麼,但我決定絕不去台資和日資的公司工作(日本人我更不喜歡,但我認為他們做事實在優秀,我們一定要向日本人學習)!在這種公司呆著,不爽!同時,我們的確也得爭氣些,這世界只尊重強者。
作者: ╱╲╳▔ 2006-3-19 10:16 回復此發言
--------------------------------------------------------------------------------
4