在開發中,大公司爲什麼還在採用過時的技術 背景

在開發中,大公司為什麼還在採用過時的技術 背景

鎮樓小姐姐

36份一線互聯網Java面試電子書

84個Java稀缺面試題視頻

背景

本文出自一朋友給我的提問,於是博主嘔心瀝血給他花式洗腦了幾個小時。忽然發現,應該還有許多朋友有同樣的疑問。所以整理成文。

許多剛畢業的程序員朋友,都有一個執念,想要進那種規模大一點的公司、上市的、業內有名的最好。

為什麼大家都想去大公司?

因為很多人覺得,公司大一點,正規一點。開發技術應該不錯,應該與時俱進,流程應該會規範一些。說到這裡,依然有這種想法的朋友,請握個爪。

然而,當他刷完什麼《劍指OFFER》、《編程之美》,廢了好大一番功夫進去以後,卻發現完全和自己想的不一樣。他發現他所在的大公司:

(1)代碼混亂

I、比如一個發送Http請求的Util類,竟然出現了三四種。開發人員A封裝了一種,開發人員B封裝了一種,公司框架自帶了一種。

II、到處充斥著Ctrl+C和Ctrl+V的味道,更有甚者,居然連author都不改,原樣複製過去。

III、日誌風格千奇百怪,缺乏統一規範。每個人都有一套自己的日誌風格。重點是,一些關鍵步驟,居然不寫日誌。

IV、一些幾千行的類、關鍵步驟不加註釋、一個方法幾十個參數都是隨處可見。

(2)開發流程混亂

I、一個項目組IDE和JDK都不統一,比如用Idea,eclipse,myeclipse的都有。然而重點是,把idea、eclipse獨有的配置文件都上傳到了服務器。

II、完全沒有文檔。比如要改一個需求了,OK,去Debug代碼,根據斷點去反推原來的邏輯是怎麼實現的。反正不改出問題就行。

III、程序員白天大部分時間在處理BUG,以一種混日子的態度在工作。反正能搞得定新需求,搞得定功能測試,項目能如期上線就行。至於代碼有多搓,無所謂!

(3)技術落後

I、還在用四五年前的技術,例如還在JSP裡頭寫大量的JAVA代碼進行開發等。

II、架構上很多方面欠考慮。比如,採用了消息隊列,卻完全不做持久化處理,完全不擔心數據丟失的問題,也沒做可靠性的保證。服務之間傳送數據,重要信息完全不加密,明文直接傳。

III、性能調優就是拍腦袋做的

以上種種,大家如果深有感觸,請再次握個爪。那麼,為什麼會這樣呢?

緣由

人員層次

但凡在大廠工作幾年的老員工,有沒有這樣一個體會,身邊的牛逼老員工基本都跑了,剩下來的員工基本都是比較平庸的。

大部分人在工作中,其實都處在一種重複勞動的狀態,也就是所謂的擰螺絲工作,技術水平得不到提高。那麼在這種工作性質之下,會誕生兩類人:

(1)平庸的人

這類人在工作中滿足於能完成需求即可,對代碼的美醜並不關心。正所謂

碼不在爛,能跑就行。

當然,這類人並不是缺乏提升自己技術的能力,而是由於惰性,沒有明確的規劃,缺乏提升技能的意識,導致時光匆匆流走,想要跳槽卻沒地方收留,一不小心,這類人就成為了老員工。說到這裡,趕緊回憶一下自己,是不是成天拿什麼沒時間當理由,然後明日復明日,小心成為老員工。

另外,大公司基本不會裁人,而手上的技術水平已經能應付工作。就算努力學了一堆新技術,也沒有用武之地,於是這類人就能安然自得的繼續過下去。

大家可以對比一下你身邊的同事,一個是自畢業的時候就在這家公司熬了十年的,一個是十年間在三四家公司呆過的。請問哪一個水平更高呢?

(2)牛逼的人

這類人在工作中,一般有著較強的責任心,且對代碼有著很高的追求,對問題有著獨特的見解,回去也會不斷的學習,提升自己。然而這類人的所學,通常沒有發揮的空間。比如,可能出現下面的對話

程序員A:"老王,你這個地方不能這麼寫,會出現XXX的BUG的。"

老王:"你懂什麼,公司創立的時候,我就在這個項目組了,就該這麼寫。"

於是這類人的所學,並沒有啥發揮空間。就算有發揮的空間,過不了多久,他也會離職。因為在IT圈,只有通過跳槽才能得到高薪。這點,我們必須明白,大廠都有一套嚴格的薪水漲幅制度,並不會因為你做出了特別牛逼的貢獻,給你月薪突然翻了一倍。而且,如果給你漲了薪水,你公司的其他人呢,他們漲還是不漲?所以,很多公司寧願給一個新員工高薪,卻不願意給老員工提工資,就是這個道理。

因此,這類牛逼的人覺得公司現有的薪資匹配不上自己的能力後,就會跑路的。大家在IT圈會聽到一個說法

B級公司就是給A級公司培養人才的,A級公司就是給S級公司培養人才的。

所以,當你發現自己身邊沒有牛逼的大神,不要驚訝,因為大神都跑路了。

重構成本

當一個系統的代碼,成為祖傳代碼以後,其業務規模和複雜程度,都遠遠超乎你的想象。我們在開發新需求的時候,都是在原有基礎上小心翼翼的修補。比如,可能出現如下對話

老王:"誰讓你亂改這個模塊代碼的,知不知道,你這麼改導致了XX模塊不能用了。"

程序員A:“我。。。。只是想讓代碼看起來更好看而已。”

老王:"你以為我不知道這麼寫很挫麼,亂改出問題了,你抗麼。趕緊改回去。"

其實你能看到的問題,老員工看的比你更清楚,maybe人家比你還明白應該要如何解決。但是為什麼老員工不去做呢?因為,老員工明白,技術上的事情沒有100%肯定不出事的。出了事了,誰來背?

再打一個比方,

你一個月薪水10K,你花了5個月的時間,提升了一下10%性能。站在你的角度,你高興了。但是站在公司的角度,臥槽,我虧了啊。我還不如花20K再買一臺機器。在你身上投入了50K,還要擔心你會不會跑路。

所以,從重構成本上來看,又提高了。

另外,很多中層的領導,基本都是守著自己的一畝三分地,不求無功,但求無過。所謂祖傳代碼的出現,其實是整個部門的責任。你一個人重構的開開心心了,後續就可能整個部門一起加班,誰去做這種吃力不討好的事情。

而且最重要的是,在技術leader水平和開發流程沒有改變的情況下,你的新代碼過不了幾個月又會變成所謂的祖傳代碼。

當然,但是這並不意味著,這些技術項目沒救了。比如,某一天你的對手,出了個吊打你們項目的產品。這種時候,只能大改了。反正搏一搏,沒準還有出路呢。

公司性質

其實,大部分的公司都是重視業務價值,而看不到技術價值

有些大廠存在一個很有趣的現象,產品經理的薪資比技術人員的薪資還高。因為他們覺得,無外乎是增刪改嘛,找點應屆生就能作了,沒必要花大價錢請牛逼的人來寫。

於是呢,很多中層是所謂的沒寫過代碼的業務員,又或者是沒擼過一行的代碼的產品經理,然後就很搞笑了,會出現如下情形

產品經理:"這個功能,你們看一下要多久才能實現。"

研發人員:"大概下個月十五左右吧。"

產品經理:"什麼!要這麼久。就初一,下個月初一,一定要上。"

研發人員:"我!!!!這個功能XX地方比較複雜,需要點時間。"

產品經理:"你當我傻麼,就是if else。。可以實現的,怎麼要這麼久!"

研發人員:"我!!!"

產品經理:"就下個月初一了,做不出來,公司的損失你背還是我背!"

於是呢,在重視業務價值的公司,無論你多牛逼,乃至你是碼神下凡,你寫出的代碼也是不堪入目。說到這裡,博主的那個朋友不服,他辯解道

"我們可以在前期做好設計和規劃後,再開始開發啊,這樣就能減少出現渣渣代碼的可能性。"

確實,我承認這麼做可以減少出現爛代碼的可能性。然而,大家都知道,需求是一個善變的小姑娘,一天一個樣。你再牛逼的設計,也頂不住需求的頻繁變更啊。

其實,在某些時候,沒有必要把代碼當成一種藝術品,應該要能夠接受適當程度的瑕疵。只要到點可以跑,可以追蹤BUG,基本能交差就成。我相信,給任何一個人足夠的時間,都能把代碼變成一個藝術品,但是這有什麼用。等你弄好,黃花菜都涼了。迅速上線,能掙到錢才是重點啊,才是你的KPI體現啊。很多優秀的代碼,是給了重構的時間的,大牛們都是一邊寫一邊重構的。如果不給時間,大牛們也寫不出優秀的代碼的。換句話說,你完全可以後面掙到錢以後,再把原來的架構推導重來。

我們要明白,寫代碼是為了掙錢,而不是為了雕琢一個所謂的藝術品。如果將寫優秀代碼比作一種情懷,請問

情懷重要,還是金錢重要?情懷能讓你買房麼。

OK,弄清楚主次,掙錢才是硬道理。

審視自己

這個地方,我希望大家好好審視一下自己,因為重點不是

大公司為什麼還在採用過時的技術

而是

你為什麼只能進採用過時技術的公司

其實,每一個公司都有一個所謂的標杆部門,這個部門的技術通常是拿的出手的。可是,這樣的部門,通常是最難進的。所以啊,你要去拿的出手的部門,好好努力吧,少年們。

OK,到這裡,大家好好思考一下吧。大家有什麼問題,也可以給我留言。


分享到:


相關文章: