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

來源:互聯網
上載者:User

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

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

==引用開始==對技術的態度

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

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

我在“軟體開發‘三重門’”裡說過,第一重門是業務功能,在這重門裡,的確是會編程就可以了;第二重門是業務效能,在這一重門裡,技術的基礎就很管用了,比如:作業系統的檔案管理,進程調度,記憶體管理,網路的七層模型,TCP/UDP的協議,語言用法、編譯和類庫的實現,資料結構,演算法等等就非常關鍵了;第三重門是業務智能,在這一重門裡,你會發現很多東西都很學院派了,比如,搜尋演算法,推薦演算法,預測,統計,機器學習,Image Recognition,分布式架構和演算法,等等,你需要讀很多電腦學院派的論文。

我覺得真正的高手都來自知識密集型的學院派。他們更強的是,可以把那些理論的基礎知識應用到現在的業務上來。但很可惜,我們國內今天的教育並沒有很好地把那些學院派的理論知識和現實的業務問題很好地接合起來。比 如說一些雜湊表或二叉樹的資料結構,如果我們的學校在講述這些知識的時候能夠接合實際的業務問題,效果會非常不錯,如:設計一個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#的人,同時對曆史知識有所瞭解的同學能找到怎樣的工作呢?

 

對於大學的電腦教育,的確有脫離實際的情況。

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

或者是首席程式員?

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

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

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

 

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

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

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

 

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

會編程

技術的基礎

業務智能

 

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

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

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

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.