從項目管理上來說,C++ 是否適合做大的項目?
編程還正在入門,目前也沒有接觸過太多的語言,或許因為這樣體會才不深刻。
不知道,那種做過了很複雜,很大型項目的人,是什麼體會?那種曾經經歷過痛苦的重構的人,可能更有發言權吧。
靜態強類型語言都適合做大型項目
原因是對程序員約束比較多,容易有效的提高代碼質量,減少低水平開發者摧毀項目的可能性同學,如果你「編程還正在入門」,那麼我們說的「大項目」和你理解的「大項目」很可能不是一個東西。
另外,重構是很爽的,怎麼會痛苦呢?
最後,補充一下@扼殺黑暗 的說法,靜態強類型語言中,類型不匹配之類的錯誤在編譯期就能查出來,不至於等到運行期才拋異常,而有的(動態)語言過於lazy,就算把一個錯誤類型的實參傳到函數裡邊,如果不實際跑到那個code path,相關的錯誤也會被掩蓋。而在這種語言裡邊,往往看函數的聲明是不知道它想要什麼類型的參數的,也看不出一個函數返回什麼類型的對象,所謂duck typing嘛,當你使用別人的library的時候就知道有多痛苦了。
靜態強類型語言也比較容易實現靜態分析工具,也就比較容易做(半)自動化的重構,這對於改善code health是很有幫助的。想想一個簡單的 rename method 重構,在 duck typing 的語言裡邊恐怕只能人工慢慢分析調用點,於是人們就懶得重構了,後果就是放縱代碼腐壞。因此C++和Java都適合做大的項目。
不過C++比Java確實有一個缺點:任何一個豬隊友都可以輕易造成 segmentation fault,把整個進程搞crash,而在Java裡邊最多拋個NPE,進程不至於crash。google,baidu,騰訊不都是c++重度用戶嗎?參考
騰訊程序員一年寫多少代碼?
除了@扼殺黑暗 的說法以外,C++還有其他語言所不具備的特點,就是如果你不想讓傻逼參與進來的話,可以用多點語法。
這個問題。。。實際上拼的是老闆的錢袋子和公司在業界的影響力。BA、完美等公司錢袋子夠深影響力也夠,GCC、VC++、clang、JAVA和JIT編譯器的主程都能請過來,還愁什麼語言的問題,實在不行自己寫一個語言出來。
一旦離開BA或其它牛鼻公司的環境,你再到人才市場找一批同等牛鼻的C++程序員試試?錢袋子夠深且打個電話就有一批C++大牛過來跟你幹活、或程序基本不需要維護、基本不需要更新太多功能、不用請人的可以例外。
遊戲客戶端、大型生產力工具類軟體等例外。偏個題,在我看來Java比C++還適合做「大的項目」,可以窺出一些基本特徵來,什麼樣的語言適合做「大的項目」——這裡我說的「大的項目」是指「大規模勞動力密集型編程項目」:1.自身足夠完備,有強大的IDE/調試器/重構工具等支持。2.最好是靜態的、強類型的,有強大的編譯期檢測,能夠減少新手埋雷。3.語言特性不要太多,或者太巧妙,以此限制高手發揮的空間。
4.語言特性不要太少,以此保證有不太差的生產力。
5.有全世界或者大公司維護的背景。總之我覺得如果把項目組每個程序員產出的代碼質量與風格看做離散隨機變數的話,那麼軟體工程要追求的必然是提高期望、降低方差。這樣看就知道為什麼我覺得Java適合搞「大項目」,而我所擅長/熱衷的JavaScript則不適合……C++其實挺不滿足一些要求的,因為它複雜起來可以很複雜,高手玩得飛起,但如果整個團隊都用複雜的,那麼團隊門檻高了,也能提高期望降低方差。可以創造工作機會一個程序員的bug需要三個人來修改這三個人的bug需要九個人……
1:有些項目對性能要求比較高,用c++比較適合。2:c++是一門靜態語言,良好的類型定義,以及良好的IDE支持,可以提高開發效率。3:C++的STL庫給編程帶來了非常大的便利。4:重構這種事情,和語言沒多少關係,難道你用java寫代碼就不用重構了?5:c++雖然坑比較多,但是c++高手一般都有自己的編程規範,可以避開那些坑。
語言都是紙老虎,架構才是硬道理,看看Android這個怪物吧
不適合。除了視頻遊戲領域,一般來說C++只適合做大項目裡面的對性能要求最高的組件
我經歷過一個用C++開發廣告伺服器的項目,並發C10K以上。代碼量上去以後,工程師稍微不留神就會導致Seg Fault,然後又要連夜加班救火、回滾版本。另外由於實例化模版導致目標代碼動輒100M以上也讓所有人覺得這是一個醜陋不堪的編程系統。該項目過後,基本上所有的工程師都對C++失去了信心,改去用C了
用C++開發的企業內網應用我沒有看見一個能保持長久生命力不重寫的樓主其實複雜的大型項目也應該是要拆成小的模塊啊,所以你這問題本身就不在點上,另外重構難,重構要用IDE才好,不然不太好處理,尤其又是c++,
推薦閱讀:
※學編程主要是學習什麼(學習重點是什麼?)
※國外很多遊戲服務端遊戲邏輯部分用c++開發,上線後沒辦法熱更,他們是怎麼考慮的?
※本人有一定的C++基礎,想哪一些項目練手熟練C++,怎麼開始呢?有什麼建議?
※有沒有C++的web伺服器?
※會C語言,如何學好C++?