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