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