作者: qrtt1 (null) 看板: Soft_Job
標題: Re: [閒聊] 你認識幾歲還親自coding的?
時間: Thu Sep 15 01:33:18 2011
※ 引述《midtail (全新的)》之銘言:
: 由於常常有人跟我說,我們這個年紀不適合寫code了
: 問他們為什麼?他們總是說太累,拼不過年輕人
: 沒有辦法像年輕人一樣熬夜?
: 心中有幾個疑問想問鄉民們?
: coding一定會熬夜嗎?
這能算在抽樣誤差嗎?
如果跟你說的人,是工作起來不得法的人,
我想他們只好花更多時間在重複修正自己的錯誤了。
事實上,沒有人能寫出 100% 沒問題的程式。
但是因每個人選擇的應對策略不同,後續的結局也就可能不同。
單純就是否有善用版本控制工具來說,
今天我試著要修個 bug,改了幾個檔案。
倒數第二次修改的部分,總覺得使得結果更糟了。
想要回復到那一次修改前的狀態,而保留那一次後的狀態。
在 IDE 的檔案列表間,點來點去,一下決定用 Ctrl Z 回復,
一下又決定將不要的部分 comment 起來。
最後,改出一個『印象』中,
似乎是去掉倒數第二次修改,但保留之後修改的內容的狀態。
改定後、compile、run-and-pray,程式還是杯具地 crash 了。
如果採用版本控制工具,你能『優雅』地處理它。
: 資深、寫久了、能寫比較快,是否能改善工時長的問題?
: 另外,coding累,是因為總是有更多更新的語言得學,所以累嗎?
: 還是,不管寫多快,總是有寫不完的code
學習是好事,但不要盲目追逐流行。
新語言之所以又快又好,除了豐富彈性的語意與方便的開發工具之外,
『個人覺得』那是因為還沒有足夠多的寫醜的舊產品要維護
語言優美是一回事,但不見得人人有能力將這份優美延續到實務上。
純粹以工作來說,
應該選擇學習有助於自己工作效率的新工具,
無論是觀念、開發環境、程式語言。
最開頭的例子,一個好用的版本控制工具,
就能帶領我們脫離 Ctrl Z 與手工回復上一動的苦海。
『資深、寫久了、能寫比較快,是否能改善工時長的問題?』
這個提問合理的回答是什麼?
首先得反問,對一名軟體工作者來說,是什麼使工時變長?
而使工時變長的哪些因素是跟自己作為較相關的?
這答案對每個人都不一樣,
但如果你的答案裡,有太多跟自己無關,
先捫心自問,在不是自我感覺良好的情況之下,
是不是目前的工作環境太糟糕了?
這裡我舉個比較普遍跟自身相關的因素:『製造Bug』。
心理明白的很,沒有人不寫Bug的。
但是,我們仍是能找到一些值得採納的建議來試著:
『減少Bug』或是『讓Bug很容易被發現』至少我們希望
『Bug,我不想當最後一個知道的人』
值得一提的老梗『重構』與『單元測試』
但心態上,不用過去版友討論 Code Review 那般嚴肅。
我知道重構的書本裡介紹得詳細,
也許你讀過那些 bad smell index,跟有哪些重構技巧。
以及重構跟 debug 不會同時進行的原則,
甚至你可能注意到書上有說,
重構是透過單元測試保障其正確性的。
但現實上,許多公司裡並沒有規定必需有單元測試。
所以,你也不必把它視為那麼嚴肅的話題。
只要這樣想:『我得養成一種定期整理程式碼的習慣』
就像房間久沒整理,可能地板都被淹沒了。
而養成這個習慣,你能先試著練習:
1. 避免重複的程式碼
2. 保持程式邏輯簡單
如果你的程式,在初期運用了許多 copy & paste 手工技巧,
必定會產生許多重複的程式碼。重複程式碼的問題不在於『重複』!
而在於『難以維持一致性』。
像是發現某一個地方不心有 typo,像是 if 內多按了個 !,
就得去找那些已經實施 copy & paste 技能的地點一一改正。
光是一個人對同一個地方的程式碼 copy & paste 都難以改到完整了。
更不用說多人的情況,這邏輯的『一致性』到底該如何維持。
如果程式看起來不太易懂,就表示那段的邏輯稍嫌複雜。
但複雜的程式,問題不在於『難懂』,而在於其他維護者對它的『誤解』
難懂,至少時間花下去,應該還是能明白的。
但在沒有時間的情況下,只能用『好像懂了』的心情『誤解』它。
這種情況,後續的維護者會寫出『真誠』的 Bug。
儘可能在不影響 Big O 的情況下,把它寫到清楚明白。
撇開了整理成冊的『重構』,單純先由這二個方向入手。
已經能更有效率地面對 Bug 這件事情。
另外,單元測試。也是同樣的。
如果你什麼都還沒開始:
忘掉 code coverage、不要理會 mock test 跟複雜的、
流程相依的、真實物件隔離的、過於技巧性的測試技術。
單純測你寫出來能獨立執行的函式,
在合理的、不合理的 input/output 之下,
是不是產生了期望的結果。
其它還沒學會的流程轉移間的測試,或相依物件的測試。
就先用人腦來代勞吧。
總之,coding 是不是要花很長的時間,
我們應該用 performance profiling 的精神來看待問題
先找出最關鍵因素,並選出應對之策實際嘗試。
當然,我的意圖擺明就是來推銷。
推銷我覺得能節省軟體工作者虛耗工時的方法:
『版本控制』、『重構』與『單元測試』
大家都是進入社會的『職人』,
我們工作不管是為了什麼目標,這倒底是個『經濟』活動。
我們得用『經濟實惠』的工作方法來處理。
而非土法煉鋼,卻妄想超英趕美。
: 如果coding不能做一輩子,coding是跳板,能跳到什麼工作呢?
: 總是有些人不愛面對人群的,寫一輩子code,缺點是薪水不可能太高嗎?
: 你們認識還在coding年紀最大的是幾歲?
未來的事我不知道,但是我知道,就算是大師還是也在寫 code 的。
我覺得若是對管理真的很有一套的人,轉職去管理那是件好事。
這個工作不是只需要 Programmer,
對於 Programmer 工作內涵有相當理解的人。
希望你們面對管理不是當作一個已經寫不下去了,轉管理唄的心態。
而是站在自己曾是 Programmer 的角度,
當時希望怎麼被『服務』,而選擇管理的職位。
不然只是讓 Programmer 在不良 PM 名單中添上一筆罷了。
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 61.231.49.52
※ 編輯: qrtt1 來自: 61.231.49.52 (09/15 01:34)
※ 編輯: qrtt1 來自: 61.231.49.52 (09/15 01:40)
沒有留言:
張貼留言
您好.本資料庫並非第一手資料.如果你有對文章作者的詢問,意見與需求,請自行找尋文章作者並提供意見,謝謝.