【软技能 代码之外的生存指南】读书笔记

非常好的一本书,即使不是程序员,也应该读一读。


更新历史

  • 2016.12.10: 完成初稿

职业

这里说的『优秀的软件开发人员』是那些能够把控自己职业生涯、达成目标、享受生活的人。

  • 如何管理职业生涯,如何在职业生涯中做出正确选择
  • 如何以更好,更有效的方式学习,以及如何尽可能富有成效,以及在缺乏动力而心灰意冷的时候该如何去做
  • 有关理财的基础知识,有关身心健康的基础知识

你所能犯的最大错误就是相信自己是在为别人工作。这样一来你对工作的安全感已然尽失。职业发展的驱动力一定是来自个体本身。记住:工作是属于公司的,而职业生涯却是属于你自己的。

从非同凡响开始:绝不要做他人都在做的事

把自己当作一个企业去思考时,才能开始做出良好的商业决策。想想自己有什么可以卖,我的产品和服务是什么。

  • 专注于你正在提供怎样的服务,以及如何营销这项服务
  • 想方设法提升你的服务
  • 思考你可以专注为哪一特定类型的客户或行业提供特定的服务
  • 集中精力成为一位专家,专门为某一特定类型的客户提供专业的整体服务(记住,作为一个软件开发人员,你只有真正专注于一类客户,才能找到非常好的工作)

采取行动

  • 想象一下:有一家企业,拥有某个产品或服务。他们将如何推广这一产品或服务从而可以做到卓尔不凡?
  • 如果只用一句话来描述你能为潜在雇主或客户提供怎样的特定服务,这句话是什么?
  • 把你的职业当作是一个企业,将会影响你的:
    • 工作的方式
    • 处理自己的财务的方式
    • 寻求新工作或新客户的方式

思考未来:你的目标是什么

无论因为何种原因你没有为自己的职业生涯设定目标,现在都是时候设定目标了。不是明天,也不是下周,就是现在。没有明确的方向,你走的每一步都是徒劳的。不要随心所欲地生活,不要随遇而安地行走在职业生涯的漫漫长路上。

大目标并不需要那么具体,但是必须足够清晰。你应该定期追踪并更新自己设定的目标,必要时还要调整。

采取行动

  • 坐下来,为你的职业生涯设置至少一个大目标
  • 将大目标分解成相应的若干小目标,例如:
    • 月度目标
    • 周目标
    • 每日目标
  • 把你的大目标写在自己每天的必经之地,每日三省吾身——我在追求什么

人际交往能力:远比你想象的重要

需要特别留意的点

  • 每个人都希望感到自己很重要
    • 我们常常容易犯的一项错误就是,轻率地否决同事的想法,以便于可以提出自己的想法,但这样让他们感觉自己是无足轻重的,会起反效果
  • 永远不要批评,用表扬代替批评
    • 奖励积极行为要比惩罚消极行为有效得多
  • 换位思考
    • 思考对他人而言什么才是最重要,什么才是他们需要的
    • 直接告诉老板你喜欢的实现功能的方式是不明智的,而应该说明这样实现功能对他所带来的帮助
  • 避免争吵
    • 逻辑和纯粹的理性不足以说服人,有的时候退一下也无所谓,但是可以赢得不可估量的尊重

破解面试之道

  • 大多数面试官决定雇佣某个人是基于各种各样的非技术因素
  • 通过面试最快捷的方式是让面试官对你怀有好感。达成该目标有很多方法,其中大多数可以在面试之前完成
  • 从期待加入的公司里找到联系人 -> 与该联系人建立紧密关系 -> 获得个人推荐 -> 面试
  • 集中经历推销自己会对你大有裨益

公司与公司是不一样的

  • 小公司
    • 优点:承担多种职责,灵活的角色转换;对工作的影响较大;回报潜力大
    • 缺点:没法安静下来写代码;工作在众目睽睽之下;稳定性差
  • 中公司
    • 优点:工作稳定;加班较少
    • 缺点:变化很慢;没有机会使用前沿技术
  • 大公司
    • 优点:完备的流程和规范;培训机会多;大型有影响力的项目
    • 缺点:官僚主义;只负责代码库的一小部分;很难获得关注

攀登晋升阶梯

  • 承担责任
    • 承担更多种责任看起来显而易见,但在职业生涯中,经常会面对更多金钱还是更多责任的选择。至少从长远来看,正确的选择几乎永远是更多责任
    • 有一个不受重视的项目,你能去负责它吗?
    • 你能帮助团队里的信任快速成长吗?
    • 你能负责文档制作流程,并保证及时更新这些文档吗?
    • 哪些工作是没有人愿意去做,你愿意承担起来,并将其简化或者自动化的?
  • 引人注目
    • 周报是让领导关注你的方式之一
    • 每天都记录自己的活动日志 —— 把这个日志以周报的形式发送给你的经历
    • 提供演讲或培训 —— 选择一个对你的团队有用的话题
    • 发表意见 —— 只要在会议上就这么做,或者只要你能得到的机会就这么做
    • 保证『曝光度』 —— 定期与老板会面,确保你经常被注意到
  • 自学
    • 不要只学软件开发,领导力、管理和商科同样重要
    • 不要忘记分享自己学到的东西
  • 成为问题的解决者
    • 成为永远能为各种问题找到解决方案的人,成为勇于执行这些解决方案以获得成果的人
  • 关于政治
    • 脚踏实地成为一个真正有价值的员工要比弄虚作假好得多
    • 至少应该知道会发生什么,哪种人需要避开,哪种人永远不要有交集

成为专业人士

成为专业人士是一种心态。如果我们总是与恐惧、自毁、拖延和自我怀疑作斗争,那么问题就是:我们正在像外行那样思考问题。外行毫不起眼,外行废话连篇,外行屈从于逆境。专业人士可不这么想。不管怎样,他引人注目,他恪尽职守,他始终如一。

专业人士的品质

  • 遵守自己的原则
  • 专注于正确完成工作
  • 不惧怕承认自己错了,不会文过饰非
  • 持续稳定
  • 勇于承担责任
  • 时间管理技能
  • 追求品质,完善自我

请勿陷入对技术的狂热之中

  • 至少在历史的某个时间点,每项技术都被看作是那个时代里『好的』甚至是『伟大的』
  • 没有理由去强烈坚持自己选择的技术就是最好的,而轻视甚至无视其他技术

如何自我营销

自我营销的方式

  • 博客
  • 播客
  • 视频
  • 给杂志投稿
  • 书籍
  • 代码库
  • 技术会议

打造引人注目的品牌

品牌的四个要素:

  • 品牌所要传递的信息
  • 品牌的视觉符号
  • 品牌的一致性
  • 品牌的曝光率

创建大获成功的博客

  • 每一个在乎自己职业生涯的软件开发人员都应该投资创建一个博客。
  • 最大秘诀有且只有一个 —— 持之以恒
  • 创建一个流动的博客文章主题列表。每当有新想法,就把它添加到这个列表中
  • 善于运用社交媒体
  • 你的主要目标:为他人增加价值
    • 给人们想要的东西。弄清人们的真实想法,透过现象看本质
    • 把你工作成果的 90% 都做成免费的
  • 不要努力成为一个成功的人,而要努力成为一个有价值的人

学习

  • 通过动手实践和教会他人,我们能学得更好
  • 教育的首要目标,并不在于『知』而在于『行』

体系背后的逻辑

为了掌握一门技术,需要了解以下三个要点:

  1. 如何开始 —— 要想开始使用自己所学的,我需要掌握哪些基本知识
  2. 学科范围 —— 我现在学的东西有多宏大?在开始阶段,我不需要了解每个细节,但是如果我能对该学科的轮廓有大致的了解,那么将来我就能发现更多细节
  3. 基础知识 —— 不止在开始阶段,要想使用一项特定的技术,我需要了解基本的用户案例和最常见的问题,也需要知道自己学的哪 20% 就能满足 80% 的日常应用。

十步学习法

前六个步骤只做一次。

  • 第 1 步:了解全局
  • 第 2 步:确定范围
  • 第 3 步:定义目标
  • 第 4 步:寻找资源
  • 第 5 步:创建学习计划
  • 第 6 步:筛选资源

从第七到第十则需要根据第五步所制定的学习计划中的每个模块循环往复

  • 第 7 步:开始学习,浅尝辄止
  • 第 8 步:动手操作,浅尝辄止
  • 第 9 步:全面掌握,学以致用
  • 第 10 步:乐为人师,融会贯通

从寻找导师到成为导师。

生产力

外行静坐等待灵感,其他人则唤起激情努力创作。

  • 一切始于专注
  • 个人有个人的方式
    • 番茄工作法
    • 如何处理重复性工作
    • 如何处理长期工作
  • 不要多任务并行
  • 学习程序的优化策略(局部性原则,批处理)
  • 停止任何并非真正的多任务并行的多任务并行

浪费时间的

  • 电视
  • 各种综艺节目
  • 社交网站
  • 新闻网站
  • 不必要的会议
  • 烹饪

理财

  • 拒绝短期思维
  • 先出价者输
  • 一定要弄清楚自己值多少钱

书单

  • The War of Art, Steven Pressfield
  • Think and Grow Rich, Napoleon Hill
  • Psycho-Cybernetics, Maxwell Maltz
  • Atlas Shrugged, Ayn Rand
  • Rich Dad, Poor Dad

最后

不要给自己设限

捧个钱场?