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