“時隔 10 年,重新開始寫代碼的我要崩潰了!”

用“日新月異”一詞來形容 IT 行業(yè)的變化,最為恰當(dāng)不過了。本文作者于 20 年前是一位奮斗在一線的開發(fā)人員,10 年前晉升為管理層,而近日,他因工作需求,再次開啟了自己的 Coding 生涯,而這一次,他卻有了不一樣的體驗(yàn)。
以下為譯文:
20 年前我是一位前線編碼人員,10 年前我轉(zhuǎn)向開發(fā)管理,現(xiàn)在我又成為一名需要編碼操作的開發(fā)顧問。在開始這份工作之際,我對編程行業(yè)的一些變化感到驚喜莫名,同時也對其他變化感到驚訝萬分。
本文我將解釋一下是什么幾乎要將我壓跨。
Unix 又回到了開發(fā)者的身邊
在整個 80 年代和 90 年代初期,許多專業(yè)軟件都是在昂貴的 Unix 工作站(比如 Sun Sparc 或 NeXT 工作站)上開發(fā)的。到了 90 年代,WinTel 后來居上,幾乎每個人都在 Windows 上使用微軟的 Visual Studio 之類的大廠商提供的開發(fā)工具或者 Eclipse 之類的開源開發(fā)工具進(jìn)行編程工作,而 Linux 那時只是在桌面電腦上有少許愛好者。
2001 年,我在一家初創(chuàng)公司工作,當(dāng)時只有一位開發(fā)人員使用 Linux,在沒有任何源代碼管理(SCM)工具和 Outlook 電子郵件的情況下,他工作得非常艱難。他經(jīng)常給我們發(fā)求助郵件,讓我們幫他提交代碼。我記得那時我使用的是XEmacs——是的,那是個經(jīng)典軟件。
快進(jìn)到現(xiàn)在。Unix 已經(jīng)成為一個非常流行的開發(fā)平臺,特別是在 Mac 電腦上(因?yàn)樗?Unix 內(nèi)核),同時 Linux 在 Windows 上也有廣泛運(yùn)行(因?yàn)?WSL)。這是我很容易回到的一個領(lǐng)域。有趣的是,我的一些年輕同事幾乎不知道如何使用 Windows,相反,他們非常擅長 Linux/Unix!
版本經(jīng)理不再需要
在過去,代碼分支、合并和解決沖突是一項(xiàng)可怕的工作,有時需要版本經(jīng)理的專業(yè)技能。當(dāng)軟件配置管理(SCM)工具的龐然大物 ClearCase 流行時,需要有一個龐大的團(tuán)隊(duì)來維護(hù)和管理代碼分支、代碼合并和代碼發(fā)布(至少基于我 2002 年在 HP 的經(jīng)驗(yàn)是這樣)。
自我管理的拉請求(PR)的概念實(shí)際上是一個非常新的概念,顯然來自基于 Linux 平臺的開發(fā)和分布式 SCM(比如BitKeeper和Git)的新浪潮。能夠請求在工作流中進(jìn)行合并是像 ClearCase、CVS、SVN 和 PerForce 這樣的老系統(tǒng)所不具備的。這個工作可以由代碼庫所有人或版本經(jīng)理來做,也可以由每個開發(fā)人員自己執(zhí)行。這確實(shí)簡化了流程,讓用戶能夠獨(dú)立協(xié)作。
QA 測試團(tuán)隊(duì)在哪里?(單元測試/持續(xù)集成)
我第一次了解單元測試和持續(xù)集成(CI)是通過 Kent Beck,他是 Agile Manifesto( 敏捷宣言)的奠基者之一,也是極限編程的發(fā)明者。20 年前這些都是革命性的,但是需要一些時間才能在開發(fā)工作流程中達(dá)到當(dāng)前的標(biāo)準(zhǔn)化。
不幸的是,我發(fā)現(xiàn)持續(xù)集成在敏捷(Agile)和 Scrum 中沒有得到更多的強(qiáng)調(diào),但我很高興看到它在現(xiàn)在得到了很好的采用。
我參加過一個軟件開發(fā)會議,還記得在一個討論單元測試的小組會上,看到 Java Collection的 作者 Josh Bloch 站在臺上說:“感謝(Agile 或 JUnit)讓測試變得富有魅力。”
這是事實(shí)。在過去,編寫測試程序是一件非常枯燥和不受歡迎的工作,所以公司雇傭 QA 測試工程師致力于為你找出所有的錯誤!哇,多么輕松的生活…
單元測試和持續(xù)集成幾乎消除了對黑盒 QA 測試人員的需求,因?yàn)殚_發(fā)人員現(xiàn)在擁有測試程序編寫和持續(xù)集成的基礎(chǔ)設(shè)施,并且可以運(yùn)行測試并獲取測試報告。它確實(shí)使軟件變得更可靠,開發(fā)周期更快。它還能夠促使程序員更全面地思考問題,并且以更友好的方式編寫代碼。
開發(fā)->測試->產(chǎn)品環(huán)境問題消失?(Docker)
容器,即 Docker,在你將代碼通過 QA 發(fā)布到生產(chǎn)環(huán)境中時,它確實(shí)簡化了打包過程并減少了與環(huán)境相關(guān)的問題(所付出的代價是讓一個好的 DevOps 工程師建立一個 Docker 生態(tài)系統(tǒng))。
在過去,你會在一個與部署系統(tǒng)完全不同的系統(tǒng)中進(jìn)行開發(fā)(比如 Windows 上編寫代碼,然后部署到Unix),這必然會導(dǎo)致 bug,并導(dǎo)致在每個測試和發(fā)布周期中需要進(jìn)行更多的工作。
此外,在過去,開發(fā)、測試或 DevOps 工程師們會依據(jù) SCM 標(biāo)簽來從相應(yīng)的分支中提取代碼,并找出如何編譯、測試和遷移它的方法。通常他們會發(fā)現(xiàn)一大堆硬編碼的路徑和變量,或者丟失的庫和文件,這些都需要重新設(shè)計(jì)或修改編碼/配置文件才能讓其正常工作。
Docker 通過再次授權(quán)程序員自己構(gòu)建和測試 CI 和 CD,從而真正簡化了流程,并保證了持續(xù)集成和持續(xù)部署的實(shí)現(xiàn)。
開源軟件(OSS)選項(xiàng)太多?
在當(dāng)前這個開源軟件風(fēng)行的世界里,人們擁有太多的選擇。當(dāng)我設(shè)置 Jenkins,并希望將其集成到 BitBucket 時,我用“bitbucket”關(guān)鍵字作插件搜索,得到了 400 多條結(jié)果(多數(shù)是開源軟件)。

圖片來源: Atlassian Search
這樣帶給我兩個問題:
可供挑選的選項(xiàng)太多了。
這么多選項(xiàng)中,很多會失去支持而無法存活下去。
好的方面是:你幾乎不需要構(gòu)建基本的基礎(chǔ)設(shè)施和工具,你只需要找到一個合適的選項(xiàng)并重用它即可。
20 年前,構(gòu)建基本庫和數(shù)據(jù)結(jié)構(gòu)是一種“樂趣”。如今,每種編程語言都有了現(xiàn)成的框架和庫,99% 的開發(fā)人員不再需要編寫 b 樹、hashmap,甚至 OAUTH 連接器。
敏捷(Agile)和 Scrum 已經(jīng)占據(jù)主導(dǎo)
盡管 Agile 在20年前就已經(jīng)存在(敏捷宣言可以追溯到 2001 年),但它的廣泛采用卻是最近的事情。甚至在軟件行業(yè)之外有時也會出現(xiàn)一些變種。敏捷,已經(jīng)成為 CxO 們的一個時髦術(shù)語(“你的業(yè)務(wù)必須敏捷才能生存”)。
我記得以前的軟件發(fā)布周期相當(dāng)?shù)亻L(在一家初創(chuàng)公司通常要長達(dá)三個月)。在參加軟件規(guī)格說明會議并且徹底了解需求之后,開發(fā)人員可以到他們的辦公桌上玩幾個星期的游戲,而不必發(fā)布他們所負(fù)責(zé)部分的任何更新。現(xiàn)在情況變了,你有一個每日進(jìn)度例會和每兩周的沖刺計(jì)劃,所以你不能有絲毫的懈怠!
隨著敏捷的發(fā)展,BA(需求分析師)的作用也在削弱,因?yàn)殚_發(fā)人員現(xiàn)在直接面對用戶或產(chǎn)品經(jīng)理。你不能再躲著不說話了。因此,開發(fā)人員的溝通技巧比過去重要得多。
Tom Smykowski:
好吧,聽著,我已經(jīng)告訴過你了:我和該死的客戶打交道,這樣工程師們就不用這么做了。我有交際能力,善于與人打交道。你不明白嗎?你們這些人到底怎么了?
引自Tom - 需求分析師/需求分析經(jīng)理(資料來源:Office Space)
敏捷使開發(fā)速度加快了很多。它不僅僅是 Scrum 的例行程序和每日進(jìn)度更新例會。敏捷工具包使得開發(fā)效率更高,JIRA 看板、拉請求(PR)和CI/CD都讓你走得更快。雖然日常工作更加有點(diǎn)忙,但能更快更全面地完成這些工作也是非常令人欣慰的。
結(jié)束語
如果你考慮進(jìn)行一個類似的旅程,那么開始吧,祝你好運(yùn)!我享受我的技能更新的快樂(盡管它幾乎把我壓垮了)。軟件工程的基本原理是一樣的,所以我認(rèn)為我可以生存下來,但是工具已經(jīng)發(fā)生了巨大的變化,這極大地提高了生產(chǎn)力。
在本文中你可能感受到的一個印象是,今天的開發(fā)人員比 20 年前有更廣泛的任務(wù)集。他們編寫代碼、管理 SCM、與用戶溝通、測試自己的代碼、構(gòu)建和部署容器等等。這可能令人難以理解,但是至少他們不再需要編寫鏈表了。
參考資料
1. 極限開發(fā)(XP)
https://en.wikipedia.org/wiki/Extreme_programming
2. 敏捷開發(fā)(Agile)
https://www.mckinsey.com/business-functions/organization/our-insights/the-journey-to-an-agile-organization
原文鏈接;https://betterprogramming.pub/how-going-back-to-coding-after-10-years-almost-crushed-me-88c85ceb5376
2021-05-08
2021-05-07
2021-05-06
