|
為了給這十年來一個總結(jié),我想分享一下我在過去的十年當(dāng)中作為一名開發(fā)者的心路歷程。 對于現(xiàn)今的初級開發(fā)者來說,或許他們會在這篇文章里找到一些能夠引起他們共鳴的東西,或者讓他們深受鼓舞的東西。對于現(xiàn)今的高級開發(fā)者來說,或許他們也有一些有趣的故事可以分享,因為他們都是過來人。 我在 19 歲的時候開始應(yīng)聘我的第一份開發(fā)工作,當(dāng)時的那個職位叫作“Student Webmaster”。這個職位很有意思,因為如果你拿到這個職位,就變成了“學(xué)生”和“大師”的結(jié)合體。不過現(xiàn)在的人更希望成為“工程師”,因為這個頭銜聽起來似乎更有發(fā)燒友的味道。我當(dāng)時的工作是負(fù)責(zé) PHP 和 MySQL 方面的開發(fā),維護(hù) Drupal 網(wǎng)站,以及開發(fā)一些內(nèi)部工具。 因為在孩童時代就開始寫代碼,并且我很肯定它們可以作為正式的經(jīng)驗,所以當(dāng)被問及我有幾年 PHP 經(jīng)驗時,我非常自信地回答道:”三到四年“! 我當(dāng)時覺得我對 SQL 應(yīng)該懂得挺多了,因為我都會用外連接了。 在當(dāng)時,三到四年的經(jīng)驗意味著我可以拿到比較可觀的薪水了。 五年之后,我開始了最近的這份工作。即使是到了這個時候,我的代碼都沒有給別人評審過。在部署代碼的時候,我直接從 Git 上拉取代碼,然后通過 SSH 部署到服務(wù)器上。我敢肯定我?guī)缀鯖]有提交過 PR。不過不要誤會,其實我在頭兩份工作中學(xué)到了很多有用的東西,只是我從來沒有真正地和其他開發(fā)者一起開發(fā)過同一個代碼庫。我就是這樣去申請了”高級前端開發(fā)“的職位,并拿到了 offer。 就這樣,我成了一名 24 歲的高級開發(fā)者。 我的意思是,如果我撐不起這個頭銜,他們也不會給我這個職位的,對吧?我很確信的是,我之所以能夠拿到這個職位,是因為我過去的那些令人印象深刻的經(jīng)歷。我感覺自己達(dá)到了職業(yè)生涯的巔峰,我是公司里最年輕的開發(fā)者。
我的職業(yè)生涯的前半部分主要從事學(xué)術(shù)方面的工作。具體地說,有三年半時間花在了一個由公共基金支持的項目上,然后一年半是在大學(xué)里。我可以告訴你:學(xué)術(shù)界的編程與業(yè)界的編程其實完全不一樣。 你的大部分時間并不是在開發(fā)應(yīng)用程序,而是在寫算法或者解析數(shù)據(jù)集。如果湊巧你是在開發(fā)應(yīng)用程序,那么它很可能也只是個公共項目——要么是免費的,要么是開源的。免費的項目意味著你不一定會全力以赴把它做到完美。 畢竟,天下沒有免費的午餐。 后來,我?guī)е芏嗥谕x開了學(xué)術(shù)界。 我期望能夠在業(yè)界看到我想看到的東西,比如自動化部署、PR 和代碼評審,以及高質(zhì)量的代碼!我堅信業(yè)界的每個開發(fā)者都會寫測試代碼。 但是,在我加入第一家初創(chuàng)公司的那一天,居然沒有看到任何測試代碼。前端沒有,后端也沒有,什么測試代碼都沒有。 更糟糕的是,沒有測試代碼也就算了,居然沒有人認(rèn)為缺少測試代碼是個問題!帶著一點點的天真,我就當(dāng)是他們不知道如何為 AngularJS 編寫測試代碼吧。如果我教他們怎么寫測試代碼,或許這個問題就解決了吧。但我錯了!幾年之后,我們在添加自動化測試代碼方面有了長足的進(jìn)步,但與我最初想象的并不一樣! 他們之前不寫測試代碼并不是因為不知道該怎么寫,而是他們體會不到?jīng)]有測試代碼的痛苦,或者不堪忍受維護(hù)遺留測試代碼給他們帶來的痛苦。
這個與上一個話題有點關(guān)系。我們公司沒有人寫單元測試代碼,但是其他公司的人會寫的,對嗎? 我讀過很多博文,在 YouTube 上看過很多大會演講的視頻。好像他們每個人都能做出非常復(fù)雜且質(zhì)量很高的應(yīng)用程序,不僅性能好,還非常有趣。而我呢,能夠趕在截止日期之前把能用的東西拼湊在一起,并讓它們運行起來就算不錯了。 基本上,我對這些公司充滿了崇拜之情,但同時又對自己的公司和項目落于人后而感到失望。
在以前,我對代碼評審的要求是很嚴(yán)格的。 至少,我對代碼風(fēng)格是十分挑剔的。縮進(jìn)、格式化、命名——你最好要做得和我一模一樣。代碼評審不留下任何評論的幾率跟中彩票的幾率一樣低。 想象一下,一個 PR 里有我的 50 多個評論,都是因為缺少分號! 因為我有一雙老鷹似的眼睛,不會漏掉任何一個分號!
在加入第一家公司時,我需要處理大量別人留給我的代碼。我在干第一份工作時有做過一些類似的事情,但后來都沒有真正深入到已有的代碼庫,弄跟無頭蒼蠅一樣到處亂撞。我寧愿重寫所有代碼,也不想一點一點去理清楚老代碼是怎么寫的。 但即使是這樣又能怎樣?一個 Ruby 程序員寫出來的 AngularJS 代碼,或者一個自認(rèn)為自己很厲害的初級程序員寫出來的代碼,別人照樣看不懂。 所以,我開始在所有可能的地方添加注釋,給所有函數(shù)加了注解。 我學(xué)會了所有與 Angular 相關(guān)的 JSDoc 語法。我的代碼行數(shù)因此增加了一倍,因為有太多的注釋。
在很長一段時間里,我認(rèn)為任何“混亂”的代碼都是技術(shù)債務(wù)。技術(shù)債務(wù)這個東西很有意思,如果你讓不同的人例舉技術(shù)債務(wù)的例子,他們會給出不同的答案。 因此,作為一個將“混亂”代碼視為技術(shù)債務(wù)的人,我會立即使用最嚴(yán)格的方式消除這類代碼! 我曾經(jīng)花了一整個周末修復(fù)了 800 個 linting 錯誤(當(dāng)然是在出現(xiàn)自動修復(fù)工具之前)。 可見我是一個多么神經(jīng)質(zhì)的人。
因為從小就寫代碼,編程對我來說就像呼吸一樣。寫代碼就像在寫博客或者郵件,通常比別人更快給出解決方案。 在很長一段時間里,我一直在思考這個問題:這就是成為高級開發(fā)者要做的事情的嗎? 難道不是這樣嗎?因為頭銜是叫“高級開發(fā)者”,又不是叫“高級溝通者”或者“高級項目經(jīng)理”,不是嗎?我不知道要成為高級開發(fā)者,除了編程還需要其他什么技能。
原文鏈接: https:///blog/2019/06/03/absolute-truths-unlearned-as-junior-developer/ 你也「在看」嗎??? |
|
|
來自: taotao_2016 > 《計算機》