看板 Soft_Job 關於我們 聯絡資訊
這是我"前"公司的經驗了 一開始以為公司內有嚴格的coding style規定是件好事 我也贊成公司要有一致的coding style (像我以前看過apache的C code 全部CODE都像同一人寫出來的一樣) 而公司內也會有人code review你的部份 一切聽起來都很完美 一開始聽到有規定coding style和code reviewer也很開心 但因這一切都因為公司裡有一個奇怪的規定而毀了 "code不可以用code formatter去掃" 我承認自己寫程式常會漏勾 所以寫完會花很多心力在檢查有沒有BUG 是否會被攻擊 資安問題等等.... 但在這間公司發現一個很奇怪的事情 "有資安漏洞的CODE大家會很有耐心的教 空格沒空好會被罵的狗頭淋頭" 搞到最後一段程式寫完我只知道檢查空格.... 最後的最後我決定離職的原因是出在reviewer 和reviewer的code觀念差太多 跟本無法共事 例如: 1. 有時為了避免太多層出現===> if(a) { //do a things if(b) { //do b things if(c) { //do c things } } } 會改成====> if(!a) { return ; } //do a things if(!b) { return ; } //do b things if(!c) { return ; } //do c things 但因為這寫法code reviewer沒看過 她直接在辨公室裡開飆 2. reviewer說出了我聽說最莫名奇妙的一句話 "這function以前沒人用過 所以你不能用這function" (jquery的trigger) 不是因為效能 不是因為安全問題 而是因為公司前人沒用過.... 我第一次遇到會規定coding style的公司 一開始以為是檢到寶 後來沒想到工作沒滿試用期就離職了.... -- ※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 111.252.76.35 ※ 文章網址: http://www.ptt.cc/bbs/Soft_Job/M.1410021607.A.DC4.html
normaler: 案例1你可以拿refactor的書給他看 09/07 00:46
前題是reviewer會唸
chrischen: 案例2的意思應該是怕其他人看不懂 可能有既有慣用寫法 09/07 00:52
這倒是有可能 但是如果有既有慣用寫法 我覺得應該要寫出來給人知道 而且這樣一打範圍太大了 什麼function都能用這原因被禁止掉
qweqweqweqwe: 不可以用formatter 不過你用了他會知道嗎 @@ 09/07 00:53
之前我有survey過 但是既有的online formatter都有小部份不能達到 而且公司很重規定+reviewer坐我旁邊 我非常討厭被飆 所以他們說不能用我就沒去用
tw689: 糟糕 我也不喜歡一的寫法orz 09/07 01:02
我在STACK OVERFLOW看過這個問題 有人說I perfer to call this question "holy war". XD 但我是覺得你要講要改OK 沒看過的CODE就直接抓人來飆....我只會覺得她心胸未免也太狹窄
VVll: 我也喜歡在func內做檢查 不允許就return 或者 continue 09/07 01:13
(握)
xpop777: 我喜歡自由發揮xD,加油,總會找到適合的位置 09/07 01:14
謝謝!!
bndan: 我還以為1的寫法會轉成switch耶 = =a (也許個人偏好?) 09/07 01:16
對啊~已經變成個人偏好了
VVll: switch 只能針對明確的result做判斷 case 09/07 01:24
VVll: switch的特點在於 善用break 09/07 01:25
是啊 例如 if(A && B) { } else if(C && D) { } else { } 就不好改成switch了
GoalBased: 部門經理說,他在前一個公司,也是有規定 09/07 01:40
GoalBased: 老闆不用遞迴,你寫了遞迴去給老闆,解釋到他懂了 09/07 01:40
GoalBased: 他還是會叫你改成迴圈 09/07 01:41
GoalBased: 至於過多層是否是你那個function 職責太多呢? 09/07 01:41
功能倒是還好 那個function不超過4層 只是為了降層才寫成那樣
uid88: 1. 寫成這樣大概我們組上任何人review都會不過 09/07 02:08
uid88: 2. 新的function確實代表了風險。但是並非絕對不能承受 09/07 02:08
uid88: 可以設法提出: 1)這function在各種環境下可靠的證據 09/07 02:09
uid88: 2)若用現有function也可以完成同樣功能,用新的好處為何 09/07 02:09
1.如果說這是LINUX推薦的寫法呢? 事實上....他們最新一版的coding style規定也叫別人用我那種寫法 2.她沒有提供現有的function給我用 只有說那樣寫不行 要改掉 例如大家都用scanf 我突然間用fscanf這樣 然後我上面回文中有提到 "但是如果有既有慣用寫法 我覺得應該要寫出來給人知道"
wadechen: 我只覺得這樣就要走人 也太兇...@@ 09/07 02:09
是誰兇XD?
braverycloud: 聽你這樣描述,我會認為在那邊只是Code產生器 XD 09/07 02:13
以前我也有想過這個問題 但我聽說外國也會有code reviewer和coding style 所以後來我也被說服了Orz
cha122977: 1.的寫法是guard condition? 是的話這樣寫應該ok 09/07 02:28
是的 ※ 編輯: workworkwork (111.252.76.35), 09/07/2014 02:30:15
cha122977: 看來問題出在無法溝通XD 09/07 02:31
newcycle: 不用formatter的理由是..? 09/07 03:04
andymai: reviewer 不能溝通之外也不專業!一個東西能不能用居然是 09/07 04:41
andymai: 看前人有沒有用過?就算自己懶得看~也該叫原PO說明使用上 09/07 04:43
andymai: 的優缺點~再做進一步的考量~甚至是開個內部會議啊... 09/07 04:44
alog: 我覺得reviewer不能溝通就算了 09/07 06:56
alog: 其他那些根本就是小事y 09/07 06:57
wens: linux kernel裡面就是遇到錯可以直接return就直接return 09/07 09:29
wens: 需要收屍的時候就會有goto跳到最後面反向收垃圾 09/07 09:29
wens: 會這樣寫有個原因, 就是每行80字元的限制 09/07 09:30
jtorngl: 我習慣寫 if ("ABC".equals(str)) { 也曾被嫌棄過 09/07 09:39
jtorngl: 說為什麼不寫成 if (str.equals("ABC)) { .... 09/07 09:40
jtorngl: 另外常常要做null checking覺得很麻煩,不知是否有好方式 09/07 09:43
hegemon: 如果你是用java的話..用StringUtils.equals... 09/07 10:02
hegemon: 你就跟他們說這是Apache認證過的 09/07 10:03
ticks: wes:與其說是80字元的限制,不如說是用這些規定來防巢狀 09/07 10:04
ticks: if-else。另一個相關的規定就是tab width=8 09/07 10:04
GX90160SS: 1.的寫法不錯啊,我避免if太多層也是這樣用的 09/07 11:09
cha122977: linux的寫法也和driver特性有關 初始化失敗要反向處理 09/07 12:13
atst2: 1.你改寫的方式,可能會有潛在的問題. 09/07 12:57
atst2: 主要是你的程式不只是單純的guard condition,每個codition 09/07 12:58
atst2: 間還有"do something". 09/07 12:58
atst2: 不注意的話, 有可能增加leak的機會 09/07 12:59
typepeter: 這樣算是有作code review喔? 這樣人人都是code viewer 09/07 12:59
typepeter: 基本上這公司的制度和人員素質都不怎樣吧... 09/07 13:00
atst2: 從這點來看,我不認為你的reviewer在1.的情形不對,也可能單 09/07 13:00
atst2: 純是關注點不同,你比較注重減少層次,他可能比較重視單一 09/07 13:01
atst2: entry/exit的問題. 09/07 13:01
leicheong: 我倒是寧願指定一款code formatter, checkin前要跑一下 09/07 13:41
leicheong: 把時間花在formatting上真是沒效率的事. 09/07 13:42
ACMANIAC: 1 哪有什麼問題,這間公司... 塊陶阿 09/07 14:12
bndan: = = 其實你的例子一樣能轉.有沒有價值而已... 09/07 14:29
bndan: switch(true)case A&&B,!(A&&B)&&C&&D,!(A&&B)&&!(C&&D) 09/07 14:32
GX90160SS: 樓上那寫法有夠醜 09/07 21:22
rave308: int qq = true ? 1 : 2 09/07 22:34
readonly: 你覺得他說的真的沒 100% 可取性? 09/07 22:53
ku399999: 例一明顯是原po寫法比較好吧 可讀性較高 將來維護也不 09/08 02:39
ku399999: 會繼續在裡面增加判斷式 leak請用auto pointer 09/08 02:41
alan3100: 不能用formatter掃有啥意義? 有車不開應要用走的 09/08 22:52
mmchen: trigger超好用的耶,公司沒人熟jquery嗎… 09/09 14:10
b6byc: 很怕遇到reviewer , 以為自己是神. 09/09 15:20
andymai: 也不是每個reviewer都這樣啊~能不能溝通並盡量站在客觀的 09/10 01:38
andymai: 角度去討論才是重點... 09/10 01:38
honochung: 想問trigger不好嗎@@?我用了超多耶 09/12 00:22
ottokang: 幹麻不用Formatter.... 09/12 14:03