zz分享一些经验

看到有很多被雷的话题(当然很多被雷者不是水平问题),忍不住想说几句,虽然在美国
很多人刷题进大公司,但能刷下来的就应该不笨。最近刚刚经历了一次久违了的Onsite
,虽然面的很差,但也有机会真实体验了一把招聘的具体流程,再结合最近的一些话题
,想说一些供新人们参考。
本人从后台到前端,涉猎范围很广,曾并行参加10多个项目(新开发和维护同时)。无论
到哪个项目,别说被雷,一旦进去,想出来都很困难。为什么呢,就是一句话,能出活
。我知道这里有太多牛掰的大公司,有的是钱,顾你是来做Research的,不是为了做具
体的产品,这种情况不是我要讲的。

其实找工作和实际工作真的是两回事。举个例子,算法很好,但那都是人研究完的,工
作中没时间冥思苦想这些东西,拿来用就可以了,如果你别出心裁弄出一些新东西,是
需要大量时间来检验的。作为一个Software Engineer,要做的是收集需求,设计并实
现它,最后保质保量产品上线。被雷的基本都是问题出现在设计和编码上,但设计和编
码其实也是不能分开来谈的。老司机们各有各的本领,这里只想给新手们一些提示。怎
么才能在工作中提高个人的开发效率呢,这里我只想说两点,一是工具,二是知识树。

首先谈工具,中国有句名言,叫工欲善其事,必先利其器。工具有很多,只有你会使用
的那些工具才是你的工具,宇宙飞船跑得快,可你不会开,就不能成为你的交通工具。
举个简单的例子,做Java基本都会用Eclipse或IntelliJ IDE,这些就是工具。比如纯粹
从Editor的角度考虑,用Eclipse写代码你会怎么用呢?我主要是使用它的Template,
Formatter,Column Edit, Multiple Cursor等功能。首先,Template不只是它自带的
for, while…… 等简单的Template,而是自己总结的Template,比如常用到的 logn的
算法模板,树形结构的模板,数据库操作的模板等等,这样你一个ctrl+space下去,几
十行代码出来了,还直接bug free,所以你一定要学会怎么写Eclipse的模板。记住,
不管你写的Code多么完美,都有可能存在Bug,还记得那个经典的(start + end) / 2的
问题吗?所以,开发中尽量用成熟的Code很重要。Formatter功能也是很重要的,很多
人都会在Code Review时被指出这样那样的问题,其实这是人最求美的本性,但写程序
时太关注代码格式就会效率很低,Check in之前按一下Ctrl+Shift+F就搞定了,项目不
同代码风格也不同,所以你要会修改Code Style的设置。Column Edit,很多时候你想
同时编辑一列;Multiple Cursor,你想同时选中多个相同的变量置换它…… 当然还有
很多其它功能,你需要会用。Java的设计为了解耦等用了太多的设计模式,所以设计一
个模块时也要考虑用好设计模式。但用得着每次都手写吗?不用的,你搜一下,插件能
够自动generate你要的模式的代码。同样,测试自动化的工具就更多了,但这些工具并
不能解决关键的东西,就是测试数据,因为它没智能到知道你想要测什么,如果你每次
测试都重新考虑Boundary,MAX,MIN…… 等Case,很容易遗漏,而且多几个项目同时做
,会被搞死的。那怎么才能高效呢?这也得靠模板(也有一些工具可以帮忙),你要有
自己总结的模板(当然很多成熟的团队都会有的),要在几分钟之内能够搞出来一堆的常
用Test case来,这样就能把更多的时间放在有意义的逻辑测试上。Don’t Repeat 
yourself,不是说说那么简单,需要下功夫的。还有,每天都要Login十多个这样那样的
系统和平台,如果UserID和Password一遍遍地敲,是不是很容易出错?多尝试几次就有
可能被锁,解锁很麻烦,有时候还要上级批准。其实用得着都记下来吗?当然不用,我
的解决方案是动动手写个Excel的小工具,每个Sheet一个Login,点一下按钮,就直接
启动浏览器或Remote desktop,自动输入密码,如果有需要还可以启动cmd,执行cd等
命令直接到达想要的目标页面或目录。不要小看这些,每天可以节省很多时间,还不用
费脑子记那些没用的东西,也不会出错。每天都发邮件对吧?是不是每天还要发报告?
顺便说一句,报告比写程序还重要。一不小心发错了,还会被批评很心塞。我的做法是
动手写一个Outlook的小插件,把自己的邮件模板都准备好,公司内部的,外部的,各
个不同项目的,日报,月报,婚丧嫁娶等等模板都有,到时候一个按钮,全出来了。送
信时自动检查TO,CC,BCC,自动检查语法错误,防止误送。所以处理邮件根本不费多少
时间,也用不着一遍遍检查。当然你可以利用的工具太多了,这里只是抛砖引玉。从SF
到NY,可以步行,可以骑车,可以驾车,也可以坐飞机,工具不同,用的时间也不一样
,这个就不用解释了吧。为什么很多人天天加班还干不完活,而有人每天不加班也能干
完活,是因为聪明和笨吗?

其次谈谈知识树,这个是随便起的一个名字。我的理解是其实每个人的知识体系就像一
棵树,时间越久,这棵树就越大,信息量也越大,而查找这棵树的时间就越长。这棵树
就像是字典一样,有经验的程序员每天维护的是这个字典的Index,新手维护的是每个
具体的单词和解释。都知道程序里有reference和具体Implementation的区别,老司机
也记很多东西,但他记得是Reference,就是知道做什么事用什么方法,而不是具体怎
么去实现,因为太多了;而新手记得是怎么具体去实现,但他知道的东西很少。比如一
个项目中出现一个取前k个最大最小值的问题,老司机很快从自己的模板库里找出了最
大堆最小堆或其它自己总结的代码,稍加修改完成了。新手呢,一旦有了思路,也不费
劲,凭借自己的记忆也可以轻松敲出来具体实现。但如果这样的问题经常出现,新手也
变成老手,不会从头敲代码了,只不过有人会从以前的代码里拷贝粘贴,有人却加入了
自己的知识树(代码的话大多是模板),拷贝粘贴的人换了公司或项目就不灵了,而时
刻更新自己知识树的人无论到哪里都能吃的开。所以有人刷题三千,每道题可以倒背如
流,但实际工作中还有可能被PIP;而注意总结的老司机面试中吭吭唧唧也没写出Bug 
free的最优解,但实际工作却可以轻松搞定,因为他知道这个问题可以在哪里找到解,
或者说以前那个项目遇到过同样的坑,信手拿来轻松搞定。所以作为新手,在工作中要
不断完善自己的知识树,而不是单纯地为解决问题而解决问题,这样才能变被动为主动
提高实际工作效率。你是不是还有过这样的经历:A项目中遇到一个棘手的问题,自己
上网找资料好不容易搞定了,可B项目中也遇到了同样的问题。这时候有两种结果,一
种是你还是用差不多的时间重新调查,一种是你轻松找到了以前的总结几乎不用费事就
轻松搞定。如果你是第一种,就应该考虑一下是不是该换一换干活的方式了。前几天第
一次在三藩打车,早上上班高峰时间,在101号线和92号线的交叉处,很多车堵在92号
线上的出口排队,我很担心时间,那个出租车司机笑着说不用担心,你看很多人在这里
傻傻排队,其实用不着,于是他熟练地绕了个圈,1分钟不到就轻松下了FWY,你知道他
是怎么做的吗?

当然,最重要的因素还是你有没有真的投入到你的这些项目里。如果你觉得工作内容简
单重复或技术陈旧而没有热情,那是无论如何也做不好的,尝试拥抱你的工作,而不是
单纯地认为公司这不好那不好,一心想刷题跳出去,其实换个地方你会发现都一样,没
有几个地方让你整天烧脑子。说实话,那些Offer收割机们不一定能做好项目,有几个
天天研究和工作没有关系的问题用哪种算法最好的程序员会有“闲暇时间”来思考怎么
干好手里的活呢?所以我以前招人的时候,第一考虑的是态度。那些态度不好,牛气哄
哄的技术再好也不要,再好的牛,不和你一起使劲有什么用?

说了这么多,只是想给新手一些提示,三人行必有我师,还得取长补短, 向大家学习。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值