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