【转载】C/C++语言分析 每年学一种编程语言 git历史
http://blog.csdn.net/turingbook/article/details/1778867
《程序員修煉之路》英文注釋版
作者提出的經(jīng)營之道是:
——Invest Regularly,不斷投資,積少成多。
——Diversity,擴(kuò)大知識面,多元化,減少風(fēng)險,增加潛力。
——Manage Risk,控制風(fēng)險,這點與上呼應(yīng),要注意結(jié)合學(xué)習(xí)短線和長線技術(shù)。
——Buy low,sell hign,低買高賣,尋找潛力股。
——Review and rebalance,多總結(jié)。
?
作者提出的8大目標(biāo),可能更有實踐意義:
——每年學(xué)習(xí)一種新語言。
?
http://blog.csdn.net/turingbook/article/details/1775488
Linus和Dmitry關(guān)于git源代碼的C/C++之爭:
”如果你想用更花哨的語言,C++絕對是最糟糕的選擇。如果想要真正的高級特性,那就選擇有垃圾回收或者好的系統(tǒng)集成的,而不是既缺乏C的簡約(sparseness)又缺乏C的直接而且沒有重要概念的高層綁定(high-level bindings to important concepts)的東西。“一言以蔽之,C++正處在困境當(dāng)中,它既無法幫助原型化或者簡單的GUI編程足夠簡化從而真正可用,又
不是C那樣積極地鼓勵你使用簡單和直接的語言構(gòu)造的精益系統(tǒng)編程語言。(另一位同學(xué)插了一句:這還沒有提到很難找到兩個C++編譯器支持同樣的特性。)
作者劉江的按注:
Dmitry有一點是肯定正確的,語言之爭更多的是一種類似宗教信仰上的,所以很難有結(jié)果,也沒有太多實際意義。這種爭論因為出自高手之間,所以還是會透露出很多重要的信息。比如:1. 對于要求性能高的系統(tǒng)編程領(lǐng)域,C++其實未必勝過C,而且事實上,也確實有很多此類項目是選擇C作為主要語言的。C的生命力目前仍然毋庸置疑。更多的信息可以讀這里。2. C++目前確實處于一種被夾攻的態(tài)勢,一方面在企業(yè)級系統(tǒng)開發(fā)(數(shù)據(jù)密集、業(yè)務(wù)規(guī)則復(fù)雜多變)中,C++已經(jīng)基本被Java和C#等淘汰出局,另一方面在系統(tǒng)編程和嵌入式等更接近硬件的領(lǐng)域,又遭到C的強(qiáng)烈狙擊。3. OO技術(shù)并非one-size-fits-all。 C語言作為一種古老的語言,其局限性也是很明顯的,比如已經(jīng)成為安全問題淵藪的緩沖區(qū)溢出。C的標(biāo)準(zhǔn)庫也存在各種各樣的問題。對于更加貼近現(xiàn)實世界的眾多項目,沒有面向?qū)ο髾C(jī)制,顯然會影響開發(fā)效率。C++目前的困境,很大程度上是由于此前的圖書和文獻(xiàn)曾經(jīng)一度傾向于炫技,陶醉于對語言各種細(xì)節(jié)的深入探索,有華麗化、復(fù)雜化的趨勢,語言設(shè)計者們苦心設(shè)計出來各種豐富的特性和多范型的編程風(fēng)格,卻成了學(xué)習(xí)者和使用者的負(fù)擔(dān)老人毛病多多,新人青黃不接,C++社區(qū)的確面臨危機(jī)。注:我也下載了文章提到的《C++必知必會》里面還提到一個Compact的概念,參考?http://www.faqs.org/docs/artu/ch04s02.html#compactness
Compactness is the property that a design can fit inside a human being's head.A good practical test for compactness is this: Does an experienced user normally need a manual?
If not, then the design (or at least the subset of it that covers normal use) is compact. “在通用編程語言中,C和Python是半緊湊的;Perl、Java、Emacs Lisp和shell則不是(尤其是真正的shell編程要求你知道半打sed和awk這樣的其他工具)。
C++是反緊湊的——語言的設(shè)計者承認(rèn),他并不指望任何一個程序員能夠完全理解這一語言。”
?
?
http://blog.csdn.net/myan/article/details/1777230
時至今日,在一般的場合下,C和C++語言的主要用途就是系統(tǒng)級軟件的開發(fā)。具體地說,C/C++寫平臺、工具和基礎(chǔ)庫,支持高層的語言來完成應(yīng)用邏輯。在9月份《程序員》雜志上刊登的一篇《微軟架構(gòu)師談編程語言發(fā)展》的文章里,Brian Beckman直截了當(dāng)?shù)卣f,C++語言主要是用來開發(fā)別的語言的。
這話片面一點,如果改成 “C++語言主要是用來支持別的語言的”,那就大體沒錯了。
做系統(tǒng)軟件開發(fā)的時候,重要的是理解系統(tǒng)的運作方式,那些漂亮的抽象手法和高級特性是次要的。
那些高級的抽象結(jié)構(gòu)往往是 不必要的,反而是由于抽象層次的提高,使得開發(fā)者要弄清楚“下面實際發(fā)生的事情”變得不太容易了。所以很多老手實際上覺得用C語言控制力更強(qiáng)一些,更得心 應(yīng)手一些。真正的C語言高手,對于語言和編譯器都很熟悉了,
基本上在寫C時候就已經(jīng)知道編譯器優(yōu)化以后產(chǎn)生匯編代碼是個什么樣子,甚至可以改變C代碼來引 導(dǎo)編譯器產(chǎn)生最優(yōu)化的機(jī)器碼。
而C++的機(jī)制很豐富,很多機(jī)制是為了滿足高層應(yīng)用和框架的需求而準(zhǔn)備的,在這個層次上發(fā)揮不出來,反而把清晰性給犧牲掉 了。
很多時候,一個簡單的語句,到底背后會發(fā)生什么,即使是老手也說不清。 std::string s(“Linux Torvalds");std::string scopy = s;上面這段代碼不過是創(chuàng)建兩個內(nèi)容相同的字符串副本,但是沒有任何一個人能夠在不了解更多信息的情況下清楚地描述背后所發(fā)生的事情,
因為不同的STL對于 string的實現(xiàn)方式不同,因此在copy assignment時表現(xiàn)也不同,有的可能是簡單地復(fù)制字符串對象,有的可能具有ref-counting機(jī)制,
需要創(chuàng)建對象、設(shè)定對象值、增加引用計 數(shù),有的沒有考慮線程安全性,有的考慮了線程安全性,還得加鎖解鎖,對不起,加解鎖也還有很多做法。
創(chuàng)建新的string對象時,有時還需要調(diào)用內(nèi)存分配 器,而這個東西的實現(xiàn)又五花八門,有的直接new char[],有的從內(nèi)建的memory pool申請,
memeory pool是不是線程安全的?對不起,這次可能又要涉及加解鎖問題。memeory pool會不會已經(jīng)滿了?要不要次第調(diào)用new/malloc申請新的內(nèi)存塊?
總之,后面的事情夠多夠復(fù)雜,沒有相當(dāng)功力,對平臺了解不夠深入,很難說出個子午卯酉來。
寫算法程序的時候,不用STL就覺得不爽。
一個transform 就可以搞定的事情,非要用for循環(huán),這會讓我感覺渾身不自在。所以一般情況下,拿到一個什么問題,我還是會用C++去解決的。對我來說, Torvalds的話其實是很中肯的,即使是用C++,也要盡可能搞清楚其背后發(fā)生的事情,這樣在寫low level程序的時候才會有把握。
如果是設(shè)計應(yīng)用級別的程序,就盡可能不用C/C++,把底層的事情都忘掉,專心專意做好應(yīng)用層的設(shè)計才是正道。
?
http://blog.codingnow.com/2007/09/c_vs_cplusplus.html#more
好了,讓我再引用 Linus 的一句說到我心坎里的話。“字符串/內(nèi)存管理根本無關(guān)緊要。這不是重要的部分,而且也不復(fù)雜。唯一真正重要的部分是設(shè)計。”設(shè)計!這才是重中之重。http://blog.csdn.net/myan/article/details/1778843
這里面的道理是這樣的,反正現(xiàn)在C和C++都是來做系統(tǒng)級開發(fā),那些華麗的抽象機(jī)制用不上,思考解決方案的時候,就以C的方式。 注意,C也是可以做基于對 象甚至面向?qū)ο笊踔两M件級別的設(shè)計的,但是在C的層面上思考問題,設(shè)計能夠更精益(lean,現(xiàn)在這是個時髦詞),更輕便,更直接。 我支持STL是基于同樣的理由。很多時候,你從C出發(fā)得到的設(shè)計,也無非就是STL已經(jīng)實現(xiàn)得很好的東西。在這個時候,當(dāng)然可以用STL。尤其是那些算 法,針對C array也是適用的,用accumulate求和,用transform映射,用adjacent_find尋找相等的毗鄰項,
用 lower_bound和equal_range做二分查找,等等,這不是比手寫要爽多了嗎?當(dāng)然,使用STL,還是必須熟悉其背后的機(jī)理,沒有這個底 子,還是規(guī)規(guī)矩矩用C算了。 一般性的編碼實踐準(zhǔn)則,以及基本的編程能力和基本功,乃至基本的程序設(shè)計理論以及算法設(shè)計。才是真正需要花時間掌握的東西。 C++中眾多的細(xì)節(jié)雖然在庫設(shè)計者手里面有其用武之地,但普通程序員則根本無需過多關(guān)注,尤其是沒有實際動機(jī)的關(guān)注。 學(xué)習(xí)最佳編碼實踐比學(xué)習(xí)C++更重要。看優(yōu)秀的代碼也比埋頭用差勁的編碼方式寫垃圾代碼要有效。直接、清晰、明了、KISS地表達(dá)意圖比玩編碼花招要重要… 十年學(xué)會編程不是指對每門語言都得十年,那一輩子才能學(xué)幾門語言哪,如果按字母順序?qū)W的話一輩子都別指望學(xué)到Ruby了;
十年學(xué)習(xí)編程更不是指先把語言特性從粗到細(xì)全都吃透才敢下手編程,在實踐中提高才是最重要的。 C++的書,Bjarne的圣經(jīng)《The C++ Programming Language》是高屋建瓴的。《大規(guī)模C++程序設(shè)計》是挺務(wù)實的。《Accelerated C++》是最佳入門的。
《C++ Templates》是僅作參考的。《C++ Template Metaprogramming》是精力過剩者可以玩一玩的,普通程序員碰都別碰的。
《ISO.IEC C++ Standard 14882》不是拿來讀的。Bjarne最近在做C++的教育,新書是絕對可以期待的。
P.S.?關(guān)于如何學(xué)習(xí)編程,g9的blog上有許多精彩的文章:這里,這里,這里,這里…?實際上,我建議你去把g9老大的blog翻個底朝天?:P
學(xué)C++”和“不學(xué)C++”這個二分法是沒意義的,為什么?因為這個問題很表面,甚至很浮躁。重要的不是你掌握的語言,而是你掌握的能力,借用myan老大的話,“重要的是這個磨練過程,而不是結(jié)果,要的是你粗壯的腿,而不是你身上背的那袋鹽巴。”。
對此大嘴Joel在《Joel On Software》里面提到的漏洞抽象定律闡述得就非常漂亮。
這是Joel在2002年提出的,所有不證自明的抽象都是有漏洞的。抽象泄漏是指任何試圖減少或隱藏復(fù)雜性的抽象,其實并不能完全屏蔽細(xì)節(jié),試圖被隱藏的復(fù)雜細(xì)節(jié)總是可能會泄漏出來。抽象漏洞法則說明:任何時候一個可以提高效率的抽象工具,雖然節(jié)約了我們工作的時間,但是,節(jié)約不了我們的學(xué)習(xí)時間。代碼生成工具如ORM等Hibernate都是這種思路,它抽象了一些東西,但是,所有的抽象機(jī)制都是有漏洞的。唯一可以處理漏洞的方法就是知道抽象的原理,
都抽象了些什么東西。所以,在你了解抽象原理的過程中,時間之神將討回你之前節(jié)約的時間。 所以,答案是,讓你成為高手的并不是你掌握什么語言,精通C++未必就能讓你成為高手,不精通C++也未必就能讓你成為低手。 按照一種曹操的邏輯,“天下語言,唯imperative與declarative耳”。C++是前者里面最復(fù)雜的一種,支持最廣泛的編程范式。
借用當(dāng)初數(shù)學(xué)系入學(xué)大會上一個老師的話,“你數(shù)學(xué)都學(xué)了,還有什么不能學(xué)的呢?”。學(xué)語言是一個途徑,如果你把它用來磨練自己,可以。
如果你把它用來作為學(xué)習(xí)系統(tǒng)底層知識的鑰匙,可以。如果你把它用來作為學(xué)習(xí)如何編寫優(yōu)秀的代碼,如何組織大型的程序,如何進(jìn)行抽象設(shè)計,可以。
如果掉書袋,光啃細(xì)節(jié),我認(rèn)為不可以(除非你必須要用到細(xì)節(jié),像boost庫的coder們)。
然后再借用一下g9老大的《銀彈和我們的職業(yè)》中的話:
銀彈和我們的職業(yè)發(fā)展有什么相干?很簡單:我們得把時間用于學(xué)習(xí)解決本質(zhì)困難。新技術(shù)給高手帶來方便。菜鳥們卻不用指望被新技術(shù)拯救。沿用以前的比喻, 一流的攝影師不會因為相機(jī)的更新?lián)Q代而丟掉飯碗,反而可能借助先進(jìn)技術(shù)留下傳世佳作。因為攝影的本質(zhì)困難,還是攝影師的藝術(shù)感覺。
熱門技術(shù)也就等于相機(jī)。 不停追新,學(xué)習(xí)這個框架,那個軟件,好比成天鉆研不同相機(jī)的說明書。而熱門技術(shù)后的來龍去脈,才好比攝影技術(shù)。為什么推出這個框架?
它解決了什么其它框架 不能解決的問題?它在哪里適用?它在哪里不適用?它用了什么新的設(shè)計?它改進(jìn)了哪些舊的設(shè)計?Why is forever.
和 朋友聊天時提到Steve McConnell的《Professional Software Development》里面引了一個調(diào)查,說軟件開發(fā)技術(shù)的半衰期20年。
也就是說20年后我們現(xiàn)在知識里一半的東西過時。相當(dāng)不壞。朋友打趣道:“應(yīng) 該說20年后IT界一半的技術(shù)過時,我們學(xué)的過時技術(shù)遠(yuǎn)遠(yuǎn)超過這個比例。
具體到某人,很可能5年他就廢了”。話雖悲觀,但可見選擇學(xué)習(xí)內(nèi)容的重要性。學(xué)習(xí) 本質(zhì)技藝(技術(shù)遲早過時,技藝卻常用長新)還有一好處,
就是不用看著自己心愛的技術(shù)受到挑戰(zhàn)的時候干嚎。C/C++過時就過時了唄,只要有其它的系統(tǒng)編程 語言。Java倒了就倒了唄,未必我不能用.NET?
Ruby曇花一現(xiàn)又如何。如果用得不爽,換到其它動態(tài)語言就是了。J2EE被廢了又怎樣?未必我們就 做不出分布系統(tǒng)了?這里還舉了更多的例子。一句話,只有人是真正的銀彈。職業(yè)發(fā)展的目標(biāo),就是把自己變成銀彈。那時候,你就不再是人,而是人彈。
?
http://blog.csdn.net/turingbook/article/details/1775488
剛知道git也是Linus開發(fā)的。git誕生于2005年,由于Bitkeeper停止和Linux源碼庫合作,Linus自己開發(fā)的一套分布式代碼管理系統(tǒng),特性有:
速度 簡單的設(shè)計 對非線性開發(fā)模式的強(qiáng)力支持(允許上千個并行開發(fā)的分支) 完全分布式 有能力高效管理類似 Linux 內(nèi)核一樣的超大規(guī)模項目(速度和數(shù)據(jù)量)下面這個解釋的很好:
http://www.open-open.com/lib/view/open1339575112974.html
?
?
https://www.zhihu.com/question/21994269
Linus Torvalds為什么能稱為大神:
作者:Copter鏈接:https://www.zhihu.com/question/21994269/answer/19966256
來源:知乎
著作權(quán)歸作者所有,轉(zhuǎn)載請聯(lián)系作者獲得授權(quán)。
抽象總結(jié):當(dāng)一個人的影響力遠(yuǎn)超過他的能力時,他離人們心中的神位已經(jīng)不遠(yuǎn)了。
開源世界中,你的貢獻(xiàn)決定了你的地位。Linus 作為程序員,無可爭議地屬于頂尖級別。他不僅是現(xiàn)如今廣泛應(yīng)用于各領(lǐng)域的 Linux 內(nèi)核 The Linux Kernel Archives 的創(chuàng)始人(不必說當(dāng)時他還是個大學(xué)生),也是多年來成功管理 Linux 內(nèi)核開發(fā) kernel/git/torvalds/linux.git 的核心人物。僅憑這兩點,被網(wǎng)友稱為“大神”一點不為過。
他同時也是 Git http://git-scm.com/ 原始作者。Git 版本管理工具正在被越來越多的項目采用,逐漸統(tǒng)一了開發(fā)管理市場。
另外,他本人的一些觀點得到了程序員的廣泛贊譽(yù),比如他認(rèn)為批評就應(yīng)該直接了當(dāng)?shù)卣f出來,以便快速地消除誤會并修正錯誤(大意)等。著名的 "So, Nvidia, fuck you!“ 以及對 C++ 語言設(shè)計的抨擊Re: [RFC] Convert builin-mailinfo.c to use The Better String Library. [LWN.net] 都是踐行這一觀點的有力代表。還因為此人無不良嗜好,行事低調(diào),相婦教子,家庭美滿。容易獲得程序員們的一致肯定。
至于他獲得的一些官方認(rèn)可,我想就不必列舉了吧。順便說,拋棄百毒,題主你又離大神近了一步。:P
轉(zhuǎn)載于:https://www.cnblogs.com/charlesblc/p/5951274.html
總結(jié)
以上是生活随笔為你收集整理的【转载】C/C++语言分析 每年学一种编程语言 git历史的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 1060ti和1060什么区别
- 下一篇: 华为mate20x屏幕供应商(华为技术有