<kbd id="afajh"><form id="afajh"></form></kbd>
<strong id="afajh"><dl id="afajh"></dl></strong>
    <del id="afajh"><form id="afajh"></form></del>
        1. <th id="afajh"><progress id="afajh"></progress></th>
          <b id="afajh"><abbr id="afajh"></abbr></b>
          <th id="afajh"><progress id="afajh"></progress></th>

          軟件開發(fā)的22條黃金法則

          共 2495字,需瀏覽 5分鐘

           ·

          2021-07-12 05:57


          這個(gè)世界需要的不是英雄,是專家 —— 杰洛特《巫師》

          編程本質(zhì)上是一門手藝活,既然是手藝,里面就會(huì)有很多個(gè)人技巧和經(jīng)驗(yàn)。

          “破窗理論”,DRY(Don't repeat yourself),曳光彈,正交性,這些詞的意思是什么你還記得么?

          《程序員修煉之道》這本書在我看來就是一本師傅寫給徒弟的開發(fā)哲學(xué)指南。

          里面既講了一些軟件開發(fā)的哲學(xué),比如破窗理論,它解釋了你的代碼為什么很快就會(huì)變成“屎山”。也講了一些有用的技巧和工具,比如如何利用好shell,提升你的編程效率。

          這本書沒有復(fù)雜的代碼,沒有晦澀難懂的原理,你完全可以當(dāng)作一本閑書來看。

          這本書里提到的看似人人都懂的道理,恰恰是很多碼農(nóng)們平常工作中最不重視,卻應(yīng)該去遵守的理念。

          我提煉了一些書中我覺得至今仍然沒有過時(shí)的觀點(diǎn)(畢竟本書有一定的年頭了,讀起來很有年代感),和大家分享下,這中間也夾雜著一些我的看法和思考。

          一、開發(fā)的哲學(xué)

          1. 作為開發(fā),你需要對(duì)自己說的話負(fù)責(zé)。對(duì)于不可能做到,風(fēng)險(xiǎn)太大的事情,你有權(quán)不去為之負(fù)責(zé)。

          2. 不要給做不到找借口,在你說做不到的時(shí)候,要提供你的想法,告訴大家,做不到的原因是需要重構(gòu),還是需要時(shí)間做原型,還是需要額外的資源支持。

          3. 破窗理論:一扇破窗戶,只要有那么一段時(shí)間不修理,就會(huì)漸漸給建筑的居民帶來廢棄感。于是窗戶就會(huì)一個(gè)個(gè)破碎,人們開始亂丟垃圾,亂涂亂畫。所以不要容忍你的代碼有“破窗戶”。

            這一點(diǎn)大家肯定也深有感觸,在你寫代碼的項(xiàng)目里一旦看到了一些亂七八糟的結(jié)構(gòu)和設(shè)計(jì),你也會(huì)不自覺地開始往上面寫湊活的代碼,慢慢就變成屎山了。

          4. 溫水煮青蛙,代碼是會(huì)慢慢腐爛而不被察覺的。要持續(xù)不斷的觀察你項(xiàng)目的變化,而不要只是專注于自己的那一塊代碼。

          5. 重視你的”知識(shí)“,這是你的資產(chǎn)。既然是資產(chǎn),就要定期投資(不斷學(xué)習(xí)),多元化地學(xué)習(xí)。并且要定期的評(píng)估你的技術(shù)方向,畢竟開發(fā)是個(gè)動(dòng)蕩的行業(yè),現(xiàn)在吃香的技術(shù)過幾年就會(huì)過時(shí)。要不斷地調(diào)整你的方向。

          6. 在做需求時(shí),要像用戶一樣去思考需求的合理性,而不是一味完成產(chǎn)品下發(fā)的需求。

          7. 做的軟件,要溫和的超出用戶的期望。給他們的東西要比他們的期望多一點(diǎn),給系統(tǒng)增加特性時(shí),多做一些額外的努力,可以給你帶來很大的美譽(yù)。

          8. 當(dāng)你在的開發(fā)團(tuán)隊(duì)人員龐大時(shí),可以指定每個(gè)人負(fù)責(zé)工作的各個(gè)方面。圍繞功能,而不是工作職務(wù)進(jìn)行工作的分配。比如有人要討論日期處理,就去找Mary,有人要討論數(shù)據(jù)存儲(chǔ),就去找Fred。

          二、開發(fā)的準(zhǔn)則

          1. 不要重復(fù)你自己:DRY(Don't repeat yourself)系統(tǒng)中的每一個(gè)組件都要單一,沒有歧義,并且權(quán)威的表示出來。

          2. 保持項(xiàng)目的系統(tǒng)正交性:不要讓系統(tǒng)間互相耦合,非正交的系統(tǒng)意味著你修改這邊的系統(tǒng),會(huì)影響到其他的系統(tǒng)。

          非正交的一個(gè)典型體現(xiàn)是前端的CSS,網(wǎng)上有很多調(diào)侃CSS的段子,CSS的一個(gè)修改經(jīng)常會(huì)影響到別的地方,這也是CSS很讓人痛苦的一個(gè)地方。在后端開發(fā)里,我們要盡量讓系統(tǒng)間不要相互影響,這對(duì)系統(tǒng)的傷害是很大的,并且在排查問題時(shí)非常痛苦。

          1. 保證代碼設(shè)計(jì)的可撤銷性:如果你的想法是這個(gè)問題的唯一解,那么這會(huì)是一個(gè)很危險(xiǎn)的事情。用戶的需求變化的很快,你的決策很可能只在當(dāng)下是正確的,不存在最終的決策,或者說,時(shí)刻要注意和反思,如果現(xiàn)在這個(gè)方法行不通,是不是就沒法挽回了。

          2. 做好資源的估算:這里的資源指的是很多代碼相關(guān)的資源,比如數(shù)據(jù)庫,存儲(chǔ),性能等。在開發(fā)前,一定要做好估算,在設(shè)計(jì)良好的代碼結(jié)構(gòu),保證再未來能夠應(yīng)付變化。

          3. 把文檔盡量多的做在代碼里,而不是游離于代碼之外。否則,過了一段時(shí)間后,你這些文檔就沒有什么作用了。

          4. 你不可能寫出完美的軟件:作為一個(gè)開發(fā),你要有這種自覺,自己也不要相信。所以要對(duì)自己可能犯的錯(cuò)誤,做防御性的編程。

          5. 異常處理:如果我刪掉所有的異常處理代碼,這些代碼是不是還能運(yùn)行?如果你的回答是”不能“,那么說明你的異常代碼正在被用在非異常的情形中。這樣不好。

          6. 利用好元數(shù)據(jù):這里的元數(shù)據(jù)可以理解為配置文件。將抽象放進(jìn)代碼,將細(xì)節(jié)放進(jìn)元數(shù)據(jù)。

          我們?nèi)粘i_發(fā)中經(jīng)常使用配置文件和分布式配置中心,把能夠放入配置文件的數(shù)據(jù)盡量放入,這樣不僅方便維護(hù)和修改,也能夠?qū)崿F(xiàn)不重啟應(yīng)用修改應(yīng)用行為的功能。代碼中應(yīng)該只有我們對(duì)業(yè)務(wù)的抽象。

          1. 考慮好系統(tǒng)并發(fā):要為并發(fā)做好周全的考慮。

          這個(gè)要求是不是看起來很稀松平常,大家都會(huì)?其實(shí)很多大型系統(tǒng),尤其是老的系統(tǒng),都沒有考慮并發(fā)問題(去問問傳統(tǒng)軟件企業(yè)做的軟件,你就知道了)。并發(fā)其實(shí)可以算作是互聯(lián)網(wǎng)公司最常遇到的問題,也是各種技術(shù)面試會(huì)問的很深的問題,要好好掌握。

          1. 不要靠巧合編程,要弄清楚程序?yàn)楹文軌蜻\(yùn)行。

          我們接觸變成初期,經(jīng)常會(huì)有些代碼調(diào)著調(diào)著就跑通了,但是連自己也不知道為什么。這種代碼真正用于線上風(fēng)險(xiǎn)很大。畢竟,他也許不是真的能工作,他也許只是看起來能工作!

          1. 什么時(shí)候該重構(gòu):當(dāng)你發(fā)現(xiàn)這四個(gè)事情出現(xiàn)的時(shí)候,就是你該重構(gòu)的時(shí)候。
          • 代碼違反了DRY法則
          • 有非正交的設(shè)計(jì)
          • 需求變化后代碼過時(shí)了
          • 性能有很大問題
          1. 重構(gòu)時(shí)的準(zhǔn)則:
          • 不要試圖在重構(gòu)的時(shí)候同時(shí)增加功能。
          • 在開始重構(gòu)前,確保你擁有良好的測(cè)試,這樣你才敢放開手腳改動(dòng)。
          • 采取短小,深思熟慮的步驟。
          1. 在測(cè)試的時(shí)候,要去做狀態(tài)覆蓋,而不是追求代碼覆蓋率。

          2. 好好學(xué)習(xí)shell:通常我們喜歡用各種帶界面的軟件,他們的特點(diǎn)是所見即所得。但是也帶來了缺點(diǎn),所見即全部所得(what you see is all you see)。這對(duì)于效率的提升是一個(gè)瓶頸,有很多GUI上面需要很多操作的事情,在shell上只需要一行代碼。所以盡管它有點(diǎn)難入門,但是學(xué)好了,會(huì)大幅度提高效率。

          關(guān)注我

          我是一名奮斗在互聯(lián)網(wǎng)一線的后端開發(fā)工程師。

            原創(chuàng)文章主要內(nèi)容:

            • 開發(fā)實(shí)戰(zhàn)
            • 技術(shù)面試
            • 算法題解/數(shù)據(jù)結(jié)構(gòu)/設(shè)計(jì)模式
            • 程序人生

            如果文章對(duì)你有幫助,請(qǐng)各位同學(xué) 點(diǎn)贊 轉(zhuǎn)發(fā) 收藏 三連,你的支持是對(duì)我莫大的鼓勵(lì)~


            瀏覽 66
            點(diǎn)贊
            評(píng)論
            收藏
            分享

            手機(jī)掃一掃分享

            分享
            舉報(bào)
            評(píng)論
            圖片
            表情
            推薦
            點(diǎn)贊
            評(píng)論
            收藏
            分享

            手機(jī)掃一掃分享

            分享
            舉報(bào)
            <kbd id="afajh"><form id="afajh"></form></kbd>
            <strong id="afajh"><dl id="afajh"></dl></strong>
              <del id="afajh"><form id="afajh"></form></del>
                  1. <th id="afajh"><progress id="afajh"></progress></th>
                    <b id="afajh"><abbr id="afajh"></abbr></b>
                    <th id="afajh"><progress id="afajh"></progress></th>
                    日韩美女A片 | 欧美一级a视频免费放 | 高清无码在线免费观看视频 | 超碰人人爱人人操 | 成人国产精品秘 在线看 |