[心得] 北美 工作 轉專業 淺談Leetcode 之我見

作者: edwardboy26 (Yuho)   2017-12-01 22:06:54
其實沒想過我有機會在軟體版發個文
畢竟大學是商科畢業的
但因緣際會 走上了第1001個電腦科學的路
背景什麼的在留學版也有分享過就不贅述
寫在前面 這篇是主要給轉專業
或是基礎不甚扎實的人一些建議
主要談的是很多人口中不恥的 “刷”Leetcode
首先我很感謝Leetcode 不是因為它讓我進了不錯的公司
而是他幫我一步一步地領進
從 “了解問題”到“設計程式結構”
最後利用演算法與資料結構來實現一個問題的解法
事情都有兩面 端看自己怎麼想
有人覺得刷題對提升能力沒幫助 只是照本宣科 公司還這樣考根本亂搞
但我覺得我的收穫可以完全從另一面來解讀
條列這半年寫Leetcode的收穫
如果你要笑我連這些都不知道 怎麼念電腦科學
我只能說 誰沒有學習的過程?
我晚了兩年不代表我不能學 也不代表我以後不會變厲害
1. 看到一個問題我開始思考要用手上的什麼演算法與資料結構來解
這件事情跟工作我想是一樣的
工作有目標 無論是解蟲 或是產品設計 或是改善某種效能
都是利用已知的知識 加上手邊人家寫好的Lib 最後實作並達到解決問題
這個流程跟寫Leetcode如出一徹 只是他把題目的範圍減小的
變成一個相對簡單但基本核心概念一樣的過程
2. 寫出簡短易懂解不重複有架構的程式碼
因為短時間時間的壓力
很多時候我開始理解到與其一見到題目 有了最粗淺的想法以後
直接開始寫程式碼 後來因為沒有好好的重複利用
導致原本30行可以解決的硬是被我寫到了50行
(如果變成大型程式 3000 -> 5000不是鬧著玩的)
不如靜下心 把心裡面的想法通通整理成可各自調用的區塊
然後一步步一步實現
這樣好找問題 以後也較簡單修改
3. 擁有改進效能、可讀性、多方面思考的直覺
很多時候題目一下就可以想出一個可行的解法
但很多時候內心就開始挑戰自己 或是有個直覺就開始說
“這個感覺就有更好更快的解法”
“用這種方法感覺能解 但另外一種應該也能 好處分別是... ...”
當開始出現這種感覺的時候 就往前踏了一步
不滿足於現在的效能 或想要用更好的方式解決問題
這不是大家心目中“好工程師”該具備的能力嗎?
同時也讓自己在看解答以前 多思考多想
我的確有曾經寫過比第一名投票還容易懂 然後行數更少 並且擁有同樣效能的碼
如果我直接看答案 我就寫不出來了
4. 閱讀理解別人程式碼的習慣
看別人的碼 理解別人的邏輯不簡單
擁抱開源更不簡單
但是在參考別人解答的時候 就默默無形訓練了這種習慣與能力
同時也會知道自己的程式在哪裡該加註解 命名怎麼命最容易懂
哪裡不要用太過於簡短的簡寫 才方便閱讀
5. 正確無誤的寫出20 - 30 行程式碼
因為要求的緣故
我們常常無法寫到一半看寫得對不對 所以會要求一次寫成功
這種訓練讓我在現在Project的實作上
程式碼的出錯率小了很多
不太會忘了宣告、加分號 或結構混亂 導致出一些很蠢的錯誤
這樣對以後寫大型開發程式的時候 效率有絕對的幫助
6. 實作的能力 與自信
很多時候有 有想法不代表能夠寫出來
而這也的確是我曾經最害怕的一塊
我不知道怎麼實作我的想法
但是寫題目寫久了
開始慢慢發現自己的思考已經往確定實作的方向想的時候
就開始累積自信
知道自己一定實作的出來 只是要花時間想與學
這種自信與能力 無論對哪個產業我相信都是滿好與滿重要的
(機械設計我相信也是這種概念)
目前大概是這幾點的收穫
花了我大約半年的時間
我只能說 寫Leetcode的確是對轉專業的我擁有極大的收穫與幫助
我也不覺得自己是只會寫題目而不會解決問題
畢竟我所有寫的過程 都是在解問題 而非背答案
寫在後面
很多人覺得大家都一窩蜂了轉來電腦科學是追求熱潮
認為好好刷題就可以進到大公司的策略根本扭曲了電腦科學的本質
甚至覺得很多人只會刷題根本不會利用手邊的工具解決碰到的難題
轉專業就是比本科差
我想講的是
很多時候不是我們笨 而是我們待的時間不夠久 導致很多東西沒經驗
系統、結構、網路、IO這些東西都不會
但學無止盡 只要願意一步一步走下去
十年後 我們也跟大學畢業六年的本科生寫程式的時間一樣久
只要付出足夠的努力
我們也不會比本科畢業的差到哪裡去
人都不是笨 願不願意學與花時間而已
作者: Mariobrother (馬力歐兄弟)   2017-12-01 22:39:00
作者: orangepipe (堅持才不會荒廢夢想)   2017-12-01 22:50:00
作者: pttworld (批踢踢世界)   2017-12-01 23:21:00
解題和架構差蠻遠的,尤其對完整的系統來說。
作者: chung5566 (強)   2017-12-01 23:32:00
有同感!覺得真的有差
作者: abccbaandy (敏)   2017-12-01 23:39:00
覺得新人考這個OK,都工作幾年了還考實在沒意義
作者: Hevak (Arthow Eshes)   2017-12-01 23:57:00
很蠢的錯誤那點以你舉的例子一般應該可以直接用靜態分析類的工具 (linter) 去處理掉至於結構乾不乾淨那個就當然又是另外一個話題...
作者: s89162504 (阿本)   2017-12-02 00:20:00
大概只有第四點比較可信啦 練過解題的人完全不害怕讀別人的code第二點純屬唬爛 做design跟演算法完全是兩回事
作者: fake01 (假面超人)   2017-12-02 00:23:00
訓練腦袋,覺得很好
作者: fishlinghu (令狐瑜)   2017-12-02 07:26:00
裡扣對新手來說是有用 但是我覺得對工程師沒啥用建議你工作找到之後就別再刷了 趕快把你說沒學過的領域補好 一直刷下去沒意義你真的要寫扣 應該要做些專題 用正規的開發方法練習像是版本控制 還有寫test code 之類的
作者: monoceros629 (獨角獸)   2017-12-02 09:22:00
我覺得刷leetcode 很有趣啊,不為了什麼。無聊的時候就刷一下。練出來的功力,會自然在每個小地方顯現
作者: bluebluelan (新陰流大目錄免許皆傳)   2017-12-02 12:23:00
豪豪 人家面我都只跟我聊天不考刷題QQ
作者: abccbaandy (敏)   2017-12-02 14:32:00
樓上才是正確的吧...現在全民刷題的歪風不知道啥時能結束
作者: sorryla (Mr.東)   2017-12-02 15:15:00
G社的學長說,連刷題你們都刷不好,你要怎麼說服人家你強
作者: ChoDino (Dino)   2017-12-02 17:01:00
工程師演算法資結不搞好,老是談架構說空話才是歪風吧刷題真的是打好基礎的好方法,也是公司最難訓練人的部份那些工具、套件,使用方法,教育訓練一下不怕人學不會
作者: s860134 (s860134)   2017-12-02 17:09:00
基本功扎實,剩下都可以從古哥找到答案
作者: abccbaandy (敏)   2017-12-02 18:04:00
架構是不是空話,不就是面試官要想辦法問出來的?一進去面試不管三七二十一先來排個樹根本是偷懶吧當然面試官也很辛苦,很多事都做不完了還要被抓去面試
作者: sunsamy   2017-12-02 18:14:00
刷題真的是歪風,不切實際的成份大
作者: NCUking (中大王)   2017-12-02 18:36:00
G收了一堆ACM戰神 等戰神當了面試官 自然而然想到考解題頂尖公司就算了 反正面試官自己是神手 可以自己想題目一般跟風的公司 面試官只會從CTCI抄題目跟看解答
作者: strlen (strlen)   2017-12-02 19:24:00
台灣90%的程式需求大概都用不到資結和演算法當然我說的是leetcode那種的 廣義來說 你隨便寫個if else都算演算法啦 XD
作者: menshuei (紅茶)   2017-12-02 19:41:00
我覺得台灣的話老闆是喜歡幫公司多賺錢的
作者: EngRookie (EngRookie)   2017-12-02 20:01:00
要看產品啦...沒有好的演算法跟資結是要逼死維護的人嗎
作者: sunsamy   2017-12-02 20:16:00
樓上邏輯有問題,好維護是看軟體工程與架構,初階的level通常會認為演算法跟資料結構會比軟體工程與架構來得重要事實上很多可用的演算法與實作的資結上網抄就有了
作者: ku399999   2017-12-02 20:55:00
刷題不是歪風,把刷題當唯一指標才是歪風。我覺得有經驗後也不代表這些不重要
作者: jj0321 (JJ與你倒數唷)   2017-12-02 21:25:00
南部公司: 什麼是leetcode ?? acm解題是什麼?
作者: jazzter (阿里巴巴你媽媽)   2017-12-02 23:01:00
推推,請問最後去哪
作者: TAKADO (朕沒給的你不能搶)   2017-12-03 10:11:00
偶而刷題可以訓練思路跟看看不同的解法,但只刷題卻不願意花點時間讀書學新技術卻有點本末倒置。另外我有遇到幾家國外中型公司是面試前直接給你一個半成品solution跟一張需求列表,裡面是公司用的技術跟常遇到要實作的功能,24小時之內能做多少算多少。我覺得這種比較有意思,看得出考官的用心。也能看出考生對不熟的套件/框架看懂技術文件的能力
作者: senjor (哞哞)   2017-12-03 12:20:00
其實我一直覺得對會寫程式的人來說,Leetcode之類的就算到Hard也只是花的時間的多少還有要把它整理多乾淨的差別而已看過問人家Leetcode能寫到什麼程度的題目算是最奇怪的問法就好像幾個號稱自己會游泳的人互相問說你能游幾百米一樣怪當然,不過這就是說解法多漂亮,而不是說能解到多難的題目
作者: sppqre (山中練腦殘)   2017-12-05 08:10:00
推分享
作者: THEWORLDS (天下)   2017-12-05 10:20:00
刷題是最基本的 前面要練的思考邏輯很重要

Links booklink

Contact Us: admin [ a t ] ucptt.com