跳至主內容

學好手勢 == 學好Coding

學好手勢 == 學好Coding
Gordon Lau 劉偉中
2019-08-21

編程老手與編程新手在工作時,不論效率、思維方向、甚至打字速度都截然不同,不過在學習編程的道路上,有一個方面常被忽略,就是編程手勢(Coding Practice),有豐富實戰經驗的工程師,通常培養了良好的編程手勢,工作時,自然錯誤較少,也因為除錯得少,省略了不少寶貴的時間,整體結果也蔚然不同。

也許正是編程初學者的你會說:「我經驗尚淺,就算現在不專誠培養編程手勢,以後還有很多時間可以改善啊!」 其實Coding Practice這個詞語正正解釋了這個想法的荒謬: 不妨細想,每一種運動,都必要學習正確的姿勢:要學籃球,運球與射籃的技術不可不學;學打網球,正反手握拍也只是網球ABC。不學正確姿勢,就會將錯誤累積,一開頭可能還好,及至後來,要將錯誤改正過來,就會難過登天。

一個經典例子,大家知道打字的正確手勢嗎?打字的正確手勢很奇怪,要用到平常不多用的手指,例如尾指或無名指,如果從未學過正確姿勢的人,可以肯定,幾乎百分百是以錯誤手勢打字

正確打字姿勢對照圖

Source

不過人是很奇怪的生物,不論手勢多麼奇怪,久而久之就自然習慣。就算以「螳螂拳」打字的人,還是打得一樣痛快。

古怪打字姿勢示意圖

Source

可是以古怪手勢的人,很快會遇到打字上速度及準繩度的樽頸。也就是打字的速度及準繩度,難以比上正統學習正確手勢Touch Typing的人。 因為手勢之所以為正確,是由於在漫長的變化中千錘百煉,才最終成為「正統」。慣用「螳螂拳」的人,要學習正確手勢,不只要學習(learn)正確手勢,困難的是刻意忘記(unlearn)錯誤手勢,人是習慣的動物,養成壞習慣容易; 改正壞習慣困難

編程手勢

日常生活中都有各式各樣要養成良好習慣的事情,以軟件開發之複雜,就更講究手勢的重要性。 舉一簡單例子,以下的一段代碼,寫得好嗎?

/*第一段*/
function sum(a){
    var total = 0;
    for(var i = 0 ; i< a.length ; i++){
        total = i + total;
    }
    return total;
}

這是很簡單的一個函數,將一個array裏面的內容通通相加,然後傳回總數。這段代碼十分正確,沒有任何錯誤,但在手勢上卻不太好。

以下是一個較好的寫法:

/*第二段*/
function sum(array){
    let total  = 0;
    for(let i = 0; i< a.length ; i++){
        total = i +total;
    }
    return total;
}

第二段代碼手勢較好,原因是第二段代碼運用了let關鍵字,let比起var有著更合理的Scope Rule,也避免了錯誤的發生。同時array參數a也改成了array,也較容易閱讀,避免誤判的可能性。 可以再改善嗎? 當然可以,以下一段又比上段要好:

/*第三段*/
function sum(array){
    let total = 0;
    for(let num of a){
        total += num;
    }
    return total;
}

第三段利用了for-of-loop ,省卻了較為繁瑣的let i = 0 ; i <a.length ; i++,中間total = i + total也變成了total += num,也是簡潔準確的寫法。

到了第三段,已算是很不錯的寫法,當然有經驗的軟件工程師其實會像下邊這樣寫。

/*第四段*/
const sum = array=>array.reduce((acc,num)=>acc+num)

第四段代碼運用了reduce 方法,非常適合用於相加這類aggregation operation。同時又用了箭頭函數(Arrow function)的寫法,也就是將 完整的函數寫法

function sum(array){
    /*For-Loop*/
}

簡化成

const sum = array=>/*Reduce method*/

隨著工程師經驗之累積,就愈能寫出無歧義及簡潔之代碼。現在試比較最後第四段的結果,與第一段是不是有很大分別呢?一個簡單的相加函數,手勢之高下都有如此大的分別,一個完整軟件,就更高下立見了。

留言

閱讀更多

新年願望:學寫程式懶人包

新年願望:學寫程式懶人包

新年願望:學寫程式懶人包
Gordon Lau 劉偉中
2019-01-02

剛剛過了2019的新年,大家許下了甚麼新年願望呢?也許大家會希望在2019年學會寫程式,突破自己


專家級新手

專家級新手

專家級新手
Gordon Lau 劉偉中
2019-03-19

今次要介紹的,是一個非常常見之現象,不論你是學寫程式、學做甜品、學寫文章,又或是練習球技、體能訓練等,都會經常窺見其身影。 想像一下:你的朋友問你:「你的駕駛技巧好嗎?比較起其他司機來說如何?」如果你本身有駕駛執照,但是不常常駕車,大概你會回答:「中規中矩吧,平均水平」;經常駕駛的人,因為經驗豐富,會覺得自己是中上甚至良好之水平。然而,這個想法人人都有,卻與現實完全相悖:因為任何羣體之中,必然有一半個體在中位數(Median)以下,而一項經典的調查發現,八成的司機都認為自己的駕駛水平在平均之上,這明顯代表在駕駛技術的世界上,大部份人都有自視過高的問題,也代表其實大多數司機,無法準確判斷駕駛技術之高下。


軟件工程師成長手冊

軟件工程師成長手冊

軟件工程師成長手冊
Gordon Lau 劉偉中
2019-04-29

筆者經常都强調軟件工程師有高下之分,不論技術或是解難能力都可以隨時日改善,亦曾大力鞭撻專家級初學者的無知,對軟件開發造成破壞。 初出茅蘆的軟件工程師及編程初學者想要改善自己技術,在茁壯成長的話,對自己技術層面有一個準確評價是至關重要,以免墮入「識少少,扮代表」的認知偏差。


索取課程大綱
提交後, 請檢查你的電郵
hello@tecky.iot.me/tecky_hub+852 9725 6400
green_org
商界展關懷 2019-2022
英國頒證機構 TQUK 認可中心
aws_partner
薯片叔叔共創社 重塑教育挑戰大獎
B Corp™ 認證共益企業
無障礙網頁內容指引 (WCAG) 2.1 AA 級
香港無障礙網頁 金獎
© 2024 Tecky Academy Limited