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

看板Soft_Job作者 (Yuho)時間8年前 (2017/12/01 22:06), 8年前編輯推噓28(28034)
留言62則, 26人參與, 8年前最新討論串1/1
其實沒想過我有機會在軟體版發個文 畢竟大學是商科畢業的 但因緣際會 走上了第1001個電腦科學的路 背景什麼的在留學版也有分享過就不贅述 寫在前面 這篇是主要給轉專業 或是基礎不甚扎實的人一些建議 主要談的是很多人口中不恥的 “刷”Leetcode 首先我很感謝Leetcode 不是因為它讓我進了不錯的公司 而是他幫我一步一步地領進 從 “了解問題”到“設計程式結構” 最後利用演算法與資料結構來實現一個問題的解法 事情都有兩面 端看自己怎麼想 有人覺得刷題對提升能力沒幫助 只是照本宣科 公司還這樣考根本亂搞 但我覺得我的收穫可以完全從另一面來解讀 條列這半年寫Leetcode的收穫 如果你要笑我連這些都不知道 怎麼念電腦科學 我只能說 誰沒有學習的過程? 我晚了兩年不代表我不能學 也不代表我以後不會變厲害 1. 看到一個問題我開始思考要用手上的什麼演算法與資料結構來解 這件事情跟工作我想是一樣的 工作有目標 無論是解蟲 或是產品設計 或是改善某種效能 都是利用已知的知識 加上手邊人家寫好的Lib 最後實作並達到解決問題 這個流程跟寫Leetcode如出一徹 只是他把題目的範圍減小的 變成一個相對簡單但基本核心概念一樣的過程 2. 寫出簡短易懂解不重複有架構的程式碼 因為短時間時間的壓力 很多時候我開始理解到與其一見到題目 有了最粗淺的想法以後 直接開始寫程式碼 後來因為沒有好好的重複利用 導致原本30行可以解決的硬是被我寫到了50行 (如果變成大型程式 3000 -> 5000不是鬧著玩的) 不如靜下心 把心裡面的想法通通整理成可各自調用的區塊 然後一步步一步實現 這樣好找問題 以後也較簡單修改 3. 擁有改進效能、可讀性、多方面思考的直覺 很多時候題目一下就可以想出一個可行的解法 但很多時候內心就開始挑戰自己 或是有個直覺就開始說 “這個感覺就有更好更快的解法” “用這種方法感覺能解 但另外一種應該也能 好處分別是... ...” 當開始出現這種感覺的時候 就往前踏了一步 不滿足於現在的效能 或想要用更好的方式解決問題 這不是大家心目中“好工程師”該具備的能力嗎? 同時也讓自己在看解答以前 多思考多想 我的確有曾經寫過比第一名投票還容易懂 然後行數更少 並且擁有同樣效能的碼 如果我直接看答案 我就寫不出來了 4. 閱讀理解別人程式碼的習慣 看別人的碼 理解別人的邏輯不簡單 擁抱開源更不簡單 但是在參考別人解答的時候 就默默無形訓練了這種習慣與能力 同時也會知道自己的程式在哪裡該加註解 命名怎麼命最容易懂 哪裡不要用太過於簡短的簡寫 才方便閱讀 5. 正確無誤的寫出20 - 30 行程式碼 因為要求的緣故 我們常常無法寫到一半看寫得對不對 所以會要求一次寫成功 這種訓練讓我在現在Project的實作上 程式碼的出錯率小了很多 不太會忘了宣告、加分號 或結構混亂 導致出一些很蠢的錯誤 這樣對以後寫大型開發程式的時候 效率有絕對的幫助 6. 實作的能力 與自信 很多時候有 有想法不代表能夠寫出來 而這也的確是我曾經最害怕的一塊 我不知道怎麼實作我的想法 但是寫題目寫久了 開始慢慢發現自己的思考已經往確定實作的方向想的時候 就開始累積自信 知道自己一定實作的出來 只是要花時間想與學 這種自信與能力 無論對哪個產業我相信都是滿好與滿重要的 (機械設計我相信也是這種概念) 目前大概是這幾點的收穫 花了我大約半年的時間 我只能說 寫Leetcode的確是對轉專業的我擁有極大的收穫與幫助 我也不覺得自己是只會寫題目而不會解決問題 畢竟我所有寫的過程 都是在解問題 而非背答案 寫在後面 很多人覺得大家都一窩蜂了轉來電腦科學是追求熱潮 認為好好刷題就可以進到大公司的策略根本扭曲了電腦科學的本質 甚至覺得很多人只會刷題根本不會利用手邊的工具解決碰到的難題 轉專業就是比本科差 我想講的是 很多時候不是我們笨 而是我們待的時間不夠久 導致很多東西沒經驗 系統、結構、網路、IO這些東西都不會 但學無止盡 只要願意一步一步走下去 十年後 我們也跟大學畢業六年的本科生寫程式的時間一樣久 只要付出足夠的努力 我們也不會比本科畢業的差到哪裡去 人都不是笨 願不願意學與花時間而已 -- ※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 173.62.252.231 ※ 文章網址: https://www.ptt.cc/bbs/Soft_Job/M.1512137217.A.DBF.html

12/01 22:39, 8年前 , 1F
12/01 22:39, 1F

12/01 22:50, 8年前 , 2F
12/01 22:50, 2F

12/01 23:21, 8年前 , 3F
解題和架構差蠻遠的,尤其對完整的系統來說。
12/01 23:21, 3F
哦喔我指的不是system design 我指的比較類似function 的設計 有解過題的跟沒解過題的 function寫法差很多 system design 的東西我還沒接觸到也還沒學 不能亂講

12/01 23:32, 8年前 , 4F
有同感!覺得真的有差
12/01 23:32, 4F

12/01 23:39, 8年前 , 5F
覺得新人考這個OK,都工作幾年了還考實在沒意義
12/01 23:39, 5F
的確 有經驗了都不是處理leetcode上這屁點大的事

12/01 23:57, 8年前 , 6F
很蠢的錯誤那點以你舉的例子一般應該可以直接用靜態分析
12/01 23:57, 6F

12/01 23:57, 8年前 , 7F
類的工具 (linter) 去處理掉
12/01 23:57, 7F
長知識了!謝謝

12/01 23:58, 8年前 , 8F
至於結構乾不乾淨那個就當然又是另外一個話題...
12/01 23:58, 8F

12/02 00:20, 8年前 , 9F
大概只有第四點比較可信啦 練過解題的人完全不害怕讀
12/02 00:20, 9F

12/02 00:20, 8年前 , 10F
別人的code
12/02 00:20, 10F

12/02 00:22, 8年前 , 11F
第二點純屬唬爛 做design跟演算法完全是兩回事
12/02 00:22, 11F
我不是講design啦哈哈 那個很難還需要多磨練 我也在增進那塊的知識 我指的是code的一些比較基本的寫法以及分類

12/02 00:23, 8年前 , 12F
訓練腦袋,覺得很好
12/02 00:23, 12F
※ 編輯: edwardboy26 (165.123.107.15), 12/02/2017 01:29:32

12/02 07:26, 8年前 , 13F
裡扣對新手來說是有用 但是我覺得對工程師沒啥用
12/02 07:26, 13F

12/02 07:27, 8年前 , 14F
建議你工作找到之後就別再刷了 趕快把你說沒學過的
12/02 07:27, 14F

12/02 07:27, 8年前 , 15F
領域補好 一直刷下去沒意義
12/02 07:27, 15F

12/02 07:28, 8年前 , 16F
你真的要寫扣 應該要做些專題 用正規的開發方法練習
12/02 07:28, 16F

12/02 07:29, 8年前 , 17F
像是版本控制 還有寫test code 之類的
12/02 07:29, 17F
Leetcode只是電腦科學的一小部分 只是恰好工作對這小部分要求 找完了工作就該好好回頭補知識跟能力了

12/02 09:22, 8年前 , 18F
我覺得刷leetcode 很有趣啊,不為了什麼。無聊的時
12/02 09:22, 18F

12/02 09:22, 8年前 , 19F
候就刷一下。練出來的功力,會自然在每個小地方顯
12/02 09:22, 19F

12/02 09:22, 8年前 , 20F
12/02 09:22, 20F

12/02 12:23, 8年前 , 21F
豪豪 人家面我都只跟我聊天不考刷題QQ
12/02 12:23, 21F

12/02 14:32, 8年前 , 22F
樓上才是正確的吧...現在全民刷題的歪風不知道啥時能
12/02 14:32, 22F

12/02 14:32, 8年前 , 23F
結束
12/02 14:32, 23F

12/02 15:15, 8年前 , 24F
G社的學長說,連刷題你們都刷不好,你要怎麼說服人家你強
12/02 15:15, 24F

12/02 17:01, 8年前 , 25F
工程師演算法資結不搞好,老是談架構說空話才是歪風吧
12/02 17:01, 25F

12/02 17:02, 8年前 , 26F
刷題真的是打好基礎的好方法,也是公司最難訓練人的部份
12/02 17:02, 26F

12/02 17:04, 8年前 , 27F
那些工具、套件,使用方法,教育訓練一下不怕人學不會
12/02 17:04, 27F

12/02 17:09, 8年前 , 28F
基本功扎實,剩下都可以從古哥找到答案
12/02 17:09, 28F

12/02 18:04, 8年前 , 29F
架構是不是空話,不就是面試官要想辦法問出來的?
12/02 18:04, 29F

12/02 18:06, 8年前 , 30F
一進去面試不管三七二十一先來排個樹根本是偷懶吧
12/02 18:06, 30F

12/02 18:07, 8年前 , 31F
當然面試官也很辛苦,很多事都做不完了還要被抓去面試
12/02 18:07, 31F

12/02 18:14, 8年前 , 32F
刷題真的是歪風,不切實際的成份大
12/02 18:14, 32F

12/02 18:36, 8年前 , 33F
G收了一堆ACM戰神 等戰神當了面試官 自然而然想到考解題
12/02 18:36, 33F

12/02 18:37, 8年前 , 34F
頂尖公司就算了 反正面試官自己是神手 可以自己想題目
12/02 18:37, 34F

12/02 18:39, 8年前 , 35F
一般跟風的公司 面試官只會從CTCI抄題目跟看解答
12/02 18:39, 35F

12/02 19:24, 8年前 , 36F
台灣90%的程式需求大概都用不到資結和演算法
12/02 19:24, 36F

12/02 19:26, 8年前 , 37F
當然我說的是leetcode那種的 廣義來說 你隨便寫個if else
12/02 19:26, 37F

12/02 19:26, 8年前 , 38F
都算演算法啦 XD
12/02 19:26, 38F

12/02 19:41, 8年前 , 39F
我覺得台灣的話老闆是喜歡幫公司多賺錢的
12/02 19:41, 39F

12/02 20:01, 8年前 , 40F
要看產品啦...沒有好的演算法跟資結是要逼死維護的人
12/02 20:01, 40F

12/02 20:01, 8年前 , 41F
12/02 20:01, 41F

12/02 20:16, 8年前 , 42F
樓上邏輯有問題,好維護是看軟體工程與架構,初階的level通
12/02 20:16, 42F

12/02 20:18, 8年前 , 43F
常會認為演算法跟資料結構會比軟體工程與架構來得重要
12/02 20:18, 43F

12/02 20:22, 8年前 , 44F
事實上很多可用的演算法與實作的資結上網抄就有了
12/02 20:22, 44F

12/02 20:55, 8年前 , 45F
刷題不是歪風,把刷題當唯一指標才是歪風。我覺得有經
12/02 20:55, 45F

12/02 20:55, 8年前 , 46F
驗後也不代表這些不重要
12/02 20:55, 46F
挺認同的

12/02 21:25, 8年前 , 47F
南部公司: 什麼是leetcode ?? acm解題是什麼?
12/02 21:25, 47F

12/02 23:01, 8年前 , 48F
推推,請問最後去哪
12/02 23:01, 48F
※ 編輯: edwardboy26 (158.130.211.65), 12/03/2017 02:09:10

12/03 10:11, 8年前 , 49F
偶而刷題可以訓練思路跟看看不同的解法,但只刷題卻不願意
12/03 10:11, 49F

12/03 10:11, 8年前 , 50F
花點時間讀書學新技術卻有點本末倒置。另外我有遇到幾家
12/03 10:11, 50F

12/03 10:11, 8年前 , 51F
國外中型公司是面試前直接給你一個半成品solution跟一張
12/03 10:11, 51F

12/03 10:11, 8年前 , 52F
需求列表,裡面是公司用的技術跟常遇到要實作的功能,24小
12/03 10:11, 52F

12/03 10:11, 8年前 , 53F
時之內能做多少算多少。我覺得這種比較有意思,看得出考官
12/03 10:11, 53F

12/03 10:11, 8年前 , 54F
的用心。
12/03 10:11, 54F

12/03 10:13, 8年前 , 55F
也能看出考生對不熟的套件/框架看懂技術文件的能力
12/03 10:13, 55F
這讓我想到的確有公司會給一份一個禮拜的project來當interview 但好公司會給錢 即便只是算時薪 這樣對雙方都有尊重 避免公司找到不厲害的人 也避免花了20個小時完成一個project 結果直接只收個thank you and wish you luck

12/03 12:20, 8年前 , 56F
其實我一直覺得對會寫程式的人來說,Leetcode之類的就算到
12/03 12:20, 56F

12/03 12:20, 8年前 , 57F
Hard也只是花的時間的多少還有要把它整理多乾淨的差別而已
12/03 12:20, 57F

12/03 12:21, 8年前 , 58F
看過問人家Leetcode能寫到什麼程度的題目算是最奇怪的問法
12/03 12:21, 58F

12/03 12:22, 8年前 , 59F
就好像幾個號稱自己會游泳的人互相問說你能游幾百米一樣怪
12/03 12:22, 59F
這個我想提些不同的觀點 有時候能夠看到leetcode上神人的解法 還是很興奮的 覺得天啊這種資料結構竟然有這種應用 到底他腦袋怎麼做的 最厲害的人是 用最簡單的資料結構 最簡單的語言 最簡單的算法 解一個大家都覺得超級難的問題 那種感覺其實滿好的XD ※ 編輯: edwardboy26 (173.62.252.231), 12/03/2017 13:46:10

12/03 14:00, 8年前 , 60F
當然,不過這就是說解法多漂亮,而不是說能解到多難的題目
12/03 14:00, 60F

12/05 08:10, 8年前 , 61F
推分享
12/05 08:10, 61F

12/05 10:20, 8年前 , 62F
刷題是最基本的 前面要練的思考邏輯很重要
12/05 10:20, 62F
文章代碼(AID): #1Q8M81s_ (Soft_Job)