• <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>
            隨筆-19  評(píng)論-21  文章-0  trackbacks-0
            自動(dòng)化法則

                計(jì)算機(jī)原本就該從事簡(jiǎn)單重復(fù)的工作。只要把任務(wù)指派給它們,它們就可以一遍又一遍毫不走樣地重復(fù)執(zhí)行,而且速度很快。但卻經(jīng)常看見(jiàn)一種奇怪的現(xiàn)象:人們?cè)谟?jì)算機(jī)上手工做一些簡(jiǎn)單重復(fù)的工作,計(jì)算機(jī)則在大半夜里扎堆閑聊取笑這些可憐的用戶(hù)。

                我們應(yīng)該利用作為程序員的優(yōu)勢(shì),看到普通用戶(hù)無(wú)法看到的東西,培養(yǎng)larry所說(shuō)的“懶惰,急躁和傲慢”讓計(jì)算機(jī)高效地為我們工作:命令行是如此地高效,腳本是如此地方便,銜接兩個(gè)小工具能達(dá)到如此神奇的效果。。。

            古代哲人

            1. 亞里斯多德的“事物本質(zhì)性質(zhì)和附屬性質(zhì)”理論:致力本質(zhì)復(fù)雜性,去除附屬?gòu)?fù)雜性。你現(xiàn)在想解決問(wèn)題A,在解決A的問(wèn)題中遇到了問(wèn)題B,接著你去解決問(wèn)題B,戲劇性的是你遇到了很多接二連三的問(wèn)題C,D,E,或者在很多年后,程序才出現(xiàn)問(wèn)題C,D,E,可是你的最初問(wèn)題是A,不是嗎?B,C,D等等都是附屬性質(zhì),當(dāng)這些附屬性質(zhì)越來(lái)越多,越來(lái)越復(fù)雜的時(shí)候,也是開(kāi)始思考另一個(gè)解決A的辦法的時(shí)候了。(如果作為學(xué)習(xí),可以試著去解決那些附屬性質(zhì))

            2. 笛米特法則:任何一個(gè)對(duì)象或者方法,它應(yīng)該只能調(diào)用下列對(duì)象:該對(duì)象本身,作為參數(shù)傳遞進(jìn)來(lái)的對(duì)象,在方法內(nèi)創(chuàng)建的對(duì)象。這么做的主要目的是信息隱藏,同時(shí)使類(lèi)的耦合更加松散。

            3. “古老”的軟件傳說(shuō)。了解歷史才能更好地創(chuàng)造歷史。讀讀那些“古老”的“寶典”(如《程序員修煉之道》《人月神話(huà)》《Smalltalk Best Practice Patterns》),會(huì)學(xué)到很多有用的東西,或許你會(huì)發(fā)出一生驚嘆。“當(dāng)你的老板要求你使用一個(gè)低質(zhì)量的代碼庫(kù)時(shí),不需要在崩潰中咬牙切齒,告訴他:你正“站在侏儒的肩膀”上的陷阱中,然后他就會(huì)明白不僅僅只有你才覺(jué)得那是個(gè)壞主意。”

            擁抱多語(yǔ)言編程

               “每個(gè)語(yǔ)言都有自己擅長(zhǎng)的地方”(我的想法)。比如perl特別適合文本處理,用來(lái)處理網(wǎng)頁(yè)也很好(畢竟有些從服務(wù)器上返回的數(shù)據(jù)就是用perl返回的,所以用perl也會(huì)比較合適)。

                計(jì)算機(jī)語(yǔ)言就像鯊魚(yú),要是保持靜止就會(huì)死。

                Java的創(chuàng)造都們實(shí)際上創(chuàng)造了兩樣?xùn)|西:Java語(yǔ)言和Java平臺(tái)。后者就是我們擺脫歷史包袱的途徑(Java語(yǔ)言的特性包含了一些它本該可以忽略的東西,如Java程序初始化的順序和從0開(kāi)始的數(shù)組)。讀到本文我才開(kāi)始理解平臺(tái)的深刻意義。

                舉兩個(gè)例子(Groovy和Jaskell)說(shuō)明。

                Groovy是一種開(kāi)源的編程語(yǔ)言,它給Java帶來(lái)了動(dòng)態(tài)語(yǔ)言的語(yǔ)法和功能,它會(huì)生成Java字節(jié)碼,因此可以在Java平臺(tái)上運(yùn)行。在Java之后十多年里浮現(xiàn)出來(lái)的各種語(yǔ)言很大程序上影響著Groovy的語(yǔ)法:Groovy支持裝飾,較松散的類(lèi)型系統(tǒng),“理解”迭代的集合,以及很多現(xiàn)代編程語(yǔ)言的改進(jìn)特性。而且它可以編譯成純正的Java字節(jié)碼。用Groovy寫(xiě)成的代碼簡(jiǎn)潔且并不比用Java寫(xiě)的代碼效率低多少,而且能充分借用Java平臺(tái)的優(yōu)勢(shì)。

                Jaskell是運(yùn)行在Java平臺(tái)上的Haskell版本。Jaskell擁有函數(shù)式程序設(shè)計(jì)語(yǔ)言的優(yōu)勢(shì):函數(shù)不改變外界的狀態(tài),純粹的函數(shù)式語(yǔ)言壓根沒(méi)有“變量”概念;函數(shù)式語(yǔ)言對(duì)多線(xiàn)程的支持比命令式語(yǔ)言要強(qiáng)得多,用函數(shù)式語(yǔ)言更容易寫(xiě)出強(qiáng)壯的線(xiàn)程安全的代碼,對(duì)并發(fā)支持也比較好(我想這是Erlang流行的原因)。同時(shí)Jaskell也能借用Java平臺(tái)的優(yōu)勢(shì)。

                 Java平臺(tái)借用這些多語(yǔ)言特性,一定會(huì)走得更好,走得更遠(yuǎn)。不過(guò),在帶來(lái)好處的同時(shí),也帶來(lái)了一個(gè)問(wèn)題:多語(yǔ)言應(yīng)用程序更難高度,解決這個(gè)問(wèn)題最簡(jiǎn)單的辦法也跟現(xiàn)在一樣:靠嚴(yán)格的單元測(cè)試來(lái)避免在調(diào)試器上浪費(fèi)時(shí)間。

                 多語(yǔ)言開(kāi)發(fā)風(fēng)格會(huì)把我們帶向領(lǐng)域特定語(yǔ)言(Domain-specific Language,DSL)。我們會(huì)以一些專(zhuān)門(mén)的語(yǔ)言為基礎(chǔ),創(chuàng)造出非常有針對(duì)性的,非常專(zhuān)注某一問(wèn)題域的DSL。抱定一種通用語(yǔ)言不放的年代就快結(jié)束了,我們正在進(jìn)入一個(gè)專(zhuān)業(yè)細(xì)分的新時(shí)代。大學(xué)時(shí)代的Haskell教材還在書(shū)架頂上蒙塵嗎?該給它撣撣灰了。

                 ps: 我們也可以以C++為基礎(chǔ),來(lái)創(chuàng)造一種DSL,思考。



            鏈接: 卓有成效的程序員




            posted on 2010-07-10 12:40 hex108 閱讀(863) 評(píng)論(4)  編輯 收藏 引用 所屬分類(lèi): Read the book

            評(píng)論:
            # re: 卓有成效的程序員 2010-12-03 02:05 | flagman
            使用C++ template metaprogramming,不就可以定義DSL嗎?

            只是這樣的實(shí)現(xiàn),目前的問(wèn)題是還沒(méi)有辦法保證定義出的DSL是type-safe的。  回復(fù)  更多評(píng)論
              
            # re: 卓有成效的程序員 2010-12-03 15:32 | hex108
            @flagman

            呵呵,你說(shuō)的問(wèn)題是存在的(這個(gè)問(wèn)題我再仔細(xì)想想。。。), 3Q ~
            相對(duì)于卓有成效的程序員(http://ishare.iask.sina.com.cn/f/10584969.html)里提供的關(guān)于DSL例子 ,我更喜歡《程序員修煉之道》(http://forum.eviloctal.com/thread-33274-1-1.html)第二章12節(jié)領(lǐng)域語(yǔ)言 對(duì) DSL的應(yīng)用。 我這里說(shuō)的DSL也是想側(cè)重于“新發(fā)明”一種小的語(yǔ)言,在這個(gè)小語(yǔ)言里,一條簡(jiǎn)單的語(yǔ)句能執(zhí)行復(fù)雜的功能,讓抽像層次更高,比如:sendMail(from,to,content)為發(fā)email的函數(shù), 這樣我們就可以直接調(diào)用sendMail了(感覺(jué)好像是提供了庫(kù)函數(shù)了。。。)。  回復(fù)  更多評(píng)論
              
            # re: 卓有成效的程序員 2011-10-19 19:13 | high PR Backlinks
            thanks for it.  回復(fù)  更多評(píng)論
              
            亚洲国产精品无码成人片久久| 亚洲国产日韩欧美久久| 99久久国产综合精品网成人影院| 精品无码人妻久久久久久| 久久天天躁夜夜躁狠狠| 狠狠狠色丁香婷婷综合久久五月| 少妇久久久久久被弄到高潮 | 久久久久久久久66精品片| 久久久无码精品亚洲日韩按摩| 成人a毛片久久免费播放| 欧美午夜精品久久久久免费视| 久久91这里精品国产2020| 久久一日本道色综合久久| 欧美麻豆久久久久久中文| 色噜噜狠狠先锋影音久久| 久久久久亚洲AV成人网人人网站 | 少妇被又大又粗又爽毛片久久黑人 | 久久九九免费高清视频| 久久精品国产福利国产秒| 亚洲级αV无码毛片久久精品 | 97精品伊人久久久大香线蕉 | 香蕉aa三级久久毛片 | 精品国产福利久久久| 77777亚洲午夜久久多人| 久久精品女人天堂AV麻| 国产精品青草久久久久福利99| 久久97精品久久久久久久不卡| 久久精品aⅴ无码中文字字幕不卡| 狠狠色狠狠色综合久久| 久久精品国产日本波多野结衣| 亚洲中文字幕伊人久久无码| 久久亚洲中文字幕精品一区| 久久久精品视频免费观看| 精品水蜜桃久久久久久久| 国内精品久久久久久久coent| 91久久国产视频| 久久97久久97精品免视看秋霞 | 久久精品国产亚洲av麻豆蜜芽| 国内精品久久久久影院薰衣草 | 久久国产精品77777| 午夜精品久久久久久中宇|