臨近年末,小智身邊的不少開發者忙碌了起來。
吃午飯的時候,研發組的鵬哥就在一旁大吐苦水。
“當初剛接手這個項目的時候就知道它是個坑,這都跟了大半年了,才稍微像樣了些。現在加班加點,只希望不要拖到春節後······”
“淡定淡定,能圓滿完成就算順利的了。”
為了安慰鵬哥,小智給他講述了一則在IT界流傳多年的奇葩故事。如果屏幕前的你同樣覺得手上的工作又糟心又窩火,聽完這個故事應該會開心一些。
史上最爛的代碼長啥樣?
首先,整個項目總共600多萬行C++代碼,50000 多個類,基於CORBA。
600多萬行是個什麼概念?對比一下:Linux3.13 版內核的代碼,在除去內核驅動和架構之外,在kernel/裡的源代碼有13萬行左右;以功能龐雜著稱的編輯器Emacs,總源碼規模也不過165萬多行。
啟動這個軟件要用時15分鐘,啟動之後平均30秒到30分鐘會崩潰一次,這時候就只能再花15分鐘重啟。
受編譯器版本限制,用的C++語法都非常舊,只能在某個(早就沒人維護)的操作系統上部署。
每編譯一次需要用48個小時,還是在32臺並行的機器上。光用戶界面就有40-50個進程同時操作,而且沒有用到動態鏈接,因此運行庫要先加載起來,一個可執行程序就有幾百兆。
莫名其妙的團隊
這個牛X的項目得追溯到1996年,法國的一個政府機構請某個公司開發一款軟件,預計工期2~3年。
甲方預付了幾百萬歐元后,公司招了幾個程序員開始幹活。隨著資金陸續到位,公司開始瘋狂招人,每隔三個月左右就把隊伍擴大一倍。
結果7年過去了,這個項目竟然還沒成型。這時候,因為延誤造成的罰金已高達每日幾千歐元,於是管理層決定要精簡團隊,減少開支。具體做法是,把有經驗的老員工解僱了,以低薪招了一批沒啥經驗的新手來上班。
一眾毫無軟件工程經驗的人組成的隊伍,這不就是個Bug生產工廠嘛!
而相反的,所有的經理們飯碗倒是都捧得牢牢的,一點都沒受影響。以至後來,團隊的55 個人裡只有20個程序員,剩下35個都是經理,平均每個程序員配備1.75個經理······
第10年,管理層終於發現整個項目已經深陷泥淖,這才決定要招一些具有軟件工程開發經驗的人來彌補。
又苟延殘喘了2年,最終,負責項目的公司領導因為挪用資金等原因被捕,進了監獄,這個在地獄烈焰中鬧騰了十幾年的項目才終於宣告終止。
奇葩代碼盤點
當然,不是人人都有機會遇上這樣的巨型糟糕項目,但項目裡大大小小的糟心代碼幾乎每個開發者繞不過去的坑。
產品經理刁難,前輩離職拋盤,同組“豬隊友”挖坑······沒有最坑,只有更坑。
這不,網絡上流傳著眾多網友PO出的讓人抓狂的代碼,每一秒你都能發現比你手上的工作還爛的項目,發現比你還慘的研發。
真·顛倒黑白
@雨藍藍藍
寫這個頁面的已經被我砍死了。
@玻璃杯中的魚
// 以下所有left代表右
// 以下所有right代表左
@ Sc千尋
取名是個技術活兒
@飛面神下一隻豬
用戶碼
UserMa
@ Kun Andy
public enum ColorType
{
Green, // 綠色
Hong, // 紅色
}
//......
this.curColortype= ColorType.Hong;
一開始愣是沒讀懂“Hong”是啥,看了註釋才恍然大悟。更犀利的是應該是覺得綠的拼音(lv)有點像等級,為了防止歧義特地用了Green,真是心思細膩啊!(咦
@侯傑
看枚舉名字不知道FiveLine是什麼鬼,看了枚舉內容恍然大悟,原來是五行(xing)……
@王德福
至今忘不了實習單位的代碼裡面有一個變量叫做“fanpage”,看了上下文之後發現這個變量是控制翻頁的。翻page······
@南零落枕
當年一位學長用虛擬現實做過的一個展示飛機的安裝過程的項目,變量名都是“poguanzi”(破罐子)“lanchibang”(爛翅膀)"zhuanbuqilaidelunzi"(轉不起來的輪子)我看完感覺這飛機遲早得掉下來。
然後函數名都是“bufaqianlaoshi”(不發錢老師)“nengbunengfaqian”(能不能發錢)想象不出學長經歷了什麼······
類名都是“haoxihuangebinvhai”(好喜歡隔壁女孩)“gebinvhaichuanhongyifu”(隔壁女孩穿紅衣服)“gebinvhaihaimeinanpengyou”(隔壁女孩沒男朋友)對愛情的渴望是每個程序猿的本能!
不過我接手以後實在是理不出個頭緒,最後直接重寫了一遍。
@匿名用戶
我校的選課系統,有人能看懂這些變量名算我輸
缺乏安全感
@Cyandev
不知道誰寫的,看哭了
@共產主義接盤俠
感覺很搞笑但是又說不出來哪裡不對····
//拼寫容錯
#define ture true
#define flase false
#define viod void
#definemian main
貴公司是按代碼行數發工資嗎?
@myd7349
只是為了確認輸入內容沒有非法字符,出現了這樣驚天地泣鬼神的操作:
······
哪怕不知道RE,也該知道FindOneOf啊!就是再不濟,也寫個循環吧!
@benliu
以前遇到一個做測試的,寫腳本,我寫了一個方法讓對方調用,說調用100次看看結果。結果我看到了他的代碼類似如下:
我就想說這次麻煩您再調用一百萬次試試
@蘇格
難道這就是傳說中NASA代碼的最後一頁?
玄學
@孫傳武
有次看一個項目的源碼,註釋裡有個warning是這麼寫的
@CeleryL
@鄧牧澤
代碼review的時候發現一個888的全局數組,但看代碼最多用20個,我就問作者為什麼定這麼大,他說“吉利”。
說吧你是不是針對我
@海大歌
手動混淆法······我刀呢
@淼淼
今天看到對數據庫查詢返回的列表進行冒泡排序,整個人都不好了。
時間都去哪兒了
@虎耳
曾經在一個家公司,有一次發現有個地方在執行每個請求時都會空等了一秒。後來問老大,他說,如果客戶有新要求,隨時可以把性能提高一倍以上······
@破軍
Thread.sleep(5000); //等客戶交錢優化後刪掉
找呀找呀找親戚
@青苔
看見這段代碼的時候,我拍了很久的掌
@LegStrong
del_yeye();
一時看不出來這是要幹嘛,查過去發現是
parent().parent().remove();
合著是要刪除爺爺·····
神邏輯
@TypingW
“你把距離顯示優化一下,超過1000米就顯示公里,精確到小數點後2位。”“好的!”
然後在Code Review的時候,我看到了如下代碼:
最後,我飽含熱淚,心懷不忍地將他辛勤的工作成果改成了
小智注:對方的思路是將數字轉化成字符串,如果其長度大於4(個十百千,超過1000米的字符串長度會大於4),然後往中間插入一個"."(小數點字符)。
@湯洌
要求程序的功能是輸出明天的日期,然後他這麼實現了:
休眠一天,然後輸出當前的日期。真是個鬼才······
@小脆
證明1億以內哥德巴赫猜想成立
#include <iostream> /<iostream>
#include<windows.h>using namespace std;/<windows.h>
int main()
{
Sleep(2000);
cout<
return 0;
}
不知道看完以上內容,屏幕前的你是否也像我身邊的鵬哥一樣煥發起了無窮的信心。
畢竟相比之下,他手上的項目真是再正常不過了。
互動話題
你見到過哪些奇葩的代碼?
閱讀更多 AI研究所 的文章