為什么有些大公司技術(shù)弱爆了?
不知道異步會增加維護成本,提高測試難度嗎?
不過技術(shù)和管理方面,卻弱爆了。
那里的程序員,每天都在看郵件,查問題工單。
這些問題,多半是他們設(shè)計不當(dāng),造成的。
代碼寫的一團糟,全是復(fù)制粘貼,連作者都沒改,大家普遍不寫注釋,也不格式化,代碼歪歪扭扭。
一個項目里,httpclient竟然出現(xiàn)了四種。
一種是該公司研發(fā)部寫的,
一種是老版本的開源項目,
一種是新版本的開源項目,
還有一種是開發(fā)人員造的輪子。
打接口請求響應(yīng)日志,竟然不知道用攔截器。
打錯誤日志竟然不打上下文信息,每個人一種日志風(fēng)格,千奇百怪。
許多重要的中間流程,居然不打日志。
idea、eclipse、myeclipse的配置文件竟然全部傳到項目里去了。
該公司混了兩年的程序員,跟快遞公司做查詢接口,竟然不知道加密運單號。
所有服務(wù)間通訊,都沒有設(shè)requestId,導(dǎo)致跟蹤會話很困難。
一個沒什么qps的邊緣接口,居然做消費者生產(chǎn)者+阻塞隊列的異步模式。
顯得你技術(shù)少是不是。
不知道異步會增加維護成本,提高測試難度嗎?
而且,任務(wù)隊里沒有考慮持久化,趕上發(fā)布,丟了好多任務(wù)。
讀取一個小小的xml和exc配置文件,居然用流式解析,沒見過這么二逼的,真是醉了。
做優(yōu)化全靠拍腦門拍大腿,難道不會用excel分析日志,用jprofile掃項目?
一個100以內(nèi)的常數(shù)集合遍歷,他也要寫個優(yōu)化算法進去,算法跟業(yè)務(wù)還攪在一起,一團亂麻。
每個人都在嚷嚷性能、算法、分布式計算……
幾乎沒有文檔,全靠從代碼反推邏輯。
有枚舉他不用,非要在每個頁面上,把枚舉值挨個兒寫死,知道后面改代碼多么費勁嗎?
欺騙性的變量名,里面存儲的是AES加密的,變量名后綴卻寫成了DES;里面存的是小寫字母,卻寫成upperStr。
一個方法十幾個參數(shù),有三分之一是極其簡略的縮寫,注釋肯定也沒有的。
一個類寫到三四千行是常事。
開發(fā)自測,居然要把代碼全丟到公共機器上,而且都是走svn,他們把svn當(dāng)ftp用。
svn里面大量的無意義提交,一多半的提交連都編譯不過去。
我看到有個應(yīng)屆生,改了兩句話,馬上提交,說是怕代碼丟失。
一個運行了兩年的項目,spring的包掃描明顯配錯了,有些bean根本掃不進來,居然沒有人發(fā)現(xiàn)。
一半的bean在spring管理下,另一半的bean他們自己寫單例模式來實例化。
他們用mysql來做審計系統(tǒng),出報表,有個報表要跑8分鐘。
原來是有人用字符串來存多值(逗號分隔),sql里寫了like,導(dǎo)致沒有利用到索引。
為什么不用pg,pg在sql編程方面,功能更豐富,更適合做統(tǒng)計,它本身就支持?jǐn)?shù)組。
程序員們都是得過且過的態(tài)度,怎么把代碼灌進去,跑的通測試,就算交差了。
為什么大型互聯(lián)網(wǎng)公司,技術(shù)和管理這么差勁,是怎么形成的?
(這家公司是賣機票的,沒有明確說出公司名字,是怕給自己惹麻煩)
姚冬 程序員、編程、C++話題優(yōu)秀回答者 填坑俠 甲:這個A開源庫舊版本有崩潰問題啊
乙:換新版本的A
甲:換了新版本A,用舊的 GCC 編譯不過啊
乙:換新版本GCC
甲:換了新版本GCC,B開源庫不兼容啊
乙:換新版本的B
甲:換了新版本的B,導(dǎo)致性能下降啊
乙:開多線程
甲:開了多線程導(dǎo)致延遲抖動不同步了
乙:換新的延遲修正算法
甲:換了新延遲修正算法偶爾會崩潰啊
乙:要不。。。我們還是去看看那個A開源庫的舊版本崩潰能不能修好吧
如今上點規(guī)模的IT公司,其軟件項目的規(guī)模和復(fù)雜度都遠(yuǎn)遠(yuǎn)超過工程師的能力上限了,都只能小心翼翼地修補,有時局部的大改動會引發(fā)連鎖反應(yīng),大改動的風(fēng)險和成本很難控制,沒有巨大的收益誰也不敢隨便改,你能看到的問題老員工看得更清楚,甚至也清楚怎么解決,但是不動手的原因就是不知道出了事誰來背黑鍋,技術(shù)上的事情誰敢說100%不出事的。
那是不是大公司的技術(shù)項目就沒救了呢?
也不一定,有些事要等個機會的,常見的機會:
1、技術(shù)基礎(chǔ)平臺大革命,比如移動互聯(lián)網(wǎng)的興起,從PC遷移到了手機端,很多舊的技術(shù)代碼就可以拋棄了,手機上從零開始。
2、競爭對手小宇宙爆發(fā),對手搞出一項技術(shù)取得了競爭優(yōu)勢,被迫追趕,這時候死馬當(dāng)活馬治,改出任何問題也都能忍了。
3、人事大動蕩,管理層和基層都大換血,舊代碼已經(jīng)沒人有能力維護下去了,不得不重來。
蕭井陌 樓主你好,我試著給你解釋一下,希望你能滿意。
新手經(jīng)常會有這樣的想法——「這代碼怎么這么爛?寫的人干什么吃的?怎么能這樣?為什么不按照書上說的做?」,這很正常,大家都年輕過,經(jīng)歷過這種階段,我懂你心里的想法,所以也愿意詳細(xì)地向你解釋,這一切發(fā)生的原因是什么。
你說「
不過技術(shù)和管理方面,卻弱爆了。
那里的程序員,每天都在看郵件,查問題工單。
這些問題,多半是他們設(shè)計不當(dāng),造成的。
」
你真的覺得『國內(nèi)行業(yè)老大的互聯(lián)網(wǎng)公司』會是技術(shù)和管理弱爆了的樣子嗎?
你以為團隊?wèi)?yīng)該像永動機,但現(xiàn)實永遠(yuǎn)有各種摩擦、輻射、損耗。
內(nèi)燃機的能量轉(zhuǎn)化率,通常只有 30% - 50%,但是它卻是驅(qū)動全世界運轉(zhuǎn)的核心引擎,順豐京東的快遞小車、聯(lián)通全國的高鐵動車綠皮、瞬時直達的飛機……
機器尚不能 100% 效率運轉(zhuǎn),何況是人呢?
你說我們的程序員每天都在查看郵件、問題工單,你說這些問題多半是我們設(shè)計不當(dāng)造成的,請問你有試過統(tǒng)計數(shù)據(jù)嗎?你大概只是『感覺』如此吧?
事實上,經(jīng)過十幾年的發(fā)展,我們內(nèi)部的『效率改進團隊』已經(jīng)非常高效成熟,每月、每周、甚至每天都會有新的改進,現(xiàn)在的業(yè)務(wù)處理方式,不說全世界,我可以自豪地說在全國我們是領(lǐng)先的,甚至是遙遙領(lǐng)先,不然憑啥坐到了全國龍頭老大的位置呢?
所以啊,你只看到了程序員花在業(yè)務(wù)上的時間,沒看到我們內(nèi)部的『效率改進團隊』為程序員們省掉的時間,我覺得我有必要站出來為默默付出的『效率改進團隊』說幾句。
當(dāng)然,樓主作為實習(xí)生,不知道這些事情進而產(chǎn)生了這些疑問,也暴露了我們的不足。我已經(jīng)在『團隊建設(shè)委員會』里提出了這個問題,大家一致通過了決議,以后我們會對新員工——包括實習(xí)生加強企業(yè)文化、歷史培訓(xùn),確保我們的新伙伴們不僅知道要去哪兒,也要清楚我們從哪里來,長路漫漫,我們一同前行。
你覺得「
代碼寫的一團糟,全是復(fù)制粘貼,連作者都沒改,大家普遍不寫注釋,也不格式化,代碼歪歪扭扭。
」
當(dāng)初公司起步的時候,整個項目都是幾個初創(chuàng)程序員加班加點熬出來的,我知道你看過《代碼大全》、《程序員修煉之道》、《Unix 編程藝術(shù)》,你對上面的準(zhǔn)則信手拈來,你可否翻開床頭柜上的這幾本書,看看它們的出版時間呢?
是的,公司起步的時候,這幾本書根本還沒有出版,彼時中國互聯(lián)網(wǎng)方興未艾,大家都是摸著石頭過河。現(xiàn)在你遇到問題,你可以問朋友、問導(dǎo)師、用谷歌、用棧溢出、用知乎,我們寫程序那個年代,看的是譚浩強、嚴(yán)蔚敏,用的是 52k 撥號上網(wǎng),語言只有 C,編輯器是沒有語法高亮和實時編譯的,編譯器是沒有智能準(zhǔn)確的報錯的,沒有現(xiàn)在這么多知識、也沒有這么多規(guī)范和好資源、好工具。不過我們還是把項目做出來了,把公司一步步推到了現(xiàn)在的位置。
不過這個問題是客觀存在的問題,誰也不否認(rèn),但是你知道為什么你被分配到了一個『代碼看上去一團糟也不夠規(guī)范』的項目嗎?我們需要新鮮血液來重構(gòu)一些老代碼,所以你會被分配到艱苦的崗位上。我們希望你是勇于戰(zhàn)斗的戰(zhàn)士,我們更希望你能成長為經(jīng)驗豐富的老兵,而把你放到這種崗位,是對你來說成長最快的方式。
你認(rèn)為「
一個項目里,httpclient竟然出現(xiàn)了四種。
一種是該公司研發(fā)部寫的,
一種是老版本的開源項目,
一種是新版本的開源項目,
還有一種是開發(fā)人員造的輪子。
」
你不知道的是,我們最初用了開源軟件(也就是你所說的『老版本』),它構(gòu)成了我們早期項目的基石,隨著業(yè)務(wù)復(fù)雜性增加,我們改進并最終切換到新版本。
這個軟件跑老業(yè)務(wù)非常成熟,但是在一些新業(yè)務(wù)上有不可調(diào)和的矛盾,所以在痛苦的適配后,研發(fā)部的同事們自告奮勇用 20% 的時間寫了新業(yè)務(wù)的組件——是的你沒看錯我們也有 20% 時間,我們鼓勵工程師的創(chuàng)新。
至于你說的開發(fā)人員造的輪子——這說起來可真有趣,它其實是前年來的一個清華大學(xué)實習(xí)生寫的。
當(dāng)時他來了之后,針對他接手業(yè)務(wù)的需求,向我抱怨說現(xiàn)有的 3 種都不好,要寫一個新的來『統(tǒng)一天下』,這話是他的原話,我記得非常清楚,因為以我多年經(jīng)驗來看這樣的做法是不可取的,但是本著鍛煉年輕人的心態(tài)(加上他的確是不可多得的天才),我同意了他的請求,于是我用自己的業(yè)余時間接管了他的大部分工作,全力支持他寫一個新的組件,幫他擋住了所有上面的壓力,后來的故事就是你看到的這樣。
是的,他后來越深入、就越來越感到業(yè)務(wù)的復(fù)雜,不斷推翻重構(gòu)、拆東墻補西墻,但始終發(fā)現(xiàn)和自己想的根本完全不一樣,受不了了就走了,留下來這個。
我們明年的規(guī)劃中,就包括剔除這個組件的 codebase,因為它實在是太糟糕了。
你又說「
打接口請求響應(yīng)日志,竟然不知道用攔截器。
打錯誤日志竟然不打上下文信息,每個人一種日志風(fēng)格,千奇百怪。
許多重要的中間流程,居然不打日志。
idea、eclipse、myeclipse的配置文件竟然全部傳到項目里去了。
該公司混了兩年的程序員,跟快遞公司做查詢接口,竟然不知道加密運單號。
所有服務(wù)間通訊,都沒有設(shè)requestId,導(dǎo)致跟蹤會話很困難。
」
攔截器并不如你所想的那班美好,也許你在自己的電腦上寫過一些玩具代碼,覺得這樣很方便、酷炫,但是真正到了戰(zhàn)場,你會發(fā)現(xiàn)沒什么才是必須的、好的,只有適合的才是對的。
至于配置文件,這么說吧,IDE 的配置文件傳到代碼倉庫是我定下的規(guī)矩,『怎么會有人定這樣的規(guī)矩?』,是的你可能從軟件工程的教科書上或者某些『知名博客』上讀到了不能這樣做,但實際上這樣做在很多情況下是必須的。
原因何在?
這樣可以確保代碼克隆即可用,而不是讓每個人都去設(shè)置一大堆無聊的東西,這樣不僅節(jié)省時間,也確保了每個人的環(huán)境一致性,你想想這幾年火熱的 docker,應(yīng)該明白了這樣做的正確性和必要性了吧?
你可能會說即便如此、插件也不用上傳到服務(wù)器保存,我告訴你這樣是不行的,你要考慮到我們這個項目前后十余年,你覺得幾個插件能堅挺十余年?很可能我們早期用的軟件,現(xiàn)在你已經(jīng)完全不可能找到了,所以保存一份備份是非常有必要的,決不能錯誤地認(rèn)為是冗余。
教科書只會教你基本通用的原則,樹立你基本正確的觀念,但是如果只是死守教條,如何能擁抱日益復(fù)雜的變化呢?
你看的教科書,且不說時間上已經(jīng)是二十多年前的了,在適用性上,也不說就是真理,IT 行業(yè)發(fā)展日新月異,幾個月就是滄海桑田,為了適應(yīng)這樣的變化,認(rèn)真地思考、總結(jié)、判斷才是最重要的。
你覺得「
一個沒什么qps的邊緣接口,居然做消費者生產(chǎn)者+阻塞隊列的異步模式。
顯得你技術(shù)少是不是。
不知道異步會增加維護成本,提高測試難度嗎?
而且,任務(wù)隊里沒有考慮持久化,趕上發(fā)布,丟了好多任務(wù)。
讀取一個小小的xml和exc配置文件,居然用流式解析,沒見過這么二逼的,真是醉了。
」
你大概不知道,當(dāng)初跑在你口中的「一個沒什么qps的邊緣接口」上面的業(yè)務(wù)帶來了公司曾經(jīng) 90% 的收入,所以我們用了復(fù)雜的設(shè)計以應(yīng)對當(dāng)時的需求,當(dāng)然現(xiàn)在業(yè)務(wù)轉(zhuǎn)變,老系統(tǒng)不再需要處理那么多業(yè)務(wù)了,但是更沒有理由為一個『works perfectly well』并且不再重要的業(yè)務(wù)重構(gòu)代碼吧?
所以,不是我們秀技術(shù),而是業(yè)務(wù)需求 + 業(yè)務(wù)變更使然,年輕人還需要多學(xué)習(xí)一個。
你抱怨「
做優(yōu)化全靠拍腦門拍大腿,難道不會用excel分析日志,用jprofile掃項目?
一個100以內(nèi)的常數(shù)集合遍歷,他也要寫個優(yōu)化算法進去,算法跟業(yè)務(wù)還攪在一起,一團亂麻。
每個人都在嚷嚷性能、算法、分布式計算……
幾乎沒有文檔,全靠從代碼反推邏輯。
有枚舉他不用,非要在每個頁面上,把枚舉值挨個兒寫死,知道后面改代碼多么費勁嗎?
欺騙性的變量名,里面存儲的是AES加密的,變量名后綴卻寫成了DES;里面存的是小寫字母,卻寫成upperStr。
一個方法十幾個參數(shù),有三分之一是極其簡略的縮寫,注釋肯定也沒有的。
一個類寫到三四千行是常事。
」
我再強調(diào)一次——我們是全中國同類公司中技術(shù)能力第一的,你所說的問題,當(dāng)然是不存在的。
我們有專門的 Hadoop 集群來分析日志,當(dāng)然也就用不著 Excel 了。
對于我們這種體量的公司來說,不存在什么『常數(shù)集合』,代碼必須用合適的數(shù)據(jù)結(jié)構(gòu)——這是常識吧?
特殊的算法和業(yè)務(wù)摻雜以增加內(nèi)聚性,這是我們多年的經(jīng)驗,的確,它和教科書上說的不一樣,但是我前面說了,死守教條是不行的——想必你一定知道 OSI 7 層網(wǎng)絡(luò)模型吧?
公司的技術(shù)氛圍濃厚,是和公司的基因分不開的,我們公司最重要的原則就是——『擁抱變化』,從十幾年前的機房托管單機到現(xiàn)在的龐大自建集群,技術(shù)躍遷了何止千萬里,所以每個人都在學(xué)習(xí)新知識、每個人都沉浸在新知識的喜悅中。
你的問題,大多都是因為沒有考慮到公司的龐大體量和十幾年的技術(shù)躍遷才有的疑問,這點不再贅述,自行體會吧。
搜索公眾號GitHub猿后臺回復(fù)“監(jiān)控”,獲取一份驚喜禮包。
你想的是
「
開發(fā)自測,居然要把代碼全丟到公共機器上,而且都是走svn,他們把svn當(dāng)ftp用。
svn里面大量的無意義提交,一多半的提交連都編譯不過去。
我看到有個應(yīng)屆生,改了兩句話,馬上提交,說是怕代碼丟失。
一個運行了兩年的項目,spring的包掃描明顯配錯了,有些bean根本掃不進來,居然沒有人發(fā)現(xiàn)。
一半的bean在spring管理下,另一半的bean他們自己寫單例模式來實例化。
」
其實那不是 SVN,那是我們公司自主研發(fā)的適應(yīng)我們內(nèi)部需求的 源代碼管理系統(tǒng) 和 文件管理系統(tǒng),你可以往里面放任何東西。
你所說的「無意義提交、一多半的提交連都編譯不過去」其實只是表象,這套系統(tǒng)代號 TITAN,它自帶 CIDD(持續(xù)繼承、交付、部署),所以這些無法編譯的提交都是不會有機會走到下一步流程的的。
如果你工作了一年,你就會發(fā)現(xiàn)這個需求是很重要的,改動、尤其是大型改動,中間會有很多非可用但有需要存檔的步驟,現(xiàn)有的源代碼管理系統(tǒng)都不能很好地支持這些需求,因此你也被教育了一套適應(yīng)落后工具的思想。人啊,最重要的能力是改進工具,所以用 TITAN 的時候要擁抱全新思維,不要被落后思維捆綁。
如果你工作了幾年,你可能還會問為什么我們沒用 Jenkins、Travis 等工具,其實呀,就在 TITAN 之中呀,它凝結(jié)了公司最優(yōu)秀的人才的十幾年寶貴經(jīng)驗和心血。
By the way,我們最近正計劃開源它,為中國開源社區(qū)做貢獻,也希望提高業(yè)界的綜合素質(zhì)。歡迎你提交 PR 哦
你最后說「
他們用mysql來做審計系統(tǒng),出報表,有個報表要跑8分鐘。
原來是有人用字符串來存多值(逗號分隔),sql里寫了like,導(dǎo)致沒有利用到索引。
為什么不用pg,pg在sql編程方面,功能更豐富,更適合做統(tǒng)計,它本身就支持?jǐn)?shù)組。
程序員們都是得過且過的態(tài)度,怎么把代碼灌進去,跑的通測試,就算交差了。
為什么大型互聯(lián)網(wǎng)公司,技術(shù)和管理這么差勁,是怎么形成的?
」
為什么不用 pg?如果你抱著這種想法,那用了 pg 也要被噴的,到時候就就會說 —— 「為什么不用 sqlite,輕量簡單,搞這么復(fù)雜真的有必要嗎?」,真的有必要。。。
這只是一個很簡單的系統(tǒng),做的事情也很簡單,當(dāng)初做這個系統(tǒng)的同事更熟悉 MySQL,當(dāng)然 MySQL 是不二之選了,對于簡單的東西,追求的是開發(fā)速度、使用便利性。
你覺得一個月跑一次的審計代碼,8 分鐘有什么問題嗎?就算是一周跑一次,當(dāng)然也是沒問題的。
程序員的單位時間是如此寶貴,為了優(yōu)化一段一個月跑一次的 8 分鐘代碼,值得花費數(shù)天的時間來做這件事嗎?
重復(fù)一遍,你的問題,大多都是因為『沒有考慮到公司的龐大體量和十幾年的技術(shù)躍遷才有的疑問』,這點不再贅述,還請自行體會。
當(dāng)然,年輕人樂于思考,這是好事,是希望,新鮮血液替換老舊部件系統(tǒng)才能健康發(fā)展成長,人如此、公司如此、國家也是如此。
希望你勤于思考,努力學(xué)習(xí),有問題的話,我們公司是鼓勵同事們向 CEO、CTO 寫信的,不然也不會有 CEO、CTO 信箱了你說對嗎?
當(dāng)然,這樣的技術(shù)性問題、你寫給我就好,CEO 是船長,不需要關(guān)心底層鍋爐房的細(xì)節(jié)。
另外我想補充一下我的想法,希望對你有所幫助。
你看你都沒說加班問題,我們公司沒加班啊,這多好,怎么做到激烈競爭下還能不加班的?都虧了公司老領(lǐng)導(dǎo)和元老們的一手決策
所以我想補充的不是技術(shù)問題,技術(shù)問題都不是問題,年輕人可以學(xué)習(xí)、交流,技術(shù)都會很快成長,畢竟年輕人的沖勁大、頭腦靈活。
我想說的是整體觀、大局觀、大棋戰(zhàn)略。
黃金的導(dǎo)電性最好,為什么電腦主板還要用銅?
清華大學(xué)最好,為什么有人要去普通學(xué)校?
飛機最快,為什么還有人坐火車?
因為資源都是有限的,我們在現(xiàn)實生活中——而不是教科書上——必須兼顧成本和產(chǎn)出的平衡。
你問我每行代碼都多人多層人工 review 好不好?問我支不支持?我說好,review 我怎么能不支持呢?我今天在知乎這個公眾平臺我明確說了我支持。
但是你也應(yīng)該多學(xué)習(xí)一個,這個現(xiàn)實畢竟是現(xiàn)實,我們要兼顧各種考量。
你今天在這里渲染「大公司技術(shù)和管理這么差勁」,是不對的、是失實的、是欠妥的、是缺乏認(rèn)真思考的、是未加深入考量的。
將來輿論出了偏差,你雖然不用負(fù)責(zé)任,但是你認(rèn)識到自己的錯誤的時候,會后悔、會內(nèi)疚、會難過的吧?
何處烏托邦?或許……等下一代?
總結(jié)就是,生產(chǎn)效率才是最重要的,世間萬物最重要的是平衡。
怎樣取舍、如何妥協(xié),這不僅是大自然的規(guī)律,也是我們前進、發(fā)展的準(zhǔn)繩和仰仗的原則。
————
vczh 《C++Primer 5th》強勢審校 我們Office組也有一部分這樣的問題。但是想想我們有一萬人,開發(fā)了30年,問題居然還比題主的輕好多,就覺得我們實在太厲害了。
這種問題是沒法解決的,因為不賺錢,不賺錢你去做了,而且還做出了翔,把程序搞掛了,在你上面三層的老大就不知道要怎么跟CEO解釋。
但是通常來說,因為微軟還是很鼓勵代碼要跟上時代的發(fā)展的。如果這件事情你去做了,雖然不賺錢,但是沒有做出翔,而且跑起來還更快了,你的前途就一片光明了。
陳萌萌 編程話題優(yōu)秀回答者 其實我是一個AI_(:з」∠)_ 題主你看到了很多槽點,但我認(rèn)為你不能只看到槽點和大概怎么解決。有沒有想過怎么改進,如果是你的話你怎么做,這些項目里面臨的主要挑戰(zhàn)是什么,次要的挑戰(zhàn)又是什么?
不要只告訴我技術(shù)A弱爆了,用B就可以完爆這個項目了。你知道用B的優(yōu)劣,B的適用場景以及適用B的成本嗎?對于一間公司來說,成本是很重要的。我這里說的成本不是金錢。而是,假如你看不爽一份代碼,你打算重構(gòu)它,你覺得你需要投入多少時間,多少人力?重構(gòu)之后,又要花費多少時間和人力去升級依賴這份代碼的其他項目?不要以為開會無用,老板就只是在天天發(fā)郵件。如果你重構(gòu)了一份代碼,不能通過溝通說服其他組去升級他們的組件,又或者你只是重構(gòu)了一份雖然很丑陋,但其實并沒有多少程序依賴它的代碼,又又或者你重構(gòu)了代碼只是讓代碼技術(shù)含量更高了,更好看了,卻沒給公司帶來多少收入甚至KPI,那你的工作和成果就很尷尬了。
其實上述也解釋了為什么你身邊的同事都眼睜睜地看著這些丑陋的shit存在而無動于衷。因為他們也是需要投入成本的。先不論他們個人技術(shù)水平高低,試問誰愿意挑一個又艱難,又不能產(chǎn)生多少效益的任務(wù)去做?當(dāng)然,你會說,寫好代碼是程序員的節(jié)操。抱歉,節(jié)操多少錢一斤,北京三環(huán)商品房多少錢一平?
編程高手都有真愛,但現(xiàn)實就是編程高手鳳毛麟角。我們身邊的大部分同事可能只是希望養(yǎng)家糊口,他們頭上還掛著十幾個bug等著修。我們數(shù)落他們沒追求,但追求從來都不是嘴上說說,吐吐槽就能實現(xiàn)的。
人心如此,公司也如是。
矛盾分主次,公司的目標(biāo)都是一樣的:用最少的成本投入到最能產(chǎn)生效益的項目中去,或者投入大成本去解決公司最需要解決的問題,這間公司才能繼續(xù)運作。
所以題主你想想,在你吐槽的個案中,有多少是公司真正關(guān)心的?有哪些是你的老板認(rèn)為可以創(chuàng)造最大效益的?有哪些才是主要矛盾或者挑戰(zhàn)需要最牛逼的人挺身而出第一時間解決?去辨別,解決這些關(guān)鍵的問題吧,騷年。必要時帶上(忽悠)一隊人馬(同事)跟你一起干,茍富貴,勿相忘。不要像祥林嫂一樣,天天抱怨著生活,日日思考著辭職。得罪點說一句:“淪落”到要跟這樣的人共事工作,難道自己身上就沒有原因?
這個世界有更好的公司,有更牛逼的人。如果你認(rèn)為解決這間公司的這堆問題不值得,又或者同事實在太不給力,就遠(yuǎn)走高飛吧。
我以前也跟題主一樣,看我第一份正式工作的很多技術(shù)環(huán)節(jié)都相當(dāng)不爽。這份代碼寫得丑,那個設(shè)計像大學(xué)生作品,重要的項目居然連單元測試都沒有……但是我后來反觀我自己,并沒有發(fā)現(xiàn)比起那些丑陋代碼和糟糕實現(xiàn)強悍多少。我跟我的同事沒有質(zhì)的區(qū)別。我笑話他們代碼混亂bug不盡,我何嘗不是少處理了一個field,倒騰錯了一個片段的數(shù)據(jù)搞到要翻工重跑?在我心底里艸了隔壁組那個“我的程序好像不能跑,你幫我debug下”的同事一千次之后,帶我做ML讓我倒騰數(shù)據(jù)并且被我的程序搞壞了幾份數(shù)據(jù)(當(dāng)然后來搞好了)的T9君在會議上說:“她已經(jīng)很努力了,我承認(rèn)我有時候也逼得她太緊,她應(yīng)該有多些時間的。”
我不是長者,不能share多少人生經(jīng)驗,就留下最后一句話跟諸君共勉(好像有點怪)吧:
我觀別人大傻逼,料別人觀我亦如是!
空明流轉(zhuǎn) 計算機圖形學(xué)、C++、編程話題優(yōu)秀回答者 掃了一下樓內(nèi)的答案,其實就是兩種回答:
掃了一下樓內(nèi)的答案,其實就是兩種回答:
1. 理想主義:現(xiàn)在的代碼太爛了,應(yīng)該去改改改
2. 現(xiàn)實主義:支撐現(xiàn)有業(yè)務(wù)就是最好的代碼,你說爛那是你不懂
一個團隊,在任何時候,都應(yīng)該分辨得出:
分辨什么樣的爛是真爛,什么樣的爛是業(yè)務(wù)復(fù)雜;
分辨不出,就不要去修改。
也應(yīng)該積極尋求:
如果是業(yè)務(wù)復(fù)雜,能不能更簡化更抽象一些;如果是爛,能不能在有限的成本中改好一些。
對于一個長期維護的軟件和系統(tǒng)而言,
爛是合理的,懶是不合理的。不合理的事情多了,只會讓未來更合理。
---------------------下面才是正文-----------------
為什么新人總是會覺得有落差,通常并不是新人的問題,也不算是現(xiàn)有產(chǎn)品的問題。
考慮到系統(tǒng)是經(jīng)歷了業(yè)務(wù)A - B - C這樣的轉(zhuǎn)換過程(這個 @蕭井陌 也提到了例子),然后代碼也是從無到有慢慢起來的,當(dāng)時的Precondition,以及Dev Path,所以實際上現(xiàn)有代碼是
然后新人來了后,只能看到現(xiàn)在的Condition,和現(xiàn)在的業(yè)務(wù)C,所以得到成本最低的系統(tǒng)是
有區(qū)別當(dāng)然是正常的。
即便是持續(xù)重構(gòu)所解決的,也只是降低A - B - C的業(yè)務(wù)變遷中成本,并不是現(xiàn)時的最佳方案 g。
而且,產(chǎn)品本身是要演進的,我們所要做的,是讓產(chǎn)品到下一個版本,也就是
的成本最小化,而不是f_{c}自己的成本最小化。而這個
最小化的時候,往往
我舉個例子,系統(tǒng)在B的基礎(chǔ)上實現(xiàn)C,引入了State設(shè)計模式。從C到D,仍然適合State設(shè)計模式。但是如果只看C,這個State很可能就被退化掉了。
這樣,
反而要大于
版權(quán)申明:內(nèi)容來源網(wǎng)絡(luò),版權(quán)歸原創(chuàng)者所有。除非無法確認(rèn),我們都會標(biāo)明作者及出處,如有侵權(quán)煩請告知,我們會立即刪除并表示歉意。謝謝!








