再談獨孤九劍與黑客編程

在開始以前,我但願你們可以先看看這篇文章: http://catb.org/~esr/faqs/hacker-howto.html
       
若是非要我選擇9門編程語言的話,我會這樣選:
       ASM/C/Python/.NET/JAVA/PHP/C++/Javascript/Objective-C

        仁者見仁智者見智,固然還有不少比較優秀的語言,perl,ruby,Lisp等,若是你是這類語言學習者你能夠替換掉我這個獨孤九劍式,寫一個你本身的。

        在選語言以前,你能夠先看看《黑客與畫家》、《代碼的將來》、《大話設計模式》和軟件工程之類的書。

        如今看來delphi和asp確實有點老了。咱們姑且無論那些老鳥有沒有在用delphi和asp,反正咱們新手是不會用了。咱們學編程70%的緣由是市場的推進,以前C++作桌面應用不少,C#出來後C++作桌面應用的愈來愈少了,C++回到了它最擅長的領域,驅動、嵌入式這些底層開發。

        微軟的C#.NET、oracle的JAVA、蘋果的Objective-C等這類編程語言背後都有一個很大的商業集團在運做。有商業運做其實不是件壞事,由於有商機因此纔有錢途,爲何如今不少人學.NET、學JAVA、學安卓、學IOS?由於商機在裏面。作爲咱們學程序的而言,咱們學這些起碼如今能夠找個差很少的工做。對於創業者來講,藉助這樣的技術能夠創造更多的財富。

        .NET會淘汰麼?JAVA會淘汰麼?C++會淘汰麼?Objective-C會淘汰麼?PHP會淘汰麼?等等諸如此類的問題,其實一直困擾着咱們初學者。大鳥是不會考慮這些的,我是菜鳥,因此我常常會想這些。而跟我同樣的小鳥們也常常問這樣的問題。其實會不會淘汰不是咱們我的主觀意志所決定的,是市場決定的。任何事物都要遵循產生、發展、衰退、消亡的規律,編程語言也不例外。但這些主流的編程語言目前來看10年內不會淘汰,不要有任何顧慮,學就對了。也不要抱着一門語言覺得獲得了武林祕籍,其餘語言就不看了。多看看不一樣類型的編程語言開拓下視野頗有必要。

        不要成爲某一種語言的信徒,不要把本身定位成.NET程序員、JAVA程序員、PHP程序員。無論別人是怎麼稱呼本身的不重要,但你內心要明白,我只是在某個階段用某種語言編程而已。你把本身定位成某種語言的程序員其實就是把本身框死了。你看問題就會有侷限性。

        不要被框架所累,若是你打算學多門語言,就不要把精力放在框架上面。框架只會讓你受累,而不會讓你感受自由。沒有本身的感受,你也就沒有了創造的靈感。你只是奴隸,而不是上帝。學JAVA的朋友通常會學
struts+spring+hibernate這些框架;學.NET的人要學ASP.NET MVC、學WPF、WCF等;學C++的你可能要熟悉MFC或者QT庫;學python你可能要學django等等。偶,天哪,這麼多框架,這麼多類庫,我要學到何時啊,窮極一輩子恐怕也學不完的。其實在學習的過程當中你應該知道本身想要什麼,不要把態度精力放在研究這些框架上,一樣的框架熟悉一個就好,好比MFC或者QT選其一就行。

        有人說如今python在中國火了,其實node.js、MongoDB 、HTML5在世界上都火了。國外芳菲盡,國內始怒放。用這兩句來形容中國的IT界一點都不誇張。python在1989年末開始發明。1991年發佈第一個版本。你們能夠算算多少年了。但如今纔在中國大地普及開來。咱們應該高興仍是悲哀?

        
不自由寧勿死,有人說學.NET是帶着鐐銬在跳舞,是由於它不開源,咱們不知道內部的細節。好在有mono,但人們仍是會擔憂微軟會告mono侵權。雖然微軟說不會效仿oracle告谷歌,可是萬一微軟一念之間告了,咱們又有什麼辦法呢?看到了安卓的悲劇,咱們不得不想到一個問題。那就是被商業公司所左右的編程語言其實無形給咱們帶上了枷鎖。你根本掌控不了。我在《獨孤九劍與黑客編程》裏面提到的第二個境界,軟劍級就是指的這類語言。所以,開源纔是王道。

        跨平臺纔是好,所以咱們必須用一種通用語言,C/C++/Python。這九門語言中我最看好的就是這三門。固然若是你以爲C++太難學能夠去掉,可是Python和C結合起來混編才更強悍。學python的朋友能夠多用下ctype庫。也有人說C是python語言沒法取代的吧,C萬古長青。呵呵,python爲何取代C?兩個語言是應該搭配起來很好的協助。我不是python語言的信徒,一樣也不是C/C++的信徒,咱們應該想辦法讓這些語言爲咱們服務,合適的場景下用合適的語言。總之,沒有哪個語言會萬古長青的。

        若是你只會一門編程語言,那麼你就沒有了選擇,是的,C++能作到的,C也能夠,Python能作到的Ruby也能夠。就連javascript均可以作操做系統了,還有什麼不可能的?
         
http://www.masswerk.at/jsuix/ 你們能夠看看,這個是javascript寫的JS/UIX系統。一樣的C#和java也能夠寫操做系統,任何編程語言均可以。以前一直討論編程語言,其實編程語言與其說是技術,不如說是思考問題的方式。你能夠以計算機的思惟來寫0110或彙編代碼,也可也用C這種面向過程的方式,你也能夠用OOP。無劍的境界是不研究具體某一個編程語言的,而是研究的技術,什麼是技術?
硬件方面:
結構控制和指令系統
算法和邏輯結構
存儲器結構
馮·諾伊曼結構
哈佛結構
輸入/輸出和數據通訊
數字邏輯
邏輯設計
集成電路
計算機系統組織
計算機系統結構
計算機網絡
分佈式計算
網絡安全
計算機系統實現
軟件方面:
系統軟件
操做系統
編譯器
應用軟件
計算機遊戲
辦公自動化
網絡軟件
CAD軟件
計算機程序
程序設計和程序設計實踐
面向對象技術
程序設計語言
軟件工程
軟件複用
驅動程序
計算機模擬
程序設計方法學
數據和信息系統
數據結構
數據存儲表示
數據加密
數據壓縮
編碼與信息論
文件
信息系統
管理信息系統
決策支持系統- 專家系統
數據庫
信息存儲和數據存取
信息交互與表達
主要的研究領域
形式化基礎
邏輯學
謂詞邏輯
模態邏輯
時序邏輯
描述邏輯
數學
泛代數
遞歸論
模型論
機率論和數理統計
邏輯代數
布爾代數
離散數學
組合數學
圖論
網論
信息論
理論計算機科學
形式語言
自動機
可計算性
算法
計算複雜性
描述複雜性
編譯器
程序設計理論
信息論
類型理論
指稱語義
微程序
遺傳算法
並行計算
計算方法學
人工智能
機器翻譯
計算機圖形學
圖像處理與計算機視覺
模式識別
語音識別
文字識別
簽名識別
人臉識別
指紋識別
仿真與建模
數字信號處理
文檔與文本處理
計算機應用
數值計算
數值分析
定理機器證實
計算機代數
工程計算
計算機化學
計算機物理
生物信息論
計算生物學
非數值計算
工廠自動化
辦公室自動化
人工智能
信息存儲與檢索
符號語言處理
計算機輔助科學
計算機輔助設計
計算機輔助教學
計算機輔助管理
計算機輔助軟件工程
機器人學
多媒體技術
人機交互
電子商務
特定技術
測試基準
機器視覺
數據壓縮
軟件設計模式
數字信號處理
文件格式
信息安全
國際互聯網絡
超大規模集成電路設計
網絡傳輸協議
網絡處理器技術
整數運算器
浮點運算器
矩陣運算處理器
網格
計算科學史
計算機歷史
軟件業歷史
編程思想
這些纔是技術。編程語言只是技術實現的一種形式,或者說是一種手段。
看了這些我等小菜只能:路漫漫其修遠兮,吾將上下而求索 
 
========================================================暫時寫到這裏吧,算是本身這些天來的一點感悟。菜鳥之見,大牛勿噴。 
相關文章
相關標籤/搜索