青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品

2011年10月28日

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

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

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

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

結(jié)果,干凈和骯臟(就像 Mitch 叫他們的)開始撕咬混戰(zhàn),他們爭斗的問題是:我們的軟件開發(fā)框架 對他們對 FIaI(NtMSHaG)LoE (ML) (譯注:實(shí)在不知道怎么翻譯)的堅(jiān)持 是應(yīng)該絕對嚴(yán)格呢,或是絕對寬松(Smalltalk)? 我不知道通過 構(gòu)建涵蓋這些不同開發(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 閱讀(1880) | 評論 (7)編輯 收藏
僅列出標(biāo)題  
 
青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品
  • <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>
            欧美黄色大片网站| 欧美va天堂在线| 久久午夜电影| 久久久久久一区二区三区| 久久国产精品久久久久久| 亚洲欧美日韩天堂| 欧美一区二区三区视频免费播放 | 国产深夜精品福利| 欧美视频在线一区二区三区| 欧美激情91| 国产精品久久久久久久浪潮网站 | 亚洲激情亚洲| 欧美成人精品三级在线观看| 亚洲国产精品一区制服丝袜| 日韩一级裸体免费视频| 一区二区三区免费网站| 久久精品官网| 欧美激情第二页| 国产精品日韩久久久久| 永久免费毛片在线播放不卡| 99国产精品久久久久久久| 亚洲免费视频中文字幕| 久久久99免费视频| 日韩一级片网址| 久久精品亚洲国产奇米99| 欧美丰满高潮xxxx喷水动漫| 国产精品一卡| 亚洲精品国产精品国自产观看浪潮| 99国产精品久久久久老师| 欧美与黑人午夜性猛交久久久| 亚洲高清资源| 91久久精品国产91性色tv| 日韩视频在线观看一区二区| 亚洲欧美日本另类| 欧美国产欧美综合 | 欧美亚韩一区| 亚洲国产成人av| 久久精品一本久久99精品| 日韩视频一区二区在线观看| 久久一区国产| 国产视频一区二区三区在线观看| 91久久国产综合久久| 久久精品人人做人人爽电影蜜月| 亚洲精品久久久久久久久久久 | 国产精品美女黄网| 99视频国产精品免费观看| 欧美gay视频激情| 久久久久免费视频| 一区二区在线视频观看| 久久久91精品国产| 午夜在线视频观看日韩17c| 国产精品久久久久一区| 亚洲一区三区在线观看| 9人人澡人人爽人人精品| 欧美日韩国产小视频| 亚洲国产成人一区| 久久亚洲不卡| 久久久久久夜精品精品免费| 国内精品视频在线播放| 久久不见久久见免费视频1| 亚洲女同精品视频| 国产午夜精品理论片a级探花| 欧美在线精品一区| 在线亚洲电影| 国产精品捆绑调教| 午夜精品理论片| 国产精品99久久不卡二区| 国产精品三区www17con| 欧美中文在线视频| 久久国产精品99久久久久久老狼| 国产日韩一区二区三区在线| 久久精品免视看| 久色成人在线| 亚洲免费av观看| 夜夜嗨av一区二区三区网页 | 国产精品久久久久久久久婷婷| 午夜精品视频| 欧美专区第一页| 亚洲精品国偷自产在线99热| 亚洲国产乱码最新视频| 国产精品av免费在线观看| 亚洲福利视频在线| 欧美激情精品久久久久久黑人 | 欧美理论大片| 一区二区久久| 欧美成人午夜免费视在线看片| 1024欧美极品| 亚洲精品九九| 国产精品v日韩精品| 欧美亚洲三区| 久久精品夜色噜噜亚洲aⅴ| 亚洲国产精品久久久久秋霞不卡| 久久综合给合久久狠狠色| 免费视频一区| 日韩视频精品在线| 亚洲免费在线| 亚洲黄色尤物视频| 正在播放亚洲一区| 伊人精品成人久久综合软件| 亚洲电影天堂av| 国产精品久久久久久久第一福利| 久久久91精品国产一区二区三区 | 亚洲精品国产精品国自产观看浪潮 | 在线精品福利| 亚洲视频网站在线观看| 伊甸园精品99久久久久久| 亚洲婷婷综合色高清在线| 一区二区在线看| 亚洲综合电影一区二区三区| 在线观看一区| 亚洲一区二区成人在线观看| 亚洲另类在线视频| 美女国产一区| 亚洲欧美日韩在线不卡| 欧美电影免费观看网站| 久久在线免费观看| 99热这里只有精品8| 一区在线影院| 午夜精品久久久久久久99水蜜桃| 亚洲欧洲精品一区二区三区波多野1战4| 亚洲在线视频| 亚洲自啪免费| 欧美日韩精品在线观看| 欧美不卡视频一区| 亚洲二区在线观看| 久久久久9999亚洲精品| 久久精品日韩欧美| 国产欧美精品在线| 亚洲美女毛片| 日韩一级免费| 欧美国产精品中文字幕| 亚洲国产精品99久久久久久久久| 久久精品女人的天堂av| 欧美亚洲免费电影| 国产精品永久免费在线| 亚洲黄色成人久久久| 影音先锋亚洲电影| 欧美亚洲综合网| 久久久久久久久久久成人| 老牛影视一区二区三区| 欧美一区二区三区成人| 亚洲无线一线二线三线区别av| 欧美高清日韩| 亚洲乱码国产乱码精品精| 日韩网站在线观看| 欧美日韩另类视频| 亚洲视频1区| 久久精品国产免费| 国内自拍亚洲| 久久亚洲不卡| 亚洲福利视频三区| 在线观看日韩av电影| 麻豆成人精品| 亚洲精选一区| 午夜精品视频网站| 国产专区欧美精品| 久久男人av资源网站| 亚洲国产精品电影| 午夜国产精品视频| 国产一区视频观看| 欧美电影在线免费观看网站| 99爱精品视频| 久久久久成人精品免费播放动漫| 狠狠色2019综合网| 欧美日本韩国在线| 亚洲欧美资源在线| 蜜臀av在线播放一区二区三区 | 国产精品综合| 久久久精品国产一区二区三区| 欧美激情第8页| 亚洲女同性videos| 亚洲大片在线| 国产精品久久久久影院亚瑟| 欧美诱惑福利视频| 欧美国产日韩一区二区| 一区二区三区四区精品| 国产日本欧美一区二区| 欧美精品一卡二卡| 久久久久久电影| 亚洲一品av免费观看| 亚洲成色777777女色窝| 久久gogo国模裸体人体| 一区二区黄色| 最新中文字幕一区二区三区| 国产精品亚洲一区| 欧美女同在线视频| 麻豆成人小视频| 久久九九99| 亚洲伊人第一页| 亚洲精品三级| 欧美激情五月| 老巨人导航500精品| 欧美影院在线| 亚洲欧美一区二区三区久久| 亚洲国产欧美日韩| 精品二区久久| 国产欧美日韩亚州综合| 国产精品护士白丝一区av| 欧美成人69av| 久久婷婷成人综合色|