C 語言和 Python,該從哪個入門編程?

學的文科,進了互聯網公司做運營。雖然運營可以不懂技術,但看到同組有人和技術聊起問題頭頭是道,壓力山大= =

於是想學編程,小白入門級。問周圍的技術GG,有推薦C語言的,也有推薦python,但C更多一些。搜過一些相關課程,英文的中文的,沒啥判斷力。目前鎖定了浙大和哈工大的兩個入門級的MOOC:C語言程序設計 和 高級語言程序設計(Python) 。Python課程介紹里說C語言是「低級」語言,「會嚇退很多初學者,不利於學習興趣的培養」。還是python比較養眼可人簡單輕鬆易上手?C語言和Python選一個學,你推薦哪一個?有什麼好的課程或書籍推薦嗎?


利益相關

(相關的還真是好多,-_-!!!)

  1. 題主問到的兩門課都是網易雲課堂的」中國大學MOOC「中的,我就在網易雲課堂工作

  2. C語言課的教師@翁愷是最早和網易雲課堂合作的教師之一,我和他非常熟,有惺惺相惜之感(我的感覺,不知道他是否同感)
  3. Python課的教師車萬翔比我小兩屆,本科時我們就很熟,後來都是相同的軌跡讀研、留校、主講C語言……後來我跑路到網易了,他當上博導了

------------------------------------------------------割一下-------------------------------------------------------

背景:

(這段背景介紹很像自我吹噓,但為了後面論述的可信性,我必須說實話啊。不喜歡就跳過吧)

我的教學生涯可以在 http://sunner.cn/courses/index.html 查到。從2003年給計算機學院本科開講C語言始,就以摧枯拉朽之勢在校園裡颳起一陣旋(yao)風(feng),細節可以看我C語言有關的博客:C語言課 | Hello World。有三個標誌性事件可以證明我多了解這門課:

  1. 全校學生投票,讓我成為學生「心目中的優秀教師」了,幾千教師中只選十人哦

  2. 哈工大C語言課被評為國家級精品課程。哈工大精品課程:C語言程序設計,照片中穿著最geek的就是我
  3. 曾給全國高校教師培訓怎麼講好C語言,轟動全場:參加全國高校教師網培有感

Python課我只講過1次,還是玩票性質的選修課。平時倒是常用Python做些小程(jiao)序(ben)提高自己的工作效率,但非常勉強拿得出手的也只有 sunner/buzz2weibo · GitHub。對Python的了解比較淺(相對C語言而言)。

----------------------------------------------------再割一下-------------------------------------------------------

此問不是語言之爭,而是問哪個語言更適合入門,所以我只談入門,不對兩個語言優劣做比較,雖然C語言是世界上最好的語言

我的觀點:

  1. 立志做技術行,從C語言入門百利無害
  2. 想不清楚是否做技術行,兩個語言皆可,看緣分了
  3. 不做技術,必須Python

C標準委員會寫的C語言基本原理(http://www.open-std.org/jtc1/sc22/wg14/www/C99RationaleV5.10.pdf)中談到C的設計精神,有一句話:

Make it fast, even if it is not guaranteed to be portable.

這句話奠定了C語言的設計首先要適應機器直覺,其次才是適應人的直覺。所以才會有指針,這種活生生的內存地址展示;數組下標從0而不是1開始等反人類的設計。因此,想駕馭C,就必須了解機器的秉性。

與C正相反,Python的設計理念是無所不用其極地適應人的直覺,所以獲得了「可執行的偽代碼」美譽(偽代碼的意思就是很接近英語的程序代碼)。這樣帶來一個很大的好處,就是Python學習者的注意力無需過多糾纏於語法等細節,而是可以更多地集中在「程序設計思維」,這是初學編程最重要的東西。

以上,按題主的需求,文科背景,只為了和技術溝通方便(就是獲得程序設計思維),那麼我建議選Python。

略跑題一下,解釋一下其它情況下的選擇。

如果堅定要做技術行,不了解機器是做不深、做不強的,所以C語言是繞不過的。那麼在入門時,C和Python就分別對應Hard和Easy模式。有天賦的,當然要選Hard;其它就先選Easy,再來Hard吧。

如果對未來迷茫,不確定該做什麼,那就也不必費心選擇,看哪個順眼就學哪個(話說MOOC時代真好,不會被學校的課程安排限制住,想學什麼都能學到),先交往,再看是否適合結婚。我在C語言課里總向學生灌輸一個觀點,如果C語言學得痛苦,那就趕快想想改行吧,趁還年輕,就是此意。

--------------------------------------------------吐槽時間--------------------------------------------------------

不要看是個學校就開C語言課,是個專業就要學C語言,就以為人人都應該學C語言。這是典型的愚昧,被害了都不知道。「統計系大學生學 C 語言有什麼實際用處?可否舉例說明?」這個鏈接指向的回答是 @OAHCUYUIL 引用我為一本C語言書寫的開頭,講了我對「為什麼要學C語言」的看法,大概是當前C語言教材和老師中對「全民C語言」現象真話說得最多的了。但最大的實話其實我沒敢說,畢竟飯還是要吃,書還是要賣的。想必知友都是三觀正,與人為善,不傳謠的,所以這裡就說句實(yao)話(yan)吧:

老師們上學時學的C,工作多年也只會講C,咋可能讓他們講別的語言?

這已經是個死結了,生生不息……


先說結論,建議C

首先你要看看自己是要幹什麼,學習X語言只有兩個目的:

1,成為一名軟狗。

2,成為一名偽軟狗。

如果你要成為一名軟狗,請學習C。因為C是一貧如洗的語言,C能給你最好的邏輯鍛煉而不是給你個庫你看看有什麼功能。

如果你要成為一名偽軟狗,請學習C。

為啥呢,笑,因為你連C都不會怎麼裝x啊。當然這不是重點。(逃

由於C的先天的單純和面向過程的特性,以及略現死板的編碼要求,都讓人能夠快速掌握編程思想。但是C要學到什麼程度就見仁見智了。比如我要成為一個嵌入式程序員,我就必須對C的各種小庫了如指掌,各種函數什麼功能,指針怎麼指來指去。還需要明確內存操作等相關問題。最後類似於用C來實現某些位運算啊I/O調用啊小破標誌位動來動去啊。

但是我要成為一個工業生產程序員我就了解C的基本思想就行了,無需了解C中相對不容易調用的庫,也不用太考慮指針和位運算。因為我的思路是要向面向對象甚至面向切面拓展的。

至於python,我也是很喜歡啊,最近剛剛入門。感覺好簡潔啊,好歡樂啊,很多C#搞半天的玩意一會兒就寫完了啊,站在了巨人肩膀上真是爽啊,前人栽樹好乘涼啊!!

不過這都是我使用C=》C++(也就大學學了點)=》C#後的感覺。

要是我上來學的是python,我的感覺估計就是哎我去怎麼怎麼坑爹這語法,哎我去這個實現怎麼這麼費勁,哎我去縮進和邏輯怎麼沒關係。。。

先入為主的編程思想,很影響後續語言的學習的。

不過Python也很不錯,可以相當快速度入門,急速做出東西。學習曲線比較平緩而且最重要的是比較有成就感。

總結一下吧:

如果你想要作為一個程序員生活下去,請以C入門,沒錯的。

如果你想要在小白面前一展談資,請以C入門,妥妥的。

如果你想要迅速做出需要的東西,請怒學Python,學成了記得給我培訓下。

如果你想要後續撬開面向對象或面向切面大門,請學C。

對Java等面向對象語言沒興趣就是想寫代碼,Python。

以上。


Python號稱21世紀的VB。我到現在對Python還是文盲狀態,但小工具全用Python寫了。包括一個終端用的微型網頁瀏覽器,一個搜狗壁紙自動下載器,一個桌面用的大寫鎖定notifier,一個終端版本仿扣扣的聊天軟體來解決校園網上不了webQQ,代碼都不超200。而我前幾天才知道Python是面向對象的。這才是真正的0基礎輕鬆上手。。。

順便說句,用Python 2.x的話,列印不換行不要用print "abc",這種逗號結尾的,丫的會多一個空格出來,百度知道真是坑。。。

CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC

突然多了幾個贊同受寵若驚,送上一點福利,guangmuzhu/PyChat · GitHub,點對點的聊天,實現了歷史記錄,文件傳輸,屏幕截圖,視頻聊天等常用功能,聊天以氣泡顯示。

已經在Ubuntu 14.04和fedora 20測試通過。

CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC

現在看以前寫的,覺得實在不忍心直視,大家就不用去github點贊了。。。


現在國外教編程都換python了。C是偏低層的,細節多,不易學。Python更高級的語言,低層功能封裝起來。關注的是更快的實現你的想法。舉個例子:

三體里有個二維展開的概念,說煙頭二維展開後有客廳那麼大。真的嗎?我們編程驗證一下。

首先數學建模,將展開後的煙頭想像為一張很薄的正方形紙,面積area,厚度h,

對摺1次,面積變成area/2,厚度變成h*2

對摺10000次,面積變成area/2^10000,厚度變成h*2^10000

如果對摺10000次後,紙成了1立方厘米的正方體,那麼問area是多大,厚度是多少?

這道題如果用C來完成還是有點小難度的。感興趣的可以試試

而python的話就很簡單,area=2**10000 可以直接算出來,厚度1/(2**10000)因為超過了double類型,因此用decimal可以解決。

from decimal import Decimal as D

D(1)/D(2**10000)

得到厚度後,再根據實際厚度可能的最小值,比如納米,就可以推出現在最多能展開多少次。

這個例子展現了python內建類型的強大,以及動態類型的特點。

如果為了web開發,科學計算,沒必要學c了,快來學python吧。


只能給你推薦小白的Python入門教程:

Python教程 - 廖雪峰的官方網站

Python看似簡單,其實精通非常困難。


學python。你現在想做的東西,用python都可以很快很方便的實現。等你覺得python的性能不夠,再研究下怎麼把部分的python用c重寫吧。

按我的經驗,python實現同樣的功能,代碼行數只有C的三分之一到五分之一。

不過畢業設計還是用c寫吧。代碼行數湊不出來啊…


一個學了三年c,兩年c++,兩個月java,兩天python的人告訴你,學python吧。

python確實很強大,而且簡單易用,對於有經驗的程序猿基本課以很快入門,沒有經驗的人也可以很快學會。我看了一天《A byte of Python》就基本學會了python,你可以看這本入門,很簡單。

c語言確實經典,但是更底層, 你文科生不懂計算機原理學c的難度比較大,而且學c語言的周期會長一些。所以python更適合你,而且學會了可以快速開發一些東西。


我也來答一個吧:如果是文科,推薦你兩本立馬見效的好書,但是都是非常淺顯,就是相當於學英語,讀了大概知道一些基本的單詞和語法,能稍微看看別人寫的東西,能自己寫一些非常簡單但是有用的小東西。

一本有關C的 &

一本Python &(《與孩子一起學編程》)

都可以在網上找到電子版,如果英語OK可以直接上英語版的可以練習英語

其實編程語言都很類似啦,但是C會更加「底層」一些,如果你學好了C,學python肯定是沒問題的

不過Python上手快,簡潔好用

還有如果要選課程的話,我推薦就直接上英文的吧,哈佛的CS50學C很不錯,老師很激情,我目前也還在跟著一半的樣子,網易公開課有翻譯的,也可以直接上http://cs50.tv

學Python可以看MIT的Introduction to Computer Science and Programming

如果你只求最基本的對語言的了解,就看我推薦的這兩本書就行了,有可能看了就根本停不下來

然後如果希望自己學一點能寫一點小東西,就看書+課程

如果你就純粹玩票性質,那就學python吧,也許學著學著你就想學C了也許,因為貌似Python是用C寫的

作為妹子,與文科生互勉,無論挑哪一門,最重要的是抓住一門開始學,別再挑別的啦,無論Python或者C,都是經典的好用的,值得你擁有的啦


從什麼語言入門需要從幾個方面去考慮。

1.如果不是計算機科班出生而且對編程世界一無所知,個人推薦入門是Python。

2.如果是計算機科班出生的以後想在技術這條道路上走的很遠的話,個人推薦入門是C。

作為一個外行學習編程的話,首先要考慮反饋的效益,不然一腔熱血很快就涼了。

如果把C語言作為一門入門語言,那麼恭喜你,你估計寫過幾次之後就感覺食之無味。

C語言在你沒學習到很深的地步,你只能在黑框框里玩,也做不出實用性的東西,也與各大企業要求的C程序員的距離差的太遠,所以如果想速成的話選擇腳本語言和偏高級的語言如:python。

python入門之後很快就可以做出有意思的東西,比如簡單的爬蟲,這不比在黑框框里得到結果在和框框里畫圖形有意思得多?你用C語言在windows環境下寫個簡單的窗口還要學windows編程和MFC。然後再進階的學習C的話又接觸計算機底層知識,比如操作系統,計算機組成原理。在此之後你才能更好的理解什麼內核,線程池等這種東西,這種學習時長對於一個非科班的來說太長了,收益遠遠不如Python。

作為一個科班入門的話推薦C語言。

首先科班是有大量時間去消耗的,不用來編程的話太浪費青春了。

C可以讓科班的學生有個自底向上學習的基礎,在學習其他的計算機知識的時候可以相互滲透,比如通過學習機組來更好的理解指針,通過學習數據結構(大部分科班學習的都是C的數據結構)更好的理解用C編碼的思想。這樣不僅僅讓科班的學生能在學習的道路上走的更遠,還可以更好的理解到底層的東西。雖然前期的學習可能會給很多初學者帶來困難,但是這一步也是一種篩選吧,強者自然才能生存下來,這是作為一個科班的基本素質。(另外個人覺得C++並不是C的進階~)

推薦書籍:

C &>&> 《C primer plus》

python&>&> 《Python 基礎教程》

入門之後喜歡用什麼語言是自己的自由了,不用看網上爭這個語言牛逼那個語言垃圾、C++是世界上最糟糕的語言,這種語言的黨派之爭真的一點意思都沒有,有這個時間還不如多看看技術貼,看看開源碼。

還有一點就是沒有任何一門語言很容易精通,所有技術性的東西都是需要時間去歷練去打磨的,一觸而就的東西終究抵不過時間的潮流。

作為初學者不要害怕一個未知的事物,有了明確的方向就不要輕易改變了。


我和題主一樣的職業一樣的處境,沒什麼好說的,直接上圖。


看到題目和描述,錯覺讓我以為是我的那位『逗逼』小夥伴,他也是文科生,也是搞運營的,目標是要做一名fullstacker,想要學一門語言,能自己寫程序處理日常的數據統計的,最後推薦他學Python了。

@馬蹄 跑過來給他分享你的體驗和經驗吧~~~~~


大師都是用c的,菜菜學python容易找到成就感。學編程起步很重要。職業的應該從c學起。業餘的可以從python開始,但是這樣你就永遠別想當大師了。


做運營還是學 bash 吧


不吃這碗飯,學Python。其實你要是c學得再好,你這個崗位基本也啥事也幹不了。但是Python學個半吊子,就對你工作很有用。非技術崗,辦公室工作,學點腳本語言搞搞自動化,對工作很有幫助。VB配合Excel也是不錯的選擇。


明顯選Python呀

C學習曲線那麼陡,怎麼學啊...


python。

別的不說,你學完python能做的事比你學完c能做的多。


使用C的人屬於格蘭芬多,他們無疑具有在debug道路上勇往直前的勇氣。使用Lisp的人來自斯萊特林,他們認為函數式語言才是正統,看不起使用非函數式語言的泥巴種。使用Python的人是拉文克勞的,他們的智慧足以駕馭Python的各種黑魔法,代碼的顏值也遠高於其他學院。赫奇帕奇是打醬油的,只有在用到正則表達式的時候人們才會想起他們使用的Perl。你喜歡哪個學院呢?

--分院帽


互聯網公司做運營,我覺得應該沒有必要學習C和Python。還是說樓主想和工作的同事交流經驗,或者有一個共同的話題。互聯網運營我覺得更多的是數據的分析和統計,所以推薦先把Excel相關內容學好。是互聯網企業,再接觸一點HTML,CSS和Javascript就更好了。C和Python交給程序員去做吧!運營負責好運營就ok。


我是認真的!

學習一種新語言,一般兩種情況:有其他語言基礎、想探索新特性求進階的,無任何基礎、培養語言興趣求入門的。

我覺得python很適合作為入門語言,尤其是女生,原因如下:

1. python自身原因,程序易讀,包引用方便,結構錯落有致,HelloWorld程序一般只有一行,變數不必申明類型,ipython好看也好用

2. 語言環境好,體現在由淺入深的python教程特別多,已經會一點python的人特別多,中文搜索結果特別多。

3. 很實用,字元串處理,資料庫,伺服器運維,網路服務,圖形界面等等,都有不錯的使用空間。

綜上,python是門又好看,又好學,又實用的語言,故而推薦入門選擇python。:)


CS專業的話,入門必須選擇C語言,有助看清全貌。我固執地認為對於一個CS專業的初心者,第一個學期應該學習《C Programming Language》和《Computer System: A Programmer"s Perspective》。不需要把這兩本書學得100%精通,只要能學到70%的思路再輔助練習,應該會對後面的學習很有幫助。

# 但是在下的傻掰母校居然選擇用C++作為CS專業的入門必修語言,浪費了我太多時間。

# 私認為選擇C++還不如選擇Java。

至於Python么...在下還是初心者,不敢多說什麼。但是我發現用Python寫同樣功能代碼,代碼量居然只有C語言的1/5時,那種興奮感真是各種爽快~


推薦閱讀:

那種編程語言比較適合新手?
python多線程下載,進度條顯示問題如何解決?
學習tornado/django/flask等python框架需要哪方面知識?
Python web 開發一定要用框架嗎?有沒其它方法,類似 PHP 的語句?
在 Python 中,為什麼 pow 這樣的函數可以直接調用,而 floor 這樣的函數得先導入模塊?

TAG:Python | C編程語言 | Python入門 |