女人的天堂va东京热_亚洲av永久无码浪潮av影视_亚洲综合无码中文字幕_亚洲免费人成影院在线播放

軟件開發(fā) style=軟件定制 style=
  • 你要避免的軟件開發(fā)模式[派通科技]

    發(fā)布于2019-11-29 16:15:00 | 瀏覽次數(shù):

    做軟件開發(fā)十?dāng)?shù)年,見識了形形色色的開發(fā)者,和各種各樣的奇葩軟件開發(fā)模式。本文跟你侃侃這些軟件開發(fā)模式及其特點(diǎn)。

    IDD(IDE-Driven Development)

    大巧在所不為,大智在所不慮。

    -- 荀子 天論

    IDD,也就是 IDE 驅(qū)動(dòng)開發(fā),幾乎是初學(xué)者步入軟件開發(fā)殿堂的必經(jīng)之路。IDE 為開發(fā)者屏蔽了很多細(xì)節(jié),并且?guī)缀醪挥门渲茫ㄏ鄬τ?vim / emacs / sublime)就可以使用代碼自動(dòng)補(bǔ)全,代碼跳轉(zhuǎn),搜索,以及簽入簽出等軟件開發(fā)中將會(huì)使用到的幾乎所有工作。

    然而,它帶來的危害也是顯而易見的,陷入 IDD 開發(fā)模式太深,開發(fā)者離開了 IDE 便像無頭蒼蠅一樣,幾乎不知道怎么讀代碼,甚至不太會(huì)寫代碼,不懂怎么編譯,不會(huì)自動(dòng)化完成常見的任務(wù)(比如 android 項(xiàng)目從編譯到打包到 apk 分析),甚至連基本的 git 操作都無法完成。而這些被屏蔽的細(xì)節(jié)都是軟件工程師的基本功,就像彈鋼琴的基本指法一樣,是必須修煉好的。試想一下,如果你只會(huì)在 IDE 里讀代碼,離了 IDE 的跳轉(zhuǎn)就不知道怎么追溯代碼的脈絡(luò),那么有的代碼你只能通過 browser 閱讀怎么辦?不讀了?如果你只會(huì)在 IDE 里寫代碼,有天你只能 ssh 到服務(wù)器上寫代碼(表笑,有很多公司這么做,也有很多場合需要這么做),你難道就不寫了?

    此外,IDD 開發(fā)者如果不能及時(shí)從對 IDE 的極度依賴中抽身而出,很容易轉(zhuǎn)化成下一類開發(fā)者。

    • 適用人群:初學(xué)者
    • 舒適指數(shù):五星
    • 危害指數(shù):四星
    • 解決之道:學(xué)會(huì)任意一個(gè) shell 下的編輯器

    DDD(Debugger-Driven Development)

    合格的程序員的代碼是一行行寫出來的;不合格的程序員的代碼是一行行調(diào)出來的。

    -- 某子 程序員的自我修養(yǎng)

    DDD,面向調(diào)試器開發(fā),是 IDD 依賴到一定程度的必然反應(yīng)。這種開發(fā)模式的典型表現(xiàn)為:寫出來的代碼不知道對不對,從頭到尾設(shè)置無數(shù)個(gè)斷點(diǎn),然后進(jìn)入到調(diào)試模式,一個(gè)斷點(diǎn)一個(gè)斷點(diǎn)跟蹤。發(fā)現(xiàn)一個(gè)問題,解決一個(gè)問題(也許引入一個(gè)新的問題),直到所有斷點(diǎn)走數(shù)遍,所有遇到的問題被消滅,抹一抹頭上的汗,心里罵上一句:媽的,這段代碼老子(娘)終于調(diào)通了!

    DDD 是非常浪費(fèi)程序員生命的一種開發(fā)方式,它讓我們把有限的時(shí)間精力都浪費(fèi)在無窮地瞎忙活之中。因?yàn)閿帱c(diǎn)過于唾手可得,程序員會(huì)變得懶于思考,懶于設(shè)計(jì),甚至寫完了代碼都懶得自己看一眼 —— 大手一揮,無數(shù)個(gè)紅色的斷點(diǎn)就設(shè)置好了,反正出了問題我調(diào)就行了唄。

    其實(shí)很多 concurrent 的問題,靠調(diào)試器是無法復(fù)現(xiàn)和解決的,更要命的是,DDD 還容易使程序員陷入 tunnel vision —— 我們太過于關(guān)注眼前的那一點(diǎn)點(diǎn)狀態(tài),而忽視了全局。

    • 適用人群:入門者
    • 舒適指數(shù):四星
    • 危害指數(shù):五星
    • 解決之道:多花時(shí)間思考和設(shè)計(jì),使用 TDD(Test Driven Development),如果非要追蹤狀態(tài),合理地使用日志(log)而非斷點(diǎn)

    PDD(Print-Driven Development)

    王好戰(zhàn),請以戰(zhàn)喻。填然鼓之,兵刃既接,棄甲曳兵而走?;虬俨蕉笾?,或五十步而后止。以五十步笑百步,則何如?

    -- 孟子 梁惠王上

    看到 DDD,做嵌入式開發(fā)的 C 程序員笑了,我們沒有那臭毛病 —— 大部分嵌入式開發(fā)的場景,要么設(shè)斷點(diǎn)太麻煩(需要 remote debugger),要么無法設(shè)置(比如說很多內(nèi)核態(tài)的代碼),所以我們的代碼都是寫出來的。不過,這部分程序員大多自發(fā)聚集起來,立起一個(gè)山頭:PDD,也就是面向打印開發(fā)。其開發(fā)邏輯有如下面的代碼:

    // ...some awesome logic...printf("haha, hit 1");// ...some more logicprintf("!!!!!! hit 2");if (awesome_check(awesome_state)) {printf("####### condition captured")}
    

    PDD 和 DDD 相比,是旗鼓相當(dāng),半斤八兩。PDD 開發(fā)者加入的代碼,和 DDD 開發(fā)者設(shè)置的斷點(diǎn)一樣,頭疼醫(yī)頭,腳疼醫(yī)腳,哪里的狀態(tài)不對了,或者和預(yù)想的流程不一致,先不考慮設(shè)計(jì)上是否有缺陷,為什么會(huì)出現(xiàn)這樣的結(jié)果,而是不管三七二十一,加個(gè)打?。ㄔO(shè)個(gè)斷點(diǎn))看看狀態(tài)是什么。如果沒抓對位置,那么就繼續(xù)細(xì)化,直到很被動(dòng)地找到原因?yàn)橹埂?

    • 適用人群:入門者
    • 舒適指數(shù):三星
    • 危害指數(shù):四星
    • 解決之道:多花時(shí)間思考和設(shè)計(jì),合理地使用深思熟慮過的日志(log)而非用完即扔的打印信息

    BDD(Bug-Driven Development)

    以管窺天,以蠡測海,以莛撞鐘,豈能通其條貫,考其文理,發(fā)其音聲哉。

    -- 東方朔 答客難

    看到 BDD,也就是問題單驅(qū)動(dòng)開發(fā),相信大家都相視一笑。本來這里我想用 TDD(Ticket-Driven Development),更接近我的原意,為了不和 Test-Driven Development 混淆,故而只好改成 BDD。這可能是我們最熟悉的開發(fā)模式了 —— 在一個(gè)業(yè)務(wù)穩(wěn)定的軟件公司(甭管規(guī)模大小),勉力維護(hù)現(xiàn)有的代碼,小心地添加新功能是多數(shù)程序員的主要職責(zé)。在這些公司里,與其說我們是工程師,不如說我們是補(bǔ)鍋匠。看不懂代碼?沒關(guān)系,只要你會(huì)讀日志(出錯(cuò)信息);解決不了問題?不打緊,能找到 workaround 把問題繞過去也可以,更有甚者,遇到神問題,看不懂,想不明,解不了,還沒有 workaround,大筆一揮:not reproducible,就把問題關(guān)了,幾個(gè)月半年后,說不定自己已經(jīng)去補(bǔ)別的鍋了。

    BDD 開發(fā)者修的都是防御之道,一手華麗的 defensive coding skill,堪比仙女座的星云鎖鏈,把系統(tǒng)的每寸肌膚防得滴水不漏。如果你看到一段代碼,函數(shù) A(a, b, c) 調(diào)了函數(shù) B(c),即便參數(shù) c 在 A 的入口進(jìn)行了詳細(xì)的檢查,在 B 中也還會(huì)再度詳細(xì)檢查(哪怕 B 只有 A 調(diào)用),那么這代碼一定是 BDD 開發(fā)者開發(fā)的。

    BDD 開發(fā)者的視野往往很窄,所學(xué)所用皆局限于已有的系統(tǒng),由于系統(tǒng)并非自己所寫,閱讀代碼又是就著問題去追根溯源,所以對系統(tǒng)的理解會(huì)比較狹窄。這并非程序員能力不足,相反,能做 BDD 開發(fā)往往都是很有經(jīng)驗(yàn)的程序員。然而,他們被公司的需求所局限,整日被 ticket 追逐,疲于奔命,在工作中無法有效提升,漸漸迷失在一個(gè)又一個(gè)犯罪現(xiàn)場,眼界變得越來越狹窄。

    • 適用人群:業(yè)務(wù)穩(wěn)定的公司里的『高級程序員』
    • 舒適指數(shù):二星
    • 危害指數(shù):四星
    • 解決之道:自己主導(dǎo)一個(gè)項(xiàng)目的開發(fā),或者,跳槽

    RDD(Rat-race-game-Driven Development)

    From day to day, we programmers dreamed of being an expert inside the team/company; however, when that day really comes we trapped ourselves.

    -- 程序君 Programmer’s dilemma

    These walls are kind of funny. First you hate ’em, then you get used to ’em. Enough time passes, gets so you depend on them. That’s institutionalized. They send you here for life, that’s exactly what they take. The part that counts, anyways.

    -- Red, The Shawshank Redemption

    RDD,老鼠賽跑驅(qū)動(dòng)的開發(fā),是指那些整個(gè)職業(yè)生涯都在原地打轉(zhuǎn)的開發(fā)模式。Rat race game 是『富爸爸窮爸爸』中的經(jīng)典例子 —— 老鼠在環(huán)形的籠子里拼命地奔跑。

    每個(gè)程序員都在努力地成為他所在領(lǐng)域的專家。成為專家的代價(jià)是巨大的,我們需要付出經(jīng)年累月的努力,才能爬到峰頂,帶上「專家」的帽子。然而,成為「專家」往往意味著一條路走到黑 —— 一來之前的累計(jì)的慣性實(shí)在太大,掉頭的機(jī)會(huì)成本太大;二來你的雇主因此而付你更高薪水,所以你只能在這個(gè)方向上不斷前進(jìn)。

    我們知道,軟件是個(gè)工程的活兒,并非科學(xué)。科學(xué)的路上走得越遠(yuǎn),打出的裝備越稀缺;而在同一家公司或者同一個(gè)行業(yè)里搞軟件的,走得越遠(yuǎn),就有越多的路是重復(fù)再走。你可能精于 chip verification,于是從第一份工作到第 n 份工作,干的都是 verification 的活,直到有天驚聞這個(gè)職位被砍;你可能是web 桌面化的好手,extjs 玩得風(fēng)生水起,公司依賴你的技能開發(fā)產(chǎn)品,直到有一天,這個(gè)產(chǎn)品沒人用了,你到市場上一看,你的 extjs 九段的功力,比不上玩 react 才剛剛兩段的水平受歡迎。

    RDD 就像 Red 口中所述的那些高墻。當(dāng)你沉浸在 RDD 中不能自拔時(shí),悄悄地,你曾經(jīng)引以為豪賴以生存的能力成了你生存下去的最大障礙。

    • 適用人群:大公司里的『專家』
    • 舒適指數(shù):五星
    • 危害指數(shù):四星
    • 解決之道:在公司里換不同的團(tuán)隊(duì),或者,跳槽去更有挑戰(zhàn)的公司


    以上寫了這么多,總有一款符合你。你有沒有找到自己心儀的開發(fā)模式?如果沒有,恭喜你;如果找到了,別慌,有則改之,無則加勉即可。

    用戶評論
      知乎用戶
      瞎寫
      54
      spongebobsun
      寫的真好,一下子觸動(dòng)到我的痛點(diǎn)。。??赐炅宋矣X得自己簡直是一堆dd集一身。。。感覺干脆吧自己dd到/dev/null里算球了(*>.
      4
      笨蛋小明
      不是很明白,真的有人能夠不經(jīng)過大量調(diào)試通過代碼?
      要想達(dá)到那種狀態(tài),得把同樣的問題寫過多少次啊?
      真要如此,為什么不直接拿以前的代碼重用?
      9
      知乎用戶
      略扯…
      9
      alex00zoe
      把TDD也可以說一下嘛,呵呵
      0
      知乎用戶
      看劑量吧,隨便寫十來行代碼都能出一堆bug和寫了上百行出幾個(gè)bug效率顯然不同。
      一方面我們可以借助debugger提高效率,一方面也要提高基本素養(yǎng)。
      反正我是感覺躺槍_(:з」∠)_
      0
      Twiknight
      被IDE屏蔽的東西和基本功關(guān)系不大,把關(guān)注點(diǎn)集中在如何使用自動(dòng)化工具上,格局比DDD開發(fā)者好不了太多吧。寫點(diǎn)gulp之類和按鍵精靈操作VS相比沒看出來高端了多少,需要什么工具的時(shí)候上什么工具就是了,我就不信大神們都拿notepad++寫.csproj文件。所謂的PDD開發(fā)者一般都出現(xiàn)在過程管理混亂的,文檔缺斤少兩的公司,又缺乏合適的風(fēng)格審查的公司,因?yàn)闆]人知道自己調(diào)用那個(gè)接口真正的行為該是什么樣的,而源碼又混亂難讀。其他基本贊同。
      17
      知乎用戶
      換個(gè)好聽的名字就是interactive programming...而且是被很多人推崇的。。。沒有必要一竿子打倒
      1
      Wh1te
      PDD中毒已深啊
      2
      許哲寧
      瞎寫
      8
      yujin ni
      同樣買不起調(diào)試器的嵌入式程序員路過
      0
      Paprika
      BDD其實(shí)也會(huì)和behavior driven development混淆....
      3
      Twiknight
      取決于你寫的什么代碼,如果問題描述很清楚,倒是不需要大量調(diào)試,出了bug一般看現(xiàn)象就能定位個(gè)八九不離十,更何況很多運(yùn)行時(shí)會(huì)把錯(cuò)誤棧信息打印出來。如果問題本身描述就很混亂,中間又為edge case打了一堆補(bǔ)丁,那就難說了。
      0
      知乎用戶
      BDD那是沒辦法啊,要么系統(tǒng)本身過于復(fù)雜難于掌握全局,要么別人的屁股實(shí)在懶得擦,要么項(xiàng)目是求穩(wěn)優(yōu)先(特別是『正?!贿\(yùn)行中的項(xiàng)目)。
      當(dāng)然,寫新的模塊的時(shí)候會(huì)好點(diǎn)。當(dāng)然,久了后會(huì)導(dǎo)致無力自己啟動(dòng)新架構(gòu)那是一個(gè)可能的后遺癥,也只能自己努力了。

      RDD這種從小里說也可以說是太習(xí)慣于某種框架、平臺的工作了,沒有及時(shí)補(bǔ)充知識,或者多自我學(xué)習(xí)更深層次的東西,這個(gè)的確需要我等警醒。
      0
      Gecko Fu
      還有 GDD:  grep driven development
    城固县| 昆明市| 清徐县| 中宁县| 锡林郭勒盟| 岑溪市| 得荣县| 青浦区| 二手房| 武邑县| 屏边| 通道| 义乌市| 桑日县| 宣恩县| 西乌珠穆沁旗| 桦南县| 连城县| 甘谷县| 陆川县| 霍林郭勒市| 云霄县| 内乡县| 闽清县| 渭源县| 化隆| 玛纳斯县| 阿尔山市| 建平县| 石景山区| 平陆县| 甘谷县| 巴彦淖尔市| 滁州市| 梧州市| 三原县| 绥化市| 个旧市| 乐平市| 宣威市| 沂水县|