• <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>

            2011年10月28日

            原文被墻,覺(jué)得該文其意不錯(cuò),但其所指其實(shí)不是很明確,用語(yǔ)生澀啊...
            =================================================================
            http://calculist.blogspot.com/2007/09/science-and-engineering.html
            Science and engineering
            從 The Little Calculist 作者:Dave Herman

            Joel Spolsky 有一個(gè)關(guān)于 軟件開(kāi)發(fā)周期的階段 的帖子,該貼出乎意料地結(jié)束了我自己的觀察。在Joel看來(lái),第一個(gè)階段是藝術(shù)(設(shè)計(jì)階段),第二個(gè)階段是工程(構(gòu)建階段)第三個(gè)階段是科學(xué)(調(diào)試和測(cè)試階段).

            Joel的興趣是軟件管理和管理工具,但我對(duì)于開(kāi)發(fā)工具有更多的興趣。一旦你認(rèn)出了軟件開(kāi)發(fā)的工程方面和科學(xué)方面的分水嶺,你就可以更好地理解開(kāi)發(fā)方法的很多緊張對(duì)立,其中的一種對(duì)立導(dǎo)致了很多辯論。之所以產(chǎn)生這種不安,是因?yàn)榛镜牟蛔兊牟豢梢C瀆的(更別說(shuō)神圣的圣潔的虔誠(chéng)的)工程法則有時(shí)候和科學(xué)實(shí)踐是不一致的。
            也就是說(shuō):抽象和模塊性是軟件工程的心和肺,法則1,2,3是“局部化關(guān)注點(diǎn),也就是DRY,分離關(guān)注點(diǎn),使關(guān)注點(diǎn)正交”。更簡(jiǎn)單的說(shuō):使用抽象并且不要違反。通過(guò)使得一個(gè)關(guān)注點(diǎn)完全不注意(也就是說(shuō):參數(shù)化)另一個(gè)關(guān)注點(diǎn),你可以最大自由地改變一個(gè)關(guān)注點(diǎn)而不影響另一個(gè)關(guān)注點(diǎn)。這是因?yàn)?allows for)局部化的原因,依次引發(fā)了獨(dú)立的開(kāi)發(fā)和維護(hù)。訓(xùn)練有素的開(kāi)發(fā)者創(chuàng)建分層抽象,并且一絲不茍地遵循他們的邊界。

            但是當(dāng)開(kāi)始調(diào)試時(shí)發(fā)生了什么呢?教條地(Dogmatically)遵循抽象邊界就像戴了一個(gè)眼罩;當(dāng)一個(gè)bug第一次出現(xiàn)的時(shí)候,你根本不知道它是隱藏在哪個(gè)抽象里,還是在層與層的交互之間。另一個(gè)思考抽象盒子內(nèi)部的通常的推論是 沖動(dòng)地假設(shè)這個(gè)bug是別人的錯(cuò)誤。(“一定是編譯器的錯(cuò)!”) 我想起 Knuth 關(guān)于計(jì)算機(jī)科學(xué)的引用:
                 這樣的人非常擅長(zhǎng)處理不同的法則應(yīng)用到不同情況下的情形,他們是那些可以快速地改變抽象層次,可以同時(shí)觀察很多大的事物和小的細(xì)節(jié)的人。——引自 Hartmanis 的圖靈獎(jiǎng)獲獎(jiǎng)感言
            我認(rèn)為這里的描述更多的是在軟件開(kāi)發(fā)的科學(xué)面或者也可以說(shuō)是設(shè)計(jì)方面的——但不是工程方面的。
            因?yàn)檎{(diào)試和測(cè)試是和觀察和理解一個(gè)現(xiàn)有的系統(tǒng)相關(guān)的,而不是構(gòu)建或修改一個(gè)系統(tǒng),我們自己構(gòu)建的藩籬(譯注:指層次抽象)使得我們的工程原則變成了障礙。調(diào)試工具,集成開(kāi)發(fā)環(huán)境,測(cè)試框架,等等都被一種需要違反抽象邊界的需求而賦予了特色。

            結(jié)果,干凈和骯臟(就像 Mitch 叫他們的)開(kāi)始撕咬混戰(zhàn),他們爭(zhēng)斗的問(wèn)題是:我們的軟件開(kāi)發(fā)框架 對(duì)他們對(duì) FIaI(NtMSHaG)LoE (ML) (譯注:實(shí)在不知道怎么翻譯)的堅(jiān)持 是應(yīng)該絕對(duì)嚴(yán)格呢,或是絕對(duì)寬松(Smalltalk)? 我不知道通過(guò) 構(gòu)建涵蓋這些不同開(kāi)發(fā)模型的軟件框架,我們是否能夠做的更好。

            =================================================================
            原文:

            Joel Spolsky has a post about the phases of the software development cycle that's remarkably close to my own observations. In Joel's view, the first phase is art (i.e., design phase); the second is engineering (construction); and the third is science (debugging and testing).

            Joel's interest is in project management and management tools, but mine is more in development tools. Once you recognize the divide between the engineering and science aspects of software development, you can better understand one of the tensions in the approach to development, a tension which leads to plenty of heated debate. This tension comes about because the Fundamental Immutable and Inviolable (Not to Mention Sacred, Holy, and Good) Laws of Engineering are sometimes at odds with the practice of science.

            To wit: abstraction and modularity are the heart and lungs of software engineering. Rules #1 , 2 and 3 are "Localize concerns, i.e. , separate concerns and enforce their orthogonality." More simply: use abstractions and don't violate them. By making one concern completely oblivious to (i.e., parametric in) another, you maximize your freedom to change one without affecting the other. This allows for local reasoning which in turn leads to separable development and maintenance. Disciplined developers create layered abstractions and fastidiously respect their boundaries.

            But what happens when you start debugging? Dogmatically adhering to abstraction boundaries is like wearing blinders; when a bug first arises, you never know which abstraction layer it's hiding in, or if it's in the interaction between layers. Another common consequence of thinking inside the abstraction box is impulsively assuming the bug is someone else's fault. ("The compiler must be broken!") I'm reminded of Knuth's quote about computer scientists:
            Such people are especially good at dealing with situations where different rules apply in different cases; they are individuals who can rapidly change levels of abstraction, simultaneously seeing things "in the large" and "in the small."
                      -- quoted in Hartmanis's
            Turing Award lecture
            I think this is describing more the science and perhaps also the design aspects--but not the engineering aspect--of software development.

            Because debugging and testing are about observing and understanding an existing system, rather than constructing or modifying a system, the barriers we construct to enforce our engineering principles become obstacles. Debugging tools, IDE's, testing frameworks, etc. are all characterized by a need to violate abstraction boundaries.

            As a result, the Cleans and Dirties (as Mitch calls them) fight tooth and nail about whether our software development frameworks should be absolutely strict in their adherence to the FIaI(NtMSHaG)LoE (ML) or absolutely lax (Smalltalk). I wonder if we couldn't do better by building software frameworks that were aware of these different modes of development.
            posted @ 2011-10-28 15:53 cingoli 閱讀(1876) | 評(píng)論 (7)編輯 收藏
            僅列出標(biāo)題  
             
            亚洲国产视频久久| 麻豆一区二区99久久久久| 久久www免费人成精品香蕉| 久久99精品久久久久久不卡| 久久精品国内一区二区三区| 久久久女人与动物群交毛片| 青青草国产成人久久91网| 亚洲人成网站999久久久综合 | 久久精品无码一区二区三区| 久久男人中文字幕资源站| 亚洲午夜久久久久久久久久| 久久国产乱子伦精品免费午夜| 人妻无码中文久久久久专区| 无码人妻少妇久久中文字幕| 久久久国产乱子伦精品作者| 久久婷婷午色综合夜啪| 日本免费一区二区久久人人澡 | 精品国产乱码久久久久久浪潮 | 精品国产福利久久久| 久久国产亚洲精品| 国产午夜电影久久| 国产精品美女久久久m| 中文成人久久久久影院免费观看| 国产精品免费久久久久电影网| 久久久久国产精品熟女影院| 亚洲AV无码久久| 色婷婷久久综合中文久久蜜桃av| 久久精品国产久精国产果冻传媒| 亚洲国产精品无码久久久久久曰| 色成年激情久久综合| 91久久精一区二区三区大全| 国产精品无码久久综合| 久久综合久久自在自线精品自| 久久伊人五月丁香狠狠色| 国产69精品久久久久观看软件| 欧美久久久久久午夜精品| 国产激情久久久久影院老熟女| 伊人久久免费视频| 久久精品国产亚洲AV不卡| 中文字幕无码久久精品青草| 久久精品国产72国产精福利|