本文的目的是從一個(gè)不僅僅坐在椅子上并且完全按照他們所說的方式做某事的人的角度來介紹軟件開發(fā)。
它強(qiáng)調(diào)軟件開發(fā)是一個(gè)非常復(fù)雜的過程,需要遵循許多較小的步驟才能構(gòu)建高質(zhì)量的東西。需求收集,體系結(jié)構(gòu),測試,編寫可維護(hù)代碼,所有這些都匯集在一起,創(chuàng)建了一個(gè)可在整個(gè)生命周期內(nèi)得到支持的產(chǎn)品。
本文討論了這些要點(diǎn),并從最終結(jié)果的角度詳細(xì)說明了它們的重要性。
文章還強(qiáng)調(diào)了我們自己的經(jīng)驗(yàn)和態(tài)度如何對(duì)最終結(jié)果產(chǎn)生重大影響。
首先,我們需要了解我們正在構(gòu)建的內(nèi)容。
在編寫任何代碼之前,我們需要回答一些問題。
我們正在構(gòu)建一個(gè)全新的應(yīng)用程序嗎?
這是重寫嗎?
它是復(fù)雜系統(tǒng)的一部分嗎?
它可以獨(dú)立工作嗎?
有任何依賴嗎?
我們了解我們需要構(gòu)建什么嗎?
我們是否了解如何使用該軟件?
我們知道誰會(huì)使用它嗎?
我們了解這個(gè)軟件的作用嗎?
那段代碼的維護(hù)怎么樣?
正如你所看到的,有很多問題需要直接回答。我們甚至沒有編碼任何東西。所有這些問題都為我們提供了我們正在建設(shè)的背景,條件和限制。它們基本上決定了我們經(jīng)營的區(qū)域。
為什么這些問題很重要?為什么我們關(guān)心這是一個(gè)新的應(yīng)用程序還是重寫?
好吧,如果這個(gè)應(yīng)用程序是重寫,那么我們需要理解為什么我們重寫它。
重寫一些東西很可能是一項(xiàng)昂貴的練習(xí),因此通常有充分的理由。也許它的使用一些舊的技術(shù)無法適應(yīng)更大的系統(tǒng)項(xiàng)目,也許我們需要增加新的功能,也許我們需要使它更容易被它的用戶使用。也許我們需要讓它更容易維護(hù)。
是的,維護(hù)非常重要。
我們可能已經(jīng)編寫了世界上見過的最令人驚奇的軟件,但是如果沒有人理解它是如何編寫的,如果其他開發(fā)人員看到它并且嚇跑了,那么很可能每一個(gè)小修復(fù)或改變都不會(huì)只是很長一段時(shí)間但很可能會(huì)引發(fā)問題。
我們可以做很多事情來涵蓋其中的一些問題,并確保每個(gè)問題都有一個(gè)好的答案通常是一個(gè)很好的起點(diǎn)。作為開發(fā)人員,我們需要做的我們并不總是在維護(hù)代碼。因此,我們可以處理基礎(chǔ):清潔代碼,良好的命名策略,SOLID原則,測試以證明它的工作原理。
如果這些事情得到妥善處理,那么我們已經(jīng)處于一個(gè)好的位置。
軟件架構(gòu)
從一開始就設(shè)計(jì)應(yīng)用程序的體系結(jié)構(gòu)是我們所關(guān)注的。它涵蓋了系統(tǒng)的工作方式,一旦到位,即使不是完全不可能,也很難改變。
這就是我們開始的地方,我們了解一切可能如何工作,事物如何相互作用,子系統(tǒng)如何相互通信。做一些概念驗(yàn)證(POC)的小應(yīng)用程序通常是一個(gè)好主意,看看一切是否真正按照我們認(rèn)為應(yīng)該工作的方式運(yùn)行。
這也是我們可能決定實(shí)際上我們對(duì)某些方面知之甚少的地方,我們要么尋求幫助,要么學(xué)習(xí)如何去做。
知道何時(shí)做這些事情很重要。沒有人知道一切,我們應(yīng)該很高興承認(rèn)我們不知道的事情。
當(dāng)我們知道我們不知道的時(shí)候,那就是我們學(xué)習(xí)的時(shí)候。那時(shí)我們才知道我們需要學(xué)習(xí)什么。作為一名開發(fā)人員,我們必須不斷學(xué)習(xí),有很多東西可以讓人感到畏懼。當(dāng)發(fā)生這種情況時(shí),退一步回到基礎(chǔ)通常是一個(gè)好主意。
有些人決定專注于某些方面,這很好,因?yàn)樗麄儗?duì)某些事物有很好的了解。其他人喜歡更多的通才,所以他們知道很多事情。
這些方法都沒有錯(cuò)。
你知道的越多越好。在做出任何決定時(shí)您將擁有更多選擇,并且更容易解釋您為什么首先做出這些決定。
還記得我們?nèi)绾握f軟件開發(fā)是一項(xiàng)非常社交活動(dòng)嗎?它是,因?yàn)槟阈枰c他人互動(dòng),你需要解釋你的選擇,闡明為什么某些事情應(yīng)該以某種方式完成。這完全取決于溝通,所有這一切都是為了接受建議并能夠發(fā)現(xiàn)一個(gè)好主意,即使它不是你的。
我想這會(huì)把我們推向一個(gè)非常明顯的方向。了解軟件開發(fā)中的社交方面,并將其用于您正在構(gòu)建的任何內(nèi)容的優(yōu)勢。如果你從等式中移開并看到更大的圖景,那么很明顯,目標(biāo)是提供一些好的東西。你如何達(dá)成某些決定將不再那么重要。重要的是這些決定的結(jié)果和結(jié)果。
您當(dāng)然可以說架構(gòu)并不是那么重要,它將由您正在使用的框架來處理。例如,它可能類似于MVC。
這不是我所說的。
框架將為您提供一個(gè)起點(diǎn),它將通過提供一些方法為您提供幫助。它通常非常注重特定類型的活動(dòng)。這只是你正在建設(shè)的一小部分,所以從一開始就理解這一點(diǎn)很好。
但是,框架不會(huì)包含與其他應(yīng)用程序的依賴關(guān)系和交互。您甚至可以使用多個(gè)框架來構(gòu)建某些東西。也許您將實(shí)體框架添加到組合中,也許您也可以添加其他框架?,F(xiàn)在你已經(jīng)有了很多框架,你需要讓它們很好地一起玩。
系統(tǒng)的體系結(jié)構(gòu)與這些事物分離。如果你以某種方式想象事物,它會(huì)有所幫助。即使在白板上畫畫也會(huì)創(chuàng)造奇跡,因?yàn)樗梢詭椭憧吹讲罹唷?br/>態(tài)度
是指解決方案,而不是指問題。
軟件開發(fā)是一項(xiàng)社交活動(dòng),您將與他人進(jìn)行大量互動(dòng)。讓你的自己掌控并處理大量的問題是很容易。因?yàn)槟悴槐叵騽e人解釋,你為什么這么做,但這通常會(huì)導(dǎo)致混亂。這種態(tài)度對(duì)項(xiàng)目不利。
開發(fā)人員之間會(huì)缺乏信任,然后他們就會(huì)只做自己的事情,如果你不讓他們了解情況(他們?yōu)槭裁匆@樣做?)。在你知道它之前,整個(gè)事情慢慢走向失敗,因?yàn)槊總€(gè)人都以自己的方式做事而不考慮項(xiàng)目的好處。
這就是工匠心態(tài)最關(guān)鍵的地方。項(xiàng)目是第一位的。這意味著您需要相應(yīng)地考慮更多的事情,代碼的優(yōu)化,圖片的加載優(yōu)化等
快速修復(fù)與正確的修復(fù)
有時(shí)人們能力比較強(qiáng),能快速的修復(fù)bug,完成工作。通常這樣做是為了挑選出具有負(fù)面影響的小東西,通常是在系統(tǒng)投入生產(chǎn)時(shí)。
在更大的項(xiàng)目中發(fā)生的事情是,快速修復(fù)了bug,但是我們沒有深究問題造成的根本原因。我們只是用了臨時(shí)解決的方式,這樣造成了項(xiàng)目后期的維護(hù)困難
作為工匠,我們需要了解這些事情。我們不僅僅是一臺(tái)機(jī)器,可以整天拿著比薩餅和可樂來制作代碼。
這是一項(xiàng)高度邏輯性和創(chuàng)造性的活動(dòng),其中經(jīng)驗(yàn)很重要,您可以在其中發(fā)現(xiàn)某些事情的發(fā)展方向。
是的,有時(shí)您可能需要應(yīng)用快速修復(fù)來阻止虧損,如果系統(tǒng)由于某個(gè)問題每小時(shí)損失數(shù)百萬,那么一定要盡快修復(fù)它。一旦你完成了這個(gè),確保有適當(dāng)?shù)男迯?fù),不要讓這些快速修復(fù)最終導(dǎo)致項(xiàng)目的崩潰。
這歸結(jié)為是花時(shí)間了解問題并提出一個(gè)確保問題不會(huì)再發(fā)生的修復(fù)。這當(dāng)然是一個(gè)更大的討論的一部分,因?yàn)槲覀兺ǔS薪刂谷掌?,因?yàn)槲覀冎挥羞@點(diǎn)時(shí)間可用。然而,能夠闡明和解釋問題,忽視問題的解決方案和危險(xiǎn)是至關(guān)重要的。我們不只是為了編碼,我們?cè)谀抢锓窒砦覀兊慕?jīng)驗(yàn)并防止這些事情發(fā)生。
在某種程度上,態(tài)度是一個(gè)有趣的。
這是因?yàn)槿绻惚灰蝗河蓄愃品绞娇创屠斫馐挛锏娜怂鼑?,這會(huì)更好。但即使你不在這樣的地方,也許你應(yīng)該說明為什么這種態(tài)度有效并且有助于構(gòu)建更好的軟件,也許你可以引領(lǐng)改變的方式。
你想要的最后一件事就是妥協(xié)并接受平庸,因?yàn)楫a(chǎn)品最終會(huì)成為平庸!
了解要求并填補(bǔ)空白
通常,我們想要的實(shí)際要求,是很難輕易大成的
我們舉一個(gè)簡單的例子。您的一個(gè)要求是使用用戶名和密碼構(gòu)建登錄頁面。這有多難?包含兩個(gè)字段和一個(gè)按鈕的頁面。
好吧,走著瞧。
用戶名是電子郵件地址,電話號(hào)碼還是別的?
當(dāng)您按下“登錄”按鈕但未填寫用戶名時(shí)會(huì)發(fā)生什么?
如果密碼丟失怎么辦?
你在哪里顯示錯(cuò)誤消息?
用什么顏色顯示錯(cuò)誤消息?
是否應(yīng)該有注冊(cè)頁面的鏈接?
忘記密碼鏈接怎么樣?
忘記用戶名怎么辦?
你如何與任何人聯(lián)系以恢復(fù)它?
你如何確保不會(huì)成為SQL注入攻擊的受害者?
如果用戶非??焖俚攸c(diǎn)擊“登錄”按鈕50次會(huì)發(fā)生什么?
問題清單越來越大。這只是一個(gè)登錄頁面,想象一下構(gòu)建比這更復(fù)雜的問題時(shí)的問題數(shù)量。
這就是我們通常所做的事情,我們會(huì)查看一項(xiàng)工作并開始提出問題以確保我們構(gòu)建正確的事物。我們想到任何可能出錯(cuò)的事情,我們借鑒過去的經(jīng)驗(yàn)。一旦我們將系統(tǒng)置于實(shí)際狀態(tài),一旦我們進(jìn)行安全審核,這有助于澄清在構(gòu)建任何內(nèi)容時(shí)我們應(yīng)該問什么樣的問題。經(jīng)驗(yàn)真的很重要!
不要附加代碼
這是一個(gè)有趣的。很容易接受我們的代碼,甚至對(duì)我們做出的選擇采取保護(hù)。其他人不可能理解我們正在做的事情的美麗,對(duì)嗎?
嗯,這就是事情。在現(xiàn)實(shí)世界中,沒有人會(huì)關(guān)心。有一個(gè)簡單的事實(shí),代碼需要執(zhí)行一個(gè)函數(shù),就是這樣。要么它做了,要么沒做。
由于沒有過于依戀,我們?cè)试S自己看到缺陷和缺點(diǎn)。
它允許我們進(jìn)行更改而不會(huì)感到遺憾。它讓自我離開了門,然后我們可以專注于重要的事情,這是商業(yè)價(jià)值。這在我看來非常重要,代碼并不存在于并行世界中,它只需要執(zhí)行一個(gè)功能并提供價(jià)值,也許可以節(jié)省一些人的時(shí)間,也許它比以往任何時(shí)候都更快,比以往更快??偸怯幸粋€(gè)原因,為什么代碼存在,如果原因消失,我們可以簡單地刪除它,沒有任何第二個(gè)想法。
首先關(guān)注商業(yè)價(jià)值!
清潔代碼
我們已經(jīng)將編程視為社交活動(dòng)。有許多重要的事情,能夠支持和維護(hù)代碼庫,就在最頂層。無論我們是大團(tuán)隊(duì)還是單人團(tuán)隊(duì)的一員,我們?nèi)匀恍枰伎籍?dāng)我們編寫的代碼投入生產(chǎn)時(shí)會(huì)發(fā)生什么。
我們能在幾個(gè)月或幾年內(nèi)看一下它還能理解它嗎?
其他人是否能夠接受并維護(hù)它,修復(fù)錯(cuò)誤,甚至可能添加新功能?
我們都害怕遺留代碼,但如果我們停下來思考一下,我們很快就會(huì)發(fā)現(xiàn),我們編寫的每一段代碼都會(huì)在投入生產(chǎn)的那一刻成為遺留代碼。我們認(rèn)為這個(gè)閃亮的新框架將解決我們所有的問題,給它六個(gè)月的時(shí)間,這將是舊的新聞,而其他一些東西將成為本月的風(fēng)格。
考慮到所有這些因素,更多地關(guān)注我們編寫代碼的方式是有意義的。
那么干凈的代碼到底是什么?好吧,為了理解一些代碼,我們需要能夠像讀一篇文章一樣并理解它。這意味著我們的變量需要具有適當(dāng)?shù)拿Q。
例如,而不是
_uRep =whatever
我們可以使用類似的東西:
_userRepository =whatever
如果我們查看一行代碼并且無法快速掌握它的作用,那么就該改變它了。讓我們不僅想到這個(gè)時(shí)刻,當(dāng)我們頭腦中的一切都清晰時(shí),讓我們想想在幾個(gè)月內(nèi)當(dāng)所有背景消失并且我們從頭開始時(shí)會(huì)發(fā)生什么。
因此,良好的變量名稱和良好的方法名稱可以幫助理解代碼,并在時(shí)間到來時(shí)更容易維護(hù)它。
另一個(gè)好方法是避免使用智能和復(fù)雜的一個(gè)襯墊。我們都知道它們是什么 - 那些美麗的結(jié)構(gòu)在很多方面做了很多。分解,讓它看起來簡單,易于閱讀和理解。
希望到現(xiàn)在為止,出現(xiàn)了一個(gè)明確的模式; 保持簡單從未如此重要。
開始應(yīng)用一些SOLID原則。我們不需要盲目地應(yīng)用所有東西,只需要有意義的東西。例如,單一責(zé)任原則是一個(gè)很好的開始。這意味著我們編寫有一個(gè)目的的類和一個(gè)做一件事的方法。
這允許我們編寫可測試的代碼,這對(duì)于將來的維護(hù)非常重要。
我認(rèn)為現(xiàn)在是時(shí)候停止證明為什么測試代碼很重要了。這是常態(tài),而不是例外。大部分時(shí)間我們都沒有這樣做,因?yàn)槲覀冇薪刂谷掌冢瑳]有足夠的時(shí)間來實(shí)際編寫測試。這將我們推向下一部分。
嘗試成為一名工匠心態(tài)的程序猿
我們軟件開發(fā)人員需要開發(fā)性的讓別人測試我們的代碼。我們不應(yīng)該證明為什么我們會(huì)花時(shí)間為我們的功能添加自動(dòng)化測試,我們就這么做。當(dāng)然,我們可以解釋這實(shí)現(xiàn)了什么,但不能作為理由,我們測試的是因?yàn)檫@有助于產(chǎn)品,因?yàn)槲覀兪枪そ?,因?yàn)槲覀冎牢覀冊(cè)谧鍪裁?。?dāng)有人要求我們估算一件作品時(shí),我們會(huì)考慮測試。
測試是我們工作的一部分。
沒有人告訴水管工如何做他的工作,他們使用它的經(jīng)驗(yàn)來處理事情,我們也是如此。所以,讓我們停止證明我們知道需要做什么,讓我們?nèi)プ?。因此,產(chǎn)品會(huì)更好。
這讓我們回到了行業(yè)的切入點(diǎn)。正如我所說,讓我們成為解決方案的一部分而不是問題。我們知道偷工減料并沒有幫助,我們知道不斷引入技術(shù)債務(wù)最終會(huì)帶來巨大的成本,因此盡可能做到最好盡量減少它。
這是您正在進(jìn)行的當(dāng)前項(xiàng)目的快速測試??纯从卸嗌偌夹g(shù)使用,有多少框架,有多少庫。
可能會(huì)出現(xiàn)一些令人討厭的驚喜。
有多少人在那里,因?yàn)橛腥讼胍褂锰囟ǖ臇|西?
有多少個(gè)庫是因?yàn)橛腥诵枰鲆患?,在一個(gè)地方而不是寫一個(gè)小方法,他們引入了一個(gè)全新的庫來完成這項(xiàng)工作?
如果我們將焦點(diǎn)從我們自己轉(zhuǎn)移到項(xiàng)目本身,這一切都可以解決。只有在有明確,持久的利益的情況下才能添加新的東西。
測試
我們已經(jīng)知道編寫可測試代碼然后添加測試以實(shí)際證明它按預(yù)期工作的好處。
想象一下,這些單元測試運(yùn)行得非???,因此可以確定系統(tǒng)以可預(yù)測的方式運(yùn)行。想象一下能夠重構(gòu)而不必?fù)?dān)心你可能會(huì)破壞某些東西。想象一下,獲取錯(cuò)誤報(bào)告,編寫一個(gè)突出顯示錯(cuò)誤的失敗測試,然后修復(fù)代碼以使測試通過。想象一下,還有一個(gè)測試可以保證你剛才修復(fù)的特定bug不再顯示它的丑陋頭腦。
這些都是好處,但等等,還有更多!
想象一下,每次發(fā)生變化時(shí)都不必繼續(xù)測試整個(gè)系統(tǒng),想象維護(hù)階段會(huì)更短,更便宜,因?yàn)槟辉傩枰@么多的手動(dòng)測試。我們需要準(zhǔn)備好闡明為什么這種工作方式更好,即使是在我們之間,甚至對(duì)于可能不會(huì)以相同方式編碼的其他開發(fā)人員。這有助于將每個(gè)人提升到更高的水平,以現(xiàn)代的方式工作,享受改變的工作流程,而不是在發(fā)布即將到來時(shí)無數(shù)的額外時(shí)間跑來跑去。
代碼安全性
我們現(xiàn)在正在進(jìn)入那個(gè)沒有人喜歡談?wù)摰念I(lǐng)域,這就是安全問題。由于某些原因,這似乎是我們最終總是在考慮的事情。
我們?nèi)绾螛?gòu)建安全代碼?這不是那么微不足道,但它需要開發(fā)人員自己思考,因?yàn)榇蠖鄶?shù)時(shí)候這個(gè)領(lǐng)域不會(huì)被需求所覆蓋。因此,我們需要確保我們剛剛編寫的漂亮登錄頁面確實(shí)是安全的。
我們是那些看到這樣的網(wǎng)址的人:www.baidu.com / user-details / 1。并且自己想一想,“嗯,我想知道如果我在URL中用1替換1并且輸入”,會(huì)發(fā)生什么?“ 我們確保不暴露敏感數(shù)據(jù)。我們確保構(gòu)建一個(gè)只能由目標(biāo)受眾訪問的API,而不是其他任何人。
這是一個(gè)巨大的主題,值得一篇文章?,F(xiàn)在,因?yàn)槲覀冇幸粋€(gè)工匠的態(tài)度,我們可以查看我們的登錄頁面并開始思考,我們將如何破解它?也許我們?nèi)ラ喿x一些關(guān)于道德黑客攻擊,獲得一些想法,看看世界的另一面如何運(yùn)作并試圖破解我們自己的代碼。它不會(huì)是好的,它不會(huì)是100%,但它是一個(gè)開始。
專注于改變的事物
我們都希望研究最新和最偉大的事物,但這并不總是可行的。
無論是最新的框架,最新版本的東西,也許是一個(gè)新的數(shù)據(jù)庫系統(tǒng),也許是一種新的API類型,無論它是什么,我們都想要它!這不一定是壞事,最好跟上最新的發(fā)展。然而,也意識(shí)到需要保持相對(duì)的平衡。
通過快速地從一件事跳到另一件事,我們可能無法深入學(xué)習(xí)任何東西,我們最終只能獲得表面知識(shí)。這絕對(duì)不是一件好事!
有很多產(chǎn)品用語言和版本編寫,這些產(chǎn)品已經(jīng)有好幾年了。有人仍然需要維護(hù)甚至升級(jí)它們。企業(yè)很少會(huì)接受完全重寫的應(yīng)用程序,它可以很好地完成工作。這是預(yù)期的,我們需要了解這一點(diǎn)。是的,即使在較舊的產(chǎn)品中也總會(huì)有一些我們可以改進(jìn)的東西,如果我們能夠提供足夠的理由,那么某些變化就會(huì)發(fā)生。
這完全取決于我們向客戶解釋變更的價(jià)值。它不是用技術(shù)語言完成的,非技術(shù)人員必須理解它。這完全取決于溝通技巧和商業(yè)價(jià)值。
結(jié)論
我們需要不斷學(xué)習(xí),不斷充實(shí)自己。如果我們?cè)谝粋€(gè)由十個(gè)開發(fā)人員組成的團(tuán)隊(duì)中,我們幫助他們每人提高10%,那么對(duì)每個(gè)人來說,總計(jì)100%。
我們自己的價(jià)值并不是我們帶到桌面上的唯一價(jià)值,我們可以為別人做些什么甚至更多。
我們需要更加相信我們的技能并負(fù)責(zé),確保正確的事情完成,確保仍然存在平衡,我們可以構(gòu)建能夠經(jīng)得起時(shí)間考驗(yàn)的項(xiàng)目
當(dāng)前題目:軟件開發(fā)中,我們應(yīng)該保持的工匠心態(tài)
當(dāng)前鏈接:http://www.rwnh.cn/news34/113584.html
網(wǎng)站建設(shè)、網(wǎng)絡(luò)推廣公司-創(chuàng)新互聯(lián),是專注品牌與效果的網(wǎng)站制作,網(wǎng)絡(luò)營銷seo公司;服務(wù)項(xiàng)目有軟件開發(fā)等
廣告
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場,如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來源:
創(chuàng)新互聯(lián)