[心得] 北美 工作 转专业 浅谈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