編程入門python java和c語言_學習編程適不適合從Python入門?哪種語言更適合入門?...

本文對比了C語言和Python語言,分析它們作為編程入門語言各自的利弊,并給出了我推薦的編程學習道路。

我本身已經入門了Python腳本語言,在進階C語言和JAVA語言后,Python重學就輕松很多,幾個小時就拾起了忘記的語法,剩下的幾天則學習《Fluent Python》、《Python Cookbook》和另外幾本進階的書。Python融合了諸多編程語言的特色,內容不少,但也算容易理解,我把這幾本書來回切換著看,現在基本上算初步掌握了。如果按照我之前的構想,下周學習一下標準庫,看幾個開源文檔的源代碼,同時打上千行代碼,也算Python小成,可以學習其他讓人早衰的知識了。

然而,在Python的整個學習過程中,我總覺得不太舒服。Python的語法寫起來太簡單了,在寫慣了C語言的我看來,它花樣太多,而且寫起來不動腦子。

我在入門編程時,在網上看到過不少人的討論,其中主要就是辯論C語言和Python誰更適合入門的問題。作為一個兩條路都走過一遭的新手,我跟大家分享一下我對這兩門編程語言的理解。

首先讓我從一個例子出發,對C語言和python語言做一個比較。我把編程的過程比作炒菜的過程,那么不同語言的程序員是怎么做出一道同樣的菜呢?

作為一個C語言工程師,你需要做以下的流程:你需要先在小本子上規劃好炒這道菜的所有原料,查看哪些食材是家中有的,哪些食材是要去購買的。

在決定好購物清單后,你就要想該去哪里買,是樓下的小賣部呢,還是幾公里外的農貿市場,在思考過交通、食材質量、價格等諸多變量后再得出答案。

隨后,你在市場挑選食材,跟老板討價還價,然后拎著份量不小的一大堆東西回家。

回到家后,你把食材洗好切好,決定好配料的用量,然后左手翻著菜譜,右手惦著鏟子炒菜,滾熱的油滴時不時濺到你的手上,冒出淡淡的青煙。

炒完菜后,自己轉盤,然后把尚有余溫的鍋刷干凈。

吃完后,自己把碗筷洗出來,專門下樓把廚余垃圾倒掉,因為它們容易腐敗。

回到家后,躺在床上,累得如尸體一般,不想動彈。

作為一個C語言工程師,沒有人會幫你。準備這道菜的所有流程全部是你自己完成的,你需要處理好一切事情。

但如果你是一個python工程師,那就太輕松了。Python的標準庫和外部庫就像是“海螺姑娘”,看到你需要食材了,就“啪”地在你面前憑空變出一堆質量很高的食材,還是切好腌好了的。

在很多情況下,你甚至不用動手炒菜,把食材收拾到一個“python魔法鍋”里,蓋上鍋蓋,這個鍋就會自動幫你炒好。

你帶上手套優雅地裝盤,用刀叉使用完畢后,直接把它們丟到洗碗機里去。

廚余垃圾由”海螺姑娘“自己收拾。

吃完一餐,神清氣爽,甚至想再吃一次。

C語言和Python語言最明顯可見的差別,那就是代碼量了。C語言是上古語言,那時編程的絕對主體就是很懂計算機的程序員,特別歡迎復雜但實用的工具,因此C語言一出生就頗為硬核。你不僅需要自己決定好程序的邏輯結構,還要規劃好變量的類型聲明、賦值,想好在哪些代碼應當被編譯,更要對計算機底層的硬件具有充分的認識,才能處理好指針和內存分配這幾些強大的工具。編程語言的發展軌跡基本上就是“懶人化”,越往后的語言一般就越“軟核”,Python的出生日期不僅比C語言晚了20年,比C++這門對象設計語言也晚了10年,語法簡潔程度可想而知。Python本身是類似于Lisp的一門抽象語言,它自動會處理好一些繁瑣的東西,讓程序員去專心思考問題,而不是花那么多時間去打代碼。因此,要想完成同樣一個任務,假設python語言需要寫N行,那么C語言則一般要寫10N行。

說句實話,如果讓我把C語言和Python語言擬人化的話,那么C語言就是手持巨劍、肩披重鎧、背背強盾的大武將,一舉一動都有宗師氣象,而Python則是衣著時尚、手持Ak47步槍的小青年。C語言雖然又帥又威猛,打代碼的手感不要太好,但如果論起功能強大和拓展性來,Python手里的步槍可就比大劍強太多了。

長江后浪推前浪,一浪更比一浪強。

總結一下,Python在拓展功能、語法簡易度上都比C語言強太多,那么許多人可能就想:既然如此,我何必要學C語言找罪受,Python我可以!此言差矣!

讓我們回到之前那個炒菜的例子。Python語言能讓你少干許多事,這個自然很好,但它會讓你養成懶惰的壞習慣,不去學著做菜。假如有一天海螺姑娘走了,魔法鍋砸了,你也就無計可施。相反,雖然C語言工程師每炒完一道菜都要汗流浹背渾身乏力,但ta在學習的過程中不斷積累經驗,不僅會挑選食材了,而且也會掌握配料的處理了。不斷練習,必將成為一代大廚!

明白了把。此時你是一個立志于成為“名廚”的新手,如果太依賴于Python自身強大的功能,很可能就患上依賴癥,最終啥也不懂。而學習C語言雖然痛苦,但能夠幫助你理解更加深入的東西,如果配合閱讀其他書籍,不僅知道怎么編程,更“知其所以然”,知道計算機是怎么執行這段代碼的,這個對人的提高就要大很多了。編程領域有個詞叫“造輪子”,意思就是拒絕使用已有的、成熟的功能,而要自己重新寫一個出來。造的輪子越多,你的編程能力就越強!

此外,C語言是許多語言的祖師,C++、C#不必多說,Python本身就是由C語言所實現的。學過C語言后再學Python,你就會有一種“柳暗花明又一村”的感覺:你可以用C語言來解釋Python語言的整個結構了。不僅如此你對Python的理解會更加深入,而且你能夠自己用C語言拓展Python的功能,甚至自己寫出一個編程語言。這個對Geek的誘惑實在太大了,我自己也很興奮。

雖然用Python寫小項目時的體驗感是無敵的,但由于Python語言架構本身的某些問題,Python程序在大項目中的表現還遠遠趕不上C\C++。目前,C\C++\JAVA\C#等仍然是大項目開發的基本語言,隨著硬件性能的發展,Python與它們之間的性能上的差距會縮小,但仍然有較大差距。

總結一下,Python語言雖然非常簡潔,但容易使人懶惰。假如你是一個對編程有追求的青年,學習C語言并不斷“造輪子”則對個人的成長更加有幫助。

注意,我不認為Python的“懶人化”是完全不好的,全世界的著名黑客都喜歡Python語言,目前絕大多數互聯網公司的工作語言也是Python語言。Python能夠幫人省掉很多不必要的程序優化時間,但是作為一個新手,你不能偷懶,要自己去做這些事情,不練習你就沒辦法提高。

現在是互聯網時代,掌握一門編程語言能夠讓你擁有更多的機會。如果讓我給大家推薦入門語言,我會給大家推薦這樣的道路:新手入門,必學Python。這時候你啥也不懂,一些基本的Loop和Control Flow 都不懂,此時就可以利用好Python語言語法簡單的特點,學好一些基本的概念。等到你完整讀完一本Python入門書了(可以不做習題),那你的新手階段也可以算基本結束了,進入一個分水嶺。

如果你覺得編程很無聊,而且目前沒有什么用得著Python的地方,那么你可以放棄了,不必再做后續的閱讀。

如果你覺得編程也挺無聊,但學習Python可以幫助自己做一些生活中的小事情,那么你可以專門走Python的路線。

首先,重讀那本你已經閱讀過的入門著作,或者更換另外一本不錯的入門書,完成半數以上習題, 隨后開始進階內容的學習。

進階內容就要難很多了,你會發現自己啥也看不懂。給你兩個字:堅持。編程的學習是講究循序漸進的,每一次學習都難免需要其他知識作為鋪墊,正如學習如來神掌首先要從最基礎的羅漢拳學起。你專門走Python這條道路,跳過其他的很多內容,走火入魔,自然就要承受零基礎讀進階內容的后果。此時你可以上網去尋找一些信息,效率挺低,不過也能解決一些問題。

如果你沒有堅持下來,不要責怪自己,逆天而行總是困難的。如果你強咽下一口血把這本進階書讀完,那請你把這本大概800頁的書再讀上至少兩遍,書中的所有程序至少碼兩遍。然后,請你讀下大概1400頁的Python3標準庫。然后,請你上開源平臺上看看一些比較有名的外部庫,學習下它們的代碼。

等到你把這幾步全部做完后,恭喜,你才剛剛入門python而已!Python的語法雖然學起來簡單,但內容太豐富,水不是一般的深。從新手到入門,學習效率高點大概2個月就成。但從入門到精通,恐怕就需要幾年的實踐經驗了。

當然,如果你走這條路真的達到精通python的境界,我當然會很欣賞你,但欣賞中又會帶點小小的不屑:“哼!旁門左道,非我族類!”單學編程語言不學計算機科學,就如7歲小孩持有倚天劍,雖然在平常生活中可以斬金削鐵無所不能,但因為沒有內功,碰到強敵就完蛋。我甚至懷疑,是否真的有完全不學習計算機科學的編程大神存在。編程生涯中那么多坑,你總得學點其他的東西吧。

如果此時你對編程有了一些興趣,覺得編程是很好玩的事情,恭喜,你成為了命途多舛的Geek。

大概就是這種感覺

上面說過,由于需要許多知識做鋪墊,python進階就困難了不少。如果你仍然堅持學習Python,你就能可能遇到你進步路上的第一個瓶頸。

此時我給你的建議就是:學習C語言的吧!C語言真是好玩的語言,一套流程走下來獲益多多。本來C語言新手入門是比較麻煩,但如今你已經在python中走過一遭,許多各語言共通的特性已經知道的差不多,如果配合好書,C語言入門也不算太難了!

C語言不僅該入門,而且值得進階。學完C語言后,就該接觸面向對象的語言了。我個人學過JAVA語言,但推薦你學C++語言,不僅因為它一脈相承于C語言,C++語言的特性要比JAVA多,更重要的是C++圖書的質量要比JAVA的不知道高到哪里去了!

C++入門即可,然后就可以反過頭來學Python。在C和C++語言的鬼門關中走過一遭后,你會驚訝地發現,曾經天書一般的Python進階書竟然是這么容易理解。你可能走上Python工程師的道理,但也沒準會跟我一樣,學過一遍后反而“C語言一生推”呢!

為什么說你”命途多舛“,是因為走程序員這條路,有死無生!要想有更加廣闊的視角,你就必須學習計算機科學,必然要學習算法、編譯、操作系統、計算機系統、網絡等等一些基礎知識,各個水都深得很。這個需求是客觀的,你學著學著語言,看著某本書,忽然就會沒有某些知識就沒法繼續學習下去。等到基礎掌握完,你可以選擇一個領域深挖下去,搞一個呈正態分布的知識體系出來。當然,十年也已經過去了。此生此世,乃至哈諾塔謎題結束,你將永遠學習下去,一刻不能脫出!

寫完這篇文章,果然舒服很多,比起打代碼來,打拼音簡直是種享受。學編程越多,我就越想將學一輩子。

嗚呼!吾生也有涯,而知也無涯!愿我能夠更加聰明,能夠接著玩下去。

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/532042.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/532042.shtml
英文地址,請注明出處:http://en.pswp.cn/news/532042.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

mysql 備份 一張表_mysql 備份表的一個方法

#--- start# 新建表create table sp2_match_comment_tmp like sp2_match_comment; # 這種方式 外鍵索引,觸發器不會在新表中有,要自己添加LOCK TABLES sp2_match_comment write, sp2_match_comment AS smc2 read, sp2_match_comment_tmp write;# 導出最新…

springmvc的工作原理_SpringMVC工作原理

1 簡介SpringMVC框架是以請求為驅動,圍繞Servlet設計,將請求發給控制器,然后通過模型對象,分派器來展示請求結果視圖。其中核心類是DispatcherServlet,它是一個Servlet,頂層是實現的Servlet接口。2 運行原理…

java邏輯運算符_Java邏輯運算符

Java邏輯運算符Java邏輯運算符包含下面6中符號:&& 與 ;&& 與 前后兩個操作數必須都是true才返回true,否則返回false& 不短路與 ; & 不短路與 表達式都會執行到|| 或; || 或 只要兩個操作數中有一個是tru…

跨站點請求偽造_十大常見web漏洞——跨站點請求偽造(CSRF)

CSRF介紹什么是CSRF呢?我們直接看例子。https://mp.toutiao.com/profile_v3/graphic/preview?dodelete&pgc_id6829574701128352260這個URL是頭條刪除pgc_id為6829574701128352260的一篇文章的連接,通過執行這個URL用戶就可以刪除這篇文章。首先攻擊…

java多線程隊列_java多線程消費者生產者模式(BlockingQueue 通過阻塞隊列實現)

import java.util.concurrent.BlockingQueue;import java.util.concurrent.LinkedBlockingQueue;/*** Created with IntelliJ IDEA.* User: csx* Date: 4/24/14* Time: 9:56 AM* To change this template use File | Settings | File Templates.** 生產者與消費者模型中&#x…

unique函數_C++核心準則C.35:基類的析構函數必須滿足的條件

C.35: A base class destructor should be either public and virtual, or protected and nonvirtual基類的析構函數要么是公開的虛函數,要么是保護的非虛函數Reason(原因)To prevent undefined behavior. If the destructor is public, then calling code can atte…

java jta 例子_Java事務處理全解析(八)——分布式事務入門例子(Spring+JTA+Atomikos+Hibernate+JMS)...

在本系列先前的文章中,我們主要講解了JDBC對本地事務的處理,本篇文章將講到一個分布式事務的例子。請通過以下方式下載github源代碼:本地事務和分布式事務的區別在于:本地事務只用于處理單一數據源事務(比如單個數據庫)&#xff0…

python連接redis哨兵_Python redis.sentinel方法代碼示例

本文整理匯總了Python中redis.sentinel方法的典型用法代碼示例。如果您正苦于以下問題:Python redis.sentinel方法的具體用法?Python redis.sentinel怎么用?Python redis.sentinel使用的例子?那么恭喜您, 這里精選的方法代碼示例或…

交換兩個數組 差最小 java_如何交換兩個等長整形數組使其數組和的差最小(C和java實現)...

1 importjava.util.Arrays;23 /**4 *5 *authorAdministrator6 *7 */8 public classTestUtil {9 private int[] arrysMin null;1011 private int[] arrysMax null;1213 private int matchNum 0;1415 private boolean hasMatched false;1617 /**18 * 返回數組的所有元素的總和…

python 判斷子序列_Leetcode練習(Python):第392題:判斷子序列:給定字符串 s 和 t ,判斷 s 是否為 t 的子序列。...

題目&#xff1a;判斷子序列&#xff1a;給定字符串 s 和 t &#xff0c;判斷 s 是否為 t 的子序列。你可以認為 s 和 t 中僅包含英文小寫字母。字符串 t 可能會很長(長度 ~ 500,000)&#xff0c;而 s 是個短字符串(長度 <100)。字符串的一個子序列是原始字符串刪除一些(也可…

垂直串聯六關節機器人調試手冊_工業機器人有哪些應用你知道嗎?

目前&#xff0c;工業機器人大部分集中于傳統的焊接、噴涂等領域&#xff0c;我國工業機器人的核心部件和整機市場仍被國外壟斷&#xff0c;工業機器人要面向整個智能制造市場&#xff0c;還需要具備應對整個智能制造過程中大多數工藝的能力&#xff0c;而工業互聯網則是實現智…

flume avro java 發送數據_flume將數據發送到kafka、hdfs、hive、http、netcat等模式的使用總結...

1、source為http模式&#xff0c;sink為logger模式&#xff0c;將數據在控制臺打印出來。conf配置文件如下&#xff1a;# Name the components on this agenta1.sources r1a1.sinks k1a1.channels c1# Describe/configure the sourcea1.sources.r1.type http #該設置表示接…

python三角函數擬合_使用python進行數據擬合最小化函數

這是我對這個問題的理解。首先&#xff0c;我通過以下代碼生成一些數據import numpy as npfrom scipy.integrate import quadfrom random import randomdef boxmuller(x0,sigma):u1random()u2random()llnp.sqrt(-2*np.log(u1))z0ll*np.cos(2*np.pi*u2)z1ll*np.cos(2*np.pi*u2)r…

java url 本地文件是否存在_我的應用程序知道URL中是否存在文件會一直停止[重復]...

這個問題在這里已有答案&#xff1a;我試圖寫一個應用程序&#xff0c;如果在給定的URL中有一個文件&#xff0c;將字符串放在textview中&#xff0c;這是代碼和崩潰信息&#xff0c;可能是什么錯誤&#xff1f;public class MainActivity extends AppCompatActivity {String u…

python枚舉類的意義_用于ORM目的的python枚舉類

編輯問題我正在嘗試創建一個類工廠,它可以生成具有以下屬性的枚舉類&#xff1a;>從列表中初始化類允許值(即,它)自動生成&#xff01;).> Class創建自己的一個實例對于每個允許的值.>類不允許創建任何其他實例一旦上述步驟已完成(任何嘗試這樣做會導致異常).>類實…

java 生成校驗驗證碼_java生成驗證碼并進行驗證

一實現思路使用BufferedImage用于在內存中存儲生成的驗證碼圖片使用Graphics來進行驗證碼圖片的繪制&#xff0c;并將繪制在圖片上的驗證碼存放到session中用于后續驗證最后通過ImageIO將生成的圖片進行輸出通過頁面提交的驗證碼和存放在session中的驗證碼對比來進行校驗二、生…

yy自動語音接待機器人_智能語音機器人落地產品有哪些?

據相關研究報告表明&#xff0c;在眾多人工智能落地產品或者應用場景中&#xff0c;智能語音機器人無論從產品的成熟度還是應用的廣泛度來說&#xff0c;都是人工智能行業最熱門和最有前景的產品。智能語音機器人并不只是一款產品&#xff0c;它是所有智能語音系列產品的統稱&a…

java資源文件獲取屬性_Java讀寫資源文件類Properties

Java中讀寫資源文件最重要的類是Properties1) 資源文件要求如下:1、properties文件是一個文本文件2、properties文件的語法有兩種&#xff0c;一種是注釋&#xff0c;一種屬性配置。注 釋&#xff1a;前面加上#號屬性配置&#xff1a;以“鍵值”的方式書寫一個屬性的配置信息…

java被放棄了_為什么學Java那么容易放棄?

學習Java確實很容易就放棄&#xff0c;但是也很容易就學好&#xff0c;因為大多數人都是抱著試一試的心態&#xff0c;然后當后面就堅持不下去但是回過頭來想一想&#xff0c;打游戲上分容易嗎&#xff0c;一樣是磕磕碰碰的&#xff0c;有時候十幾連跪都不會放棄你上分的心情。…

python 隱馬爾科夫_機器學習算法之——隱馬爾可夫(Hidden Markov ModelsHMM)原理及Python實現...

前言上星期寫了Kaggle競賽的詳細介紹及入門指導&#xff0c;但對于真正想要玩這個競賽的伙伴&#xff0c;機器學習中的相關算法是必不可少的&#xff0c;即使是你不想獲得名次和獎牌。那么&#xff0c;從本周開始&#xff0c;我將介紹在Kaggle比賽中的最基本的也是運用最廣的機…