什麼是程式設計?大道之行也,“程式設計”為公
“程式設計”意識
“程式設計”是什麼?這個問題可能除了學過計算機相關專業的人,其他各行各業的人都有對這個問題不同程度的疑惑。
我第一次聽“程式設計”這兩個詞還是在我上了大學之後。我出生在我國大西北(青海)的某個小鄉村,小學是在我們縣城的一個小鎮上的,初中、高中都是在縣城裡的學校上的。爸爸是名教師,媽媽經營商店,家境不算好,也不算很差。
從小我也接觸過電腦,雖然接觸的不多,都是在爸爸辦公室的電腦上玩的,也就玩玩蜘蛛紙牌、青蛙吃蛋等遊戲,然後就是畫畫圖啥的。這種對電腦的正常操作說實話,跟“程式設計”扯不上啥邊,因為當時在我身邊使用電腦的任何人,包括我爸都沒有“程式設計”的任何意識。
我們家族體系也很龐大,從小到大,我認識的各種“自家人”特別多,但是整個家族中,大多數族人都是務農為主的,我爸算是個知識分子,然後再到我這一輩,考上大學的屈指可數,我雖不才,跨了個二本學院,但也至少是上了一次大學。
高考分數公佈那天,得知我的分數超了二本線兩分,膽戰心驚的我心中的石頭終於落下了。報什麼專業其實我當時都不在乎,因為我也不知道我喜歡什麼,我對所謂的“大學”也沒有什麼概念,反正就是“愛啥啥”的態度,我只在乎我過二本線了,我就是個俗人。
因為分數確實不高,專業也確實難選,我爸硬著頭皮給我選。我爸也是絕了,照著醫生、計算機、師範等專業一陣狂選,最後乾脆一股腦全給寫上去了,考慮的還挺周全的,怕本科錄取不了我,還備選了幾個專科專業。
我很清楚的記得我爸給我選的第一志願是“青海民族大學(原青海民院)”,我雖然對大學沒什麼概念,但聽別人說過這個學院不是很好(我當時是不想在青海上大學,也就跟著自認為很爛,潛意識裡就是這個字)。同時我也聽說,就我這個分數,如果連青海民院都不錄取,就基本沒得錄取了。
當時我心裡還是很慌的,既不想被青海民院錄取,也怕連青海民院都不錄取。感覺這話說的很矛盾,但確實,當時我也是這麼矛盾。
老天開眼,陰差陽錯之下,我被河南南陽理工學院軟體學院錄取了。被這學院錄取,我感覺我就是天選之子。我說了我是個俗人,俗人也是有傻福的。當我被錄取的第一天,我看我爸並沒有高興的樣子,我就知道事情並不簡單,果然,他說他當時忘了看學費多少,要是知道學費那麼高,肯定不給我報了。我暗自偷笑,心裡想著幸好你沒看,不然我豈不是涼涼了。
嗯,我是個俗人,俗人不打誑語,後來進了大學我才知道,我被這個學院錄取還真的是個意外,是因為這個學院當時在青海招人沒招夠,我被撿漏了。沒招夠的原因我也知道了,也很俗,學院招的分數高,青海的高考同胞們都很慫,怕自己錄不上,壓根沒敢報,然後像我爸這樣瞎報的估計也沒幾個,所以我就理所當然的成了南工人。
這是啥?破格選拔呀,多榮幸的事,更刺激的是,我看到學院的分數榜上,我是全院倒數第一,這是多大的殊榮啊,以前我都沒敢考過班級倒一,怕被老爸揍,更別說全院倒一了,當著全國各地同學的面,我很自豪的自我介紹說:大家好,我是我們院倒一的同學,希望今後多多關照,然後掌聲雷動。媽耶,我又開始膨脹了。
以上內容跟“程式設計”無關,我之所以提,只是想強調一下,其實像在我們大西北,發展情況跟北上廣這些大城市沒法比,各種“意識”也是差了不是一星半點。我現在從事的是少兒程式設計教育,現在的小孩三歲就開始學“程式設計”了,而我呢?真的是到大學才聽過“程式設計”這倆字,這就是“意識”,我且不說從小接觸“程式設計”和沒接觸過“程式設計”的區別,僅僅從這個時間線上,就能看出發達城市和我們這些小山村小縣城的教育差別了。
“程式設計”思維
接著說我上大學之後的事吧,我報的是軟體工程專業,大一我學的專業課是 C 語言,還有 C++ , 當時因為我是第一次接觸這些新鮮的程式語言,所以消化的很慢,整個大一階段我覺得我對“程式設計”的理解就是在電腦上敲程式碼,僅此而已。因為我大一第二學期做的一個課程設計就是用 C++ 做的學生管理系統,別誤解,僅僅就是在編譯器編譯後彈出的黑框上做一些增刪改查操作而已,當時還感覺挺牛的,現在想想真的挺 low 的。
上面這段話還有下面要說的某幾句話可能非計算機專業的讀者讀起來會有迷惑的詞彙或語句,不過沒關係,您可以選擇跳過,或者掃一眼,稍微留個印象也行,並不影響後面的閱讀,後面我會做出解釋的。
大二階段,我學的專業課是 Java ,Java 這個程式語言是我學的最好,也是最輕鬆的程式語言(純屬自我感覺哈)。可能是學了 Java ,我才真正對“程式設計”有了些許自己的理解,我寫了很多技術方面的部落格,這些部落格都是按我自己對 Java 的理解和思考去寫的,我說了我是個俗人,所以我想要的都是通俗易懂的,我想寫的也是通俗易懂的。
嗯,我是個俗人,所以我很反感大學的一些老師,在對大一剛來時一張白紙、完全無知的我淨灌輸一些高逼格的官方詞彙,讓我在所謂的“程式設計”的雲裡霧裡飄了一年多。
處處陰霾更嚴冬,風光未與想中同。
撥雲見日終有時,一碧萬頃醉晴空。
終於有一天,我撥雲見日般明白了“程式設計”是咋回事,不就那麼回事嘛,飄了一年多,我不知道該說是老師的問題還是我理解慢的問題。但是換個角度思考,要是讓我去講,對於壓根就沒接觸過“程式設計”或沒接觸過電腦的人,我壓根就不會去提那些高逼格的詞彙,我就用大白話講,先明白“程式設計”到底是個啥玩意,等有自己的理解之後,那些所謂的高逼格的詞彙其實並沒有什麼逼格,只是人家起了一個名字而已。
總之我提倡的是,你不論做什麼或者學什麼,一定要明明白白,清清楚楚,如果是一頭霧水,那一定是哪個環節出差錯了,也許是你自身的原因,也可能是別的原因,你要學會思考。
要說大二是在學 Java 的話,那大三就是在練 Java ,自己做了一些小專案,具體什麼就不提了,說主題。這個時候我對“程式設計”的理解就是可以做應用層,說白了就是可以開發一些 APP 、小程式 、 網站等,能做很多功能性的軟體。
再後來,我對“程式設計”的理解就是可以做底層,就是針對硬體方面的開發,例如作業系統相關的程式、驅動程式等。但是做底層開發需要一定的技術功底,計算機組成原理、作業系統、計算機網路等都是必學的,這個也不在這多說了。
現在,我從事的是少兒程式設計教育行業,是一名少兒程式設計老師。在這我先不觸碰“少兒有沒有必要學程式設計”這個話題。我只針對“什麼是程式設計”這個話題展開。前前後後,大差不差的,我接觸少兒程式設計也要半年時間了,在這我也不想說有些朋友問的“怎麼不去搞開發”這個問題,只是每個人想法不同而已。
我做少兒程式設計之後,對“程式設計”有了新的理解,我從來一直都很在意“因果”關係,我相信“任何物體都有存在的意義”,對於“程式設計”,我覺得歸根結底,其核心在於“程式設計思維”。
“程式設計思維”是什麼?猛一看,感覺很抽象,其實可以很簡單的解釋:“程式設計思維”就是解決實際問題的方法,一種如何分析問題、拆解問題、思考和解決問題的思想。
舉個生活中最常見也最簡單的例子吧:
你會做飯嗎?(我會(偷笑表情),現在哪個男孩不會做飯呀是吧)
你做飯的時候是否要考慮以下這些問題:
- 吃米還是吃麵?
- 幾個人吃?
- 炒不炒菜?
- 幾個熱菜幾個冷盤?
- 放什麼調料?
- 放多少調料? ···
那以上這些分析的過程就叫“程式設計思維”,就是用來解決“做飯”這個問題的方法。
什麼是“程式設計”
那什麼是“程式設計”呢?
原諒我把對“程式設計”的解釋放到了最後,重頭戲嘛,還是壓軸比較好,如果你是誠心來了解“程式設計”的,那前面的這些資訊對你瞭解“程式設計”有著莫大的好處。
我接著用“做飯”的問題來講解“程式設計”。
會做飯的你天天做飯,也是煩了,想偷個懶。
假如你家裡現在有一個機器人,這個機器人除了沒“腦子”之外,別的像胳膊、腿、手等鐵器官都齊全。如果你要是有能力把你“做飯”的技能教給機器人,那你無異於收了個很勤快的徒弟。
怎麼教?
你說“人話”機器人聽不懂(這個機器人不是智慧的那種哈,是真的聽不懂“人話”的那種,可別給我在這鑽牛角尖),這個機器人只能聽懂“程式語言”(就跟漢語字樣一樣,就是個名字而已,別看到這個詞就覺得好難啊,別太入戲,就是機器人能聽懂的語言的名字,僅此而已)。
那你要教機器人,首先你要考慮的是如何跟機器人溝通的問題,別考慮啦,就像跟老外溝通要學英語一樣,你先學學“程式語言”吧,學會了,就能教了。至於“程式語言”是什麼?要怎麼學的問題不是我本篇文章的重點,也不是你沒了解“程式設計”之前要了解的重點,僅僅把“程式語言”當成個像“漢語”、“英語”一樣的名字就 OK 了。
再假如此時的你已經學會了“程式語言”,那就到考驗你“會不會教”的時候了,再強調一次,機器人是“沒腦子”的,所以你在教的時候,大到每個流程框架(先幹什麼,後幹什麼,最後幹什麼),小到每個細節(倒幾碗水,放幾勺鹽,煮多長時間),所有你分析過的問題,你都要清晰明確的告訴機器人,如果漏過其中的任何一個環節,那這機器人做出的飯的味道就不一定是你想要的那個味的,可能你想要老壇酸菜味的,由於你忘了告訴機器人這其中的細節(放多少酸菜),機器人給你做成了康師傅牛肉味的也說不準,總之就是出問題了,專業詞彙叫做“出BUG”了。
再再假如你是個“老司機”(就“做飯”和“教做飯”都很熟,很有經驗的意思),你把每一個細節,每一個流程都教給了機器人,然後這個機器人最終做出了“你想要的那個味”的飯,那這個教機器人做飯然後讓機器人把飯做出來的過程就叫做“程式設計”。
什麼是“程式設計”?這就是程式設計,我先是用“做飯”的例子解說的程式設計,我想這個大家看到這都能理解了,然後我們一起給程式設計“上價值”,畢竟大白話還是大白話,總是比不了“官方話語”有權威,我們能用大白話說出來,說明已經對這個問題理解了,那再看官方的,也不過是“步步高點讀機—— So easy”。
官方版“什麼是程式設計”?
程式設計就是人利用計算機程式語言,通過有目的的編排指令,最終讓計算機完成指定任務的過程。
想通過程式設計解決問題,首先得分析所要解決的問題,然後將問題拆解成獨立的小問題單元,並保證這些小問題單元必須是可以通過程式設計解決的,最後再將這些小問題整合起來,讓計算機逐個求解,得到我們想要的結果。
本篇文章以上內容共計 3500 字,是我工作之餘花費一週時間思考、積累、總結而來,裡面的一些“想法”不是你想寫就能寫出來的,也是經過分析、拆解,運用“程式設計思維”一步步整合而來,一篇文章包含了我對“程式設計”的思考、我教“程式設計”的教學經歷和經驗、我對“程式設計”的期待,可以說是篇有感情的文章,我寫完後我的心的沸騰的,澎湃的,之所以有這樣的反應,是因為我覺得值得,我付出了,我分享了,我收穫了,既然選擇了“教育”,那就一定要做到“用心”,不論是對自己,還是對孩子、對家長、對讀者、對所有熱愛生活,真誠友好的人,最後的最後,我想說的就是“越懂得分享,你的價值增值越大”。
- END -