我作為碼農(nóng)犯的四個錯誤,當(dāng)我成為CTO時我才能理解
我的代碼是藝術(shù),必須是完美的
我在五年內(nèi)作為程序員工作。自從你們中的一些人可能有三倍的工作經(jīng)驗,這并不令人印象深刻,但我喜歡把自己視為一個高級開發(fā)人員。這聽起來很嚴(yán)肅,重要嗎?
有一天,我成為MED-Tech Startup的首席技術(shù)官(CTO)。經(jīng)過一段時間的新工作角色,我可以回頭說,我不是一個高級開發(fā)人員。不要讓我錯了 - 我仍然相信我有關(guān)于編程的良好知識,尤其是網(wǎng)絡(luò)發(fā)展 - 但是,如果是這種情況,我為什么要說我不是一名高級資深程序員?
因為這四件事我現(xiàn)在在我的腦海里。
1.用戶是白癡
不,他們不是。
是的,用戶在意外使用應(yīng)用程序,通常很奇怪。
是的,用戶可以提出似乎真正愚蠢的問題。
是的,有時用戶需要看起來毫無意義的功能。
是的,用戶對似乎是不言自明的函數(shù)很難使用。
用戶不是專家。我的醫(yī)生不要求我知道低密度和高密度脂蛋白之間的差異。那么,為什么我曾經(jīng)假設(shè)用戶應(yīng)該知道他們使用什么樣的瀏覽器?這對我來說是顯而易見的,但我的媽媽認(rèn)為谷歌和互聯(lián)網(wǎng)是同義詞。她會說她不使用任何瀏覽器,因為她使用谷歌。
有時要使用戶開心,我不得不覆蓋框架零件來改變其默認(rèn)行為。有時我必須為我不想瀏覽器添加支持(Safari用戶的問候)。當(dāng)我今天談?wù)撍鼤r,這是愚蠢的,但是那些日子我真的認(rèn)為這是客戶的錯,因為我必須在我的代碼中做一些解決方法只是因為他們的定制要求。
我的代碼是藝術(shù),必須完美
清潔代碼,單元測試,偉大的文檔 - 這些無疑是重要的事情。作為程序員,我一直想使用現(xiàn)代模式編寫干凈的代碼,我經(jīng)常檢查項目中的所有依賴性是否是最新的,我想成為好程序員。
當(dāng)我的產(chǎn)品經(jīng)理讓我刪除單元測試以提高開發(fā)速度,我感到生氣 - 他沒有意識到單元測試的重要程度如何?我們沒有任何其他自動測試,因此UT是我們唯一希望使產(chǎn)品穩(wěn)定和無競爭的希望。
這個決定似乎對我來說是短暫的。此外,他建議我們應(yīng)該停止編寫文檔并將代碼轉(zhuǎn)換為更復(fù)雜的架構(gòu)(我們可以這樣做,因為我們在項目開始時)。
好的,我同意這將加快開發(fā)一段時間,但我們將來會有很多問題。我們會浪費(fèi)很多時間修復(fù)回歸錯誤,當(dāng)項目增長時,新架構(gòu)將太簡單!我們將如何向項目推出新的程序員,沒有良好的自述文件?
我們花了幾個小時討論這個決定有多糟糕 - 以及將來會花多少錢。
該項目幾個月后失敗,因為它大幅超過預(yù)算。
幾年后,我必須承認(rèn)真相:我們的團(tuán)隊犯了一個巨大的錯誤。我們想到了未來并忘記了現(xiàn)在。我們完全忽略了這種情況 - 小預(yù)算,需要在短時間內(nèi)創(chuàng)建MVP。
很高興制作您可以向別人展示并為之驕傲的代碼。但成功完成項目更好。畢竟,編程不是藝術(shù)。
3.我會為這個項目使用“x”,因為我知道
在我以前的公司中,我們使用相同的技術(shù)棧創(chuàng)建了每個項目:Symfony和Angular。為什么?symfony是最好的后端框架嗎?沒有。也許Angular是創(chuàng)造現(xiàn)代前端的唯一方法?沒有。我們總是選擇了這組技術(shù),因為我們不知道別人以及這些技術(shù)。那是我們的舒適區(qū),但為新項目選擇知名技術(shù)是錯誤的嗎?這取決于。
在許多情況下,您的下一個項目或多或少類似于以前的項目。自從您已經(jīng)有經(jīng)過驗證的解決方案以來,花費(fèi)大量時間學(xué)習(xí)新技術(shù)將沒有意義。但有時,它可能是錯誤的決定。
我記得一個工作良好工作WebSocket的項目是最重要的要求。我們選擇創(chuàng)建后端做了什么?Symfony,當(dāng)然是。也許今天它更容易在PHP中創(chuàng)建WS,但那些日子是噩夢。我們花了很多時間做它的工作。我的意思是很多。我們意識到基于PHP的WS會花費(fèi)多少時間(和金錢),但我們?nèi)拥袅耸褂霉?jié)點(diǎn)的想法。為什么?我真的不知道。在節(jié)點(diǎn)中,我們將更快地構(gòu)建API 10x,但這不是我們的團(tuán)隊的技術(shù)堆棧。
我很高興我當(dāng)前的團(tuán)隊中的程序員比我更開心。上周我們決定完全切換用于構(gòu)建我們系統(tǒng)的一部分的技術(shù)。我相信這個決定將拯救我們很多時間,即使它意味著從頭開始學(xué)習(xí)一些東西。
我的產(chǎn)品所有者/經(jīng)理錯誤,我會更好
當(dāng)我作為程序員工作時,我與產(chǎn)品經(jīng)理的關(guān)系是……艱難的。每當(dāng)他告訴我關(guān)于任務(wù)范圍的新變化時,我就想:
為什么你不能做你的工作并在開始工作之前定義范圍?!是否需要提前決定該功能如何工作?
那太天真了,但我真的認(rèn)為這很容易。現(xiàn)在我完全了解具有挑戰(zhàn)性的人才如何規(guī)劃項目的每一個細(xì)節(jié)。您必須考慮到技術(shù)和預(yù)算的局限性(其實際上是相同的事情),您必須考慮將使用您的產(chǎn)品的用戶,您無法忘記商業(yè)和營銷要求。有時,一些要求在一開始就不知道;有時,業(yè)務(wù)環(huán)境發(fā)生變化,有時你必須先建造一些東西來弄清楚它可以做得更好。
另一件事 - 產(chǎn)品經(jīng)理可以犯錯誤。這就像那樣簡單。程序員也會出錯。當(dāng)我現(xiàn)在想到時,這是如此明顯。如果我以前意識到,我將是一個更好的程序員。我應(yīng)該專注于找到解決方案的,而不是試圖展示它們的錯誤。
它是諷刺和悲傷的,但在某些時候,我忘了我和經(jīng)理人的目標(biāo)是相同的目標(biāo) - 制作一個很棒的產(chǎn)品。他們只是比預(yù)算,商業(yè)環(huán)境,客戶端,截止日期和優(yōu)先事項的要求更廣泛的知識。這就是為什么我不明白他們的一些決定。
概括
對于你們中的一些人來說,這四件事可能是顯而易見的。如果你正在擁有一個良好的領(lǐng)導(dǎo)者的偉大,有組織地敏捷團(tuán)隊工作,你就可以思考UX的基本規(guī)則 - 我真的很高興。我假設(shè)你可以是比我更好的程序員。因為“成為一個好程序員”不僅僅是關(guān)于技術(shù)技能。了解您可以為公司帶來的價值以及如何做到這一點(diǎn)更為重要。以下是我如何理解高級開發(fā)人員術(shù)語:
高級開發(fā)人員不是了解技術(shù)的各個方面的人。它是一個幫助我們公司建立一個偉大產(chǎn)品的人,即使這要求他們越過他們的舒適區(qū)邊界。解決問題的解決方案。