大公司為什么還在采用過時(shí)的技術(shù)!
背景
本文出自一朋友給我的提問,于是博主嘔心瀝血給他花式洗腦了幾個(gè)小時(shí)。忽然發(fā)現(xiàn),應(yīng)該還有許多朋友有同樣的疑問。所以整理成文。
許多剛畢業(yè)的程序員朋友,都有一個(gè)執(zhí)念,想要進(jìn)那種規(guī)模大一點(diǎn)的公司、上市的、業(yè)內(nèi)有名的***。
為什么大家都想去大公司?
因?yàn)楹芏嗳擞X得,公司大一點(diǎn),正規(guī)一點(diǎn)。開發(fā)技術(shù)應(yīng)該不錯(cuò),應(yīng)該與時(shí)俱進(jìn),流程應(yīng)該會(huì)規(guī)范一些。說到這里,依然有這種想法的朋友,請(qǐng)握個(gè)爪。
然而,當(dāng)他刷完什么《劍指OFFER》、《編程之美》,廢了好大一番功夫進(jìn)去以后,卻發(fā)現(xiàn)完全和自己想的不一樣。他發(fā)現(xiàn)他所在的大公司:
(1)代碼混亂
I、比如一個(gè)發(fā)送Http請(qǐng)求的Util類,竟然出現(xiàn)了三四種。開發(fā)人員A封裝了一種,開發(fā)人員B封裝了一種,公司框架自帶了一種。
II、到處充斥著Ctrl+C和Ctrl+V的味道,更有甚者,居然連author都不改,原樣復(fù)制過去。
III、日志風(fēng)格千奇百怪,缺乏統(tǒng)一規(guī)范。每個(gè)人都有一套自己的日志風(fēng)格。重點(diǎn)是,一些關(guān)鍵步驟,居然不寫日志。
IV、一些幾千行的類、關(guān)鍵步驟不加注釋、一個(gè)方法幾十個(gè)參數(shù)都是隨處可見。
(2)開發(fā)流程混亂
I、一個(gè)項(xiàng)目組IDE和JDK都不統(tǒng)一,比如用Idea,eclipse的都有。然而重點(diǎn)是,把idea、eclipse獨(dú)有的配置文件都上傳到了服務(wù)器。
II、完全沒有文檔。比如要改一個(gè)需求了,OK,去Debug代碼,根據(jù)斷點(diǎn)去反推原來(lái)的邏輯是怎么實(shí)現(xiàn)的。反正不改出問題就行。
III、程序員白天大部分時(shí)間在處理BUG,以一種混日子的態(tài)度在工作。反正能搞得定新需求,搞得定功能測(cè)試,項(xiàng)目能如期上線就行。至于代碼有多搓,無(wú)所謂!
(3)技術(shù)落后
I、還在用四五年前的技術(shù),例如還在JSP里頭寫大量的JAVA代碼進(jìn)行開發(fā)等。
II、架構(gòu)上很多方面欠考慮。比如,采用了消息隊(duì)列,卻完全不做持久化處理,完全不擔(dān)心數(shù)據(jù)丟失的問題,也沒做可靠性的保證。服務(wù)之間傳送數(shù)據(jù),重要信息完全不加密,明文直接傳。
III、性能調(diào)優(yōu)就是拍腦袋做的
以上種種,大家如果深有感觸,請(qǐng)?jiān)俅挝諅€(gè)爪。那么,為什么會(huì)這樣呢?
緣由
人員層次
但凡在大廠工作幾年的老員工,有沒有這樣一個(gè)體會(huì),身邊的牛逼老員工基本都跑了,剩下來(lái)的員工基本都是比較平庸的。
大部分人在工作中,其實(shí)都處在一種重復(fù)勞動(dòng)的狀態(tài),也就是所謂的擰螺絲工作,技術(shù)水平得不到提高。那么在這種工作性質(zhì)之下,會(huì)誕生兩類人:
(1)平庸的人
這類人在工作中滿足于能完成需求即可,對(duì)代碼的美丑并不關(guān)心。正所謂
碼不在爛,能跑就行。
當(dāng)然,這類人并不是缺乏提升自己技術(shù)的能力,而是由于惰性,沒有明確的規(guī)劃,缺乏提升技能的意識(shí),導(dǎo)致時(shí)光匆匆流走,想要跳槽卻沒地方收留,一不小心,這類人就成為了老員工。說到這里,趕緊回憶一下自己,是不是成天拿什么沒時(shí)間當(dāng)理由,然后明日復(fù)明日,小心成為老員工。
另外,大公司基本不會(huì)裁人,而手上的技術(shù)水平已經(jīng)能應(yīng)付工作。就算努力學(xué)了一堆新技術(shù),也沒有用武之地,于是這類人就能安然自得的繼續(xù)過下去。
大家可以對(duì)比一下你身邊的同事,一個(gè)是自畢業(yè)的時(shí)候就在這家公司熬了十年的,一個(gè)是十年間在三四家公司呆過的。請(qǐng)問哪一個(gè)水平更高呢?
(2)牛逼的人
這類人在工作中,一般有著較強(qiáng)的責(zé)任心,且對(duì)代碼有著很高的追求,對(duì)問題有著獨(dú)特的見解,回去也會(huì)不斷的學(xué)習(xí),提升自己。然而這類人的所學(xué),通常沒有發(fā)揮的空間。比如,可能出現(xiàn)下面的對(duì)話
程序員A:"老王,你這個(gè)地方不能這么寫,會(huì)出現(xiàn)XXX的BUG的。"
老王:"你懂什么,公司創(chuàng)立的時(shí)候,我就在這個(gè)項(xiàng)目組了,就該這么寫。"
于是這類人的所學(xué),并沒有啥發(fā)揮空間。就算有發(fā)揮的空間,過不了多久,他也會(huì)離職。因?yàn)樵贗T圈,只有通過跳槽才能得到高薪。這點(diǎn),我們必須明白,大廠都有一套嚴(yán)格的薪水漲幅制度,并不會(huì)因?yàn)槟阕龀隽颂貏e牛逼的貢獻(xiàn),給你月薪突然翻了一倍。而且,如果給你漲了薪水,你公司的其他人呢,他們漲還是不漲?所以,很多公司寧愿給一個(gè)新員工高薪,卻不愿意給老員工提工資,就是這個(gè)道理。
因此,這類牛逼的人覺得公司現(xiàn)有的薪資匹配不上自己的能力后,就會(huì)跑路的。大家在IT圈會(huì)聽到一個(gè)說法
B級(jí)公司就是給A級(jí)公司培養(yǎng)人才的,A級(jí)公司就是給S級(jí)公司培養(yǎng)人才的。
所以,當(dāng)你發(fā)現(xiàn)自己身邊沒有牛逼的大神,不要驚訝,因?yàn)榇笊穸寂苈妨恕?/p>
重構(gòu)成本
當(dāng)一個(gè)系統(tǒng)的代碼,成為祖?zhèn)鞔a以后,其業(yè)務(wù)規(guī)模和復(fù)雜程度,都遠(yuǎn)遠(yuǎn)超乎你的想象。我們?cè)陂_發(fā)新需求的時(shí)候,都是在原有基礎(chǔ)上小心翼翼的修補(bǔ)。比如,可能出現(xiàn)如下對(duì)話
老王:"誰(shuí)讓你亂改這個(gè)模塊代碼的,知不知道,你這么改導(dǎo)致了XX模塊不能用了。"
程序員A:“我。。。。只是想讓代碼看起來(lái)更好看而已。”
老王:"你以為我不知道這么寫很挫么,亂改出問題了,你抗么。趕緊改回去。"
其實(shí)你能看到的問題,老員工看的比你更清楚,maybe人家比你還明白應(yīng)該要如何解決。但是為什么老員工不去做呢?因?yàn)?,老員工明白,技術(shù)上的事情沒有100%肯定不出事的。出了事了,誰(shuí)來(lái)背?
再打一個(gè)比方,
你一個(gè)月薪水10K,你花了5個(gè)月的時(shí)間,提升了一下10%性能。站在你的角度,你高興了。但是站在公司的角度,臥槽,我虧了啊。我還不如花20K再買一臺(tái)機(jī)器。在你身上投入了50K,還要擔(dān)心你會(huì)不會(huì)跑路。
所以,從重構(gòu)成本上來(lái)看,又提高了。
另外,很多中層的領(lǐng)導(dǎo),基本都是守著自己的一畝三分地,不求無(wú)功,但求無(wú)過。所謂祖?zhèn)鞔a的出現(xiàn),其實(shí)是整個(gè)部門的責(zé)任。你一個(gè)人重構(gòu)的開開心心了,后續(xù)就可能整個(gè)部門一起加班,誰(shuí)去做這種吃力不討好的事情。而且最重要的是,在技術(shù)leader水平和開發(fā)流程沒有改變的情況下,你的新代碼過不了幾個(gè)月又會(huì)變成所謂的祖?zhèn)鞔a。
當(dāng)然,但是這并不意味著,這些技術(shù)項(xiàng)目沒救了。比如,某一天你的對(duì)手,出了個(gè)吊打你們項(xiàng)目的產(chǎn)品。這種時(shí)候,只能大改了。反正搏一搏,沒準(zhǔn)還有出路呢。
公司性質(zhì)
其實(shí),大部分的公司都是重視業(yè)務(wù)價(jià)值,而看不到技術(shù)價(jià)值。
有些大廠存在一個(gè)很有趣的現(xiàn)象,產(chǎn)品經(jīng)理的薪資比技術(shù)人員的薪資還高。因?yàn)樗麄冇X得,無(wú)外乎是增刪改嘛,找點(diǎn)應(yīng)屆生就能作了,沒必要花大價(jià)錢請(qǐng)牛逼的人來(lái)寫。
于是呢,很多中層是所謂的沒寫過代碼的業(yè)務(wù)員,又或者是沒擼過一行的代碼的產(chǎn)品經(jīng)理,然后就很搞笑了,會(huì)出現(xiàn)如下情形
產(chǎn)品經(jīng)理:"這個(gè)功能,你們看一下要多久才能實(shí)現(xiàn)。"
研發(fā)人員:"大概下個(gè)月十五左右吧。"
產(chǎn)品經(jīng)理:"什么!要這么久。就初一,下個(gè)月初一,一定要上。"
研發(fā)人員:"我!?。。∵@個(gè)功能XX地方比較復(fù)雜,需要點(diǎn)時(shí)間。"
產(chǎn)品經(jīng)理:"你當(dāng)我傻么,就是if else。??梢詫?shí)現(xiàn)的,怎么要這么久!" 研發(fā)人員:"我!??!"
產(chǎn)品經(jīng)理:"就下個(gè)月初一了,做不出來(lái),公司的損失你背還是我背!"
于是呢,在重視業(yè)務(wù)價(jià)值的公司,無(wú)論你多牛逼,乃至你是碼神下凡,你寫出的代碼也是不堪入目。說到這里,博主的那個(gè)朋友不服,他辯解道
"我們可以在前期做好設(shè)計(jì)和規(guī)劃后,再開始開發(fā)啊,這樣就能減少出現(xiàn)渣渣代碼的可能性。"
確實(shí),我承認(rèn)這么做可以減少出現(xiàn)爛代碼的可能性。然而,大家都知道,需求是一個(gè)善變的小姑娘,一天一個(gè)樣。你再牛逼的設(shè)計(jì),也頂不住需求的頻繁變更啊。
其實(shí),在某些時(shí)候,沒有必要把代碼當(dāng)成一種藝術(shù)品,應(yīng)該要能夠接受適當(dāng)程度的瑕疵。只要到點(diǎn)可以跑,可以追蹤BUG,基本能交差就成。我相信,給任何一個(gè)人足夠的時(shí)間,都能把代碼變成一個(gè)藝術(shù)品,但是這有什么用。等你弄好,黃花菜都涼了。迅速上線,能掙到錢才是重點(diǎn)啊,才是你的KPI體現(xiàn)啊。很多優(yōu)秀的代碼,是給了重構(gòu)的時(shí)間的,大牛們都是一邊寫一邊重構(gòu)的。如果不給時(shí)間,大牛們也寫不出優(yōu)秀的代碼的。換句話說,你完全可以后面掙到錢以后,再把原來(lái)的架構(gòu)推導(dǎo)重來(lái)。
我們要明白,寫代碼是為了掙錢,而不是為了雕琢一個(gè)所謂的藝術(shù)品。如果將寫優(yōu)秀代碼比作一種情懷,請(qǐng)問
情懷重要,還是金錢重要?情懷能讓你買房么。
OK,弄清楚主次,掙錢才是硬道理。
審視自己
這個(gè)地方,我希望大家好好審視一下自己,因?yàn)橹攸c(diǎn)不是
大公司為什么還在采用過時(shí)的技術(shù)
而是
你為什么只能進(jìn)采用過時(shí)技術(shù)的公司
其實(shí),每一個(gè)公司都有一個(gè)所謂的標(biāo)桿部門,這個(gè)部門的技術(shù)通常是拿的出手的??墒?,這樣的部門,通常是最難進(jìn)的。所以啊,你要去拿的出手的部門,好好努力吧,少年們。
OK,到這里,大家好好思考一下吧。大家有什么問題,也可以給我留言。
總結(jié)
啰里啰唆的扯了一堆,希望大家看完以后,能有所收獲。工作中,不斷的提升自己,少一些抱怨吧。