我們的高科技明天

當計算機已經普及到連手錶都有完整的ARM平臺的時候,洗衣機居然還不能自動洗衣領,真的讓人有點失望。當然,也有類似的小發明(衣領淨小機器http://www.idea78.com/06/22/683.html),但無法組合成一個完整的系統。

 

其實我對可編程性一開始就很感冒。微軟費了那麼大的功夫,終於讓他們的一些大型應用程序具備了可編程性。如Office可以通過VBA(Visual Basic for Applications)來編程,甚至可以由第三方應用程序通過它的COM接口來編程(比如C、C++、Delphi、C#、VB、VB.Net等,注意,COM是支持C語言的,不一定要用C++)。Microsoft Forefront防火牆也支持可編程性。Hyper-V支持可編程性。VMware和Virtual Box也同樣支持可編程性。

 

傳統的命令行程序,只要不是交互性的,一般也都可以通過程序來調用。如sort、uniq、cpsio(剪貼板複製)、tee、wget、wput、copy、move、gvim、python3、winrun(啓動窗口應用程序)、7z、adjvol、mencoder等等不勝枚舉。

 

最大的可編程性在於程序庫。無論是C語言的標準庫、C++的標準模板庫、python的標準庫,或者第三方的庫如fmod多媒體庫,每個函數都是可編程的。有些語言還支持與其他語言的接口,進一步拓展其性能,比如,可以爲python編寫C語言的模塊,也可以讓C#調用C語言的函數。

 

有了可編程性和可組合性,就能夠真正地做成一個應用系統,而不只是單個應用程序。將來,再加上靈活的機器人技術和一定程度的人工智能(可控程度的,如輸入法和語音識別、語意分析這樣的人工智能)就可以做很多事情了。

 

說實話,我雖然是2004年本科畢業的,但我早在1993年就接觸計算機了,接觸的第一門計算機語言BASIC則是早在1991年,通過看我爸讀夜校時的那本教材。計算機這行業是隨着計算機性能的提高才逐步降低其入門的技術門檻的。如果放在1990年的樣子,樣樣編程都要用Turbo C、Turbo Pascal在DOS上面寫,估計沒幾個人能學會。通俗易懂的BASIC當年都不是正規軍,現在即使是功能強大到和C#平齊的Visual Basic .NET都還是讓人覺得使用它來編程的程序員仍低人一等。

 

想當年,由於C語言在中國還比較新,那時清華大學的譚教授寫的書都漏洞百出。BASIC的處境畢竟要好得多,因爲它簡單易學。

 

1998年的時候,我在念高中。那時學校裏計算機課上教FoxBase,但我卻對DOS感興趣。那時無論是學校還是家裏都沒有網絡,吸收課外計算機知識的途徑並不多,主要靠的是書籍。一本《MS-DOS 6.22》使用手冊,清華大學出版社出版,作者是鄭全戰,成秀珍。鄭全戰後來去了微軟,2004年Tech Ed的時候我參會時看到過他,他當時正在介紹時新的Windows XP SP2中的新功能。後來他去了騰訊做了首席架構師。我當時還去學校圖書館看《電腦愛好者》合訂本。《電腦愛好者》裏面有很多有趣的軟件介紹和使用技巧,甚至還有一些完整的C語言小程序。當時我並不懂C語言,曾經抄過一個在DOS中使用鼠標的程序下來,但在我懂C語言的時候,抄有那個程序的紙張已經被我扔掉了。

 

那年還讀過一本《The road ahead》中譯本。這本書是比爾蓋茨在1995年寫的。講的是互聯網。說實話,那時我對互聯網並不太懂。所以看了半天還是雲裏霧裏。我對於互聯網這種大雜燴一樣的東西是不太感冒的。經過了好多年,我才覺得我對互聯網有了一些理解。

 

當年還有一個炫酷的東東叫iMac G3,這是我有史以來最喜歡的蘋果電腦造型,沒有之一。後面的Mac的設計真的是無以望其項背。

 

還有一個臭名遠揚但又令人愛不釋手的東西,叫Windows 98。它功能十分好用,但是就是老是要死機。無論是當年流行的哪樣軟件,JetAudio、WinAmp、WinZip、WebZip、Get Right、Irfan View、Photoshop、ACDSee、Microsoft Frontpage、Macromedia Flash、Macromedia Authorware、Acrobat Reader等等,都跑得很歡。然而,死機時間在十分鐘到四小時不等。死機時有時有藍屏出現,有時則是整個系統失去響應。後來在我們這樣一個D版大國終於找到一個救國的神器,它叫Windows NT,後來就變成了Windows XP及其子孫後代。

 

而我個人的經歷,大學時代當然學了好多好多課程,基本上每學期10~15門左右(有的課程延續多個學期),當然大四的課程少了很多。學了好多課程,有數學的(線性代數、數學分析 [章仰文老師版]、工程數學、抽象代數、數理邏輯等)、物理的(大學物理及其實驗課)、化學的、生物的、語文的、英語的、製圖的(工程製圖)、金工實習等等。有一些電子的(電工實習、裝配收音機、數字電路)。當然大頭是計算機方面的:硬件方面有數字邏輯、計算機組成與系統結構(胡越明老師版)、微機原理(8086彙編)、微機原理實驗(8086微代碼編寫和系統連線)等;編程語言有C語言和C++,而Java沒有正式教過,但卻讓我們用它來做編譯原理的大作業;其他課程有五大:數據結構與算法、操作系統、編譯原理、計算機網絡、數據庫管理系統,以及計算機圖形學、人工智能、自動控制、模糊邏輯、語音識別,以及畢設時學的一點自然語言處理。當初學的算法都是比較基礎的算法,動態規劃和貪心法聽說過但沒有仔細學過,後來自學了一下動態規劃的兩個關鍵點:主問題分成同構的子問題來求解,子問題的解可以被緩存在一個字典裏(這個技術叫memoization),這樣,同樣的子問題可以不必算兩遍。

 

大學時候的網絡大作業做了一個HTTP Server,能服務靜態網頁,裏面實現了完善的與瀏覽器配合的靜態網頁緩存機制。圖形學大作業做了一個Graphics Conclusion。下圖是Graphics Conclusion的渲染效果圖。這個程序可以說是我大學時代做過的最複雜的程序了,總共160KB代碼,6000多行。不過還是羨慕那些更牛的同學,做了一個殺毒引擎出來,但最牛的同學都研究理論,比如後來斯坦福博士畢業的大牛Qiqi Yan。

 

 

Java太令人討厭了。我把我的計算機內存好不容易升級到256MB,沒想到跑一個Java就吃掉50多兆。而且啓動速度巨慢(比後來認識的C#還慢不少)。這大概也就是爲什麼我沒有走上Java之路的原因。直到現在,還是不太高興開Eclipse寫安卓程序,就因爲Eclipse是跑在Java上的。

 

04年我剛工作,那時新學C#,覺得它功能怎麼那麼弱,性能又比不上C++,感覺像是在玩一個玩具。後來才明白,C#和Java這樣的“玩具”語言存在的價值就是,讓你編程時不容易出錯——所有錯誤在編譯時和運行時都有嚴格的檢查,除非是邏輯錯,否則那些內存越界啊、野指針啊、重複釋放啊之類的問題要麼不可能發生,要發生就馬上拋出異常。後來到了09年才意識到C#可以通過Platform Invoke(平臺調用)很方便地調用C語言的函數,以前對C#的“玩具”看法真的是誤解了。在單位,也有機會做一個C++程序,完全基於Windows API的一個抽獎程序(不知道下次請客吃飯有沒有可能拿來用用)。還做了一個C++的ActiveX控件,能在IE裏面用,可惜的是沒有數字簽名,每次都要被警告說不安全。

 

06年,我C#已經用得很熟了,07年我還做了一個當時很著名的——上海國際電影節網站(SIFF.com)。最複雜的一個C#項目還數廣播電視信息管理系統,花了兩個人一個半月的時間才做出來。後來又去做了一個Managed C++的天氣、交通和財經編碼程序,按照一個二進制編碼協議把數據分包發送,通過無線網絡,再讓移動終端接收。這大概是我第一次接觸移動終端吧,可是我做的不是移動終端上的編程。對此我現在看來,也不覺得後悔——因爲小內存的移動終端編程最多就像DOS那樣,內存要省着用,而大內存的編程,在應用程序的邏輯上則和Windows沒太多區別了,只是界面是觸屏或按鈕罷了。

 

Linux玩過一些,Fedora Core、CentOS、Ubuntu、Slackware。玩的過程中瞭解到,Linux上的程序要不是UTF-16兼容的(或至少是UCS-2);要不就是UTF-8兼容的,要不就是ASCII兼容的(ASCII兼容的一般都是些古董程序,現在很少了)。很少有DBCS(如GBK)兼容的程序。而Windows裏面則新的程序大多數是UTF-16兼容的,老的程序有很多是DBCS兼容的。這樣一來,Linux的配置和Windows就會不一樣,一開始我老是想把Linux配成GBK(主要是LC_CTYPE,但也可以用LANG或LC_ALL),結果老是出問題。後來配成UTF-8以後就好了。Linux和Windows之間交換壓縮包的時候,爲了避免亂碼,最好用7-Zip或RAR這樣用UTF-16格式的,而不要用zip或tar,因爲它們用UTF-8——到了Windows上就用DBCS解釋了,非ASCII的文件名就變亂碼了。

 

08年和09年,我終於工作於大的軟件上了——之前的小項目代碼量都不超過500KB。這次接觸的兩個軟件都是10MB規模的。發現對於這樣規模的軟件,要注意一點,就是查找某個函數的引用時,要觀察它是從哪個包(或哪個名字空間)過來的。因爲查看函數的扇出時,大軟件和小軟件是一樣的。但查看它的引用時,一個常用函數在大軟件裏面有時會有數十乃至數百個引用。所以一定要注意查找自己想要看的地方。而且不能不用編譯軟件或IDE來查找引用——用grep是會不準的。

 

10年,我又瞭解到Windows上大型C/C++程序的一些特點。其中一個很重要的點,就是用Application Verifier來驗證程序,比如沒有訪問越界啦之類的問題。另一點,就是C/C++的變量,除了全局變量和靜態變量外,其他的默認都是沒有初始化的。new/malloc得到的變量,在debug版本里面每個字節會被初始化爲0xCC這樣(燙燙燙燙燙燙燙B,嗯,GB2312,你懂的),但release版本里面爲了性能考慮,真的不會初始化,導致所在位置可能就是垃圾數據。還有就是64位C/C++程序裏面,long還是32位。只有long long或者__int64纔是64位的,或者用DWORD_PTR類型也行。

 

業餘時間裏開始做一個C#庫,裏面都是些常用的數據結構封裝以及實用工具類,如數據庫方面的、Web方面的等等。還包括一個B樹。還沒做完,做完了開源共享出來。另外,包含衆多命令行功能的python庫的一個程序包叫cmdtools,也在做,但正式版還需要一段時間。

 

曾經發明瞭一個叫AceTree的東東,但沒有時間做完。以四年後的今天來看,它的思想類似於淘寶的商品分類(英雄所見略同):不僅僅是標籤(tagging),而且每個標籤有自己的大類,比如“季節”大類裏面有春、夏、秋、冬四個標籤。這樣一來,就不再需要目錄分層(目錄可以只是按照大類的一定排列來構成的一棵樹),其靈活性會比目錄要好很多,也十分方便用戶查找。

 

高中時候(1998年左右)也設想過一個安全的操作系統。以今天的眼光來看,它類似於iOS的安全模型(所有操作都需要用戶設置爲允許,或單獨批准)。又一次見到我當初的想法是多麼的超前:-P

 

10年到14年做了好多服務器端的應用軟件。軟件相當有年頭,而且越做越完善。其中有一個值得稱道的地方,就是那麼多年來,在工作中還首次用了一下算法設計,設計了一個優化算法,把一個原本O(n^2)的算法優化成了O(n * log n),具體還是相當需要思考的,兩個星期在思考這個問題,某天突然靈感發現才寫了出來。

 

BAT?百度,阿里,騰訊。從最終用戶的角度講,百度以搜索引擎起家。阿里是做電子商務的。騰訊是做即時通訊的。百度什麼都做,知道,貼吧,Hi。目前最看好的是百度輕應用,它是HTML5應用平臺化的一次不錯的嘗試,如果做好了可能很有市場。阿里也開始做即時通訊。而騰訊也做了電子商務。總之,現在不比以往了。但是從技術積澱來說,騰訊的IM也確實特別好用。

 

金山毒霸?毒霸突然出現,難道它的實時防禦做得真就那麼好?殺毒軟件不是光看引擎好就好的。查殺病毒只是它的一部分能力。Windows 95/98/Me上,根本就沒有絕對的安全可言。即便是NT(通俗來講就是WinXP系)和Linux(嗯,我們可愛的小企鵝Linux)上面都有rootkit,何況沒有自主訪問控制功能的Win98系。這代表了金山也開始做一些其他的嘗試了。雖然金山WPS纔是最經典的軟件,但在這D版橫行不以爲恥的國度,再經典的軟件也經受不起啊。

 

中國的軟件產業其實就毀在D版手裏了。都已經幾十年了,還在流行D版。用正版爲榮,但用D版不以爲恥,甚至還有人嘲笑用正版的人。難道就是因爲那些軟件不是國產的就應該用D版嗎?那些用D版的人,難道不是即使是國產軟件,也喜歡用D版的嗎?所以正是D版害苦了中國的軟件產業(我是這樣說的,xchilde是這樣說的,tinyfool也是這樣說的)。現在說IT行業不景氣,是因爲人員過多。但是,另一方面來看,再不景氣,美國的軟件產業依然比中國發達許多。即使是德國,也有SAP那麼大的軟件公司。中國的軟件公司呢?金山連BAT裏面都排不上。BAT一個是掌握了用戶的使用習慣(百度),一個是掌握了用戶的網上交易(阿里),一個是掌握了用戶的數據(騰訊)。沒有一個是純靠軟件來贏得用戶的(當然,它們的軟件做得都還不錯;但始終只說明,軟件本身不創造利潤,必須依附在它們的平臺上才行;或許這也就是爲什麼雲計算將在中國大行其道的原因吧)。

 

IBM玻璃硬盤——美好的理想,無奈的現實。IBM在197x年發明的溫徹斯特技術硬盤本來是非常可靠的。玻璃也是個美好的事物。但是做成硬盤之後,玻璃的脆弱才顯現出來——壞道頻現。最後,當年75GB風靡一時的玻璃硬盤不得不停售。IBM的硬盤部門也賣給了Hitachi,而Hitachi也不再生產玻璃硬盤,還是回到老路,做鋁合金盤片。

 

360簡直是笑話中的笑話。啊哈,周總不要打我。但我說的是,這東東有兩個問題:一是它和3721上網助手有點淵源。上網助手一開始的面貌是個不錯的軟件,但出了一些版本之後就變成了流氓軟件——怎麼也卸載不掉,系統裏面怎樣也都有殘留,而且還會運行。這讓用戶怎麼想?怪不得後來用戶都改用蘋果iOS——只有這樣的控制嚴格的系統纔沒有流氓軟件(安卓似乎都不能完全防範流氓軟件)。二,360一開始的角色就是給盜版XP系統打補丁的!微軟早就有Windows Update了,而自動更新是自Windows 2000開始就有的功能,爲什麼還要這麼一個第三方軟件來搞這事?原因只有一個——盜版系統Windows Update會不知不覺裝上微軟的反盜版補丁,而360會跳過這些更新。正因爲這個原因,360的東西看起來特別diao絲,就是後來出現一個360安全衛士的殺毒功能,都讓我覺得是不是皇帝的新裝那樣子——能查殺極少量病毒(幾千個?漏過幾百萬……),而又排擠競爭對手產品(金山毒霸、瑞星、騰訊電腦管家等)。還有着流氓軟件、泄露用戶數據隱私等罵名。

 

錘子手機?嗯,幹得漂亮!它說,我們不生產iPhone,我們是蘋果的搬運工。他們把蘋果對等的硬件和一些實用的軟件特性實現在他們的手機上面,並在硬件的某些特性上做得更好。其實這就是2.0公司的體現之一。當然,他們也必須小心不要侵犯專利。

 

蘋果iPod Shuffle?不務正業。說實話要不是SONY的MP3賣得太貴,我也不會去買三星的,但是蘋果的iPod Shuffle我看了以後立馬就拒了——又貴又不實用,沒有顯示屏,怎麼用得舒服?iPod Nano和iPod Classic還都可以,就是小貴。iPod Touch是個不錯的設備,iPhone也做得可以。但是iPad是我不會給自己買的東西——對於平板,我要它能運行以前的PC軟件,我會考慮像華碩Transformer Book T100那樣的平板,但不會是iPad。而且,iPad上的軟件也的確在實用性上遠不及桌面程序。也就是說,我要的平板還是要跑桌面操作系統的。目前市場上這樣的平板只有Windows平板(Linux平板也有聽說,但中國買不到)。

 

SONY?真正過硬的數碼硬件廠商。想當年,Sony和Philips聯合開發了劃時代的設備——CD唱片。這正是後來電腦上應用的CD-ROM的前身。沒有它,那後來的DVD、藍光設備都不會出現。當年JVC聯合了Matsushita(松下)、HITACHI(日立)等公司而推廣的VHS格式錄像機在普通用戶之間得到了普及,但是專業視頻拍攝者最鍾愛的還是參數更高、畫質更好的Sony Betacam。Sony的Mini Disc也是對磁光盤(MO)技術的一次不錯的嘗試,讓用戶早在磁帶時代就能夠擁有這種先進的無磨損的數碼錄音設備(雖然賣得相當貴)。如今,Sony把Sony Ericsson收購以後,它的安卓手機也照樣做得很紮實。而它的那些高端視頻設備、攝像機、照相機等也都很靠譜。

 

嗯,神馬語言都是圖靈完備的,所以什麼語言都是一樣的嗎?只有在終極意義上纔是一樣的。從實際使用來看,就是不一樣的!舉個例子,傳統BASIC,比如GW-BASIC,你用它來寫函數調用看看?什麼?沒有函數?怎麼辦?用數組來模擬棧。什麼?沒有結構體?用多個數組來模擬一下。什麼?多個函數使用的變量各異?自己想辦法用多個變量解決。什麼?沒有malloc?你自己寫一個?用數組實現的內存池?還得每個類型分別一個數組?或是自己搞序列化?你瘋了嗎?於是Dijkstra說的已經腦子壞特勒的程序員就是這樣誕生的。

 

又如Visual Basic,它的繼承和多態完全得靠ActiveX來實現。本身根本不支持繼承和多態,連函數指針(函數引用)都不支持。VBScript都有函數引用,都比VB先進。還好VB.NET另起爐竈搞了一套,否則又得殘害多少苦逼程序員?

 

還有C、C++。這兩個明明是中級語言,但又有多少用慣Java的程序員想要轉過來?這兩門語言要用好,沒有捷徑,好好學,把書看完,多編點練習程序,理解透徹,就學會了。不認真看書的,想照着Java裏面依樣畫葫蘆的,沒門!嘿,我說你呢!學C#的也一樣,要學好C/C++得好好看書做練習。

 

還有PHP,這個被調侃爲“拍黃片”的PHP,不知道從多少門語言裏面吸收了語法,Perl是一個,Javascript又是一個,搞出來的語法極爲混亂。早就該被廢棄了。情願用Node.JS也不要用PHP的。PHP雖然也支持什麼閉包,什麼協程(狀態機),但是這就像是在一坨屎上面放點糖,還是不能吃。

 

ABAP,這個語言的能力已經達到(乃至在某些方面超越)Java了。但是要用它來做並行編程,要取得好的性能,真的是特別困難。

 

好在大多數現代語言都具備了常用的基本功能。終於不至於太頭大。

 

Fabrice Bellard是牛人啊!

 

Andre Victor做了FreeBASIC,真是有才。不過我的想法更爲誇張。拭目以待。

 

展望未來:
home雲。什麼?私有云佈置在家裏?不,我們不是傳統的雲廠商,我們就是做家庭雲的。我們沒有公用雲。您的家庭的電子設備就構成一個雲。每個設備的容量各異,您可以按照需要部署數據。可以有一臺核心的存儲服務器,或者用您的多個移動SSD組合亦可。

發佈了112 篇原創文章 · 獲贊 10 · 訪問量 21萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章