由新手程序员留言想到的

来源:V型知识库 2017年10月12日 08:40 浏览:2712

前几日收到一条读者留言。看完之后让我觉得有很多话想说。加上之前后台也收到过初入职场的小朋友的类似的提问。所以,借着这个机会说一些我的想法和经历,希望对大家有用吧。


注:下面这段留言为征求其本人同意后引用。部分私人信息已经隐去。


“安姐你好。谢谢你经常总结分析工作中的那些事儿,每每读来都学到不少最近也碰到一个事情想问问你的意见。我一年前刚刚硕士毕业,虽然自己资历尚浅但很有幸加入了我们公司很厉害的一个组,除我之外就是一些工作了十多年的大牛。”


“但是前一段时间来了一个老板,他可能也是为了锻炼我一来就给我分配了一个很大的项目,然后要求我从设计到实现都自己负责。因为是第一次做这种大项目,我自己压力很大,虽然自己也努力在学,但还是有许多需要请教他们 Senior 的地方。可是 Senior 们最近也都有自己的很重要的活要干,我们组也没什么 Mentor 文化,连 Code Review 都基本没有,我就是有问题就去问他们,还好他们还是挺热心的。”


“但是我老板,每次和他一对一他就对我做的东西各种不满,然后我跟他说我觉得我可能需要 Senior 们更多的指导,他就说他们都有自己要忙的事,我现在要求你做的就是一个作为 Developer 应该做的最基本的事情。以及一些很打击人的话。然后就很push的给我一个 Deadline,比如多长时间一定要独立完成什么。他每次说完我都觉得自己跟个笨蛋一样啥也不会。我现在就觉得自己孤立无援,虽然在尽自己最大努力但也不知道能做到什么程度。”


其实这样的事情,我也有过特别类似的经历。我进入职场的第一家公司也是一家小公司(虽然现在已经快速发展成一个大公司了)。那个时候公司很多都是那些 Google 或创业公司等跳过去的资深的工程师,每个人都可以独当一面,独立开发简单 App 的老司机。而我当时是公司里面第二个校招生,也是第二个中国籍工程师。对于刚刚走出校门的我,在这样一个环境里工作,当时的压力是可想而之的。就像我在《女程序员成长二三事》中说的那样:


上班一个星期后,基本所有的自信都被一盆又一盆冷水浇的冰冰凉:你刚刚开始用 github,人家已经个人的 Github 上已经是好几个开源的库,提交了无数的代码了;你还在学 Ruby 的语法,人家已经是写过好几个 Gem,甚至是写过部分 Rails 源代码的; 你还在研究 Javascript 怎么在 Chrome 上 Debug,人家已经可以滔滔不绝的讲各种 JS Framework 的优劣比较,都哪个公司用了; 你还在想 Mango DB 和普通的 MySQL DB 有啥不一样,人家已经亲身经历,对 Mango DB 的各种问题如数家珍了; 你还在想 Haproxy 是干嘛的,人家已经不能理解为啥还有人不知道 Haproxy 。。。


刚从学校毕业的初生牛犊多少都有一些自己的骄傲的,总觉得和学校一样,不懂我慢慢学好了。可是公司会给你时间去学习每一样你不懂的东西么?理论上人家是支持的,实际上人家没给你留那个时间。所以最有效的办法可能就是跟别人请教,运气好遇到个牛人,一下子就把关键跟你说了,然后自己触类旁通和学校的理论知识挂钩,也可以很快熟悉起来。运气不好遇个就是讲不明白的,然后这方面你还就是一点底子没有,基本就是抓瞎的感觉了。


虽然说偶尔请教或者帮忙,大家都很 Nice。但是时间一长,可能 Senior 会不耐烦,可能自己会不好意思。也可能会像这位读者一样,遇到更直接的明示暗示,或是一些压力让自己觉得自己会不会搞不定。

觉得难的不止你自己


为什么说我自己的经历呢?当年我处在那个境况中的时候,也曾怀疑过,自己是不是天赋不够,或者动手能力不够强。虽然有周围的朋友一直给我鼓劲儿,但是心理上压力还是很大。总有种不知道多久才能像周围的人一样,熟练的驾驭每一种工具和语言。


所有的坎儿,都是等过去了,再回头,才会觉得:哦,就那么回事儿。


不管别人怎么说,其实我一直觉得,编程和开发是个 Learning Curve 开始时比较陡,后面会逐渐变平的事儿。什么意思呢?做开发,很多事情该怎么做,如果没有人认真教过你,你还真的就是不知道。常见的例子,怎么 Setup 开发环境;怎么做一些 Production 相关的 Ops,有哪些容易出问题的地方;怎么 Debug、怎么 Troubleshooting;怎么用一些工具,等等。有些事情,有经验的工程师,自己花功夫、查资料还是能搞定。但是对很多新手来说,往往有不知从何入手的感觉。


然而一旦掌握了各种基本技能,后面很多事情都能触类旁通。遇事也会冷静沉着。很多基本技能可以信手拈来,应对大部分情况就绰绰有余了。


也因为此,有一些人虽然对编程感兴趣,可是还没有入门,就觉得自己这也搞不定那也搞不定,早早就放弃了。其实对于任何公司的 Senior,带新人都应该是义不容辞的事情。试问谁不是从新人过来呢?那些新人不会的,谁又是从工作第一天就什么都会呢?


所以,在带新人的时候,首先第一条,不管他/她问了多么初级的问题,想想当初的自己。不妨在帮忙前先告诉他/她,这种问题一点也不傻。如果是遇到线上的问题来寻求帮忙,对方已经明显紧张了,先让对方不要太慌,没有咱解决不了的问题。


再从 Senior 的角度来看


不过反过来看,Senior 都有自己的事情,所以必须要把这种提供帮助的时间控制在一个范围内。从 Senior 的角度来说,也许新人几个小时搞不定的东西,但是自己几分钟就摆平了。但是过来人都知道,如果频繁地被一些随机的问题打断,即使是简单的 “举手之劳”,也会影响 Senior 自己的效率和思路。


所以,提供帮助,更多的时候,不是解决当前问题,而是如何帮助新人掌握独立处理类似的问题的方法。虽然这样的指导在最初几次会让 Senior 花费甚至更多的时间。但是,长期来说,双方都是受益的。


Senior 需要一个思维转换,就是从 “告诉别人怎么做”, 到 “告诉别人自己为什么这么做” 或者 “我为什么知道要这么做”。举几个常用的例子:

  • 这种问题可以试着 Google,网上会有很多很详细的答案。

  • 试着在公司内部的文档和 Slack 等上搜索关键词,看看是不是有人已经问过同样的问题。

  • 试着在代码临时加一些详细的 Log,看看具体是哪一步出错了。通常找到出错的地方,Fix 反而简单。之后再把临时 Log 去掉。有可能的话,也可以通过设断点。

  • 如果可能的话,写一个测试,去模拟你遇到的问题的输入和场景。在测试例中 Debug 通常要容易很多。

  • 自己列一个 List,觉得可能是哪些地方出问题,然后逐一排查,记下为什么是或者不是这个原因。如果还找不到问题,再去和别人讨论的时候,他们也知道你已经做过哪些尝试,更容易快速给出有用的建议。等等。


所以,即使是你一眼就看出问题所在,试着提供一些线索和思路让他/她自己去折腾试试。这种有的放矢的折腾的过程,对新人的学习和成长帮助更大。


公司可以提供的一些事半功倍的机制


好的机制,在很大程度上可以降低双方的开销:Senior 用在提供帮助上的时间和精力,以及 Junior 在摸索学习上花的功夫。举几个例子:


硅谷很多公司都会拿出前三周做 Bootcamp。这三周就是新人对公司系统的熟悉和培训。会有一些 Well Designed Toy Project 让新人练手、找感觉。每个新人会分配一个 New Hire Buddy,也就是一对一的 Mentor。大部分时候从相关组里抽出。而这个是 Senior 轮番来做的,一定程度上避免大家都喜欢问谁一个人问题的情况。Senior 也可以更好的做自己的进度安排。组里也会适当调整其期间的工作量和面试量。


或者 Hackpad,或者 Google Docs,或者 Slack。有一定的地方统一的更新、存储常见的 Setup 流程和问题的解决方案。这个极有用,很大程度让工程师可以 Self Service。当然,文档的维护需要一定的开销。但是这样的开销长期而言,相对随机的你问我答来说,准确性和时间利用率上都划算的多。而且如果是所有工程师共同自觉维护的话,每个人需要花的时间就会大大降低。


每个组设置 Oncall 或 Goalie,按周轮值。专门负责组里新人以及外组人的各种提问和寻求帮助。也有一些公司会有类似 Office Hour,功能类似,但是工程师每周集中抽出一到两个小时用于问问答。


还有一些相关的留言


还有一些相关的留言,顺便一起说说我的看法。


“和他说话,每次说完我都觉得自己跟个笨蛋一样啥也不会,什么都不懂。”


圈子呆久了,你就发现还真有那么些人,其实根本不算啥,但是说到他/她知道的那点事,就一副自己了不起的样子。或者是满口飙术语,然后 “你不会连这个也不知道吧” 的态度。所幸我身边这样的人还真不太有。(倒是在某微信技术群里遇到过,说别人 “你怎么连这种问题都问?” 的人。)


其实遇到这种人,呵呵一笑就好了。可能是因为他自己见识浅。技术分门别类,谁又能真的跨着好几个领域什么都精通呢?也可能就是一些技术人的坏习气,遇到个机会得瑟一下。不要在意就好。


其实真正的牛人,反而都很谦卑。


还有一个常见的疑惑:


“感觉我每天做的事情很杂,好想没什么意思。”


关于这一点,只说两条。


第一,公司里任何一个人,他/她每天做的事情不可能都是 “很有意义” 的。换句话说,打杂,其实是每个人每天工作必不可少的一部分。如果你真的觉得这件 “杂活” 对公司、对任何人都没有意义,那你需要跟老板沟通。但不要认为别人觉得你不重要才给你这样的活。


第二,其实小事、杂事也很能反映出一个人的能力,做事是不是稳妥。等别人认可你的能力了,自然会把更重要的任务交给你。如果你发现公司一个人承担的任务或项目越来越重要,除了可能机遇确实好些,是不是他/她也确实很好地完成了之前经手的每一件大事小事呢?


工程师的成长,一半是技术的成长,一半也是心理素质和心态的成长。相信自己,再加上努力不放弃,等过去了再回头,你会对着当初的自己微微笑的。


上一篇:  线程中断


下一篇:  面向对象设计原则理解