9個(gè)開發(fā)人員的秘密可能會(huì)讓您的業(yè)務(wù)陷入困境
應(yīng)用程序開發(fā)可以成為您業(yè)務(wù)的關(guān)鍵因素,而可促進(jìn)開發(fā)出市場(chǎng)主導(dǎo)的移動(dòng)端應(yīng)用程序的奇才或只是能編寫正確的定制代碼來使業(yè)務(wù)發(fā)展起來的奇才,這些人都非常值得公司進(jìn)行投入。但事實(shí)是,我們的開發(fā)人員并不總是這樣直率,并且有一些想要保守的秘密。
事實(shí)上,我們沒有告訴你事情的全部,這都是可以理解的。畢竟,你是老板。難道你會(huì)把所有事情都告訴老板嗎?如果您是***執(zhí)行官,您是否會(huì)在董事會(huì)上就每個(gè)決定說出自己的想法?所以當(dāng)我們這樣做的時(shí)候你別這么吃驚。
有時(shí)候你知道的越少越好。您不需要知道我們隱藏Java更新的目錄。只要備份進(jìn)行了加密,您也不必關(guān)心其密碼。如果我們沒有征得每個(gè)利益相關(guān)者的批準(zhǔn)就更換使用不同的工具,你可能并不會(huì)生氣。
但其他事情可能會(huì)有所影響。其他一些情況或許只會(huì)影響公司的命運(yùn)和我們的薪水。所以這里有9件事情進(jìn)行披露,我們并沒有告訴你,是因?yàn)檫@會(huì)使企業(yè)產(chǎn)生困擾。
1. 我們的工作思路并沒有你們認(rèn)為的那么多
開發(fā)人員都很聰明,并且我們中的一些人簡(jiǎn)直就是天才。但是,我們確實(shí)有一種傾向,讓人覺得我們知道有關(guān)這些1和0的所有事情,這有時(shí)讓我們感覺有些過頭。
當(dāng)然,我們掌握編程整個(gè)流程的基礎(chǔ)知識(shí)。我們可以編寫一個(gè)循環(huán)或向數(shù)據(jù)庫(kù)發(fā)送查詢。即使我們***次遇到某一種語言、代碼庫(kù)或開發(fā)工具,這些基礎(chǔ)知識(shí)也可以讓我們將工作向前推進(jìn),但是你很少詢問我們的基礎(chǔ)知識(shí)。您希望我們修復(fù)一個(gè)流程中的功能,如果我們知道該流程中涉及的所有代碼實(shí)際的位置,那我們或許會(huì)很幸運(yùn)。當(dāng)我們找到代碼的位置,再進(jìn)行修復(fù),這可能會(huì)變得很容易或者也很難。直到我們將代碼下載,重新寫幾行代碼,并執(zhí)行一下,才能真正知道結(jié)果。這不只是工作范圍的擴(kuò)大,也打亂了你的時(shí)間表。有時(shí)在開始階段,我們無法估計(jì)涉及的實(shí)際工作量。
但是在會(huì)議上誰想說“我不知道”呢?誰想告訴老板他們對(duì)如何開始工作或使用何種工具最適合毫無頭緒呢?所以我們憑空進(jìn)行了估計(jì)或制定了解決方案,并且希望我們是正確的。如果我們不正確,我們必須給出一些聰明合理的解釋,如“磁通電容器過載”,并且著手去做我們最不喜歡的工作,即閱讀手冊(cè)。
2. 你的技術(shù)債比你想象的要大很多
在開發(fā)現(xiàn)有應(yīng)用程序時(shí),管理層會(huì)做出一個(gè)選擇:催促開發(fā)團(tuán)隊(duì)想出對(duì)策,或者要求他們對(duì)整個(gè)堆棧進(jìn)行重新設(shè)計(jì)??焖賾?yīng)對(duì)策略通常是不錯(cuò)的,似乎成本較低。通過快速應(yīng)對(duì)策略,您可以立即解決問題,我們會(huì)盡力滿足您的需求,大多數(shù)情況下我們都喜歡這樣做。
但隨著時(shí)間的推移,各種修修補(bǔ)補(bǔ)的地方逐漸累積。一些聰明的開發(fā)人員創(chuàng)造了一個(gè)詞叫“技術(shù)債”,以涵蓋那些本應(yīng)該完成的全部實(shí)際工作,但是由于決策延遲而使用了臨時(shí)性補(bǔ)救措施。
當(dāng)然,這不是一個(gè)準(zhǔn)確的術(shù)語。你不需要償還債務(wù)。如果你很幸運(yùn)的話,你可以始終保持軟件的運(yùn)行,而無需重新修改所有內(nèi)容。但最終,一些重大事件的發(fā)生將會(huì)打破一切,并且不能輕易地進(jìn)行修復(fù)。通常這些事件會(huì)涉及一個(gè)合作密切的業(yè)務(wù)伙伴,他們通過一些軟件包最終升級(jí)到***版本,而突然我們的代碼無法運(yùn)行。突然間一切都崩潰了,我們的代碼不再與我們的合作伙伴進(jìn)行交互。有時(shí)候,我們的合作伙伴將對(duì)我們感到遺憾,并繼續(xù)運(yùn)行他們舊的通道,但這種情況只有在我們可以給合作伙伴帶來收入時(shí)才可行。如果我們只是一個(gè)不創(chuàng)造價(jià)值或一個(gè)小賬戶,那么合作伙伴將會(huì)跟我們說再見了,這就是我們的工作。
3. 我們感到無聊,只是做一些無聊簡(jiǎn)單的工作
一個(gè)企業(yè)***的問題是擁有聰明的開發(fā)人員,他們知道代碼的全部問題,但并沒有興趣為此做任何事情。在修復(fù)故障或做一個(gè)功能改進(jìn)上,這樣的開發(fā)人員可能會(huì)比那些聰明但不了解代碼庫(kù)的年輕員工快10倍。有無數(shù)的原因令我們感到無聊,有時(shí)代碼是用幾年前就過時(shí)的舊語言編寫的,有時(shí)是我們忘記最初辛辛苦苦編寫的代碼,有時(shí)是將表格加寬一些或者背景更藍(lán)一些,這樣的簡(jiǎn)單工作,我們都想要一個(gè)新挑戰(zhàn)。
一次又一次辛苦地鉆研著相同的代碼,對(duì)這種無聊束手無策。讓開發(fā)人員在***和***的框架中重寫代碼會(huì)減輕這種無聊。正如艾茲拉·龐德(Ezra Pound)所說,詩(shī)人的工作就是讓它重新變成新東西。也許這是管理者的工作。如果你們想讓我們留下來繼續(xù)工作,或許至少應(yīng)該這樣做。
4. 我們癡迷于自己的代碼
你看到過我使用indexOf函數(shù)的巧妙方法了嗎?只需一行代碼,但它可以完全解析cookie字符串。如果你再給我?guī)滋鞎r(shí)間,我可以用這個(gè)聰明的方法來解決更大的問題。
我們喜歡用我們自己特有的方式來編程。我們已經(jīng)習(xí)慣于舒適狀態(tài),我們喜歡一次又一次地使用相同的語句。你知道這個(gè)笑話,當(dāng)你去見外科醫(yī)生時(shí),每一種疾病都需要做手術(shù)切除,而每一項(xiàng)任務(wù)看起來像木匠帶著一把錘子來處理一個(gè)釘子?這就像我們一樣,但是我們自己擁有特別的語言角。函數(shù)語言?面向?qū)ο蟠a?匯編代碼?我們已經(jīng)選擇了我們的語言,我們已經(jīng)準(zhǔn)備好實(shí)施我們喜歡的解決方案,無論該方案對(duì)公司是否有意義。
在***的日子里,這不是問題。優(yōu)秀的開發(fā)人員不要讓他們特定的選擇變成教條。通常我們擁有很好品味,可以欣賞一個(gè)不錯(cuò)的點(diǎn)子。我們應(yīng)該足夠地靈活,并能認(rèn)識(shí)到許多編程技術(shù)幾乎是可以互換的。我們也應(yīng)該足夠聰明,認(rèn)識(shí)到?jīng)]有***的解決方案,每一個(gè)優(yōu)秀的功能或很棒的方法都有缺點(diǎn)。
但在最糟糕的日子里,我們已經(jīng)做好進(jìn)行內(nèi)戰(zhàn)的準(zhǔn)備了。我們中的太多人將那些做出不同選擇的開發(fā)人員妖魔化,并進(jìn)行詆毀。管理者需要謹(jǐn)慎處理此事,但這可能令人為難。當(dāng)程序員隨便地做出嚴(yán)厲的批評(píng)時(shí),很難弄清楚這只是一種不同的技術(shù),還是“腦子出問題”的技術(shù)。而當(dāng)您不知道開發(fā)人員是否重新工作,或是對(duì)其工作固執(zhí)己見時(shí),可能很難為該業(yè)務(wù)做出***決策。
5. 我們癡迷于這個(gè)月的時(shí)髦東西
你看到在Slashdot上新的開源項(xiàng)目嗎?你看過在InfoWorld上的這篇文章了嗎?我們絕對(duì)需要下載那個(gè)代碼,編譯并將其集成到我們的堆棧中。這將使我們的軟件運(yùn)行得快很多,也會(huì)出問題。這比上個(gè)月寫信告訴你的那個(gè)聰明的新想法好多了。昨天就這樣,上周也是這樣,這是實(shí)打?qū)嵉摹?/p>
進(jìn)步是科技產(chǎn)業(yè)的重要組成部分。通常情況下,這是好事,會(huì)使設(shè)備運(yùn)轉(zhuǎn)越來越好。這一切您只需登上時(shí)光機(jī)器回到過去,就能了解科技進(jìn)步了多少。
但是開發(fā)人員經(jīng)常把這個(gè)做得更夸張。我們喜歡新點(diǎn)子和更好的代碼,像一個(gè)新車主喜歡那些很棒的配置。谷歌公司命名其瀏覽器為“Chrome”并不是巧合。
控制這種本能是一項(xiàng)挑戰(zhàn)。如果只是為了改進(jìn)的話,你不想經(jīng)常說“不”,因?yàn)槲覀兊倪@種癡迷經(jīng)常是基于一些實(shí)際的需要。但是,如果我們追逐每一個(gè)新的想法,那么我們都將無法把握什么是最適合我們的業(yè)務(wù)?;蛘吒愕氖?,我們會(huì)將一部分業(yè)務(wù)置于危險(xiǎn)境地。
6. 我們經(jīng)常太懶惰而不想推進(jìn)業(yè)務(wù)發(fā)展
比起追逐每一個(gè)新想法,唯一一件更糟的事情是不追逐任何一個(gè)新想法。有太多開發(fā)人員變得如此憤世嫉俗,他們不會(huì)嘗試改進(jìn)任何事情或研究可以產(chǎn)生重大業(yè)務(wù)成果的新工具。
是的,這個(gè)月的時(shí)髦東西很快就會(huì)被取代。是的,通常這只是幾年前的一個(gè)舊東西翻新一下,做了一些小的改進(jìn)。是的,我們得到的代碼運(yùn)行順利。是的,因?yàn)樗切碌暮陀兴倪M(jìn)的東西,我們就用其他東西替換現(xiàn)在運(yùn)行良好的東西,這是很愚蠢的。但是,如果我們經(jīng)常忽略發(fā)展進(jìn)步,我們終究有一天會(huì)意識(shí)到我們已經(jīng)落后了很遠(yuǎn)。
我們經(jīng)常以自豪和過于專注于某些技術(shù)細(xì)節(jié)來掩飾這種懶惰。你知道Multics是***的操作系統(tǒng),比Windows更安全嗎?或者Solaris是Unix系統(tǒng)中***的版本?如果不是Mac用戶只是喜歡點(diǎn)擊圖標(biāo),或許真正成功的是加州大學(xué)伯克利分校軟件(BSD),而不是Apple的那個(gè)古怪的系統(tǒng)。我們知道我們初次嘗試做的東西還是***的。
這種懶惰是“非我發(fā)明”的一個(gè)近似的表達(dá),往往會(huì)拖慢發(fā)展進(jìn)度?;ヂ?lián)網(wǎng)上有很多聰明人,但不知何故,所有精彩的想法都來自于不太聰明的人。如果我們自己沒有想到,那就不值得做。
對(duì)抗這種懶惰的方法是使偶爾有野心的開發(fā)人員專注于其中。即使采用一些新技術(shù)的規(guī)劃,也沒有太多的商業(yè)意義或沒有希望真正改變?nèi)魏螙|西,但這會(huì)讓辦公室內(nèi)的所有人興奮起來,這就可以了。讓大家興奮一點(diǎn),畢竟,這種事情,可以使公司在機(jī)器學(xué)習(xí)、物聯(lián)網(wǎng)互聯(lián)網(wǎng)或其他方面取得成功。
7. 我們寧愿來創(chuàng)造新東西,也不愿做維護(hù)工作
我見過***的團(tuán)隊(duì)之一,每一年都會(huì)重寫他們的應(yīng)用程序。他們花了頭三個(gè)月從頭開始重寫了所有程序。然后他們海邊度假,到9月他們正在計(jì)劃明年的重寫工作。
他們?yōu)樽约旱拇a深感自豪,他們的代碼是精心設(shè)計(jì)且模塊化的,通常是用“正確的方式”進(jìn)行編寫。他們對(duì)工作的自豪感也體現(xiàn)在代碼中。代碼并不是隨意拼湊在一起,而是實(shí)實(shí)在在的工作成果。
但是這種方法在時(shí)間、金錢和情感能量上都付出昂貴的代價(jià)。團(tuán)隊(duì)的規(guī)模大于只是從事漏洞修復(fù)及維護(hù)的團(tuán)隊(duì)。他們始終在思考哪些東西可以進(jìn)行改進(jìn),哪些會(huì)變得昂貴而導(dǎo)致無法持續(xù)。無論我們?cè)趺凑f,有時(shí)***的方式是,創(chuàng)建堆棧并選擇一小部分開發(fā)人員來進(jìn)行維護(hù),將其余人員轉(zhuǎn)移到新團(tuán)隊(duì)從事新項(xiàng)目。
8. 不是每個(gè)應(yīng)用程序都需要重寫
我們中的一些人喜歡以“正確的方式”重新設(shè)計(jì)和重建一些東西,我們沒有這樣做。我們通常在只能通過完全重寫才能解決故障時(shí),才會(huì)這樣做。有時(shí)候我們100%沒有故障。
但是,只是因?yàn)樗芎?,但并不意味著它有商業(yè)意義。如果30歲的帕斯卡爾或科波爾正在做這項(xiàng)工作,為什么會(huì)搞砸呢?新功能是否增加了很多重要內(nèi)容?更糟糕的是,沒有什么東西是存在于真空中。修復(fù)了X就會(huì)破壞到Y(jié)和Z,因?yàn)樗麄円蕾囉赬。這些又將引發(fā)A、B、C和D中的小錯(cuò)誤,這就像一個(gè)連鎖反應(yīng),造成好心沒好報(bào)。
有時(shí)進(jìn)步會(huì)使情況變得更糟。我記得有一位經(jīng)理向那些挑剔的、癡迷于術(shù)語的程序員們做出讓步后非常生氣,這些程序員堅(jiān)持認(rèn)為現(xiàn)在是時(shí)候替換幾十年前在綠色屏幕上顯示大寫字母的大型機(jī)代碼了。新代碼與******的開放源代碼庫(kù)兼容。二進(jìn)制代碼比舊版本代碼好上1000倍,然而卻速度慢了10倍。我聽了一位工程師對(duì)速度變慢的解釋,因?yàn)樾碌膽?yīng)用程序“做了更多工作”。而更多的是,他的意思是在彩色背景上生成了TrueType字體。
9. 我們不了解商業(yè)案例
我們可能對(duì)數(shù)據(jù)庫(kù)、協(xié)議和新的編程語言非常精通,但是我們大多數(shù)人對(duì)普通人為什么會(huì)這樣做并不太了解。這意味著制定一個(gè)讓客戶滿意和進(jìn)行消費(fèi)的策略,我們不是***人選。我們可以維護(hù)數(shù)據(jù)庫(kù)正常運(yùn)轉(zhuǎn),但我們不知道如何能留住顧客。
一個(gè)明智的選擇是利用大數(shù)據(jù)和有效的衡量指標(biāo)。這些大數(shù)據(jù)和指標(biāo)會(huì)將交易歸結(jié)為數(shù)字,而數(shù)字是我們所能理解的。大數(shù)據(jù)和人工智能的真正好處是,它創(chuàng)建了一個(gè)語言框架,所以在一線工作的商務(wù)人士可以與后臺(tái)開發(fā)人員進(jìn)行溝通。
不要害怕對(duì)這些指標(biāo)進(jìn)行擴(kuò)大。原始銷售數(shù)字是顯而易見的。尋找一下諸如品牌參與度和品牌認(rèn)知度等方面的衡量指標(biāo)。這些指標(biāo)并不總是***無缺,但可以幫助我們了解產(chǎn)品外觀和情感聯(lián)系的重要性。