如何鍛煉編程思維?
我對于編程這項技能一直都很向往。我經常在做到一些繁瑣的重復型的工作的時候,想如果有一個小程序能幫我做一些簡單的重復工作就好了,這個時候往往就覺得自己如果會編程的話,就能幫助自己更好的工作了。但是隔行如隔山啊,像我這種美術出身的人來說,編程簡直就像另一個世界的語言,完全不能理解??戳诉@本《寫給所有人的編程思維》之后,我覺得我和編程的世界好像拉近了一點。
這本書的書名叫做《寫給所有人的編程思維》,顧名思義,它非常的通俗簡單,可以讓所有的人都懂。所有人是什么概念,我想大約是從兒童到老人都可以吧。
這本書的封面上就把這本書的主旨給寫的非常清楚了。什么是編程思維呢?。就是框架設計思維--發(fā)現(xiàn)問題,問題拆解思維--思考問題,函數(shù)思維--解決問題。如果用“框架設計思維,拆解思維和函數(shù)思維”,大家一定都覺得很難。但是如果用“發(fā)現(xiàn)問題,思考問題,解決問題”,大家都會發(fā)現(xiàn),這不就是我平常都在做的事情嗎?
比爾蓋茨說過:學習編程可以鍛煉你的思維,幫助你更好地思考,創(chuàng)建一種我認為在各領域都非常有用的思維方式。
沒錯,感覺這本書的作者的初衷就是希望大家都能從日常生活中發(fā)現(xiàn)自己的編程思維,進而對編程這門課程有一個非常系統(tǒng)的了解。
一,
這本書的開始第1章,介紹了一下計算機的特征,計算機的分類。計算機并不是我們大家所認為的就只有電腦,其實很多的我們身邊的電器現(xiàn)在也都算是計算機的一部分,甚至我們看的電子書也算是一種計算機。第1章還介紹了編程與計算機的歷史,幫我們梳理了一下計算機從最原始的狀態(tài)到現(xiàn)在遍布我們身邊這段時間發(fā)生了怎么樣的變遷。
二,
第2章就直接跳到了解決問題,這里就有了一個疑問?!鞍l(fā)現(xiàn)問題”這一章在哪里呢?我思考了一下,發(fā)現(xiàn)“發(fā)現(xiàn)問題”這個根本就不用專門的講,因為我們平時身邊都是在不停的產生問題。
如何用編程的思維來解決問題呢?這里面講的其實非常的詳細,大致上來說就是,當碰到問題的時候,我們應該怎么解決?
第一, 弄清楚我們碰到的是什么樣的問題。
第二, 思考問題是否有不同的解決方法?
第三, 我們驗證我們想到的這些解決方法是不是可行?
聽起來是不是很熟悉,這不就是我們平時碰到問題解決問題的一個思路嗎?其實人的大腦就是一臺特別精密的天然計算機,所以計算機可以說是在模仿人的一個大腦,但是并不及大腦那么精細。所以當人們給電腦下指令的時候,就需要把它拆解成非常非常精細的一步一步的指令。
比如說疊被子這個指令就需要告訴機器人,
——先查看羽絨被,被子拉平了嗎?沒有的話就拉平。
——再看毯子,毯子拉平了嗎?沒有的話就拉平毯子
——在看枕頭,枕頭放在毯子上了嗎?沒有的話就把枕頭放在毯子上
——然后才能結束。
這個看起來是不是覺得計算機很傻呢?嗯,其實就是如此,聰明的還是編程的程序員啊。
看到這里的時候才發(fā)現(xiàn),作者其實并不是告訴你該如何編程,而是告訴你,我們做任何事情都要有一個編程思維,編程思維是什么思維呢?就是把各個方面都想到,然后做到最完善最圓滿最不會出錯的那一個行動。
麥肯錫公司的第一個女咨詢顧問芭芭拉·民托(Barbara Minto)曾提出著名的思考方式——“金字塔原理(The Minto Pyramid Principle)”。
其中,提到了一個重要原則:MECE,即Mutually Exclusive Collectively。Exhaustive,中文意思是“相互獨立,完全窮盡”。也就是,將影響一個重大議題的原因,不重疊、不遺漏地拆分,藉此有效把握問題核心,找到解決方案。
當遇到簡單問題的時候,可能只需要幾個步驟就可以圓滿的解決一件事情。但如果遇到一個很復雜的問題的時候,我們該如何用編程思維來解決呢?這本書里面也給了一個完美的答案,就是把這個復雜的問題拆成無數(shù)個,或者說若干個簡單的小問題,然后一步一步的來解決,這個是不是就跟王首富說的,先給自己定一個小目標是一個意思呢?
當我們碰到一個很難的問題的時候,我想大部分人都可能會覺得非常的棘手,一部分人就會馬上開始做,其實辯證思維告訴我們最正確的方法應該是先把這個問題拆解了,拆解成一部分,然后我們立刻就能知道這些問題的難點在哪里。我們需要攻克的方向在哪里?并且這個看起來很復雜的問題拆解完之后就會變成無數(shù)個簡單的小問題,這樣是不是對人的壓力更小一些呢?
作者還提醒我們解決這些問題的時候,要關注那些沒有給出的條件和信息,因為答案會藏在我們看不見的地方。有些時候這些問題可能會受到約束,我們記得一定要在這些約束條件之下做。
三,
第3步學習編程語言。這一部分其實可能是我看的最累的一部分,因為我實在是跟不上理科生的這個思維。
作者先介紹了各種編程語言,世界上有那么多的編程語言,人不可能全部都學會。作者把一些經常用的程序語言都做了一個普及性的了解,讓我們知道了原來這些編程語言的原理是什么,該如何的運用。作者在其中還配套了有趣的小游戲和小小的插畫,讓看的人更能簡單易懂的了解作者到底在說什么。當你的編程語言編程思維都已經準備好的時候,剩下的就是不停的練習了。
這本《寫給所有人的編程思維》,看完之后給我最大的感受并不是說如何學習編程,而是說原來我們生活中遇到的所有的事情都可以用編程思維來解決,讓問題分解簡化,可以大大的減少我們對于碰到問題時候的焦慮,這不是比學會編程更大的收獲嗎?
正如美國麻省理工學院的計算機教授瑞斯尼克所說的:“在學編程的過程中教會孩子們如何將復雜的想法分解成幾個部分,不管孩子以后做什么,都可以用的到,這才是學編程的意義所在。”