以下是我读完本书职业方面整理、归纳后结合自身经历得出的一些建议。

#1 远离苛性碱

有时候你会发现,有的人不管怎么样就是无法相处,有的人就是抓住一切机会贬低别人,对生活中的一切抱有消极态度。我把他们称为“苛性碱”,你最好避开他们。 如果你意识到某个人就是所谓的“苛性碱”,不要试图去改变他们,也不要试图去和他们打交道,就让他们停留在自己的轨迹上,你所要做的只是尽量限制自己与他们互动。你会发现“苛性碱人”所过之处痕迹明显,他们似乎总是卷入某种形式的悲剧之中,总是有不幸的事件发生在他们身上,他们老是把自己扮成受害者。如果你发现这种迹象,赶快跑——有多快跑多快。

对这部分人也包括一些并没有贬低别人只是无法正常沟通的人,我一直是执行三分钟原则。我只跟你聊三分钟:要么你说服我,要么我说服你。如果超过三分钟没有任何结果,我会停止无用功。因为我们当前的认知可能不在同一水平,甚至差距很大。或许几年之后我们才会意识到,当初对方或是自己是对的。

如果在这基础上还有贬低别人的习惯或是各种负能量,还是远离比较好。

#2 记录与人打交道的每一个事件

这个并不是日记,我也是在最近才了解到个人CRM方面的东西。简而言之就是:人际关系是需要培养的。而且今非昔比,人员流动很大,每天会遇到同事、朋友、同学等等。把与他们的交流方式(电话?面谈?邮件?)以及内容记录下来,并定期回顾,方便你对自己人际关系有一个比较好的掌控。

我目前在试用的个人人际关系管理工具是Monica,代码开源在Github。可以自己部署,也可以直接花钱买服务。我是直接使用他们的服务,5美元/月订阅制。需要一定的时间来养成习惯。

#3 建立人际关系

如果你想在同一时间里与一批人建立关系,不妨试试加入本地用户组。许多开发人员用户组通常会每周或每月聚会。如果你成为定期参加者,特别是如果你做一些报告,那你就能很快与本地公司的开发人员和招聘经理们建立起联系。

之前有参加过几次meetup,hackthon。其中质量比较高的是Google的GDG和AIB的DataHack。定期参加技术meetup确实可以帮助建立高质量的人际关系。

#4 知道公司想招什么样的人?

知道的东西可以少一点,但是明确知道要做什么,以及怎样去做。

这一点我也是深有感触。去年在亚麻实习结束以后拿到了转正许可,我也和Mentor聊了一下为什么给我转正。他说,我们想要可以独立开展工作的人,哪怕你只是实习生。当然,接到任务有很多东西不懂很正常,但你经过同事的指点可以迅速独立工作。而且大部分资料或者难点、需要的工具、权限等等,都可以自己通过内部wiki查询,或者搜索其他人做过的类似工作和package,而不是处处问Mentor这一步应该怎么做?

要有独立解决问题的能力。

#5 花时间提升自己

确保自己一直阅读技术书籍和博客文章,并会花些时间提升自己的技能。

我的Chrome浏览器里存了不少技术博客,常去的会直接RSS订阅,并在iOS Reeder上利用碎片化时间去看。同时也买了O’Reilly的Safari年费学生会员,可以随时看动物书系列。后面我可能会单独写个博客整理并分享一下我目前订阅或者常去的技术博客。

书中提到的另一个提升方式是读一个学位。我申请了UCD的Part-time Master in Computer Science,两年制。业余也有上Coursera上面的课程,后面我也会整理并分享一下已经上过的课程。

目前你正在自己学习些什么?确定要自学的最有价值的东西是什么,制订一份下一年的自学计划。

  • TODO:入职后列一个一年期的学习计划。

#6 面试需要练习

即便你现在对换新工作毫无兴趣,为了获得面试经验,你也要去面试。练习得越多,你在真正的面试时也就越游刃有余。

我上个月还挺奇怪,有个同学已经签了某公司了却还时不时去其他公司面试,可能他就是为了练习吧。
不过我个人对这条建议还是持保留意见,总感觉不以换工作为目的去面试对目前的雇主和面试官都是耍流氓减分的。大家怎么看?

#7 面试也有套磁儿

即使你现在不需要努力找工作,也要整理一份清单,列出你想去工作的公司,以及你认识的这些公司的人。 在这份清单上的公司里,如果有的公司你一个人都不认识,那么制订计划至少去认识这些公司中的一位员工,并与之建立联系。

其实作者在书中讲了他本人在这方面的实施方法:确定目标公司;了解到该公司很多开发人员有写技术博客的习惯;去阅读他们的技术博客,并留下深思熟虑的评论;时间久了可以混个脸熟;面试时胜算大了很多。

#8 给别人打工/做咨询/创业?

对大多数软件开发人员而言,特别是在职业生涯的起步阶段,做一名雇员是明智的选择。这个选择的风险最小,你不需要具备大量的经验。我倾向于认为:做一名雇员就像当学徒一样。即使你已经树立了“为自己工作”的志向,做雇员是学习并锤炼技能的良好起点。

书中列举了软件开发从业人员的三个主要方向,对每个方向也说明了优缺点。
从左至右:稳定性递减,自由度和风险递增。

#9 先做专业人才

专业化的规则是:专业化程度越深,潜在的机会就越少,但获得这些机会的可能性越大。

无论你做什么,首先确保你选定了某些专业方向。市场规模决定了你的方向有多么具体,所以一定要让它尽可能地具体。你会在这个细分市场上更抢手。别担心,如果你需要,随时可以改变

做专业人才还是全面人才一直都有争论,后来也有人提出先I型后T型,也就是先做专才,再从专业领域往其他方向延伸的想法。

很多软件从业人员对自己的定位是:Java程序员、C/C++程序员等等。书中的观点是这样的定位太宽泛,比如Java可能又分Java Web Services Developer、Java Component Developer、Java Persistence API Developer等等。如果你是Java Web Services方面的专才,那么对于Java Developer和Java Web Services Developer这两个工作机会,可能对后者有更大把握。

#10 做哪方面的专才?

在你现在或以前工作的公司里,有哪些主要的痛点?你能成为一名专门解决这些痛点的专家吗? 有没有一种特定的工作是无人能做,或者缺乏经验丰富的人?成为这个领域的专家,你就会获得大量业务。 在各种会议上和用户组中哪些话题最常出现? 哪类问题你回复的最多,无论是针对同事还是在Stack Overflow这样的网站上?

以上几条可以帮助大家找到自己专长的领域。

#11 在职场提高自己的曝光度

在任何公司里能让你脱颖而出的最重要法宝就是承担更多的责任。

主动去接一些issue和task,主动去发现团队或者项目中需要提高的地方、需要自动化的地方并assign给自己。

没有人愿意涉足的领域是搜寻机会最好的地方。可能有一个没人愿意碰的遗留应用,或者代码库里的某个特别令人讨厌的模块。正因为没有人愿意碰,所以你也无需去抢,这些就成为你日益强大的帝国的领地。如果你能把沼泽变为良田,你也就展现了自己的价值。

另一种间接承担责任的方式是成为团队中其他人的导师,自愿帮助新人加速成长,为任何有需要的人提供帮助。通过介入和解决别人的问题,你不仅可以学到更多自己专业之外的知识,而且随着时间的推移,你还能在团队中逐步树立“及时雨”的名声。最终,这样的声誉可能会令你成为团队领导或者其他管理职位,只要你愿意走这条路。

敢挑重活儿难活儿可以提高自己的不可替代性。
现在很多公司都有Mentor制度。

每天都记录自己的活动日志——把这个日志以周报的形式发送你的经理。 提供演讲或培训——选择一个对你的团队有用的话题。 发表意见——只要在会议上就这么做,或者只要你能得到的机会就这么做。 保证“曝光度”——定期与老板会面,确保你经常被注意到。

实习时所在的组就有每周发周报的要求,可以让领导看到你的performance。

还有一点书中提到但是我忘记标记的就是技术分享,做技术布道者。实习时所在的组有一个印度同事,平时很喜欢给新人做技术分享(他当时没有做Mentor),也经常在家录制技术教程的视频发布在内网。那么我作为团队新人,对其他同事都不是很了解的情况下,最常接触的就是他,Mentor不在有问题就问他。这可能就是书中提到的曝光度。相比之下,那些平时不怎么说话、不怎么做技术分享的同事,我要花很久的时间才能记住他的名字 :p

#12 每日站立会议中的习惯

有一次我在一个遵循Scrum过程的团队工作时,每天我们都有“每日站立会议”,说明自己已经做了什么、计划做什么、有哪些障碍。有位开发人员很特别,他总是提前写好要说的内容。每天在Scrum会议之前,他都会准备好自己的发言,而不是像我们大多数人那样开会时随口说。这是专业开发人员要养成的习惯。

说实话这一点我之前做的不好。开站立会议前没有做准备,直接导致的问题就是快轮到我的时候我在想怎么说,没有认真倾听前两个同事讲的内容。如果第一个就轮到我,很可能就边想边说了,结果就是当天的实际工作比我开会时说的其实多得多…

当然也不是每个人都有这个习惯,大概有一半的同事是提前准备好小纸片或者记录在手机上的。值得学习!

  • TODO: 每日站立会议前要提前计划今天、总结昨天的工作

#13 专业人士的时间管理

作为一名专业人士需要养成的另一个强大的习惯是时间管理技能。目前你擅长管理自己的时间吗?每天在开始工作之前你知道自己要做什么吗?你能很好地掌控日常任务所需的时间吗?每天提前做好计划,就能养成有效管理时间的习惯。专业人士知道每天必须要做什么工作,并且能估算出每项工作大约要花多长时间。

这里面最难的就是估算每项工作大约要花多长时间。两个极端就是要么对任务执行时间估算过长,出现大片空白时间;要么低估了任务难度,导致每天都有overdue的任务。

需要一定的时间了解自己的效率,以经验去评估任务所需时长。

#14 学会说不

一位专业人士需要知道在什么时候说“不”,即使是面对自己的老板。

书中提到的一个例子是:有个病患胳膊受伤了,本人要求截肢。但如果你是医生,经过评估后觉得可以不截肢,要学会说不。

当然这也取决于企业文化,有些公司是鼓励质疑的。专业人士应该坚持正确的决策。

#15 请勿陷入对某项技术的狂热之中

不是所有的技术都是“伟大的”,但多数被普遍应用的技术至少是“好的”。

当一个人喜欢某个编程语言或者框架,可能会偏执的认为这是最好的选择。比如在各种技术社区你常常会看到:PHP是世界上最好的编程语言!

要根据任务需求、人力情况、社区活跃度等等,选择最合适的技术。

#16 对技术保持开放的心态

如果你愿意对技术保持开放的心态,而不是固守自己已经了解的技术,声称它是最好的,你会发现有更多的机会为你敞开大门。

技术迭代是非常迅速的,软件从业人员要保持开放的心态,接受并学习新技术,做到终生学习。

延伸阅读

书中推荐的读物有:

  • 人性的弱点 - How to Win Friends and Influence People
  • 优秀到不能被忽视 - So Good They Can’t Ignore You
  • 精益创业 - The Lean Startup
  • 驱动力 - Drive: The Surprising Truth about What Motivates Us

书中关于职业部分还有与创业、产品相关的建议,我目前还没有接触这方面的东西,暂时不列入。