• <ins id="pjuwb"></ins>
    <blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote>
    <noscript id="pjuwb"></noscript>
          <sup id="pjuwb"><pre id="pjuwb"></pre></sup>
            <dd id="pjuwb"></dd>
            <abbr id="pjuwb"></abbr>

            第一桶 從C到C++ 第四碗 陳老C教研室論道 潘小P書桌前練功

                  "呵呵,算你小子有良心。"老C心滿意足的摸著肚子。
                  "嗯,嗯。"小P有一搭沒一搭的回答著,一邊數(shù)著自己的錢包。
                  "哈哈,別難過了,下回我請你,還去這家。那個醬骨頭味道還真是不錯啊。"老C承諾道。
                  "哦~哦~,我看你是沒有吃到刀削面懷恨在心吧,k,好像你餓了一個星期一樣,沒見過這樣吃肉的。"小P很是傷心。
                  "哈哈,說好了下回我請你的……"
                  "我沒有你吃得多……"小P有些郁悶。
                  "嗯,我們先把飯量問題放一邊,我來幫你裝eclipse和CDT吧。"老C開始轉(zhuǎn)移話題。
                  "對了對了,正事都快忘了。"
                  感謝教育網(wǎng)的網(wǎng)速和老C的幫助,小P很快裝好了eclipse,在老C的指導(dǎo)下寫了一個Hello world,算是正式上路了。
                  "我們以后都要這樣開始,"老C不知道從哪里摸出一副眼鏡架在鼻子上,"一個問題,一段代碼。問題就像正式項目中的需求,而代碼就像我們正式的產(chǎn)品。在從需求到產(chǎn)品的過程中,我們會明白C++的哪些技術(shù)是因為哪種需求而產(chǎn)生的,這樣以后你遇到類似的問題時,就會使用正確的方法或者技術(shù)去解決問題了。"老C扶了扶眼鏡,"不過在此之前……我要去喝點(diǎn)茶……,好了好了,開玩笑的。不過我真的要問一個很嚴(yán)肅的問題,你考試成績那么好,是不是分析問題,解決問題的能力就真的那么好呢?"
                  "那是自然,我的排名可是不低的呢。"
                  "好吧,我想問問你什么是分析問題,解決問題的能力?"
                  "多做題,能力自然就上來啦。當(dāng)我在考試時遇到一個問題,我會想做過的類似的習(xí)題或者例題,然后采用同樣的方法再做一遍啊。"
                  "那么要是從來沒有做過的類型呢?"
                  "不可能,我復(fù)習(xí)的時候是很認(rèn)真的。"
                  "……那么你遇到陌生的問題怎么辦?"
                  "分析嘍……"
                  "算了,看來你真是實實在在的經(jīng)驗主義啊。"
                  "那你說什么是分析問題,解決問題的能力?"
                  "就我的感覺,分析問題其實是對問題歸類。因為在現(xiàn)實生活中,我們其實不用發(fā)明什么解決問題的方法,因為那么多科學(xué)家、牛人和前輩已經(jīng)把解決問題的方法放到那里了,我們只是要找到這個方法而已……"老C開始口噴漠漠,“比如你解微分方程,就要看是常系數(shù)還是變系數(shù),是齊次還是非齊次,等等,如果你將方程歸入某一類,那么解法也就順其自然了,關(guān)鍵是你要?dú)w類正確,然后你就站在巨人肩膀上了。"
                  "哦?聽你一說,我感覺我做題的時候的確是要仔細(xì)閱讀題目,看看它是想考察哪一類問題或方面的……那么所謂解決問題的能力你認(rèn)為是什么呢?"
                  "我覺得所謂解決問題的能力是對細(xì)節(jié)的理解和掌握程度,細(xì)節(jié)理解得越透徹,解決問題的能力越強(qiáng)。同時如果你細(xì)節(jié)理解得越明白,越容易掌握此類問題的根本。"
                  "哦?說來聽聽。"
                  "比如讓你來求解一個函數(shù)的最值問題,你會怎么做?"
                  "這 個難不倒我,”小P很是自信,“我數(shù)學(xué)可不賴的。我需要先對函數(shù)求一階導(dǎo)數(shù),找到它的拐點(diǎn),然后求二階倒數(shù),看它在拐點(diǎn)上是上凹還是下凹,來判斷這些 拐點(diǎn)處的數(shù)值是極大值還是極小值;如果函數(shù)在所求范圍內(nèi)沒有極點(diǎn),那么我會判斷它是單調(diào)增還是單調(diào)減函數(shù),然后看函數(shù)在所求范圍的邊界是否連續(xù),邊界范圍 是否可達(dá);最后不要忘了函數(shù)的非連續(xù)點(diǎn),因為非連續(xù)點(diǎn)上函數(shù)不可導(dǎo),所以要單獨(dú)看看。"小P想了想,"哦,如果函數(shù)處處不可導(dǎo)而處處連續(xù)的話,或者根本就處處不連續(xù),那么就要靠人品構(gòu)造一些函數(shù),運(yùn)用夾逼法則,但是一般不會這么bt的。當(dāng)求出以上所有點(diǎn)后,比較一下,最大的就是最大值,最小的就是最小值。"
                  "……佩服佩服,"老C鼓掌,“怪不得你的成績好,看來你是很下功夫的。不錯,這些就是對細(xì)節(jié)的了解,說明起碼你 在這個方面解決問題的能力很強(qiáng)!看,你了解求導(dǎo)的前提是要連續(xù),而且了解導(dǎo)數(shù)為零的地方是函數(shù)的拐點(diǎn),并且也了解到有可能函數(shù)在拐點(diǎn)處不可導(dǎo),同時你還根 據(jù)環(huán)境對函數(shù)進(jìn)行了正確的分類:處處可導(dǎo),處處連續(xù)但非處處可導(dǎo),處處連續(xù)處處不可導(dǎo)和非處處連續(xù)以及處處不連續(xù),然后根據(jù)這些分類、足夠充分的細(xì)節(jié),良 好的解決了這個問題。"
                  "呵呵,是啊,但是這個和C++有什么關(guān)系?"
                  "有關(guān)系,”老C肯定的說,“ 與做高數(shù)題目是一樣的道理,我們在做C++編碼時,首先要注意問題發(fā)生的環(huán)境——也就是上下文,我們需要根據(jù)問題所處的環(huán)境與需求對問題分類,這需要我們 收集足夠多的信息;然后根據(jù)這類問題一般的解決通法列出解決此類問題的方案,再根據(jù)具體需求和上下文在方案中挑選,或者對此方案進(jìn)行修改以滿足具體需求, 在這里我們需要關(guān)注足夠的細(xì)節(jié),才可以采納較優(yōu)的方案;最后根據(jù)需求進(jìn)行評審,尋找是否還有更好的方案。這只是開發(fā)的一般步驟,在具體開發(fā)中這些活動是迭 代進(jìn)行的,從需求分析到代碼實現(xiàn),這些活動重復(fù)的出現(xiàn)在軟件開發(fā)的各個階段——但是我們得首先解決的問題是,你先要知道可能的分類有哪些,然后再根據(jù)所處 的環(huán)境和需求,去逆向思維,尋找解決之道。綜合起來講,解決問題的方法就是一般逆向思維的方法,而逆向思維總是靠猜測和試驗的,至于猜得好不好或者試驗的 對不對,就要靠經(jīng)驗了,如果你的經(jīng)驗夠豐富,能夠根據(jù)逆向思維的結(jié)果總結(jié)出來一套方法,順著這個方法你總可以找到正確的問題分類——那么恭喜你,你離大師 也不遠(yuǎn)了。你看看,是否和解決生活中其他技術(shù)問題的方法是一樣的呢?”
                 “好像是的,感覺如果不是創(chuàng)造性的活動的話,還真是這樣的,不過就算是創(chuàng)造性活動或者科研活動,也需要對問題進(jìn)行分類,然后研究看看前人都做了哪些成就可以借鑒的。”小P點(diǎn)點(diǎn)頭。
                 “好了,形而上的東西我們就聊這么多,現(xiàn)在看看形而下的東西。”老C從旁邊拉過白板,在上面畫了一個圓,在順時針方向標(biāo)上了箭頭,并在旁邊寫下“誰是最后一個幸運(yùn)兒?”“這是一個很常見的問題,可能出現(xiàn)在各大招聘筆試題目中。”
                 “哦?”
                 “話說有一幫倒霉孩子——嗯,有20個吧——排排坐,吃果果,但是由于資源匱乏,金融危機(jī)等原因,很不幸——只有一個果果。那么這個果果分給誰呢?老師決 定,把他們排成一個圓圈,按順時針方向標(biāo)號,12點(diǎn)鐘的小朋友是1號,以此類推。然后從1號小朋友開始,依次報數(shù),數(shù)到……嗯……7的小朋友就被踢出隊 伍,下一個小朋友接著從1開始數(shù),直到隊伍中有且僅有一個小朋友。請問,如果你在這個隊伍中,你會挑選幾號坐位,從而吃到果果呢?”老C停了一下,“你現(xiàn) 在也裝好了eclipse,正好可以練練,一開始先用C寫吧,然后我們再談?wù)揅++的解決之道。我剛才吃得有點(diǎn)多,得去喝點(diǎn)茶……”于是留下小P一個人, 拿著茶杯出門接開水去了。
                 “嗯,這個問題不是很難,”小C自言自語,“我只要有一個循環(huán)隊列就可以解決了……”他先是在一張紙上畫了一個圓圈,并安排了5個小朋友玩這個游戲,試了兩下,覺得自己理解的差不多了,就開始在鍵盤上扣扣扣扣的敲代碼……
                 老C回來后看到小P正在忙,也沒有打擾他。他一邊吹氣一邊慢慢喝完杯子里的水,順便在起點(diǎn)上看了幾篇yy的穿越水文,估摸著小P差不多了,轉(zhuǎn)過椅子問:“怎么樣?差不多了吧?”
                 “等等,還有一個問題……好了好了,最后一個留下的是2號小朋友。”
                 “你確認(rèn)?”
                 “等等我還得再看看……”小P又是一番手忙腳亂,“好吧,我基本確定是2號小朋友……”
                 “?”老C很是好奇,“為什么是基本上?”
                 “因為……這個……我還需要一段調(diào)試時間才可以確定……”
                 “算了,我們來直接看看代碼好了。”
                 “好啊,寫得不好請多批評。”小P假裝謙虛道,心想自己的代碼應(yīng)當(dāng)還是不錯的。
                 “是這個a.c文件嗎?”
                 “是的是的,呵呵。”
                 老C于是做到小P旁邊review他的代碼。

            #include <stdio.h>
             
            void main()
            {
            int a[20];
             int  b;
             int m;
             int k;
              int   N=20;
                for(m=0;m<20;++m){
                 a[m]=1;}

                m= 0;
                b =1;
                while(N>1)
                {  if(a[m]!=0)
                    {
                        if (b==7){
                         a[m] = 0;
                          --N;
                           if (N==1)
                            {break;
                            }
                            b=1;
                        }
                      else{
                       ++b;
                        }
                    }
                    ++m;
                    m%=20;
                }

                for(k=0;k<20;++k){
                 if (a[k]==1)
                 {break;}
                   }
                ++k;
                printf("%d\n", k);
            }
                
                 “我看不懂……”老C才看了30秒就決定放棄了。
                 “不會吧,我覺得我寫得邏輯性還挺清楚的啊。”小P有些得意老C看不懂他寫的代碼,覺得
            可能自己寫的邏輯過于高深了。
                 “……”老C沉默了半分鐘,“這個不是C代碼!”他肯定的說道,“所以我看不懂,也不想看懂。”
                 “?”小P有些奇怪,“這明明就是C語言寫的代碼啊,你看,我來給你解釋解釋……”
                 “哦,算了,這些根本不是C代碼,我沒有必要看懂。”
                 “那你說這些是什么?”小P有些不高興了。
                 “這些是……”老C找著合適的形容詞匯,“這些是貓爬過屏幕的腳印,我沒有必要看懂腳印所代表的含義……”看到小P有些驚愕,然后開始有些生氣,逐漸開始 惱羞成怒了,老C趕快對他說:“呵呵,別生氣了,我開玩笑的,不過,”老C的語氣嚴(yán)肅起來,“這些的確是很糟糕的代碼,哪怕它的算法多么高效,執(zhí)行效率多 么高,它都是糟糕的代碼!”
                 “為什么?”從來沒有人說過小P的代碼糟糕,聽了老C的評論他覺得一時無法接受。
                 “我們先不評論代碼正確與否,單單是它的格式和縮進(jìn)……”老P用鼠標(biāo)在代碼上劃來劃去,“就無法讓人提起評審它的欲望。”老C真誠的看著小P,“你一定沒有參加過比較大型的,3、5個人合作開發(fā)的項目吧?”
                 “是啊,學(xué)校里面哪里來的機(jī)會?”
                 “唉,所以說教育失敗啊。”老C有些感慨,“即使沒有參加過項目,基本的規(guī)范性的東西學(xué)校還是要教的啊,算了,這個不是你的錯,是老師的錯,是學(xué)校的錯。”
                 “嗯……”聽到老C說不是自己的錯誤,小P開始平靜下來。
                 “言之無文,行而不遠(yuǎn),是什么意思?”老C問道。
                 “就是說如果一篇文章不夠優(yōu)美,那么它就流傳不廣。”小P還是比較油菜的。
                 “是啊,代碼也是一樣的啊。如果它的格式有問題,大家不喜歡看,也就沒有人維護(hù),這樣的代碼很快會被替換掉,哪怕它背后閃爍著照耀銀河系的智慧的光芒!”
                 “是嗎?”小P有些不相信。
                 “好吧,我們試試,”老C決定不要再
            打擊可憐的孩子了,“我們把這個代碼放一段時間——就一個星期吧——反正我們這周有兩個講座要聽,等到周末的時候你再講講你的代碼,如何?”
                 “沒有問題,就10幾行代碼么,我就不相信我記不住!”小P有些和老C對上了。

            (to be continued...)













































            posted on 2009-01-20 00:05 Anderson 閱讀(2102) 評論(5)  編輯 收藏 引用

            評論

            # re: 第一桶 從C到C++ 第四碗 陳老C教研室論道 潘小P書桌前練功 2009-01-20 09:37 Smile

            eclipse的ctrl+shift+F,代碼格式化一下就好看多了  回復(fù)  更多評論   

            # re: 第一桶 從C到C++ 第四碗 陳老C教研室論道 潘小P書桌前練功 2009-01-20 12:15 zwp

            c風(fēng)格也需要一些具有明確責(zé)任的抽象過程。而這里顯然是一鍋粥,幾乎木有任何可重用性和可讀性。
            而c++則是一些具有能夠保存狀態(tài)進(jìn)而擁有更高層抽象的實體。可以說c++會在最終機(jī)器碼和需求之間比c更多一個抽象層。  回復(fù)  更多評論   

            # re: 第一桶 從C到C++ 第四碗 陳老C教研室論道 潘小P書桌前練功[未登錄] 2009-01-20 12:40 Anderson

            @zwp
            沒錯,您是內(nèi)行!的確就算用C也可以寫出具有明確責(zé)任和抽象的代碼……這與我們使用的語言沒有關(guān)系,而和我們的思考問題的方式有關(guān),就算用匯編也可以寫出很清晰的代碼……語言提供的幫助不過是簡化了這一過程而已。
            老C會在以下幾方面對代碼進(jìn)行評審:
            1. 格式。
            2. 規(guī)范性,包括命名,大小寫等等。
            3. 抽象與復(fù)用。  回復(fù)  更多評論   

            # re: 第一桶 從C到C++ 第四碗 陳老C教研室論道 潘小P書桌前練功 2009-02-19 12:37 func

            "“我看不懂……”老P才看了30秒就決定放棄了。"

            錯了,應(yīng)該是“老C”  回復(fù)  更多評論   

            # re: 第一桶 從C到C++ 第四碗 陳老C教研室論道 潘小P書桌前練功 2009-02-19 21:26 Anderson

            @func
            謝謝,已經(jīng)修正  回復(fù)  更多評論   


            只有注冊用戶登錄后才能發(fā)表評論。
            網(wǎng)站導(dǎo)航: 博客園   IT新聞   BlogJava   博問   Chat2DB   管理


            <2025年5月>
            27282930123
            45678910
            11121314151617
            18192021222324
            25262728293031
            1234567

            導(dǎo)航

            統(tǒng)計

            常用鏈接

            留言簿(6)

            隨筆檔案(21)

            文章檔案(1)

            搜索

            最新評論

            閱讀排行榜

            評論排行榜

            久久久久九国产精品| 日韩AV毛片精品久久久| 无码伊人66久久大杳蕉网站谷歌| 深夜久久AAAAA级毛片免费看| 性做久久久久久久久浪潮| 精品国产乱码久久久久软件| 久久国产精品99国产精| 99国内精品久久久久久久| yy6080久久| 99久久精品国产一区二区三区 | 久久久无码精品亚洲日韩蜜臀浪潮| 狠狠色婷婷久久一区二区| 99热精品久久只有精品| 久久久久亚洲精品日久生情| 中文字幕亚洲综合久久2| 国产精品一区二区久久精品涩爱| 久久国产乱子精品免费女| 综合久久一区二区三区 | 97久久综合精品久久久综合| 久久精品国产99国产精品| 久久人人妻人人爽人人爽| 亚洲国产成人精品女人久久久| 996久久国产精品线观看| 亚洲精品乱码久久久久久按摩| 久久久久亚洲?V成人无码| 久久99久久99小草精品免视看| 狠狠色噜噜色狠狠狠综合久久| 久久夜色精品国产www| 国产精品欧美亚洲韩国日本久久 | 久久99精品国产自在现线小黄鸭| 欧美午夜A∨大片久久 | 久久久久人妻一区精品| 久久国产视屏| 久久精品国产精品亚洲| 成人a毛片久久免费播放| 国产精品99久久免费观看| 久久精品国产亚洲av水果派 | 久久久久国产亚洲AV麻豆| 久久99热国产这有精品| 2020久久精品国产免费| 午夜天堂av天堂久久久|