點擊關(guān)注公眾號,Java干貨及時送達
我當程序員已經(jīng)5年了,不過這也沒什么大不了,因為你們中很多人的工作經(jīng)驗可能是我的3倍以上,但我一直認為自己是高級開發(fā)人員。
因機緣巧合,我成為了一家創(chuàng)業(yè)公司的首席技術(shù)官(CTO)。在新崗位工作一段時間后,我才發(fā)現(xiàn)自己算不上高級開發(fā)。這并不是說我的編程技術(shù)差,而是想起以往,我在工作中常犯的 4 個錯誤。
Step 1
用戶都是傻瓜
沒錯,用戶使用應用的方式往往出人意料,而且很詭異。畢竟,用戶不是IT專家。醫(yī)生從來都不會指望病人能夠明白低密度脂蛋白和高密度脂蛋白之間的區(qū)別。那么,我們又憑什么要求用戶了解他們應該使用哪種瀏覽器呢?雖然對你和我來說這個問題太顯而易見了,但是在我媽看來,Google就等同于互聯(lián)網(wǎng),她說她沒有使用任何瀏覽器,因為她使用的是Google。有時,為了讓用戶滿意,我不得不重寫部分框架,為的只是修改其默認行為。有時,我不得不支持一些本來不打算支持的瀏覽器(比如Safari)。雖然如今看來這種想法很愚蠢,但當時的我真的覺得這都是客戶的錯,因為他們的要求,我不得不想盡辦法在我的代碼中做一些折中和變通。代碼就是藝術(shù),必須力求完美
整潔的代碼,嚴密的單元測試,完善的文檔,毋庸置疑這些都非常重要。作為一名程序員,我總是要求自己使用現(xiàn)代模式編寫整潔的代碼,而且我會頻繁地檢查所有的依賴項都是最新的。因為我想成為一名優(yōu)秀的程序員。每當我的產(chǎn)品經(jīng)理要求我放下手頭的單元測試,提高開發(fā)新功能的速度時,我就會火冒三丈,為什么他意識不到單元測試有多么重要呢?當時,我們并沒有其他自動測試,所以單元測試是保障產(chǎn)品穩(wěn)定且沒有回歸問題的唯一希望。在我看來,產(chǎn)品經(jīng)理提這種要求就是因為他的目光短淺。更有甚者,他還暗示我停止編寫文檔,將代碼轉(zhuǎn)換成復雜度更低的架構(gòu)(當時項目剛剛開始)。我承認,壓縮這些工作可以加快開發(fā)速度,但是將來我們肯定會遇到很多問題。我們不得不花費大量時間來修復回歸錯誤,而且隨著項目的發(fā)展,新的架構(gòu)也會變得過于簡單!此外,如果沒有完善的文檔,新加入的程序員又如何能快速融入項目呢?就為了這個問題,我們花費了好幾個小時反復討論,并分析了將來會給我們帶來多少損失。 然而,幾個月后,那個項目以失敗告終,因為預算大大超支。多年后,我不得不承認,我們的團隊犯了一個巨大的錯誤。我們光顧著考慮將來,卻忘記了眼前。我們完全忽略了當時的情況:我們只有很少的預算,而且需要在短時間內(nèi)迅速建立最小可行產(chǎn)品。只選擇自己熟知的技術(shù)棧
我記得有一個項目,最重要的需求便是一個運行良好的WebSocket。我們選擇了哪種技術(shù)來創(chuàng)建后端呢?當然是Symfony。也許現(xiàn)如今使用PHP創(chuàng)建WebSocket很容易,但在當時那就是一場噩夢。我們花費了巨大的精力才讓系統(tǒng)跑起來。當時我們知道使用PHP創(chuàng)建WebSocket會花費很多時間(和金錢),但是我們?nèi)匀簧釛壛耸褂肗ode的想法。為什么?我自己都不知道。我們可以利用Node構(gòu)建速度高達10倍的API,但只是因為我們團隊的技術(shù)棧里沒有Node。我很高興現(xiàn)如今我們的團隊成員都非常開明。上周,我們決定使用一個完全不同的技術(shù)來構(gòu)建我們的一部分系統(tǒng)。我相信這個決定可以為我們節(jié)省很多時間,盡管我們需要從頭開始學新技術(shù)。產(chǎn)品經(jīng)理太糟糕了,還不如我來
當我還是一名程序員的時候,說實話我和產(chǎn)品經(jīng)理的關(guān)系……不太融洽。每當他告訴我計劃的范圍有變時,我都會很生氣:“為什么你不能做好本職工作,事前定義好范圍呢?事先決定好功能需求有這么難嗎?” 當時的我簡直太天真了,我把事情想象的太簡單了。如今,我終于知道計劃好項目的每一個細節(jié)簡直難以上青天。首先,你必須考慮到技術(shù)和預算的限制;其次,你必須設(shè)身處地的為產(chǎn)品的用戶考慮,不能忘記業(yè)務與市場的需求。你無法在項目伊始就掌握所有的需求;有時,業(yè)務環(huán)境會發(fā)生變化;有時,你必須先構(gòu)建一部分產(chǎn)品,然后再逐步改良。另外,產(chǎn)品經(jīng)理也可能會犯錯誤。程序員會編寫出bug,產(chǎn)品經(jīng)理也會犯錯。如今想來,這都是再明顯不過的事情了。如果當時我能夠意識到這一點,那么就可能就會成為一名更好的程序員。我不應該鉆牛角尖,就為了證明產(chǎn)品經(jīng)理錯了,而是應該集中精力尋找解決方案。 有時,我甚至忘記了自己和產(chǎn)品經(jīng)理有著相同的目標,即打造出色的產(chǎn)品,現(xiàn)在想來不禁覺得汗顏。產(chǎn)品經(jīng)理掌握的有關(guān)預算、業(yè)務狀況、客戶需求、截止期限和優(yōu)先級方面的信息比我多,這也就是為什么我不理解他們?yōu)楹巫龀瞿承Q定的原因。總結(jié)
可能對于某些人來說,以上四點都是顯而易見的事兒。如果你所在的團隊非常強大,組織良好,擁有一名出色的領(lǐng)導,而且你始終記得UX的基本規(guī)則,那么我由衷地為你感到高興。我相信你會成為比我更出色的一名程序員。因為“一名優(yōu)秀的程序員”不僅僅是掌握技術(shù)相關(guān)的知識。了解你能夠為公司帶來哪些價值,以及如何才能實現(xiàn)這些價值,尤為重要?,F(xiàn)在我對高級開發(fā)人員的理解如下:高級開發(fā)人員不僅是掌握了各個方面的技術(shù)的人才。如果有需要,他們會跨出自己的舒適區(qū),幫助公司打造出色的產(chǎn)品。另外,他們是注重解決方案超過問題本身的人。原文鏈接:https://betterprogramming.pub/4-mistakes-i-made-as-a-programmer-but-i-had-to-become-a-cto-to-see-them-19a41ba70411

關(guān)注Java技術(shù)棧看更多干貨
獲取 Spring Boot 實戰(zhàn)筆記!