編程很容易,軟件開發(fā)很難,維護(hù)代碼是最難的(軟件編程難不難)
大約2年前,我開始了我的企業(yè)家之旅,并在我的創(chuàng)業(yè)公司擔(dān)任"技術(shù)主管"的角色。這意味著我必須開始學(xué)習(xí)一些較新的技術(shù),如React和NextJs。特別是如果我希望提供人們愿意支付的任何類型的軟件。
"那肯定不會太難?"—— 這是非常困難的,就像在地獄的第二層航行一樣。
在此之前,我積累的3年以上的Python經(jīng)驗(yàn)是沒有用的。
編程很容易,但軟件開發(fā)很難。
軟件開發(fā)很難,因?yàn)榇蠖鄶?shù)人通常傾向于跳過基本步驟,即學(xué)習(xí)創(chuàng)建程序,做其他人想要支付的事情,以及隨之而來的所有困難。
我的競爭性編碼的背景(主要是Python)沒有教會我任何關(guān)于開發(fā)具有正確用戶體驗(yàn)和設(shè)計選擇的軟件產(chǎn)品,最多是為集成幾個復(fù)雜的API或?yàn)榛诮巧氖跈?quán)邏輯編寫代碼。
當(dāng)我開始開發(fā)我們的第一個軟件產(chǎn)品(廣告分析平臺)時,我感覺自己就像一個期望在學(xué)習(xí)字母表后立即寫一篇文章的孩子。
此外,由于我已經(jīng)承諾了最后期限,因此我沒有奢侈地從我的業(yè)務(wù)中休息幾個月來掌握這些技術(shù),因此我只剩下一個選擇 – 在旅途中學(xué)習(xí)和實(shí)施所有這些技術(shù)。我花了大約4個月的時間才交付這個產(chǎn)品。在那段時間里,我了解到軟件開發(fā)是一個非常復(fù)雜的過程,不能僅僅通過遵循教程來學(xué)習(xí)。為了成為一名成功的軟件開發(fā)人員,我不僅需要編寫代碼,還需要了解代碼的工作原理以及與系統(tǒng)其余部分的交互方式。雖然這聽起來很容易,但我可以向你保證,YouTube上只有少數(shù)視頻可以教你這項(xiàng)技能。因?yàn)榱私獠煌夹g(shù)/框架如何協(xié)同工作的細(xì)微差別是觀看教程視頻無法學(xué)習(xí)的 – 這是必須通過"做"來學(xué)習(xí)的東西。這需要我熟悉新的概念和術(shù)語/框架。我花了更多的時間閱讀文檔,或者觀看視頻解釋,以試圖填補(bǔ)我的知識空白,而不是編寫實(shí)際的代碼行!
在花了所有時間學(xué)習(xí)之后,我意識到大多數(shù)教程在解釋軟件開發(fā)的實(shí)際過程方面都很糟糕。
大多數(shù)教程和課程都通過只教我基礎(chǔ)內(nèi)容來抽象軟件開發(fā)的復(fù)雜性。
他們讓學(xué)習(xí)和掌握一門語言或框架看起來非常容易——以至于這讓我想知道大驚小怪的是什么。教程、博客、課程中顯示的內(nèi)容與企業(yè)級應(yīng)用程序中實(shí)際使用的內(nèi)容之間存在巨大的脫節(jié)。而且,在我看來,這似乎是人們需要數(shù)月甚至數(shù)年才能達(dá)到軟件開發(fā)周期結(jié)束的最大原因。
例如,大多數(shù) react 教程都教你如何從外部 REST API 讀取數(shù)據(jù),但很少有視頻討論使用 React Query 的重要性 — React Query 是一個鉤子庫,消除了重復(fù)的代碼,并介紹了生產(chǎn)就緒的數(shù)據(jù)提取和緩存實(shí)踐,可以開箱即用。
幾乎每個現(xiàn)實(shí)世界的應(yīng)用程序都需要你構(gòu)建數(shù)據(jù)獲取的邏輯,在大多數(shù)情況下,需要使用類似 React Query 的東西。
當(dāng)我意識到這一點(diǎn)時,我不得不回過頭來在一個應(yīng)用程序內(nèi)重寫近2000行代碼,否則這些代碼就可以在一個月內(nèi)啟動 – 要么是這樣,要么我必須花費(fèi)數(shù)周的時間在交付后調(diào)試和優(yōu)化我的應(yīng)用程序/服務(wù)器,這將非常耗時。
軟件開發(fā)的過程是十幾個重要決策的組合,在編寫哪怕是一行代碼之前,人們都需要做出這些決策。你必須考慮你的架構(gòu),數(shù)據(jù)庫設(shè)計,技術(shù)堆棧,云托管,緩存,甚至這些都只是觸及表面。
軟件開發(fā)是一個復(fù)雜的過程,需要您了解各種特定領(lǐng)域的概念,規(guī)范,測試,擴(kuò)展,設(shè)置時間表,設(shè)計架構(gòu),最重要的是選擇您的"技術(shù)堆棧",如云服務(wù)提供商。由于我之前沒有開發(fā)軟件,考慮架構(gòu)或選擇正確的技術(shù)堆棧的經(jīng)驗(yàn);我的旅程有點(diǎn)坎坷。
經(jīng)過大約4個月的來回奔波,編寫了近2萬行代碼,軟件開發(fā)終于完成了……雖然,旅程還遠(yuǎn)未結(jié)束。
我現(xiàn)在面臨著一系列新的挑戰(zhàn)——維護(hù)。
維護(hù)軟件是一個世界上有經(jīng)驗(yàn)的開發(fā)人員很少關(guān)注的話題。如果您曾經(jīng)嘗試更新或修復(fù)其他人編寫的一段代碼,您就會知道它會變得多么令人沮喪。
維護(hù)代碼可能很困難的原因有很多,但最常見的一些原因是:
- 代碼難以理解或?qū)懙煤懿睢?/span>
- 代碼組織不善,很難找到所需的代碼。
- 代碼被修改了很多次,以至于很難找到原始源代碼。
- 原作者或擁有代碼的公司不再支持該代碼。
代碼維護(hù)的復(fù)雜性是軟件項(xiàng)目失敗率高的主要原因之一。
為了保持軟件系統(tǒng)的平穩(wěn)運(yùn)行,必須不斷更新和調(diào)整代碼,以應(yīng)對業(yè)務(wù)環(huán)境的變化,新的要求和技術(shù)進(jìn)步。這是一項(xiàng)艱巨的任務(wù),通常很難找到時間和資源來正確地完成它。因此,許多軟件系統(tǒng)陷入了難以更新和維護(hù)的遺留代碼的困境。最終,這將導(dǎo)致性能問題和安全漏洞。
在開發(fā)過程中,我們很早就解決了這些問題,將精力集中在模塊中編寫代碼(將其分解為更小的、可重用的組件),并重用它們以減少每次業(yè)務(wù)環(huán)境或系統(tǒng)要求發(fā)生變化時需要重寫或更新的代碼量。
提前規(guī)劃我們的模塊有助于我們解決與代碼維護(hù)相關(guān)的問題,并使該過程更輕松,更高效。它為我們節(jié)省了大量的時間和金錢,也有助于確保我們的代碼更加可靠和安全。
總之,軟件開發(fā)和維護(hù)是嚴(yán)重誤解的話題。沒有經(jīng)驗(yàn)的開發(fā)人員無法理解它們的復(fù)雜性,因?yàn)樗鼈兺ǔH狈λ璧膶I(yè)知識深度。一旦你深入研究了軟件開發(fā)和交付的深處,你就會學(xué)到它。