[入門]編碼初學者不要學"C/C++"


今天看到一篇文章, 對其中部分理念感覺決不吐不快.

http://coolshell.cn/articles/8088.html

==引用開始==

對技術的態度

我的觀點是——要了解技術就一定需要了解整個計算機的技術歷史發展和進化路線。(這個觀點,我在《程序員練級攻略》和《C++的坑多嗎?》中提到過多次了。)因為,你要朝着球運動的軌跡去,而不是朝着球的位置去,要知道球的運動軌跡,你就需要知道它歷史上是怎么跑的

技術的發展要根植於歷史,而不是未來。不要和我描述這個技術的未來會多么美好(InfoQ 的 ArchSummit大會上有一個微軟來的人把Node.js說得跟仙女一樣,然后給了一個Hello World),我承認你用一些新的技術可以實現很多花哨的東西。但是,我認為技術都是承前的,只有承前的才會常青。所以說“某某(技術)要火”這樣的話是 沒有意義的,等它火了、應用多了,規模大了,再說。有些人說:“不學C/C++也是沒有問題的”,我對此的回應是:如果連技術主干都可以不學的話,還有什么其他的好學呢?這些是計算機發展的根、脈絡、祖師爺,這樣的東西怎么可以不學呢?

我在“軟件開發‘三重門’”里說過,第一重門是業務功能,在這重門里,的確是會編程就可以了;第二重門是業務性能,在這一重門里,技術的基礎就很管用了,比如:操作系統的文件管理,進程調度,內存管理,網絡的七層模型,TCP/UDP的協議,語言用法、編譯和類庫的實現,數據結構,算法等等就非常關鍵了;第三重門是業務智能,在這一重門里,你會發現很多東西都很學院派了,比如,搜索算法,推薦算法,預測,統計,機器學習,圖像識別,分布式架構和算法,等等,你需要讀很多計算機學院派的論文。

我覺得真正的高手都來自知識密集型的學院派。他們更強的是,可以把那些理論的基礎知識應用到現在的業務上來。但很可惜,我們國內今天的教育並沒有很好地把那些學院派的理論知識和現實的業務問題很好地接合起來。比 如說一些哈希表或二叉樹的數據結構,如果我們的學校在講述這些知識的時候能夠接合實際的業務問題,效果會非常不錯,如:設計一個IP地址和地理位置的查詢 系統,設計一個分布式的NoSQL的數據庫,或是設計一個地理位置的檢索應用等等。在學習操作系統的時候,如果老師可以帶學生做一個手機或嵌入式操作系 統,或是研究一下Unix System V或是Linux的源碼的話,會更有意思。在學習網絡知識的時候,能帶學生重點學一下以太網和TCP/IP的特性,並調優,如果能做一個網絡上的pub /sub的消息系統或是做一個像Nginx一樣的web server,那會更好。如果在學圖形學的過程中能帶領學生實踐一個作圖工具或是一個游戲引擎,那會更有意思。

總之,我們的教育和現實脫節太嚴重了,教的東西無論是在技術還是在實踐上都嚴重落后和脫節,沒有通過實際的業務或技術問題來教學生那些理論知識,這是一個失敗。

==引用結束==

第一,完全贊同文章開頭的說法:

你要朝着球運動的軌跡去,而不是朝着球的位置

第二,疑惑作者為什么會吐槽人家不學"C/C++"

第三,勸解作者不要一竿子否定我們的教育.

 

計算機的發展已經半個多世紀了!!!

今天還有誰願意從機器碼開始去學計算機?要知道當年的神話級程序員都是從那里開始的.

今天還有誰願意從匯編開始學?

如同作者所言,我們的確應該要朝着球運動的軌跡去,而不是朝着球的位置

而機器碼,匯編,C/C++,他們就是個球,我們無法回避的球,我們必須知道的球.

但我們不必朝着球去.

一個算法高手必須懂C/C++么? 目前的事實,是那些算法高手都懂C/C++. 但是從邏輯證明出發,無法推導出不懂C/C++就不是算法高手.

如果再過20年,作者難道還堅持說必須學C/C++么?

C/C++早晚有一天會成為和機器碼一樣的東西,不會成為初學者的首選。

我無非是認為這一天已經來臨。

 

如果連技術主干都可以不學的話,還有什么其他的好學呢?這些是計算機發展的根、脈絡、祖師爺,這樣的東西怎么可以不學呢?

建議這里把“學”改成“了解”,“知道”。

 

中國人開始大量學習編程,剛好是C++的時代。因此大量高手都是通過C/C++鍛煉出來的。C/C++是當時的主流通用編程語言。

上到業務系統,下到驅動程序,網站CGI,數據庫連接,一切都用C/C++搞定。真正的一招鮮吃遍天。

而目前的主流語言通用語言是Java/.net。

 

如果一個新手滿懷一腔熱血,希望成為程序大師,但是被告知要從C/C++學起。

那么,至少半年要花在學流程控制基礎語法上。

再花至少1年在MFC上,還要學ALT等等。

如果3年下來,算什么級別的程序員?能應聘怎樣的崗位?

除了直接淪為底層C/C++碼工,不論到哪個其他語言平台的崗位,培訓超過3個月是必須的。

1995年,如果一個大學畢業生致力學習機器碼而不是C/C++,那么今天他能干什么?100他那樣的人,有幾個能成為大牛?

 

軟件開發的學習,應當從當下的主流編碼語言開始,而不是上一代的主流語言。

這樣可以快速了解到目前的軟件發展趨勢:

1。新語言之所以新,和舊的區別,它的提升、改進。

2。新語言的設計思想,設計目的,設計動機

3。整個軟件行業的發展階段,面臨的困境,以及大家解決困境的嘗試。

 

一個專心,但僅學了3年C/C++的人,同時對歷史知識有所了解, 不過對主流語言也僅僅是了解,其C++的造詣還不足以勝任目前的C++崗位需要。

一個專心,但僅學了3年Java或C#的人,同時對歷史知識有所了解的同學能找到怎樣的工作呢?

 

對於大學的計算機教育,的確有脫離實際的情況。

但是,一個教授憑什么會有豐富的實踐經驗?難道他是某公司的系統架構師?

或者是首席程序員?

其實不少學校里面的教學已經聯系實際了,只是太多的實際,台下剛剛連基礎概念都沒背熟的學生們會有多少理性的認識?

其實很多人對圖和樹真正“'掌握",一定是在工作后,在工作中。

因為,如果畢業后從來沒有在項目中用到樹,則一輩子不會理解樹的應用。

 

所謂”掌握“, 就是懂得什么時候該用樹,什么時候可以用,能從業務需求里抽象出樹的應用來。這個絕對在大學階段不是多數人能悟道的。

就好比大家都學過了傅利葉變換,但如果僅僅靠當時舉幾個例子,絕對不會讓滿堂的學生都能從此在編碼時候輕松識別出他的應用場景。

能不打瞌睡已經很給老師面子了。

 

作者所說的軟件開發三重門,其實是一個規律,甚至是鐵律。

會編程

技術的基礎

業務智能

 

任何一步能反過來么?似乎是不能的。

所以,對於初學者,第一目標是去學會編程。

而此時學習最主流的語言才會讓你有資格順利進入到下一個層次。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM