吳沖
我在百度上搜索了“爬蟲”,大量的爬蟲實(shí)戰(zhàn)案例就展現(xiàn)在我眼前。在認(rèn)真閱讀了多篇文章后,我發(fā)現(xiàn)大部分案例都用了python語言。因?yàn)閜ython是一門開源語言,簡單易用,很多技術(shù)或算法都是用python編寫的,并且很多人也愿意將自己的工作成果分享到網(wǎng)上,其中有不少數(shù)據(jù)挖掘與數(shù)據(jù)分析領(lǐng)域的成果,所以利用python語言進(jìn)行科研或工作,就像站在前人的肩膀上一樣,工作效率會(huì)大幅度提高。于是第二天一大早,我就背著電腦直奔圖書館,準(zhǔn)備花一天時(shí)間學(xué)習(xí)python,完成作業(yè)。
因?yàn)樯线^C語言的課程,我知道編程基本的邏輯跟我們思考問題和處理問題的思維方式是一樣的。拿到python語言代碼文件后,我發(fā)現(xiàn)它的行文邏輯跟C語言差不多,只有變量聲明方式、函數(shù)寫法等關(guān)鍵詞、語言特性等基礎(chǔ)知識(shí)略微不同。隨后,我去網(wǎng)上找來一個(gè)python語言的基礎(chǔ)教程,快速瀏覽基本的知識(shí)內(nèi)容后,便開始模仿一個(gè)爬蟲例子,試著編寫我自己的爬蟲命令。
按照爬蟲案例的思路,我先引入HTTP請(qǐng)求庫、數(shù)據(jù)處理庫和Execl文件生成庫,然后寫了一個(gè)函數(shù)來獲取網(wǎng)站數(shù)據(jù),又寫了一個(gè)函數(shù)來對(duì)獲取來的數(shù)據(jù)進(jìn)行數(shù)據(jù)整理,最后用一個(gè)執(zhí)行函數(shù)來調(diào)用前面兩個(gè)函數(shù),并將處理整理后的數(shù)據(jù)寫入新創(chuàng)建的Execl表格中,就可以完成快速獲取數(shù)據(jù)的任務(wù)了。整個(gè)過程一共用了大概30分鐘,代碼僅37行。
完成代碼的編寫后,我在命令行中輸入“python getdata.py”,程序就開始運(yùn)行了。當(dāng)看到爬蟲分別從新聞網(wǎng)和微博等社交平臺(tái)獲取我需要的熱點(diǎn)新聞,并且?guī)臀艺砗媒?年來近6000條新聞數(shù)據(jù),以Execl表格形式在我的目錄文件夾中出現(xiàn)的時(shí)候,我非常開心和自豪。
這就是我第一次學(xué)習(xí)使用python的經(jīng)歷。在往后的學(xué)習(xí)工作里,一旦遇到相關(guān)問題,我就會(huì)想到python語言,因?yàn)樗墓ぷ餍史浅8?。慢慢地,我發(fā)現(xiàn)python很適合做數(shù)據(jù)分析領(lǐng)域的工作,它提供的很多優(yōu)秀的開源庫和框架,能夠讓我專注于核心任務(wù),比如算法的設(shè)計(jì)、核心功能的實(shí)現(xiàn)等。
作為測(cè)繪工程專業(yè)的學(xué)生,我們的專業(yè)培養(yǎng)計(jì)劃里并沒有設(shè)置編程課程。我之所以熱衷自學(xué)各種編程知識(shí),是因?yàn)槿绻延?jì)算機(jī)技術(shù)與本專業(yè)背景結(jié)合在一起,就能完成很多同學(xué)無法勝任的工作,比如進(jìn)入老師的課題組承擔(dān)核心工作,高效地完成科研任務(wù)等等,這將成為我最重要的競爭力。同時(shí),我也逐漸認(rèn)識(shí)到,專業(yè)出身并不是壁壘。許多技術(shù)大牛都是非科班出身的,大家的專業(yè)各不相同,唯一相同的就是牢固的基礎(chǔ)知識(shí)和無數(shù)次寫代碼的實(shí)踐,我想這放在我身上同樣適用。在學(xué)長學(xué)姐的推薦下,我找到了一個(gè)python自學(xué)教程。因?yàn)檫@個(gè)教程是直接掛在網(wǎng)上的,很方便學(xué)習(xí),而且教程的作者一直都在維護(hù)和更新內(nèi)容,以保證它的準(zhǔn)確性和友好性,因此它在網(wǎng)上頗有聲譽(yù)。
進(jìn)入教程,我在首頁的python語言簡介一欄看到一句醒目的話:“C語言要寫1000行代碼,Java只需要寫100行,而Python可能只要20行。”我深以為然,這正是python的魅力所在。
一般來說,剛開始學(xué)習(xí)一門編程技術(shù)時(shí),第一步就是安裝語言環(huán)境和開發(fā)環(huán)境。python語言的環(huán)境安裝非常簡單,因?yàn)槲沂褂玫氖翘O果電腦,蘋果電腦的Mac OS系統(tǒng)本身就內(nèi)置了python,所以只要安裝一個(gè)編輯器,就可以直接開始進(jìn)行編程學(xué)習(xí)了。
從python文件的代碼結(jié)構(gòu),到內(nèi)部每一句代碼每一個(gè)關(guān)鍵詞的含義,對(duì)我來說都比較容易理解。我一邊看每一個(gè)章節(jié)的知識(shí)點(diǎn),一邊按照教程內(nèi)容進(jìn)行實(shí)操,遇到無法理解的難點(diǎn)時(shí),只要用百度搜索一下,一般都能找到詳細(xì)解答。為了加深知識(shí)點(diǎn)印象,我將這門教程反復(fù)學(xué)習(xí)了多遍。當(dāng)感覺腦海中存儲(chǔ)的知識(shí)越來越多,思路越來越清晰的時(shí)候,我覺得下一步就應(yīng)該去找實(shí)際案例進(jìn)行練習(xí)了。以練帶學(xué),才能真正掌握這門語言。
我在網(wǎng)上開源社區(qū)GitHub找了一些python的項(xiàng)目案例,期待通過閱讀別人的源代碼來提高自己的編程能力。當(dāng)我看到別人寫的具體項(xiàng)目時(shí),發(fā)現(xiàn)從項(xiàng)目工程目錄的文件組織到具體python文件的編寫,都非常專業(yè)和巧妙。比如目錄會(huì)按不同的功能詳細(xì)劃分成不同的功能文件,重復(fù)編寫的地方特別少,在后面的程序中只要需要,就可以直接調(diào)用,這樣一來,代碼量就減少了很多,也更加易于后期的更新和維護(hù)。此外,分析python文件的每一個(gè)函數(shù)或者重要的語句都有相應(yīng)的解釋,變量和函數(shù)的命名也都用了統(tǒng)一的英文名,非常易于閱讀。
同時(shí)我還發(fā)現(xiàn),不少案例中的許多內(nèi)容都跟教程有差別,比如同樣的數(shù)據(jù)排序功能,別人用一行代碼就實(shí)現(xiàn),而我卻要寫很多行才能做到。百思不得其解,我便咨詢了計(jì)算機(jī)課程的老師。老師告訴我,我從基礎(chǔ)知識(shí)教程中學(xué)到的方法是最基礎(chǔ)的最簡單的,但也因?yàn)榛A(chǔ),并不會(huì)涉及一些編程的技巧。而在別人分享的真實(shí)案例中,一般都運(yùn)用了編程技巧。老師建議我在實(shí)際操作時(shí)多學(xué)習(xí)模仿別人的編程思路和做法,比如靈活運(yùn)用函數(shù)式編程、面向?qū)ο缶幊痰燃记?,這在開發(fā)大型項(xiàng)目時(shí),就能大大減少代碼量,提高效率,也能讓軟件系統(tǒng)更加穩(wěn)定。
我學(xué)習(xí)python已經(jīng)有3年多了,python早已成為我科研學(xué)習(xí)路上的得力助手。
就這樣,我不斷地練習(xí)數(shù)據(jù)挖掘、數(shù)據(jù)分析、網(wǎng)站系統(tǒng)等項(xiàng)目實(shí)戰(zhàn)案例。最讓我印象深刻的是,一次在做一個(gè)人臉識(shí)別的案例時(shí),我新建了一個(gè)python工程文件,引入了python人臉識(shí)別的開源引擎face_recognition,寫了不到100行代碼,我就看到畫面中的自己被一個(gè)綠色的框子識(shí)別了出來,并標(biāo)注出了我的名字。這是我第一次感受到人工智能技術(shù)離我這么近,也讓我在以后遇到圖像處理、深度學(xué)習(xí)等任務(wù)時(shí)開始有底氣、有信心,敢去嘗試挑戰(zhàn)了。
經(jīng)過一段時(shí)間的學(xué)習(xí),我對(duì)python的興趣越發(fā)濃厚。為檢驗(yàn)自己的學(xué)習(xí)效果,我和幾個(gè)同學(xué)一同報(bào)名參加了當(dāng)年的創(chuàng)新創(chuàng)業(yè)互聯(lián)網(wǎng)+大賽。雖然大家都不是計(jì)算機(jī)專業(yè)的,但我們就想嘗試挑戰(zhàn),想看看別人到底有多么厲害。我們選定的項(xiàng)目是開發(fā)一個(gè)基于LBS的圖書共享系統(tǒng),我自告奮勇地接下了編程技術(shù)的任務(wù)。因?yàn)槲抑?,只要舍得花時(shí)間去研究,目標(biāo)是有很大概率實(shí)現(xiàn)的。
網(wǎng)站應(yīng)用系統(tǒng)是python的基礎(chǔ)應(yīng)用領(lǐng)域,像國內(nèi)的豆瓣網(wǎng),國外的youtube等,它們的系統(tǒng)后臺(tái)都是用python來開發(fā)的。于是,我重新回到教程,再次深入學(xué)習(xí)了與python web編程相關(guān)的知識(shí)點(diǎn),比如IO編程、數(shù)據(jù)庫、web框架和引入第三方模塊等知識(shí),然后從GitHub上找了一個(gè)與我所需要開發(fā)的系統(tǒng)類似的python項(xiàng)目,認(rèn)真研讀源碼后,我開始邊模仿邊開發(fā)自己的新系統(tǒng)。
在開發(fā)過程中,我經(jīng)常會(huì)遇到一些報(bào)錯(cuò)信息,因?yàn)樯磉厸]有精通python的同學(xué)請(qǐng)教,我只好去百度,甚至去國外網(wǎng)站查找問題的解決辦法,這對(duì)英語水平不高的我來說,又是一個(gè)挑戰(zhàn)。經(jīng)過一個(gè)多月的努力,我終于把系統(tǒng)開發(fā)出來了。當(dāng)自己設(shè)計(jì)的網(wǎng)站首頁出現(xiàn)在眼前的時(shí)候,我的心里別提有多激動(dòng)了。
盡管最終我們沒拿到好的名次,但通過參加比賽,我在短時(shí)間內(nèi)成功建立了一個(gè)完整的python系統(tǒng)項(xiàng)目,這讓我收獲了滿滿的知識(shí)和信心。隨后,我發(fā)現(xiàn)在老師的很多科研項(xiàng)目中,自己甚至都可以承擔(dān)起整個(gè)項(xiàng)目的開發(fā)任務(wù)了,這是我身邊很多同學(xué)都做不到的。
如今,我學(xué)習(xí)python已經(jīng)有3年多了,python早已成為我科研學(xué)習(xí)路上的得力助手。我認(rèn)為,在技術(shù)升級(jí)發(fā)展日新月異的今天,及時(shí)跟進(jìn)科技發(fā)展的腳步,敢于利用新技術(shù)新知識(shí)來強(qiáng)化自己的專業(yè)能力,實(shí)現(xiàn)跨界融合,是大學(xué)生在專業(yè)領(lǐng)域得到提高的有效途徑。
責(zé)任編輯:曹曉晨