學(xué)習(xí)編程不僅在于可以解決當(dāng)前的什么問題冗疮,更在于對自己思維方法的改變萄唇。
編程替代重復(fù)性勞動(dòng)
編程能替代工作或生活中的大量重復(fù)性勞動(dòng)。
比如偶爾偏離生活的軌道赌厅,真的是壞事嗎穷绵?中的事例。
比如前一段我們有個(gè)工作是進(jìn)行機(jī)構(gòu)分類特愿,查詢文本文件中的機(jī)構(gòu)是否為私募基金管理人仲墨。方法是在私募基金管理人綜合查詢網(wǎng)站中輸入機(jī)構(gòu)名稱點(diǎn)擊查詢勾缭。但是有幾十上百家機(jī)構(gòu)的時(shí)候,手動(dòng)從文件中復(fù)制再粘貼到網(wǎng)頁中查詢目养,是非常低效的俩由。這時(shí)候,如果你懂點(diǎn)爬蟲知識癌蚁,只需要一段代碼即可:
import requests
import json
headers = {
'Host': 'gs.amac.org.cn',
'Origin': 'https://gs.amac.org.cn',
'Referer': 'https://gs.amac.org.cn/amac-infodisc/res/pof/manager/index.html',
'Sec-Fetch-Dest': 'empty',
'Sec-Fetch-Mode': 'cors',
'Sec-Fetch-Site': 'same-origin',
'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/86.0.4240.198 Safari/537.36',
'X-Requested-With': 'XMLHttpRequest'
}
url = 'https://gs.amac.org.cn/amac-infodisc/api/pof/manager?rand=0.7119720626937933&page=0&size=10'
data = {
'rand': '0.7119720626937933',
'page': '0',
'size': '10'
}
with open('私募基金.txt','r',encoding='utf-8') as f:
print('以下機(jī)構(gòu)不是私募基金:')
is_pe = True
for org in f.readlines():
org = org.strip()
payloaddata = {"keyword":org}
dumpJsonData = json.dumps(payloaddata)
r = requests.post(url,data=dumpJsonData,headers=headers)
if r.text.replace(r'</em>','').find(org) == -1:
is_pe = False
print(org)
if is_pe:
print('無')
這都是學(xué)習(xí)編程能帶給人們顯而易見的好處幻梯,也是非科班選手進(jìn)入編程世界的原因,學(xué)習(xí)編程在這方面也確實(shí)可以給人滿意的回報(bào)努释。
以 Python
為例碘梢,近些年 Python
的流行,對編程的普及起到了極大的推動(dòng)作用伐蒂。更多沒有接觸過編程的人也能偶爾寫段代碼解放自己的雙手煞躬。 Python
語法接近自然語言,入門簡單逸邦,但是功能卻很強(qiáng)大恩沛,所謂
Python
除了不能幫你生孩子,什么都能做缕减!
雖然 Python
也有其缺點(diǎn)雷客,如入門簡單精通卻很難,如優(yōu)秀的庫太多不知如何取舍桥狡,如運(yùn)行效率不如 C
/ Java
等搅裙。但是對于非科班想要利用編程工具解決一些實(shí)際問題的人來說,這都不是問題总放。所以我認(rèn)為呈宇,非科班的初學(xué)者最好的入門語言就是 Python
。
入門簡單精通很難
對于很多生活中的應(yīng)用場景來說局雄,編寫簡單的 Python
代碼即可甥啄,根本不需要很精通。況且炬搭,Python
生態(tài)圈很活躍蜈漓,網(wǎng)上有大量的現(xiàn)成代碼,只需稍加修改即可應(yīng)用到自己環(huán)境中宫盔。
我開始入 Python
的坑是因?yàn)橄肱廊《拱陥D書融虽、電影的數(shù)據(jù)。我的學(xué)習(xí)路徑是先學(xué)習(xí) Python
最基礎(chǔ)的概念灼芭,就是數(shù)據(jù)類型和函數(shù)有额。對面向?qū)ο蟮母拍钪蛔隽俗罨A(chǔ)的了解,就是別人寫的時(shí)候我大概知道那是在干嘛,但是自己寫是寫不出來的巍佑。
這些了解之后茴迁,我就直接在網(wǎng)上找免費(fèi)的爬蟲視頻教程。那時(shí)候B站上的教學(xué)視頻還沒有那么流行萤衰,資源很少堕义,我就找了一個(gè)爬取新浪博客的教程跟著敲代碼,熟悉基礎(chǔ)的操作脆栋。說到這兒倦卖,初學(xué)者我還是很建議跟著視頻操作或者有人帶,因?yàn)閷τ诰幊坛鯇W(xué)者來說椿争,上來就看書可能會遇到很多細(xì)節(jié)上的問題怕膛。這些問題對于老手來說,可能以為不用解釋秦踪,但是對于初學(xué)者來說嘉竟,就可能是邁不過去的天大的坎。
視頻中爬蟲非常簡單洋侨,沒有用任何框架,甚至文本解析也沒有用常見的第三方庫如 BeautifulSoup
等倦蚪,直接用的 find
函數(shù)查找關(guān)鍵字希坚。這樣的好處就是學(xué)習(xí)門檻很低,沒有任何理解障礙陵且,特別適合于沒有任何編程經(jīng)驗(yàn)的初學(xué)者裁僧。
我在學(xué)了這個(gè)視頻教程之后,又閱讀了幾篇爬蟲相關(guān)的博文慕购,就開始爬豆瓣電影聊疲,沒想到很快成功了,這給了我極大的信心沪悲。在學(xué)習(xí)的初期获洲,信心也許是最寶貴的東西。雖然后來由于爬取量大殿如,需要把數(shù)據(jù)裝到數(shù)據(jù)庫中贡珊,又學(xué)了點(diǎn) MongoDB
的操作;由于擔(dān)心多次爬取被豆瓣封IP涉馁,又簡單了解了使用代理门岔;由于使用 find
函數(shù)解析文本代碼量太復(fù)雜,又學(xué)習(xí)了正則表達(dá)式烤送,等等寒随。
這些后續(xù)學(xué)習(xí)的內(nèi)容包括最開始學(xué)習(xí)的 Python
基礎(chǔ)概念,都是走實(shí)用主義路線,只要做成想要的效果即可妻往,學(xué)得并不精通互艾。這也導(dǎo)致同樣的東西我后來又多次學(xué)習(xí)。但是這樣做的好處就是可以及時(shí)得到正面的反饋蒲讯,很有成就感忘朝,也就獲得了繼續(xù)下去的動(dòng)力。而且判帮,前期雖然學(xué)得不扎實(shí)局嘁,但是對于后期的再學(xué)習(xí)也還是有潛移默化的幫助的。
當(dāng)然還有一種學(xué)習(xí)方法是上來就系統(tǒng)性地學(xué)習(xí)晦墙,學(xué)扎實(shí)悦昵。兩種方法各有優(yōu)劣,適用于不同的人群晌畅,此處不做比較但指。
要學(xué)習(xí)哪個(gè)庫
Python
火起來的一大重要原因就是擁有各個(gè)領(lǐng)域的大量優(yōu)秀的庫。這些直到我將 Python
大量應(yīng)用到生活抗楔、工作中后棋凳,才有更深的體會。
- 想操作PDF连躏,有
PyPDF2
剩岳、pdfplumber
等,PDF文件的分割入热、合并拍棕、加解密、文字提取等都不是事勺良。 - 想做數(shù)據(jù)處理绰播,
numpy
、Pandas
肯定是首選尚困。 - 想做爬蟲蠢箩,
Requests
、BeautifulSoup
等庫也是必學(xué)的事甜。而且忙芒,作為pythonic的優(yōu)秀代表,Requests
庫的源碼也是進(jìn)階學(xué)習(xí)的好素材讳侨。 - ……
很多初學(xué)者的面對大量的 Python
庫會感到眼花繚亂呵萨,感覺要學(xué)習(xí)的太多,擔(dān)心自己堅(jiān)持不下去跨跨,于是就勸退了潮峦。
但實(shí)際上囱皿,這些常用庫基本都有相應(yīng)的demo,稍加修改即可應(yīng)用到自己的項(xiàng)目中忱嘹。所以嘱腥,豐富的庫非但不是累贅,反而可以給自己帶來極大的便利拘悦。
我以前也稍微用過 VBA
齿兔,但一直不喜歡它的編輯環(huán)境,所以使用次數(shù)并不多础米,只是在實(shí)在無法用別的方式實(shí)現(xiàn)的時(shí)候才勉強(qiáng)寫幾行代碼分苇。
但是 Python
給了我另一種選擇,可以擁有漂亮的編輯器屁桑,如 VS Code
医寿、Sublime Text
等,還用于遠(yuǎn)比 VBA
好用得多的代碼補(bǔ)全等功能蘑斧,這也是我一開始想學(xué)習(xí) Python
的原因靖秩。至于用于豐富的庫,對于小白的我竖瘾,其實(shí)是沒有啥感覺的沟突。
但是后來隨著學(xué)習(xí)的深入,用 Python
做的事情也越來越多捕传,才漸漸體會到豐富的庫所帶來的優(yōu)勢事扭。
我認(rèn)為對于初學(xué)者來說, Python
相比于 VBA
乐横,最大的優(yōu)勢就是簡潔,這種簡潔一方面基于 Python
語言本身的一些特質(zhì)今野,比如好用的基礎(chǔ)數(shù)據(jù)類型如 list
葡公、dict
等,另一方面就是得益于大量的庫条霜。
如果你不理解庫是什么催什,你可以認(rèn)為是工具箱,或者是零件庫宰睡,是別人將常用的功能組裝好蒲凶,你寫程序時(shí)可以直接一句話調(diào)用的東西。
舉個(gè)可能不太恰當(dāng)?shù)睦硬鹉凇R汛笙笱b冰箱旋圆,需要怎么操作?
- 打開冰箱麸恍;
- 把大象放進(jìn)冰箱里面灵巧;
- 關(guān)上冰箱門搀矫。
用 VBA
實(shí)現(xiàn),你需要吭哧吭哧從底層實(shí)現(xiàn)怎么開冰箱刻肄,怎么拖動(dòng)大象到冰箱里瓤球,怎樣關(guān)冰箱門。
而有了庫的幫助敏弃,你可以直接關(guān)注業(yè)務(wù)邏輯層面的問題卦羡,即只需要關(guān)注上面三步。至于每一步怎么實(shí)現(xiàn)麦到,庫已經(jīng)幫你做好了绿饵,你只需要調(diào)用即可。這無疑大大減輕了初學(xué)者進(jìn)入編程世界的門檻隅要。
運(yùn)行效率問題
不可否認(rèn)蝴罪,Python
語言的運(yùn)行效率總體上是不如 C
或者 Java
這樣的語言的。但是運(yùn)行效率恰好對初學(xué)者來說并不是一個(gè)很重要的問題步清。一個(gè)手動(dòng)需要10小時(shí)完成的工作量要门,用 Python
需要10秒鐘運(yùn)行出結(jié)果,用 C
或者 Java
0.1 秒即可運(yùn)行出結(jié)果廓啊。
這其中的差距大嗎欢搜?大,有 100 倍的差距谴轮!
但對于我們要實(shí)現(xiàn)的功能來說炒瘟,多個(gè) 10 秒鐘或者少個(gè) 10 秒鐘根本可以認(rèn)為沒什么差別好嗎?
而學(xué)習(xí) Python
語言卻可以節(jié)省很多時(shí)間第步,編寫簡潔的 Python
代碼也會更省時(shí)省力疮装。
編程帶來思維方式的轉(zhuǎn)變
講話有邏輯、做事有條理是一個(gè)逐漸被大家高度認(rèn)可的能力粘都。但是邏輯能力的培養(yǎng)卻不是一朝一夕的事情廓推。
世面上有很多書講如何提升邏輯能力,但是一個(gè)關(guān)鍵問題是翩隧,這種底層能力的提升都不是靠看基本理論書就可以樊展,而是需要大量練習(xí)的。
那如何練習(xí)呢堆生?
我覺得數(shù)學(xué)訓(xùn)練是有助于提高邏輯能力的专缠。但讓大多數(shù)成年人去學(xué)習(xí)微積分、復(fù)變函數(shù)等是不現(xiàn)實(shí)的淑仆。且不說有沒有時(shí)間涝婉、有沒有興趣,就算這些都有蔗怠,那得能學(xué)得會班胰Α省骂!
而學(xué)習(xí)編程可以給你帶來的邏輯能力的提升,這可能是很多人開始學(xué)習(xí)編程時(shí)所沒有想到的最住。
也很好理解钞澳。
如果你邏輯思維能力不強(qiáng),寫出來的代碼就會bug不斷涨缚。變量的初始化是在循環(huán)外還是在循環(huán)內(nèi)轧粟?邊界條件要不要做特殊處理?還有什么特殊情況沒有考慮到脓魏?這些都會影響著程序的正確執(zhí)行兰吟。
疫情期間我寫過一段代碼,爬取每天公眾號發(fā)布的疫情信息茂翔,解析其中的數(shù)據(jù)并記錄下來混蔼。這段代碼連續(xù)很多天一直運(yùn)行很好,突然有一天發(fā)現(xiàn)出錯(cuò)了珊燎。仔細(xì)檢查代碼發(fā)現(xiàn)是疫情后期惭嚣,每天的確診病例數(shù)和無癥狀感染者數(shù)量很少,甚至有時(shí)候完全沒有悔政。這時(shí)候疫情信息的描述就與有數(shù)據(jù)時(shí)不同晚吞,程序檢測不到相應(yīng)的固定格式,就會報(bào)錯(cuò)谋国。
所以程序員的目標(biāo)都是寫盡可能健壯的程序槽地,也就是盡量能適應(yīng)各種極端情況,這就需要在規(guī)劃程序時(shí)就考慮到方方面面芦瘾。沒有良好的邏輯思維能力捌蚊,是很難完成這樣的工作的。但與此同時(shí)近弟,持續(xù)這樣的代碼訓(xùn)練缅糟,也會讓你的邏輯思維能力有極大的提升。
最后
寫完本文藐吮,我聽到了一個(gè)播客,為什么要學(xué)編程逃贝。里面提到了My First Million Podcast的節(jié)目主持人 Sam Parr 以2200萬美元的價(jià)格賣掉了之前做的hustle谣辞,一個(gè) newsletter 平臺。賣掉的原因是沐扳,他覺得寫 newsletter 對他來講變成了一個(gè)工作泥从,而不是生意。前者需要持續(xù)投入時(shí)間的事情沪摄,即不投入時(shí)間躯嫉,就沒有收益纱烘。而后者是可以以錢生錢的事業(yè)。
播客的主播提到這個(gè)事情祈餐,是因?yàn)橄虢忉屗麨槭裁撮_始學(xué)編程擂啥。
主播在做播客,寫博客帆阳,但這些需要持續(xù)輸出哺壶、持續(xù)運(yùn)營。他想學(xué)習(xí)前端等技術(shù)蜒谤,這樣可以運(yùn)行某些服務(wù)山宾,如SaaS。一旦服務(wù)部署鳍徽,有了用戶资锰,則后續(xù)基本不需要持續(xù)投入,即可有源源不斷的收入阶祭。
其實(shí)這也是我前面寫的編程可以解決重復(fù)性勞動(dòng)的一種思路绷杜。
但是對于大多數(shù)初學(xué)者來說,前端需要涉及的內(nèi)容較多胖翰、較雜接剩,一旦學(xué)習(xí)遇到挫折,很容易喪失繼續(xù)學(xué)習(xí)的信心萨咳。 Python
入門需要的知識則少得多懊缺,也能立即對自己的工作、生活起到立竿見影的效果培他。后續(xù)如果對于互聯(lián)網(wǎng)服務(wù)有興趣鹃两,既可以學(xué)習(xí) JavaScript
等前端語言,也可以繼續(xù)學(xué)習(xí) Python
舀凛。畢竟俊扳, Python
除了不能幫你生孩子,什么都能做猛遍!x