增加網址:
文章備註、標題(會記錄下來,但是暫時不會顯示):
[綜合]無題 無名 ID:Eq/LldaE 2018/12/11(二) 18:21:50.801 No.13296120
評分:0, 年:0, 月:0, 週:0, 日:0, [+1 / -1] 最後更新:2018-12-11 09:14:57
附圖
程設島民在嗎?
到底要怎麼令自己寫程式的時候思路更清晰更有條理?

一個月前我應徵了一間日本公司當軟件工程師
online coding test我拿了不錯的分數
後來公司約我跟它個的工程師做一對一的live coding (是那種開著視像對話一邊解釋一邊打代碼的面試)
對方是個26仔 全程用國語溝通
題目還滿簡單的 但是我經常犯一些小錯誤 (沒看清楚題目, 邊界+1-1, if 條件設錯等等)
最後雖然是做到了所有的題目
但26仔好像不太滿意 說我雖然解題方向正確但犯了太多錯誤
最後是落選了

後來一個月我做了很多練習
但是老是錯一些小地方的缺點還是沒有改過來 甚至愈來愈差
這是不能改善的先天因素嗎?
你們會不會有上述的情況?
無題 無名 ID:loQVAfF6 2018/12/11(二) 18:23:41.207 No.13296144
附圖
一定要睡飽 睡飽思路會比較清晰
無題 無名 ID:DGFG0JvQ 2018/12/11(二) 18:24:48.662 No.13296156
回覆: >>13296175
臨場反應不行?還是基礎不夠?
做做線上題庫看看
無題 無名 ID:CHpa3EWk 2018/12/11(二) 18:25:13.216 No.13296163
回覆: >>13296175
>>13296120
>>應徵了一間日本公司當軟件工程師
>>當軟件工程師
>>軟件
無題 無名 ID:UHNqLwiY 2018/12/11(二) 18:25:46.512 No.13296170
回覆: >>13296229
又不說犯了什麼錯,是要島民觀落音嗎?
無題 無名 ID:etNpdmeE 2018/12/11(二) 18:26:06.457 No.13296174
被26痛婊一頓
無題 無名 ID:Eq/LldaE 2018/12/11(二) 18:26:20.426 No.13296175
回覆: >>13296190
>>13296156
已經做了過百題了...
>>13296163
?
無題 無名 ID:khLAQcck 2018/12/11(二) 18:26:27.115 No.13296176
刷leetcode時不要看別人解答自己debug
無題 無名 ID:ApshOTQs 2018/12/11(二) 18:27:23.636 No.13296183
>>13296120
先說你是哪間糞校資工畢業的= =
無題 無名 ID:ldRt8Nz. 2018/12/11(二) 18:27:56.973 No.13296187
回覆: >>13296546
說你支持統一會加分嗎www
無題 無名 ID:I97VKsoM 2018/12/11(二) 18:28:12.276 No.13296190
回覆: >>13296262
>>13296175
因為台灣不會用軟件而是用軟體一詞
無題 無名 ID:gzBAF9uI 2018/12/11(二) 18:29:33.490 No.13296200
這東西不是要花時間磨
現場思考大概就是要你
經驗豐富才行
無題 無名 ID:/MaHaCFs 2018/12/11(二) 18:29:38.897 No.13296201
先用紙筆把整個程序畫出來吧
無題 無名 ID:D9CKCOVQ 2018/12/11(二) 18:31:49.721 No.13296213
去看看《社群網戰》 有幫助也不一定
無題 無名 ID:Eq/LldaE 2018/12/11(二) 18:33:52.160 No.13296229
>>13296170
好啦 舉一個例子
有個NxM的2維陣列
我要做一個function檢查(a,b)坐標是不是有效
沒有超過邊界以及valid[a][b]==1 就是有效
以下是我做題由錯改到正確的次序(沒記錯的話):
def isValid(M, N, A, a, b):
return A[a]==0 and A[b]==0 and a>=0 and a<M and b>=0 and b<N

def isValid(M, N, A, a, b):
return A[a][b]==0 and a>=0 and a<M and b>=0 and b<N

def isValid(M, N, A, a, b):
return A[a][b]==0 and a>=0 and a<N and b>=0 and b<M

def isValid(M, N, A, a, b):
return a>=0 and a<M and b>=0 and b<N and A[a][b]==0

明明知道是不對的 但寫的時候沒有發覺
看到輸出的warning都會馬上知道錯在這個function 但就是不夠小心?
無題 無名 ID:Eq/LldaE 2018/12/11(二) 18:34:23.263 No.13296236
>>13296229
A[a][b]==1 就是有效才對, 打錯了
無題 無名 ID:Eq/LldaE 2018/12/11(二) 18:35:12.441 No.13296241
>>13296229
然後
最後是
def isValid(M, N, A, a, b):
return a>=0 and a<M and b>=0 and b<N and A[a][b]==1
才是正確的...

你們明白我老是錯什麼了吧
無題 無名 ID:/MaHaCFs 2018/12/11(二) 18:37:36.917 No.13296257
回覆: >>13296264
附圖
把流程畫出來
把輸入 輸出列出來
class, object分別有什麼field function寫清楚
關係也寫出來

整個程序都用圖和列表表達
愈詳細愈好

這樣子思路會比較清晰
因為已經可以用圖表達了寫出來的程序也會比較易看和修改
無題 無名 ID:Eq/LldaE 2018/12/11(二) 18:38:24.933 No.13296262
>>13296190
它們招募網站就是只用殘體字啊...
無題 無名 ID:Pvfu4vqc 2018/12/11(二) 18:38:35.799 No.13296264
回覆: >>13296483
附圖
>>13296257
口喔醬怎麼感覺最近都沒看到你
無題 無名 ID:PPWhTd0g 2018/12/11(二) 18:38:47.094 No.13296266
回覆: >>13296283
一句話:沒天分
去當OP吧
無題 無名 ID:VtG4acZg 2018/12/11(二) 18:39:00.803 No.13296268
>>No.13296229
不要耍帥全部寫在同一行
無題 無名 ID:DGFG0JvQ 2018/12/11(二) 18:40:25.675 No.13296281
>>13296229
不太建議你把程式寫這麼短,先弄清楚流程把程式前後邏輯搞對,
就算程式寫多行一點也沒關係,先要有正確結果再說。
無題 無名 ID:Eq/LldaE 2018/12/11(二) 18:40:35.455 No.13296283
附圖
無題 無名 ID:/MaHaCFs 2018/12/11(二) 18:40:37.179 No.13296284
>>13296229
總之把輸入和輸出畫成表格吧
對變數不在行的話 假定一個數字當輸入也可以
無題 無名 ID:gzBAF9uI 2018/12/11(二) 18:44:26.719 No.13296319
回覆: >>13296394
>>13296241
一般我不會在同一行取用陣列
會先檢查範圍成立
才取用 否則會溢位
其實這超簡單的吧
我還想現場是多難
無題 無名 ID:p0DGmGzM 2018/12/11(二) 18:46:35.782 No.13296342
你沒喊出25共識
全世界都是習大大的
無題 無名 ID:DGFG0JvQ 2018/12/11(二) 18:50:40.639 No.13296373
回覆: >>13296415
>>13296229
會把A[a][b]搞成A[a]和A[b]不太像是資工系會犯的錯誤
建議基礎要打好
無題 無名 ID:Eq/LldaE 2018/12/11(二) 18:52:50.097 No.13296394
>>13296319
就是簡單的部份經常錯
難的地方多是演算相關的
例如要用BFS還是DFS去做這條問題 用DP還是要brute force
這些概念還好 做題時沒怎麼錯
無題 無名 ID:aJWyCpCs 2018/12/11(二) 18:53:48.079 No.13296404
我自己的方法是把功能需求重新唸出來一遍
在思考一閃就寫出來的東西的確常常會出一些小錯誤
另外其中幾種常用的判斷我是直接把寫法背下來的
雖然寫的時候再想寫法也行 不過背起來還是能大幅節省思考時間
另外有地方卡住的時候我都不帶手機去廁所蹲
蹲一蹲就出來了= =
無題 無名 ID:Eq/LldaE 2018/12/11(二) 18:55:12.565 No.13296415
>>13296373
我犯錯的時候也覺得這種錯很丟臉
這錯很快就改回來喔! 看到就知道寫錯了...真的QAQ
無題 無名 ID:wGg8bBII 2018/12/11(二) 19:02:13.526 No.13296469
附圖
語法錯誤多用就好

Logic想不好的話
大部分問題都可以把問題分小再解決
就是所謂的divide and conquer

原po的問題的話
已經把問題拆兩個了
1.在邊界內嗎?
2.valid嗎?

最後輸出就是這兩個的and
2已經告訴你了
那你只要解決1

1也可以再拆細
M軸出界了嗎?
N軸出界了嗎?
答案是兩者的NOR

就這樣子把問題簡化
把答案分別寫下來
最後簡化
無題 無名 ID:wGg8bBII 2018/12/11(二) 19:03:34.354 No.13296483
>>13296469
其實簡化也不用了
也方便閱讀

>>13296264
沒空來耍廚嘛....
無題 無名 ID:.Jsgh/H2 2018/12/11(二) 19:11:18.537 No.13296546
>>13296187
不會ㄛ
中國人對於舔共人士大多很排擠呢
反而會尊敬有骨氣的敵人
無題 無名 ID:Eq/LldaE 2018/12/11(二) 19:12:46.615 No.13296561
>>13296469
謝謝你的圖
好可愛


的確分成小問題想應該會比較清楚
但是程式碼會變得更長 那樣也可能會增加出錯機會

像是這樣寫:
def isValid(M, N, A, a, b):
b1 = a < 0 or a >= N
b2 = b <0 or b >= M
positionValid = not (b1 or b2)
if positionValid: return A[a][b]
else: return False

感覺更容易出錯了
無題 無名 ID:wGg8bBII 2018/12/11(二) 19:17:12.108 No.13296601
回覆: >>13296705
Q:M軸出界了嗎?
A: a<0 || a>=M

Q:N軸出界了嗎?
A: b<0 || b>=N

Q:出界了嗎?
A: !(N軸出界 || M軸出界)

Q:有效嗎?
A: !出界 && A[a][b]

就醬
無題 無名 ID:wGg8bBII 2018/12/11(二) 19:18:58.218 No.13296620
>>13296561
不會啦
信我 我老島民
無題 無名 ID:cqllXHkE 2018/12/11(二) 19:27:01.595 No.13296690
他一定是想"區區一個台巴子也想要我讓你進公司 食屎吧你"
無題 無名 ID:VtG4acZg 2018/12/11(二) 19:27:51.983 No.13296698
回覆: >>13296812
>>No.13296561
不要再逃避early return了
也不要用magic number了

if 出界(a, b)
 return false

return A[a][b] == VALID_FLAG

多容易理解
無題 無名 ID:wGg8bBII 2018/12/11(二) 19:29:02.494 No.13296705
>>13296561
出錯是常有的
你看這個>>13296601
就錯了

可是如果一行的話,你只知道那一行錯了,
當中那個部分你根本不知道
>>13296601
的話
M軸出界的答案錯了嗎? 沒有
N軸出界呢?沒有
最後的出界條件呢? 錯了! 多了一個Not

就可以這樣子一步步追查錯處了
無題 無名 ID:E.C3hmyM 2018/12/11(二) 19:29:07.992 No.13296708
>>13296229
好噁心的programming style
無題 無名 ID:wGg8bBII 2018/12/11(二) 19:34:36.891 No.13296764
回覆: >>13296812
>>13296561
一般來說
寫的程序碼愈是接近書寫語言愈是比較好
無題 無名 ID:DGFG0JvQ 2018/12/11(二) 19:38:59.814 No.13296806
回覆: >>13296841
>>13296561
硬要一口氣寫完 = 容易忽略細節,把問題想得太簡單
另外,變數最好用有意義的名稱比較好
無題 無名 ID:Eq/LldaE 2018/12/11(二) 19:39:31.383 No.13296812
無題 無名 ID:IyVtza.o 2018/12/11(二) 19:41:38.495 No.13296839
程式可讀性和效能一樣重要
沒有可讀性 將來會很難維護
無題 無名 ID:Eq/LldaE 2018/12/11(二) 19:41:51.985 No.13296841
>>13296806
想問很久了
變數名稱愈長會不會令python這種scripting language跑得比較慢?
還是說它背後會轉成另一種類似bytecode的東西?
無題 無名 ID:E.C3hmyM 2018/12/11(二) 19:42:49.076 No.13296856
以前我也和你一樣
愛用a b x y z n m
然後看了好的教學 就改變了
無題 無名 ID:E.C3hmyM 2018/12/11(二) 19:46:20.566 No.13296880
回覆: >>13297412
>>13296841
我記憶中
那是給compiler看的
不是給電腦看的
電腦看的是不是你的名字
無題 無名 ID:DGFG0JvQ 2018/12/11(二) 19:49:11.361 No.13296901
回覆: >>13296961
>>13296841
一句話,不會
缺點是太長容易打錯字XD

我對編譯原理只懂點皮毛,會不會變成bytecode看語言
無題 無名 ID:I97VKsoM 2018/12/11(二) 19:56:12.092 No.13296961
回覆: >>13297012
>>13296901
打錯字?
現在絕大多數IDE都能自動完成了
打個兩個字母按TAB就幫你補完了吧
總不會還是用notebook寫吧...
無題 無名 ID:DGFG0JvQ 2018/12/11(二) 20:01:42.005 No.13297012
>>13296961
因為我真的看過有人用二個很長的變數名稱,
結果好死不死又長得有夠像,偏偏IDE又用的很陽春...
(新版IDE一套不便宜,公司想省錢)
無題 無名 ID:pll/HlEM 2018/12/11(二) 20:35:49.538 No.13297412
>>13296841
>>13296880
我口喔啦

一般Compiler是會自動把變數名字優化的
所以是對效能沒影響

可是Python是interpreted language, 直接運行,不經Compiler的
所以長的名字是會比較慢的
而且也比較佔ram
可是! 影響十分小,可以無視掉也可以
JS是有工具優化掉這部分的
python不知道有沒有
沒有用太多我也不知道

但是太長的名字可讀性也不好吧
無題 無名 ID:Yolnbxso 2018/12/11(二) 20:36:38.474 No.13297422
回覆: >>13297799
>>13296241
也還好啦,沒什麼正不正確的,這種語法錯誤資工系也會犯的,而且要de很久
python的and等於C的&&,這是強邏輯,左邊的bool是false就不會確認右邊的結果,直接整個都會是false,所以左邊要先放boundry check,對了右邊才確認內容。
無題 無名 ID:E.C3hmyM 2018/12/11(二) 21:10:35.777 No.13297799
>>13297422
我寫的話會加()
方便讀阿
無題 無名 ID:9GBhHwpg 2018/12/11(二) 21:16:48.657 No.13297887
>>13296229
謝謝你原PO
看到你這種程度都能去日本應徵,我就更有自信了
無題 無名 ID:RRATYzbM 2018/12/11(二) 23:37:05.304 No.13299476
記住自己
剛剛犯的錯
昨天犯的錯
前天犯的錯
還有為什麼犯錯找到犯錯真因
更重要的是
每次錯了就要確實想方法避免重複犯錯
不要有 我只是沒看到 沒小心看
漏了 想不仔細 只是沒有怎樣
下次怎樣就好
這種模稜兩可便宜行事的方式
而不謹慎思考犯錯真因
防止不了下次再犯
你下次一定會再繼續如此
你必須思考你當下在想什麼
為什麼會想成這樣
你下次如果又有相同作為才能警覺
最終目的在避免重複犯錯
每個小錯誤都有一個壞習慣
錯誤邏輯 防呆失效在裡面
你不落實探討問題而只是
當下解決Case by case
你走不出這個輪迴
這是工程師的基本素養
比起自己能幹嘛
有意識防止自己重複犯錯不斷累積更重要