點學寫靚PROGRAM

315 回覆
17 Like 1 Dislike
2017-04-11 23:33:17

switch本質上同if無分別,寫switch,extends都係要加幾行,有咩分別,if就難maintain,switch就會易?咁Python咪好難maintain?
用dictionary store起個state,如果係range check又點做?

係架,如果你覺得不寫if練功法太容易,你可以限制埋自己寫switch
range check唔係重點,用if之前讓自己三思,令自己討厭if
寧願寫for(){ if() } 都唔畀自己寫if(){}else if(){}else if(){}
寧願寫switch case都唔寫if

多數program switch case有個特性, 就係只做最簡單分類,基本上做logic flow既機會比較多, 我正正就係唔想係logic flow畀if出場
2017-04-12 08:34:56
依家學緊C++,比起上年學Java好啲,因為開始有啲概念,但好多時自己主動打,但唔識打一個完整嘅程式,自己覺得好講靈感,諗唔到就唔識打。
有時自己去睇人哋嘅程式會睇唔明,好多時真心好灰,如果想提升自己寫程式嘅能力係咪真係要打多啲,有冇再多啲途徑可以加強?



我覺得學programming嘢要有所提升, 自己打多啲係必需, 至於睇人程式嘅嘢, 就真係睇自身悟性同程度學到邊(見都未見過正常一定唔明; 學過都唔明就係証明你仲未攪清楚有關concept; 已經明晒有關concept但都係睇唔明就只能怪你悟性太低/唔識變通!).

BTW, 學嘢最好由淺入深咁做, 唔好東一忽西一忽咁學, 亦唔好諗住啲嘢可以一氣呵成, 一蹴而就, 要浸架! 我建議Learning by Level of Concepts and Skills(e.g. In FL, we have A Standardized Ladder to follow: http://lambdaconf.us/downloads/documents/lambdaconf_slfp.pdf ) 每上一層前都要先打好前一層嘅底, 唔好亂跳!

仲有, 最好Find a Good Mentor(e.g. I follow Dr. Axel Rauschmayer's blog to learn JS), 目的係好consistently咁學下啲勁人嘅good/best practice.

Hope the above advice helps!


多謝巴打覆得咁詳細,唔該哂巴打
2017-04-12 08:51:46

switch本質上同if無分別,寫switch,extends都係要加幾行,有咩分別,if就難maintain,switch就會易?咁Python咪好難maintain?
用dictionary store起個state,如果係range check又點做?

係架,如果你覺得不寫if練功法太容易,你可以限制埋自己寫switch
range check唔係重點,用if之前讓自己三思,令自己討厭if
寧願寫for(){ if() } 都唔畀自己寫if(){}else if(){}else if(){}
寧願寫switch case都唔寫if

多數program switch case有個特性, 就係只做最簡單分類,基本上做logic flow既機會比較多, 我正正就係唔想係logic flow畀if出場


巴打想法認真幾好,又可以俾自己用下for,while個啲,唔會一味用死if,搞到for,while個啲用得唔熟,我自己就用太多if同for,搞到while,do while唔多識用,多得巴打提醒下,之後自己會注意多啲
2017-04-12 08:56:07

switch本質上同if無分別,寫switch,extends都係要加幾行,有咩分別,if就難maintain,switch就會易?咁Python咪好難maintain?
用dictionary store起個state,如果係range check又點做?

係架,如果你覺得不寫if練功法太容易,你可以限制埋自己寫switch
range check唔係重點,用if之前讓自己三思,令自己討厭if
寧願寫for(){ if() } 都唔畀自己寫if(){}else if(){}else if(){}
寧願寫switch case都唔寫if

多數program switch case有個特性, 就係只做最簡單分類,基本上做logic flow既機會比較多, 我正正就係唔想係logic flow畀if出場


巴打想法認真幾好,又可以俾自己用下for,while個啲,唔會一味用死if,搞到for,while個啲用得唔熟,我自己就用太多if同for,搞到while,do while唔多識用,多得巴打提醒下,之後自己會注意多啲


用 R 嘅lapply 去重新思考應該點 loop
2017-04-12 09:36:54
好掛住高登個 code4food
可以跟佢學到好多嘢
聽講佢最近掛住溝女絕跡軟件台


有咁嘅事?唔怪之得。
2017-04-12 09:38:57
一開始寫就用單一目標黎寫
熟左就開始為萬用function黎寫
慢慢就靚架啦
2017-04-12 09:40:08
用 linux 同 open source software

無用嘅。如果用Linux同open source就會寫靚PROGRAM話。咁你不如實際啲同我地討論下design pattern,programming language paradigm又或者algorithms咁。
2017-04-12 10:05:22
去返個實在既Level
Design pattern睇情況
好多系統唔係咁複雜
configurable既嘢都係靠MVC+Database已經夠
最多係得閒有人refactor咁

反而Metaprogramming同DSL會更加幫倒你
不過易唔易學睇你用咩tools (languages)
2017-04-12 10:22:59
依家學緊C++,比起上年學Java好啲,因為開始有啲概念,但好多時自己主動打,但唔識打一個完整嘅程式,自己覺得好講靈感,諗唔到就唔識打。
有時自己去睇人哋嘅程式會睇唔明,好多時真心好灰,如果想提升自己寫程式嘅能力係咪真係要打多啲,有冇再多啲途徑可以加強?



我覺得學programming嘢要有所提升, 自己打多啲係必需, 至於睇人程式嘅嘢, 就真係睇自身悟性同程度學到邊(見都未見過正常一定唔明; 學過都唔明就係証明你仲未攪清楚有關concept; 已經明晒有關concept但都係睇唔明就只能怪你悟性太低/唔識變通!).

BTW, 學嘢最好由淺入深咁做, 唔好東一忽西一忽咁學, 亦唔好諗住啲嘢可以一氣呵成, 一蹴而就, 要浸架! 我建議Learning by Level of Concepts and Skills(e.g. In FL, we have A Standardized Ladder to follow: http://lambdaconf.us/downloads/documents/lambdaconf_slfp.pdf ) 每上一層前都要先打好前一層嘅底, 唔好亂跳!

仲有, 最好Find a Good Mentor(e.g. I follow Dr. Axel Rauschmayer's blog to learn JS), 目的係好consistently咁學下啲勁人嘅good/best practice.

Hope the above advice helps!

至於學嘢既策略,就穩陣既career oriented梗係學集中啲好
但都有個傻既鬼佬咁講過You can't connect the dots looking forward; you can only connect them looking backwards. So you have to trust that the dots will somehow connect in your future.
佢細個學對佢返工完全無用既Typography,大過咗超級有用

如果能夠搵個Good Mentor幫你做Code Review
個進步會十分大
不過呢啲真係要搵份好工先有可能
2017-04-12 11:00:08
用 linux 同 open source software

無用嘅。如果用Linux同open source就會寫靚PROGRAM話。咁你不如實際啲同我地討論下design pattern,programming language paradigm又或者algorithms咁。


屌, 你而家先過嚟?! 仲以為要等到佛誕!
(BTW, 咁快溝掂啲女女上水嘅! )
2017-04-12 11:20:41

switch本質上同if無分別,寫switch,extends都係要加幾行,有咩分別,if就難maintain,switch就會易?咁Python咪好難maintain?
用dictionary store起個state,如果係range check又點做?

係架,如果你覺得不寫if練功法太容易,你可以限制埋自己寫switch
range check唔係重點,用if之前讓自己三思,令自己討厭if
寧願寫for(){ if() } 都唔畀自己寫if(){}else if(){}else if(){}
寧願寫switch case都唔寫if

多數program switch case有個特性, 就係只做最簡單分類,基本上做logic flow既機會比較多, 我正正就係唔想係logic flow畀if出場


巴打想法認真幾好,又可以俾自己用下for,while個啲,唔會一味用死if,搞到for,while個啲用得唔熟,我自己就用太多if同for,搞到while,do while唔多識用,多得巴打提醒下,之後自己會注意多啲

for同while根本係兩個唔同目的,係絕對唔應該撈亂用。
2017-04-12 12:10:33
我依家都學到好亂
之前上堂學過下JAVA
recursion, for loop都識
但之後唔知點樣學落去
上網睇好似勁多野要學咁
2017-04-12 12:21:32
用 linux 同 open source software

無用嘅。如果用Linux同open source就會寫靚PROGRAM話。咁你不如實際啲同我地討論下design pattern,programming language paradigm又或者algorithms咁。


屌, 你而家先過嚟?! 仲以為要等到佛誕!
(BTW, 咁快溝掂啲女女上水嘅! )


突然醒起有個alumni account,所以reg到。之前用美國ISP account唔得,但高登就得。

女女就好痴身,要抱抱,讀書書講故仔,同拖手手。
2017-04-12 12:25:44
用 linux 同 open source software

無用嘅。如果用Linux同open source就會寫靚PROGRAM話。咁你不如實際啲同我地討論下design pattern,programming language paradigm又或者algorithms咁。


屌, 你而家先過嚟?! 仲以為要等到佛誕!
(BTW, 咁快溝掂啲女女上水嘅! )


突然醒起有個alumni account,所以reg到。之前用美國ISP account唔得,但高登就得。

女女就好痴身,要抱抱,讀書書講故仔,同拖手手。
2017-04-12 13:17:13
用 linux 同 open source software

無用嘅。如果用Linux同open source就會寫靚PROGRAM話。咁你不如實際啲同我地討論下design pattern,programming language paradigm又或者algorithms咁。

MrA block左好耐
2017-04-12 13:20:23
學左兩年都仲好似半桶水
DESIGN PATTERN學左
但好多技巧都唔識,
E.G.今日睇到Convention over Configuration又發現自己一路做得唔好
E.G.落手做做極都唔可以一勞永逸
等等

學到好LOST


Design Pattern係對特定情景既model answer,
但你唔識中間既推導過程, 你遇上open question既時候就會gg

基本上講Design Pattern既書都一定會先講Design Principle
Design Principle才是判斷是否好code既基本工

btw, 個人推薦不寫if學習法
一直堅持唔寫if, 直到必要時才用

唔寫IF可以點
polymorphism?

點做到唔寫IF
會唔會最後可能只係factory/strategy嚟
將啲if/switch擺去第2個地方
令到個main logic睇落好靚好直接

while (condition){
 // do something
 break;
}
咁樣唔寫 if ?
2017-04-12 13:22:24
用 linux 同 open source software

無用嘅。如果用Linux同open source就會寫靚PROGRAM話。咁你不如實際啲同我地討論下design pattern,programming language paradigm又或者algorithms咁。

入呢個 post 第一時間 quote 我個 reply 真係好有討論價值
2017-04-12 13:54:35
用 linux 同 open source software

無用嘅。如果用Linux同open source就會寫靚PROGRAM話。咁你不如實際啲同我地討論下design pattern,programming language paradigm又或者algorithms咁。

入呢個 post 第一時間 quote 我個 reply 真係好有討論價值


唔好自我安慰,呢個唔係我回嘅第一個post,係第二。算啦,高登咁耐見人講programming技術性例如design pattern,programming paradigm都無乜見過你答嘴。你連討論嘅background都無,你個reply又幾有價值?
2017-04-12 14:11:43

switch本質上同if無分別,寫switch,extends都係要加幾行,有咩分別,if就難maintain,switch就會易?咁Python咪好難maintain?
用dictionary store起個state,如果係range check又點做?

係架,如果你覺得不寫if練功法太容易,你可以限制埋自己寫switch
range check唔係重點,用if之前讓自己三思,令自己討厭if
寧願寫for(){ if() } 都唔畀自己寫if(){}else if(){}else if(){}
寧願寫switch case都唔寫if

多數program switch case有個特性, 就係只做最簡單分類,基本上做logic flow既機會比較多, 我正正就係唔想係logic flow畀if出場


其實重覆判斷switch 係比if 快
好多時除左要方面人睇code 仲要兼顧整體速度
eg.
if(status==1){
......
} else if(status==2 || status==3){
.....
}
用 switch 係可以快好多因為if 係要入memory check 3次,而switch 就check 1次
switch(status){
case 1:
....
break;
case 2:
case 3:
....
break;
}
2017-04-12 14:15:18

switch本質上同if無分別,寫switch,extends都係要加幾行,有咩分別,if就難maintain,switch就會易?咁Python咪好難maintain?
用dictionary store起個state,如果係range check又點做?

係架,如果你覺得不寫if練功法太容易,你可以限制埋自己寫switch
range check唔係重點,用if之前讓自己三思,令自己討厭if
寧願寫for(){ if() } 都唔畀自己寫if(){}else if(){}else if(){}
寧願寫switch case都唔寫if

多數program switch case有個特性, 就係只做最簡單分類,基本上做logic flow既機會比較多, 我正正就係唔想係logic flow畀if出場


如果我無理解錯,你係想唔用if嚟做dispatch,想一個類別入面唔同嘅成員揀唔同嘅動作,例如

if (shape == RECTANGLE) {
... do something with a rectangle ...
} else if (shape == TRIANGLE) {
...
} else if (share == CIRCLE) {
...
} ...

但係dispatch唔係唯一嘅control flow,例如error checking

if (fopen(filename, "r") == NULL) {
... something bad happened...
}

咁又點?用個新嘅library function去開file,pass個callback去做error handling?會唔會用if簡單直接D?
2017-04-12 14:22:44

switch本質上同if無分別,寫switch,extends都係要加幾行,有咩分別,if就難maintain,switch就會易?咁Python咪好難maintain?
用dictionary store起個state,如果係range check又點做?

係架,如果你覺得不寫if練功法太容易,你可以限制埋自己寫switch
range check唔係重點,用if之前讓自己三思,令自己討厭if
寧願寫for(){ if() } 都唔畀自己寫if(){}else if(){}else if(){}
寧願寫switch case都唔寫if

多數program switch case有個特性, 就係只做最簡單分類,基本上做logic flow既機會比較多, 我正正就係唔想係logic flow畀if出場


其實重覆判斷switch 係比if 快
好多時除左要方面人睇code 仲要兼顧整體速度
eg.
if(status==1){
......
} else if(status==2 || status==3){
.....
}
用 switch 係可以快好多因為if 係要入memory check 3次,而switch 就check 1次
switch(status){
case 1:
....
break;
case 2:
case 3:
....
break;
}


睇compiler。如果case value嘅range好大好散,switch好多時係一連串if,不過compiler可能會用binary tree。如果case value好密,compiler可以用jump table。

switch(status) {
case 1:
.. // case 2 missing
case 3:
case 4:
case 16:
...
default
}

會大約變成(假設C/C++)

void* label[16] = { label1, label_default... label16}

if (status < 1 || status > 16)
goto label_default;
else
goto label[status-1];
2017-04-12 14:38:40

switch本質上同if無分別,寫switch,extends都係要加幾行,有咩分別,if就難maintain,switch就會易?咁Python咪好難maintain?
用dictionary store起個state,如果係range check又點做?

係架,如果你覺得不寫if練功法太容易,你可以限制埋自己寫switch
range check唔係重點,用if之前讓自己三思,令自己討厭if
寧願寫for(){ if() } 都唔畀自己寫if(){}else if(){}else if(){}
寧願寫switch case都唔寫if

多數program switch case有個特性, 就係只做最簡單分類,基本上做logic flow既機會比較多, 我正正就係唔想係logic flow畀if出場


其實重覆判斷switch 係比if 快
好多時除左要方面人睇code 仲要兼顧整體速度
eg.
if(status==1){
......
} else if(status==2 || status==3){
.....
}
用 switch 係可以快好多因為if 係要入memory check 3次,而switch 就check 1次
switch(status){
case 1:
....
break;
case 2:
case 3:
....
break;
}


睇compiler。如果case value嘅range好大好散,switch好多時係一連串if,不過compiler可能會用binary tree。如果case value好密,compiler可以用jump table。

switch(status) {
case 1:
.. // case 2 missing
case 3:
case 4:
case 16:
...
default
}

會大約變成(假設C/C++)

void* label[16] = { label1, label_default... label16}

if (status < 1 || status > 16)
goto label_default;
else
goto label[status-1];


原來而家compiler比我想像中更醒。dense case values係用bitmask。

#include <stdlib.h>

void dense(int status) {
switch(status) {
case 1:
case 2:
case 4:
case 8:
case 16:
abort();
}
}

void sparse(int status) {
switch(status) {
case 1:
case 11:
case 101:
case 1001:
case 10001:
abort();
}
}

-----
.section __TEXT,__text,regular,pure_instructions
.macosx_version_min 10, 12
.globl _dense
.align 4, 0x90
_dense: ## @dense
.cfi_startproc
## BB#0:
cmpl $16, %edi
ja LBB0_2
## BB#1:
movl $65814, %eax ## imm = 0x10116
btl %edi, %eax <=========brilliant!
jb LBB0_3
LBB0_2:
retq
LBB0_3:
pushq %rbp
Ltmp0:
.cfi_def_cfa_offset 16
Ltmp1:
.cfi_offset %rbp, -16
movq %rsp, %rbp
Ltmp2:
.cfi_def_cfa_register %rbp
callq _abort
.cfi_endproc

.globl _sparse
.align 4, 0x90
_sparse: ## @sparse
.cfi_startproc
## BB#0:
cmpl $100, %edi
jle LBB1_1
## BB#4:
cmpl $101, %edi
je LBB1_3
## BB#5:
cmpl $10001, %edi ## imm = 0x2711
je LBB1_3
## BB#6:
cmpl $1001, %edi ## imm = 0x3E9
jne LBB1_7
jmp LBB1_3
LBB1_1:
cmpl $1, %edi
je LBB1_3
## BB#2:
cmpl $11, %edi
je LBB1_3
LBB1_7:
retq
LBB1_3:
pushq %rbp
Ltmp3:
.cfi_def_cfa_offset 16
Ltmp4:
.cfi_offset %rbp, -16
movq %rsp, %rbp
Ltmp5:
.cfi_def_cfa_register %rbp
callq _abort
.cfi_endproc
2017-04-12 15:28:39

switch本質上同if無分別,寫switch,extends都係要加幾行,有咩分別,if就難maintain,switch就會易?咁Python咪好難maintain?
用dictionary store起個state,如果係range check又點做?

係架,如果你覺得不寫if練功法太容易,你可以限制埋自己寫switch
range check唔係重點,用if之前讓自己三思,令自己討厭if
寧願寫for(){ if() } 都唔畀自己寫if(){}else if(){}else if(){}
寧願寫switch case都唔寫if

多數program switch case有個特性, 就係只做最簡單分類,基本上做logic flow既機會比較多, 我正正就係唔想係logic flow畀if出場


巴打想法認真幾好,又可以俾自己用下for,while個啲,唔會一味用死if,搞到for,while個啲用得唔熟,我自己就用太多if同for,搞到while,do while唔多識用,多得巴打提醒下,之後自己會注意多啲

for同while根本係兩個唔同目的,係絕對唔應該撈亂用。


自己因為新手上路真心唔係好完全識分咩時候用for更好,幾時用while更好。自己while又用得少,搞到極唔熟,有時候覺得while個度寫得啱,但又run唔到……所以自己下意識依靠多咗if同for,根本惡性循環,唔練多啲真係停滯不前
2017-04-12 17:25:21
用 linux 同 open source software

無用嘅。如果用Linux同open source就會寫靚PROGRAM話。咁你不如實際啲同我地討論下design pattern,programming language paradigm又或者algorithms咁。

入呢個 post 第一時間 quote 我個 reply 真係好有討論價值


唔好自我安慰,呢個唔係我回嘅第一個post,係第二。算啦,高登咁耐見人講programming技術性例如design pattern,programming paradigm都無乜見過你答嘴。你連討論嘅background都無,你個reply又幾有價值?

我冇否定其他內容既價值
2017-04-12 17:27:02

switch本質上同if無分別,寫switch,extends都係要加幾行,有咩分別,if就難maintain,switch就會易?咁Python咪好難maintain?
用dictionary store起個state,如果係range check又點做?

係架,如果你覺得不寫if練功法太容易,你可以限制埋自己寫switch
range check唔係重點,用if之前讓自己三思,令自己討厭if
寧願寫for(){ if() } 都唔畀自己寫if(){}else if(){}else if(){}
寧願寫switch case都唔寫if

多數program switch case有個特性, 就係只做最簡單分類,基本上做logic flow既機會比較多, 我正正就係唔想係logic flow畀if出場


巴打想法認真幾好,又可以俾自己用下for,while個啲,唔會一味用死if,搞到for,while個啲用得唔熟,我自己就用太多if同for,搞到while,do while唔多識用,多得巴打提醒下,之後自己會注意多啲

for同while根本係兩個唔同目的,係絕對唔應該撈亂用。


自己因為新手上路真心唔係好完全識分咩時候用for更好,幾時用while更好。自己while又用得少,搞到極唔熟,有時候覺得while個度寫得啱,但又run唔到……所以自己下意識依靠多咗if同for,根本惡性循環,唔練多啲真係停滯不前

for (; true;){
}
while (true){
}
有咩唔同 ?
吹水台自選台熱 門最 新手機台時事台政事台World體育台娛樂台動漫台Apps台遊戲台影視台講故台健康台感情台家庭台潮流台美容台上班台財經台房屋台飲食台旅遊台學術台校園台汽車台音樂台創意台硬件台電器台攝影台玩具台寵物台軟件台活動台電訊台直播台站務台黑 洞