其實,這個是一個思維方式的問題。我們在生活中有很多事,看起來是很自然的事,但是在計算機來看,卻不是那么簡單。我現在的工作是做計算機中的流體力學仿真,我們在模擬一架飛機在天上飛行的時候,我們會在3D模型中把一個飛機放在空中,沒有任何支撐。在開始建模的時候,建模的小伙伴就會問我,這個飛機這樣不會掉下來嘛?這個問題我怎么回答呢!我就問他,你看現在它掉下來了嘛?
計算機思維是和我們平常的思維不一樣的。比如我們左右手的東西交換一下,很簡單很稀松平常的事,但是在計算機里,可能要復雜一點,需要先把左手的東西放在一個盤子里,右手的東西放到左手,然后在用右手拿起盤子的東西,這樣就完成了交換。
左右手換槍
類似的還有很多,最經典的,就是排隊,一隊人按高矮隊伍排,我們人眼睛一看就知道,但是計算機就麻煩了。
那么,說了這么多,什么是計算機思維呢?
計算機思維,實際上就是不停的問為什么,然后你回答,一直回答到,計算機能做的事,這就是計算機思維。我們中國人的文化,可能一句大道至簡,就完了,但是計算機不行,我們得告訴它怎么大道至簡了。
關于計算機很基礎的知識,這不是我要闡述的重點,我主要講講計算機怎么考慮問題的。
剛才說到,計算機會一直提問,問到什么時候結束,問到它能做的結束。
l 計算機提問的方式是什么呢?
就是出錯。所以只要出錯了,就是計算機再問你,你剛才那個事情你讓我怎么做啊。我按你說的做了,但是前面是死胡同,走不過去啊,堵死了,等等。
l 什么是計算機能做的呢?
計算機可以做很多事,但是需要我們來告訴它!與計算機交流的東西,就是計算機語言。
我們今天講的是python語言。python語言就是一門和計算機交流的語言。
Python語言由三部分組成:
一是語法,就是按什么規則來與計算機溝通。
二是我們自己寫的一段計算機能懂的文章,這個文章也描述清楚了你讓計算機做的事,并且告訴了它如何做。
三是寫語言的預言家們,已經給我們準備好的那些經常用的文章模板,或者成為工具,在python中稱為庫,模塊,包。等這三個詞,我覺得只是說法不一樣。總之就是放在一起的一個工具箱。
在pycharm里,我們可以通過File》setting》到這個界面,然后點擊左側位置的按鈕,看到python的自帶的和第三方的工具箱。所謂自帶的,就是隨著python解釋器一起發布的工具,第三方的,就是其他大牛寫的工具箱。我們都可以拿來使用。Python可是開源的語言,非常強大。
關于計算機能做什么的問題,其實是問我們自己,能讓計算機做什么。實際上就是我們寫這個程序(文章)的水平。我們寫python程序,就是按python的語法,結合python的庫(工具箱)完成一個我們自己的文章的過程。所以,剛才我們說到的“為什么”的終點,就是你作為一個程序編寫者能寫的功能和python自帶的工具箱。
所以,對于程序員來說,計算機思維,就是在python的語法下,結合工具,完成文章的撰寫所具有的思維方式,最終是數學的。
你根本不用擔心數學的問題,因為只要你決定使用計算機語言來編寫程序了,那么數學就會跟你耗上了。計算機語言本質上是數學的工程化語言。
一)
最近幾年有個詞很流行,叫“降維打擊”。
什么意思呢?拿上一篇文章講的“搶茅臺”為例,你靠純手動搶,肯定搶不過別人寫程序、用機器搶。別人用機器搶,相比于你而言,站在了更高的維度上,對你形成的打擊,就叫“降維打擊”。
把“降維打擊”延伸到公司競爭上,我們完全可以想象,在未來善用機器智能的公司,一定會在競爭中勝出,而拒絕機器智能的,一定會被淘汰,低維怎么打得過高維?
寫作也是這個道理。
大家可能有個刻板印象,認為寫文章肯定是文科生比理科生擅長。過去或許如此,但時代變了。
我們現在這個時代,有個神器,叫“計算機”,有個魔鬼,叫“互聯網”。
很多事情,人是做不過計算機的。當理科生用“計算機思維”寫文章,就能對傳統文科生形成“降維打擊”。
不要不信。計算機的很多操作,對于理科生來說,就像本能一樣,日用而不知;而對文科生來說,那簡直是“天方夜譚”。
這里說的計算機,是那種傳統的、有實體鍵盤的電腦,而不是手機、平板之類的娛樂和社交設備。
(二)
我跟絕大部分人一樣,是一個普通的計算機使用者。但我在大學里接受過專門的計算機課程訓練,我學到了一些很實用的東西,而且十幾年來天天操練,所以我使用計算機比一般人——快。
我非常受不了旁觀水平比我低的人使用計算機,他們太慢了,他們哪里是在使用電腦,明明是電腦在使用他們。
低水平計算機使用者最明顯的特征就是干什么都用鼠標。眼睛盯著屏幕,一只手緩慢地移動著光標,一會兒這里點一下,一會兒那里點一下……
你應該學會多用鍵盤解決問題,幾個快捷鍵就能讓你使用計算機的形象大大改觀。
記得曾經有人看到我在微信聊天頁面直接用“Alt+A”截圖時,他一臉的不可思議,反問道:“你怎么能這樣截圖呢?怎么可以不用鼠標呢?”
當看到我填表時用tab鍵切換到下一個輸入位置時,更是崇拜得一塌糊涂。而當她看到我用“Win+Tab”在不同程序間切換時,她簡直要瘋了。
有的人連編輯Word時“Ctrl+S”保存一下都不會,有的人連切換輸入法都得用鼠標找到圖標點一下。他們不僅僅是浪費時間的問題,他們打斷了自己的思路和工作的流暢性。
使用鍵盤,就相當于是把計算機當成一個人,是你直接對他下命令;而用鼠標,則是把計算機當成一個長滿了按鈕的機器,看半天都不知道點哪。
從心到手,比從心、到手、到眼睛、再到手,要直接得多、快得多。新手點菜得看半天菜單,行家都是直接告訴服務員今天吃什么。
當然,鼠標肯定是有用的,但用鍵盤更高效。所以你的手不要輕易離開鍵盤,你應該把鍵盤當做身體的一部分,做到“人鍵合一”。
(三)
我有個同行朋友,有一次在酒桌上問我:為什么你寫文章那么快?
我很傲嬌地說了句:我是用互聯網思維在寫文章,當然比你們快。
他很好奇,接著問:什么是互聯網思維寫作呢?
我當時喝得有點高了,就沒睬他。
現在,我就把互聯網思維寫作的訣竅告訴大家,核心其實就三條:
第一,一次性打開多個網頁。
寫作需要大量素材,而素材大多要從網上搜集而來。想必你在寫作時,會接連不斷地上網搜索吧。
那么你每次用百度或其他搜索引擎搜索時,會打開多少個網頁呢?
我猜,你最多同時打開3—5個網頁。你知道我同時打開多少個網頁嗎?我同時打開30—50個網頁!(這對電腦的配置要求比較高,否則電腦會很卡)
按照萬維鋼老師在《萬萬沒想到》一書中的說法,在網上搜索內容,看完一篇再看下一篇,一篇篇地讀過去,那是錯誤的做法。效率的首要關鍵是——集中。
所以,你最先要做的,不是仔細讀內容,而是挑選內容。也就是你輸入關鍵詞搜索后,把前面幾頁搜索出的條目從上到下掃一遍,把“看得上眼”的條目點進去。
記住,這一步的關鍵是——只點不讀,直到把所有要去的網站都瀏覽一遍,把所有想看的文章都點過為止。
如果一看某個標題不行就直接跳過,不必浪費時間。用一個相對比較低的門檻快速淘汰絕大部分候選者,這是海選的要點。
集中的最大好處,是讓各條內容在一起互相競爭,就好像排隊選美一樣,好的文章容易突出,不行的文章很難因為偶然因素獲得點擊。
另一個要點是,注意文中的關鍵語句。對文章有自信的作者,會把文中的關鍵語句加粗,或者用其他顏色標出,對這些內容不妨停頓幾秒看一看,會有收獲的。
如果一篇文章從頭到尾掃下來,連個用其他顏色標出的關鍵語句都沒有,別浪費時間了,直接跳過去。
第二,要搜索,不要整理。
寫作內容,很多時候來自于以往已經寫過的東西,特別是政府公文。
當你想把以往寫過的一段內容直接復制過來時,你會怎樣去找到它。我知道有些朋友會憑印象,用眼睛在文件夾中找。
正確的做法是:直接打字搜索,這是比用眼睛瀏覽快得多的做法。
很多人喜歡搞“整理”,把各種文件以及收到的電子郵件等,都分門別類存放,文件夾套著文件夾,左一個標簽右一個標簽,弄得十分復雜,這是把計算機當檔案柜用。
這是在為計算機服務,不是讓計算機為你服務。
要知道,計算機是有智能的,它就好像秘書一樣,你有什么文件直接扔給它,放在一個差不多的地方就可以了,要用的時候直接找它要,而不是你去管理它。
我工作了十幾年,積累了幾千份文檔,我全部塞在一個文件夾里。我從不管理,需要什么,就直接搜。我唯一會花點時間做的,是把文件名寫得盡量詳細一點,這也是為了便于搜索。
第三,把所有東西都放在“云”上。
不知道你有沒有經歷過電腦突然死機,而使半天勞動成果付諸東流的事情。我是絕對不允許這樣的事情發生的。所以,我的所有文檔,不管它重要還是不重要,都隨時同步到云端。
我上班時用Word寫作,也都是在云端操作。哪怕突然停電,云端也會幫我保存工作進度,我換一個有電的地方,就能重啟工作。
你,也應該這樣做。
“云”,是個近十年才有的概念,2010年前我上大學時沒有“云”,我只能把資料存在電子郵件里。現在真的方便多了。
我用的是有道云筆記,每個月付15元。別省這一點點錢,它帶給你的安全和效率是你根本想不到的。
我業余寫公眾號、寫頭條號,也不是另開一個Word寫,而是直接在網站上寫。因為網站就是一朵“云”,它會隨時保存我的寫作成果,再也不用擔心它們會不翼而飛。
我的包里一直放著一個折疊鍵盤,它可以用藍牙與手機相連,出差時不帶電腦,我就用它隨時記錄我的一些奇思妙想。
作為一個現代人,我們應該確保自己在任何一臺電腦上,包括在手機上都能隨時工作。
我關電腦時,每次都是直接按“Alt+F4”,從不用鼠標點來點去。每當旁人看到我這般操作,總像見了鬼一樣——
原來計算機還可以這樣用,原來文章還可以這樣寫!
天是10.24,這個日子在不知不覺中已被人打上“程序員節”標簽。。
1024是計算機二進制的基本單位,它代表著計算機不同于人的“思考方式”,10月24日也成為程序員自發認定的節日。我們對程序員可能會有一些刻板印象,比如愛穿格子襯衫和套頭衫,笑點奇怪,而且脫發早,陪伴電腦比陪伴女朋友的時間更多……總會被吐槽。但千萬不能小覷了這群人,如果把互聯網比如一塊散亂的拼圖板,那么程序員們就是拼湊這些圖塊的人。在數字化程度越來越高的今天,不管從事什么職業,程序員們所具有的計算機思維都值得學習。
計算機思維是人類發明、使用和發展計算機工具所依賴的思維形式。作為計算機行業出身,在學習過程中,領會到計算機思維包含以下幾個要點:
一,明確可計算的邊界
目前,計算機的本質都是『確定型圖靈機』,圖靈為今天的計算機和很長時間以后的未來計算機所能解決的問題,劃了一條不可超越的邊界。
在邊界內做事,也即在可能性內做事,減少不必要的妄動,這是計算機思維的一個大前提。
二,形成量級概念
計算機處理的數據量極大,是大數,處理速度極快,是小數。然而,人天生對極大數和極小數沒有概念。
這時,就需要引入『量級』概念。打個比喻說,量級就是芝麻、橘子、西瓜、大象、大山、地球、太陽、銀河系這些天馬行空,大差別范疇。如果兩種算法在量級上相當,在計算機科學里,就認為它們的優劣基本上是均等的。
量級思維提醒我們要關注核心差別,抓住重點,不要丟了西瓜撿芝麻。
三,選擇可迭代可積累的方式
計算機是由一層層平臺疊加起來的,并且不斷更新,從硬件到軟件,從系統軟件到應用軟件。這種可迭代可積累的模式,使得大家都可以站在前人的肩膀上迅速找到發力點。
可迭代,使用簡單規則演化出復雜效果;可積累,每一次遞進都為后來打基礎。基于此,計算機計算效率實現了摩爾定律式的飛躍。
四,設計可驗證的反饋模式
計算機思維中,編程是與計算機對話的重要語言。編程的一大特點就是可以給出及時精確的操作反饋。
可驗證,可反饋,這是我們了解環境,糾正偏差的前提。驗證的質量,反饋的速度,決定我們行動的有效性和判斷的準確性。
綜上,在邊界內做事,運用量級概念抓住重點,選擇可迭代可積累的資源,并為他人和后來者創造資源,設計可驗證可反饋的模式,讓判斷準確、結果可控,這就是我學到的『計算機思維』。
最后,祝程序員們節日快樂!