第八十六章 一根筋的程序員
這天,戚斌暄正在店里備課,一個(gè)送外賣的來給茶客送餐。戚斌暄抬頭瞄了一眼,然后接著準(zhǔn)備備課,忽然,他感覺那個(gè)送外賣的很眼熟,再仔細(xì)看看,原來是自己的發(fā)小,孫沐,外號(hào)孫木頭。
戚斌暄喊了聲:“孫木頭?!蹦侨宿D(zhuǎn)過頭來,看來也認(rèn)出了戚斌暄,尷尬地笑笑,說的:“原來是斌暄啊,你不是當(dāng)兵去了嗎?在這干嘛?!?p> “退伍了唄,幫我爸看店。我聽說你是程序員啊,怎么送外賣了?”
“哎,一言難盡啊?!睂O木頭嘆了口氣,有著深深的無奈。
戚斌暄問他有空沒,好久不見,有空就坐下來聊聊。
孫沐看看手機(jī),說道:“單子都送完了,行啊,好久不見,咱們聊聊。”
孫沐坐下來,接過戚斌暄遞過來的茶水問道:“你這腿怎么了?”
“當(dāng)兵時(shí)受傷了,不過不礙事,基本上痊愈了,拄著拐走路沒問題。”然后戚斌暄半開玩笑的問:“現(xiàn)在送外賣比程序員掙錢嗎,你怎么改行了?!?p> 孫沐開始倒苦水:“哎,工作不容易啊。我一開始在一家私人公司干活,雖然加班,卻也沒啥。咱就是干的這活,但是連著三個(gè)月不發(fā)工資就不像話了。于是一怒之下,我們幾個(gè)干活的聯(lián)合起來把老板告了。雖然大理寺判贏了,但是老板也把我們開除了?!?p> 這不廢話嗎,你們將老板告了,能再用你們才怪呢。
戚斌暄又問:“那之后你也可以接著去別的地方干啊,干嘛改行呢?”
孫沐接著說道:“之后,我就去了一家小型開發(fā)加密狗的軟件公司。我參與開發(fā)的是一個(gè)市政道路的排水軟件。工作期間,我發(fā)現(xiàn)了這款軟件有一個(gè)程序上的問題。對(duì)了,你對(duì)程序了解嗎?”
戚斌暄眼睛斜著向上望了望天,思考了幾秒,然后說道:“了解的不多。我聽說程序一般比較死板,嚴(yán)格按照代碼規(guī)定辦事。比方說有個(gè)程序員老婆給他說,你去上街買幾斤蘋果,要是看見西瓜,就買一個(gè)。然后程序員買水果回來,只帶了一個(gè)蘋果。因?yàn)榘凑沾a規(guī)定,‘看見西瓜’就相當(dāng)于條件代碼,‘買一個(gè)’就成了改變‘買幾斤水果’的執(zhí)行代碼了,所以就應(yīng)該‘買一個(gè)蘋果’了?!?p> 孫沐聽后會(huì)心地笑了起來,最開始被熟人認(rèn)出來的尷尬也逐漸淡去,接著說道:“這個(gè)是老段子了。不過這個(gè)段子有個(gè)致命的bug,恩,也就是缺陷?!?p> “哈哈,這個(gè)我還是能聽懂的。不過缺陷在哪?”
“這個(gè)說的是程序員老婆給他說的,這怎么可能???程序員怎么會(huì)有老婆呢?”
戚斌暄也是哈哈大笑起來:“你還是這么喜歡自嘲?!?p> “這可不是自嘲,這是自黑。”孫沐也笑著說道:“程序員是所有行業(yè)中最喜歡黑自己的,當(dāng)年我大宋朝第一土豪程序員就狠狠的黑了一把自己。記得是有個(gè)非常著名的報(bào)紙報(bào)道了一個(gè)專題,名字叫《屌絲:一個(gè)字頭的誕生》。然后第一土豪史大程序員就立馬搶注屌絲網(wǎng)游商標(biāo),那是一個(gè)他的頭像,旁邊寫著‘我為屌絲代言’?!?p> “哈哈,有意思。不過你有點(diǎn)跑題了,你剛才說的排水軟件怎么了?”
“偶,跟這個(gè)也有點(diǎn)相關(guān),不算跑題?!睂O沐笑道,接著解釋:“從剛才兩三個(gè)笑話你應(yīng)該能夠看出我們程序員的一些特點(diǎn),就是過謙。知道什么叫做過謙嗎?就是過了頭的謙虛。意思是程序員除了對(duì)自己技術(shù)的態(tài)度是自傲的,對(duì)其他一切都是過謙的。但是這個(gè)謙虛不是重點(diǎn),重點(diǎn)是對(duì)自己技術(shù)的自傲。專業(yè)領(lǐng)域,就是我的地盤!”
孫沐說這話的時(shí)候,自帶著一股傲氣,喝了一口茶,接著說道:“我在研究那個(gè)排水軟件的時(shí)候,發(fā)現(xiàn)了一個(gè)bug,會(huì)導(dǎo)致排水管線高程控制不合理。排水管線你懂嗎?就是城市管網(wǎng)的排水系統(tǒng)。這個(gè)排水管布置有三個(gè)前提。一是要遵循水流是從高往低流的客觀規(guī)律,也就是管道進(jìn)口高,出口低;二是要大于一定的坡度,保障水流通暢,有一定的流速;三是管道和路面要有一定的覆土,也就是覆蓋土的厚度,保障管道不會(huì)被過往車輛等損壞。恩,我說的這些你懂嗎?”
孫沐又問了一遍,畢竟這些知識(shí)點(diǎn)的前提都不懂,自己之后的解釋肯定也不懂了,那也沒啥意思不是。
“懂啊,基本的邏輯前提嗎。再說了,咱是土木專業(yè)的,算是半個(gè)老本行了?!?p> “那好,接下來給你解釋你就明白了。首先,按照第二條要求,要保障管道大于千分之一的最低坡度,也就是布置一千米最少高程要下降一米;按照第三條要求,要保證覆土,也就是土層必須大于六十公分。所以這兩個(gè)條件結(jié)合起來,那個(gè)軟件的代碼就規(guī)定了,當(dāng)?shù)缆菲露却笥谇Х种坏臅r(shí)候,管道坡度等于道路坡度;當(dāng)?shù)缆菲露刃∮谇Х种?,甚至是反坡,反坡就是坡度向上走的路,這種時(shí)候,管道坡度就取千分之一。這個(gè)規(guī)定你感覺有毛病嗎?”
戚斌暄想了想,說道:“應(yīng)該沒啥毛病吧?”
孫沐正色地說道:“不,毛病大了去了。編制程序是嚴(yán)謹(jǐn)?shù)?,必須考慮多種情況,還需要結(jié)合運(yùn)行的反饋修改修正。排水管線的布置,需要考慮的實(shí)際情況有很多,怎么能夠只根據(jù)這兩條就去設(shè)置呢?比方說我就找到了一個(gè)不合理的情況。你看,假設(shè)排水管線從起點(diǎn)到終點(diǎn)的布置,總長(zhǎng)兩千米平均分為兩段,一段一千米。起點(diǎn)到一千米處,設(shè)置反坡,道路升了一米。這時(shí)候就要求管線按照降一米的最小坡度計(jì)算,也就是說,起點(diǎn)管線覆土六十公分,到一千米處覆土一點(diǎn)六米。沒錯(cuò)吧?”
戚斌暄腦中回想了下大概圖形,就是近似大于號(hào)的兩條線,上邊的是道路,下邊的是排水管,然后對(duì)照要求,說道:“沒錯(cuò)?!?p> “好,那從一千米到兩千米處,道路坡度變成了下降兩米,大于最小坡度,所以按照代碼規(guī)定,管道坡度等于道路坡度,也就是一千米下降兩米,這個(gè)沒問題吧?”
戚斌暄腦中浮現(xiàn)出了兩個(gè)平行線,方向向右下,然后回到:“應(yīng)該也沒問題吧?”
孫木頭這時(shí)候笑著說道:“不,有問題。雖然按照代碼的規(guī)則是對(duì)的,也能滿足排水管布置的三個(gè)前提。但是,這不切合實(shí)際。你看,最開始覆土零點(diǎn)六米,中間段覆土變成了二點(diǎn)六米,后半段因?yàn)楣芫€和道路坡度一致,都是二點(diǎn)六米。沒錯(cuò)吧?”
“沒錯(cuò)?!?p> “好,假如我把后半段,管線坡度改為千分之一,這樣,一千米降一米,結(jié)合道路是一千米降兩米,終點(diǎn)覆土就變成了一點(diǎn)六米。照樣符合排水管布置的三個(gè)前提。沒錯(cuò)吧?所以說,那個(gè)代碼有bug,存在缺陷。”
“等等。”戚斌暄叫停,縷了下思路,又拿出一張紙劃拉了幾下,然后說道:“恩,你說的沒錯(cuò),這種情況確實(shí)存在。但是那也只能說明你那個(gè)情況是更加優(yōu)化的選擇吧。不能說原代碼存在缺陷吧?”
“不,這中間差別很大啊?!睂O沐接著解釋道:“你看,終點(diǎn)的覆土多了一米,說明了管道布置就深了一米。這個(gè)你能明白吧?然后呢,就費(fèi)工費(fèi)料費(fèi)錢,增加了投入。一千米顯不出來,但是城市管網(wǎng)可不止一千米,一千米之后的布置都要累計(jì)加上這挖深的一米,那浪費(fèi)的可就是天文數(shù)字了?!?p> “嘶——”戚斌暄這才明白問題出在哪里:“果然,一個(gè)bug,能損失這么多錢啊。”
孫沐嘆道:“是啊,但是不僅如此,浪費(fèi)錢是一個(gè)方面,還有就是可能導(dǎo)致管線布置不下去,造成方案失敗?!?p> “這倒不至于吧?”戚斌暄疑惑地問道:“按照原來的代碼,不是也能正常排水嗎?”
孫沐說道:“那就要結(jié)合出水口考慮了。出水口一般設(shè)置在河道,讓雨水順著河道就流走了。但是呢,河道可是有高度的。比方說比路面低三米,但是按照那個(gè)代碼,出水口成了低五米,那怎么流?反而成河水倒灌了。所以他那個(gè)很不合理?!?p> “這么一說我就明白了。那看來你發(fā)現(xiàn)的這個(gè)缺陷很重要啊。你提出來肯定能夠獲得領(lǐng)導(dǎo)重視的?!?p> 孫沐這時(shí)候耷拉著腦袋,說道:“不,我被開除了?!?p> “啥?”戚斌暄問道:“為什么???”
“我當(dāng)時(shí)跟組長(zhǎng)反映,然后組長(zhǎng)說這個(gè)代碼邏輯嚴(yán)謹(jǐn),沒問題。我跟他據(jù)理力爭(zhēng),解釋畫圖,怎么都說服不了他。最后他也急了,說我技術(shù)不行,還一根筋,不接受領(lǐng)導(dǎo)的正確建議,然后跟上級(jí)反映,把我開除了。”
“怎么這樣啊?”戚斌暄疑惑道:“不合理呀?!?p> “后來我同事私下里跟我說,那個(gè)代碼是組長(zhǎng)編的,還深受領(lǐng)導(dǎo)好評(píng)。我那是挖人家根基呢。哼,一個(gè)明明發(fā)現(xiàn)錯(cuò)誤,但是卻死不悔改的程序員,不是個(gè)真正的程序員?!?
鯤霸
本章中軟件的例子現(xiàn)實(shí)中確實(shí)存在,作者寫的也很用心,經(jīng)過反復(fù)推敲,盡量介紹的簡(jiǎn)單易懂、專業(yè)性不那么強(qiáng),讓讀者能夠一目了然。略有燒腦,見諒勿怪。