1.3 程序
計算機程序( Computer Program ),或稱為程序( Program ),是一組指示計算機或其他具有信息處理能力的設備完成操作的指令集合。通常,程序是由某種編程語言編寫而成。
程序編寫出來之后,毫無疑問要在計算機上執行——俗稱”跑“(run)起來。要達到這個目的,必須要讓計算機能夠“認識”程序,從而“知道”自己干什么。
如果程序是用機器語言編寫的,那么計算機就能夠直接“認識”了。如果程序是由高級語言編寫的,要讓計算機“認識”,必須先將程序“翻譯”成機器語言。這與自然語言頗為類似。魯迅在《阿Q正傳》中寫道:他卻總說道No!——這是洋話,你們不懂的。沒有學過洋話的人要想聽懂,必須要翻譯。
對于程序而言,所使用的“翻譯”方式有兩種:編譯和解釋。在解釋這兩種方式之前,先了解幾個常用術語:
源代碼:用某種高級語言寫的程序就稱為“源代碼”。
源文件:保存源代碼的文件稱為源文件。
本地代碼:計算機(具體就是 CPU )能直接執行的機器語言的程序。用任何編程語言編寫的源代碼,最后都要翻譯為本地代碼。
再簡要兩種“翻譯”方式:
(1)編譯
用編譯器( Complier ,也是一種程序)將源代碼全部翻譯為本地代碼的過程,就是編譯( Compile )。所謂編譯器,則是執行這一過程的程序。
某些編程語言寫的程序需要編譯之后才能執行,這類語言常稱為“編譯型語言”,比如:C 語言。
(2)解釋
有的程序,不需要編譯,在運行它的時候,直接用解釋器( Interpreter ,也是一種程序)對源代碼進行解釋( Interpretation )和執行。
同樣,用于編寫這類程序的編程語言,稱為“解釋型語言”,比如 BASIC 。
★自學建議自學并不是坦途,但“踏平坎坷成大道”。在網站 www.itdiffer.com 中“有則改之”頁面,記錄很多學習者與我的交流和提問,特別建議讀者認真閱讀一番,辨別其中哪些是真正的“困難”,哪些是自己給自己故意設置的所謂“困難”——有則改之,無則加勉。如果學習中遇到了真正的困難——沒有電腦之類的困難不在此列——自己應該慶幸,因為這是進步的階梯。面對困難,不要煩躁、惱火——氣大傷身,且不解決問題——而是要理智地分析困難,利用搜索引擎和其他網站,搜索相關資料——務必要認真地、完整地閱讀,切忌走馬觀花。再結合當前問題,通過反復操作嘗試,盡力解決困難——通常這樣做必然能“成大道”。”
1.4 Python 語言
在1.2節中已經簡要介紹了編程語言,讀者借用本書將要自學的是一種名為 Python 的高級編程語言。為什么要學習這種編程語言,其解釋是仁者見仁智者見智。先看看由 TIOBE 提供的2021年10月的編程語言排行榜(如圖1-4-1所示,來源:https://www.tiobe.com/tiobe-index/ )。
圖1-4-1 編程語言排行榜
從榜單可見,Python 語言位列第一名。讀者查看此排行榜的時候,位次可能會有變化,但無論如何,Python 語言不論在工程實踐還是教學領域,都是頗受歡迎的編程語言。
既來之,則安之。已經閱讀到這里了,哪怕就是道聽途說“ Python 語言好”,也算是一個學習理由吧。更何況,從當前流行的編程語言趨勢來看,Python 語言也日益成為“大眾編程語言”——業已走入中小學的計算機教材之中。
一種“已過而立之年”的編程語言,緣何有如此魅力?還要從“初心”開始談起。
圖1-4-2 Guido van Rossum
(源自:https://zh.wikipedia.org/wiki/Python)
Python 語言的發明人是吉多·范羅蘇姆( Guido van Rossum )。關于他發明 Python 語言的過程有很多傳奇地描寫,例如在“維基百科”的中文詞條“Python”中說他在圣誕節期間“為了打發時間,決心開發”此編程語言。這種寫法無非是要表現非凡之人的非凡之處(“是時雷電晦冥,……,則見蛟龍于其上。已而有身,遂產高祖”《史記·高祖本紀》)。
不論吉多的發明過程被描述得多么神奇,Python 語言終究是誕生了,它的主要特點和“初心”還被總結為《Zen of Python》(中文翻譯為《 Python 之禪》)。下面列出英文和中文兩個版本(中文翻譯來自“維基百科”的“ Python 之禪”詞條),讀者可以對照閱讀,從中初步了解 Python 語言的特點。在后續的學習過程中,還可以將所學 Python 語言知識與此處的詩句對照,感悟這些凝練的詞語中所蘊含的深刻含義。
英文版 中文版
Beautiful is better than ugly.
Explicit is better than implicit.
Simple is better than complex.
Complex is better than complicated.
Flat is better than nested.
Sparse is better than dense.
Readability counts.
Special cases aren't special enough to break the rules.
Although practicality beats purity.
Errors should never pass silently.
Unless explicitly silenced.
In the face of ambiguity, refuse the temptation to guess.
There should be one-- and preferably only one --obvious way to do it.
Although that way may not be obvious at first unless you're Dutch.
Now is better than never.
Although never is often better than right now.
If the implementation is hard to explain, it's a bad idea.
If the implementation is easy to explain, it may be a good idea.
Namespaces are one honking great idea -- let's do more of those! 優美優于丑陋,
明瞭優于隱晦;
簡單優于復雜,
復雜優于凌亂,
扁平優于嵌套,
稀疏優于稠密,
可讀性很重要!
即使實用比純粹更優,
特例亦不可違背原則。
錯誤絕不能悄悄忽略,
除非它明確需要如此。
面對不確定性,拒絕妄加猜測。
任何問題應有一種,且最好只有一種,
顯而易見的解決方法。
盡管這方法一開始并非如此直觀,除非你是荷蘭人。
做優于不做,
然而不假思索還不如不做。
很難解釋的,必然是壞方法。
很好解釋的,可能是好方法。
命名空間是個絕妙的主意,
我們應好好利用它。
現在的 Python 編程語言,由于遵循著“開源、開放”的原則,已經發展成為一個覆蓋諸多領域的開放生態系統,例如在人工智能領域,每個深度學習框架都要發布“ Python 版”——這是標準配置。
下圖是 PyPI 網站的首頁( pypi.org ),這個網站專門用于開發者發布 Python 第三方庫(參閱第11章11.4節),至編寫這段內容為止,此網站上已經有 298,220 個項目(如圖1-4-3所示,到第11章11.4節時,會看到此圖的變化)。毫不夸張地說,PyPI 的第三方庫幾乎涵蓋了常規開發的各個領域——需要開發什么,先來這里搜一下,看看有沒有“輪子”。正是有如此龐大的生態系統,才讓程序員用 Python 語言實現了“以人為本,節省開發者時間”的要求。
圖1-4-3 PyPI 首頁
★自學建議就學什么編程語言而言,歷來有很多爭論,當然也沒有定論——大家更愿意爭論。比如有的認為應該學“程序執行速度快”的編程語言,有的認為應該學“用途廣泛的”的編程語言,有的認為應該學“開發速度快”的編程語言,還有的認為應該學“簡單易學”的編程語言,等等。不一而足。讀者對此如何決斷?是聽大師們教誨?還是聽同學們的勸導?還是看網上的帖子?亦或隨大流,看招聘網站上招聘信息的多寡?或者看自媒體上的宣揚?“小馬過河”是一個非常生動的故事,每個人都有自己的需要和境況。至于學習哪種編程語言,甚至于是否學習編程,都要結合自己的具體情況,獨立思考,做出判斷。而非人云亦云,更不能跟著感覺走。順便提醒,不要忘記,最“節省機器時間”的編程語言是機器語言。
原創 老齊 老齊教室
聲明:
本站(www.rxbbx.com)部分圖文轉自網絡,刊登本文僅為傳播信息之用,絕不代表贊同其觀點或擔保其真實性。若有來源標注錯誤或侵犯了您的合法權益,請作者持權屬證明與本網聯系,我們將及時更正、刪除,謝謝