昨天和今天收到了近兩百個多看電子書邀請碼,我須要編個小程序整理一下格式,去重合並,明天發佈到macshuo.com網站上,有須要電子書的讀者,您最好手疾眼快了,明天的MacTalk,不見不散。 程序員
另外,有讀者反映杭州內存快溢出了,暴雨,積水最深處達60公分,但願杭州的讀者出行注意安全。 算法
今天這篇有點長,耐心讀完會有收穫。 數據庫
若是你是個詩人,那你的人生就是一場風花雪月的事;若是你是個演員,除了學好《演員的自我修養以外》,你的人生就是一場接一場的劇本;若是你是個俠客,對不起,現代沒有俠客,你會被抓起來進行休假式治療;若是你是個程序員,好吧,你的人生將由一行行飄逸的代碼和捉摸不定的bug組成,所謂編程人生,就是你的一輩子已經與編程密不可分,爲代碼歡笑,爲bug憂傷。 編程
那一年你初入江湖,你不懂什麼是彙編什麼是語言,你搞不懂Lisp和Smalltalk的區別,爲何C++比C多了兩個加號就成了對象,2000年之後那麼多人都在用Java,如今卻說Objective-C是最貴的語言,這特麼又是爲毛? 小程序
你對着大海說,我要學盡天下武功!大海對你說,你算術不太好~~~ 後端
孩紙,世界上的編程語言成百上千,經常使用的也有數十種,光學會這些語言你的時間就得用微積分計算,學完之後估計手抖的都敲不動鍵盤了,哪還有時間創造奇蹟?更別說除了語言你還得掌握前端後端UI體驗,這個數據庫那個操做系統balabala…… 安全
你在知道了這些真相之後,依然癡心不改,抹乾眼淚衝到編程兵器排行榜「TIOBE Index」面前,挑選了前十名開始勤學苦練。你在滿天星斗的夜色中編寫C程序,在清晨的微光中調試算法,上午你敲打鍵盤輸出日誌,中午吃完五右四分之一口米飯以後就匆匆離開,由於你要去看看系統爲何崩潰……你學會了五種語言、三種操做系統和四種數據庫,你寫了一個MIS兩個OA三個App,你以爲你開始了編程人生,實際上是你的人生被編程了,你被代碼驅動和驅趕,你變得疲憊不堪。 微信
此次你在清晨的寒風裏對着高山說,這特麼是爲何?高山對你說,由於你不懂元編程! 編程語言
好吧,扯了這麼多實際上是想和你們談談元編程的事兒。元編程?估計小白一聽又懵了,啥是元編程呢?與雲計算、大數據不一樣,元編程並非一個抽象的概念和名詞,這裏面表明了不少務實的技術,相伴而行的概念還有元數據。
元在英文裏就是meta,元編程就是meta programming,元數據就是meta data。元編程就是可以操做代碼的代碼,元數據就是可以描述數據的數據。
聽完這樣一個介紹,你們是否更加暈菜了呢?若是回答是確定的,那麼效果達到了。
在接着介紹元編程以前,咱們先看一下代碼的世界。若是把代碼比做一座小鎮,那麼其中的類、函數、方法、變量、代碼塊、宏,就是小鎮上安居樂業的居民,他們相互協做,相互依賴,一塊兒建設着有XX特點的美好家園。
在可以支持元編程的語言世界裏,你能夠和這些居民打招呼,還能夠進行內省(introspection),獲取其自身的一些信息和行爲,甚至你可以爲這些居民動態增長一些能力和行爲,或者在這些居民奔跑的時候改變他們的行爲,或者建立一些新的居民。這樣的語言有Ruby、Python等。
在不支持元編程的語言世界裏,你們分爲兩個狀態,編譯時和運行時,一旦編譯器完成了本身的工做,這些方法和函數就看不見了,他們成爲內存中的幽靈,你只能經過固定的方式使用他們,而沒法獲取他們自身的信息。固然,即便是這樣的語言,爲了增長編程的靈活性,也經過各類方式來提高元編程的能力,好比Java和C#笨手笨腳的使用反射方式,C++則經過模板方式,但古老的C就無能爲力了,由於他沒有元編程能力。
如今咱們就知道了,編程語言雖然各有側重,可是語言和語言之間的能力和特色區別仍是很大的,無論你如今使用的是什麼語言,我都建議大家去學一門具有原生的元編程能力的語言,好比Ruby、Python、Lisp、Objective-C等。
我第一次接觸元編程和元數據仍是在一家外企,那家外企的名字和火箭有關,他們有不少年紀一大把的老程序員,聽說是制定corba標準的牛人,他們在這個火箭公司開發了一套分佈式的軟件平臺,名字不能提,由於老外的版權意識太強嫋。我一位前同事移民國外,只是在本身的開源項目引用了一點平臺文檔,結果一紙法院傳票追殺到異國他鄉,並且直接致使這個同事的上司被辭退。「好吧,上司不是我,不過我當時確實想過,若是我引用了他們的代碼,也許會見到真的殺手吧。」
這套平臺的持久化、權限和業務邏輯引擎都採用了元編程和元數據的方式實現,實現語言是Python,當時看到那些優雅的代碼,我再次感覺到編程的魔力,原來代碼還能夠這樣寫!我在那個外企的兩點收穫,第一是平臺和元編程,第二是版權意識。後來當我有機會主導從頭構建一個軟件開發平臺的時候,我吸收了這些思想和經驗,基於元編程的思路構建了平臺組件數據字典,你能夠編寫少許代碼或不編寫代碼就生成各類業務應用,這就是操做代碼的代碼,描述數據的數據。
這時候就有童靴問了,你囉哩囉嗦扯了這麼多元編程,幹嗎標題叫作人生元編程?
由於不管是編程仍是人生,都特麼是相通的,想清楚了這一點,你就會以爲百無聊賴,由於萬事萬物要麼是熊樣要麼是鳥樣,都脫不出那個框框。具有元編程的語言就具有更強大的操控本身的能力,能夠自省,能夠反射,能夠動態改變和控制本身;具有人生元編程能力的人,一樣有自省能力,隨時檢查和控制自身的情緒和行爲,思考本身的想法,改變大腦的動機。
舉個簡單的例子,當你的理智告訴本身9點就必須開始看書學習的時候,你的大腦會對你說,「親,能夠再看會電視呦,你看沙發都這麼舒服……」
缺少元編程能力的回答是「那……就再看會」,具有元編程能力的回答是「滾!」
扯淡完畢,你們感覺一下……
文章內容來自微信公衆帳號:MacTalk
· 微信號:sagacity-mac
· 回覆 m 能夠查閱全部歷史文章和Mac Tips
· Web站點:macshuo.com
若是您但願持續看到MacTalk,能夠點擊{閱讀原文}對做者進行小額贊助,最近遭遇多起大額捐助,再次感謝,其實來杯咖啡就行,想捐助美刀的,去macshuo.com看看PayPal