虛擬碼轉換為程式語言&Google

黃稟翰
5 min readOct 30, 2017

--

很多同學似乎對把虛擬轉換為實際的程式碼感到苦手,而在不知道問題是什麼的情況下開始google,往往只是在消耗掉自己學習的熱情,在這邊提出一些心得看法。

Q:虛擬碼寫好了,然後呢? (以power of two為例子)

leetcode這邊算是初學者的一個難關,我較常聽到雖然已經看過ruby教學,但是還是不知道怎麼把虛擬碼轉換成實際得code,以下是我自己突破的方式.

重點:用irb 或是最簡單的小程式來驗證語法的使用方式,或是邏輯是不是正確

原因:在語法不熟的狀況,寫下龐大的程式,會讓你不知道是邏輯錯誤,還是語法錯誤,而這種不知道錯在哪的情況,很難google出答案,同時也讓其他人較難幫忙debug.

例子(power of two):虛擬碼可能如下

step1.判斷數字是否≥2大,true的話到step2,false的話到step3

step2.數字≥2就把數字除以2,並回到step1

step3.當數字<2就判斷他是不是等於1 ,是的話就是power of two

開使實作(小白mode)

step1寫法流程-你可能知道有if else可以用,但是不太熟練,這時可以先寫個簡單的小程式驗證

a=8

if a>2

puts “到步驟2”

else

puts “到步驟3”

end

接著跑這個小程式,並修改a的值,確認可以a=8時會印出步驟2 a=7時會到步驟三,來先驗證對if else的用法是不是正確的

至於a%2的用法驗證。則可以用irb驗證

輸入8%2. 結果=>0. 輸入11%2. 結果=>1

這樣一來,對完成step1的功能,就有信心了點了吧~

step2寫法流程-要回到步驟一,可能會想到用迴圈,但是有while跟for兩種,怎麼選?用法也不太熟練怎麼辦呢??一樣先寫個簡單的程式來驗證吧.

a=8

while a≥2

a=a/2

puts a

end

接著跑這個小程式 ,你應該會看到印出 4 , 2 ,1 正確,把a換成7再跑一次

你會看到印出 3,1 好像怪怪的。

在irb輸入. 7/2 發現答案是的確是3(此時再google 較容易知道為什麼,以及解法),google後知道改寫成 a=a/2.0 就可以了.

再跑一次a=7情況 應該可以看到. 3.5, 1.75. 正確

這樣一來是不是對完成步驟2有信心多了

step3寫法流程-if在步驟1練習過了,直接寫寫看吧

a=1.75

if a==1

puts “a是power of two”

else

puts “a不是power of two”

end

跑跑看 當a等於1 會印出 ”a是power of two“,當a=1.75 會印出“a不是power of two”

這樣一來三個步驟都有概念了,試著把它們組合起來,當然你可能中間還會遇到問題,像是step2的while 已經有判斷的功能了,所以step1的if可能不太需要,或是各式各樣的小bug,當你出錯時,你可以跟自己寫的小程式去比較,找到差異點.

至於怎麼把虛擬碼寫的漂亮簡潔,又是另一個大學問了~

有關Google學習

Google超級強大,但是終究只是個工具,所以在google前,搞懂問題是什麼非常重要.

個人心得可以先分類一下問題的複雜度,來看要不要馬上google

  1. 簡單明確的問題 ex.迴圈each用法等等,這種問題你已經大概知道他怎麼使用了,但是文字結構忘記了,這種google一下很容易找到.
  2. 明確但是較複雜的功能 ex. navbar怎麼產生??,你很清楚知道有這個東西,但是完全忘記了怎麼寫,google一下 也很容易找到詳細的教學步驟或影片.
  3. 觀念問題 ex. html的 id&class差別。什麼時候用哪一種?? 或是rails MVC架構是什麼,這種類型問題 google大部分可以找到答案,但是需要花時間理解消化而且要想辦法找到適合自己的資料,會有點花時間,現在可以偷懶直接問助教比較快。XD(要盡量描述清楚)
  4. 尋找更好工具或解法 ex 我想要讓圖片在滑鼠滑過時有特別效果,有適合的方法嗎???,這種問題要看運氣,如果很熱門可能蠻好搜的,如果冷門,往往不太好找,這時尋求助教or其他同學比較方便.(要盡量描述清楚)
  5. 不知道問題出在哪(解決這種問題才是成長的關鍵),這種情況其實很難從線上發問得到解答,就算把code丟出去,有人幫忙解決了問題,其實收穫也不大.個人建議此時應該試著自己去思考問題出在哪,自己嘗試debug,讓你不再是”不知道問題出在哪”後,再去請教人,比較是個有用得學習.如果思考後還是不知道方向,此時可以試著參加一些線下的讀書會去跟人討論,來找到思考的盲點.試著把嘗試思考理解問題的過程描述清楚,可以更讓人了解你卡住的地方.

對Alpha camp教材看法:

Alpha camp目標是在幾個月內完成全端教學的一個學程,可以想見,課程範圍一定很廣,當然也就很難手把手的一步一步帶每個人學習,尤其是網路課程更難做到這點.

個人覺得對0經驗的人來說,Ruby語言部分的教材安排是有點差,進度太快,雖然我已經在啟航前先完成了ruby基本語法的練習,還是很難跟上進度.如果找不到實力不錯的同學幫忙慢慢建立觀念,真的建議先跳過太難得習題.

html部分算是中規中矩,不算特別突出的教學,唯一亮點算是介紹了目前業界常用的bootstrap這些資源吧,不過還是要自己找資源才夠用.

github這就是一個工具,現在只是簡單帶過如何使用,之後有實例應該才會了解好用的地方,個人覺得不用把時間耗在這邊.

rails教程:這是我最喜歡的教學部份,在啟航前,我曾在codecamy 練習,並嘗試看過rails聖經,以及某一個教學網站,但是我都無法學會,主要是內容太多太散,很難掌握到rails的觀念,在這個地方Alpha camp的教學還蠻讓我驚豔的(因為我學會啦!!!)

我覺得alpha camp教材對架構網站整個學習路線的安排其實蠻不錯的,有一種我知道我為什麼要學這個東西的優點.不過缺點應該是很多詳細的細節需要自己努力.進度較落後的同學焦慮是正常 ,也許會有點對Alpha camp的不信任,因為你們現在所看到的教材的確比較差,但是越往後學,會漸漸發現這份教材其實是不錯的,先往後學給 Alpha camp一個機會吧~.

--

--