-
1 # 藍丘
-
2 # 農村的壯漢
個人建議。去學一下,畢竟藝多不壓身,學會了,都是自己的能力,在今後的工作中能力就代表著金錢,關於難不難,這個其實很難回答,給您價格小故事,名字加小馬過河,您應該聽過,這是在我上小學的時候語文課本上講過的,大概意思就是,有一匹小馬駒要去找媽媽,在路上遇到一條河,愣住了,它不知道深淺,不敢過去,就像附件的動物朋友們打聽,河水有多深,自己能不能過去,問的有老牛和松鼠,等到的答案是不一樣的,最後自己大膽的去嘗試後,發現不想旁人說的那樣。其實做任何事情都一樣,只要你下定決心,透過自己努力,一定會有收穫的。加油吧朋友,您的未來一片光明。
祝福您,學業有成,錦繡前程 鵬程萬里。
-
3 # Me極客
一、前言
對於理工 科學生來說,這個答案可能很簡單,因為這是一門必修課。而對於程式設計師來說選擇一門程式語言,在某種程度上,對職業生涯的發展會產生重大的影響,所以必須慎 之又慎。那麼,為什麼要選擇一門誕生了將近半個世紀的語言?本文不是老生常談的廢話,如:”C 語言是程式設計的基礎”、”學好 C 語言,走遍天下都不怕”等等,本文力爭詳盡而又有理的回答這個問題,旨在成為最好的為什麼要學習和使用 C 的文章。
二、C 語言C 語言是由美國 AT&T 貝爾實驗室的研究員 Dennis Ritchie 在 B 語言的基礎上,最初作為改造 Unix 作業系統的開發語言,並伴隨著 Unix 作業系統興起而流行,後來,隨著微型計算機的發展,C 開始被移植到其他作業系統平臺上,成為獨立的程式設計語言。
下圖摘自 TIOBE 程式語言排行榜,過去 30 年 90% 時間裡 C 都是獨領風騷的,僅偶爾被 Java 超越:
技術分享
那麼是因為一門語言一直位於排行榜的第一名就該去學習和使用嗎?顯然不是,人云亦云是程式設計師的大忌。為作業系統而生的標籤註定了 C 不可能平庸,實話實說,C 是一門很難學習和使用的程式語言,沒有編譯原理、作業系統和計算機體系結構紮實的基礎知識,根本不可能把 C 學的明白、用的順手。C 作為一門工程實用性極強的語言,提供了對作業系統和記憶體的精準控制,高效能的執行時環境,原始碼級的跨平臺編譯等優點,才是我們必須學習和使用 C 的理由。
同時,幸運的是 C 也是個有趣的東西,對程式設計的認知越深,就會越覺得有意思,我簡單列舉一些 C 的優點:
2.1)結構化設計語言,語法清晰、結構簡單,模組化使得程式的各個部分除了必要的資訊交流外彼此獨立,便於開發、除錯以及除錯。
2.2)運算子多,把括號、賦值、強制型別轉換等都作為運算子處理,靈活使用各種運算子可以實現在其它高階語言中難以實現的運算。
2.3)資料結構豐富,能實現各種複雜的資料型別的運算,引入指標、結構體概念使程式效率更高。
2.4)為作業系統而生,可以像組合語言一樣對位、位元組和地址進行操作,允許直接訪問物理地址對硬體進行操作,把高階語言的基本結構和語句與低階語言的實用性結合起來。
2.5)程式執行效率高,一般比彙編程式生成的目的碼效率低 10%~20%。
2.6)可移植性好,C 語言抽象了針對 CPU 程式設計的細節,能廣泛應用於針對大型作業系統和系統軟體的編寫。
2.7)具備強大的繪圖功能,和 C++ 一樣也可以寫出很優雅的二維、三維圖形和動畫。
有人說,C 是 C++ 的子集,C 能做到的事,C++ 一樣能做到,並且還可以做的更好,如:三大面向物件特性、GUI 程式設計,誠然,我承認在 GUI 程式設計領域 C++ 佔據著絕對的統治地位,至今無人能撼動。但真的有必要用 C++ 來替代 C 完成工作嗎?很多時候 C++ 解決問題的思路真的比 C 更先進嗎?
三、C 和 C++ 比較寫到這一 段的時候我有一種戰戰兢兢、如履薄冰的感覺,畢竟 C、C++ 是廣大程式設計師都很熟悉東西,打起嘴炮來也是極其恐怖的,其實在關乎信仰的問題上,任何的爭論都是無止境的,也是無意義的。我希望大家不要把大量精力用來爭 論純粹的語言優劣上,而是去思考如何的正確的把事情做好,什麼是正確的做事——快速高效的開發,保障快速穩定的執行,快速簡單的維護。
下圖是嘴炮大神 Linus Torvalds 當年抨擊 C++ 和他周圍那些 C++ 大牛程式設計師們的犀利言辭,其實我個人並不欣賞 Linus 的個人風格,我還是希望大家能心平氣和的談談 C 相比 C++ 的一些優點和現狀:
技術分享
3.1)隱式操作:C 簡單直接、結構清晰,每行程式碼都能清楚的被反彙編成相應的語句,系統會嚴格按照你的程式碼去執行。而 C++ 則不盡然,簡單的語句也說不清楚究竟有多少次構造和複製,這樣編寫底層程式碼是完全不行的,底層需要精準和嚴格的控制。
3.2) 語言介面:現代軟體工程專案的開發,不但對效能有很高要求,對於語言介面的對接能力也有很高要求,因為偌大的一個專案很少僅使用一種語言來進行開發,對於 底層,C++ 對記憶體和硬體的控制不如 C 簡潔精準;對於很多動態語言和中介軟體,如:PHP、Python 和 Apache、Redis,都受了 C 的很大影響,甚至就是 C 開發出來的東西,對接起來非常方便。沒錯兒,其實 C++ 採用迂迴的方式也能對接的,但是,遠遠不如 C 方便,開發和維護成本非常高。
3.3)硬體層:
3.2.1>分配記憶體:系統加電後執行,經過彙編初始化棧,然後再跳轉到 C 語言的 start_init() 函式去,這時候記憶體分配機制都還沒有建立,C++ 如何定義類?如何例項化物件?
3.2.2>標準庫依賴:C 的所有特性都可以不依賴任何庫執行,如有必要,可以按照特定需求自己編寫庫。
3.2.3>處理器相容:C++ 的類是依賴基地址+偏移地址的定址方式,很多微處理器只有簡單的給定地址定址,不支援一條語句實現 base + offset 的定址機制,很多 C++ 程式碼編譯出來需要更多的指令來運算地址,導致效能下降了太多。
3.4)應用層:C++ 在做應用層尤其是 GUI 程式設計,這是 C++ 的傳統強項,我一直堅持 C 也能優雅的做出影象和動畫,但開發效率確實較 C++ 低很多,最近有個很火的 RUST 語言,號稱是未來唯一能取代 C++ 的程式語言,感興趣的同學可以多關注下。
四、總結由上圖可知,作業系統、編譯原理、資料結構與演算法等等基礎知識,是深入理解、掌握和靈活運用 C 的重要前提,現階段程式設計師職業生涯超過一半的熱門方向直接或間接與 C 有關,我想,學好 C 的重要性也就不言而喻了。
-
4 # 明智小呆
c語言可以說是現代的基礎性計算機語言,肯定是必須掌握的。在遊戲開發等當面都有這很大作用。
對於難度不算太難,就是想是學一門語言,但是語法很少。只要透過一段時間的練習就很容易記住。可以透過分析網上的一些程式碼進行分析。這是我自己的學習方法。
-
5 # 光風霽月hb
完全不需要,比如你培訓的是java或者python 或者前端開發,那麼只會給你這些語言的語法或者框架,學完之後,一般培訓公司都會給你推薦公司的。c語言也只不過是一門語言而已。
回覆列表
C語言是基礎,幾乎所有科班入學都要學C,最不濟入學第二學期就會學。C語言是面相過程的語言,在使用的時候能讓你對計算機的程式碼實現有更深刻的理解。無論是演算法,還是人工智慧,語言基礎牢固才能更容易實現。地基不穩蓋的快,蓋不高。