国产日韩欧美一区二区三区三州_亚洲少妇熟女av_久久久久亚洲av国产精品_波多野结衣网站一区二区_亚洲欧美色片在线91_国产亚洲精品精品国产优播av_日本一区二区三区波多野结衣 _久久国产av不卡

?

人生苦短,我用Python

2022-03-30 11:38Violaine
書城 2022年3期
關(guān)鍵詞:蛋炒飯文科生程序員

Violaine

“人生苦短,我用Python”,這句話是什么時候,在編碼的同胞中流行開來?我自己,則是上了一段網(wǎng)課,才知道有這個說法。這是Python編程語言最基礎(chǔ)的變量課上講到的一個例句,至于最初出自誰人之口,頗有爭議。有人說是Python的原創(chuàng)者,有人說是編程界大牛布魯斯·埃克爾(Bruce Eckel,他是MindView公司總裁,C++標準委員會具有表決權(quán)的成員之一)。此語原文為:“Life is short,we need Python.”也許只有經(jīng)歷C語言、Java語言等編程語言歷練的程序員才能對此有真正理解。

Python語言的創(chuàng)造者是大名鼎鼎的計算機工程師吉多·范羅蘇姆(Guide van Rossum)。此人一九五六年出生于荷蘭,一九八二年在阿姆斯特丹大學(xué)獲得數(shù)學(xué)和計算機碩士學(xué)位,之后在荷蘭和美國的多個研究機構(gòu)工作。他盡管也是一位數(shù)學(xué)家,卻更愿意享受計算機帶來的樂趣,他所從事的職業(yè)都與計算機相關(guān)。一九八九年圣誕節(jié),吉多為了打發(fā)假期的無聊,決心開發(fā)一個新的腳本解釋程序,作為ABC語言的一種繼承。之所以選擇Python(英語“大蟒蛇”的意思)作為這套編程語言的名稱,說來有點搞笑,只因為他是一個名為Monty Python的喜劇團體的粉絲。

自計算機問世以來,有過不少編程語言,為什么這個Python現(xiàn)在成了當(dāng)紅炸仔雞,而且越來越火?簡單說,就是它的語法邏輯簡單,省心省力,容易上手。一個最直觀的例子就是,網(wǎng)上掛出許多編程語言創(chuàng)始大佬的頭像,別人腦門上都已稀稀拉拉,就數(shù)吉多·范羅蘇姆頭發(fā)最茂盛。再舉個例子,假如要完成某個功能,用Java語言需要一百行代碼才能完成的活兒,用Python可能只需要二十行左右就能搞定,這是Python最具吸引力的特點。對于不想隨時挪窩的懶鬼來說,它極強的開放性兼容性很招人喜愛,幾乎所有的平臺都能輕松地使用,我自己就是既用PC也用Mac來寫代碼。想趕時髦的話還可以用它來制作動畫,更深入一步,它被大量用于機器學(xué)習(xí)和人工智能;它支持多線程多進程的優(yōu)點,也成為管理者的心頭好。通俗點的解釋是:你把十份工作交給一個人做,跟讓十個人同時做那十份工作是不一樣的,十個人起碼得配給十張桌子和十臺電腦不是?

Python成為文科生轉(zhuǎn)碼首選,首先因為它據(jù)稱是一門注重思想的編程語言。有人說,當(dāng)你閱讀一段Python良好代碼時,即使是在Python語法要求非常嚴格的大環(huán)境下,給人的感覺也像是在讀一篇英語文章一樣。換句話說,Python編程語言最大的優(yōu)點之一,是其具有偽代碼的特質(zhì),它可以讓人們在用Python開發(fā)程序時,專注于解決問題,而不是老想著要搞明白語言本身。

在一個文科生的眼里,一開始總覺得“人生苦短”在文字世界的接續(xù)反應(yīng)肯定要豐富復(fù)雜得多,程序員們說“我用Python”,實在是太直白,太枯索無韻。文學(xué)語言與科學(xué)語言最大的不同,是文學(xué)語言有涵容有張力的感性體驗,而科學(xué)語言的文字符號組合,重點在于要傳達出去的信息,感性體驗并不重要。比如寄快遞,語言有點像那個快遞盒子??茖W(xué)語言這個盒子,只是用來傳遞的工具而已,收件方取出物品后就可以把盒子扔掉了,莊子說“得魚而忘筌”就是這個意思。但文學(xué)語言這個盒子,本身卻也是要傳遞的一部分,它甚至應(yīng)該是那個能讓人買櫝還珠的“櫝”。只是你在進入編程后,發(fā)現(xiàn)代碼語言雖然是進入完全不同的世界,同樣也豐富復(fù)雜,數(shù)理邏輯的世界也有著無窮大的開放性與可能性,那個快遞盒子必須完完全全毫厘不差地按規(guī)則邏輯來做,才能讓你把東西送到。

吉多·范羅蘇姆(Guide van Rossum)

而且,你用文字來做的事情,Python號稱可以用代碼來做,也能做得感性,甚至浪漫。比如,用代碼來計算“水仙花數(shù)”(水仙花數(shù)[Narcissistic number]也被稱作自戀數(shù)、自冪數(shù)、阿姆斯特朗數(shù)[Armstrong number]。指一個三位數(shù),它每一位數(shù)字的三次冪之和等于它本身);用代碼來代替文字完成一系列現(xiàn)實世界的描述;用代碼為家人畫一棵圣誕樹、放一陣煙花……那些枯燥干巴的公式,單調(diào)的語法代碼,在正確無誤的書寫中瞬間會活起來。想象一下文科的文字吧,無非是些字母與筆畫,但它們可以用來描述這個世界、深入抵達人的思想、表達人類的感情,甚至可以創(chuàng)建一個超越于現(xiàn)實人生的世界—“人生苦短”,文字卻可以長存不朽。同樣,代碼也可以用來創(chuàng)建一個虛擬的世界。所以在探索學(xué)習(xí)的過程中,雖然碰得鼻青臉腫眼冒金星,樂趣也還是逐漸尾隨而來了。越到后來越覺得,與其把Python作為一項技能去學(xué),不如把Python作為打開計算機邏輯思維,打開另一個世界的鑰匙。人生苦短,多開幾扇門窗,眼前就多了幾道風(fēng)景。

年輕時的吉多·范羅蘇姆

什么是計算機邏輯思維?或者以行話來說,什么是“編程思維”?這個問題不好回答。目前我自己理解的是,往大里說,一邊看《黑客帝國》一邊會呆呆地想想:宇宙,人類,歷史過程,是不是一個設(shè)計好的大程序???往小里說,任何一樁瑣事都可以被納入計算機邏輯。每一個專業(yè)都有自己的術(shù)語,外人聽起來有點像黑話。有個網(wǎng)站的“女程序員小組”拋出“找對象為什么難”這樣一個問題帖子,下面的回答是:“對象是實例化出來的,不是找出來的,找出來的也是別人實例化,被你搶走的。所以要自己new一個出來,不合心意,就delete掉,new新的。”程序員的思維,每天都是if else,for,while等循環(huán)判斷,形成了生活思維模式后,日常購物也會進入這種循環(huán):該物品購買之后的使用頻率?該物品必要性值幾何?該物品花費的錢與其使用價值是否在合理的比例中?

編程界流行一段著名的Python之禪,也許表達的就是計算機思維邏輯。在Python的IDLE界面輸入“import this”,就會跳出這段長長的禪語—

Beautiful is better than ugly.(美麗勝于丑陋)

Explicit is better than implicit.(顯性好于隱性)

Simple is better than complex.(簡單優(yōu)于復(fù)雜)

Complex is better than complicated.(復(fù)雜也要優(yōu)雅地復(fù)雜)

Flat is better than nested.(能不嵌套就不嵌套)

Sparse is better than dense.(疏朗美于密集)

Readability counts.(讓人讀得下去)

Special cases aren?t special enough to break the rules.(規(guī)則不為特殊打破)

Although practicality beats purity.(實用勝過純凈為人生一憾)

Errors should never pass silently.(錯誤不可藏著掖著)

……

不理解編程語境的文科生,乍看之下覺得這禪語哪有咱們那種“風(fēng)動,幡動,心動”的語言高級?但許多學(xué)到深處的程序員就覺得它不僅與編程有關(guān),更與自己的人生有關(guān)。有一位正在寫編程專著的程序員對著“Python之禪”感嘆:每一個優(yōu)秀的“攻城獅”和“程序媛”都應(yīng)該是哲學(xué)家。如果沒有人文科學(xué)的學(xué)習(xí)與訓(xùn)練,一個只在理工科專業(yè)內(nèi)打轉(zhuǎn)的人,不太可能成為優(yōu)秀的編程者。

到目前為止,埃里克·馬瑟斯(Eric Matthes)這本著名的《Python編程:從入門到實踐》,我能學(xué)習(xí)的課程已經(jīng)快結(jié)束,書也快被我翻爛了。除了時間和頭發(fā)(迅速減少)的消耗,財務(wù)支出甚少,在孔夫子舊書網(wǎng)買到的這本二手書只花了二十八元(連運費在內(nèi))。書的品相大約八成新,因為前面那位讀者在書上劃來劃去弄了許多記號和旁注。想象中,前邊那位讀者應(yīng)該是一個男孩,年齡在二十出頭,應(yīng)該是在校生(建筑系的?他所有的筆記與旁注都用鉛筆書寫)。一開始,他和我一樣磕磕絆絆從最基礎(chǔ)的代碼搞起,跟著書本教程亦步亦趨。但在基本語法邏輯弄完后,我就跟他分道揚鑣了。那家伙完全沉浸在游戲編程的學(xué)習(xí)之中。“外星人入侵”游戲的所有代碼和講解被他劃得亂七八糟。在“武裝飛船”游戲項目的練習(xí)題后面,他歪歪斜斜地用鉛筆寫下一句:“我的飛機可以上下左右自由移動了!”幾乎可以隔著時空聽到他欣喜若狂的叫聲。而我呢,覺得游戲需要的第三方庫太占內(nèi)存,我的電腦配置沒那么豪華,想把這課程放到以后來做,于是就跳到“數(shù)據(jù)可視化”那一章去??删驮僖部床坏侥俏磺白x者稀里嘩啦的筆注了。

現(xiàn)在說起來好像是個挺輕松的進程,有人在網(wǎng)上宣稱一個月掌握Python然后應(yīng)聘成功。而我,因為覺得難,太難,難極了,好幾次都想繳械投降,我又不等著去應(yīng)聘飯碗,何苦硬要折磨自己的眼睛脖子和頭發(fā)?好在,網(wǎng)絡(luò)世界雖然有惡意有陰暗有齷齪等種種不堪,但它的神奇也無處不在。所有的問題幾乎都可以在網(wǎng)絡(luò)(各個社區(qū),各種平臺)上找到合適的答案。半年下來的最大感觸是,吾國教育的文理分科真的太嚴謹了,因為讀了個文科,身邊就沒有一個在計算機方面實際可以請教的人,幸好撞上一位朋友的女兒,美國回來的計算機專業(yè)碩士,但這一行的人都忙得死去活來無暇他顧。她只給我發(fā)來寥寥兩三句話的指點,在我看來還是覺得幫助巨大。第一次是我剛開始下載Python及geany編輯器總是報錯,她就說了一句:“環(huán)境沒搭好!”然后我就瘋狂在網(wǎng)上搜索搭建編程環(huán)境的攻略小作文,并且加入了CSDN社區(qū),這是個什么東東呢?某度的介紹是:“國內(nèi)最大的網(wǎng)絡(luò)之一,提供Web論壇,博客托管,IT新聞和其他服務(wù)。CSDN擁有約一千萬注冊用戶,是中國最大的開發(fā)者社區(qū)。CSDN社區(qū)網(wǎng)站是中國軟件程序員尋求建議的地方。海報描述了一個問題,在論壇中以CSDN點的價格發(fā)布,然后等待回復(fù)。在一些受歡迎的電路板上,海報會在幾個小時內(nèi)得到響應(yīng)—如果不是幾分鐘的話。大多數(shù)回復(fù)很短,但足以指出錯誤并提供可能的解決方案。一些帖子包含代碼,可能會增長到幾頁。大多數(shù)帖子都是用簡體中文寫的,但繁體中文和英文帖子并不少見。在CSDN中,共享知識和互相幫助的文化占主導(dǎo)地位?!?/p>

埃里克·馬瑟斯

事實上,就我所知的事實上,許多帖子挺水的,就是把《Python編程:從入門到實踐》上或是別的網(wǎng)課內(nèi)容抄一下發(fā)上來。但也不乏真有熱心人手把手教的。我的環(huán)境搭建最重要指導(dǎo)就來自這地方,還有引入第三方庫時,代碼的順序也受到某位仁兄手抄代碼的啟發(fā)。另外,“小紅書”并非只是個女人們“凡爾賽”的地盤,也有許多程度從菜鳥到大佬不等的IT博主在那里神出鬼沒。還有不少程序員八卦趣聞。比如我,超過百行代碼就開始犯糊涂,沒有注釋的話自己也不知道之前寫了啥。注釋真是太重要,我想起社區(qū)里看到的一則八卦,一位女程序員為了報復(fù)前男友(男程序員),把他上萬行代碼的注釋統(tǒng)統(tǒng)刪光。我在想象女程序員的絕望和男程序員的憤怒,想著想著就走神了。言歸正傳,我的第三方庫模塊導(dǎo)入煎熬了一周都沒弄成:明明用正確的網(wǎng)址鏈接下載了,就是“如一箭之入大?!卑愫翢o反響,那情形像是公司聲稱工薪已經(jīng)入賬,可你卡上就是遲遲看不到錢打進來的焦慮抓狂。后來還是小紅書某博主的主帖下面的一個跟帖給了我重大啟示,照著試了一下:一舉成功。

因為Python的走紅,網(wǎng)上課程一大把,上某度某乎某瓣看看,真有許多呼朋喚友要一起學(xué)習(xí)共同促進的興趣小組,不過多數(shù)是有一無二,有上文無下文。個人體會結(jié)合網(wǎng)上多數(shù)意見,還是楊淑娟老師主講的Python課程相當(dāng)有價值。在埃里克·馬瑟斯的書中我只是知其然,但楊老師的課讓我知其所以然。這網(wǎng)課是一位朋友好心發(fā)送給我的,她的課每一步都解析得非常細,例句也很實用,遺憾的是沒有數(shù)據(jù)導(dǎo)入分析和可視化的課程。

楊老師最好的一點是把學(xué)生當(dāng)作一無所知的小白來教,而埃里克·馬瑟斯還是他美國教育的思路,默認你即便是美術(shù)音樂舞蹈出身也還懂點兒IT,有數(shù)理邏輯基礎(chǔ),甚至是有C語言基礎(chǔ)的。他的想法不無道理,記得奧巴馬執(zhí)政時期就鼓勵全美人人學(xué)編程。二○一三年,非營利性組織Code.org發(fā)起的“代碼一小時”(Hour of Code)的倡議竟然吸引了全球一百六十六個國家的三萬三千所學(xué)校,約有五百多萬名學(xué)生參與到這項旨在促進全民編程代碼學(xué)習(xí)的活動中來。許多政界人士也參與了這場活動的宣傳。我曾參與一家美國公司的團隊做電子書網(wǎng)上翻譯工作。團隊中的翻譯人員好像都懂一些HTML(全稱為超文本標記語言。由HTML命令組成的描述性文本)。在瀏覽一個時尚網(wǎng)站時,竟然看到一位窈窕美麗的模特兒背景介紹也有程序員這一項。

不過,《Python編程:從入門到實踐》的最有趣的地方,還是每一章節(jié)后面作者出的那些練習(xí)題目。這些練習(xí)題中,山川河流、氣候地理、國家民族、汽車旅行、家人寵物、飲食喜好,幾乎無所不包。于是,我把家人姓名寵貓花草所讀之書所到之處,在代碼練習(xí)中統(tǒng)統(tǒng)敲了一遍……

按說做編程寫代碼是最國際化的工作,但吾國網(wǎng)民就是不同,有些創(chuàng)意別出心裁,還帶著濃濃的“藍翔”味。比如《Python編程:從入門到實踐》書中推薦的一款輕巧好用的編輯器“geany”,它居然被漢化得如此徹底,我簡直認不出它的本來面目了。沒辦法,代碼本是英文的世界,土法上馬也算是劍走偏鋒的一招。在那些社區(qū)多混幾天,有才的俊杰你都能碰上。一位博主在他的博客上就把專業(yè)內(nèi)“面向?qū)ο缶幊獭迸c“面向過程編程”的區(qū)別解釋得既本土化又明確易懂。他用蛋炒飯和蓋澆飯做比喻,他說,用面向過程的方法寫出來的程序是一份蛋炒飯,而面向?qū)ο髮懗鰜淼某绦蚴且环萆w澆飯。做蛋炒飯,最后就是把米飯和雞蛋混在一起炒勻。蓋澆飯則是把米飯和蓋菜分別做好,至于喜歡紅燒肉還是青椒土豆,可以自己選擇。蛋炒飯的好處是入味均勻,吃起來香。但如果你不愛吃雞蛋,只愛吃青菜,那么唯一的辦法就只能重新做青菜炒飯了。蓋澆飯就沒有這個麻煩,只要把上面的蓋菜撥掉,另換一份蓋菜就可以了。到底是蛋炒飯好還是蓋澆飯好呢?其實這類問題都很難回答,非要比個上下高低的話,就必須設(shè)定一個場景,否則只能說是各有所長。如果食客沒那么多講究,那么從飯館角度考慮,做蓋澆飯顯然比蛋炒飯更有優(yōu)勢,他可以搞出任意多的組合,而且不會浪費。蓋澆飯的好處是菜與飯分離,不對口味就換菜。用軟件工程的專業(yè)術(shù)語說就是“可維護性”好,飯和菜的耦合度較低。蛋炒飯是蛋和飯攪和在一起,耦合度很高,你想換成青菜就不成,所以“可維護性”就差了。軟件工程追求的目標之一就是可維護性。你不能前腳寫完代碼剛出門,后腳就程序崩潰無法收拾了。

程序員搭好環(huán)境后寫出的第一行代碼:“Hello World!”

從美國人開始,有一個編程的儀式感,程序員搭好環(huán)境后要寫出第一行代碼:“Hello World!”據(jù)說這能帶來好運。對于Python使用者來說,第一行代碼最好是:“Hello Python World!”當(dāng)這句話運行起來時,真是Python一小步,我的人生一大步啊,我開心得以為萬事大吉了。不是說“萬事開頭難”嗎?以后可以在編程中大展身手了?其實,是萬難才剛剛開始。因為文科生真的需要把自己的腦袋扳轉(zhuǎn),調(diào)試過后才能聽使喚,哪怕是在線求助一個問題,你得用他們那套江湖行話把問題說清楚。

每一個寫代碼的人都會陷入困境,需要向外求援,我看到過許多在校研究生哭天喊地在網(wǎng)上這樣求救:“救救孩子吧,明天就要交作業(yè)了,可是這段死程序它怎么都跑不起來!”可憐我一開始連別人的回答都搞不懂:“你要用tab縮進”“遍歷一下列表”“你都沒給賦值啊”“這不就是布爾值嘛”……世界各國程序員都會上網(wǎng)求救,但求救需有一定的程序:一、你想要做什么?二、你已嘗試哪幾種方式?三、結(jié)果如何?美國程序員們稱之為:“橡皮鴨子調(diào)試法”。意思是,假如你要向一只橡皮鴨子(或任何無生命的東西)清楚地闡述自己的困境,并向它提出具體問題,你應(yīng)該怎么做?在文科生看來,那是精神錯亂的表現(xiàn),起碼是前兆。但美國有些編程公司甚至就在辦公桌上放置一個橡皮鴨子,旨在鼓勵程序員,“與這只鴨子交流!”好吧,幸好也有文科生看得懂的勸告:你只需回過頭來重新寫一遍,就足以解決許多問題(這個勸告看似扯淡,其實極為管用,許多文科生常犯的毛病是不夠嚴謹,他們的邏輯表達跟理科生比起來總是欠缺,我都不知道怎么來形容好了)。還有一個建議我也聽得懂:“如果你長時間一直試圖解決同一個問題,那么休息一會,走開去喝點水或飲料,吃點清淡而健康的零食,是你實際上可采取的最佳戰(zhàn)術(shù)。長時間從事一個任務(wù)時,你可能會變得一根筋,你對其他的假設(shè)往往會視而不見,休息一下有助于你從不同的角度看問題。不用休息很長時間,起來做做活動,溜達一下。如果還不行,這問題弄得你心情沮喪,或許可以把工作放在一邊,晚上睡個好覺后,你會發(fā)現(xiàn)問題并不是那么難解決了。”

總之是,天無絕人之路,你使勁敲Python之門,邊喊邊敲,那門總會為你打開。

二0二二年一月二十二日

猜你喜歡
蛋炒飯文科生程序員
為了讓媽媽看懂地圖,一位“野生程序員”做了個小程序
一起來做蛋炒飯
蛋炒飯的哲學(xué)
老爸牌蛋炒飯
2020年程序員依然很吃香
蛋炒飯助力脫貧
一句話證明你是文科生還是理科生
程序員之子
加班
文理科男生是這樣看對方的
深圳市| 福清市| 义马市| 尤溪县| 丰镇市| 同仁县| 麻城市| 清原| 甘谷县| 枣阳市| 松江区| 肥城市| 安康市| 汉沽区| 广丰县| 宜兰市| 太谷县| 闵行区| 永清县| 乐都县| 道真| 千阳县| 上蔡县| 柘荣县| 博野县| 辽宁省| 高邑县| 会泽县| 武义县| 独山县| 宁夏| 井研县| 凤阳县| 临猗县| 舞钢市| 曲靖市| 嘉峪关市| 福鼎市| 清丰县| 建昌县| 濮阳市|