【計(jì)算機(jī)本科補(bǔ)全計(jì)劃】<構(gòu)建之法>讀書(shū)筆記

正文之前

首先,說(shuō)句實(shí)話:真的寫(xiě)得好,讓我情不自禁就給我的學(xué)長(zhǎng)推薦了,讀完緒論我就有預(yù)感,我會(huì)放下我手頭讀的如癡如醉的《C++ Primer》,轉(zhuǎn)而把這本構(gòu)建之法讀完我再回頭讀,因?yàn)樽鳛橐粋€(gè)跨院保研到計(jì)算機(jī)的人,我目前最不缺的是時(shí)間和技巧的學(xué)習(xí)。但是我極度的缺乏一種思想的錘煉,我現(xiàn)在是披著機(jī)械人的皮,走到了機(jī)械的十字路口,一年后準(zhǔn)備拐彎到計(jì)算機(jī)去!所以我還有這足夠的時(shí)間去培養(yǎng)我自己的思想,讓我成為一名合格的程序員,而非是“碼農(nóng)”!


正文


不得不說(shuō)鄒欣老師這本書(shū)非常合我的胃口,所以一上手,就再也停不下來(lái)了。首先在第一版前言中給的那四個(gè)形象,我覺(jué)得就非常的有意思,直接把《構(gòu)建之法》這本書(shū)與一般的編程手冊(cè)什么的區(qū)別開(kāi)來(lái)了。另外致謝部分,我看到了浙江大學(xué)計(jì)算機(jī)學(xué)院的陳越老師,這是我非常喜歡的一個(gè)MOOC上的老師,她的數(shù)據(jù)結(jié)構(gòu)真的是讓我受益匪淺。倒數(shù)第二段:“最后要感謝我的家人,他們?nèi)萑涛乙粋€(gè)人在廚房里對(duì)著電腦長(zhǎng)時(shí)間發(fā)呆,有時(shí)還給我煮綠豆湯喝”。 這句話瞬間將老師從一個(gè)高高在上的作者拉近到了我們生活中的層面來(lái)。讀這本書(shū),就沒(méi)有那種被填鴨式教育的感覺(jué),反而是仿佛與老師一起在黑暗的夜里,敲著字,聽(tīng)著歌,享受著別人煮給自己的綠豆湯,那是多么的一種幸福呀!


然后當(dāng)看到老師對(duì)當(dāng)代教育體系中的師生關(guān)系有如此深的研究的時(shí)候,我感覺(jué)非常的慶幸,也帶點(diǎn)遺憾!慶幸的是:終究還是有很多人是在乎學(xué)生與老師之間的關(guān)系,把寓教于樂(lè)這種崇高的理念貫徹到了生活中,遺憾的是并不能在老師手下學(xué)習(xí),反而是在老師口中說(shuō)的那種傳統(tǒng)的,刻板的教學(xué)方式中度過(guò)了我的大學(xué)三年。不過(guò)其實(shí)我覺(jué)得老師描述的學(xué)生與老師的關(guān)系就好比是健身學(xué)員與健身教練之間的關(guān)系,這一點(diǎn),還是要有一點(diǎn)補(bǔ)充:我們學(xué)生必須要取得一定的學(xué)分,獲得一定的成績(jī),然后才能畢業(yè)。但是由于你在健身學(xué)員這個(gè)關(guān)系中是處于消費(fèi)者模式,也即是上帝模式,所以說(shuō)你是完全可以不理會(huì)教練不去上課的,雖然最后你獲得的只是一個(gè)生了巨多累贅的身心,但是沒(méi)有人會(huì)追究你的責(zé)任,而教育體制不一樣!你如果畢不了業(yè),那么你就獲得不了任何的肯定了。當(dāng)然,如果健身房這種地方還有畢業(yè)證書(shū)這一說(shuō),那當(dāng)我沒(méi)說(shuō)


我十分同意,老師在書(shū)中說(shuō)的給授課老師和助教的建議。另外我發(fā)現(xiàn)我們《實(shí)時(shí)控制軟件設(shè)計(jì)》這一門(mén)課,老師或多或少的遵守著鄒歡老師說(shuō)的這一套規(guī)定。比如說(shuō)簡(jiǎn)明公開(kāi)的規(guī)則課堂打分制度,以及很有可能會(huì)掛的危險(xiǎn),另外還有各種成績(jī)的加權(quán)計(jì)算,或多或少都有著這本構(gòu)建之法中推薦的方法的影子。另外也有循序漸進(jìn)激勵(lì)不斷總結(jié)階段性成果等先進(jìn)優(yōu)秀的理念。首先 個(gè)人博客Github賬號(hào),這兩點(diǎn)我們課堂老師貫徹的非常徹底。還有就是,對(duì)于打醬油的同學(xué)絕不姑息,這一點(diǎn)我覺(jué)得做的非常的好。“這門(mén)課不水”,這是我在陳志平同學(xué)的博客的評(píng)論里面看到的。我覺(jué)得用來(lái)總結(jié)這門(mén)課是最好的啦。期待我們后面也會(huì)按照更多的鄒歡老師推薦的教學(xué)制度來(lái)。還有我很喜歡老師總結(jié)的這一句:**我們學(xué)生所需要的環(huán)境,是一個(gè)自然的、有批判精神的、學(xué)習(xí)的環(huán)境。還有就是在第13頁(yè)中:“有些系領(lǐng)導(dǎo)會(huì)說(shuō)沒(méi)有資金支持助教,這是無(wú)能的借口,非不能也,是不為也”。我覺(jué)得這句話,諷刺中帶點(diǎn)幽默,相當(dāng)有趣。


Chapter 1

要點(diǎn)如下表所示:

  • 程序=算法+數(shù)據(jù)結(jié)構(gòu)
  • 軟件=程序+軟件工程.
  • 軟件企業(yè)=軟件+商業(yè)模式

畫(huà)張圖就清晰多了:

具體來(lái)說(shuō)是讓我認(rèn)識(shí)到了以下幾個(gè)概念:源代碼管理,配置管理,質(zhì)量保證,軟件測(cè)試,需求分析。程序理解,軟件維護(hù),服務(wù)運(yùn)營(yíng),合稱為軟件的生命周期。另外"將軟件與程序分隔開(kāi)來(lái)的就是用戶體驗(yàn) " 這個(gè)理念,直接將我們平時(shí)寫(xiě)的代碼無(wú)情的歸類到程序,心累。

軟件系統(tǒng)是把系統(tǒng)的、有序的、可量化的方法應(yīng)用到軟件的開(kāi)發(fā)、運(yùn)營(yíng)和維護(hù)的過(guò)程。包括:需求分析、設(shè)計(jì)、構(gòu)建、測(cè)試和維護(hù)這幾個(gè)過(guò)程。

軟件一般具有下面幾個(gè)特性:

  • 復(fù)雜性(所以錢(qián)多話少,因?yàn)闆](méi)時(shí)間、特別忙)
  • 不可見(jiàn)性(對(duì)于大多數(shù)人來(lái)說(shuō)計(jì)算機(jī)部分硬軟件)
  • 易變形(每個(gè)bug都是一頓大餐)
  • 服從性(成就感的來(lái)源)
  • 非連續(xù)性(。。。)

在軟件開(kāi)發(fā)的四個(gè)不同階段:玩具階段,業(yè)余愛(ài)好階段,探索階段,成熟的產(chǎn)業(yè)階段。我現(xiàn)在大概處于玩具階段到業(yè)余愛(ài)好階段之間更偏向于業(yè)余愛(ài)好階段。希望可以盡早的度過(guò)業(yè)余愛(ài)好階段,進(jìn)入探索階段,成熟產(chǎn)業(yè)階段,那肯定是工作以后的事了。

另外由于我明年就要去計(jì)算機(jī)學(xué)院博士生,而且走的領(lǐng)域大概就是計(jì)算機(jī)體系結(jié)構(gòu)/云計(jì)算/網(wǎng)絡(luò)安全這三個(gè)里面選一個(gè)(體系結(jié)構(gòu)可能性比較大),我這才知道原來(lái)體系結(jié)構(gòu)是偏向于實(shí)踐的領(lǐng)域,我之前一直以為計(jì)算機(jī)體系結(jié)構(gòu)是要構(gòu)建計(jì)算機(jī)的底層,抽象于硬件,但是低于或等同層于操作系統(tǒng)。想不到居然是偏實(shí)踐的領(lǐng)域?。。。?duì)于計(jì)算機(jī)科學(xué)與軟件工程,我一直以來(lái)都是用研究與應(yīng)用兩個(gè)觀點(diǎn)來(lái)區(qū)分,現(xiàn)在看來(lái)倒是與老師的觀點(diǎn)不謀而合。


第一遍讀老師的書(shū)并沒(méi)有太深太大的感觸,所以只能通過(guò)練習(xí)來(lái)加深印象。迫于時(shí)間所限,我寫(xiě)了第一題。至于博客什么的早就有了。版本控制軟件,我一直以來(lái)都只知道GitHub。貌似還有GitLab吧。還有第六題的Dijkstra這個(gè)人,他不是圖的廣度優(yōu)先算法里面的締造者嗎?他這個(gè)名字當(dāng)年考研的時(shí)候深惡痛絕的抄了幾遍才記下來(lái)!

//第一題,用于給小朋友隨機(jī)發(fā)放四則運(yùn)算的題目(vector是之前的,不管不管)
#include <iostream> 
#include <string>
#include<vector>
#include <ctime>
#include <stdlib.h>
using namespace std;
int main()
 {

    srand((unsigned short)time(0));
    int num=30;
    string d="+-x/";
    while(num--)
    {
        int a=rand()%50+1;
        int b=rand()%20+1;
        char c=d[rand()%4];
        cout<<b<<" "<<c<<"  "<<a<<"  ="<<"  ";
        switch (c)
        {
            case '+':
                cout<<a+b<<endl;break;
            case '-':
                cout<<a-b<<endl;break;
            case 'x':
                cout<<a*b<<endl;break;
            case '/':
                cout<<a/b<<"···"<<a%b<<endl;break;
        }
        int delay=10000;
        while(delay--)
        {
        }
          } 
}


Chapter 2

第二章的內(nèi)容,大部分我都能看懂,但是連在一起之后就是似懂非懂。大概是因?yàn)槲覜](méi)有真正的負(fù)責(zé)過(guò)一個(gè)軟件的設(shè)計(jì)與開(kāi)發(fā)以及維護(hù)吧!畢竟我是一個(gè)大部分時(shí)間都在寫(xiě)程序而不是軟件的人哪??!而且我的本命語(yǔ)言是C++/C以及Python。對(duì)于接近硬件底層的C#不是很了解。而且對(duì)于用集成工具平臺(tái),我也沒(méi)經(jīng)驗(yàn)。大多數(shù)時(shí)候都是用編輯器編寫(xiě)之后,再用gcc或者是mingw來(lái)編譯。不過(guò)在2.2后半段提到的效能分析工具,這個(gè)我大概有了一點(diǎn)想法,說(shuō)不定可以自己寫(xiě)一個(gè)!但是時(shí)間比較緊迫,所以這先不寫(xiě)了。我應(yīng)該只能寫(xiě)一個(gè)代碼注入的效能分析。其實(shí)很簡(jiǎn)單嘛,在每一個(gè)大括號(hào)后面加一個(gè)對(duì)全局變量的自增操作。那么就可以直接用全局變量來(lái)統(tǒng)計(jì)這個(gè)函數(shù)調(diào)用的次數(shù)。另外,在2.3個(gè)人開(kāi)發(fā)流程中了解到的那個(gè)PSP概念,讓我有了一個(gè)對(duì)軟件開(kāi)發(fā)的整體流程的觀念,一定程度上彌補(bǔ)了我先天不足的缺點(diǎn)。這個(gè)部分我后面還會(huì)繼續(xù)再看。另外,對(duì)于大學(xué)生和軟件工程師兩個(gè)群體的調(diào)查,我發(fā)現(xiàn)確實(shí)工程師在需求分析以及測(cè)試兩方面明顯要花更多的時(shí)間。至于原因,那是顯而易見(jiàn)的:軟件工程師不只是玩玩而已,他們要對(duì)用戶負(fù)責(zé),而大部分的大學(xué)生都是自?shī)首詷?lè),屬于自high型。而且大學(xué)生代碼編輯能力普遍不夠,所以說(shuō)更多的時(shí)間都會(huì)花在代碼編寫(xiě)上的。

第二章,實(shí)踐部分,我也就寫(xiě)個(gè)題目來(lái)鞏固一下吧。

// wc.exe 只能統(tǒng)計(jì)行數(shù),單詞數(shù)目,字符數(shù)目
#include <iostream> 
#include <string>
#include<vector>
#include <ctime>
#include <stdlib.h>
using namespace std;

int main()
 {
    string s;
    getline(cin,s);
    int word;
    int line=1;
    int alpha;
    for (int i = 0; s[i]!='\0'; ++i)
    {
        char &c=s[i];
        if (isalnum(c))
            ++alpha;
        if (c==';' ||  c=='\n')
            ++line;
        if (isalnum(c)&&(!isalnum(s[i+1])))
            ++word;
    }
    cout<<"一共有 "<<line<<"  行,有  "<<word<<" 個(gè)單詞,有  "<<alpha<<" 個(gè)有效字符"<<endl;
return 0;
}

另外在2.4.1里面我也有了幾個(gè)算法的想法。

  • 首先輸出一個(gè)整數(shù)數(shù)組中子數(shù)組最大的值。

    • 這個(gè)的話直接使用一個(gè)對(duì)數(shù)組的循環(huán)遍歷,遇到負(fù)數(shù)就跳過(guò)不管
    • 遇到正數(shù)就直接加到一個(gè)累加器中
    • 最后輸出就可以了。
  • 字符串操作。

    • 我們可以用字符串類型來(lái)定義一個(gè)接受這個(gè)字符串字面值。
    • 保守的辦法是直接用下標(biāo)配合字符串類型的求字符串長(zhǎng)度內(nèi)置函數(shù)size(),循環(huán)遍歷從string[s.size()-i-1開(kāi)始輸出]
    • 另外一個(gè)稍微冒險(xiǎn)一點(diǎn)辦法,因?yàn)闆](méi)有實(shí)現(xiàn)所以不敢說(shuō)對(duì)不對(duì):那就是用迭代器。從尾指針開(kāi)始一路往回讀,不知道能不能實(shí)現(xiàn)。當(dāng)然,如果用指針直接指向s[s.size()-1]然后用指針的自減操作讀到begin()的話那確實(shí)可以!

正文之后

讀書(shū)完畢,關(guān)電腦,睡覺(jué)~~ 咦 先把作業(yè)交了!!

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • Android 自定義View的各種姿勢(shì)1 Activity的顯示之ViewRootImpl詳解 Activity...
    passiontim閱讀 179,172評(píng)論 25 708
  • Spring Cloud為開(kāi)發(fā)人員提供了快速構(gòu)建分布式系統(tǒng)中一些常見(jiàn)模式的工具(例如配置管理,服務(wù)發(fā)現(xiàn),斷路器,智...
    卡卡羅2017閱讀 136,641評(píng)論 19 139
  • 9.12 (詞卡來(lái)源某片刻):熱戀 試探 頓悟 一個(gè)沒(méi)有熱戀過(guò)的單身狗,既不知該如何表達(dá)自己的感情,也不知如何去試...
    想變成太陽(yáng)的阿灰閱讀 264評(píng)論 0 1
  • 今天聽(tīng)賴?yán)蠋熢谀称髽I(yè)里做一天的領(lǐng)導(dǎo)力分享,原本是要現(xiàn)場(chǎng)做GR的,可是由于場(chǎng)地原因,最后是做涂鴉筆記。 但對(duì)我來(lái)說(shuō)還...
    TracyChung閱讀 302評(píng)論 0 0

友情鏈接更多精彩內(nèi)容