? ? ? 從我踏入大學(xué)的那一刻起损姜,我似乎就被打上工程師的烙印∈庀迹縱然我考上了公務(wù)員,但是我仍然無法放下那門技能汰蓉。用Python折騰文本處理绷蹲,用Django開發(fā)應(yīng)用監(jiān)控系統(tǒng),用utils來刷刷亞馬遜搶aptamil顾孽。我從不喜歡別人叫我碼農(nóng)祝钢,因?yàn)槲也皇悄欠N像農(nóng)民耕作代碼,日復(fù)一日的人若厚。我只認(rèn)同我是一名攻城獅拦英,因?yàn)樵谶@個(gè)領(lǐng)域,我有我獨(dú)特的性格测秸,我有我喜好疤估,不是所有的與計(jì)算機(jī)相關(guān)的東西我都愿意接觸。我只愿意和我認(rèn)為霎冯,精巧與優(yōu)雅的技術(shù)打交道铃拇,我追求人類的更高的生存狀態(tài),我希望把某一種語言發(fā)揮到極致沈撞,挖掘特性用最少的語句完成盡量多的事情慷荔。我從來不認(rèn)同那些默默加班筝家,放棄品位管削,用時(shí)間換空間的做法权她;我可以加班盼砍,甚至可以通宵迹缀,可能最后的產(chǎn)物只有幾句代碼筑公,但是絕不會(huì)把時(shí)間放在那些代碼的體力活上羔砾。很慶幸辣卒,我在中興和在電信的工作都是這樣的墓卦。雖然我不是一個(gè)極有天賦倦春,能力極強(qiáng)的攻城獅,但是對一般的工作還是可以應(yīng)付的落剪。google加stackoverflow的組合其實(shí)可以解決大部分的問題睁本,所以上不去google的時(shí)候,那就是陰天忠怖,大陰天呢堰。在我眼中,其實(shí)沒有太多太難的東西凡泣,只在于資源有沒有找對枉疼。編程只是個(gè)范型皮假,正如設(shè)計(jì)模式一樣,基于眾多范型的架構(gòu)元范型骂维。其實(shí)軟件業(yè)和建筑業(yè)是何其的相似惹资,都是一個(gè)集成了藝術(shù),文化航闺,結(jié)構(gòu)以及技術(shù)的產(chǎn)物褪测,甚至設(shè)計(jì)模式的想法都是來源于建筑業(yè)。技術(shù)高超的架構(gòu)師和設(shè)計(jì)師的價(jià)值就在于如何規(guī)劃與整合各個(gè)系統(tǒng)里頭的資源與功能潦刃,這種工作絕對不可能是先埋頭苦干先寫代碼就能出來的侮措。
? ? ? 而當(dāng)前的苦悶,正如人月神話的布魯克斯所說的那樣乖杠,項(xiàng)目就像一個(gè)巨獸和焦油坑的故事分扎,越掙扎陷得越深,陷得越深越掙扎胧洒;當(dāng)你拘泥于細(xì)節(jié)的時(shí)候畏吓,就如帶領(lǐng)一個(gè)外科醫(yī)師的手術(shù)團(tuán)隊(duì),光有主刀醫(yī)生略荡,沒有副手庵佣,麻醉師,護(hù)士以及好的工具汛兜。三年來巴粪,所有的專業(yè)技能沒能制止巨獸掉入一個(gè)個(gè)焦油坑,也沒能制止單人外科手術(shù)醫(yī)生團(tuán)隊(duì)的出現(xiàn)粥谬,更無法阻止宏大的國際空港變成小直升機(jī)場肛根。思成先生說,建筑師是幸福的漏策,因?yàn)樗梢钥吹胶芏嗝赖臇|西派哲;建筑師也是痛苦的,因?yàn)樗矔?huì)看到很多丑的東西掺喻。我的痛苦不止于看到很多丑的東西芭届,而是看著本來美的東西變丑卻無能為力「邪遥或許這是每個(gè)軟件工程師的痛苦褂乍,因?yàn)檫@份工作就要要求他考慮各種情況,各種異常即硼,而且這個(gè)思考模式同時(shí)也融入了他的生活逃片。同時(shí)包括我想放棄這份工作,換一種生活狀態(tài)只酥,我自己面臨巨大的痛苦與掙扎褥实,無不是各種switch和if-else的組合呀狼。
? ? ? ?每個(gè)受過算法訓(xùn)練或者系統(tǒng)學(xué)習(xí)過算法知識(shí)的工程師都會(huì)發(fā)現(xiàn),所有的算法都是當(dāng)下社會(huì)的抽象损离。從如何組織數(shù)據(jù)到數(shù)據(jù)結(jié)構(gòu)哥艇,到排序,到遍歷樹僻澎,遍歷圖她奥,分治法,對策論怎棱,其實(shí)哪一個(gè)不是公共管理政策的體現(xiàn)?這個(gè)說法延伸到計(jì)算機(jī)技術(shù)里頭都是想通的绷跑。我曾經(jīng)很想以散文的形式聊聊程序與人生拳恋,但是作為一個(gè)不太能算工程師的工程師,說這個(gè)有說服力么砸捏,如果是vczh說的話谬运,那就不一樣;而且我人生也不算成功或出彩垦藏,似乎也不具備什么說服力梆暖。如果說程序與悲劇人生,估計(jì)還是有點(diǎn)看頭掂骏,然而我也只是不順轰驳,離悲劇吧還有點(diǎn)遠(yuǎn),至少我忍受不了把美的東西破壞掉弟灼,且慢我人生雖然不是悲劇级解,但是我總是這些悲劇的觀眾,太難受了田绑。我只想談?wù)勥@其中的貪心算法勤哗,我們總會(huì)被教育要有長遠(yuǎn)的目光,要有長遠(yuǎn)的打算掩驱,可是有人定義過長遠(yuǎn)究竟是多長芒划?1m,1km還是1光年欧穴?明顯前面扯犢子了民逼,應(yīng)該是1年,5年還是10年還是20年苔可,抑或是一輩子缴挖?
假若猴子有一個(gè)容量為 80 單位的背包(猴子應(yīng)該不使用背包的,一笑!)焚辅,桌上有幾個(gè)蜜桃映屋,體積分別為 65苟鸯、35、35棚点、30早处、30、20 單位瘫析,作為一日工作的報(bào)酬砌梆,主人讓猴子隨意取走桌上的蜜桃,裝入背包內(nèi)贬循,惟不可貪心咸包,取走多於背包的容量,且放了任何一個(gè)蜜桃入背包之後杖虾,不可退出烂瘫。在未有量度背包容積和蜜桃的體積前,猴子按貪婪算法奇适,選擇了最大的一個(gè)桃坟比,放入背包。猴子往後再試嚷往,累皆失敗葛账,最後只能取走 65 單位的蜜桃,遂與 30 + 30 + 20 = 80 單位的最優(yōu)解無緣皮仁。
上面的兩個(gè)例子贷祈,分別就是貪心算法的不成功和成功的情況巩割,猴子選了當(dāng)前最大的桃子,卻不是利益化最大的組合付燥;旅行商要選擇旅游過程中最短的路徑宣谈,明顯是需要全遍歷才能完成的,但是每次都選最近的一個(gè)地點(diǎn)键科,卻很有可能是比較短的路徑闻丑,只是可能,但是卻很省事勋颖。所以貪心算法就是嗦嗡,人面臨選擇,總是選當(dāng)前利益最大化的饭玲,期望能出現(xiàn)旅行商那條較短的路徑(有可能的是最優(yōu)的侥祭,也有可能是最遠(yuǎn)的),但是如果出現(xiàn)猴子的情況,那就糟糕了矮冬,怎么說呢其實(shí)也不算太糟糕了谈宛,如果你不要求利益最大化的話。
回到選擇的問題上來胎署,如果你是我吆录,你會(huì)跳槽么?