最近很多人私訊我他們自學程式遇到的瓶頸,有些人覺得自己學了很久,看範例或別人的解答可以看懂,但要自己面對問題並用程式來解決,卻無從下手。
想起自己從自學程式到創業這段過程,也遇過同樣的問題,那時詢問過許多高手的意見,他們會說【程式語言只是工具,更重要的是程式邏輯】,學會了邏輯才做得到自己用程式解決問題。我再追問程式邏輯是甚麼?高手給我的回答【程式邏輯就是解決問題的那個算法,只是用程式語言實現出來】。
當時聽到只覺得是在講幹話,現在回想終於懂這句話的涵義。因為這個邏輯是抽象的概念,不像程式語言所見即所得,很難描述到底怎樣能學會所謂的邏輯。
不過,學會邏輯其實是有步驟可循的,而且有個更貼切的名詞【運算思維Computational Thinking,簡稱CT】,美國知名電腦科學家Jeannette M. Wing,曾經寫了一篇很有名的文章:Computational thinking and thinking about computing,詳細敘述了何為運算思維。而 Google 針對CT提出了四個核心能力:
1.拆解: 將一個任務或問題拆解成數個步驟或部分。
2.找出規律: 預測問題的規律,並找出模式做測試。
3.歸納與抽象化: 找出最主要導致此模式的原則或因素。
4.設計演算法: 設計出能夠解決類似問題並且能夠被重複執行的指令流程。
以計算等差級數的程式為例,設計一個讓使用者輸入首項、末項、公差,最後計算出這個等差數列的總和
1.如何拆解?
這個題目構造很簡單,輸入三個數字,然後由這些數字計算出總和
所以整個題目可拆解成【輸入數字組】、【計算總和】
2.如何找出規律?
這裡因為輸入數字組是使用者隨機填寫的,所以只需要去找【計算總合】的規律,也就是假定幾個數字組去預測總和結果是多少
例如:
首項=1,末項=11,公差=2,這樣等差數列會是1、3、5、7、9、11,總和為36。
首項=2,末項=32,公差=3,這樣等差數列會是2、5、8、...、32,總和為187。
3.如何歸納與抽象化?
就是不帶入值,而是把首項、末項、公差當作變數來算出總合
第1項=首項
第2項=首項+公差
第3項=第二項+公差
...
最後1項=末項
所以總和=首項+(首項+公差)+(第二項+公差)+...+末項
4.如何設計演算法?
以【總和=首項+(首項+公差)+(第二項+公差)+...+末項】來思考怎麼轉化成重複執行的指令流程,也就是演算法,這時候才開始寫程式碼
首先,需要使用者輸入首項、末項、公差,把這三個存成變數
再來,用迴圈來完成重複執行加總的動作,迴圈初始值=首項,迴圈執行判斷則是=末項,迴圈遞增=公差
這樣迴圈的index就會產生我們想要的等差數列,第1圈index=首項,第2圈index=首項加公差,第3圈index=首項加2*公差=第二項+公差...最後1圈index=末項
最後只需要初始值設零的暫存器隨著迴圈每次加總index就可以得到總和
雖然這個題目用這樣的方式去解題變得有點麻煩,可我的用意在於解釋運算思維的步驟而不是解題,希望說大家之後遇到更難的問題能更有概念與方向去分析並解決
【免費1對1線上諮詢】
我正在籌備【程式學習的精髓:運算思維】的課程,如果對學習感到困難或對課程感興趣,我提供免費1對1線上諮詢
我除了提供個人免費諮詢服務,也會將你遇到的問題融入我的課程製作
所以現在預約諮詢的朋友,之後我的課程做出來,你對課程有興趣的話,我會給予最優惠的早鳥價作為協助課程製作的回饋
請點連結選擇你方便的時間我們線上聊聊,現在預約還可以得到一份【自學程式非懂不可】簡報喔!