1. 程序的概念
程序=演算法+數據結構
程序就是一系列有序執行的指令集合。
第一個答案對於大多數人其實等於沒有回答,因為演算法這個概念可能是一個比程序更為復雜的概念。
第二個答案算是有點容易明白,但還不能讓人明白程序能做什麼不能做什麼。
一,菜譜
材料: 五花肉半斤,尖椒一個,青蒜4-5根,(其實正宗的回鍋肉還要放豆乾,再放根紅椒點綴,咱家沒有,省略了),白糖2茶勺,生抽1湯勺,鹽2克,雞精,料酒,薑片,蔥段;蒜片,郫縣豆瓣醬1湯勺
做法: 預先處理:將整塊五花肉放入熱水中煮熟(筷子紮下去可以扎透),期間點些料酒,放兩片姜,兩三段蔥;然後放入冷水中冷卻。其中,冷水中冷卻的步驟可以使肉快速收縮,幫助成型,增加嚼勁兒,是普通廚子變大廚的關鍵步驟,不可省略哈。
青椒切菱形段,青蒜拍一下蒜頭,切寸段。蒜頭和蒜葉分開放。
預先處理過的五花肉切薄片,越薄越好。俺就這刀工了,算比較厚的啊。
蒜拍碎(沒拍),郫縣豆瓣剁成茸(碎點兒好看也好吃)。
處理好的肉片下油鍋,旺火煸炒。直至肉片打卷,變得焦黃。
將超好的肉片撥至一邊,下入蒜末和郫縣豆瓣,用小火炒出紅油。
倒入尖椒段和青蒜蒜頭,烹入糖,生抽,鹽。注意:郫縣豆瓣醬和生抽均有鹹度,鹽一定要酌情放。
待尖椒和蒜頭香味出來,放入青蒜葉及雞精兜勻。青蒜葉熟的很快,這個步驟只需要30秒或者更短,只要看到青蒜葉被油裹住就可以了。
出鍋
以上是網上找的一個回鍋肉的菜譜(貌似這個下酒好)。從廣義的角度來說這也是一個程序,怎麼說呢?
這個程序與計算機程序略微不一樣,這個程序的運行者是一個可以認識上面的文字,能正確理解每句話的意義,且有能力得到材料並按步驟執行的人。而計算機程序則是計算機可以理解和執行語句。
二,為什麼要有編程語言
就像上面的菜譜一樣,我們只要識得漢字基本都可以照著來執行。為什麼要有讓人看起怎麼都不能一下就接受的編程語言呢?
自然語言有歧義
男老師發現一女生上課睡覺,氣憤的說:我在上面累的要死,你在下面一動不動!不配合也就罷了,連點反應都沒有,將來要是肚子里沒東西,可別怪老師不行!
中國足球隊誰也打不贏。中國乒乓球隊誰也打不贏。
冬天太冷,出門時衣服能穿多少就穿多少。夏天太熱,出門時衣服能穿多少就穿多少。
地鐵里聽到一個女孩大概是給男朋友打電話,「我已經到西直門了,你快出來往地鐵站走。如果你到了,我還沒到,你就等著吧。如果我到了,你還沒到,你就等著吧。」
老婆給當程序員的老公打電話:下班順路買一斤包子帶回來,如果看到賣西瓜的,買一個。當晚,程序員老公手捧一個包子進了家門…老婆怒道:你怎麼就買了一個包子?!老公答曰:因為看到了賣西瓜的。
這是幾則最典型的漢語歧義,其它語種中一樣有很多這樣的歧義。看最後程序員這則,那麼就是老婆下了一系列指令但是執行者按照另一種意義去執行了。當然這例子還有不恰當的地方,我們也可以將指令改為:「下班順路買一斤包子帶回來,另外如果看到賣西瓜的,買一個西瓜。」。但是麻煩就在漢語本身並未限制我們必須如此,另外其它例子中的用法那就更加不容易確定意義了,還牽扯到語境。所以到今天為止計算機在處理自然語言上都還很糟糕。
自然語言不穩定
666, 蝦米, 醬紫, 沙發, 粉絲
以上這些詞語在有了網路後就多了一層意思,不上網的人可能根本不知道這多出一層意思。當然不穩定本質上還是帶來歧義。
因為這些原因才有數學語言(其實一樣有歧義,不然就不會產生數理邏輯這個分支了)、編程語言來規避歧義。
三,程序是什麼
這真是一個不好下定義的詞,比較可靠的回答都要涉及數理邏輯。無論是遞歸函數論、圖靈機模型、lambda演算都不是那麼容易掌握的。這些遠比學一門編程語言及掌握寫程序更難。所以在這里我們先只給出一個形象的比喻,程序就是一段編譯器或解釋器(這東西可能比任何人都要聽你的話,只要你能用它懂的語言來指揮)能聽懂的指令。
打開微信我們可以指揮微信,我們可以給好友發信息,可以加好友,可以發朋友圈,我們下什麼指令它就做什麼,我們下指令是通過點擊屏幕。而編譯器與解釋器也是類似的東西,不過這東西它只接受它認識的指令,它接受指令都是文字(主要是英文,數字,標點)。
四,計算、同構、模擬
對於同一件事比如我們要計算3+5,那麼我們可以有:
扳著手指頭左手3個,右手5個放在一起是8個手指頭
先拿出3個小球,再拿出5個小球放在一起是8個小球
我們在計算器輸入3+5得出8
這三個方法都可以計算出3+5的值,他們用了不同方法的形式但在對於計算3+5這個核心上是計算等價的。也就是同構的概念。
有了同構我們就可以模擬了,比如你有小球,拿它做了一次加法運算。但是我沒有小球我可以用手指頭或者石子來代替小球模擬你用小球做加法運算,並且得出和你一樣的結果。
我們是怎麼用程序來事的呢?主要就是用計算機中的數據來模擬現實中的東西。
比如攝像頭中的你腦袋往左移了一下,那麼本質上計算機中代表腦袋的那些數據的x坐標減去了一定的值,最終再輸出到顯示器上。
比如你在紙上解了一個方程,那麼在計算機也有一個模擬你每一步的計算的過程來得出和你一樣的值。只是你用紙和筆來進行,而計算機用它的方式來進行。
2. 什麼叫軟體
完整的計算機系統由兩部分組成,即計算機的硬體系統和軟體系統。
計算機軟體(computer software)指計算機系統中除硬體以外的所有事物,一般包括計算機程序、程序說明以及其他資料等。
軟體的正確含義應該是:
(1)運行時,能夠提供所要求功能和性能的指令或計算機程序集合。
(2)程序能夠滿意地處理信息的數據結構。
(3)描述程序功能需求以及程序如何操作和使用所要求的文檔。
軟體具有與硬體不同的特點:
(1)表現形式不同
硬體有形,有色,有味,看得見,摸得著,聞得到。而軟體無形,無色,無味,看不見,摸不著,聞不到。軟體大多存在人們的腦袋裡或紙面上,它的正確與否,是好是壞,一直要到程序在機器上運行才能知道。這就給設計、生產和管理帶來許多困難。
(2)生產方式不同
軟體是開發,是人的智力的高度發揮,不是傳統意義上的硬體製造。盡管軟體開發與硬體製造之間有許多共同點,但這兩種活動是根本不同的。
(3)要求不同
硬體產品允許有誤差,而軟體產品卻不允許有誤差。
(4)維護不同
硬體是要用舊用壞的,在理論上,軟體是不會用舊用壞的,但在實際上,軟體也會變舊變壞。因為在軟體的整個生存期中,一直處於改變(維護)狀態。完整的計算機系統由兩部分組成,即計算機的硬體系統和軟體系統。
計算機軟體(computer software)指計算機系統中除硬體以外的所有事物,一般包括計算機程序、程序說明以及其他資料等。
軟體的正確含義應該是:
(1)運行時,能夠提供所要求功能和性能的指令或計算機程序集合。
(2)程序能夠滿意地處理信息的數據結構。
(3)描述程序功能需求以及程序如何操作和使用所要求的文檔。
軟體具有與硬體不同的特點:
(1)表現形式不同
硬體有形,有色,有味,看得見,摸得著,聞得到。而軟體無形,無色,無味,看不見,摸不著,聞不到。軟體大多存在人們的腦袋裡或紙面上,它的正確與否,是好是壞,一直要到程序在機器上運行才能知道。這就給設計、生產和管理帶來許多困難。
(2)生產方式不同
軟體是開發,是人的智力的高度發揮,不是傳統意義上的硬體製造。盡管軟體開發與硬體製造之間有許多共同點,但這兩種活動是根本不同的。
(3)要求不同
硬體產品允許有誤差,而軟體產品卻不允許有誤差。
(4)維護不同
硬體是要用舊用壞的,在理論上,軟體是不會用舊用壞的,但在實際上,軟體也會變舊變壞。因為在軟體的整個生存期中,一直處於改變(維護)狀態。
3. 涓轟粈涔堟兂浜嬫儏鏄鐢ㄨ剳瀛,鍗村彨"蹇冩兂"鍛
涓嶆槸鍚楋紵涓嶄絾浣犱細鐢ㄥ績鎯籌紝鑰屼笖浣犲績閲屾兂鐨勫拰鑴戝瓙鎯崇殑寰寰涓嶆槸涓鍥炰簨銆
鐜頒唬紺句細縐戞妧鏃ョ泭鍙戣揪錛屾垜浠姣忓ぉ瑕佸勭悊鐨勪俊鎮涔熷ぇ閲忓炲姞銆傜敓媧誨伐浣滅殑鍘嬪姏涔熻秺鏉ヨ秺澶э紝鍙鏄鎴戜滑騫舵病鏈夊姙娉曢暱鍑虹浜屼釜鑴戣嬫潵錛屼漢浠寰寰瑙夊緱涓涓鑴戝瓙涓嶅熺敤錛屽彲鏄浣犵煡閬撳悧錛熷叾瀹炴垜浠姣忎釜浜洪兘鏈夌浜屼釜澶ц剳錛岄偅灝辨槸浣犵殑蹇冭剰銆
鍥藉栧緢澶氱戝﹀剁殑鐮旂┒鍙戠幇錛氬緢澶氭帴鍙椾簡蹇冭剰鎵嬫湳鐨勪漢鎬ф牸鍙戠敓浜嗗彉鍖栵紝鐗瑰埆鏄閭d簺鍋氫簡蹇冭剰縐繪嶅拰浣跨敤浜浜哄伐蹇冭剰鐨勪漢錛屽彉寰楀拰鍘熸潵涓嶄竴鏍蜂簡錛屼粬浠鐨勫朵漢鏈嬪弸閮借夊緱涓嶅啀鏄鍘熸潵鐨勯偅涓浜轟簡錛岃屼負涓炬㈤兘鍙樺緱鍜岃繃鍘諱笉涓鏍蜂簡銆傞棶棰樺叾瀹炲氨鍑哄湪蹇冧笂銆
浜虹殑澶ц剳灝辮薄涓鍙板嶆潅鐨勯珮綰ц$畻鏈猴紝瀹冩瘡澶╅兘鍦ㄩ珮閫熺殑榪愯漿錛屼負浣犲皢瑕佸仛鐨勬瘡浠朵簨鎯呭仛鍑哄垽鏂錛屽畠鍩烘湰涓婂湪鎺у埗鐫浣犵殑琛屼負涓炬錛岃屼綘蹇冮噷鎯崇殑浜嬫儏錛屽湪緇忚繃浣犵殑澶ц剳鐨勬濊冧箣鍚庡線寰闈㈢洰鍏ㄩ潪錛屽彲浣犵殑澶ц剳鍛婅瘔浣狅細鐢熸椿蹇呴』榪欐牱銆
鍙鏄錛屽綋浣犲績閲屾兂鐨勫拰澶ц剳鎯崇殑涓嶄竴鑷寸殑鏃跺欙紝鐥涜嫤渚誇駭鐢熶簡銆備漢涓鐢熶笅鏉ョ殑鏃跺欙紝澶ц剳榪樻病鏈夊彂鑲插畬鍏錛岃繖鏃剁殑浣犲熀鏈涓婃槸鍙楀績鎺у埗鐨勶紝蹇冮噷鎯蟲庝箞鐫灝辨庝箞鐫錛屽摥絎戦兘鐢變綘錛屼綘鍙浠ヤ笉鍒嗗満鍚堢殑鍋氫換浣曚簨鎯咃紝鍙瑕佽夊緱蹇涔愬氨琛屻傚綋浣犳參鎱㈤暱澶э紝浣犵殑澶ц剳瓚婃潵瓚婃垚鐔燂紝娓愭笎鐨勪綘蹇冮噷鐨勬兂娉曢兘瑕佺粡榪囧畠鐨勮繃婊わ紝騫朵笖甯稿父鍚﹀畾浣犲績閲岀殑鎯蟲硶錛屼簬鏄鎴戜滑瑙夊緱闀垮ぇ鍚庤秺鏉ヨ秺涓嶅揩涔愪簡銆
鍦ㄤ漢鐨勪竴鐢熷綋涓錛屽ぇ鑴戞帶鍒朵簡鐩稿綋闀跨殑鏃墮棿錛屽彲鏄涔熸湁澶辨帶鐨勬椂鍊欍傞櫎浜嗗効鏃訛紝褰撲綘鐖變笂鏌愪釜浜虹殑鏃跺欙紝浣犵殑蹇冧篃浼氳秺榪囧ぇ鑴戠洿鎺ユ帶鍒朵綘鐨勮屼負錛岃繖涔熸槸浣犳渶蹇涔愮殑鏃跺欍備綘蹇冮噷鎬繪兂鐫閭d釜浣犵埍涓婄殑浜猴紝榪欏氨鍙鐥村績銆傝繕鏈夊氨鏄浣犺佷簡鐨勬椂鍊欙紝浣犵殑澶ц剳娓愭笎琛扮錛屼綘鐨勫績鍙堥噸鏂板崰鎹涓誨姩錛屼綘鍙堜細鍙樺緱蹇涔愪簡銆傚綋鐒訛紝涔熻擱偅鏃舵湁浜轟細璇翠綘鏄鑰佸勾鐥村憜銆傚彲閭f椂浣犳墠涓嶄細鍘誨拰浠栬¤緝浠涔堢殑錛屽洜涓轟綘瑙夊緱寰堝揩涔愬晩銆備漢鐨勪竴鐢熷叾瀹炲氨鏄蹇冨拰澶ц剳鍙嶅嶈緝閲忕殑榪囩▼錛屽綋浣犲績閲屾兂鐨勫拰澶ц剳鎯崇殑涓鑷寸殑鏃跺欙紝閭e氨鏄浣犱漢鐢熺殑鏈楂樺冪晫浜嗐
鎵浠ワ紝鏈嬪弸錛屽綋鏈変漢璇翠綘鏄鐧界棿錛紲炵粡鐥鐨勬椂鍊欙紝浣犲崈涓囧埆鐢熸皵錛
鎮鍠滀綘錛氫綘蹇涔愪簡錛