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