這篇文章的原文來自:英文原文
做者仿照《小王子》中的情節,生動有趣的闡述了小printf從編程小白到專家的成長曆程。這是我第一次嘗試翻譯文章,確定有不少不足之處,情不要像文中的第五章中的程序員那樣,但願您能夠留言給我,可讓這篇文章變的更好!html
這個故事結構和《小王子》同樣,以一個新手程序員的視角,講述他遇到的不一樣風格程序員的故事。共十一章,我已經翻譯了九章。python
我很是幸運出生在一個電腦和電子遊戲尚未廣泛的時代。因此我能夠和個人小夥伴們一塊兒玩耍,同時發明屬於咱們的遊戲。程序員
咱們十分會玩:用樹枝作成'🏹️'。咱們能夠用樹枝作出任何東西,除'迴旋鏢'。由於你把樹枝扔出去,你須要本身撿回來。(做者這個故事是活躍氣氛嗎?😓)redis
當我長大了,上面說的遊戲變得很幼稚。你不能把一個鬆塔當成一個手榴彈;僞裝擁有神奇的魔法;當其餘孩子以爲做爲一個成年人很酷。你最終會迫於壓力而長大。不過總的來講這也是一個很是幸運的童年。sql
偶然的一次機會我接觸了電子遊戲和電腦。你可能想沉浸在這個虛擬的世界,這會毀了你。mongodb
大多數電子遊戲:你不能創造,只能反應,浪費你的時間。我在十多歲的時候,參加過'即興表演'。在哪裏我能夠發揮個人創造性。docker
我大學的專業是'多媒體',可是我最終卻從事'編程'工做。我以爲編程is amazing!我能夠發揮個人創造性,同時又能夠掙錢!以後我作了個人第一個遊戲。數據庫
"這不是一個真正的電子遊戲。"別人跟我說:"它只是一個html的表單,並且代碼須要簡化。"編程
這席話使我有一些沮喪,它花費了不少心思和時間。可是,我意識到若是我想作出被人們承認的東西的話,我還須要學習更多知識。小程序
我須要學習真正的編程。從GUI工具裏的JS,轉到更好的語言:像PHP。因此我先學習了Js,後來又去學習PHP,可是一切並非很順利,其餘人給個人建議去試試python。最後,我學習的是python(🎊我是這樣走上python之路的🍻)。
可是python中高深一些的東西:'lambdas'和'面向對象編程',讓我雲裏霧裏的。後來別人建議我去讀一下《計算機程序的構造和解釋》,由於它是編程的基礎入門聖經。
就這樣,我知道了Scheme,後來我又去學習C語言。由於大多數的程序員都會C,同時我旁聽了咱們學校的計算機課程,跟着他們一塊兒學習。由於,真正的程序員都知道數據結構和數學,可是這些我只略懂皮毛。我開始讀技術文章和書,由於程序員的知識更新太快。
通過一段時間,我掌握了Erlang,從而開始了個人職業生涯。(這篇文章的做者寫了一本:Erlang入門書)。十分奇怪的是:我這個沒有用Erlang作過任何生產級別的開發的人,卻獲得了一份教Erlang的工做。
因此我忙於到世界各地演講,教別人(誇誇其談)。可是,你們彷佛都相信我是一個真正的程序員。由於,我講的這些事情大多都和編程無關。
一天,我結束了一個會議回家,飛機晚點。我憤怒的敲擊着鍵盤,一個柔弱的聲音打斷了我:
"你好,能請你給我設計一個系統嗎?"
我:"什麼?"
"給我設計一個系統!"
我對這個請求很驚訝。我環視四周,發現一個渴望成爲開發者的孩子。他叫'printf'(主角閃亮登場)。我以爲這個名字很傻。他的樣子以下圖:
"我還不是很瞭解計算機,可是你好像是計算機方面的專家。我但願寫一個blog程序,人們可使用和訪問它。求求你幫我設計一個系統!"
這是個使人驚訝的請求,而且我已經二十多個小時沒睡了。我不是徹底理解他所說的。我告訴他,作一個系統十分困難。我不知道他想要作什麼:須要支持多少訪問者;在哪裏部署;因此我沒法根據他提供的少許信息,設計一個合適的系統。
"沒有關係,給我設計一個系統吧。"
因此我作了下面這幅結構圖:
他看了以後說:"不,這個系統還不夠好。請給我再設計一個別的。"
因此我又作了下面這個:
而後我給他講解這個系統的工做原理。
個人新朋友 (printf)十分禮貌的說:"這不是我想要的,它又太複雜並且好多東西都是我不須要的。"
我感到十分不爽,我設計的這個系統考慮到了:冗餘、監控、備份、緩存、負載、支付、故障轉移、部署簡單等等。我設計的這個系統都已經能夠得到一份可觀的諮詢費用了!我已經失去耐心了,因此我就畫了這個:
我又告訴他:"這是你設計的系統,你要的系統在這個黑盒子裏。"我但願這個滑稽的答案,能夠打發他。可是他的回覆讓我十分驚訝:
"這正是我想要的!"
這就是我和小printf相識的過程。
過了一段時間,我知道了這個小鬼的編程水平。在他的代碼倉庫只有些小程序、網站的小demo、瑣碎的程序片斷。都是些不值得一提的東西。
以後他開始着手作一個須要不少模塊的大型程序。這個程序須要socket、磁盤讀寫、用到真正的數據庫。當它第一次跑起來的時候,小printf十分興奮。可是,這個程序還不夠好。
這個程序須要重構、更好的測試、文檔、分析。它只運行了一段時間就崩潰了。而後一次,又一次的崩潰!
程序的設置是錯誤的,日誌不工做、磁盤速度不穩定、網絡卡頓、有bug、編碼混亂、數據庫須要清理、證書過時、沒有異常處理致使問題找不到根源。
真的想麪條同樣一團糟。
小printf跟我說:"經過這件事,我發現本身簡直是一無所知!這個程序原本是根據個人須要寫的。我原來的想法太天真了,後來我修復bug的時間和這個程序給我帶來的便利根本不成正比!最後,變得跟我原來想的一點都不同。雖然這樣,我仍然認爲這件事情讓我收穫了不少。"
一天早上,他決定離開我這裏。"再見。"小printf跟我作了最後的作別。他想要出去看看世界,看看其餘人寫的程序。
小printf寫的服務,最後由於不斷增長的日誌,致使硬盤沒有空間,完全的崩潰了。
小printf走進了一個辦公樓,想尋找有經驗的程序員取經,得到一些建議和幫助。
他遇到一個驕傲的高級程序員,並且自我感受良好。
傲慢的高級程序員說:"哎,過來新手!歡迎來到我所擅長領域,在這個領域我是專家!"
"專家?"小printf問到:"專家的意思是:能夠編寫任何程序嗎?"
"是的!"傲慢的高級程序員回答道,接着他又說:"準確的說,應該是大多數程序。由於我只編寫有價值的程序,我不會浪費個人時間在沒有意義的小程序上。不少程序我都沒有寫過,可是他們都難不倒我!"
"額,因此你能夠幫我完善個人程序?"小print問到,以後他開始闡述他的網站系統,可是傲慢的高級程序員打斷了他:
"對不起,我以爲你的網站系統沒有一點價值。"
小printf:"爲何?"
"經驗,我擅長編寫我開發的東西,我也只作我擅長的領域的開發。我須要確保我在個人領域的永遠有價值。這叫作工做保障,也叫作適者生存。但這就是個人風格。我只專一於個人領域!"
小printf:"那你爲何不幫我呢?"
"花費個人時間去幫助你,意味着我須要花費精力去幫助別人,而不是提升本身----這對我來講不是一個好的主意。個人建議是:本身多努力,本身弄懂。還能夠塑造你本身的心性"
小printf:"你說的方法,好想不是很高效。。。"
"你能夠到學校去學,或者自學。事實上這種方法能夠淘汰那些懶惰,只喜歡簡單的事情的人。真正渴望知識的人才能成功!"
小printf:"你認爲合做和同事不能幫助你嗎?"
"不,我並非這個意思。我作好的工做狀態是:獨立空間,沒有讓我分心的事。每次我和同事合做的時候,都是一次很差的經歷。以往的經驗:最好的辦法是:把他們的代碼拿過來重寫。而後就能夠了!"
小printf對這個不喜歡幫助別人的專家感到十分驚訝,不只如此,他還因人爲別人的技術不行而惱火。這個專家眼界是狹隘的,他只關心本身擅長的領域。活在本身的世界裏。
小printf:"我明白了,我想我很慶幸你沒有幫助我。"
"你什麼意思?"傲慢的專家問到,貌似他的權威受到了威脅:"你不承認我,你是在質疑我嗎?"
小printf:"並非這樣,就像你以爲我是一個累贅,使人惱怒的同樣。我是來尋找幫助的,而不是來找罵的。"
說完以後,小printf飛快的跑出了傲慢專家的辦公室。當小printf離開後,這個專家又從新找回了他所擅長領域的權威,同時自我感受良好。
而後,小printf又走進了另一個辦公室。裏面有一個男士,他的座位周圍都是精裝厚厚的書籍(例如代碼大全這種書)。
小printf:"先生,你有好多書啊!"
"是的,我想這些都是程序員必看的書籍,若是你沒看過這些,你很難成爲'大牛'(專業人士)。"
小printf:"我想我如今仍是很菜,請問這些書裏面你最喜歡哪本?"
"哦,是這樣的這些書大多數我尚未讀過。"
小printf:"那你如今是個'大牛'嗎?"
"不,我還不是。"這個程序員很驕傲的說:"我實際上是一個很垃圾的程序員。"
小printf:"這太丟人了,我正在努力變強。"
"你聽過'達克效應'嗎?"
小printf:"那是什麼?"
"簡單的說就是:能力強的人老是低估本身,能力弱的人老是高估本身。"
小printf:"也就是說,若是我以爲本身在變強,其實我並無變強。"
"是的,你說的很是正確。你極可能在原地踏步。另外一方面,我宣揚我是一個很糟糕的程序員,但根據'達克效應'。我是低估了我本身,因此我是一個好的程序員,你怎麼看?"
小printf:"我。。。額"
"這就是爲何程序員都喜歡自嘲(稱本身是碼農也算吧?)。當你認爲你足夠好了,你就放鬆了,也就沒有前進的動力。"(這句話我仍是很贊同的👍)
小printf:"你的意思是:一旦自我感受良好,也就是正在走向失敗,因該時刻以爲本身還不夠好。"
"是的,可是用着這種方式應對全部的事很危險,若是你尚未拿到offer。這種方式會讓你顯的聰明,可是沒有任何實際用途,別人不會由於你顯的聰明就僱傭你。"
小printf:"你的意思是?"
"比方說:我在網上看到一個我不喜歡的項目。我留言說項目一無可取,可是不明確的指出哪裏很差。最後你還能夠說這個項目的做者是笨蛋,也沒有人管你。"
小printf:"可是這樣作有什麼好處呢?"
"我想讓他們知道他們走上歧途了,卻又不明確的指出來。這表現的我比他們厲害。然而他們毫無頭緒,像霧裏看花。沒有人能明白個人意思。哇咔咔"
小printf:"當別人請教你的問題,你不會的時候,你會怎麼辦?"
"這種狀況下你就說處處都是問題,還有不少的不完善的事情要作,總之就是轉移話題。然他們感受絕望,最後仍是要他們本身解決。"
小printf:"因此這就是你的立場?這是你的一向做風?你會的問題裝做對此無能爲力,使得真正沒法解決這個問題的人抓狂;當你遇到不會的問題時,你裝做很瞭解,使得別人根據你的建議改善其它的地方,而與真理相行漸遠,浪費時間"
"不少狀況下,才能不是最重要的。但口碑很重要。人們僱傭朋友,不被喜歡的人和可有可無的人會被第一個被炒魷魚(😤MLGB)。要不就改變環境,改不了就要適應,適應不了就被淘汰。這就是'社會'。企業中就是這樣,學術屆沒準也是。作這行,你認識誰,學會推銷本身,創建本身的聲望。這樣你才能在企業裏站住腳。"
小printf:"若是在企業中工做是這麼噁心,要給別人'使絆'。那麼我真不想在這種環境下工做!(黑暗的辦公室政治,還好我尚未遇到🙊)"
到了吃午餐的時間,小printf打斷了一個貌似忘記吃午餐的人。他桌子上的三明治已經涼了,可是他仍是坐在桌子前面盯着他的屏幕。
他好像十分的忙,可是沒人知道他在作什麼。
小printf:"若是主數據庫掛掉了,從數據庫也會掛掉嗎?"(建立主從數據庫是爲了減小DOWN機時間,讓數據庫能夠一直處於工做狀態中)
"你運行的全部東西,或早或晚都會掛掉。"
小printf:"你以往的經歷告訴你這一切都會失敗?"
"是的,不只如此。全部的大系統,都會在特定的時間出現問題。"(就像千年蟲問題?🤔)
小printf:"那麼,作一個可靠的系統,都須要作什麼?"
那我的忙於他本身的事情,沒有理會小printf。
小printf又問了一次:"作一個可靠的系統,都須要作什麼?"
那我的正在嘗試解決產品中的一個問題,可是小printf還一直問個不停,同時他尚未吃午餐。
因此他不耐煩甚至粗魯的吼道:"這根本不可能,編程就是shit💩。"
小printf倒吸了一口氣,半天說不出一句話。
小printf💢憤怒的回擊道:"我不相信你說的。程序是脆弱的沒錯,可是程序員能夠改善這一點,同時作出更好和有用的東西"
那我的沒有任何回答,他在翻閱文檔,嘗試從新啓動一個新的集羣,可是狀況卻愈來愈糟糕。
小printf:"而且你應該相信有好的可靠的程。。"
"不可能"那我的打斷了小printf,接着說道:"我不相信有可靠或者好的的程序!根本不可能!這是個人第一個感受,由於我正在處理一個垃圾的系統。你沒看見我想法設法地讓這個東西跑起來嗎?事實如此!"
小printf很震驚的看着他說道:"事實如此?說的好像本身是個專家!是你本身把一切都搞的很糟糕。這世界上有上百萬的和久經考驗的程序,它們也有bug,也崩潰。可是人們仍是須要它們,使用它們。據我所知不少程序是沒有問題的。出現問題的緣由大可能是由於電腦的環境配置問題,或者一個錯誤的操做形成的。你不認爲這纔是問題的所在嗎?"
那我的聽完啞口無言。
小printf來到了第四個地方,遇到了一我的,他的電腦幾乎被便籤蓋滿了,沒有人知道他在幹什麼。
"motor-mvc, quadrangular JS, GoQuery, cometeor, some japanese soundy thing, ..."
小printf打斷了他的自言自語說道:"你好,你在幹什麼?"
"alchemist, bongodb, mochascript, walktime.js, portasql, ...",哪一個男士繼續自言自語
小printf提升了音量又問了一次:"你在幹什麼?"
"哦,我正在嘗試新的框架,工具和語言。"
小printf:"哇,你接觸的東西好新鮮啊!大多數人還都沒有據說過這些。"
"是的,這個行業跟新很快!"他看了一眼他的手機接着又說到:"看,cardboard.io
框架又推出了3.5版本,它宣佈不兼容3.4了。於此同時社區中已經有4個衍生版本了。我必須從他們之中挑一個。"
小printf:"你這麼作爲了什麼?"
"我是最先的嚐鮮者,若是你不保持更新技能樹,仍是用老掉牙的:COBOL或者MUMPS(兩門老掉牙的編程語言🤖)。你還想抓住成功的契機,搶佔先機,乘勢而起?"
小printf:"你成功的預測過之後的熱門技術嗎?"
"是的!我發現Rails的時候它還很小,我學會Node.js的時候它尚未流行。我是redis,mongodb和riak的內測用戶。我是第一批試用vagrant的用戶,而後我轉去使用docker,可是如今我全身心的關注unikernels。。"
小printf:"太酷了!你是第一批試用這些的技術的人,你從中獲得了什麼回報?"
"額,並無。當Rails壯大的時候,我就去關注另外的新鮮東西了。一樣的,其餘的幾門技術我也是這樣的(他不獨寵一個,而是雨露均沾🙈)。我如今把但願寄託在unikernels上。"
小printf沉思了一會說到:"你用這些框架和工具都解決了什麼問題?"
"我每次都確保不使用不成熟的東西,由於不能用公司作賭注。這一點十分重要,由於若是你使用最新的技術,你就可能招不到人,而不關注新的技術,有可能脫離時代的步伐。因此咱們鼓勵學習新的技術。"
小printf:"這很是有趣。"
"在這個飛速發展的世界中,若是你想參加這場遊戲,你須要有先進的技術。不然你就會被時代淘汰,沒有人想被時代淘汰。"
小printf:"不,你誤解個人意思了,個人意思是:好的工具是爲了解決問題而被製造出來的。可是你卻盲目追求新的技術,而不是爲了什麼實際的目的。"
聽完這些話,哪一個人呆住了,小printf跳躍着離開了這個房間。
小printf來到了下一個辦公室,這裏又一個疲憊的女員工。桌子上雜亂無章,整我的無精打彩,瘋狂的打字。
小printf:"你好。"
這個女士沒有停下了她的手頭工做,繼續瘋狂的打字。
小printf又打了一遍招呼:"你好?"
女士此次停下了,拿起一瓶咖啡猛灌了一口。
"我有一份十分糟糕的工做。"她說:"我是devops(開發,運維,測試於一體的職位)。剛開始的時候還好,原來我大多數時間進行開發,而後抽出一些時間修復bug。可是,狀況變的愈來愈糟糕,bug開始接連不斷。爲了擺脫這種狀況,同時在規定時間內完成。我不得不使用一些'奇技淫巧'。"
小printf:"你爲何不顧人來幫你?"
"我很擅長作這些事情。我已經習慣這一切都在個人的掌控之下。還有由於他們已經習慣我能夠hold一切,若是我提出我本身沒法繼續掌控全局的之後,他們很容易認爲我在偷懶。"
小printf:"這真是叫人悲傷的故事。"
"事實就是這樣子。由於你是最熟悉這些問題(bug🔥)的人,你只能變的愈來愈累,直到你的boss招了一我的頂替你原來的工做,這是惟一出路。但若是你擔憂其餘人修改你寫的東西時候遇到問題,你只能幫助別人改一個又一個的bug,固然這些都是你討厭的事情。直到你對這一切感到麻木。"
小printf:"你真不幸。"
這位女士又被叫去工做了。
小printf自言自語道:"這個女人會被我原來遇到的那些人嘲笑的:那個高級專家(只專一於本身擅長的領域),搖滾開發者(過度追求新技術的人),故作高深的程序員(那個周圍都是大頭書的裝X程序員)。儘管他是這些人裏面惟一樂於助人的。或許是由於,她認爲一切事情仍是親力親爲的好。"