致敬一個漸行漸遠的時代!

    昨天一個老同事聊天時,隨意的說了一句話:你變了。急忙問:哪兒變啦?答:變光滑了,不是那個鋒芒必露、仗劍江湖、砍砍殺殺的那個你了。稍作猶豫馬上附和道:沒辦法,老了!老了!
    思考良久,終於還是決定把自己的想法寫一下,放15年前,這肯定是未卜先知。現在則是馬後炮或者說是“事後諸葛亮”了,管它呢,當成吐槽吧。
一、代差的意義
    說起代差,腦袋裏印象最深刻的是“殲8大戰F22”的模擬場景。當然這個場景受時代、技術、環境因素影響太多,在今天看來幾乎是一個笑話。這不是說在特定環境下殲8不能贏下F22,而是從概率上講太低了,有多低呢?我很想說趨近0的,但還是給個0.01吧,畢竟瞎貓還能碰到死耗子呢。
    另一個例子就是燧發槍,戰爭進入熱兵器(火器)時代的典型代表。它所面對的是冷兵器時代的弓和弩,優勢有多少,歷史已經給與了現實的評定。退一萬步講,即使是面對現代科技武裝到牙齒的滑輪弓弩,燧發槍依然擁有優勢,不會輕易認輸!
    舉了兩個例子,以我對代差的粗淺認識,個人覺得代差意味着:碾壓、效率、進步!本來想展開仔細寫寫的,算了,此處略去N千字。
    其實有一種現象一直在技術圈不斷重複上演:不停追逐最新的技術!曾經有無數“先賢”、“大師”諄諄教導:要打好基礎,要打好基礎......不知道爲什麼,我現在特別想說的一句話就是:我去年買了個大表!從作戰思想、體系、任務分配、戰鬥效果來看,我實在看不出多飛5年的殲8飛行員對於F22有任何技術性的提升!或者說多練習5年的弓弩對燧發槍的技術提高有決定性影響!相反,我看到的是慣性思維帶來的巨大逆向隱患!因爲不適應新思想新體系下的戰爭工具而導致的致命性結果!這就跟開着F22用小米加步槍最終拼刺刀的思維來打現代化戰爭一樣,結果不言而喻。對於這樣的敗者,不但不應同情,而且還得踩上一萬隻腳,吐上一口唾沫,順便說一句:活該!
    那麼,最新的技術帶來了什麼?你已經看到了,是最新的作戰思想、作戰體系、任務分配、戰鬥效果,它對前代來說,是徹底碾壓!是效率提升!是科技進步!時間倒退23年,我們看到的是以VCL爲代表的最新一代的集成開發工具RAD所帶來的碾壓,效率,進步!20多年過去了,記憶也都越來越模糊了。
二、簡單但又不簡單的技術
    在說了無數的廢話之後,終於要直面我們今天的主角了,嗯,它的名字叫......Lazarus?算了,我忘了,這GRD的沒事就喜歡查水錶。還喜歡用威脅信的方式查水錶。。。所以,我還是直接吐槽吧。
    23年前,VCL做爲新一代的類庫,給開發者以極大的方便,至少從表面上看起來是十分簡單優雅的,不過,真要仔細深入下去,那就是一個非常非常不簡單的技術了,此處省略N千字。
    把時間拉回來,我們回到現在,看看一些有趣的事情吧。
    高能預警!高能預警!高能預警!下面文字將會給極端FANS帶來非常嚴重的傷害,畢竟是一場互相PK甚至是1 v N的亂戰,因此,請相關人員迅速撤離戰場,以免造成誤傷!


    吹牛吹了半天,咱們還是寫個程序吧:Hello,World!Are you kidding me?作爲一個無所不能、無所不知、戰無不勝、攻無不克的強大開發工具,你就天天玩Hello,World?好吧,好吧,我打開Win7自帶的計算器程序,寫這個吧!是不是很簡單?是不是很簡單?是不是很簡單?所有認爲簡單的都出門右轉面壁思過10分鐘!因爲我們今天要講的是不簡單!Are you ok?(這梗出現的地方不太對吧)。不管那麼多了,咱先用原版計算器算個數學題吧:
    sqrt(2)+(sqrt(3))=3.1462643699419723423291350657156
嗯,這是我電腦上的結果,這個結果包含兩個內容:高精度計算和公式解析。有關高精度計算的內容(什麼apfloat,mpfr等等)咱今天就不說了,單說帶一個讓人蛋疼加噁心的dll吧。嬸可忍但叔不能忍啊,咱這麼強大,自己寫個類庫算了!嗯,同學,剛好我手頭有數論的基礎算法書籍,看你骨骼清奇就便宜賣你了,以後維護世界和平的任務就交給你了!啥?你說沒事?咱還有大招:靜態聯編!好吧,假如這招也不行的話。。。算了,都TMD這麼折騰了,我幹嘛還要給自己找這麼多麻煩,直接拿c開發不就得了。。。恭喜,成就+1:打開了新世界的大門!
    好了,這個計算器的故事只能先寫到這兒了(其實這裏面還有很多很多可以折騰的地方,同時,可以展開的內容也是非常非常多的,多得超乎想像,有興趣的同學可以深入一下),爲了不變成槓精,咱得把一些事情說明白:1.高水平的技術是由高水平的人員開發的,但總體來說這些人員數目也是有限的,這就意味着很多情況下不可能維護同一系統的多個版本,所以爲了保證兼容性,有可能只維護了一個版本,具體到它的衍生版,那也不是一件很容易的事情。2.只有越開放的系統越有可能獲得更廣泛的支持。3.同2一樣,生態環境影響巨大,這意味着更加龐大的投入->產出->收穫的良性循環。
    單純從一件簡單的事情上,透漏出的是完全不同的不簡單!最後再槓一下吧:你說了這麼多,這有個毛用?純粹是鑽牛角尖!好吧,曾經我也認爲32位整數是夠用的......


    扯得有點遠,咱們轉戰一下高端大氣上檔次的服務器開發。首先面對的是高可靠性,高穩定性,其次纔是高性能。以最簡單的HTTP協議爲例(又是一個簡單又不簡單的悲劇),無非就是文本解析嗎,這還不簡單?好吧,當你明白任務處理、內存管理、路由規則並解決一大堆所謂的多線程瓶頸時,恭喜你,有沒有想哭的感覺?即使是面對gzip這種最簡單的坑時,你心裏可有一絲絲蛋疼的滋味?如果加上所謂的簡單的(Http)s,你是不是要倒吸一口涼氣?就算這一切都完美解決了,你確定穩定性沒問題了嗎?壓力下的穩定性有時都不能說明啥問題,否則也不會有專門以此爲專業的自動化測試工具和服務商了。好吧,這個坑好大好大,每一個填起來都巨費精力。最後,極有可能同上面那個故事一樣:恭喜,成就+1......
    在這個故事中,我印象最深的槓是關於“粘包”的,因爲對這個詞語的誤解導致雙方無解的雞同鴨講、對牛彈琴,最後,當然是沒有最後了。
    成就:每個填坑的一小步,都是血淚的一大步,而這一大步就如同射箭一樣,對於燧發槍來說,毫無意義。
    
三、腳本語言的意義
    首先我得承認一個錯誤:我對腳本語言的鄙視只能顯示我自己的狹隘、無知、自大和傻缺!認識這個錯誤有點兒晚,只能用“朝聞道夕死可矣”來安慰一下自己。同樣僅僅認識到這個錯誤都讓我付出無數無意義的汗水和淚水,這也是悲慘的事情。如果單純從“存在就是合理的”這個唯心角度來說明問題,我想任何人都不會認輸,所以,換個角度也許會好一些。
    從軟件工程角度:系統是在朝着更加複雜更加龐大的方向發展。從銀彈理論角度:找到最優解是不可能的。後來的故事大家都看到了,沒有最優解就只能找次優解了,這個次優解就是:以服務爲支撐加快迭代速度!在加快迭代速度方面,很顯然,編譯(特指NativeCode,意思到了,明白就行)的優勢變成了劣勢!注意,這個結論很恐怖,也是天平逆轉最重要的一步!從優劣互轉來看,其實也很像弓弩和燧發槍的區別,練習強大的臂力就意味着要消耗更多的食物,而這個強大的臂力對燧發槍來說意義不大。所以,由代差所帶來的優劣互轉絕對是要命的一件事。
    針對腳本語言,我們來看看它的優點:
    更加開放:這意味着有更多人來查看代碼,來修正錯誤,增加功能,加快迭代速度,形成更快的良性循環。天下武功,唯快不破!用速度來打敗對手的例子比比皆是。以熱爆的自動駕駛爲例,我一直覺得是大公司比拼迭代速度的結果。當然,這個例子很荒謬也不嚴謹,只能代表我個人的一家之言。
    更加靈活:從語言特性來看,JavaScript帶給我們一個完全不同的開發思路。而像Python、Perl這些具有交互式應用的環境又會帶來一些很奇妙的結果。這裏有一些很有意思的故事,比如把使用計算器的知識快速應用到Python、Perl語言或者是Mathmeticas工具上面去,不得不說這真的是一種很奇妙的事情。
    性能:這是詬病最多的地方,然而卻又是最不重要的地方。什麼硬件性能(CPU/GPU)、集羣、甚至包括算法調優等等內容,這不是三兩句能說清楚的。但結論和事實觀測結果很接近。要是一定槓到所有底層都是ASM驅動的,我覺得沒啥意思,畢竟前面提過:高水平的技術是由高水平的技術人員開發的,這些內容對普通開發者而言毫無意義。
    在這個部分的最後,需要多說一點的是:這些腳本語言往往跟最新技術密切相關,比如流行的大數據、人工智能、區塊鏈等等內容。這意味着技術進步的方向,也預示着掌握最新技術的最快途徑。同樣,這些技術往往在底層已經深深的默認集成了網絡通訊、矩陣計算等內容,並且這些內容都是最新最快最可靠的技術。站在巨人的肩膀上才能讓我們飛得更高,看得更遠!如果回到前面的內容,我還是想說:掌握弓弩的射擊技術對燧發槍的技術提高几乎毫無用處。
    另外,我對腳本語言的認識還很粗淺,總覺得深度不夠,但一時又無法深入理解,所以只能先這麼寫着吧。


四、未來的方向
    用了這麼多文字,我只想向後來的開發者說明幾個事情:
    1.千萬不要上當!千萬不要上當!千萬不要上當!對於那種所謂的“要打牢什麼什麼基礎”的“磚家高手”言論,保持微笑,然後心裏大喊:我去年買了個大表!即使是你需要這方面的知識時,也僅僅是根據需要進行涉獵即可。如同瞭解弓弩射擊原理一樣,瞭解一下即可,千萬不要忘了你的目的是用你手中的火槍更加高效快速射殺這些弓弩專家!還有一種情況,你是那種高水平的技術人員,你的目的是使用弓弩來參加奧運會比賽的,嗯,你可以無視上面那堆廢話了。否則,一定要在自己心裏多問幾句:我這水平能到奧運會參賽嗎?我心裏是否有這點兒13數?
    2.本來NativeCode的一個優勢是保持代碼祕密,保持技術領先,但在快速迭代的壓力下,這可以說幾乎是扯淡般的存在了。舉個例子,車牌識別和文字識別在幾年前絕對是核心技術,但現在幾乎成渣渣了。。。當然,我還是要忍不住槓一下的:如果你有類似的項目或者工作要做,請參考上面的兩個例子,儘快更換開發工具,不要浪費生命和時間了。其實這種例子有太多太多,屬於那種淚目且無法言語的內容。
    3.如果把時間也看成一種投資的話,顯然,投資到這種小衆到半死的工具上是毫無意義的。幸運的是,99.99%的開發人員用腳進行投票,對於那個0.01%的人員,我只能說:有興趣真好!
    4.鹹魚翻身?這是童話或者修仙小說中最經常出現的故事情節。然而,能不能不要叫醒大家,讓大家沉睡在童話或者小說中好好的睡一會兒?
    5.一個時代,記錄着VCL輝煌的時代,漸行漸遠。。。一些英雄,固守着城堡,他們希望一個輝煌的結局。。。他們註定是悲壯的,像堂吉訶德一樣。。。然而總有一瞬間,希望那些英雄能夠勝利。。。


致敬!向所有歷史戰車上的勝利者和被車輪碾壓下的靈魂!
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章