• <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>
            Creative Commons License
            本Blog采用 知識(shí)共享署名-非商業(yè)性使用-禁止演繹 3.0 Unported許可協(xié)議 進(jìn)行許可。 —— Fox <游戲人生>

            游戲人生

            游戲人生 != ( 人生 == 游戲 )
            站點(diǎn)遷移至:http://www.yulefox.com。請(qǐng)訂閱本博的朋友將RSS修改為http://feeds.feedburner.com/yulefox
            posts - 62, comments - 508, trackbacks - 0, articles - 7

            Author: Fox

            元旦放假3天,本來(lái)想把前面寫的一個(gè)存在線程安全隱患的模塊推倒重來(lái)的,可是改著改著就覺(jué)得不對(duì)勁了。

            既然是返工,就想盡量把現(xiàn)在的理解完全加進(jìn)去,讓后面的人看了不要罵??墒窍氚褞浊械拇a改得面目全非并且更加安全準(zhǔn)確也并不是一件容易的事,雖然對(duì)于功能和邏輯的認(rèn)識(shí)比以前要清晰的多。

            拿到一個(gè)新的模塊,上面一般會(huì)給個(gè)大致的deadline。除非你對(duì)這個(gè)模塊和整個(gè)項(xiàng)目的依賴關(guān)系(接口、邏輯、功能)有很好的把握,否則,你根本不知道到底有多少東西是已經(jīng)實(shí)現(xiàn)的,有多少東西是可以復(fù)用的,有多少東西是需要修改的,有多少東西是要重寫的,有多少東西是要新加的,僅僅根據(jù)需求預(yù)估的進(jìn)度是不可能恰到好處的。而脫離了整個(gè)項(xiàng)目實(shí)現(xiàn)的模塊是非??赡艹鰡?wèn)題的,尤其是在使用多線程的項(xiàng)目中。

            當(dāng)我的這個(gè)模塊完成并上馬之后,我沾沾自喜的跟上面說(shuō),應(yīng)該是不會(huì)有問(wèn)題了,上面跟我說(shuō)了一句:如果不出問(wèn)題就是奇跡了,我當(dāng)時(shí)頗不以為然。在后面一兩周之內(nèi)真的就是沒(méi)有什么問(wèn)題,我真想告訴他是我創(chuàng)造了奇跡。

            “奇跡”在2007年的最后一周破滅了。在我從西嶺雪山回來(lái)的那天,為了增加新功能把代碼修改了一些,結(jié)果第二天更新之后,服務(wù)器就老是有問(wèn)題,找了一下午,才發(fā)現(xiàn)在修改代碼的時(shí)候居然忘記對(duì)一個(gè)pointer做NULL判定!我心想,這種錯(cuò)誤居然都出來(lái)了!死了算了!而且這個(gè)問(wèn)題出在非主線程中。然后就和同事在考慮,這個(gè)東西如果線程同步出現(xiàn)問(wèn)題,你就是每次使用前都做NULL判定也沒(méi)用,所以就決定把這個(gè)模塊重寫了。

            在這兒我就不想就線程安全問(wèn)題多說(shuō)了,以后想好了再專門去寫點(diǎn)多線程的東西吧,今天只是想說(shuō)點(diǎn)瑣碎的東西。

            因?yàn)槭欠偶伲乃嘉幢鼐腿糠旁谏厦媪?,代碼沒(méi)改多少,倒是玩了很長(zhǎng)時(shí)間的游戲。后來(lái)想想,也不全是時(shí)間問(wèn)題,幾千行的代碼改來(lái)改去,難保不出現(xiàn)更多的問(wèn)題。必須把它當(dāng)作一個(gè)新的模塊去寫,先要把邏輯結(jié)構(gòu)完全理出來(lái),能多細(xì)化就多細(xì)化,最好能夠精確到變量的使用,而且把文檔做細(xì),這樣就可以在寫文檔的過(guò)程中把問(wèn)題盡可能想全想清楚。改代碼先改文檔,這幾乎是所有學(xué)過(guò)軟件工程并寫過(guò)項(xiàng)目的同學(xué)都能認(rèn)識(shí)并理解的常識(shí),可是在實(shí)際工作中,上有任務(wù)催趕,下有閑心雜念,很難把文檔和注釋寫好。而做不到這一點(diǎn)的話,你就不敢保證你的模塊不出差錯(cuò)。

            所以,對(duì)于一個(gè)一般的需求,如果deadline是2個(gè)月的話。讀需求、評(píng)估依賴關(guān)系、量進(jìn)度要花掉1周,畫邏輯結(jié)構(gòu)、寫文檔要花掉3周,相當(dāng)于前面一半的時(shí)間沒(méi)有動(dòng)手寫代碼,然后寫代碼大概只用1周,甚至更少,其他時(shí)間就留給測(cè)試和修改文檔、代碼了。從軟件工程的角度,這樣的分配是合理的,而且是應(yīng)該的,但到了實(shí)際項(xiàng)目里面,又做不到!看來(lái),不管是manager,還是coder,都不能急,軟件工程不能白學(xué)了。

            我發(fā)現(xiàn),我的軟件工程就是白學(xué)了,以后得改改。

            /*****************************************************************************
            ?不想回頭去動(dòng)以前的代碼,每次看以前寫過(guò)的東西,都有一種想把它徹底刪除的沖動(dòng)。
            ?把需求看好、文檔寫好、時(shí)間安排好,這才是硬道理……

            ?畢竟是新年,還是祝大家:新年快樂(lè)!
            ?重要的是,新的一年,別荒廢了……
            *****************************************************************************/

            Feedback

            # re: 調(diào)整思路——2008年繼續(xù)努力  回復(fù)  更多評(píng)論   

            2008-01-02 11:45 by eXile
            這個(gè)問(wèn)題, 稱之為重構(gòu).
            在沒(méi)有單元測(cè)試的保證下, 進(jìn)行重構(gòu)是一種危險(xiǎn)的行為. 正如你說(shuō)的一樣, 要指望不出問(wèn)題, 那是奇跡. 這也不能怪軟件工程沒(méi)學(xué)好, 因?yàn)槲覀儗W(xué)的軟件工程本身就是有缺陷的.

            "把需求看好、文檔寫好、時(shí)間安排好,這才是硬道理…… "
            這是不對(duì)的, 設(shè)計(jì)的唯一不變的特點(diǎn)就是: 它總是在變化.
            --是不是有點(diǎn)有饒口 :) , 這是<<設(shè)計(jì)模式Head First>>中的一句話.
            所以我們做的, 是如何應(yīng)對(duì)變化.
            推薦看一下: <<重構(gòu),改善既有代碼的設(shè)計(jì)>>



            # re: 調(diào)整思路——2008年繼續(xù)努力  回復(fù)  更多評(píng)論   

            2008-01-02 12:41 by Fox
            @eXile
            呵呵,謝謝!
            設(shè)計(jì)模式、重構(gòu)、重構(gòu)與模式,我都看過(guò),只是在實(shí)際工作中很多東西被我們自己打了折扣……而且,上面的東西,看看開(kāi)闊開(kāi)闊思路還是好的。
            設(shè)計(jì)總在變化這句話我也依稀有點(diǎn)印象,但不變的東西更多,你總不能讓玩家今天這樣做明天那樣做啊……

            # re: 調(diào)整思路——2008年繼續(xù)努力  回復(fù)  更多評(píng)論   

            2008-01-02 13:52 by eXile
            我覺(jué)得, 好象你理解的設(shè)計(jì)總在變化這句話有偏差, 設(shè)計(jì)變化的原因主要有兩點(diǎn):
            1) 需求的變化, 主要是系統(tǒng)功能的改進(jìn), 擴(kuò)充, 版本的升級(jí)
            2) 需求的細(xì)化, 主要是需求本身不會(huì)考慮到所有的實(shí)現(xiàn)細(xì)節(jié), 在實(shí)現(xiàn)時(shí)才發(fā)現(xiàn)有設(shè)計(jì)不當(dāng)?shù)牡胤?

            # re: 調(diào)整思路——2008年繼續(xù)努力  回復(fù)  更多評(píng)論   

            2008-01-02 14:01 by eXile
            另外, 保證你的模塊不出差錯(cuò), 不是靠文檔和注釋, 而是靠測(cè)試,
            文檔和注釋,也分兩種, 一種是給自己看的, 一種是給別人看的, 這兩種寫法是不一樣的,
            對(duì)于寫給自己看的文檔, 如果會(huì)影響開(kāi)發(fā)進(jìn)度的話,為什么要寫它呢?這說(shuō)明寫文檔的方法不對(duì).

            # re: 調(diào)整思路——2008年繼續(xù)努力  回復(fù)  更多評(píng)論   

            2008-01-02 18:06 by Fox
            @eXile
            有道理~~~文檔寫起來(lái)痛苦啊~~~~~
            還是要適當(dāng)?shù)膶扅c(diǎn),適合自己吧

            # re: 調(diào)整思路——2008年繼續(xù)努力  回復(fù)  更多評(píng)論   

            2008-01-05 17:06 by fallhunter
            從二位的討論中受益,感謝~~
            久久精品中文字幕一区| 91精品国产色综久久| 一本色道久久综合狠狠躁| 国产成人精品综合久久久久| 国产精品一区二区久久国产| 国内精品久久久久久中文字幕| 久久免费香蕉视频| 久久99热只有频精品8| 久久精品人妻一区二区三区| 久久精品国产亚洲av水果派| 久久九九免费高清视频| 国产精品久久久久…| 国内精品综合久久久40p| 久久黄色视频| 国产ww久久久久久久久久| 久久精品国产久精国产思思| 久久久久久精品无码人妻| 精品久久久无码中文字幕天天| 国产成人久久精品一区二区三区| 久久亚洲中文字幕精品一区四| 亚洲一区中文字幕久久| 久久久久亚洲av无码专区喷水| 一级做a爰片久久毛片免费陪| 久久久久亚洲AV无码专区桃色| 欧美亚洲另类久久综合| 久久国产精品成人免费| 久久亚洲精品成人AV| 久久99亚洲网美利坚合众国| 人妻少妇久久中文字幕一区二区| 亚洲精品无码久久毛片| 亚洲国产成人精品女人久久久| 丁香五月综合久久激情| 久久99精品久久久久久噜噜| 国产精品久久久久乳精品爆| 中文字幕成人精品久久不卡| 午夜不卡888久久| a级毛片无码兔费真人久久| 国产精品伊人久久伊人电影| 久久久久人妻一区精品| 国内精品久久久久影院薰衣草 | 国产精品一久久香蕉国产线看|