學習 C++的用途,(前輩總結)

来源:http://www.cnblogs.com/shouce/archive/2016/03/26/5321910.html
-Advertisement-
Play Games

C++準確說是一門中級語言,介於彙編和高級語言之間吧,要求程式員瞭解電腦的內部數據存儲。個人認為,作為學生還是花功夫學C++,因為《設計模式》《數據結構》這些課程基本上還是C++應付的比較好(我的切身體會),學習 C++,認真閱讀c++ primer,而後配合 The ADAPTIVE Commu ...


C++準確說是一門中級語言,介於彙編和高級語言之間吧,要求程式員瞭解電腦的內部數據存儲。個人認為,作為學生還是花功夫學C++,因為《設計模式》《數據結構》這些課程基本上還是C++應付的比較好(我的切身體會),學習 C++,認真閱讀c++ primer,而後配合 The ADAPTIVE Communication Environment (ACE)瞭解設計模式, 再看看《深入淺出STL》,就會發現其他語言都一樣,不變的是思想本身。

在以下領域,C++有著根本性的優勢:低級系統程式設計、高級系統程式設計、嵌入式程式設計、數值科學計算、通用程式設計以及混合系統設計等等。讓我們略微展開描述一下:

    1. 低級系統程式設計:C++是迄今為止最好的低級程式設計語言。

    2. 高級系統程式設計:包括操作系統核心、網路管理系統、編譯系統、電子郵件系統、文字排版系統、圖像和聲音的編排系統、通訊系統、用戶界面、資料庫系統等等。

    3. 嵌入式系統:包括照相機、汽車、火箭、電話交換機、汽車等等。

    4. 數值/科學計算:包括模擬、實時數據獲取和資料庫訪問等等。

    Bjarne的個人主頁上,有一頁applications,那兒列出了一些(全部或大部分)使用C++編寫的系統、應用程式和庫。下麵是一些例子:

    1. Adobe Systems:所有主要應用程式都使用C++開發而成,比如Photoshop & ImageReady、Illustrator和Acrobat等。

    2. Maya:知道“蜘蛛人”、“指環王”的電腦特技是使用什麼軟體做出來的嗎?沒錯,就是Maya。

    3. Amazon.com:使用C++開發大型電子商務軟體。

    4. Apple:部分重要“零件”採用C++編寫而成。

    5. AT&T:美國最大的電訊技術提供商,主要產品採用C++開發。

    6. Google:Web搜索引擎採用C++編寫。

    7. IBM:OS/400。

    8. Microsoft:以下產品主要採用C++(Visual C++)編寫:

        Windows XP
        Windows NT:NT4、2000
        Windows 9x:95、98、Me
        Microsoft Office:Word、Excel、Access、PowerPoint、Outlook
        Internet Explorer,包括Outlook Express
        Visual Studio:Visual C++、Visual Basic、Visual FoxPro
        .NET Framework類庫採用C#編寫,但C#編譯器自身則使用C++編寫而成。
        Exchange
        SQL Server
        FrontPage
        Project
        所有游戲
        ......

    9. KDE:K Desktop Environment(Linux)。

    10. Symbian OS:最流行的蜂窩電話OS之一。

    我通常使用C++進行高端程式開發。

    “通常”一詞沒什麼好說的,有時只是出於公司文化或個人愛好方面的原因,選用了別的語言而不是C++,或者相反。我所說的“高端”是指:關鍵業務處理,效率要求極高,實時性要求高等等。

    我看見幾乎所有嚴肅的工控系統軟體和實時數據採集、處理和表現(主要是圖形)軟體,都是採用C++(或C,少部分採用Java)編寫而成的。

    據我的瞭解,我原先所在的研究院幾乎每一個研究所都在不同程度地使用C++(以及一些別的語言)。

    想想看,迄今為止,現代Unix操作系統的各種變體上,最常使用的是什麼樣的開發語言?(C/C++)

    C++語言

    C++語言是靈活,但首先要看看使用者能不能發揮它的靈活性;C++語言夠強大,但要看看使用者有沒有本事發揮它的強大功能。

    使用C++語言和編譯器編寫一個快速的程式,並不難,不過編寫一個強健而高效的大型程式,就不是那麼容易了。

    語言之間的區別,絕非只是大括弧和begin、end或Sub、End Sub之間的區別。選擇了一種語言,你就選擇了一種思維方式,一種程式設計思想。要想跳出語言的束縛,首先要對語言有著深刻的認識和透徹的把握。世界上一些大師級的人物,也常常毫不掩飾自己對某種語言(我並沒有專指C++)的偏愛。一些人對語言尚一知半解,就大談要跳出語言的束縛了 — 你無需跳出,因為你根本不曾深入。

    純粹的技術性(學術性)研究,總能給人帶來純粹的快樂。C++語言複雜至極,可研究性極強,但一般來說,沒有3~5年的持續學習、思考、使用,是不可能真正掌握C++的。

    我不是唯語言論或唯工具論者,但我反對抹殺不同語言、不同開發工具之間的區別。抱持這種觀點的人,若非無知,即是別有用心。這就好比雜牌筆記本電腦廠商最喜歡叫嚷“筆記本電腦已經進入同質時代”一樣,雜牌機怎麼能和IBM相比?

    選擇C++或選擇Java,要看你個人愛好和對將來的打算。雖然只是語言上的差別,但由此決定的就業領域的確不一樣。

    不管你走什麼樣的技術路線,不管你用不用它做開發,學習C++總會帶來長遠的好處。一名熟悉C++的開發人員,假如他不是一個偏執狂的話,再學習Java或C#,都要容易得多。

    C++不過是一門編程語言,我們總是要用它來解決實際問題,所以要學習開發工具(比如Visual C++),瞭解操作系統(比如API),熟悉領域知識(比如電力系統),掌握其他軟體技術(比如資料庫),等等。編寫真正的代碼,解決實際問題的能力,才是衡量一名程式員是否有真水平的唯一標準。

    設計模式和統一建模語言

    設計模式(Design Patterns)和統一建模語言(Unified Modeling Language,UML)是兩個不同的概念。前者主要目標在於提供可重用的面向對象軟體設計方案,後者則是一種描繪軟體藍圖的標準語言。

    當然了,可以使用UML來描述設計模式的結構。

    UML所描述的模型可以映射成C++、C#、Java等語言代碼,甚至可以映射到關係型資料庫。映射過程可以是雙向的,一般都有相應的軟體工具(或插件)支持。

    不同的語言,特性有所差別,這多少會影響設計模式在該語言中的實現(方式、難易)。比方說,假如使用C語言來描述設計模式,那麼,繼承、封裝和多態等特性就變成了需要研究的設計模式,但在任何一門面向對象的語言中,這都純屬多餘。

    現在市面上還沒有看到象樣的以C#為手段講述設計模式的書(我沒有看到),但這並不打緊,倘若有興趣,完全可以讀一讀《Design Patterns: Elements of Reusable Object-Oriented Software》(中文版名《設計模式》機械工業出版社)這本書,儘管它主要以C++和Smalltalk語言為講解手段。

    設計模式本身無所謂好壞,根據你要解決的目標問題,選擇適當的設計模式。

    系統架構

    在企業級軟體開發中,架構第一重要。架構有缺陷,系統就存在硬傷。優秀的架構來自於優秀的設計。這一點毋庸置疑。

    任何成功的軟體,即使它沒有明確地使用建模思想、架構方法,但在骨子裡、潛意識中,大都具有良好的設計思想和架構。

    只有寫過好多好多代碼以後,只有做過一些夠份量的企業級項目之後,才可能對軟體架構形成清晰的認識。很難想像一個連幾行像樣的代碼都沒有寫過的人,對程式思想和架構卻有著深刻的認識。這種人,十有八九屬於紙上談兵之輩。

    我們時不時會看到這種情況,軟體的設計也不算太差,但程式員要麼不知道怎麼寫實現代碼,要麼是代碼寫得缺乏效率,或不夠強健,甚至有時連“架構師”自己對此都一籌莫展。

    我們也常常聽到一些聲音,不要太拘泥於語言(技術)細節了,要從大處著眼,要有大局觀,架構怎麼怎麼重要,這些都是大實話。不過現實情況往往是,很多程式員不是太拘泥於語言(技術)細節了,而是對語言(技術)細節掌握得還遠遠不夠。

    書本知識的重要性毋庸置疑,但絕不要以為讀了兩本書,自己就成了牛氣的架構師、設計師或者什麼建模專家。

    從前的軟體開發埋頭實踐而缺乏必要的理論指導。現在越來越走向另外一個極端:設計文稿越來越圖文並茂,琳琅滿目,但開發出來的軟體卻比以前差很多。這種錶面文章,意義何在?

    資料庫

    大多數軟體都要和資料庫打交道,並非只有MIS類軟體如此,資料庫知識幾乎是非掌握不可的,無非使用深度和廣度有別而已。迄今為止,我編寫的每一個項目軟體,都要訪問資料庫,有一個程式甚至同時要跟兩個資料庫打交道(Oracle和SQL Server)。

    如果你上過任何一門資料庫基礎理論方面的課,或認真看過任何一本資料庫基礎理論方面的書,或許都不必再買更多的(類似的)書。二十多年以來,關係式資料庫理論之穩定,遠遠超過C++語言的穩定:)


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 一、開發環境 編譯器:VS2013 .Net版本:4.5 二、開發過程 1.畫一條直線 private void btnDrawLine_Click(object sender, EventArgs e) { //創建一個畫圖圖面 Graphics g = this.CreateGraphics()... ...
  • 由於項目升級到了.NetFramework 4.6.1,開發工具轉向了vs2015,趁機嘗試下C#6.0.結果在網上搜的一些教程總結的不是太完整,有的代碼隨著vs正式版的發佈也有所修改.那些個教程也沒更新.所以把自己學習到的記錄一下. 1.自動屬性初始化(Auto-property initiali ...
  • 生日悖論,指如果一個房間里有23個或23個以上的人,那麼至少有兩個人的生日相同的概率要大於50%,準確的說是50.7左右,這就意味著在一個典型的標準小學班級(30人)中,存在兩人生日相同的可能性更高。對於60或者更多的人,這種概率要大於99%。從引起邏輯矛盾的角度來說生日悖論並不是一種悖論,從這個數 ...
  • 使用spring的jdbcTemplate 使用具名參數 在JDBC用法中,SQL參數是用占位符?表示,並且受到位置的限制,定位參數的問題在於,一旦參數的位置發生變化,必須改變參數的綁定,在Spring JDBC中,綁定SQL參數的另一種選擇是使用具名參數,SQL具名參數是按照名稱綁定,而不是位置綁 ...
  • refresh用於刷新與跳轉(重定向)頁面 refresh出現在http-equiv屬性中,使用content屬性表示刷新或跳轉的開始時間與跳轉的網址 refresh示例 5秒之後刷新本頁面: <meta http-equiv="refresh" content="5"/> 5秒之後轉到夢之都首頁: ...
  • Spark作為分散式的大數據處理框架必然或涉及到大量的作業調度,如果能夠理解Spark中的調度對我們編寫或優化Spark程式都是有很大幫助的; 在Spark中存在 轉換操作(Transformation Operation) 與 行動操作(Action Operation) 兩種;而轉換操作只是會從 ...
  • l 時間為種子。白色格子10%概率生成。綠色和紅色子塊的坐標隨機生成。 srand((unsigned)time(NULL)); //以時間為隨機種子 for(i=1;i<=size;i++) { for(j=1;j<=size;j++) { if(1==rand()%10) //10%摡率達成 g ...
  • 項目結構: 添加頁面: 說明:這裡只註重操作,對界面的美工沒有下工夫,希望大家理解...... 列表頁面: 修改頁面: 項目中所需的sql: conn.php add.php list.php delete.php preEdit.php postEdit.php ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...