編程中的典型錯誤操作(第二部分)

{"type":"doc","content":[{"type":"heading","attrs":{"align":null,"level":3},"content":[{"type":"text","text":"摘要"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"本文是該系列的第二篇。第一篇在這"},{"type":"link","attrs":{"href":"https:\/\/www.infoq.cn\/article\/W5vCJSpWbH6Sj09pkXzU","title":"xxx","type":null},"content":[{"type":"text","text":"編程中的典型錯誤(第一部分)"}]},{"type":"text","text":"軟件開發是一項越來越普遍的工作,但是在開發的過程中,有一些錯誤是我們經常遇到,或者是一犯再犯的,所以George在本文中整理了在應用級別常見的錯誤。"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","marks":[{"type":"italic"}],"text":"本文最初發表於"},{"type":"link","attrs":{"href":"https:\/\/primalskill.blog\/mistakes-were-made-part-2","title":null,"type":null},"content":[{"type":"text","marks":[{"type":"italic"}],"text":"Primal Skill Programming網站"}],"marks":[{"type":"italic"}]},{"type":"text","marks":[{"type":"italic"}],"text":",經原作者George授權,由InfoQ中文站翻譯分享。"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"我們繼續這個系列的第二篇文章,接下來我們看一下在應用程序級別應該避免哪些錯誤。"}]},{"type":"heading","attrs":{"align":null,"level":2},"content":[{"type":"text","text":"應用程序級別"}]},{"type":"heading","attrs":{"align":null,"level":3},"content":[{"type":"text","text":"不使用版本控制"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"即便你是唯一的開發人員,也要學習和使用版本控制工具,如Git或Mercurial。"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"簡而言之,如果你所編輯的文件超過了一個,那麼就應該進行版本控制。"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"像"},{"type":"link","attrs":{"href":"https:\/\/git-scm.com\/","title":null,"type":null},"content":[{"type":"text","text":"Git"}]},{"type":"text","text":"這種去中心化版本控制系統的好處在於能夠讓你的代碼庫實現高可用,並且會有清晰的文件變更歷史,我們可以據此進行回滾,另外這種方式還有衆多的其他好處。"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"業界公認的事實標準代碼託管服務是"},{"type":"link","attrs":{"href":"https:\/\/github.com\/","title":null,"type":null},"content":[{"type":"text","text":"Github"}]},{"type":"text","text":",但是你也可以使用"},{"type":"link","attrs":{"href":"https:\/\/about.gitlab.com\/","title":null,"type":null},"content":[{"type":"text","text":"Gitlab"}]},{"type":"text","text":"或者"},{"type":"link","attrs":{"href":"https:\/\/bitbucket.org\/product","title":null,"type":null},"content":[{"type":"text","text":"Bitbucket"}]},{"type":"text","text":"。"}]},{"type":"heading","attrs":{"align":null,"level":3},"content":[{"type":"text","text":"懶於寫提交信息"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"如果你在一個團隊中工作並且使用版本控制工具(參見上面所提的錯誤)的話,那麼很重要的一點就是在開發過程中的每一步都要努力提升協作和溝通。"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"我看到新的開發人員(或團隊的新成員)很容易犯的一個錯誤就是把版本控制工具當成自己的個人代碼倉庫,無視需要使用同一個代碼倉庫的其他成員,也不管如何去理解其他人的代碼,尤其是代碼變更。"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"我經常看到這樣的提交信息。"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"image","attrs":{"src":"https:\/\/static001.geekbang.org\/infoq\/93\/930ff8b36dc1b04794b19c68c0c84828.png","alt":"","title":"","style":[{"key":"width","value":"75%"},{"key":"bordertype","value":"none"}],"href":null,"fromPaste":true,"pastePass":true}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"這種類型的提交信息並不能告訴其他的團隊成員到底發生了什麼代碼變更。因此,團隊成員需要去看文件的變化,這會導致開發時間和資源的消耗,而且這也無助於促進良好的協作和代碼審查。"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"在代碼提交之前一定要想清楚,如果必要的話,可以把相關的變更一起進行提交。"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"創建好的代碼需要不斷實踐,如下的這些資源能夠幫助你編寫好的提交信息:"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"numberedlist","attrs":{"start":null,"normalizeStart":1},"content":[{"type":"listitem","attrs":{"listStyle":null},"content":[{"type":"paragraph","attrs":{"indent":0,"number":1,"align":null,"origin":null},"content":[{"type":"link","attrs":{"href":"https:\/\/www.freecodecamp.org\/news\/writing-good-commit-messages-a-practical-guide\/","title":null,"type":null},"content":[{"type":"text","text":"如何編寫好的提交信息:Git實用指南"}]}]}]},{"type":"listitem","attrs":{"listStyle":null},"content":[{"type":"paragraph","attrs":{"indent":0,"number":2,"align":null,"origin":null},"content":[{"type":"link","attrs":{"href":"https:\/\/github.com\/erlang\/otp\/wiki\/Writing-good-commit-messages","title":null,"type":null},"content":[{"type":"text","text":"編寫好的提交信息"}]}]}]}]},{"type":"heading","attrs":{"align":null,"level":3},"content":[{"type":"text","text":"不寫測試"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"你會說,我們沒有時間寫測試,對吧?從長遠來看,編寫測試能夠從另外一個角度節省開發時間。"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"看起來,編寫測試要耗費不少的時間,在某種程度上來講,這是對的,但是這樣做會引入更少的缺陷,從而能夠爲我們減少修復缺陷的時間。"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","marks":[{"type":"strong"}],"text":"編寫測試一定要計算到項目時間的預估之中"},{"type":"text","text":",項目經理應該要了解編寫測試的好處。"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"我們有不同類型的測試策略,最流行的是"},{"type":"link","attrs":{"href":"https:\/\/en.wikipedia.org\/wiki\/Unit_testing","title":null,"type":null},"content":[{"type":"text","text":"單元測試"}]},{"type":"text","text":"。其他的測試類型包括"},{"type":"link","attrs":{"href":"https:\/\/en.wikipedia.org\/wiki\/Functional_testing","title":null,"type":null},"content":[{"type":"text","text":"功能測試"}]},{"type":"text","text":"、端到端(end-to-end,E2E)測試或"},{"type":"link","attrs":{"href":"https:\/\/en.wikipedia.org\/wiki\/Integration_testing","title":null,"type":null},"content":[{"type":"text","text":"集成測試"}]},{"type":"text","text":"。"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"開發人員經常會被命名慣例所困擾,“"},{"type":"text","marks":[{"type":"italic"}],"text":"你叫它單元測試還是集成測試?不,它是功能測試!”"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"雖然每種測試策略都有其優點和缺點,但我的編程經驗告訴我,這可能是一個不太受歡迎的觀點,那就是叫它什麼真的不重要,不管是單元測試、集成測試還是功能測試,至少保證要爲代碼中的關鍵部分寫"},{"type":"text","marks":[{"type":"strong"}],"text":"一些測試"},{"type":"text","text":"。"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","marks":[{"type":"strong"}],"text":"一個人可以寫出很好的集成測試和無用的單元測試,反之亦然"},{"type":"text","text":"。"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"heading","attrs":{"align":null,"level":3},"content":[{"type":"text","text":"沒有確定統一的編碼風格和標準"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"不,代碼風格不僅僅事關tab字符還是空格。"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"在團隊中工作有很大的好處,同時也會有一些犧牲,其中之一可能就是你不喜歡的編碼風格。"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"使用統一的編碼風格對代碼的長期保存和可維護性是很重要的,如果有一個已經建立起來的編碼風格,那麼團隊的新成員就可以很容易地融入到一個項目中。"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"如果你不知道從何處着手的話,那麼最好看一下別人是怎麼做的,沒有必要重複發明輪子。"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"numberedlist","attrs":{"start":null,"normalizeStart":1},"content":[{"type":"listitem","attrs":{"listStyle":null},"content":[{"type":"paragraph","attrs":{"indent":0,"number":1,"align":null,"origin":null},"content":[{"type":"link","attrs":{"href":"https:\/\/google.github.io\/styleguide\/","title":null,"type":null},"content":[{"type":"text","text":"谷歌的代碼風格指南"}]},{"type":"text","text":",包括從C++到JavaScript的指南"}]}]},{"type":"listitem","attrs":{"listStyle":null},"content":[{"type":"paragraph","attrs":{"indent":0,"number":2,"align":null,"origin":null},"content":[{"type":"link","attrs":{"href":"https:\/\/github.com\/airbnb\/javascript","title":null,"type":null},"content":[{"type":"text","text":"AirBnB的代碼風格指南"}]},{"type":"text","text":",深入介紹了JavaScript的編碼風格"}]}]},{"type":"listitem","attrs":{"listStyle":null},"content":[{"type":"paragraph","attrs":{"indent":0,"number":3,"align":null,"origin":null},"content":[{"type":"link","attrs":{"href":"https:\/\/styleguide.github.com\/","title":null,"type":null},"content":[{"type":"text","text":"Github的代碼風格指南"}]}]}]},{"type":"listitem","attrs":{"listStyle":null},"content":[{"type":"paragraph","attrs":{"indent":0,"number":4,"align":null,"origin":null},"content":[{"type":"link","attrs":{"href":"https:\/\/www.php-fig.org\/psr\/psr-12\/","title":null,"type":null},"content":[{"type":"text","text":"PHP-FIG的編碼標準"}]},{"type":"text","text":",PHP-FIG有廣泛的編碼風格和"},{"type":"link","attrs":{"href":"https:\/\/www.php-fig.org\/psr\/","title":null,"type":null},"content":[{"type":"text","text":"其他的PHP編碼標準"}]}]}]},{"type":"listitem","attrs":{"listStyle":null},"content":[{"type":"paragraph","attrs":{"indent":0,"number":5,"align":null,"origin":null},"content":[{"type":"link","attrs":{"href":"https:\/\/en.wikipedia.org\/wiki\/Coding_conventions","title":null,"type":null},"content":[{"type":"text","text":"編碼約定"}]},{"type":"text","text":",針對不同編程語言的廣泛風格"}]}]}]},{"type":"paragraph","attrs":{"indent":0,"number":6,"align":null,"origin":null}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"IDE工具能夠幫你保持代碼標準的約定:"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"numberedlist","attrs":{"start":null,"normalizeStart":1},"content":[{"type":"listitem","attrs":{"listStyle":null},"content":[{"type":"paragraph","attrs":{"indent":0,"number":1,"align":null,"origin":null},"content":[{"type":"link","attrs":{"href":"https:\/\/eslint.org\/","title":null,"type":null},"content":[{"type":"text","text":"ESLint"}]},{"type":"text","text":",幫助修復JavaScript中的問題"}]}]},{"type":"listitem","attrs":{"listStyle":null},"content":[{"type":"paragraph","attrs":{"indent":0,"number":2,"align":null,"origin":null},"content":[{"type":"link","attrs":{"href":"https:\/\/validator.w3.org\/","title":null,"type":null},"content":[{"type":"text","text":"W3C Validator"}]},{"type":"text","text":",校驗HTML\/CSS代碼"}]}]},{"type":"listitem","attrs":{"listStyle":null},"content":[{"type":"paragraph","attrs":{"indent":0,"number":3,"align":null,"origin":null},"content":[{"type":"link","attrs":{"href":"https:\/\/prettier.io\/","title":null,"type":null},"content":[{"type":"text","text":"Prettier"}]},{"type":"text","text":",一個帶有自己傾向性的前端代碼格式器"}]}]}]},{"type":"heading","attrs":{"align":null,"level":3},"content":[{"type":"text","text":"牛仔式編程"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"請看一下下面的代碼:"}]},{"type":"codeblock","attrs":{"lang":null},"content":[{"type":"text","text":"\/= $i ?>?en\" style=\"max-width: 100%; max-height: 100%\">
app->client['Domain'] == 'example.com') { ?>
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章