在應用開發如此方便的今天,我老是會聽到有些人有這樣的疑問,「只是作 應用 開發的話,還有沒有必要學習諸如操做系統,編譯原理這樣的課程呢?」,亦或是會聽到這樣的話,「會用這個框架就好了,它底層是怎麼實現的不用去管。」還記得我在大一學 C 語言的時候,就聽過有同窗說我之後是想從事 Java 開發的,C 語言這種學來應付一下考試就行,指針什麼的其餘語言又沒有,就不用去管啦。html
真的是這樣嗎?恰好今天看到一個有意思的故事,從故事中我看到了答案,這個故事是是艾薩克·阿西莫夫 的科幻巨做《基地》中的一個片斷。故事是這樣的:程序員
在銀河系中,隨着戰爭的蔓延,文明從銀河系邊緣開始逐漸退化,許多星球雖然還保留着核電站等高科技產品,可是已經不知道它們是如何運做的。算法
而有這樣一顆小行星,咱們暫且稱之爲 科技星 吧,在大戰爆發前它蒐集了銀河系中的各類科學文獻,而且匯聚了一大批的頂尖科學家。這顆小行星沒有被捲入戰爭,而是將技術一直傳承下去。編程
科技星周圍的星球覬覦它所擁有的高科技,想將之奪取。而科技星又沒有自保的武裝力量,在這種狀況下,科技星如何自保呢?這裏最有意思的地方,正是科技星所使用的科技宗教的戰略。併發
當後來其餘星球上的高科技出現問題的時候,會向科技星求救。科技星就會派遣工程師前去維修,可是呢,他們將各類身份都進行包裝,好比,工程師不叫作工程師,而是叫作「僧侶」,核電站也不叫作核電站,而是叫「聖殿」,維修也不叫作「維修」,而是叫作「祈禱」,也就是說,對核電站維修這一項工做徹底被宗教化了!框架
而此時科技星提供的說法是這樣,由於這顆星球上的人作了壞事,好比違反法規,發動戰爭等等,觸犯了神靈,因此神靈剝奪了他們使用能源的權力。而若是想要恢復能源,就必須對本身的行爲懺悔,祈求神靈的原諒。因此當工程師進入核電站進行維修的時候,全部的星球居民一塊兒下跪祈禱,而當核電站恢復的時候,你們紛紛稱頌神的偉大。機器學習
爲何那些擁有核電站星球的人們會對來維修的工程師「膜拜祈禱」呢?其根本緣由仍是在於核電站這樣的高科技對他們而言是神祕的,未知的東西。 儘管他們擁有這樣高科技的東西,卻沒有與之匹配的認知和知識儲備。oop
再回過頭來看看一開始的問題,你是否明悟了呢?咱們也是掌握着上層應用框架這種「高科技」,咱們知道怎麼去配置,怎麼去調用,就像上面故事中普通星球的人知道怎麼啓動,關閉核電站同樣。但一旦出了沒法解決的問題,或者是遇到了什麼性能瓶頸,彷佛咱們能作的,只能去各類技術羣裏,找那些大神「祈禱」了。性能
在今天,人工智能這個名詞已經逐漸爲人們所熟知。而將來,人工智能的應用場景只會愈來愈普遍,面向 AI 編程也必然會是一種趨勢。學習
那麼如今從事於 Web 或是 Android 等應用開發的程序員須要去學習機器學習或是深度學習相關的知識嗎?個人回答是 YES 。有人說我又不想從事於人工智能的開發工做,爲何還要去學它呢呢?我想說的是,爲了不成爲上面故事中那些普通星球的居民。再過幾年,當你碰到一個會跟你說話的機器人或是更加奇妙的事物的時候,咱們應該是對它的一些實現細節感興趣,會有探究的慾望。而不是在那裏感慨着造物主真偉大,竟能造出一個這樣神奇的東西。
話又說回來,在機器學習或是深度學習的學習過程當中其實也很容易陷入到這種只會調用上層 API 而不知底層原理模型的境地。由於在今天,有不少庫類均可以讓你輕鬆實現一條語句就直接使用某個算法模型,因此不少人就再也不專一於對底層模型原理的學習。在機器學習的學習過程當中,相信大多數人應該都看過這樣一張圖,
咱們來看看這張圖中 Hacking Skills 和 Substantive Expertise 的交界處,這裏叫 Danger Zone,即危險區。意思是若是你只會編程和調用機器學習的 API,調參數,那麼你就處於一種很危險的境地。
一個好的程序員,不該當知足於學習到了什麼新的技術或者學習了什麼新的算法模型。真正有價值的東西,每每是那些人們不樂意去學的底層的,枯燥的內容。
咱們應該認識到,單單隻會上層應用開發或只會調包調模型而不懂底層原理,那這種開發人員的知識體系便如空中閣樓。看起來華麗壯觀,但實際上卻地基不穩。一旦出現一點問題這座閣樓便會頃刻崩塌,而且機關用盡,只能處處「祈禱」。
對未知的事務保持好奇,不斷學習,探究事物的本質,原理。在我看來,這纔是程序員之道。
推薦閱讀 :
從分治算法到 MapReduce
Actor併發編程模型淺析
大數據存儲的進化史 --從 RAID 到 Hadoop Hdfs