读后感 ¶
简介 ¶
2024年元旦后读了约翰·森梅兹(John Sonmez)的2本书,一本是《软技能:代码之外的生存指南(第2版)》,另一本是《软技能2:软件开发者职业生涯指南》,产生了强烈的共鸣,萌发了写读书感想的念头,正好也实践了作者鼓励的“输出型”学习方法,于是就有了下面这些主题的读后感。
单凭技术技能既不能成就辉煌的事业,也不能成就灿烂的人生。
如果你只是做你应该做的事情,那么你可以作为一名软件开发者生存下来。如果你接受平庸,那没什么问题。
很多人都有一个幻想,一个荒谬的梦想——总有一天他们可以名满天下或者富可敌国,甚或是两者兼得。他们梦想着奇迹总会发生,总有一天会让他们所有的愿望和梦想统统实现。
现实是,在生命中唯一能保证发生的事情就是死亡,要实现剩下的所有事情,你都必须为之付出。因此,在推进你软件开发者的职业生涯过程中,有很多事情要做。 比仅仅靠自己努力工作更为重要的是,你知道该做什么,以及你为之的一致性与承诺。
通过专注于“软技能”,如良好的沟通、以身作则的能力,以及从失败中快速恢复的能力,甚至提高个人健康水平的能力,你可以突破自己的“玻璃天花板”。
厄尔·南丁格尔说过,“工作是属于公司的,而职业生涯却是属于你自己的。” 如果你相信自己是在为别人工作,那你对工作的动力和安全感已然尽失。职业发展的驱动力一定是来自个体本身。
成功的软件开发人员之所以能成功都不是偶然的。他们目标明确,为了达成目标,他们制订了坚实可靠而又深思熟虑的计划。 如果你真的想在软件开发这个充满竞争的世界里脱颖而出,那么你要做的远远不止一份光鲜靓丽的简历,以及碰巧获得的工作,你需要做的是主动管理自己的职业生涯。
01|入行 ¶
无论是开启一项新的健身教程,还是着手开始马拉松训练,乃至于写书、创业,以及更具体的编程,阻拦你成为你想成为的样子的最大障碍也是“如何起步”。
思考永远要比实际迈出去哪怕一步都要简单,无休止的争论应该采取什么步骤也要比实际行动容易。但是,秘诀就是,你需要亦步亦趋、循序渐进。
如果你真的想改变自己的行为,把那些优良原则和最佳实践应用在自己的生活当中,最好的一种方法就是反复阅读,让你的大脑包裹与萦绕在你想要融入生活的思想与观念之中。
如果你不确定自己是一个可以自我激励的人,或者你是在前途不明的时候缺乏行动力与决断力的人,那么,大学体系化的教育方式可能更适合你。 虽然大学不太可能教你现今作为软件开发者需要具备的实用知识,但大多数学位课程都会带给你更深入的计算机科学概念的知识,而当你进入更复杂的编程场景时,这些知识会非常有用。 大学能够提供实习机会以及其他资源与联系,这些往往是你凭一己之力无法得到的。 但是,大学里面所教授的内容,经常与现实世界中正在发生的软件开发工作脱节。
市场上也有很多强化编程培训班。这种培训班倾向于聚焦在如何开发软件上,而不是它背后的原因或科学理论,所以可能会给你留下一些知识上的空白。 为什么有人心甘情愿花那么多钱去参加编程培训班,而不是自学?主要的原因在于:通过参加训练营可以让你获得更大的个人成长空间。有些人在特定的环境下可以更好地学习。和一群目标相同的同学在一起学习时你会动力十足,而且你能得到的灵感要比从自己阅读一本书或者观看一段视频得到的更直接。
如果你打算花费时间、金钱和精力去参加一个编程培训班,需要做好下面的一些准备:
- 接受这样一个情况,培训班的节奏要么一日千里,要么慢慢吞吞。
- 把所有其他的事情都从你的时间表中清除掉,全身心地投入训练营中。
- 确保你是班上最顶尖的学生,并多多与老师同学交流,帮助他们做任何他们需要帮助的事情,这样你就有机会学到更多的东西。
- 制定一份是你确实花时间经过深思熟虑而成的切实可行的计划。计划不会是完美的,一定要在执行计划的过程中不断修正它,不要随心所欲。
- 设定时间表,并且遵照时间表坚持实施。对任何领域而言,累积效应都是最有力的影响。
- 拓展人脉。在找工作的时候,有人能帮你。
- 找一位可以依赖的导师,在你感到迷茫的时候,可以帮助你厘清方向,重建信心。同样,你也可以帮助他人。
- 至少完成一个兼职项目,以检验所学的知识。
在软件开发的世界里,自学成才的程序员是特立独行的稀有动物。很多急功近利的软件开发者都在自学成才的道路上苦苦挣扎,屡受挫折。
自我教育是我们最有价值的技能之一,这不仅是在计算机领域,在日常生活当中也是如此。但自学的缺点是,对学习方向不一定能正确做出判断,遇到问题容易放弃,学习的内容可能不全面。
永远记住,学习是你自己的责任。不要为了通过考试而读书、做作业,而要尽可能多地学习与应用你学到的东西,这就是现实生活中的运作机制。不是有人会“教”你做什么,而是你自己要去“学”什么。
1.如何入行 ¶
从一个开源项目开始,克隆到本地,修改、调试,不断阅读代码并试错。直接动手做要比捧起一本教科书、走进大学或者参加编程训练营……都要重要得多。
“千里之行,始于足下”,这才是踏上编程之路的正确方式。
学习编程与开启软件开发的职业生涯是截然不同的两件事情。软件开发远不止编程。编程是其中的一个重要部分,但是如果只知道如何编程,你不会走得很远;尤其是当你想在这个领域中脱颖而出的话。
软件开发的动机,是让手工的过程自动化。在自动化某一个过程之前,你必须知道手动完成这件事情的全过程。
理解问题 ¶
软件开发的过程往往都是从对问题的透彻理解开始的。也就是,你需要自动化些什么?这个过程可以很简单,只需要与潜在客户交流一下,了解需求。
程序设计 ¶
只有理解了问题之后,你才可以构想出设计方法,也就是,问题如何以代码的方式来解决。
尽管敏捷开发的重点在于“轻前期设计”,但是设计仍然是必不可少的。想要盖好了一幢房子,你可不能把标准板材随心所欲地堆在一起就算了事。
编写和调试代码 ¶
软件设计之后,可以编写一些测试用例来定义软件应该做什么(称为测试驱动开发,即TDD),也可以着手开始编码。
作为一个开发者,你大量的时间都将用于发掘你写的(或者别人写的)代码为什么不能正常工作的原因。
代码测试和部署 ¶
代码一旦被写出来,接下来应该是测试代码的过程。同样,不同的测试方法实施的测试过程也不尽相同。
代码只有在经过了测试之后,才可以部署,这本身就是一个完整的过程。
2.如何计划 ¶
需要有一个计划。避免从畏惧开始的极端转向随心所欲的极端。
你需要一份计划。是的,一份真刀真枪、切实可行的、言简意赅的计划,一份规划你怎样从一个对软件开发一无所知的小白成长为无所不知的软件开发大拿的计划。
第一,问自己:你想做哪种类型的软件开发工作?
在软件开发这一行,有很多的职业发展通道和技术专长领域,你大可以选择其中的一部分作为自己的主攻方向。
太多的人终其一生都会沿着一个方向执着前行,却不会在发轫之始就去深思熟虑以谋定而动。花一些时间回答这些问题吧,这样你才可以在策马扬鞭走上这条职业之路时计划周全。
三思之后,着手做一些调研工作。只要你的问题正确,答案也不难找到。
第二,制订计划。
制订计划的最好方式就是**以终为始**——从想要达成的目标开始一步一步倒着排。你必须要制订一个具体的目标——你想成为哪种软件开发者,而不是像“学习编程”或者“成为一名软件开发者”这样泛泛的说法。
计划的内容必须尽可能具体,这样你才会了解你需要学习什么,你该如何制作简历,你应该报名参加哪种学校或者培训课程,甚至你需要申请哪些职位。
例如,如何成为一名运动员。这是一个相当宽泛的问题。你应该成为怎样的一名运动员呢?也许你应该练练举重和跑步,也许你应该练习游泳,或者也许你应该练习打网球。那你能不能把所有这些事情都做了,甚至练更多的项目,以便为成为一名全能运动员做准备,在任何一支队伍里都可以出色发挥。这听起来是多么荒谬可笑啊!事实上,当一个人许愿说“我想成为一名软件开发者”时,听起来也是荒诞不经的。一旦你了解了一项运动,你就知道为了那项运动该如何训练自己。
举例:
目标:
- 成为Node.js开发者。
学习计划:
- 学习JavaScript的基础知识。
- 学习Web页面和Web开发技术,如HTML和CSS。
- 学习Node.js的基础知识。
- 编写某种用Node.js开发的简单的Web应用程序。
- 学习Node.js应用程序的不同架构和技术。
- 列出某些和Node.js一起使用的架构的技术。
- 学习某些和Node.js一起使用的数据库技术。
- 学习计算机科学的基础知识,例如:
- 算法;
- 数据结构。
- 学习有关编写优质代码的最佳实践。
- 学习Node.js应用程序的架构设计的方法。
就业准备: - 搜索目标就业地区有关招聘Node.js开发者的广告,找出岗位要求必须具备的技能。 - 列出本地我有目标工作的公司名单。 - 开始参与本地用户组的活动。 - 开始与本地的其他Node.js开发者的联谊活动。 - 聘请一位简历写手,请他帮忙写一份优秀的简历。 - 跟我的关系网的所有联系人都打好招呼,让他们熟知我的价值、我正在找寻什么样的工作。 - 开始申请一个初级职位,或者实习开发的职位。 - 每天至少申请两个职位。 - 每次面试之后都要做总结,确定我还需要在哪些技能上增长功力。
3.必备技术技能 ¶
深入学习一门编程语言 ¶
如果你不会写代码,不能开发软件,那么你学到的所有的软技能对你而言都是“屠龙之技”。也许你会成为一个好经理、好教练,但不会成为一名软件开发者。
选择到底该学习哪一门编程语言其实并不像你想象中那么重要。但建议从学习“一门”编程语言开始,而不是试图学习每一门编程语言。 因为学习很多编程语言这只会导致混乱,让你将本应用于学习其他技术技能的精力耗散殆尽。 通过聚焦,你不仅会专注于你现在必须学习的东西,而且会让自己在某一特定技术中获得更深层次的知识和能力,这会使你信心倍增,并大大提高你在这项技能上的市场竞争力,我们才有信心地说“我具备用这门语言编写代码的能力。”
许多编程语言的内核其实是很类似的。学习第一门编程语言总是最艰难的。一旦你学会了一门编程语言,学习第二门语言就容易多了,其他各种编程语言学起来都易如反掌。 许多开发岗位,尤其是在微软或者谷歌这样的大公司,并不需要你懂特定的编程语言。
选择编程语言,考虑三个个要素。
- 第一,这门语言的就业前景。
- 第二,这门语言未来的应用前景。当然,你永远无法预测未来。
- 第三,你对哪种技术更感兴趣。因为你在学习第一门编程语言时很可能是步履维艰,因此,你对所学的东西越感兴趣,你就越容易坚持下去。
- 第四,这门语言的难度级别。比如,C++语言比较难,会让初学者容易放弃。
在学习语言过程中,有一点非常重要的:搞清楚哪些是实际语言的一部分,哪些是经常与该语言一起使用的库的一部分。实际语言的部分本身并不大,而且相对容易学习,但是标准库却是非常庞大的,对于标准库,你的重点是学习如何查找库来完成你想要用编程语言完成的常见任务。
在学习语言过程中,先从“是什么”开始学习,然后再理解“为什么”。理解程序里的每一行代码或者函数里的每一行代码的原因和方式,虽然很难很枯燥,但是值得的,在这个阶段,“为什么”不那么重要。。
在学习一门编程语言过程当中,需要了解如何正确地结构化你的代码。“结构化代码”就是编写优质的、整洁的、不需要太多注释就能理解的通俗易懂的代码,因为代码本身是用于沟通的。 很多人都依此来评价一名软件开发者的技能高低和竞争力强弱。良好的代码结构体现了一个人对技术的奉献精神,而不是敷衍了事。这背后代表着态度。
即使你是一个初学者,只要你能写出优质、整洁、简洁、易懂的代码来表达它的结构、它的含义,那么任何一个看到你的代码的面试官都会认为你是一位有经验的专业人士。
在软件开发中,以“对象”的方法来思考将有助于我们定义和设计复杂的系统,我们会把一个系统看作是一群相互作用的组件,而不是试图从整体上处理这个复杂的组合体。
在计算机科学领域有很多这种算法,了解如何根据这些算法来编写自己的程序以解决实际问题是非常重要的,特别是当问题非常棘手的时候。如果你对各类算法做不到融会贯通,你就无法知晓其实优雅的解决方案早已比比皆是。因此,算法就是一项价值千金的技能。算法学习最初你肯定会觉得非常困难,没关系,只要持之以恒、坚持不懈就好了。参考高手们地解决方案,也是一个非常有效的方法,受益不浅。
具备一个开发平台经验 ¶
你应该至少具备一个开发平台的相关经验,并精通与之相关的技术或者框架。这里的“平台”指的是操作系统(OS),但它也可以指代其他类似于操作系统的抽象。例如,Linux开发者,Mac开发者,前者专注于Linux操作系统,后者则专注于Mac操作系统。
与选哪一门编程语言类似,该选哪种平台其实无关紧要,重要的是你必须得选一种。选择哪种编程语言与选择哪种平台没有强关联。比如,C++语言,C++开发者可以为Windows也可以为Mac、Linux甚至是嵌入式系统开发程序。
学习一种框架 ¶
库(Library)是一系列预先编写好的代码集合,供开发者在编程中调用,大大减少重复工作量。程序员第一次输出hello world用的printf就来自C语言标准库;各种SDK都是库,自己写一个字符串处理函数,包装好之后调用,也是库。
框架就是一系列用于在特定平台上或跨多个平台上编写的库。通常,框架可以使在该平台上的一般性编程任务变得更容易。 框架的最大特征是它会接管程序的主控制流,开发者只需编写业务逻辑代码,具体执行工作由框架来调用。实践中经常会用到控制反转(IoC)以及模板类继承等方式。 比如用Spring开发Web项目,你只需编写Controller和配置文件。具体到项目如何启动、如何监听端口、每一次网络请求的响应处理,这些都由框架来实现。
学习数据库基础知识 ¶
在软件开发中,数据库通常用来存储应用程序的数据。虽然有专职的数据库开发者或者数据库管理员(DBA),但作为程序员仍然需要了解数据库基础知识,比如:
- 数据库如何运行
- 如何查询、插入、更新,和删除数据
- 如何连接数据集
熟悉如何进行源代码控制 ¶
源代码控制是任何一个软件开发项目的必要组成部分。几乎所有的专业开发者都应该知道如何使用源代码控制来签入(check-in)和签出(check-out)代码,并且能够合并来自多个源代码版本的变更。
所以,你应该熟悉至少一种源代码控制系统,并且熟悉源代码控制的基本概念。
了解代码构建与部署 ¶
现在大多数软件开发项目都会应用某种自动化构建和部署系统。
构建系统的最基本作用就是编译所有的源代码,并确保不出现任何编译错误。
一个复杂的构建系统还可以运行单元测试用例或用户测试用例,执行针对代码的质量检查,并提供代码库的当前状态报告。
部署系统将负责将代码部署到生产环境或者测试环境中。
在通常情况下,创建和维护构建与部署系统这个领域里最热门的话题非DevOps(Developer Operation的简写)莫属。
熟悉基本测试方法 ¶
在敏捷模式下,Backlog会包含开发内容和对应的测试任务,软件开发者和测试人员必须更加紧密地合作,或者说开发人员就是测试人员。
一个优秀的开发者会在自己测试了自己编写的代码之后才将代码交付给别人。
熟悉代码调试 ¶
新手程序员幻想着每天只写新代码,然而真实的世界不是这样运作的。身为软件开发者,你90%的时间都会消耗在苦苦探究“我的代码为什么不能正常工作”这个问题上。
了解开发方法论 ¶
目前比较流行的是瀑布式开发和敏捷开发这两种开发方法论。
当一个软件开发团队刚开始编写代码时,大多数情况下都会遵循某种软件开发方法论。不过,不要期望任何一个团队真正遵循他们声称的自己正在使用的软件开发方法。比如,大多数团队都声称他们在使用敏捷方法工作,但实际执行过程中,他们可能遵循的是他们认为的敏捷方法论。
以前软件开发是遵循传统的瀑布式进行的。顾名思义,瀑布式开发就是一步一步地构建软件,每一步都把软件开发过程带入下一个步骤,直到所有的东西都顺流而下、按部就班地完成。
构成瀑布式开发方法的就是软件开发生命周期(Software Development Lifecycle,SDLC)。每一种软件开发方法都有各自的SDLC作为自己的表达方式。在瀑布式开发中,SDLC是顺序的,是一个从需求分析到软件设计,再到实现、测试、部署,最后到维护这样的一个顺序执行的软件开发过程。每一个阶段你都在前进,你只能前进,永远不会后退。各个阶段之间可能会有一些重叠。
传统的瀑布式:
- 需求分析。这个阶段会收集软件的所有需求,即,软件应该干什么,应该具备什么特性,应该是什么样子的,它的行为应该是怎样的?然而,现实并非如此。
- 软件设计。在这个阶段,你在接受了需求之后会将它们转换成系统的架构设计、底层算法和UML图,确定将如何构建系统,并且让系统的各个部分协同工作。通常会有大量的所谓前期设计工作,这意味着软件的大部分细节在这个阶段都将被规划出来,直至非常底层的设计工作。然而,在现实中需求是会变化的,有太多不可预见而又无法避免的意外状况。
- 实施。这一阶段就是用来编写代码的。
- 测试。在这个阶段,测试人员运行测试,发现bug,你尽自己所能修复一批bug.
- 部署。首先是“集成”,将多个开发组件捆绑在一起,然后是将代码部署到服务器上,最终交付到客户手里。
- 维护。在维护阶段,你需要修复客户发现的错误,添加新功能,并且保障软件的一切功能都顺利运行。
在软件开发方面,敏捷的出现,确实极大地改变了游戏规则。
敏捷宣言:我们一直在实践中探寻更好的软件开发方法,身体力行的同时也帮助他人。由此我们建立了如下价值观:
- 个体和互动**高于**流程和工具
- 工作的软件**高于**详尽的文档
- 客户合作**高于**合同谈判
- 响应变化**高于**遵循计划
也就是说,固然右列各项有其价值,但我们更重视左列各项的价值。
敏捷宣言遵循的十二条原则:(这些原则精准地阐释了敏捷的真正意义,甚至超过了宣言本身。)
- 我们最重要的目标是通过持续不断地及早交付有价值的软件使客户满意。
- 欣然面对需求变化,即使在开发后期也一样。善于掌控变化,帮助客户获得竞争优势。
- 频繁地交付可工作的软件,相隔几星期或一两个月,倾向于采取较短的周期。
- 业务人员和开发人员必须相互合作,项目中的每一天都不例外。
- 激发个体的斗志,以他们为核心搭建项目。提供他们所需的环境和支持,相信他们能够达成目标。
- 不论团队内外,传递信息效果最好效率也最高的方式是面对面的交谈。
- 可工作的软件是进度的首要度量标准。
- 敏捷过程倡导可持续开发。发起人、开发者和用户要能够共同维持其步调稳定延续。
- 对技术精益求精,对设计不断完善,将提高敏捷能力。
- 以简洁为本,极力减少不必要工作量。
- 最好的架构、需求和设计出自于自组织的团队。
- 团队定期地反思如何能提高成效,并依此调整团队的行为。
敏捷并不是一种真正的方法论,而是在更抽象的层次上定义了软件开发应该如何完成,就像其他可以被认为属于“敏捷方法”的方法的超集。
瀑布式方法面临的问题:需求变更,或者说,直到项目后期才知道需求有变化。
敏捷就是要承认这个事实并且接受这个事实,构建与这个约束条件和谐相处的软件开发过程,而不是尽量规避它。
现实中,虽然大多数团队都声称自己遵循敏捷的开发方法,他们只是在名义上遵循这些方法,实际所做的其实都是“类敏捷”的开发方法。
基于敏捷,下面是几个常用的开发方法:
- Scrum
- Kanban(看板)
- eXtreme Programming(XP,极限编程)
首先,我们看Scrum方法。
Scrum本身是由Ken Schwaber和Jeff Sutherland在20世纪90年代初同时创建的。在1995年,他们合著了一篇联合论文,合并了他俩各自的方法,定义了Scrum方法。
Scrum是一种形式化、规则化的方法,它定义了软件开发团队中的具体角色、开发软件的工作流,以及在开发每一次迭代(也被称为sprint)中应该召开怎样特定的会议。
1.Scrum中的角色
Scrum方法中有三个主要角色。
首先,产品负责人(Product Owner,PO)充当客户的代言人,他将最终决定工作任务的优先次序,并与业务人员、客户以及其他利益相关人进行沟通。
其次,开发团队不仅编写代码,而且要执行分析、设计、测试以及所有与交付软件相关的其他任务。
最后,Scrum专家(Scrum Master,SM)充当团队的教练,帮助消除任何阻碍团队发展的障碍,与产品负责人沟通,推进Scrum过程。
2.Scrum是如何运转的
Scrum背后的基本思想就是,软件开发被分解成若干个更小的迭代称作Sprint,每一个Sprint由一组锁定在那个时间框架内必须完成的工作组成。
然后,在每个Sprint结束时,其结果增量地交付给客户。
需要为软件开发的所有功能都被合并到一个所谓的产品待办事项清单中。(基本上它与系统的需求类似。)产品待办事项是按优先级别排列的,在每一个Sprint周期内,都会从产品待办事项清单中提取一组待办事项从而创建该Sprint的待办事项清单,以定义在该Sprint过程中工作任务,每一个Sprint通常持续一两个星期。
在每个Sprint开始时,将举行计划会议,把产品待办事项中的一部分工作拉到当前的Sprint中,团队估算出完成这些任务所需的工作量。
从技术上讲,团队应该致力于在Sprint过程中完成列举在Sprint待办事项中的所有工作,但实践中很少会出现这样的情况。(承诺是困难的。)
每天都会有一个叫作Scrum的快速站立式会议,每个人在会上都要给出非常快速的报告。Scrum会议的理念是让每个人都了解进展状况,排除可能会延缓进度的任何障碍。
Scrum会议每天在同一时间同一地点举行,每一名团队成员需要回答三个问题:
- 昨天你做了什么,有帮助团队达成Sprint目标吗?
- 你今天会做哪些帮助团队达成Sprint目标的工作?(这个问题对于寻求个人承诺是非常有效的)
- 是否有任何障碍阻碍你或团队达成Sprint目标?
在Sprint期间,团队合作完成Sprint中的所有待办事项,并且使用燃尽图(Burndown Chart)跟踪团队完成待办事项的进度和速度。燃尽图跟踪剩余的时间、故事点、困难点,以及任何被用于跟踪本Sprint中剩余的工作的表征方法。
当Sprint结束时,在Sprint期间完成的功能被展示给利益相关人,实施评审的工作。
最后,要召开一个回顾性会议,团队需要反思已经完成的这个Sprint,并为如何改进下一个Sprint发表一些想法。
3.Scrum的问题
当Scrum被正确执行时,它是一种极其有效和有价值的软件开发方法。在现实中,Scrum往往并没有被严格地遵循,而且,为了弥补过错,人们也会做出许多让步,甚至给一些人带来了可乘之机。
Scrum团队之所以取得应有的成功,最大的原因就是承诺。导致Scrum不能成功实施的最大杀手就是缺乏承诺,包括团队层面的承诺以及个人层面的承诺。
如果一切都能按照计划按部就班地顺利执行,那么把待办事项拉进Sprint里就是举手之劳,获取承诺也很容易。但要真正做到这一点实际上难度很大。
没有承诺的概念,问责制的标准就会下降,Sprint就失去了其本质意义。
被拉入Sprint的工作任务就失去了可信度。这就像你创建了一个“每天必做事务清单”,然而大多数情况下你都没能完成这个清单。随着时间的推移,这个清单本身将变得毫无意义,你甚至怀疑为什么你要列出这样一份清单。
我们来看看Scrum的变体,暂且称为Scrumbut。
当一个团队说“我们正在实施Scrum”的时候,通常会有长时间的停顿与迟疑,然后他们再加上一个“但是”(but),然后再给出一串长长的例外列表,说明他们的哪些做法没有遵循Scrum过程,这就是Scrumbut。而且,他们一般还会给出各种各样的冠冕堂皇的借口,说明他们为什么要按照自己的方式行事而不是亦步亦趋地追随那个Scrum过程。
Scrumbut最大的问题就是巧妙地躲避了Scrum过程中令人痛苦的步骤,然而正是这些痛苦的步骤,才是Scrum成为有效的重点。打个比方,你在煤气灶上煮东西,你去端锅的时候,把手烫伤了,因为你没有用隔热手套去接触锅的把手。因此你说,我喜欢用炉子做饭,但它太烫手了,以后能不能让我们在炉子上做饭的时候不要使用任何加热的方式。
但遗憾的是,不住少数的实施Scrum的软件开发团队选择的做法是关掉了煤气,然后再去经年累月地探究为什么他们的食物没煮熟。
接下来了解一下看板(Kanban)。看板与Scrum类似,但它是一种定义很松散的方法,它更多的是基于原则而不是基于指导的方法。
看板起源于丰田(Toyota)的生产体系和精益制造。起初,看板是为了在制造业企业内部限制生产工作而创立的,看板会提高效率、降低库存。当应用于软件开发上时,看板方法就主要集中在看板(Kanban Board)上。
看板是一块简单的板子,包含数个列,每一列代表贯穿开发过程的数个工作阶段。看板的基本理念是要把项目中所有正在做的工作可视化,并且对每一次将要完成的工作量总有所限制(称为WIP,Work in Progress,正在处理中的工作),以确定瓶颈、消弭瓶颈。
和Scrum一样,看板也是基于自组织团队的思想。透过公开、可见的看板将工作流程正规化与可视化。看板非常关注通过循环反馈来持续改进的想法。
通常,你可能会看到团队有一些需要完成的待办事项以及工作清单,并且这些工作将被优先处理。然后,团队中的某个人会挑出新的工作,并将其添加到看板上等待完成。随着工作从一个阶段进入另一个阶段,新添加的工作将会全面展开。
最后了解一下极限编程(eXtreme Programming,XP)。
极限编程采纳了当时的许多最佳实践,如单元测试、测试驱动开发、面向对象编程以及“关注优质客户”,并将它们提升到了被一些人称为“极限”的水平。“极限编程”因此而得名。
它的规则性更强,它将软件开发的严谨性与专业精神推向了新的高度。
XP在很大程度上依赖于结对编程的思想,即两个开发者坐在一起,共同完成所有正在创建的代码。XP的目标就是以尽可能简单的方式去设计和实现功能,尽量考虑当前的需求,而不是未来的需求。它的核心思想就是,即使是在更复杂的情况下,代码也可以适时演化,不必试图过早地优化代码或者提供额外的灵活性,因为这种做法通常是以增加复杂度为代价的。
总结:一个特定的方法并不像拥有某种可重复的和可衡量的过程那样重要,因为方法可以不断改进、不断调整。如果你的团队正在实施Scrum并且致力于改进实施Scrum的方法,这是很棒的。但是,如果你的团队从Scrum中汲取一些东西,从看板和XP方法又汲取另一些东西,把它们组合在一起形成自己的过程并且奏效了,这同样也是很棒的。只要有某种过程,关键是已定义并且可重复的过程。可重复的过程比特定的方法更重要。
4.拓展技术技能 ¶
学习一门技术的最好方法不是拿起一本大部头的参考书,一口气从头读到尾,而是需要事半功倍地快速学习、触类旁通地自学。
先确认你想要学习什么,即明确学习的范围。然后搜集学习资源,纵览全局。 聚焦到一个足够小的范围。创建一个系统的而又井然有序的学习计划。 采用“学-做-学”的顺序来学习。通过实践,我们可以自己找到问题、自己解决问题。 最后,把你学到的东西教给别人。把你学到的东西教给谁、怎么教,这些无关紧要。重要的是,你以某种方式重组你头脑中的知识,形成自己的思想,并且拿出来与外界交流,我们学到的东西才可以历久弥坚。
对大多数的技术技能而言,读读书本文字、看看视频教程这种简单粗糙的方法是不可能学会的,重要的事情说三遍:实践,实践,实践。坚持下去,相信“精诚所至,金石为开”。
无论何时,当你尝试要学习一项技术技能时,首先要明确的就是用它将帮助你做什么。如果你对这项技能没有直接的需求,你甚至会质疑“我为什么要学它”。
学习过程中需要注意的四个重点:
- 你能用这项技术做什么,否则学习则失焦。
- 如何开始,它是“做”的前奏,能让门槛看起来不是高不可攀。
- 二八原则。学习一项技术技能的关键就是识别最有效的20%的内容。一项技术的20%就可以应对80%的工作场景。
- 阅读那些这项技术技能的专家所撰写的文章。
5.是否需要学位 ¶
从以往的经验看,拥有学位并不是成功所必需的,但它肯定是一个限制性因素,它限制了可以提供给你的职位数量,并且某种程度上也限制了你的晋升,特别是在大公司中。没有学位可能会让你的简历被过滤掉,连被人看到的机会都没有。许多公司,特别是大公司,会根据受教育水平来过滤求职申请。当然,这并不意味着你就不能从这些公司获得工作机会,总有一些例外,但是肯定会难上加难。
学位的好处:
- 接受有关软件开发方面的全面的系统教育。
- 无须经验就可以入行。
- 有更多选择,更容易转到行政或管理岗位。
学位的弊端:
- 花费原本可以赚钱的时间去学习。
- 可能会受困于思维定式,难以打破。
在软件开发领域,能力最为重要。与一纸学历证明相比,如果你能写好代码,能解决问题,能证明自己有此能力,你就能走得更远。
与其他行业相比,软件开发最大的不同就是:该领域总是不断变化。每天都有新的框架和技术问世。在教育机构中培养能适应真实工作环境的软件开发人员几乎是不可能的。等到教材出版、课表排好的时候,很多东西已经改变。
许多计算机科学课程中包含的算法、操作系统、关系型数据库理论和其他主题都是永恒的。然而,当你坐在办公桌前开始写代码的时候,你极少会用到在学校学到的技能。身为软件开发人员,我们所做的大部分工作,都是如何使用新技术,学会如何用它们完成工作。我们很少需要回溯到计算机科学的本源,然而这并不意味基础的计算机科学教育毫无价值,这能基础知识让你拥有良好的基础,能够让你更深入的理解自己在做什么,以及各种工作原理。
不管你是拥有学位还是拥有经验,都强烈建议你将自己的工作成果总结为作品集。 在GitHub上创建或者参与一个开源项目。你也可以把自己创建的网站或者应用程序整理出来,带着这些源代码去面试。 这是向未来雇主展示能力的好办法,让他了解你具有开发并部署一个完整应用的能力。
02|求职 ¶
从事一份自己喜欢的工作要比从事自己不喜欢的工作给你带来更大的快乐。然而,任何你认为自己喜欢的工作,最终都会变成你不喜欢的工作,有时甚至变成你厌恶的工作。这是必然结果。在确定自己是喜欢还是讨厌一份工作之前,你必须先得到一份工作。
努力获取实习机会 ¶
没有经验很难找到工作,没有工作就很难获得经验。
实习的机会可不是人人都有,所以如果你有机会赢得实习机会,尤其是在你刚入行的时候,我强烈建议你要抓住这个机会,即使薪水不是很高,甚至几乎无偿。在职业生涯的初期,以微薄的工资工作一段时间所付出的牺牲,从长远来看一定会有巨大的回报。
有些实习工作就跟真正的工作一模一样,那里的人们期望你成为软件开发团队中的一员,并且和团队中的任何其他成员一样工作。做这种类型的实习工作,通常会指派一位经验丰富的开发者作为你的导师,指导你、帮助你掌握做事的诀窍。
有些实习工作其实就是一场面对面的竞赛,公司雇用了好几个实习生,他们将为了某个职位而展开竞争。做这种类型的实习工作,一般所有的实习生都被安排在同一个团队中一起做一个“实习生项目”,这是一种双重测试,目的是观察每个实习生在这种环境下的适应性。
还有一种实习工作,基本上你就是办公室里的一个“跑腿的”,你只会被安排去做一些端茶倒水的琐碎工作。
当你考虑实习工作机会的时候,你必须先考虑清楚什么才是自己想要的。报酬是无关紧要的,因为如果将实习工作与报酬关联起来,那就太短视了。如果一个亿万富翁愿意招我为他做实习,我会公开表示:我将乐意接受没有任何报酬的实习工作,我愿意露宿在他家的草坪上,只是为了学习。
自己找个实习的机会:
- 弄清楚有关实习和雇用法律条文,去找一家没有实习计划的公司,向他们展示提供实习岗位对公司的好处,以及设立一个实习项目有多容易,以及我愿意成为他们公司的第一位实习生。
- 列出一份公司清单,找出本地公司里有哪些是我想为其工作的,或者哪些公司能够为我提供一些良好的经验与学习机会,清晰化哪些公司我可以获得最宝贵的经验,哪些我可以为它们做出最大的贡献。
- 拿着这份清单,试着找出在哪些公司里有我认识的人,或者我认识的人中有谁认识这些公司的人。
- 选择最有希望的公司并潜心研究它们,比如,解该公司的历史,生产的产品,谁曾经为它们工作过,它们有哪些工作岗位,以及这些岗位的工作内容是什么。在社交媒体上查到在这些公司里工作的人的资料,试着联系他们中的一些人。
- 开始直接联络这些公司,当然最好是通过我认识的人或者我请喝过咖啡的那个人,进行自我推销,重点是展示我会给他们带来的价值和我愿意工作的态度。
参加实习生面试需要注意的几个要点:
- 我强烈渴望尽可能多地学习知识和有所贡献。
- 我是你一生中遇到的最努力的工作人员。
- 我不需要被管理,给我安排到一个项目里,你可以看到我在自动自发地工作。
注意,不要试图炫耀你的技能或者经验,也不要试图用你的所学来打动面试官,专注展示上述这些特质,以及你的基本工作能力,你会给面试官留下更好的印象。
在取得实习机会后,如何成为优秀的实习生:
- 作为一名实习生,你的任务很简单:竭尽所能节省你老板的时间。你在这里就是为了让其他人的工作更容易,而不是相反。对你而言这可能不是理想的学习环境,但这是你要创造价值的最佳方式。
- 这就意味着,你必须做到自我指导,自己发掘自己该做的事情,并在最低限度的监督和反馈下完成高质量的工作。
实习的意义是获得工作岗位,而不是为了获得经验、学习技能。
如何从实习人员转变为正式员工:
- 如果你在做实习生工作期间为你的雇主创造出尽可能多的价值,那么在实习结束后,你就不用做任何事情了,守株待兔就好。
- 如果出于某种原因,他们没有来敲你的门,你可以发一封礼貌的电子邮件询问一下。不过,如果你已经到了要发这封电子邮件,那说明你的实习生工作可能做得不太好。
没有经验要如何找到工作 ¶
下面的内容并不是关于如何求职的,而是作为一名有抱负的软件开发者,在自己缺乏经验甚至没有任何工作经验的情况下,如何获得一份工作。
站在公司的角度,在招聘软件开发者时面临的最大风险,就是雇用一个不知道如何编写程序代码,或者是不擅长编写程序代码的人。
面试官的主要工作就是戳穿谎言,识别候选人是不是真的知道如何编写代码。在光鲜的简历背后,识别那些伪专家级开发者,那些号称15年以上的专家却无法写代码来解决实际问题。
面试官其实并不希望看到候选人在面试中失败,从内心深处他们希望候选人能通过面试。
任何一个你想为之工作的公司都会竭尽所能对那些不知道如何编写代码的开发者敬而远之。这就是为什么很多公司依然坚持“在白板上写代码”的面试方式,尽管有无数软件开发者都在抱怨这种面试方式。(对那些夸夸其谈的人来说这确实是一道难以逾越的关卡。)
在AI发展的当下,依靠搜索引擎的程序员必定会被AI所代替,现在AI所能提供的参考代码已经是仰视般的存在了。目前仍然在校的软件工程专业的同学是需要认真思考今后“竞争力”的问题了。
所以,如果你没有经验,你获得软件开发者工作岗位的主要策略就是去证明,即使你没有实际工作经验,你也是一个有经验的程序员,你能写代码,而且绝不信口雌黄,特别是提供一些外部证据能够证明你知道如何写代码。这样才有可能让自己站在机遇的大门口,才能做到尽可能地减少雇主对风险的担忧,即不会雇用一个不知道如何编写代码的伪程序员。
每一位软件开发者都应该开设自己的博客。不管你是身经百战还是初出茅庐,你都应该分享你正在学习的内容,在软件开发领域选择一个专业方向然后有所著述。除博客之外,其他所有有助于让你的名字能被搜索到的社交媒体,都对你求职有益。Twitter账户、Facebook主页,所有这些社交媒体都有助于彰显你正在积极主动地参与软件开发社区的活动,都大大有助于为你扩大知名度。在当今世界,不管你曾经创建过怎样的简历,这才是你真正的简历,成为无可辩驳的证据,证明你非常清楚自己正在从事的工作。
在网络空间崭露头角是一个良好的开端,但在资历浅薄的时候,你应该需要一些更实质的东西。强烈建议,你在学习编写代码时或者在学成之后,一定要创建一些小项目,通过从头到尾地完成一个完整应用程序的过程来充分展示你的能力,比如,在GitHub上展示你做的这些小项目。作为一名白纸一张的新人,那一定要尽我所能让我的GitHub自述文件令人印象深刻。
在GitHub上展示你的成果还有许多其他好处,比如,你可以借此赚点儿外快;你可以借此创业;向面试官当场展示你写的代码。
如果你写了一个应用程序并且创办了自己的软件开发公司,没有理由让你不能自称自己就是该公司的软件开发者,并将这些经历统统写在自己的简历上。这不是撒谎骗人,如果在面试时你被问及该公司的情况,你确实需要诚实地回答,这是你自己的公司,是由你自己创办的,但是,你没有义务自愿提供这些信息。
另一个克服没有经验,以白丁身份入行的方法,就是积极参加社区活动,如参加技术会议、加入开发者组织等。努力与那些不同公司的人建立良好的人脉网络。
此外,让公司雇佣没经验的你的一个方法就是可以无偿工作。这种方法不适用于通过正常的“简历/面试”求职过程,但适合远程工作,或者通过非正式的面试过程求职。这个方面听起来有点不切实际,退一万步讲,在其他方法都不奏效、你很绝望的时候,你还会怕失去什么吗?
还有一个方法可以考虑,对一家宣称“现在不招人”的公司,你可以先尝试在一个非常小的项目中作为外包员工或者兼职员工参与其中,来证明自己的能力,或许能收到效果,因为许多公司都会雇用员工作为临时工以先“实地测试”一下他们。这个策略的另一种变化就是通过做一名收费非常低的自由职业者来获取一些经验。
不建议采用“先做其他工作”的策略,因为它会让你深陷你不想担任的工作角色中不能自拔,而且,在某些组织中,一旦做了“其他工作”你就很难转变成真正的软件开发者,比如做QA(Quality Assurance)。但有时候,当你缺乏经验而又需要踏入职场大门的时候,这是最好的选择。又比如,你不想从事QA工作,但为了进入目标公司,选择了QA的职位,在工作中,或许可以通过帮助其他程序员来间接体现你的编程能力,来获得程序员岗位的机会。尽管刚开始的职位并不理想,但你可以从公司的另一个职位开始,并以你的方式转岗成为软件开发角色。当然,在这样做的过程中也会遇到一些挑战,如果你以其他角色加入某家公司,那么很难让别人改变对你的看法,想要转为软件开发者也就很难了。但是,尽管如此,如果你缺乏经验,这个方法也是值得一试的。
虽然证书的价值很难评说,但当你缺乏实际的工作经验时,证书也变得很有价值了。某种程度上,你取得的证书是个敲门砖,可以缓解潜在雇主在招聘缺乏经验的人时可能存在的不确定性风险的方法。
谚语 The squeaking wheel gets the oil,意思是:会哭的孩子有奶喝。 这句话直译则是:吱吱叫的轮子会得到(润滑)油。敢于站出来发出最强烈声音的人将会得到他想要的东西,以至于获得成功。
你就是要做那个吱吱作响的轮子,受挫不要紧,不是每次你都会被注意,许多人害怕持续跟进、害怕打搅别人,他们因而会与机会擦肩而过。打搅别人总比被人遗忘要好,勇敢的做那个“吱吱作响的轮子”吧。
如果你没有经验,你一定要设法获得经验。不要轻言放弃,持之以恒,脚踏实地做好你正在做的事情,成功终将降临在你身上。
选哪种公司 ¶
为小公司或者创业公司工作的好处:
- 角色灵活,拥有多个头衔。
- 拥有很高的影响力。
- 高回报潜力。
为小公司或者创业公司工作的弊端:
- 可能无法安安静静坐下来全身心编写代码。
- 工作在众目睽睽之下,工作绩效一目了然。
- 稳定性差。
为中等规模的公司工作的好处:
- 稳定性高。
- 很少疯狂加班。
为中等规模的公司工作的弊端:
- 变更的节奏很慢。
- 可能无法接触到最前沿的技术。
对很多软件开发人员而言,在大公司工作令人沮丧,因为他们感到他们个人的贡献无足轻重。你可能只负责大的代码库的一小部分功能。
在大公司里倒是很容易就隐藏在芸芸众生之中。 有一些开发人员基本上终日无所事事,除非赶上一轮全公司范围内的大裁员,否则根本不会有人注意到他们。 不过,这种自主权也可以被善加利用。你能够去琢磨自认为重要或有趣的项目,无须背负产品压力。
为大公司工作的好处:
- 完备的流程和规范。
- 培训机会多。
- 大型有影响力的项目。
为大公司工作的弊端:
- 充斥着官僚主义作风。
- 可能只负责代码库的一小部分。
- 很难获得关注。
软件开发公司与拥有软件开发人员的公司,该怎么选?
拥有软件开发人员的公司中,软件开发人员只负责内部软件或他们正在生产的部分产品的公司。 由于公司的业务重心并非软件,一般不会给软件开发人员足够的尊重和发展空间。这些公司的软件开发实践极有可能非常松散。
软件开发公司是生产软件,做软件开发就是公司的核心业务。 这种公司会更重视自己雇用的软件开发人员的价值。他们的工作环境不一定会更好,但会大不一样。 软件开发公司会使用更为前沿的技术和工具。如果你想研究新技术,你应该直接去找一家软件开发公司。
在推行敏捷软件开发方法的时候,这两类公司之间的差异非常明显。软件为非核心业务的公司在采用敏捷过程中困难重重,这是由于敏捷过程通常是由开发团队驱动的。敏捷过程需要自上而下地采纳推行。
哪种工作环境适合自己?哪种企业文化适合你?决定权在你自己。在接受工作之前与为这家公司工作的开发人员聊一聊是个好主意,你能够更真切地体会在这家公司工作的感受。
找工作时的创新思维 ¶
有一些经验丰富的人会抱怨总是找不到工作。为什么他们找不到工作呢?他们有着各种各样的借口与理由。
- 老人一直占着坑,其他人都没机会。
- 大龄开发者被歧视。
- 所拥有的技能已经过时无用了。
上述理由是真实存在的,但仔细观察求职市场,很多职位都空缺无人,但许多软件开发者都在抱怨无法找到工作,归根结底在于,开发者不了解找到一份编程工作的正确方法。
错误的方法:创建简历,在线填写求职申请,然后提交简历。每天在网站上浏览上百个职位,然后给每一个职位都发去一份简历,然而大部分的尝试都石沉大海。
看下面的真实场景再现:
- 你发出了总共100份岗位申请,可能大约只有30份在很多天以后给你发出反馈;
- 在这30份反馈中大约又只有7个会邀请你来做一次电话面试;
- 经过这7次电话面试之后其中的可能有两三家会请你去做面对面的面试;
- 最终,你可能会获得其中1家的录用通知书。
如果你想获得更多的录用通知书,那你能做的事情主要有两件:
- 申请更多的岗位,比如发出1000个职位申请;
- 提高上面某一步骤的通过率,从而以更大概率进入下一步骤;
为什么很多求职者抱怨说他们已经申请了成百上千份工作,但是仍然没有得到任何职位呢?
- 他们高估了他们发出的工作申请的实际数量;
- 他们能够通过上述流程中每一道关卡的百分比太低;
传统方法的改进措施(简历必须定制化):
- 简历要漂亮,让人过目不忘。最好让专业的简历写手来帮你写一份漂亮的简历,术业有专攻。
- 对公司做一点研究。了解公司的情况和申请岗位的背景,这样后续才能突出你与岗位的匹配。
- 岗位申请要有针对性。写一封定制版的求职信,再加上修改简历以更有针对性地申请这份工作。这样做工作量很大,但很有效果。
- 申请有章法。一定要突出描述你与岗位描述最相关的部分,删除不相关的部分,或者把这部分篇幅降到最低,让招聘经理一看到你提交的申请,就觉得你完美匹配,但不要做得太过曲意逢迎。
- 跟踪结果,适时调整。比如,申请了多少个岗位,哪些收到回复,基于怎样的简历(样式,模板,针对性)等,以便能够更加有的放矢地调整你的计划。申请了50个职位没反馈的简历,即使申请100个职位,也是类似结果。
- 求助猎头:有一点必须要牢记:在找猎头帮忙的时候,你需要让他们确信,你不会令他们在客户面前难堪,因为猎头不想在他们的客户面前留下“我推荐的候选人表现不佳”的印象。猎头比你自己都更希望你能够从他们的客户那里获得一份工作。
下面我们跳出传统思维,尝试一个独辟蹊径的方法。
第一步,构建人脉网络。获得没有公开宣传的职位的最有效方法就是你认识的朋友中刚好有人知道哪里出现了岗位空缺。大多数工作,尤其是好工作,其实根本没有登在广告上。如果你在自己的人脉网络里很有声望,那么一旦他们听说你在找工作,他们就一定主动来联系你。
没人在乎你想要什么。人们只关心自己想要什么。当你试图通过告诉人们你想要的东西来建立人际关系时,你所做的与人们的期望恰恰相反,你是在告诉他们尽量远离你。所以,构建人脉的重点是你要先给予别人价值。
第二步,定位好目标公司。把目标对准你想要加入的公司,而不是对准该公司发布的职位。
例如,找一份远程工作的开发职位。
- 定位到目标公司,了解公司的情况。
- 了解谁为该公司工作。
- 关注该公司开发者的博客,并发表博客,以及后续的一些互动。
当他们一旦想要雇用一位开发者的时候,猜想一下,该公司的多位开发者会推荐谁去做这份工作呢?
第三步,构建一些有用的东西。比如,你使用目标公司开发的软件开发了某种工具,或者,你为目标公司开发了一个工具。 核心思路依然是,你必须体现出来自己的价值,而不只是在炫耀,而且如果你,免费为自己心仪的公司创造了真正的价值,他们难道不会想要录用你吗?
再比如,如果某个流行的网站有问题,很多人都会发现,甚至还会告诉公司该如何改进它,但是很少有人真正为此做一些具体的工作,很少有人真正实现了解决方案以改进该网站。建议不如行动。
第四步,自顶向下的操作。这是来自销售领域的小技巧。
大多数开发者试图在某家公司找到工作的时候,通常都会从底层开始操作。比如,联系人力资源部工作人员,或者开发经理,或者某一位软件开发者,但这些人在做出招聘决定方面几乎没有发言权,尤其是在没有空缺工作岗位的情况下。
取而代之的是从顶部开始。看看你是否能找到某种方法与公司的首席执行官建立某种联系,甚至是公司的CTO或者技术总监。
如果你真的能和这些“顶级管理层人士”中的某一位有说话的机会,那么一定要自信,要有一个良好的开端。不要一上来就向他们求职位。要去谈一谈你能想出来的你能给他们和他们的公司带来有价值的东西。问问他们,是否能让你与继续跟进的人士联系,进一步探讨你能为他们的公司做些什么。
这种方法技巧就是销售人员经常使用的集客式营销(inbound marketing)方法。核心思想是通过创造内容或者其他类型的有价值的东西,让人们自动找上门来,而不是你去找他们。
身为一名软件开发者,你可以通过开设博客、制作视频教程、写书、写文章、开设播客等许许多多类似的方法来提高你的声望。挑选的领域越专注,你就越容易成为领域内的佼佼者,而成为佼佼者应该就是你的目标。而一旦你树立起在这个专业领域内的声望,工作就会自动来找你。
机遇的大门不会永远为你敞开。有时你得拿起铁棍撬开大门。不要放弃,直到你试遍上述所有这些技巧之后——而且还不止一次。
怎样写简历 ¶
简历其实就是广告,除此之外一无是处。大多数情况下,面试官只会对你的简历一扫而过,前后也就是15秒的时间。15秒,你的职业生涯轨迹就此发生转折:是给你面试机会,还是直接拒绝。因此,无论你喜不喜欢听,一份优秀的简历就是如此重要。
现实中,程序员们可能擅长编写代码,但未必擅长写简历。
写简历是一门艺术;写作,尤其是有说服力的写作,是一项技能。
简历和旅游小册子一样,都是广告,最终目的无非就是让人们心甘情愿掏钱。
你任职的公司的CEO并不会去写软件。当然,他可能会坐在电脑前打开IDE写代码开发出运营公司所需的软件。但是,更合理的方式是雇你来做这件事。那么,你可以考虑找一位专业的简历写手来帮你写简历,或者帮你润色。 如果你觉得找人写简历会令你不舒服,那么就自己写简历,但这并不意味着找人写简历或者润色简历是错误的。
写简历前,需要准备好以下信息:
- 之前你做过的所有工作的确切日期;
- 你既往做过的每一个岗位及其岗位说明;
- 每项工作所取得的主要成就(多项);
- 你所有的受教育经历;
- 你所拥有的所有证书或其他荣誉;
- 列出你认为自己最重要或最相关的技能;
- 几个你想要得到的职位,以及每个职位简单的岗位说明;
- 其他任何你认为有关的东西;
一份优质简历的构成要素:
- 要确保你罗列在简历里的所有内容都是基于事实的,没有相互矛盾之处。
- 简历不允许有语法错误或者拼写错误。
- 简历一定要炫。写好简历的最重要的事情之一就是看起来很漂亮。人们判断一本书是否值得一读也是只看封面。
- 根据不同需求使用高度定制的求职信,而且一个个都制作精美。
- 除了要有一份文字版的简历,建议还要录制一份视频简历,这种方式能够很好地展示你的个性。
- 简历是否优秀并不取决于你能在一页纸上塞下多少内容。
- “我觉得一份简历一开始让人看到的东西应该是最客观的实际状况。”这完全是胡说八道,因为没人在乎你想要什么。没有人关心你希望找到怎样一份工作。他们真正关心的是你能提供什么价值。
- 要清楚明晰地描述你的技能和专长是什么,在过去你又是如何运用它们取得了伟大的成就,以及你会如何将这些技能移植到你所申请的职位上。
- 以“你能提供的价值”为核心。你在简历上写的每一件事,都应该从“你能提供的价值”的角度来考虑,而不是“你想要的”。
- 你做过什么,如何做的,成果如何。
下面的例子展现了如何运用“你能提供的价值”为核心这个方法的。可以自行体会其中的差异。
原始描述:“利用Java和Spring框架设计并编写过一种独特的、创新的猫变形算法,改善了创建猫形标志的应用程序的性能与适应性,提高了500%以上。”
改写后的描述:“提出了一种基于旅行推销员问题的猫变形算法。重构猫变形模块以实现新算法,使用Java Spring框架来提高可维护性。性能提高了508%,修复bug的时间减少了34%。”
尝试在简历上列出你拥有每一项技术和技能的想法必须克制住。优秀的简历,就像一份优秀的广告,应该尽可能短小精悍,这样才会有人问津。当然,在求职的过程里,短小精悍才有面试机会。因此,大多数情况下,你的简历应该只有一页。这也意味着你必须要让你的简历简洁明了、切中要害。
可以这样类比这个问题:假设你遇到了税务问题的官司。这时你需要聘请一位律师代表你出庭。你是愿意聘请一位专长是“离婚法,税法,海洋哺乳动物保护法,刑法,房地产法,”的律师,还是愿意聘请一位专长是“税法、公司法”的律师呢?
在准备简历的过程中,还有一个技巧或者方法叫做“极化”。 极化(polarization),指事物在一定条件下发生两极分化,使其性质相对于原来状态有所偏离的现象。 “极化”应用在简历中,就是“独特性”。简历的作用就是令你脱颖而出。当你申请一个岗位的时候,同时可能还有100名其他软件开发者也在申请这一岗位,所以你一定要找到一些可以令你尽可能显得卓尔不群、独一无二的方法。 有些雇主或面试官欣赏独一无二的特质,而另一些人则憎恨标新立异,所以“独特性”也是一把双刃剑。有些人会选择宁愿在少量几个地方因为卓尔不群而被无情拒绝,也不愿意因为泯然众人而到处被人遗忘。
总结,在准备简历的过程中,要富有创造力,要独一无二,但是要把这种创造力用来突出你在简历中要重点传递的信息,而不是分散人们的注意力。
不管你现在是否正在找工作,把你的简历发给一些招聘人员,询问他们的意见。招聘人员看过无数的简历,他们是能告诉你是否需要改进自己简历的最佳人选。
怎样面试 ¶
下面是几种常见的不同类型的面试和特点。
-
电话面试
大多数大公司在招聘开发者时,都会确保用电话面试的方式过滤出他们想要参加面试的所有潜在人选,然后再安排真正的面试,以此来节省成本。电话面试的目的不是决定是否给予你工作机会,而是决定要不要把你淘汰出局。
-
在线技术面试
面试中,你会被要求解决一些编程问题,甚至与面试官一起进行结对编程,这样他们就可以在远程快速评估出你的技术能力。
-
标准技术面试(最常见的面试类型)
面试官会询问一系列关于你将要在工作中大量应用的技术的问题。这些问题都不会很深入。 面试官也会询问一些企业文化相关的问题,通常是在寻找一些迹象,表明你有某种对团队有害的性格缺陷。
-
小组面试(最难应对的面试之一)
小组成员可以轮流向你发问,或者要求你澄清别人以前提过的问题。你要应对的是技术类型的问题和个人性格类型的问题的混合体,每个人都会对你的每一个答案记下大量笔记。
-
编程面试
在编程面试中,你将被要求通过编写代码来解决一些算法问题。你有可能会被要求在白板上编写代码,而不是使用任何集成开发环境。大多数没有为这类面试做好针对性准备的软件开发者,都会在这一要求下败下阵来。在白板上写代码会让人感到非常局促不安,特别是当你没有足够的自信心解决被提问的问题的时候。 你应该花些时间掌握解决编程面试所需的技能,让自己对数据结构方面的知识牢靠掌握。
-
全天或半天面试
这种面试通常会包含几轮技术面试、一轮企业文化适应性的面试,甚至在最后还有一场小组面试。 这种面试会让人精疲力竭。
你还应该准备好回答所有常见的性格和心理测试问题,即大多数求职者默认都会被问到的问题。
- 你最大的优势是什么?
- 你最大的弱点是什么?
- 5年后你认为自己会变成什么样子?
- 当你在工作中遇到了挑战或者冲突的时候,你该如何应对?
- 你为什么想在这里工作/想要这份工作?
- 你能告诉我一些关于你自己的事吗?
- 你为什么要辞去目前的工作?
回答这些问题时你要尽可能真诚,不能透露太多负面的细节,你要尽可能保证一切内容都是正能量,比如,勇于承担责任,积极进取成长,不会因为任何事而责怪别人。
比如,关于“你最大的弱点是什么”这个问题,可以用类似的方法(套路)回答,“嗯,我倾向于追求完美主义,这很好,因为对细节的极度关注意味着我不会犯太多粗心大意的错误,我会创作出高质量的工作产品。但有时我也会为了让事情臻于完美而过分执着。”
不是鼓励撒谎—,永远不要撒谎,但也没有必要直接告诉面试官这些负面情况。
面试中还有一个事实需要接受,就是技术技能纵然重要,但是,当许多技术过硬的开发人员一同竞争某个工作岗位时,决定胜负天平的砝码已经不再是技术能力了。这时候面试官决定雇用某个人其实是基于各种各样的非技术因素。简而言之,通过面试的最快捷的方式是让面试官对你怀有好感。
- 衣着得体。面试时,你应该穿比雇主公司的着装标准高出两个级别的衣服。装扮得体,从而有意无意地制造出这样一种认知:你才是更专业、更优秀的候选人。
- 准时出现。提前10分钟准时到场。不是提前15分钟,也不是提前20分钟,更不是迟到10分钟,当然也不是踩着点儿到。
- 不要撒谎。不需要自告奋勇地把自己的每一条负面信息都说出来,但是如果真被问到,那一定要直言相告。不要对你不知道的问题乱说,胡说八道永远不会给人留下好印象。在面试中,至少有一个问题你是答不上来的,这其实是有好处的。
- 不必过分防备。对于回答不了的问题,克制自己陷入一种防御性的反应中。你的畏缩逡巡而又心存戒备只能告诉面试官你缺乏自信。
- 回答问题时要详尽阐述。不要只从表层回答问题,尤其是针对技术性问题,要增加更多的细节。虽然不必过分向面试官讲述你的整个人生故事,但是要详细阐述所有重要的问题。
- 真正自信。什么都可以假装,可是自信假装不出来。
面试过程中,一定要给面试官传递出这一条重要信息**我是善于自我激励的人。我清楚自己该做什么,而且我一定会去做。** 这是因为,与雇用技术高超但需要生拉硬拽才能干活的人相比,老板们宁愿雇用这样的开发人员:知道的东西可以少一点,但是明确知道要做什么,以及怎样去做。从某种程度上讲,在你可控的范围之内,面试的时候你要集中精力证明自己就是无须督促也能自动自发做好事情的员工。
不管你现在是正在积极寻找工作,还是给自己保留选择的余地,再没有比现在更好的时机去开始准备你的下一场求职面试了。 你应该做的第一件事是确保自己仍旧保持技术能力。如果你力所不及,那么世界上所有的面试技巧都不能帮助你找到工作。
- 整理一份清单,列出你想去工作的公司,以及你认识的这些公司的人。
- 在这份清单上的公司里,如果有的公司你一个人都不认识,那么想办法至少去认识这些公司中的一位员工,并与之建立联系。
- 在自己所在领域多参加活动(会议、培训、等),并把自己介绍给尽可能多的人。
怎样谈判薪酬 ¶
第一、了解你的薪资范围。
在网上找到想要去应聘的公司里某个岗位的薪资范围不是一个很困难的事情。如果你认识某个在这家公司工作的人,不要直截了当地问:“你拿多少钱?” 应该这么问:“据你所知,从X元到Y元的范围在贵公司是一个合理的工资预期吗?如果不是,你认为多少是合理的?” 在你得到的答案基础上再加10%。
应聘的过程中,在被问及你的薪酬要求的时候,你应该记住的一个重要原则:不要先出价。
如果是在收到录用通知书之前就去讨价还价,会有失去先机的风险。如果你在拿到录用通知书之后才开始薪酬谈判,那么你要面临的风险就是会得到一个偏低的薪酬。在我国,大多数情况下,薪资谈判会发生在录用之前发生。
大部分公司都会直截了当地询问你当前的薪资水平和你对正在申请的职位的薪资期望。下面的几种方法或许能帮助你应对这种情况。
- 你可以说,按照你现在工作的公司的规定,这属于机密信息,你觉得向外人提供这些信息是不对的。
- 你也可以说,薪资包含有形和无形的福利待遇,只谈工资金额是片面的。
- 你也可以说,你会接受任何合理的待遇,或者你想知道整个薪酬待遇的整体方案,而不是随随便便地报一个数字。
- 如果你正在等待其他公司的回复,你可以说,你还需要几天的时间来考虑。
进入薪酬谈判时,下列情况下你将会拥有最为优势的地位:
- 让这家公司专门找你;
- 这家公司之所以要聘请你,要的就是你独特的才华、能力或者声望;
进入薪酬谈判时,下列情况下你会处于不利地位:
- 你在没有任何人引荐的情况下申请了这份工作;
- 你不太符合这份工作的岗位要求;
- 你的面试过程不是很顺利,你是第三顺位的人选。只是因为前两位候选人拒绝了录用通知,所以他们才找到了你;
- 你已经失业了;
因此,在开始薪酬谈判之前,你要竭尽所能让自己尽可能处于优势的地位。下面这些做法,能够帮你提升自己的谈判优势。
- 在找到另一份工作之前不要辞职——哪怕你现在的老板是个混蛋。
- 如果可能,申请职位时一定要设法获得推荐;
- 一定要为面试做好充分的准备,这样你才能展现出自己最好的一面;
- 看看自己是否能够同时获得多份录用通知书;
- 建立良好的声望。你的名气越大,你在谈判中的优势就越明显;
在你收到录取通知书或者合同时,仔细阅读内容:报到日期、年薪与月薪、职位名称、休假及健康保险等福利,以及其他所有对你很重要的细节。
在评估薪酬的时候,不能只看工资数额,应该关注小时薪酬,在计算小时薪酬的时候需要考虑下面这些因素。
- 可以预期的每周或每月工作时间;
- 可以预期的所有收入,包括奖金;
- 休假时间;
- 所有福利(包括各种社会保险);
如果同时收到多份工作邀约,你就拥有选择的权力,你在谈判中就站在最有立的位置,你有转身离开的能力。 从根本上讲,同时拥有多份工作邀约的真正价值并不是利用这一份来胁迫另一份,而是让你拥有选择的权利。 小心谨慎地运用好这份优势,别把到手的一副好牌搞砸了。
离职该怎么做 ¶
离职的过程往往牵扯到很多情绪因素。愤怒、沮丧甚至内疚,这些极端情绪往往会激发一个原本老成持重的人在离职的时刻做出丧失理智、意气用事的举动来。 以错误的方式离职会给你的职业生涯带来灾难性的后果,并且可能会给你的声望带来永久性的损害。
很多软件开发者都在抱怨自己工作得不开心,自己很长时间都没有得到成长,但他们还依旧待在那里。
怎样才能确认自己是否已经身处“温水”之中?怎样才能让自己意识到现在该是离职的时候了?最好的指标之一是缺乏成长的机会。身为软件开发者(并且作为一个普通人),如果你正在从事的工作没有给你带来新的挑战,而且你没有看到任何成长的机会,那么这可能就是一个很好的标志,预示着你是时候该离开了。
然而,如果你已经身处舒适区,害怕改变,害怕未知世界,那就很容易陷入墨守成规的思维定式中。但是,生活中的所有成长都是在打破自己的舒适区之后才能够得以显现的。
没成长,毋宁死。成长才是硬道理。
另一个能够预示你该提出辞职的标志(也许也是最好的一个),就是当你发现当前的工作环境已经乌烟瘴气的时候。
人生苦短,没有时间与卑劣的人上演宫斗戏码。让你的人生远离这些是是非非吧。当你身处在这样乌烟瘴气的工作环境中时,不要试图能够改变它。迅速离开它吧。
当真正的好机会降临的时候,你要好好抓住。
如何正确的离职?
在做出离职的抉择时,你需要尽可能地把个人情感因素排除在外。你要确保不要为自己辩解,你需要确保让自己的决定有据可依。正如英国前首相本杰明·迪斯雷利的箴言:“永不抱怨、永不解释。”
在离职过程中,放弃“团队”会让你背负上巨大的负罪感,你会感觉别人会对你失望至极。但是,你必须要改变这种感觉,你要意识到,没有你,生活还能继续下去;而且,你还必须承认,你对团队并没有你想象中的那么重要和关键。没有人是不可替代的。
辞职前当然要提前通知公司,转身就走当然不专业,但只要按照法律规定提前一个月通知公司即可。注意,在你在提出辞职之后,不建议在当前的岗位上多待一段时间。在这段时间里,你要去就职的那家新公司会发生了很多事情,说不定会导致他们取消对你的工作邀约。你可能突然会从手握两份工作而变成一无所有。
如果你要辞职,直接辞职就好。千万不要用辞职来做威胁。
如果你对工作环境有意见,你可以开诚布公地提出意见并要求改变;如果你的意见无济于事,那么你有两个选择:要么忍耐,要么辞职。
一旦你威胁要离职,你的老板就会开始寻找你的替代者。没有人喜欢被威逼的感觉。一旦你被认为是一个喜欢靠威胁来得到自己想要的东西的人,你就会被贴上办事没谱、不负责任的标签。
提前流露出离职的想法,是愚不可及的做法,不管你和老板关系有多好。 当老板知道一名员工在两个月后就要离开时,让员工继续留着一段时间对老板而言是一个沉重的负担。老板不能委派他做任何重大项目,老板也不知道他是会尽职工作。
世界很小,小到你难以置信。
我目睹过一些软件开发者,就因为他们在离职时的所作所为,把他们自己逼入绝境,除非换个地域,否则很难再找到工作。
要想拿着优越的条件离开现在的岗位,你能做的最好的事情之一莫过于卓有成效地培养好你的接班人。许多软件开发者天真地以为,如果在他们离开之后,公司会遭到重创。事实恰恰相反。一位优秀的领导者在他履新之时就着手开始培养自己的接班人。一位优秀的领导者知道,通过团队建设、公司流程建设等基础设施的建立与完善,公司可以在他们不在场的情况下保持业务的正常运营,这才能彰显他们的价值。
认为自己是一个组织的关键节点,一旦缺少了他们这个组织就会踏上崩溃之路,这是缺乏自信的表现。
当你离职的时候,不管你是否是自愿离职的,都一定要确保在交接的时间里尽你所长,做到最好,培养你的接班人。这是在构建你的人设,因为这个世界很小。
离职面谈的时候别说任何坏话,你不可能从中得到任何好处,相反很多坏事可能就此发生。
离职面谈的时候,当你被问到“公司还是什么地方值得改进”“公司还有哪些问题”“你为什么要离开”“你在这段工作时间里最不喜欢什么”等诸如此类问题的时候,记着只要给出一些令人愉快的回答即可。千万不要说出你的真实想法!千万别犯傻。
设立离职面谈的初衷都是为了善意地改善公司工作环境,但公司文化方面的问题绝不是通过倾听前员工在临离开之前的抱怨来解决的。不要卷入一场对你没有任何好处的游戏之中,那只会有很大的机会令你自毁前程、惹祸上身,因为这个世界很小。
半路出家怎么做 ¶
有一些优秀的软件开发者当中,在他们的教育背景或者职业生涯刚开始的时候,并不是软件工程教育背景,或者从软件开发起步的。
中途转行的优势:
- 具备优秀的人际交往技能和软技能,而这两点在软件开发领域从业者中都是欠缺的。如果你工作在一个对软技能及人际交往技能高度重视的领域内,拥有这些技能能够给你带来独特的优势,能帮助你在转行进入软件开发领域的时候一般都能顺利通过学习曲线。
- 成功的心态往往是普遍适用的,如果一个人身处某一行业中能够取得成功,那么他们在任何行业中都会获得成功。
- 或许半路出家转入软件开发行业的人士具有的优势是不受软件开发行业思维定式的羁绊而具备创新思维。
关于软件开发行业思维定式的羁绊,这里聊一下“货物崇拜编程”模式。
“货物崇拜编程” (Cargo Cult Programming)是一种计算计程序设计风格,通常是一个程序员既没理解他要解决的 bug,也没理解表面上的解决方案的典型表现。 这个名词有时也指不熟练的或没经验的程序员从某处拷贝代码到另一处,却不太清楚其代码是如何工作的,或者不清楚在新的地方是否需要这段代码。也可以指不正确或过份的应用设计模式,代码风格或编程方法,却对其原理不明就里。“货物崇拜编程”来源于“货物崇拜”这个词。其衍生词还有“货物崇拜软件工程”。
软件开发者现在越来越倾向于“货物崇拜编程”模式,即程序员开发软件的模式并不是基于他们的工作本身,而是因为其他开发者也在这么做,而这些开发者的做法往往被认为是“最佳实践”。从其他行业转行来的软件开发者,拥有独特的外部视角,能够突破编程世界里已经普遍存在的先入为主的概念和想法,进行更有创造力的思考。
没有任何职业经验的软件开发新人也可能拥有相同的潜质,但是他们往往会因为缺乏经验而对自己的想法丧失信心,很容易陷入对行业大牛的迷恋与崇拜之中。
中途转行的劣势:
- 软件开发工作的高复杂度和所需要的大知识量是阻碍许多人转行成为程序员的难以逾越的障碍。软件开发的确要比一般的职业要难许多。在进入这一领域的时候,如果你认为你能像学习如何从事其他工作一样地学习软件开发,那么对你而言这肯定会是一个不利因素。你必须完成大量的学习工作,必须有的放矢地完成实践工作,这样你才能成为编程这个行当里的行家里手。
- 时间问题。虽然你可以利用自身优点加速通过学习曲线,但是如果你想弥补由于缺乏直接经验而造成的知识空白,那么你仍然需要埋头苦学迎头赶上。
如何转行?坚持不懈地学习,持续不断地提高自己的技能,孜孜以求寻找各种机会、创造各种机会,你终究会梦想成真。耐心和毅力是关键!
- 从当前从事的工作入手实现转行。从自己手头工作的点点滴滴入手开始学习编程的——编写程序来帮助自己有效完成工作,或者开发某种工具来帮助每个人有效完成工作。甚至都可以在当前工作的公司内部为自己创造一个软件开发的角色,如把一些工作自动化或者构建某种工具。
- 寻找一种可以有效利用现有背景知识的方法。拥有领域业务知识可是一项具有极大价值的优势,对软件开发公司来说,找到具有10年软件开发经验的开发者可能会很容易,但是找到拥有10年或者更久领域内业务经验的人可是宝贝。软件几乎存在于每一个主要行业。
- 愿意从底层开始。如果你正在转行从事软件开发工作,你需要可以从底层开始做起的决心和意愿。别担心,你之前的工作经验将会确保你不会在底层工作岗位待得太久。如果你在另一个行业里已经身经百战、高歌猛进,那么你原先的许多软技能都将有效加速你在软件开发领域内的职业发展进程。你只需要在刚开始的时候多一些耐心而已。
- 内部转岗,比如从测试转开发,你将面临的最大障碍将是人们对你的看法。
- 坚持走自己的路,别管那些偏见,让你想要转型的目标尽可能地广为人知。语言一定要用实际的行动来支撑。当你和你的老板进行这样的谈话前,看看你是否已经列出了一份清单,所有可以帮助你从目前的角色转变成为软件开发者的课程都已经罗列其上。如果你能罗列出所有你需要学习的内容,以及计划好学习过程的里程碑,那么在你准备就绪的时候就能为你的转岗梦想提供更有说服力的理由。
- 寻求机会。如果你真的梦想进入软件开发领域,那就不要期待着有人会主动给你加冕“开发”的头衔,也不要期待有人会主动给你分配开发的任务。恰恰相反,即使在你目前的角色中也要努力寻求机会去做一些编程工作。
- 自己创造机会。自己去找寻那些你可以做出贡献的领域,并且不会妨碍到任何人,也不会为了问问题而占用他人的时间。这些机会往往就是没人愿意去做的“脏活累活”,比如,调试一个bug,写API文档,写个小工具,等等。
- 利用自己的时间。如果你真的想在软件开发方面获得机会,你就必须多付出一些,利用你自己的业余时间来推进你的转型历程。即使你在工作时间里被赋予完成一些软件开发任务的工作,你也应该付出一些额外的、不计报酬的时间用于完成另外一些软件开发任务。
- 换一家公司。即使你不能转型成为本公司的软件开发者,你也应该尝试着在你目前的工作岗位上锻炼自己以获得开发经验,这样你就可以在向另一家公司申请软件开发职位时把这段经历写在简历中。
合同制员工入职与正式员工入职的对比 ¶
软件开发行业有两种基本的就业类型:你可以选择成为某种类型的合同制员工(contractor),也可以选择成为一名正式雇员(employee)。
合同制员工的各种类型:
- 由代理机构派遣的合同制员工。这种类型的员工为一家机构工作,这家机构会把他们派遣到客户现场工作,机构向客户收取费用。员工并不直接为客户工作。通过卖人头而获利。
- 独立承包商。如果你是一个独立的承包商,你将拥有一家企业或者法律实体,你就是一个自雇型的工作人员。通过卖人头而获利。
- 自由职业者。自由职业者就是一个受雇于某一个特定项目或者特定工作的承包商。
合同制员工与正式员工的对比:
- 钱。在大多数情况下,在同等工作岗位上,作为一个合同制员工你将得到更多工资数额。但正式员工会获得更多的其他薪酬保障。
- 工作环境。在有些公司里,在合同制员工和正式员工之间存在巨大的鸿沟,但是在有些公司里,差别又不是那么明显。不过,差别总是存在的,比如,正式员工心中浓厚的精英主义心态。此外,合同制员工会缺失团队的归属感。
了解招聘 ¶
很多招聘人员都会联系尽可能多的潜在求职者,以便找到最合适的人选来填补正在招聘的岗位空缺。 尽管招聘人员发给你的领英电子邮件写得天花乱坠,让你觉得自己是一位人见人爱的白马王子,但是在大多数情况下,他们只是在一个固定的模板上复制/粘贴上你的名字。
无论是招聘机构主动联系你,还是你主动联系招聘机构,招聘人员更感兴趣的是尽可能多地去填补空缺的岗位。你要尽可能强势地展示自己的优势,这会影响招聘机构向你推介怎样的工作岗位。
招聘人员可能会竭尽所能让你尽快通过所有招聘流程。这意味着,你可能并不是这份工作最适合的人员,他们可能只会告诉你关于这份工作、这家公司所有正面的事情,以使你欣然前往就职。并不是说所有的招聘人员都是居心叵测,但是你一定要自己留意,不要轻易基于自己的假设给出判断,主动向招聘人员多问多交流总是好事。
通常情况下,在你申请某个职位的时候,你既可以直接提出申请,也可以通过招聘人员提出申请。 有一些岗位是独家委托某个招聘人员或者招聘机构才能去申请的。要想申请这些岗位,你没有别的选择。 此外,可能一些大型人事代理机构已经与某些用人单位建立了良好的合作关系,已经在事实上成为用人单位的指定代理。
在谈判薪酬的时候,招聘人员/招聘机构通常也比你自己做得更好,而且通常情况下能把你的薪酬谈得越高,他们的收益也就越大。事实上,在谈判的时候,借助代理机构的力量是非常有效的。通常,如果你能让别人代表你去谈判,你可以得到更高的报价。
此外,一个优秀的招聘人员/招聘机构可能会有助于展示出你的最佳状态。非常有可能,他们会帮你修改简历,还可能把你包装成最优秀的候选人,甚至会利用他们获得的一些内部消息帮你顺利通过面试。
03|与同事相处 ¶
你可以成为世界上最好的程序员,但是如果你不知道与同事的相处之道,你不仅会在工作中度过一段苦不堪言的时光,而且你的工作效率也可能不会那么高。
在你的工作的历程中,会遇到很多友善的人,你和他们可以泰然相处。但也可能会遇到一个“有毒”的人,不管你做什么,他总是会给你带来麻烦,这种人你应该尽量避而远之。
在人们与你相识之后,要想改变他们对你的看法是极为困难的,所以当你和那些可能会在你的生活中占据重要位置的人相处时,最好要给他留下一个良好的第一印象。但是,很多时候第一印象是带有情绪化的,很容易给对方贴上不正确的标签。
当你第一次踏入一个新的工作环境时,你需要确保你不会因为力所不能及而让人感觉你不能胜任工作。即使谦卑是一种美德,也不要因为你是新人而缩手缩脚和唯唯诺诺。你也不想永远被贴上标签,永远被认为是“菜鸟”。
对自己的技能充满自信是非常重要的,同时也要尊重你的前辈,特别是那些在这里待了很久的前辈。要做到这一点,最好的方法之一就是提问很多聪明的问题,尤其是有人在培养你的时候。前辈是没有义务培养新人的,如果新人经常提一些未加思考的问题,表现出很强的依赖性,很容易被贴上“菜鸟”的标签。一定要带着自己思考后的想法提问,而且要提具体的问题,提宽泛的问题说明自己没有认真思考。
你还要特别当心在工作的最初几天里自己的着装和行为举止。即使你可以随意着装,也不要穿着随便。在新工作环境的第一周里,你的穿着应该比平时高一到两个级别,这样你就会给人留下专业的印象。这背后的隐藏的逻辑是,前辈能干的事情,新人不一定能干。
上面这些对新人的建议,是想强调一点,很多时候你的同事对你的看法会直接影响到你的经理对你的职业发展方面做出的决定。 经理能感受到的是你的态度和方法,这种感受是间接的,而同事给出的反馈是基于日常工作内容的细节信息,是直接的,这些反馈是会改变经理的对你的印象和态度。
适度的竞争是有好处的,但不能体现在态度上咄咄逼人。
在大多数情况下,如果你是一个乐于助人的人,人们也会做出同样的回应。愿意帮助同事解决他们的问题也会使你受益匪浅,因为你会看起来比自己聪明得多。你会因为在团队中成为一个“让我来做”的人而声望满满,如果你试图获得团队的领导职位或者获得晋升的话,这将对你大有裨益。这是在强调“做正确的事情,并正确的做事情”的原则。新人多做事情是由好处的,一方面是展现积极的态度,另一方面是锻炼和提升能力,“做的多、错的多”的观点是不可取的。另外,这一点也是前辈和经理对新人的观察和考验中的一项,会影响到新人在当前团队中后续的职业发展方向。
哪里有人类,哪里就有戏剧上演。这只是社会环境的结果。但是,不能因为到处都有戏剧上演,你自己就要全身心地投入其中。别让那些狗血的剧情渗透到你的生活当中。如果你想要置身戏剧之中,你就是允许自己陷入胡闹当中。你要对你允许哪些东西进入你的生活掌控有力,你要对你选择倾注自己情感和体力的东西控制得法。
当你听到办公室里的谈话内容充斥着宫斗戏码上演前的嗡嗡声时,就是你戴上耳机开始打字的大好时机了。尤其是当有同事试图在你周围(或者就你本人)制造戏剧性话题的时候。
如果有人不喜欢你,他们说了很多你的坏话,该怎么办?这事很严重,但是,别理它。继续工作就好。宫斗戏码不会给你的生活增添任何积极正面的东西。参与其中的人士有很多已经结束了自己的编程生涯,因为它会让一个原本聪颖睿智的软件开发者不能专注于自己的业务,因此,千万别掺和!
只要人们为了实现一个目标而共同努力、聚集在一起工作,就会有某种形式的冲突存在。我认为应该这样,你认为应该那样,我们之间就有了冲突。
如果解决得当,冲突是有益的,因为它可以产生更好的结果,优于来源于你或者我们各自有限的想法所导致的结果。你的目标应该是**找到解决问题的最佳方法,而不是极力去证明你是对的**,也不是要证明你比同事更聪明,更不是为了证明他们的想法愚不可及。
虽然我们要避免冲突,但是如果你要刻意逃避冲突,它可能就会演变成宫斗戏码,你得刻意压抑自己的愤怒或怨恨,因为愤怒或怨恨会毒害你在工作和家庭当中的人际关系。
办公室政治中的政治与宗教的话题,永远是禁区。
处理原则是,置身戏外是必要的,但是遇到冲突就不能置于戏外了,冲突不应该演变为私人恩怨,要用恰当的方式来表达意见和观点。
你周围一定有无所事事的同事,似乎从未真正完成过任何工作任务。他们就是团队里拖后腿的人。但他们会拿出各种证据,来证明他们是很忙的,而偷懒的是你。还有一点,他们可能是基于你不知晓的某种形式的裙带关系而在这里工作的。所以,你要做到就是,闭上嘴,管好自己就行,把自己的工作做完,尽可能提高自己的生产力。别管别人做什么、不做什么。
但是,当这些无所事事的人会把团队拖垮,或者让团队完全失去战斗力,这时你必须要站出来,这是正确的做法。如果某人确实是团队中的害群之马,那么让经理或者负责人知晓这一点就是你的分内之事,你只需要基于事实、措辞谨慎、点到为止即可。
如果你周围有话痨的同事怎么办?最简单的做法是,你给自己留出专心工作的时间,并明确相关规则,比如明确告知周围你现在处于“请勿打扰”状态。或者,直面话痨先生,告诉他你是来上班的,希望他不要在工作中与你交谈与工作无关的事情。
有些人你无论如何都帮不到他们的,你应该避免跟他们在一起。有些人似乎总是有坏事发生在他们身上,似乎总在扮演无助的受害者角色,永不停歇。 这类人被称为“有毒的人”,他们的危险之处在于,你会为他们感到难过,你总想去帮助他们。看起来他们真的很不走运,而且还被搞得一塌糊涂。但是,命运是否在他们的困难遭遇中起作用,这不是由你来决定的。你最好完全避开他们。 如果你必须要与他们打交道,打交道的时间要尽可能短之又短。如果你能完全避开他们,那就避开他们。如果你和这种人同处一个团队,你必须经常要跟他们打交道,那么实际上你可以考虑换个团队,甚至换工作。
04|与老板相处 ¶
了解老板 ¶
学会有效地与同事打交道对你的幸福感和工作满足感无疑是很重要的,但学会与老板打交道可能关乎你是被解雇或晋升。
太多的员工无法与老板恰当相处,并不是因为他们故意让这事变得困难,而是因为他们没有掌握要点。 这背后主要问题之一就是员工不了解公司的商业逻辑和管理链条。
这可能是软件开发人员“不争不抢”的天性造成的。但是一群高智商的程序员聚在一起,各有各的想法,是很难达成共识的。每个人都在等待其他人同意自己的看法,这会导致各种拖延,进而导致“共识驱动”变成了“折中驱动”,这显然不是解决问题的好办法。 最终,得有一个人站出来发号施令,统一思想,这个人就是所谓的“管理者”,并且,如果这个人决定了是否雇你的权利,那这人就是“老板”。
需要接受的现实是,即便你天资聪颖并且本领高强,你也只是公司的一名雇员而已。最终往往是公司,或者一个能代表公司意志的人,来决定你该怎么做。
要想真正了解你的老板,你就需要了解老板的衡量标准是什么,要知道老板的衡量标准与你自己的衡量标准可不是一回事儿。
老板一般是基于**下属的表现**、**下属如何被管理**以及**下属如何报告他们自己的工作**这几个要素来衡量他手下的人表现如何。 所以,如果你想知道你要怎么做才能对你的老板更有价值,你应该集中精力让你老板在这些方面的工作变得更加容易。
以老板视角看,老板关心的主要问题可能是状态,或者叫信息。
- 项目进展如何;
- 团队正在做什么工作;
- 工作的进度安排;随时向你通报进展情况;
- 任何可能会导致项目失控的重大问题;
- 团队的效率;
- 都做得很好;
- 都为团队的整体成功做出贡献;
- 尽可能自动自发地自主运作,都搞得清楚需要做什么,而不是推一下才动一下;
- 尽可能多地自己解决问题;
- 不会小题大做;
- 没有制造任何有损团队氛围的事情
“责任在我”的认知 ¶
如何与老板相处融洽其实真正的责任在你自己身上。
在现实世界里,某些人比其他人拥有更大的权力,可能这就是我们平时说的生活的不公平。 你的老板在你眼中可能很差劲,但这并不重要,因为他有权力,而你却没有。这意味着能否与他相处融洽,取决于你而不是其他。 与老板的斗争中失败并承担负面后果的往往是你,无论真理是否在你这一边。
重要的是要尊重权威的地位,如果你做不到,那就离开吧。因为这就是世界的运作方式,试图对抗现实并不是非常有效的策略。 你必须千方百计与你老板相处融洽,即使他在你眼中是一个很烂的坏老板。
“服从”难道不是懦弱的表现吗?
如果军队中的高级士官对上级军官下达的每道命令都嗤之以鼻,你会觉得他是一名好士官吗?你会觉得他有能力管好自己的队伍吗?大概不会。
所以,回答这个问题要分不同情况。简单讲,只有在你被迫屈从的时候,服从上级才是懦弱的表现。如果你主动选择服从上级,你其实是在维护自己的正当权益。屈从是被迫的,服从是主动的。
当你收到来自老板要求,有两中选择,“与老板站一边”和“走人”,介于这两种选择之间的,都属于“对抗”,而“对抗”意味着你想在不承担自己行为后果的前提下达到自己的目的,这才是懦弱的表现。
服从通常是指在特定组织或体系中,出于对规则、法律或权威的尊重,主动选择遵循上级的指令或命令。而屈从则带有被迫、无奈的意味,通常是在压力或威胁下不得不做出的选择。
在某些情况下,服从是必要的,比如军队中的纪律要求,或者工作中对上级的合理指令。这种服从是维护组织秩序和效率的重要部分,不应当被视为懦弱。
懦弱被定义为在面对选择时,试图逃避责任或后果,希望在不承担后果的前提下达到自己的目的。这种对抗或逃避行为,而不是服从本身,被认为是懦弱的表现。
服从是否懦弱,需要根据具体情况来判断。如果服从是基于对大局的考虑,为了维护集体的利益或遵守既定规则,那么这种服从是有原则和勇气的体现。但如果服从是在压力下无奈的选择,没有自己的判断和立场,那么可能会被认为是懦弱。
主动选择服从通常意味着个体有自己的判断和选择,是在权衡利弊后做出的决定。而被动屈从则没有这种主动性,更多是出于无奈。
所以,在职场中广受欢迎的秘诀就是思考自己的行为会让周围的人产生怎样的想法。这并不意味着你要做个受气包,一味迁就讨好其他人。 要成为那种会说话的人,即便不同意别人的看法,也能用他人可以接受的方式说出自己的看法; 要成为那种乐于助人的人,对同事、老板和任何其他人都愿意施以援手; 要成为那种做事情不仅要让自己有面子,还要让别人有面子的人。
如何让老板的工作更轻松。
第一,自动自发完成任务。你能做的最好的事情之一,就是提前预测你老板的需求。
第二,做好汇报。老板的一项重大职责就是要知晓发生了什么事情,然后他就可以循着管理链条进一步上报这些状态信息,这样他就可以在潜在问题恶化成为团队真正的障碍之前遏制住它。
很多软件开发者都不会按周创建周状态报告、详细说明他们在本周内所做的工作并给出概要的进展状况和任何潜在的问题。当有人质疑我为什么能够得到升职时,周报也是最棒的支持材料。
第三,积极主动地在团队中勇于承担责任。太多太多的软件开发者喜欢指指点点,玩弄“指责别人”的游戏而推脱责任。
总而言之,要做一个老板可以依赖的人,帮他解决问题、推动项目前进,而你自己也会因此而被视为团队的无价之宝。这也恰好是获得提拔成为团队主管或者更高职位的好方法。
“坏老板”的类型 ¶
生活中有些东西是你能掌控的,有些是你无法掌控的,你能掌控的东西太少了,而你的态度和看法是为数不多你一直可以掌控的东西。
在你和老板之间多多少少都会发生交集,发生一些事情,有令你高兴的,也有令你不高兴的。你不必对每件事都上纲上线,尤其是对你无法掌控的事情。你掌控不了他人的看法。你要是真的很讨厌老板,很不喜欢现在的工作,你可以直接跳槽去找下一份工作。但是,如果你决定在现在这个岗位上继续干下去,那最好不要在意那些不触碰你底线的细节,这些都是小问题。
- 事必躬亲的老板。
这种类型的老板可能是“坏老板”类型中最常见的,也可能是最令人讨厌的。如何应对这种老板呢? 按照要求做事的时候不要过多发问,主动汇报,赢取信任,减少被过问。
- 喜欢威逼恫吓的老板
通过使用恐惧和虐待的工具来迫使你服从老板的权威,这些老板属于恃强凌弱类型。在这种情况下,如果要坚持下去,你就要立场坚定,坚守自己的底线,绝不含糊。
面对一位喜欢威逼恫吓的老板,你应该做的另一件事就是把一切都记录下来。把你们之间的对话记录下来,把他滥用职权的实例记录下来,特别是在什么时间、跟谁讲的。如果你要打一场人事甚或是法律官司,所有这些你记录下来的证据将极大地增强你获得有利结果的机会。
此外,对任何虐待行为一笑置之,不放在心上,做好你的本职工作,耐心等待你的时机。但这样的环境是非常艰难的,很难做到。换一份工作可能是一个不错的选择。
- 无知的老板
有个无知的老板,比有个事必躬亲的老板要好些。
在给老板贴上“无知老板”的标签之前,需要认真确定他是否真的“无知”。
不要想当然地认为你的老板就是个傻瓜。不管你的老板是不是团队里最厉害的人,都改变不了这个人就是你的老板的事实,你必须向他汇报。 现实中,我们很容易把那些不同意我们的见解或者看待事物与我们观点不同的人看作是蠢货,而事实上他们很可能比我们认为的要聪明得多。
在与“无知的老板”打交道时,最大的矛盾之一是他们有时要求你做一些毫无意义的事情,或者他们做出的决定完全就是错的。大多数软件开发者对这些矛盾的第一反应是拿出所有的论据和理由来攻击他们的老板,例如,为什么老板的提议是错的,为什么只有你才知道你在说什么。 与其采取这种直截了当、好勇斗狠的方式,还不如试着发挥你的优势,利用你的高超智慧,亮出你高人一筹的妙计。试着问一些聪明的问题,这些问题会引导你的老板走向正确的方向,而不是好勇斗狠。 用这种方法需要一点谦逊,但它比你要试图与可能不懂逻辑的人进行逻辑上的争辩要有效得多。
再说一遍,也许你的老板真的很聪明,但你可能会因为他在其他地方比你聪明才觉得他很蠢。有时,软件工程师以及其他高技术工作人员会认为,那些了解业务的人或者比他们更了解技术的人是愚蠢的,而事实上,这些人相当聪明,只是他们不懂计算机编程,不懂计算机程序员。因此,你要想出一种方法,以你老板的语言、用他会理解的方式表达出来。
- 奴隶主一样的老板
一个奴隶主一样的老板会驱使你不停地工作。他对你迄今为止所表现出的各种雄心壮志从未满意过,他总是希望你可以承担更多的任务,希望你可以做得更快、工作时间可以更长。
有时候,你可能因为不荒谬地加班而被解雇;有时你确实需要加班,甚至周末要来上班,但这应该成为例外而不是常规。
不要因为你的老板是个疯子,或者其他人都是这么做的,就让自己陷入每天周而复始长时间工作的泥潭中,也不要每个周末都来上班。要坚定地告诉他,你还有其他责任要承担,所以你在工作的时候你会努力工作并完成工作任务,但你不会牺牲你的家庭和其他责任来无偿加班。然后努力工作,异常努力地工作!
通常情况下,一个精力旺盛、善于压榨的老板,会试图让你去遵循荒谬的时间表,如果没有大量的加班,是绝对无法实现的那种时间表。把工作推回去,不要把工作搞砸了,要尽可能地给出一个现实的、客观的估算。
在跟这种类型的老板相处时,一定要明确界定你的底线,不要让自己被利用了。一开始,界定底线是件很困难的事情,但是一旦底线明确了,你就会发现它们会被保持得很好,你的生活也会轻松许多。
你不是总能选择老板。如果你的老板真的糟透了,你无论如何都无法与他相处,那强烈考虑换一份新工作吧。生活中,有些战斗根本就不值得去打。
05|与团队协作 ¶
作为程序员,你职业生涯里的大部分时间都是与团队中的其他人一起工作。 与同事相处和与团队伙伴相处,是有很大不同的。 高效能的团队要比团队里所有个体的能力之和更为有效。这就是所谓的协同。无效的团队可能会比团队里效率最低的那个人还要低效。
与测试人员相处。大多数测试人员都不是软件开发者。即使测试人员知道如何编写代码,也可能并不像开发者那么不擅长编写代码或者做好系统的架构设计。要先测试一下自己的东西,尽一切可能避免陷入“发现bug-修复bug-验证bug是否被修复”的连环套中。另外,帮助测试人员实现自动化测试是一个非常好的做法,也是体现自身能力的一种方式。
赞美一个故意羞辱你的人是很不容易的,但这是更高明的套路。在很多情况下,这个人只是在寻找一些承认与认可,一旦你给予他们认可,他们就会跟紧你。一点儿真诚与诚挚的赞许就能起到很大的作用,记住这一点。
与团队目标一致。团队,一荣俱荣,一损俱损。
人类的天性就是要先为自己的最大利益服务。 如果团队里的成员将各自的命运联系在一起,一荣俱荣一损俱损,那么团队中每个成员的最大利益就等同于团队的最大利益。
软件开发团队普遍存在的问题之一就是,他们以过于宽泛的方式分散了团队成员彼此之间的任务。太多的团队采用了分而治之的方法,而不是一种群体进击的方法。
作为团队中的软件开发者,你可以做这样一件事:当你还能对其他团队成员已经在进行中的工作有所贡献时,你就不会选择开始新的工作任务。在敏捷开发环境中,这意味着不需要自己处理一个新的待办事项,而是去发现已经在处理积压任务的团队成员,并帮助他们在进入下一项工作任务之前完成这些待办事项。在看板式的软件开发中,这被称为限制WIP(Work in Progress,进行中的工作),这是一种有效的方法,可以使更多的积压工作更快地通过瓶颈。
你不能强迫别人与你合作,但是你可以给他们一些帮助,只是不要让他们看起来像是需要帮助一样。
对团队负责。专注于你自己的目的和目标,把团队的目标放在第二位,这种做法很有诱惑力,但却是错的。 许多软件开发者错误地认为,通过努力寻求成为第一名,他们就是在为自己的职业生涯做最好的事。很少会出现这种情况。 虽然个人的表现也很重要,但是大多数软件开发行业的管理者更关心团队的整体表现(管理者视角)。
最好的软件开发者,是通过自己编写代码或自己工作来达到最大产出效率的开发者; 杰出的软件开发者,是能使周围其他人都变得更好、提高团队整体作战能力的开发者。
例如,Jerry不好好工作,他整天坐在办公桌前刷手机视频。
你可以暗自抱怨一句“Jerry为什么还不备开除”,然后尽你所能做好自己的工作,任由Jerry继续无所事事。这样做对团队没有任何帮助。 无论你发挥的作用有多大,如果因为Jerry的问题而整个团队目标没有实现,那么你的成功将是相当苍白的。
相反,即使你没有被要求,即使你不是团队的领导者或管理者,你也可以对整个团队负责,包括Jerry。 你可以去和Jerry直接谈一下,问问他遇到什么问题,或者是否有你可以帮助他的。 也就是说,即使你不是团队的领导者,在团队中,你依然可以通过自身的影响力,鼓励Jerry和其他团队成员,提醒他们你在依靠他们,信任他们,大家也是相互依靠相互信任。有时候你可能需要花时间指导其他开发者,帮助他们将自己的技能提升到同等水平,承担了一部分管理者的工作。
所以,如果你真想引起关注,成为人人都争相聘用、人人都想拥有的软件开发者,那就去成为那种对整个团队的能力和绩效更为关心的软件开发者,不要做那种只关心自己的人,这包括要对一些你无法直接控制的事情承担责任(做到这一点很不容易)。今后你在找一份好工作时永远不会遇到问题,而且你也一定可以获得晋升。
**沟通与协调**是成为一名高效能的团队成员的必备技能。你需要让团队其他成员都知道你在做什么、你遇到了哪些问题,这样你才能从团队的集体智慧和能力中受益,也才能对团队有所贡献。 作为一名软件开发者,很容易采取这样的做事态度:告诉我你想做什么,然后就别烦我了,我会完成的。
团队沟通要坦诚也要机智。最糟糕的团队就是团队里每个人都彬彬有礼,没有人会直接反对别人的意见。 尽量避免冲突是人的本性,但是健康的团队,就如同健康的人际关系一样,要有一定程度的良性冲突。如果你想成为一个团队中有价值的一员,你就不能做一个到处吹吹拍拍的好好先生。当出现问题的时候,或者你有不同的意见时,你一定要说出来。 当一名团队成员没有全力以赴,拖累了整个团队,或者另一名团队成员搞砸了事情,造成了混乱,阻碍了团队去实现目标,你不能袖手旁观,也不能认为:“这不是我的问题。” 良性的冲突来自在交流对立的想法时,或者在讨论问题时,不会采取直接攻击他人的方式。说某些话之前,先想想别人听到时的感受。换位思考,如果一个团队成员对你说了你将要说的这些话,你会有怎样的感受。
请牢记,大多数程序员都可以写代码、修bug、独立的完成开发任务,但是如果你真的希望成为一名高效能的程序员,希望拥有一个成功的软件开发职业生涯,那么你需要学会如何与团队协作。
06|推销你的想法 ¶
“会哭的孩子有奶吃”对不对?
- 这不是在比 “哪个孩子会哭”,而是在推销你的想法。无法有效推销自己的想法,想法再好也没人关注。
- 比起那些保守安静的程序员,大嘴巴的程序员的价值要大得多。他们的想法可能不是最好的,但他们能将想法变成富有成效的现实。
推销自己的想法为何如此重要?
无论你在哪里工作,那儿至少都会有一个大嘴巴的同事,他的想法很多。这些想法可能挺好,也可能不怎么样,但这都无关紧要。关键是,如果对这种人你不能坚持自己,你就不能高效工作,也不会产生影响力。事实上,你很少会被直接征求意见,除非你非常善于推销自己的想法。
如果你想在你的职业生涯中取得进步,你就需要被看作是一个有很多好想法并能付诸实现的软件开发者。只有好的想法可不能得到提拔,高效能的软件开发者才会得到提拔,特别是那些能够把团队团结起来、让他的想法得到广泛支持进而得以付诸实施的人。
如果你不能推销自己的想法,你就不得不按照其他程序员提出来的建议去做事,很可能是做一些毫无意义的事情。
要学会如何推销你的想法,下面是一些简单的规则和方法。
不要争论,要说服力。
这是最基本原则。 当你与别人争论的时候,你不可能说服任何人做任何事情。 如果你想把自己的想法推销给别人,那就不能把这些想法塞进他们的喉咙里。永远不要直接反对或反驳某人,这必然会导致争论。
说服力是一项非常有价值的技能,学会说服和善于摆布别人有时候表面看起来很像,但二者不是一回事。
争论是寻找差异,而说服是寻找共性。你的想法框架必须适应于听众。
你越能更好地弥合隔阂,你需要人们做出的跨越也就越小,这样他们才能聚拢在你的身旁。 你也可以收回自己的想法,以一种能让你的听众更满意的方式重新组合它。 想想你的听众,想想他们的想法框架和参照系是什么,然后让你的想法与对方的想法框架相符合。 重组你的想法,如果构建得当,可以以完全不同的角度呈现完全相同的想法。
假设你的老板对一个项目的进度很在意,而你又想向他建议:应该在应用程序中应用一个全新的、漂亮的框架以显著地提升代码的可维护性。这时你该怎么办呢?不要跟他谈论“显著地提升代码的可维护性”。你的老板不在乎这个。他甚至还有这样的印象:每当有人谈到提升代码的可维护性时,在开发上就得花费更长的时间。相反,跟他说:如果切换到新的框架将缩短开发时间,并有助于项目更快完成。
循循善诱,清晰地沟通。
利用措辞谨慎的问题引导你的听众走上那条最终可以发现你的想法的道路。人们更可能相信他们自己发现的想法,或者他们自己思考过的想法。如果你通过提问来引导人们找到这个想法,你可能不得不放弃一些骄傲和荣誉,但你会得到更多的认同,而不仅仅是给他们现成的答案。
花些时间和精力来提高你的书面与口头沟通能力是值得的。你表达自己的想法时越清楚、越简洁,就越能够让人信服。尽量简洁而又能一语中的,使用一些你的听众可以很容易关联起来的类比例子,因为很少听众会相信他们自己不理解的想法。
因此,一定要清楚你到底在交流些什么。
借势权威,树立权威。
初入职场的新人,自己并没有太多的可信度和经验。当你试图提出与目前的做事方式相反的想法时,你常常会被视为傲慢、天真或者自以为是的人,即使你提出的是很好的想法,但就是因为这是你的建议,所以人们就不买账。“凭什么你说这是‘正确’的做事方式它就是正确的?”
所以,化解这种困局,新人可以使用的一种方法就是利用别人作为权威来推销自己的想法,比如,试着引经据典,“这不是我的主意,它是……(此处插入某个名人)的想法。”
从长远来看,更有意义、更有益处的做法是树立自己的权威性。
比如,把你的文章或想法发布到互联网上,当文章被成千上万的开发者分享和阅读的时候,这种权威性就更进一步得到了加强,仅仅因为这些话都是写在网上的,所以它们似乎就具备了更大的权威性,这个现象挺有意思。
还有一种方法不那么容易但更有效,那就是出版一本书。成为一名有正式出版物的作家,它能给你的权威性和威望是其他方式不可比的。你可以说“关于这个主题我曾经写过一本书”,这句话的分量可是重得多。毕竟,不是人人都可以写书的。写一本书并不一定意味着你知道自己在说什么,但人们认为你知道。
你还可以通过以权威的方式讲话来树立权威性。太多的人说话的方式本身就使其听起来不太确定,或者让别人觉得他们不靠谱,比如,讲话的时候刻意表示出谦逊,避免被贴上傲慢的标签。如果你要讲话,那就永远要带着自信讲话。这种做法可以总结为**信念要坚定,态度要轻松**。你可以保留以后改变主意的权利,但是现在,根据你的能力和你的所知所识来说出你的想法,并且你会带着信念去做这件事。
你可以说服许多人接受你的想法,只要你真诚地相信他们,并且在你这样做的时候带着信念和热情讲话。
好为人师,勤于练习。
不要直截了当地试图说服别人你的想法,也不要试图说服他们为什么要这么做。相反,做一个相关的演示。让你的听众了解你讲的是什么,工作机制或者工作流程又是什么,给他们一些推荐书籍去阅读。先给他们一堆有价值的信息,然后再让他们接受,通过教育的方式来达到推销你的想法的目的,同时,教育的方式也能帮助你树立起你的权威和信誉,使你的听众更容易接受你要讲的话。
记住,即使是最优秀的善于说服别人的人也不可能总是把他们的想法成功地推销出去,但值得一试。
07|着装 ¶
软件开发团队,似乎是所有行业中对着装规范最为宽松的。但是不能因为你可以穿任何你想穿的衣服就随意穿。你的穿着和你向世界展示的形象都很重要,即使你只是一个程序员。
首先,我们要接受一个事实,每个人都有一些陈规成见,当然会根据你的外表来评判你。 在很多场合,我们的陈规成见都是完全错误的,并且会给我们带来伤害。 一旦我们快速形成了一个判断,要想消除这种判断可就不那么容易了。 所以,现实就是,以外表来评判某人是每个人都在做的事情,我们只能部分控制。
如何在工作场所穿着得体,最简单的建议是:只需比你的目前职位高出两个级别。也就是说,着装风格不要向你的老板看齐,而要向你的老板的老板看齐。 即使在工作中穿短裤和T恤衫是完全可以接受的,即使穿成这样也并不会真正伤害你,但这么穿着对你来说是非常非常不可取的。 举一个生活中的例子,比如穿制服的警察和穿便服的警察,无论你如何描绘,也无论他们说什么、做什么,制服都会影响你看待他们的方式。 你肯定也会举出反例,比如特斯拉的马斯克,他不是也可以随意着装吗?马斯克是特斯拉的创始人,而不是被提升到现在的职位,这就是区别。如果你也是创始人,你当然可以随意着装。
比你目前的职位高出两个级别是什么职位?你怎么知道那个职位的人的穿着是什么样子? 观察一下管理你公司的行政团队或者首席执行官穿什么样的衣服。看看真正的成功人士穿什么样的服装。尽量与他们的风格相匹配,这样你就会觉得自己也是那个行列里的一员。 试想一下,当有人说“某某人看似像领导”时,他的真实含义是什么。那就是,他们有一些特质,使他们看起来像是那个角色。
我们穿什么会影响我们对自己的看法,进而会影响我们的行为,甚至会改变我们的个性。这就是为什么当你感到沮丧时,穿着睡衣或运动裤闲逛只会让你更沮丧。
想在工作中表现得更专业吗?那就穿得更专业点儿吧。
社会地位的象征,如昂贵的手表、名牌服装、昂贵的汽车等,这些要注意吗?这些东西真的能帮助你在事业上取得成功吗? 在日常生活中,这些昂贵华丽的东西并不是非常有益的,但是在商务会议和人际交往中,这些似乎有很大的影响。
上面这些只是一些关于如何利用陈规成见和先入为主的看法来让人们产生对你有利的感观的建议,但不是绝对的,如果你真的不在乎这些,那就不用在乎。没有它你也完全能够成功。 但如果你在乎这些,那你可以把这些建议应用于你的职业生涯之中,因为这是一个相当容易被控制的成功要素。
选择取决于你自己。
08|处理偏见 ¶
在大多数情况下,对所有人来讲,我们生活在一个前所未有的充满机遇的时代,但是……,有些事情我们可能不喜欢,我们可以尽自己的力量去改变和影响我们所能改变的部分,但最终,我们不得不学会适应和应对我们当前的环境。
当遇到偏见时,你该如何应对;对于那些想要压制你的人,你该如何反应和克服。 我们讨论的重点是选择控制那些你可以控制的东西,接受你不能改变的东西,以及如何在众人面前(即使是那些坏人面前)展示你的优雅而不要在无意中成为问题的一部分。
每个人,包括你,都有一些根深蒂固的偏见,都会因循一套刻板的陈规成见,因此,我们要接纳人们无意识的偏见与陈规成见。
应对别人的偏见,特别是当他们反对你的时候,最好的方法就是接纳他们,“接纳”并不是意味着你遭受偏见不是问题,而是要面对现实、看清现实,这样你才能够应对自如。 你需要意识到:不管你是谁,因为某些超出你的控制范围的原因,都会有人对你有偏见。你需要接受这个事实,否则你将永远处于愤怒与猜忌之中。
避免偏见的最好方法往往是充分意识到偏见的客观存在,当你认为有些人可能对你有偏见时,你才能够改变你应对他们的方式,特别是应对他们无意识的偏见。 例如,一项研究发现,当求职者的名字听起来像是来自少数族裔时,他们收到面试邀请的可能性比那些名字听起来像是来自主流族裔的求职者要低,比如,Ali Mohammed和John Smith。 不同的人会在不同的语境和环境中感受到不同的偏见。不管你是谁,都能找到一个就凭你的名字就能让人对你产生偏见的例子。 关键是,这只是个名字,而不是你。你可以选择改名字来避免偏见,也可以选择不改名,这取决于你。但至少你要承认,你可能会因此而受到一些偏见。不要指望世界按照你的意愿运作。同样,你的衣着、口音、口头禅也是如此。
大多数人都在寻找一些与他们有共同之处的人,然后将自己融入这个群体之后与其他大多数人隔离开来。结果,他们会受到更多的偏见。所以,我们不要让自己与世隔绝,走出去,和更多的人在一起,和他们交谈,和那些“不是你的人”的人交流。
消除偏见的最好方法就是:不要让偏见影响到你对自己的看法。如果你对自己以及对自身的能力保持高度的尊重,那么他人对你的贬低都是白费心机。
你不能改变别人,不能改变别人的想法,不能直接改变人们对你的感觉、人们对你所采取的行动,但你可以改变自己,你可以变得更加坚强、更加坚韧。只要你愿意,在人们对你有歧视的时候,你强大的自信心会令你觉得这些根本不重要,因为你了解自己的能力,你可以克服他们给你带来的种种不利影响。
马克·曼森(Mark Manson)在《重塑幸福:如何活成你想要的模样》这本书中这些写:社会上一般人士的最大问题之一就是,对太多的事情闲操心。 人们会说些蠢话,会说些中伤别人的话。有时是出于恶意,但主要是出于无知。 上面的观点内容,也可能会冒犯你,你可以无视它,去关注生活中你需要关注的重要事情。
如果在你的工作环境中有人对你进行侮辱,并且肆无忌惮地歧视你,你的底线被无情践踏的时候,你绝不能等闲视之。 首先要把事情记录下来。记录下来对话内容与事态发展,记录下来是谁、在哪里、何时做了什么。记录要尽可能详细,这样可以表明你不是在捏造事实,不是为了麻烦而制造麻烦,而是确实存在不可原谅的行为模式。 直面对方,告诉他们,他们越过了怎样的底线,为什么这是不可接受的,并喝令他们停下来。不要威胁,不要恐吓,不要说教,也不要乞求。 如果他们还不收敛,那么就带上你的证据向上级部门举报他们。如果问题没有得到有效解决,你可以寻求法律途径,也可以离开这个环境。
我们不应该对偏见与歧视置若罔闻,也不是要为偏见与歧视找借口,更不是要以任何形式对它置之不理。我们可以参考上面的内容,从务实的角度去应对它。
09|身为领导 ¶
没有糟糕的团队,只有糟糕的领导者。
一个发生在美国海军海豹突击队耐力训练课目的例子: 参训者组成一组一组的“船员”,在非常恶劣的条件下展开组间竞争,力求在比赛中击败其他组。 训练中,每六个人组成一个小组,小组要把沉重的橡皮艇举在他们头上,然后跑过水面。在他的例子中,有一组船员每次都落在后面,每次都是最后一个完成, 而另外一组船员则几乎在每一场比赛中都能占据主导地位。 他决定,把这两组船员指挥官调换一下,看看会发生什么。调换了指挥官之后,原先那个总是最后一个完成的小组最终获得第一名,而原先总是获得第一名的小组则是第二名。 这就是一名高效能领导者的力量与责任的体现。
高效能领导者是那种能鼓舞、激励和推动团队以保证团队成功的领导者,那种不需要正式授权就可以赢得尊重、促进合作和激发最佳成绩的领导者,而不是那种被简单地授予“领导者”头衔的领导者。
这里的强调的“领导者”,主要是强调领导力,而不是领导岗位。
什么是领导力?领导力是你发挥出的榜样力量。
你可以被告知你是领导者,你也可以被授予领导者的正式头衔,你可以被任命去负责一个团队。但没有人,绝对没有人,能够让你成为领导者,你必须靠自己去做到这一点。从领导力的角度来理解“领导者”,可以这样理解上面这句话,领导职位是被授予的,领导力是自己的影响力,因为服从不是目标,发自心底的全力支持才是目标。
只有一种方法能够成为高效能的领导者,那就是以身作则。最好的领导会做到所有他要求他的团队做的事情。他们愿意牺牲,愿意多走一公里为他们试图领导的人铺平道路。 即使没有正式的职务,如果你愿意为人们树立榜样,你也可以成为他们的领导者。
太多的“领导者”想坐在象牙塔里高高在上地指挥他们的军队。作为一个真正的、以身作则的领导,你必须自愿在前线、在战场上身先士卒,自愿去承担一些困难的、枯燥的甚至是你的团队里没人愿意去做的工作。向他们表明:即使是最单调乏味的任务,你也能做出高品质。
如果你想知道一个团队的行为和习惯,那你只需要看看他们的领导者。团队往往会表现出领导者的许多特质,时间越久越是如此。
作为一名领导者,你必须:
- 让自己承担最大的责任。无论你期望你的团队做什么,你都必须先在你自身上期待同样的事情,甚至更多,向团队展示没有什么是不可能的。
- 对团队负责。作为一个领导者,你必须对你的团队和你的团队所做的一切负全部责任,不仅要为自己的错误负责,还要为团队中其他人所犯的错误负责。不能推卸责任,也不能玩弄“怪罪”游戏。责任永远是你的。如果你的团队失败了,那是你的错,而且只是你的错。
- 相信自己的团队,合理授权。事必躬亲会造就完全依赖于领导者而无法独立运作的团队。
- 交代的任务和意图尽可能清晰和简洁。
- 告诉团队成员目标是什么,而不需要告诉他们如何去做。
- 明确制定一个操作规程。任何人都可以遵守规程来完成某些类型的任务。
- 培训。告诉团队为什么犯错、如何改正错误,然后让团队纠正错误。这是最好的训练方法。
- 授权。你必须要训练和培养能够领导自己团队的领导者,你必须给予他们极大的信任。当你授权任务时,你必须确保仍然拥有控制权去检查它们的结果,而不是假设任务会被正确地完成。
- 身先士卒。想成为一名领导者,你必须做出一些牺牲。你必须要背负起更多的期望。但是,当你得知你能够激励别人成为最好的自己时,这就是一种奖励和满足感。
10|绩效考核 ¶
即使你和我都知道大多数绩效评估过程都是骗人的,但要学会在这过程中如何伪装还是很重要的,这样你就可以得到加薪升职,并能有一个很好的履历。
提早着手准备。
你和你的老板讨论你的工作表现如何、你还需要在哪些地方做出何种改进……,这些事情不应该发生在你的年度绩效考评的时候。我们不要把把事情交给偶然,谁都不喜欢看到意外或惊讶。
一旦你制订了今年的计划,并且在其中概述了你的目标与工作领域,你就应该至少以每两周一次、最好是每周一次的频率向老板汇报你的进展情况。你应该直截了当地询问你做得如何,询问你正在做的**任何事情**中有哪些需要改进的地方。如果有任何需要改进的地方,就去立即着手去做,然后在下一轮“回顾检查”中展示你的进展状况。这个对话一定要记录下来。注意日期、时间和确切的对话内容。专业一点的做法是,你在与老板一对一的会议之后,附以一封电子邮件来总结所谈内容。
这样做的目的是,保留确凿的富有说服力的证据,在你需要的时候它可以证明:你正在竭尽所能做到最好。
- 首先,你将给自己创造一个机会,在实际的评估开始之前弥补自己所有的缺陷,不管是实际存在的缺陷,还是只存在于别人印象与感知里的缺陷;
- 其次,一致性原则可以成为你的可靠依赖,以确保在你的评估中不会有任何意外发生;
人们有强烈的意愿要保证他们过去所说的与所做的完全一致。如果你的老板说你做得很棒,而且你现在也没有什么需要改进的,他在绩效评估的时候也会迫使自己说出同样的话。
要有明确的目标并记录进展。
不管你对今年年底绩效考核的期望是什么,你都要考虑清楚,并告诉你的老板,并和他澄清:在下一次绩效评估之前你都需要做到什么以达成你的目标。然后他会告诉你所有要求。你要把这些都记录下来。做好所有能够促使达成一致的事情,那么在绩效评估的时候,你将有充分的理由来得到你想要的东西。
然后,你需要以每周报告的方式来记录你的进展,描述你每天做的工作,并总结你在这一周里的亮点,此外,也要记录你读过的书、你参加过的任何培训、你提供给别人的任何培训以及任何能展现你正在稳步迈向目标的所有进展。
很多软件开发者对上面的做法嗤之以鼻,认为自己干的再好,绩效考核过程都是虚伪的,老板决定一切。 诚然,在大公司里面,都有自己的一套人力资源管理流程,不否认,绩效评估过程和岗位要求描述,在执行过程中肯定会受个人主观的影响,换句话讲,维持表面的公平与秩序。 然而,上面的做法,一方面是给自己一个明确的目标,记录下来以督促自己,另一方面,这些记录可以作为年底绩效考核的佐证。 现实中,你的老板,特别是你的老板的老板,并不知道你一直在做着伟大的事情。所以你得告诉他们。赶快去做这些事吧,在这件事上不用谦虚,特别是在当下受主观影响的绩效考核体系下。 其实,如果你真的这样做了,我敢说,你的老板和周围同事一定发现和感受到了你的变化。
有的公司在绩效考核中,会有一个打分环节,给自己打分和给同事打分。 事实上,你没法以一种公正客观的方式对自己进行合理的评价,没有人能做到这一点,所以你写下的任何东西都是不准确的。 如果你给自己的评价很低,最好的情况下,你的老板说“你应该得到更高的待遇”,最坏的情况就是,连他都相信你确实应该得到较低的评价等级。 所以,在其他所有领域都尽可能高地评价自己,只有在你最弱的那一项里给自己一个分数低于“完美”的分数。这背后的理由很简单,如果你被要求给自己打分,你凭什么要故意伤害自己?
在给同事打分的时候,简单地给你所有的同事都打上完美的分数吧。 给你的同事糟糕的评价不会有任何好结果。他们或许会被降职或解雇,虽然这不太可能发生。最坏的情况是,他们知道了是你给了差评,你等于亲手为自己缔造了一个充满敌意的工作氛围。 即使你的同事表现糟透了、应该被解雇,除非你是真正做出解雇决定的老板,否则千万不要成为打倒他们的傻瓜。 把人们置于必须中伤自己或者中伤旁人的境地是不公平的。不管你给了什么样的评分都不是真实的。
给同事打分有另外一种形式,叫360度反馈。记住,360度反馈不适用于绩效评估,只适用于个人发展方向的评估。
绩效考核中还有一种形式,叫末位淘汰,比如20%优秀,10%最差,中间70%中等,提拔并奖励前20%的人,解雇落在最后的那10%。 理论上这是一个很好的系统,但这种方法存在最大的问题是,大多数人力资源部门和经理并不是根据业绩来给出排名,而是根据其他动机来进行排名。因此,他们选择的不是实际排名前20%的那前20%,而是基于政治、当前薪资等级和其他因素。而且,因为前20%只有这么多名额,所以各个管理者、各个部门往往会争得头破血流,于是,排名更多是借由政治因素而不是由业绩来决定的。
我们不是去抱怨末位淘汰制度,而是告诉你该怎么做。你需要做的就是远离最底层的10%,最好能进入顶级的前20%。要做到这一点,最好的办法就是准备好充分的证据来支持你的论点——你对公司做出了杰出贡献。 上面的方法就是帮助你在关键时刻有拿得出手的证据,但这些方法并不能用来代替艰苦的工作和努力的付出。你必须付出努力才能得到回报。
11|提拔与晋升 ¶
职责就是权力,不管是出于哪一种意图或者目的。真相是:只要你追逐职责,金钱就会随之而来。你总是可以用职责(权力)来换钱。获取升职加薪的基本思路:总是选择职责而不是薪酬。
试想一下,你是愿意在财富500强的公司找到一份工作,在那里你能得到CEO的薪水,还是愿意得到CEO级别的实际头衔,却拿着程序员的薪水呢?从短期看,拿钱是有意义的,但当你失去那份工作后会发生什么呢?
认识误区:许多软件开发者错误地认为,只要他们能够在绩效评估过程中获得好的评价,就会加薪或晋升。其实,在大公司里面,都有自己的一套人力资源管理流程,不否认,绩效评估过程和岗位要求描述,在执行过程中肯定会受个人主观的影响,换句话讲,维持表面的公平与秩序。
有些人似乎认为“付出你应付的代价”意味着你每天按时上下班,完成自己的工作,过一段时间,你的努力会突然得到回报。现实中不是这样的。 如果你想加薪,如果你想升职,你就必须做更多的事情,远远超过人们对你的要求。你必须要走出去,主动让事情发生,而不是等待事情发生在你身上。这就叫作采取主动。 升职或加薪不会因为你应该得到它而自动发生在你身上。你得走出去,变得积极进取。你必须告诉你的老板你想得到加薪或晋升。你必须采取积极的措施去得到你想要的。你必须自己创造机会。
如何能让自己承担更多责任?
- 有一个不受重视的项目,你能去负责它吗?
- 你能帮助团队里的新人快速成长吗?
- 你能负责文档制作流程,并保证及时更新这些文档吗?
- 哪项工作是没有人愿意去做,你愿意承担起来,并将其简化或者自动化的?
如何令自己引人注目:
- 每天都记录自己的活动日志——把这个日志以周报的形式发送你的经理。
- 提供演讲或培训——选择一个对你的团队有用的话题。
- 发表意见——只要在会议上就这么做,或者只要你能得到的机会就这么做。
- 保证“曝光度”——定期与老板会面,确保你经常被注意到。
怎样采取主动?
首先,投资对自己的教育,比如,读书、参加在线课程、参加现场培训课程、参加研讨会或者行业会议、回学校再去完成一个学位、找一个一对一的老师,等方式方法。
不要只学软件开发。如果你把目标设定为更高级别的岗位甚至是行政岗位,你还需要学习领导力、管理和商科的相关知识。
其次,把自己的目标公之于众。你应该在绩效评估之前就这么做,记住:在绩效评估之前。不是在绩效评估期间,也不是在绩效评估之后。加薪或晋升的决定大多是在你坐下来接受正式的绩效评估之前就已经决定好的。事实上,在很多情况下,整个考核过程都是做做样子,目的是为那些已被安排要升职或晋升的人士提供加薪或晋升的机会。
你不能直接马上要求加薪或晋升,别这么做。相反,埋下伏笔,告诉你的老板你的升职加薪的目标,告诉他你打算怎么做以便于达成这一目标,并向他询问,为实现这个目标,你还需要做些什么。即使他说“这是不可能的”,你可以回答:“如果有一点点可能,哪怕只有很小的机会,我也不会放弃,我知道这需要付出巨大的努力,那么我需要做些什么?” 如果你能让他回答这个问题,并且你可以完成他让你完成的任何艰巨任务,那你就会得到加薪。
如果年底老板告诉我,我确实应该得到加薪,他们也会给我加薪,但这不在预算中,公司今年的预算非常有限。你老板背后的意思是,你没有表现出足够的价值,以便于让你的老板或者你的公司去克服任何必要的来自财政、政治或者其他方面的障碍以防止你离开。当然,薪资吃大锅饭的公司另当别论。
第三,让自己在公司之外更有价值。要想提高你在公司内部的价值,最好的方法之一就是在公司之外增加自己的价值。要想让你在现在的位置上,在目前公司内部提升你的品牌效应、扩大你的知名度,你能做的实际上并不多。事实上,改变第一印象、在公司内部成长往往是很困难的。解决的办法是走出去推销自己:打造自己的个人品牌。创造一些来自外部的压力,让你的雇主意识到你的价值。如果你公司以外的人认为你很有价值,那么你公司内部的人也会认为你很有价值,这样你获得加薪或者晋升的机会就会容易得多。
第四,成为资产。这一点在小公司非常重要。许多软件开发者忘记了,他们获得薪水的主要原因并不是因为他们聪明,也不是因为他们有技能,而是因为他们能让公司赚钱。
作为一名员工,很容易与商业社会脱节,很容易与你公司的经济状况脱节,忘记了你要对公司有所贡献是终极的底线。想办法为公司增加收入。试着弄清楚你正在做的事情会如何直接影响你的公司的收入。然后试着找出你怎样才能升高底线,也就是你对公司的贡献。
所以,如果你想得到更多的钱,公式很简单:让公司赚更多的钱。这里,你得跳出框框来思考问题。你得像企业家或者商人一样思考,当你要求加薪的时候,你能讲出来的最好的理由就是你在给公司赚更多的钱。注意,这里说的是“赚钱”,不是“省钱”。
第五,不要制造威胁。为了获得加薪或晋升所能采取的最坏方法之一就是威胁你要离开。如果以离职来威胁老板来达到涨薪升职的目的,那么,你已经把自己从“资产”变成了“负债”,你老板立刻就会着手寻找可以替代你的人,因为他不能让自己的团队中有他不信任的人存在。
如果你让自己在公司之外很有价值,你的老板会知道拒绝你的请求很可能会导致你去别处看看。记住,这个结论是你老板自己得出的,与你离职威胁有很大不同,没有人喜欢最后通牒。
第六,不要谈论你为什么需要钱。你不太可能由于出于怜悯而得到提升。在所有能够获得加薪或升职的理由中,怜悯也许排在最后。你的老板会给你加薪,是因为你做的是一件棘手的工作,你在给你的老板赚钱,但你的老板不会因为你需要奶粉钱、需要照顾老人等给你涨薪。
永远要从商业角度给出加薪的理由。谈论你为什么应该得到钱,而不是你为什么需要钱。
老实说,能获得加薪或升职的最好方法通常是去别的地方。这是事实。从外部空降到一家公司获得晋升,比从公司内部成长起来更容易。实际上,离开一家公司去别的地方工作,然后又以高出许多的职位回到原来的公司,这个做法很多人都尝试过,屡试不爽。
每天和你一起工作的人很难注意到你的成长,很难注意到你如何提升了你的技能和能力,因为他们对你有先入为主的观念。
如果你已经尝试过其他每一件事情仍然无法获得加薪或晋升,那可能就是换个地方的时候了。
12|自我营销 ¶
为什么要自我营销 ¶
成为一名优秀的程序员,拥有高水平的技术能力,是很好的,但它只能带你走到这一步。
在你职业生涯的某个时刻,大概10年左右,许多软件开发人员的职业生涯基本都达到了自己的“天花板”,要想再提升会变得非常困难,因为你已经“泯然众人矣”。
如果你真的想要出类拔萃,你真的想把你的事业提升到一个更高的水平,你就需要学会如何建立起稳固的声望,包括如何推销自己、如何打造个人品牌,这些将为你打开常人难以企及的机会之门。
关键是,不要让“不是专家”成为放弃自我营销的借口。基本上每一个开发人员都是有自己特长的, 即便是“菜鸟”或者“业余爱好者”的身份都可能是你的潜在优势,因为很多人都喜欢向只比自己稍微优秀一点点的人学习,因为这些人才是可望而又可即的。 所以,无论你身处自己职业生涯的哪个阶段,你都可以从营造和传播自己的品牌中获益匪浅。
举个例子,一位真正优秀的厨师和一位明星厨师之间的区别。一位真正优秀的厨师可以赚到相当多的钱,但是一位经常上电视的明星厨师却可以赚得盆满钵满。 这真的和厨艺高低有关系吗?年薪100万美元的厨师与年薪10万美元的厨师相比,厨艺真的能好10倍吗? 因此,区别不在于技能,在于声望。名声让你得到不平等的回报。你得到的报酬比凭着你的技能所应得的多得多。
现实情况中,大量软件开发者反对自我营销以及任何一种营销的想法,特别是营销自己,但这个障碍必须要克服。你必须认识到,自我提升、品牌建设和自我营销都不是坏事。关键在于你该如何做到。
你可以成为世界上最好的程序员,但如果你只是独自一人坐在你的地下室里,除你之外没有人知道你身怀绝技,那你还是不为人知。你不会有太大的影响力,但是,如果你能走出去做一点儿自我营销的工作,你就能取得令人瞩目的成果。
自我营销可以采用帕特·弗林(Pat Flynn)策略。也叫作“无处不在”策略。该策略的基本思想就是,无论你身在何处都要营销。无论何时都要让你的目标受众轻轻一扫就有机会看到你。你可能会出现在他们的linkedin时间线上,他们也可能看到了你的文章,又或者他们看到了你的在线视频。他们目光所及,总能与你相遇。
如果说你只想成为一名雇员,那你是不是也需要打造个人品牌呢?回到是肯定的。拥有一个标识、一个清晰一致的信息、一个好的个人品牌和一个非常有型的头像将提高你获得优质工作的机会,让你在这个行业更有影响力。
- 高谈阔论 + 无所事事=江湖骗子
- 沉默寡言 + 埋头苦干=烈士
- 高谈阔论 + 兢兢业业=真正有才干的人
如果你只有一个选择,那么选择具有“中等程度的声望 + 中等水平的技能”要比“中等程度的声望 + 高水平技能”更为实用、收益更大。在等式里,声望这部分所占的权重更大。
打造个人品牌 ¶
品牌主要组成部分:
- 第一,所要传递的信息;
- 第二,视觉符号(效果),这是你的专属标志、颜色等;
- 第三,一致性;
- 第四,曝光率;
在你能营销任何东西之前,你需要做的第一件事就是明确定义你想要以什么著称于世。挑选一个主题,即选择某个细分市场,然后以它为核心建立你的品牌,越有针对性越好。如果能充分聚焦,你就可以直接向受众传达信息,也能更轻松地建立品牌的认知度。尽管人们倾向于关注品牌的视觉效果,但其实你所要传递的信息才是更重要的。
比如,马西·罗比亚尔(Marcie Robillard),又名“数据报表女孩”(DataGrid Girl)。她选择ASP.NET DataGrid(数据报表)控件为其细分市场,并以“数据报表女孩”作为自己的品牌来推广。这一细分市场非常窄但又充分聚焦。她做了很多次演讲,占据了关于ASP.NET DataGrid控件话题的大量搜索流量。
在此基础上,你还需要再做一件事,反复曝光。一个品牌需要在某个人面前曝光过四五次之后才会被记住,你也才会被别人记住。
作为一名软件开发人员,提高个人品牌曝光度的最基本的策略是要从一种渠道或媒介入手,比如博客和专栏,你就可以利用这个渠道把你自己的声望扩散到任何地方。 比如,你给知乎撰写专栏文章,开始从一周写一篇文章变成每周写三篇文章。你的影响力在逐渐增加。你增加了渠道,在B站上开设了自己的频道,在专栏圈里面保持活跃度,等等,这些方法都是通过反复曝光而让你进入人们的视野。
坚持这么做,并且保持一致性,只要假以时日你一定会看到回报的。
博客和专栏 ¶
使用面对面的直接交往方式,你只能遇到有限的人。成功的博客和专栏文章每天能够吸引数百甚至数千的访客,这可以给你带来很多机会,从工作岗位到咨询项目,甚至是产品销售的目标客户。
当你申请一份工作的时候,你的简历通常大概只有两页的篇幅。当你接受面试的时候,你通常会跟面试官聊上一两个小时。很难在这么短的时间内打动你的雇主。如果你有自己的博客或专栏文章,里面展示了你对软件开发各方面的分析和代码,这会大大增加雇主对你的了解,提升面试成功率。
博客和专栏不仅能帮你找到一份不错的工作,还能让你成为更好的软件开发人员和传道者,能带给你许多意想不到的机会。 比如,如果有稳定的访问用户流量,那你不妨围绕他们的兴趣开发产品,将流量直接转化为客户。
还有一个重要的好处是提高了你的沟通技巧。组织自己的思想,并将其转化为文字,是一项有难度却也有具价值的技能。定期写作能帮助你打磨此技能,有了很好的沟通能力会让你在生活的诸多领域受益。比如,工作生活中,能帮你更好地传达自己的想法,令想法更有说服力。 通常,如果你就某个话题和别人讨论过,你会发现写起来很顺畅,在你提笔难的时候,试试这个方法,找一位朋友,就某个话题聊聊。
此外,如果你能让自己定期更新博客或专栏文章,你就在持续刷新自己的技能,保证自己处于自己所在专业领域的前沿。建议至少每周一篇文章的更新速度。
作为软件开发人员,学习如何写技术文章实际上能帮你写出更好的代码,因为你能更轻松地传达自己的意图。
提升自己文章的访问量的一个最简单策略是,开始评论其他人的文章,一定是给出有意义的评论。你的评论越有见地,人们越有兴趣查看你的文章。记住,如果你对别人感兴趣,他们会对你更感兴趣。
另一个策略是,在社交网络上分享你的文章,在你的电子邮件签名的底部以及所有的在线个人主页中添加你的博客或专栏的链接。
你也可以尝试在抖音、B站上发布你的视频。你事先要确定自己的视频定位是什么,起个名字,划定受众,确定主题范围,等。
为他人增加价值 ¶
阿尔伯特·爱因斯坦说过,“不要努力成为一个成功的人,而要努力成为一个有价值的人。”
要想扩大自己的影响力,上面提到的树立自己的品牌,坚持输出,都是基于一条重要的原则,同时也是一个重要的观念:你要为他人创造价值。如果你表达的和你传递的信息不能帮到其他人,那么每个人都将会无视你,再完美无缺的品牌以及所有的自我推销工作都是徒劳无功的。
为他人创造的价值最好都是免费的。你能做的最好的营销工作就是给别人的生活增添价值。你还应该被人们称为“给予者”。做一个其他人想和你在一起的人,因为他们觉得当他们围绕在你身边的时候,他们是受益的。
齐格勒·齐格(Zig Ziglar)在《Secrets of Closing the Sale》(1984)中说过,“只要你能帮助足够多的人得到他们想要的东西,那么你就能得到生活中你想要的一切。”。
要想给人们想要的东西,要先知道他们想要什么。但是这并不容易,因为如果你问他们,他们可能会撒谎。他们并非故意撒谎,而是他们也只有一个模糊的概念,并不确切地知道自己想要什么。就像新娘在找心目中的完美婚纱时,只有切实看到了才会知道“这就是我想要的”。
你提供的内容应该直接瞄准你所选定的研究领域,为该领域带来价值。如果你能通过自己产生的内容解决一个真实的问题,或者能让别人关注你文章的内容,那你就会为他人创造真正的价值。你也就会给他们想要的。
所有这些事情都不是可以一蹴而就的。事实上,你需要坚持很长时间才能真正看到你的这些行动能够产生显著的成果,这就是你最好现在就开始行动的原因。 很多人在知乎写文章大约一年之后,没有看到任何结果就放弃了。如果想获得成功,你就必须愿意坚持更长时间。你可能需要两三年,甚至更久。
即使你是编程新手,你也可以为人们提供一些东西。当你学习编程时,你可以分享你的学习历程,其他人会发现这很有用。你可以选择一个专业领域深入研究,然后把你自己从白丁变成专家的历程作为一个主题,向人们分享你的心得。对其他想要做同样事情的人来说,这段心路历程有巨大的价值。
虽然免费做这些事情看起来是在浪费时间,但是你要把它视为对未来的一项投资。通过为人们创造价值并且免费提供这种方式自我营销,你就赢得了为他人提供价值的声誉,也为自己的未来创造了机会,正所谓“赠人玫瑰,手有余香”。
大多数人终其一生也没有取得过大的成就,因为他们过早地放弃了。
13|社交人脉 ¶
如何与人交往 ¶
别管我,我只想一个人安静地写代码!然而,事实是,在软件开发领域,我们大多数时候都是与人打交道,而非与计算机打交道。我们所写的代码主要也是供人使用的,其次才是让计算机可以理解的。
如果你想成为一名出色的软件开发人员,就得学会高效地与他人相处,即使写代码是你工作当中最为享受的一部分。
仔细想想自己在工作中有多少时间用在了与人互动上,比如, 早上上班第一件事是不是检查邮箱?是计算机给你发邮件吗?是你的代码给你发邮件吗?都不是!邮件是人发的,任务是人布置的。 白天你会开会吗?你会与同事讨论你正在处理的问题,制订解决方案吧? 当你终于坐下来写代码的时候,要写些什么呢?需求从何而来?
现在你是否意识到人际交往能力的价值?如果你还是觉得自己的工作就是写写代码,那你最好要三思。 作为一个软件开发人员,你的工作就是与人打交道(其实几乎所有的职业都是这样)。
当你和别人打交道的时候,你应该知道的最重要的一个概念就是:以自己为核心,每个人都希望自己很重要。 每当你与他人交流时,请牢记这一准则,并时刻洞察自己的行为会如何影响他人的这一基本需求。
我们常常容易犯的一项错误就是,轻率地否决同事的想法,以便于可以提出自己的想法。 一旦你贬低他人,削弱他们的成就感,在某种程度上就如同切断了他们的氧气补给,获得的回馈将完全是抓狂和绝望。
所以,“批评”是一项很少能够达成你期望结果的工具。研究表明,奖励积极行为要比惩罚消极行为有效得多。 如果你身处领导岗位,这是一条需要恪守的重要原则。 如果你想激励他人拿出最好的表现,或者希望达到改变的目的,你必须学会管住自己的舌头,只说些鼓励的话。
直截了当地告诉老板为什么你喜欢想用某种方式实现某个功能,这并不明智。更好的办法是从对方的心态出发提出建议,阐明为什么采用你建议的方法实现该功能对老板非常有用,理由可以是“让软件更稳定”,或者“能让软件按时交付”,等等。这就是增强老板的成就感。
作为软件开发人员,我们有时候倾向于认为所有人都是从逻辑角度来思考问题的,这很容易让你落入陷阱,错误地认为:严谨的推理足以使他人接受你的思维方式。事情是,我们依然是情感动物,只是已经学会了如何控制和隐藏这些情绪。
所以,我们的目标是,避免争论。
戴尔·卡耐基在《人性的弱点》中说,“据我所知,普天之下解决争论的灵丹妙药只有一个,那就是避免争论,像躲避响尾蛇和地震一样地远离争论。”
与人交往中有一个“模式”的概念。大多数情况下,不同人的模式是相互冲突的。其中有一种模式,即主导模式,决定了对话的主旋律。举个简单的例子,处理纠纷时,你面对普通人可能时主导模式,但面对警察时,可能警察会表现出主导模式。
认识到模式的存在时非常有必要的。 如果你能够时时刻刻把主导模式抓在自己手中,那你就可以说服人们相信你对现实的感知。 保持对主导模式的掌控有很多方法,其中之一就是不承认任何与你的模式相冲突的东西,将其视为无关紧要的东西,或使其显得荒诞不经。
这种方法在你试图维护权威的情况下非常有效。 例如,学校里有很多老师都有很好的模式控制能力,时刻保持对课堂的掌控,当老师在授课时,一般是不允许别人打断自己,避免使自己偏离正轨。
有时候你会发现,有的人不管怎么样就是无法相处,有的人就是抓住一切机会贬低别人,有的人对生活中的一切抱有消极态度。 这种人老是把自己扮成受害者,似乎总是卷入某种形式的悲剧之中,总是有不幸的事件发生在他们身上。 这类人你最好避开他们,不要试图去改变他们,也不要试图去和他们打交道,就让他们停留在自己的轨迹上,你所要做的只是尽量限制自己与他们互动。
但是,如果这样的人是你的老板或同事,你不得不面对,你该怎么做呢? 你基本上没什么太多的选择,要么逆来顺受,要么换部门,要么换工作。 不管做什么,原则就是千万不要卷入其中。如果你一定要与他们打交道,那么请把交集限定在最小范围之内。
拓展人脉 ¶
你要获得真正的成功,就要弄清楚你怎样才能给予尽可能多的人他们想要的东西……或者可以做到更好,给予他们需要的东西。
不能在开始找工作的时候才想起人脉问题。你必须投资你的社交人脉,然后你才能期望从你的人脉关系中获取价值。建立人脉关系需要时间而不能仓促行事,
拓展人脉不是记很多人电话,加很多人微信,进s很多微信群。这种漫不经心的方法建立起来的关系是极为肤浅的,不会有多大的作用。 拓展人脉也不是让你有机会昭告天下你的整个人生故事和你自己是多么杰出。
拓展人脉首先是要为他人创造价值。拓展人脉的正确途径是建立关系。
当你在一次会议或者某个团体中遇到某个人时,不要去想他们能为你做些什么,相反,把整个谈话的重点放在你能为他们做些什么上。仔细聆听,积极运用倾听技能,找出你是否有什么办法可以直接帮到这个人,或者是否有你知道的其他人可以介绍给他们,让他们从中受益。
要想真正给予别人价值,你必须深耕细作。不要做那种向每一个你看到的人留电话加微信,然后和他们就聊上三秒钟的人。相反,要花些时间和你接触到的人好好谈谈,无论是在聚会场合,还是在会议或者其他场合。才能培育出根深蒂固的人脉,而不是一种繁荣的假象。
如果你在遇到别人的时候不知道该说些什么,不知道该怎么和他们交谈,这里有一个简单的策略:问他们一些关于他们自己的问题。这是每个人都喜欢谈论的话题。 太多的人都会犯一个错误,总是试图让擦肩而过的人们聆听自己的故事:我是谁,我在做什么。然而,正确的做法应该是谈谈对方关心的事情,让对方有机会谈他们自己。
如果你想要在某一特定的方向拓展人脉,你就需要遇到特定类型的人。最简单直接且最好的方法就是找到一群与你志趣相投的人。比如,寻找一些线上或者线下的软件开发的组织,参与进去。
参加活动 ¶
另一个拓展人脉的绝佳场合就是研讨会与培训。研讨会中演讲者通常都能成为现场最闪亮的人群,但许多人害怕与他们交谈。参加研讨会不但是拓展人脉的好机会,而且是向该领域一些最资深的程序员学习的好场所。
你要去参加某个研讨会了,但是当你到了那里之后你要做些什么呢?你如何充分利用好这个机会?
你要做的第一件事就是浏览一下会议的日程,然后计划好自己的日程。你想去参加哪些分会场?你想去聆听哪些演讲者?花点儿时间提前计划好你的日程,这样你就知道到达会场之后该做些什么了。
如果你在会议上发现一些你想去结交的特定人士,你可以尝试主动接触,或者茶歇时间利用喝咖啡时间的机会,或者碰碰运气看看能否跟他们不期而遇等。充分利用休息时间,尽可能高效地参加社交活动。人群越小,社交氛围就越浓厚,而这正是拓展人脉的绝佳场合。
我怎么才能去找一个我并不认识的人并且与他们交谈?答案和简单,径直走上前去就是了。
这听起来可能有些突兀,你也可能不知道走上前去该说些什么,或者你害怕自己会说些蠢话。但是,这项技能只有通过一次又一次的努力练习才能获得,没有多次实践,恐惧不会自行消失。只有通过交谈,你才能成为一个优秀的、无所畏惧的健谈者。
其实,说些什么并不重要,因为在这样的会场上,你会和你遇到的每一个人都有很多共同之处,也会有很多可以谈论的共同话题,如果你真的不知道怎样开始搭讪,下面是一些简短的建议。
- 试着赞美他们穿的衣服,或者他们身上某些独特之处。这永远都是一个良好的搭讪方式,因为人们都喜欢谈论自己,人们通常也都喜欢赞美。
- 试着问一些开放式的问题,也就是那些不能用“是”或者“否”回答的问题,尤其是关于他们自己的问题。
- 径直走上前去做个自我介绍就好了。可能有些尴尬,但这却是非常容易做到的,而且在这样的大型活动场合,这正是你真正需要去做的。
- 评论一些共同的经验或者在你周围正在发生的事情。
别坐在会场上用你的笔记本电脑工作。你可以在飞机上或者返程途中做这些事情。尽可能多地与人交谈,尽可能多地参加活动,从而最大限度地利用这些机会拓展你的人脉。做好“电梯推销”工作,这样你就可以最多用三言两语就介绍清楚你是谁、你的职业是什么。
如果你不得不在几杯酒下肚之后才能与人交流,那你就永远也不会培养出真正的社交沟通技能,也不能培养出自信和魅力、克服你的羞怯和社交恐惧使自己成为一名真正优秀的谈笑风生、广受欢迎的人。 依靠饮酒作为精神上的寄托,你永远也不可能发展真正的技能。
那你可以考虑成为某一个团体的主持人,或者自己开创活动,通过这个平台来结交优秀的人。如果你还没有完全准备好举办你自己的活动或者创建你自己的团体,那么就考虑在其他人举办的活动上或者团体里做志愿者。这样你就可以独家接触到活动或者团体的组织者,也许还有很多引人注目的与会者。如果你想在将来创建你自己的团体或活动,你也可以从中学到诀窍。
拓展人脉并不困难,这需要时间和耐心,你必须把注意力从你自己转移到与你交往的人的身上。建立一个大型人脉网络是需要时间的。这不会一蹴而就。你不能只是在需要找工作的时候才开始拓展人脉。
演讲 ¶
每个软件开发者都应该在演讲方面一试身手,其中最大的好处,就是建立个人声望。
作为一名软件开发者,演讲也是开创自由职业或者咨询公司的绝妙方法,比如,每年在各种各样的软件开发大会上进行演讲。此外,如果你喜欢旅行,演讲是一个很好的方式,既有机会环游世界上的许多国家,又有益于你的职业发展。
如果你没有在公众面前演讲的经验,那么你不可能会获得在小规模的软件开发大会上演讲的机会。 如果你没有在小规模的软件开发大会上做过演讲,那么你不太会获得在大型软件开发大会上演讲的机会。
因此,你需要做的第一件事就是获得经验。最好的实践场合就是你现在的工作场所。向你的同事展示你正在学习的新事物。
大多数公司都欢迎自己的员工分享各种话题,特别是与当前工作直接相关的内容。你可以介绍自己的团队正在使用的技术,或者给团队进行一些相关领域的培训。你无须把自己包装成为专家,只是热心希望通过分享自己所学而对他人有所帮助。
你也可以加入Toastmasters来进行自我提升。
你知道什么是演讲恐惧症吗?站在一群你不认识的人面前,他们都目不转睛地盯着你看,而你还要努力和他们谈论一些事情。这就是恐惧,真实的存在。 如果你想克服演讲恐惧症,那你就必须站在台上去演讲。克服恐惧最重要的就是时间和经验。
一些实用技巧:
- 首先,至少做5次。在你得出结论自己不善于演讲之前,至少上台5次。
- 其次,当你进入会场发表演讲时,提前10分钟到场。走到观众面前,特别是前三排,介绍你自己,和他们握手。如果你开始在讲台上感到紧张,或者感觉到你的心率正在上升,你就看看前排,那里会有鼓舞人心的笑脸。
- 最后,准备和练习。你对某个问题了解得越多,准备得越充分,你就越不会紧张。对着镜子发表你的演讲,算好时间。使用摄像机记录下自己的演讲过程,然后仔细观看。
你应该力图在演讲中只围绕一个大的想法传递一些要点。如果你要使用幻灯片,那就力图让它们尽可能简洁。不要在幻灯片中写满文字要点,然后在演讲中逐字逐句读这些要点。幻灯片上应该提供的是演讲的附加信息,或者使用可视化方法来强化你的演讲内容,而并非演讲内容的简单重复。
简洁是关键,有趣也是关键。
如果你不能取悦别人,你就不能教导他们。作为演讲者,你的工作首先是娱乐,然后才是传道授业。如果你没有吸引住听众,想要教导他们是不可能的;而如果你不能让他们开心,你也就无法吸引住他们。因此,一定要确保你的演讲内容不会单调乏味,演讲内容一定要简洁明了、易于遵循,某种程度上还要生动有趣。你可以秀一些妙趣横生的图片,你也可以讲一些笑话或故事。
14|持续学习 ¶
阿尔伯特·爱因斯坦说过,“教育就是当一个人把在学校所学全部忘光之后剩下的东西。”
学习怎样学习 ¶
如果想成为最好的软件开发人员,你就必须学会如何自学。
当前技术快速迭代和出新的时代,没有哪个技术或知识可以终身依靠,自学能力就变成了一种基本生存技能。但学校并不会教你自学这项技能。
学生在校期间是“被要求”的角色,工作之后则转变成“主动要求”的角色,同事与老师有很大不同,同事不对你的成长负责,自己是个人发展与成长的责任人。所以,初入职场的学生要转变角色,主动学习。这时候,自学能力的重要性就体现出来了,这也就成了影响个人在团队中的上升空间和上升速度的一个重要因素。学会学习则是自学的核心技能。
如果我告诉你该怎么做,你可能会忘掉,但如果你自己动手做一次,你可能就记住了。如果你能将自己所学的东西教给别人,你不仅能记住,还能理解得更深刻。 尽管每个人的学习风格千差万别,但是通过动手实践和教会他人,我们能学得更好。与其他学习方式相比,主动学习是效率更高的方式。
一旦你已经实践过,并积累了各式各样的问题,立刻回到书本当中。当你回去重读这些参考资料的时候,你有强烈的冲动去消化吸收其中的内容。因为你已经积攒了很多想要找到答案的问题,你对哪些内容更重要早已了然于胸。
“纸上得来终觉浅”。
职场老人也同意需要重视学习能力与学习效果,始终保持自己的竞争力。
发现知识短板 ¶
我们总是倾向于掩饰自己的短板,而且我们也总是太忙,忙到无暇去填补它们。结果,我们要么不能真正明白自己在做什么,要么为了避开自己的短板而采取低效的方法。尽管我们最终明确了这些短板,也明白自己深受其害,但基本上依然会无动于衷。
知识短板会阻碍你进步。准确识别它们的最佳方式之一,就是看看自己在哪些工作上花费了大量的时间,或者一直进行重复性劳动。通常,你会发现,自己的知识短板使工作速度放缓,额外需要大量的时间完成任务。
另一种识别知识短板的方法就是,时刻都要试图了解自己不理解或不清楚的事物。你可以维护一份清单,列出自己需要去研究或者自己不清楚的所有事物,追踪有哪些主题总是不断出现在这个清单上。你会惊讶地发现这份清单的增长飞快。此时,你需要坦诚的面对自己:如果遇到不理解的知识,不需要马上就学会,但是一定要把它添加到清单中,这样你至少可以找出自己的知识短板。
还有一个方法,你或许可以尝试问问你周围的工作同事,或者是评审你代码的人,或者询问你的经理,他们或许知道你的知识体系是否存在某些短板。不过,用这个方法的时候需要小心,大多数时候,如果你问别人这样的问题,他们不会告诉你真相,因为他们会认为你无法接受真相。所以,你需要先行提出一些你已经发现的自己的短板,以及你打算如何消除这些短板,借此表明你是真诚的,这才会促使他们对你知无不言。 这里有一个高风险的做法:你可以尝试非常小心、谨慎、礼貌地提及他们的某项差距,看看他们的反应会不会让你大吃一惊。这样做请务必谨慎。
检查知识短板:
- 在哪些工作上花费时间最多。
- 可以改进的重复性劳动。
- 自己没有完全理解的东西。
- 你回答不出来的面试题。
消除短板的关键就是定位短板。一旦你知道自己的知识短板是什么,以及它如何阻碍了你的发展,那么找出弥补它的方法也就简单了。
你必须要确切知道自己需要学什么,保证焦点明确。什么是焦点明确呢?如果你的知识短板是不擅长物理,那很难弥补这一短板。但是,如果你能确定自己的短板是不知道弹簧的工作原理,那就可以花时间学习胡克定律。
做计划 ¶
一切都得从计划开始的。没有计划也是计划,只不过是一个蹩脚的计划。
比如,很多人的减肥计划是“我要减少卡路里摄入量,我要多锻炼”。这只是一个蹩脚的计划。
一份好的计划是具体的计划。
回到上面的减肥计划,改成:“首先,我要努力减少体内脂肪,从而保持身材。为了做到这一点,我会每天将我的卡路里摄入量减少到不足500卡路里,多吃能转化为酮体的饮食,每周跑步4次以加速脂肪的氧化,每周肌肉训练3次以尽可能保持肌肉的占比。”
因此,为了推进你的职业生涯发展,让你的技能跟得上时代,你需要量身定制一份真正的计划。
阅读专栏文章。可以深入洞察编程世界里最新的和最重要的技术。 读书。是一边学习一边实践操作,而不只是读一读完事。
我该从何处入手呢?我是应该先读一读与我当前工作相关的技术书籍,还是要先读那些关于提高编写代码质量的经典书籍?
提问:作为程序员,我是应该先读一读与我当前工作相关的技术书籍,还是要先读那些关于提高编写代码质量的经典书籍?
- 应该同时阅读这两种类型的书籍,只是优先级取决于你当时的情况。
- 如果你正在使用某种特定的技术,而你当前在大多数时间里都会用到它,那么你应该优先学习这一特定技术,因为它可以节省你的时间,让你的工作更有效率。在这种情况下,立即投资于技术技能的学习将会有高额的回报。
- 如果你对当前正在做的事情非常精通,目前你只是要寻找一种新的技能去学习,那么你可能要优先考虑那些提高编写质量代码以及有关个人发展的经典书籍,从长远来看,这么做将给你带来更大的好处。
你需要持续不断地学习新东西。不管你对当前的技能是多么驾轻就熟,也不管你的教育背景有多么深厚博大,你总是要去学习新东西。
针对你要去学习的内容定一份计划,这样当你完成了一样新东西的学习之后,你就可以接着去学习下一样了。
定期评估你现在的技能,定期校正你的学习方向,这样就可以明确确定你应该学习哪些新东西,以及你的学习内容的优先级与顺序。
要注意一点:不要去学那些你永远都不会用到的东西。
提问:在我目前的工作中,我需要了解X,但我对Y更感兴趣。那么,我是应该去读对我当前工作有所帮助的书籍,还是能够帮我学习我自己真正感兴趣的技能的书籍?
- 学习那些你想要去学习的东西,或者是那些虽然现在还没有用到但你很感兴趣的东西,是颇有价值的。但是,这么做也有一定的风险。
- 如果你花费大量的时间去学习一些你永远不可能用到的东西,你就要冒着浪费时间和精力的风险。
- 所以,至少尝试着要从你正在学的东西中获得一些附加的好处,这样你就可以通过实践应用它来更好地掌握它,从而降低完全浪费时间的风险。比如,做一个兼职项目。
- 在我的职业生涯中,我曾经投入了大量的时间学习一些我认为自己会用到的东西,结果我发现从来就没有用过,这纯粹就是浪费时间。
有许多程序员,他们孜孜不倦的观看各种在线课程,阅读技术书籍,废寝忘食地学习编程语言,却很少真正想过这么做的真正目的是什么。 大量储备知识并没有错误,但是因为这么做并没有做到集中精力,并不能推动他们朝着自己的目标前进,所以大部分情况下也就是白费力气。 如果我花费几个月的时间学习一种我永远不会用到的新编程语言,那么它就无助于我的职业发展与目标达成。
所以,在你决定要去学习哪些内容时要有策略,不能盲目。
“如何学习”是一项对你的余生都价值连城的技能。
- 参加活动,比如研讨会,训练营。仔细观看向你演示的某种新技术,仔细观看向你展示的代码示例,通过这种方法接触到新技术的速度要比其他媒体快得多。
- 阅读技术新闻。了解编程世界里正在发生的事情,看到行业趋势,审视自己需要在哪些方面改善自己的职业生涯。
- 大量编写代码。能够让你的编程技能与时俱进的最显而易见的方法就说自己编写程序。而且是经常编写程序。
不要让自己太安逸。 记住,无论你眼下的工作岗位或者工作氛围多有保障,都不要过得太安逸,这很重要。
学习十步法 ¶
“教育就是当一个人把在学校所学全部忘光之后剩下的东西。”——阿尔伯特·爱因斯坦
如果想成为最好的软件开发人员,你就必须学会如何自学。很不幸,学校并不会教你自学这项技能。无论如何,学会学习是自学的核心技能。
在当前技术快速迭代和出新的时代,没有哪个技术或知识可以终身依靠,自学能力是一种最基本的生产技能。 学生在校期间是被要求的角色,在工作岗位上需要转变成主动要求的角色。同事与老师不同,同事不对你的成长负责,自己是个人发展与成长的责任人。所以,初入职场的学生需要转变角色,主动学习。 职场老人也需要重视学习能力与学习效果,始终保持自己的竞争力。
如果你能将自己所学的东西教给别人,你不仅能记住,还能理解得更深刻。尽管每个人的学习风格千差万别,但是通过动手实践和教会他人,我们能学得更好。与其他学习方式相比,主动学习是效率更高的方式。
“十步学习法”的基本思想就是:要对自己要学的内容有个基本的了解,了解自己不知道什么就足矣。然后,利用这些信息勾勒出学习的范围,即需要学哪些内容,以及学成之后又会获得什么。
一旦你对自己要学什么和怎样学都了然于胸,你就可以把控自己的学习计划中的每个关键点,通过“学习—实践—掌握—教授”(Learning, Doing, Learning and Teaching,LDLT)的过程,获得对该学科的深刻理解,同时你也向着自己的目标前进。
“十步学习法”的第一部分是研究,它是一次性完成的。但是从第7步到第10步则是重复的过程,贯穿于你的学习计划的各个模块。
第1步:了解全局。
对自己想要学的课题做一些基础性研究。对学习主题及其全局有了一个大致的了解。
第2步:确定范围。
集中精力去明确自己到底要学什么,即决定学习的重点和学习的范围,让自己的关注点落脚到更小也更可控的范围。避免范围过大而把自己搞得不堪重负。此外,明确学习范围的时候要考虑时间因素。你的学习范围务必大小适当,既能符合你的学习理由,又能符合你的时间限制。
示例:将学习摄影这样一个很大的主题聚焦到一个特定的范围内。
- 学习摄影:掌握针对人像拍摄的数码摄影知识。
第3步:定义目标。
当你知道自己的目标是什么的时候,你就可以更轻松地使用倒推的方式,明确实现目标所需的步骤。所以,在开始前明确“成功”的含义十分重要。
好的成功标准应该是具体的、无二义性的。不要对自己想要完成的任务进行含糊不清的描述。你想从自己的学习经历中获得什么决定了你的成功标准是什么。
示例:
- 不好的成功标准:我可以用我的数码相机拍出好照片。
- 好的成功标准:我可以使用我的数码相机里的所有功能,能够清晰地描述这些功能是什么,并且知道何时何地使用各功能。
好的成功标准能让你向着既定目标不断前进,并确保你能依据自己定义的成功标准,在学习结束后自我评估是否达成了目标。
第4步:寻找资源。
要尝试收集到多种多样的资源以帮助你学习,而不是只读一本关于这一主题的书。资源可以是多种多样的,不局限于书籍。
数码摄影为例。你可能会从阅读相机的用户手册开始,可能还会查找各种专业的数码摄影的网站,你也可能会寻求专家的建议。
第5步:创建学习计划。
学习是一个自然的过程。从A开始,前进到B,最后到达Z,你需要找出在最短的时间内从A到Z的正确路径,并且到达沿途的重要地标。
打造自己的学习计划,一个好方法就是观察别人是如何教你感兴趣的主题的。比如,如果五位不同的作者都把相似的内容都分解为相同的模块和顺序,那么就可以参考这样的顺序来制订自己的学习计划。 通览你收集到的全部资源,你就对自己需要哪些内容以及如何组合这些内容有更清晰的认识。
第6步:筛选资源。
在第4步,你已经收集了与学习主题相关的所有资源。 在第5步,你已经使用这些资源制订了自己的个人学习计划。 现在需要对这些资源进行筛选,挑选最有价值的几项来帮你实现自己的目标。
以摄影为例,这时的你已经有了许多关于数码摄影的书籍、文章和其他资源等,但是,很多数据都是冗余,并非所有资源都适合你的学习计划。 在这一步中,把你在第4步中收集的全部资源浏览一遍,找出哪些内容能够覆盖你的学习计划。
第7步:开始学习,浅尝辄止。
在学习过程中通常会犯两类错误:第一类错误是在知之不多的情况下就盲目开始,即行动太快;第二类错误是在行动之前准备过多,即行动太晚。
这一步的关键在于过犹不及。你要专注于掌握自己所需的、能在下一步动手操作的最小量的知识,而不是试图消化计划学习中列出的所有资源。假如,你购买了一个新的数码相机,你是不是会先看一下用户手册后,就开始尝试使用相机,然后再会重新回来阅读用户手册。
第8步:动手操作,边玩边学。
大多数人会试图通过读书或观看视频来吸收很多信息,然后再付诸实践。这一方法的问题在于,在他们读书或看视频的时候,他们并不知道哪些内容是重点。他们只是因循他人设计好的学习路径。
可以考虑这种方法。你无须提前了解全部内容,你要做的首要的一件事情就是亲自操作和亲身体验。采用这种方法,你通过探索和实践进行学习。在操作的过程中,你的大脑自然地产生各种问题:它是如何工作的?如果我这么做,会发生什么?我该如何解决这个问题?这些问题引导着你走向真正重要的方向。当回过头寻找问题的答案的时,不只是这些问题迎刃而解,而且你记得的东西比你学习的东西要多得多,因为你所学到的都是对你很重要的东西。
回到数码摄影的例子,假定你要学习光线对数码摄影的影响,所以在这一步中,你可能会尝试练习在不同的光照条件下拍照,或许你并没有意识到自己在刻意做什么,其实你正在探索中学习,也在解决学习中发现的问题。
第9步:全面掌握,学以致用。
好奇心是学习特别是自学的重要组成部分。这一步的目标就是让你找回好奇心驱动的学习,解决在第8步中发现的一些尚未找到答案的问题。 在这一步中,你要利用先前收集到的所有资料,进行深入学习。
再回到数码摄影的例子。假设你已经在调试光圈的过程中积累了一些问题,这时你可以通过阅读相关主题的资料来回答这些问题。你可以通览已有的资料,仔细查找与光线和其他通过操作发现的问题有关的内容。
不要害怕回头再去操作,付出更多,因为这不仅能让你找到问题的答案,也能让你学到新东西。给自己足够多的时间去深入理解自己的主题,你可以阅读,可以实验,可以观察,也可以操作。不过请记住,你依然没有必要把收集到的所有资料全部仔细看一遍。
你在第3步中定义的成功标准,此时,你可以试着把自己正在学习的内容与最终目标关联起来。你掌握的每个模块,都应该以某种方式推动你向着终极目标前进。
第10步:乐为人师,融会贯通。
“你告诉我的,我都忘了。你教会我的,我都记得。让我乐在其中,我就一定能学会。”----本杰明·富兰克林
在现实中,你只需要超前别人一步,就可以成为他们的老师。有时候,比学生超前太多的“专家”反而不能得心应手地“教”,因为他们无法与学生产生共鸣。他们忘了初学者是什么样子,很容易专注于他们认为简单的细节。
建议你走出自己的舒适区,将自己学到的知识教给别人。要想确定你确实掌握了某些知识,这是唯一的办法。 在你将自己所学介绍给他人时,这也是查缺补漏的好办法。 在这一过程中,你要切实剖析并理解自己所学的知识,将其内化到自己的思想,同时,你也会用能够让他人理解的方式精心组织这些信息。
重点在于,你花时间将自己学到的东西从大脑中提取出来,以别人能够理解的方式组织起来。 在经历了整个这个过程之后你会发现,有很多你以为自己明白了的知识点,其实并没有摸透。 于是你会将那些以前自己没太明白的东西联系起来,并且简化自己大脑中已有的信息,将它们浓缩并经常复习。
所以,不管做什么,千万不要跳过这一步。这一步对于保持信息以及深入理解知识而不仅仅只是流于表面至关重要。
教授知识的一些可能途径:
- 撰写文章。
- 创建视频教程。
- 发表演讲。
- 与朋友进行探讨。
- 在论坛上回答问题。
“十步学习法”可以将你的学习过程更为结构化,而不是漫无目的地一头扎进浩渺的知识海洋之中,在好奇心的驱使下学习更多的知识。这些步骤本身并不重要,这一学习过程背后的理念才是真正重要的。重点就是你要开发出一套适合自己的自学体系,一套你可以持续不断地加以运用而获得丰硕成果的方法体系。
培训与认证 ¶
大多数软件开发者不可避免地总要问到的第一个问题就是,证书是否“物有所值”。这个问题也可以演变为:花费金钱和时间去获证书,值得吗?
关于这个问题的回答是:“视情况而定。”这取决于你希望从证书中获得什么。
如果你真的希望学到一些有用的东西,使你能够更好地完成工作,让每个在简历上看到你名字的人都对你心生崇拜,马上就给你提供一份任你随意开价的工作,答案就是“不值得”。 拥有证书并不能使你的求职过程变得更加容易,有时候,有很多证书还会让面试变得更加困难。
所以,一纸证书本身并不能代表太多的东西,它不会对你的职业发展带来决定性的影响。
虽然一纸证书并不一定能给你带来一份优质的工作,但它可以给你带来锦上添花的效果。
另外,在你的经验还不够丰富的时候,证书也会对你有所帮助。一纸证书可能不会让某人信服你就是专家,但它会表明你至少对自己正在做的事情有所了解,你是花了些工夫实际完成了这个认证课程的。
如果你已经被录用了,认证是一个很好的方式来表明你正在努力提升自我,提高自己的整体技能,某种程度上讲,证书可以帮你获得晋升。
不管是什么原因,如果你想通过某项认证,那你就需要有针对性地为通过这项认证的考试而学习。研读所有的学习资料和书籍对你的帮助都不及研习专门为了应试的练习题。
通常,对增长你的实际知识或技能而言,认证并不是一种有意义的方式,更不是有效用的方式;培训的水更深,更是五花八门、良莠不齐。
最有价值的培训应该是这样一种培训:在培训中,你可以在短时间内吸收到大量的信息与经验,比你自己学习要节省大量时间。
培训中需要关注的三个方面:
- 快速入门的方法;
- 关于这项技术的用途的总体介绍与概述;
- 你需要知道的能够利用该项技术应对80%情况的那20%知识。
不要忘了把目光投向软件开发以外的领域,去参加一些可以助你在生活的其他方面有所发展的培训,这些培训都是非常有价值的,无论是在个人层面还是在职业层面。
通常情况下,培训可以分为两类:线上培训和现场讲师指导的培训。
线上培训的数目极为庞大,而且收费极低。无论你想学习什么,都可以找到相应的线上培训。
传统的现场培训方式也不会消失,因为它物有所值。现场培训可以给你提供更多的互动体验,并使你能够与培训讲师、与参加培训的其他人顺畅沟通。 学习的最好方法之一就是形成一个带有反馈环节的闭环,也就是说你可以提问并且即时得到答案;现场培训通常支持这种机制。
仅仅参加培训是不够的,要充分利用好每一次培训机会。
当你去参加一个培训的时候,你不应该只去仔细聆听那些吸引你的内容,也不应该只去参与你感兴趣的练习,相反,你应竭尽所能参与其中。关闭手机,不要去查看电子邮件,也不要试图在培训期间处理所谓的“紧急工作”。如果你不能在事关个人发展的事情上抱有严肃认真的态度,那你干脆就不要去参加培训,因为那只会浪费时间与金钱。做不到专心致志,就会心不在焉。
参加培训的第一条守则就是,在参加培训之前,你要对培训精挑细选、仔细评估。不要只是因为培训是提供给你的你就去参加,也不要因为培训是免费的你就去参加。
如果你是一名经验丰富的软件开发者,特别是当你在某个领域有所专长,那你可以去做一名培训讲师,借此提升你的事业,赚取可观的收入。
证书和培训本身并没有价值,就像大学教育并不一定有价值一样。就像生活中的许多事情一样,最重要的是你投入了多少精力,这种努力决定了你从中可以得到的价值。
技术狂热 ¶
恪守**教条**的信仰往往有很大的煽动性。软件开发和技术的虔诚很容易像教条的信仰一样。如果你能让自己不成为某种技术的信徒,你会在职业生涯之路上走得更远。
当你表现出对某种技术或编程语言极大的推崇,其实,这就说明你对这种技术或编程语言存在偏见,只是正面而已。这很正常。我们总是对自己做的事情充满热情;只要是有激情、有热情,就很容易变得极度感性。
对技术虔诚的一大问题是,我们中的大多数崇拜某项特定的技术,只是因为自己熟悉这种技术。我们很自然会相信自己选择的是最好的,然而这会让我们经常忽略任何反对意见。
我们不可能充分了解现存的所有技术,从而也无法给出“哪项技术最好”的正确判断,于是我们倾向于选择我们了解的技术并先入为主地认为它是最好的。 人生多艰,无暇他顾。
这种主观是具有破坏性和局限性的,很容易只与理念相同的人打交道而排斥其他人,导致故步自封、墨守成规。 我们自以为找到所有答案,却只是裹足不前。
天生一物必有用。一样东西如果不好,就不会为人所知或使用,也不会成功。环境是随着时间而变化的,至少在历史的某个时间点,每项技术都被看作那个时代里“好的”甚至是“伟大的”。
从这个角度看,在很多情况下,解决问题并不只有一个“好的”或是“最好”的方法。 最好的编程语言、框架、操作系统,甚至是文本编辑器不会只有一种。你可能会喜欢某项技术多过于其他,或者用某种编程语言的效率要高过于其他,其实没必要以“最好”来冠名。
比如,我以前一直秉持Linux至上,非常看不起Mac,认为它是假的Linux。现在我也已经放弃了对Windows和Mac的偏见,抱着开放的心态,尝试新的东西,体会他们各自的优点和特点。 子曰:“君子不器。”君子心怀天下,不像器具那样,作用仅仅限于某一方面。你应该对技术保持开放的心态,而不是固守自己已经了解的技术,声称它是最好的,你会发现有更多的机会为你敞开大门。
坚持阅读 ¶
当你在自己的软件开发职业生涯中衔枚疾进的时候,没有机会求教于人时,请求教于书,更多的书。
关于写出好代码的书:
- 《代码大全(第2版)》(Code Complete: A Practical Handbook of Software Construction, Second Edition)
- 《代码整洁之道》(Clean Code: A Handbook of Agile Software Craftsmanship)
- 《敏捷软件开发:原则、模式与实践》(Agile Software Development, Principles, Patterns,and Practices)
推荐知道的书:
- 《设计模式》(Design Patterns: Elements of Reusable Object-Oriented Software)
- 《计算机软件测试》(Testing Computer Software)
- 《算法导论》(Introduction to Algorithms)
- 《企业应用架构模式》(Patterns of Enterprise Application Architecture)
代码重构的书:
- 《重构:改善既有代码的设计》(Refactoring:Improving the Design of Existing Code)
- 《修改代码的艺术》(Working Effectively With Legacy Code)
- 《重构与模式》(Refactoring to Patterns)
培养自己成为优秀开发者的书:
- 《软技能:代码之外的生存指南》 (Soft Skills: The Software Developer’s Life Manual)
- 《程序员修炼之道:从小工到专家》(The Pragmatic Programmer: From Journeyman to Master)
- 《我编程,我快乐:程序员职业规划之道》(The Passionate Programmer: Creating a Remarkable Career in Software Development)
深入挖掘类的书:
- 《编码的奥秘》(Code: The Hidden Language of Computer Hardware and Software)
- 《计算机程序的构造和解释》(Structure and Interpretation of Computer Programs)
- 《程序员面试金典》(Cracking the Coding Interview: 150 Programming Questions and Solutions)
- 《计算机程序设计艺术》(The Art of Computer Programming)
- 《编译原理(第2版)》(Compilers: Principles, Techniques, and Tools, Second Edition)
自我提升和励志类书籍:
- 《如何赢得朋友及影响他人》(How To Win Friends & Influence People)
- 《我的人生样样稀松照样赢:“呆伯特”的逆袭人生》(How to Fail at Almost Everything and Still Win Big)
- 《艺术之战》(The War of Art)
- 《人性的弱点》(How to Win Friends and Influence People)
- 《思考致富》(Think and Grow Rich)
- 《心理控制方法》(Psycho-Cybernetics)
- 《改变的历程》(Breaking the Habit of Being Yourself)
- 《塞涅卡道德书简:致鲁基里乌斯书信集》(Seneca’s Letters to Lucius)
个人发展类书籍:
- 《影响力》(Influence)
- 《反脆弱》(Antifragile)
- 《成就上瘾》(The Compound Effect)
- 《思考的人》(As a Man Thinketh)
- 《权力48法则》(The 48 Laws of Power)
生产效率类书籍:
- 《十倍胜法则》(The 10x Rule)
- 《掌控习惯:如何养成好习惯并戒除坏习惯》(Atomic Habits)
- 《意志力陷阱》(Willpower Doesn’t Work)
- 《高效能人士的七个习惯》(The 7 Habits of Highly Effective People)
一定要确保你把时间花在读好书上。要去寻找那些别人强烈推荐的书。手边永远有一份阅读清单,也就是你想读的下一本书是哪一本。
最后,一定把你所学到的东西付诸行动。知识不付诸实践,就毫无价值。不要只看书,要照着书中的内容去实践。
15|专才与通才 ¶
做专才还是做通才,这个争论旷日持久。你应该做一个无所不会的“全栈开发者”,还是应该专注在软件开发的一两个领域深入研究? 事实证明,这是一种错误的二分法。真正的答案应该是:两者兼而有之。
举个例子,假如你涉及一个税务官司,你是要聘请一位精通税法、离婚法、房地产法和刑法的律师,还是需要聘请一位专攻税法的律师呢?
这并不是说,拥有广泛的知识基础(也就是某种程度上我们所说的通才)没有任何价值,不过有时候我确实只需要一个普通的杂工,但是专家是不可多得的,非常值钱。
回到前面的税务官司例子中,你觉得专攻税法的律师对其他法律领域也熟悉吗?答案大概率是Yes。他可能对多个法律领域都很在行,只是他自称自己善于打赢税法的官司而已,因为他明白专业化的力量。
回到做专才还是做通才这个论题,在软件开发圈子里面,几乎所有的专家都是通才,但是没有一个通才是专家。这并不意味着每个专家都是优秀的通才,或者需要保持他们的技能与时俱进,但是总体来说,你会发现大多数专家通常都是优秀的通才。
意思是,通常,为了能够成为一名专家,需要日积月累大量的综合性知识。如果在你的领域里没有对综合性知识的广泛积累作为基础,那么想成为一名优秀的专家是非常难的。
为了做到专业化,必须有广泛的基础。专业化并不妨碍你成为一个通才,它只是可以给你更多的选择,让你的价值更高。你真正需要去争取的是建立所谓的T形知识体系。这意味着你需要在自己的领域内拥有广泛的知识基础,然后至少在某一方面拥有深层次的、专业化的知识与技能。
作为一名软件开发者,你应该努力熟练运用各种最佳实践、算法、数据结构、不同的架构、前端、后端、数据库等。但是,你还应该至少选择一个你要深入钻研的领域。你需要选择一些专业方向,这样你才会有别于他人,才会让自己更有价值。 你甚至可以建立起“梳状知识体系”,你对多个领域都有深层次的研究,都是专家,就像埃隆·马斯克(Elon Musk)那样。但是,你要从一个专长领域开始。 当你在打造自己的个人品牌和自我营销的时候,你也需要运用这种专业的方式(即所谓的差异化)。
现实中的招聘职位描述里面好像都说寻找通才,其实,这是一个谎言。 如果你精准拥有某一份工作岗位所需要的技能,如果你是某公司正在应用的框架或技术方面的专家,他们会更有可能雇用你,比雇用“通才”的可能性更大。 当公司说他们想要一个通才的时候,他们真正说的是:他们想要的是一个适应能力强、学习速度快的人。他们担心的是他们会雇用一个只能做一件事情的人,
在当下,你甚至没可能成为通才。即使你是一名全栈开发者,你也不得不只选择一两个技术栈。你不可能完全了解所有的技术栈,无法以真正的方法来衡量其有效性。这种现象不仅仅发生在计算机科学和编程领域,每一个专业都在向专业化方向发展。 医学、会计师、律师、金融分析师以及几乎所有类型的工程师都必须通过专门化才能有效发挥作用,因为这些专业所包含的知识领域无一例外都在以日新月异的速度快速膨胀。
软件开发者都有这样的担心,如果自己选择的专攻方向是错的该怎么办?答案很简单,那就去选择专攻别的领域,选错了本身也没什么大不了的。
不要踌躇不前。你只需要选一个方向去做就好了,这比什么都不做要好得多,因为只要有需要,你可以随时调整策略,然后再改变方向。 另外,你会发现,一旦你学会了深入钻研了某一个专业领域,去钻研下一个领域就容易多了。 许多看似不可转移的技能,本身就是价值连城的,而具备了如何深入钻研这些技术的能力更是无价之宝。
所以,总结就是,无论你在职业生涯中处于什么位置,都要选择追求某个特定专业领域。如果选择错误,或者并非最佳选择,也不用担心。从选择一个特定专业方向开始,围绕它打造你的个人品牌,然后下定决心深入研究就好。
现在来看一个现实而棘手的问题,我是应该根据自己的兴趣来选择专攻方向,还是应该根据现在公司岗位所做的工作来选择专攻方向?
这是个艰难的问题。你需要考虑如下因素:
如果你选择的专业方向并非日常工作中所做的事情,那你就很难保证有足够的时间去积累所需要学习的专业知识,很难达到真正专业化所要求的深度。这么做的确是一条荆棘丛生的道路。 因此,更好的处理方式就是切换到一些新兴的并且可能是你真正想要学习的内容上。 如果你能在自己的当前工作中找到专攻的方向,你可能更容易让自己浸入其中,你就会从这个专业化过程中得到双重的好处。 如果你对这两者都没有任何强烈的感情,那么建议你选择在自己的当前工作中找专攻方向这条路。
宁可错误地选择过于狭小、太过具体的专业方向,也不要选择太宽泛。不要成为所谓的“C++开发者”,要做一名专门从事特定C++框架、技术或者技术栈的C++开发者。尝试要尽可能小而具体。你可以随后再行拓展和拓宽领域范围。同时,努力构建起你在软件开发方面的综合性知识体系——你的广泛基础。学习如何编写优质代码。了解潜在的原则与技术,这些原则和技术可能以许多方式表现出来,但从核心上讲,它们却从未改变过。
16|专注与高效 ¶
专注与番茄工作法 ¶
专注是指一个人在一段时间内将注意力集中在一个特定的任务或活动上,而忽略其他干扰的能力。这种能力对于提高工作效率、学习效果和创造力都非常重要。
要进入专注模式,必须要克服将自己的思绪集中于单一任务时的那种痛感。除非你完全享受完成这项任务,否则这种痛感一开始会很强烈。
在开始一项任务之前,确保你已经做好一切可以让自己免受干扰的措施,不管是内部干扰还是外部干扰。将手机调成静音状态,关掉分散注意力的浏览器窗口,甚至可以考虑在你的门上或者工位入口挂一个“正在忙,勿打扰”的牌子。 你可能觉得“挂上招牌”是开玩笑,其实刚开始时,你的同事和老板可能对此有些抵触,但当你像疯子一样疯狂工作的时候,他们就会理解,因为他们也想买到你的这剂良药。
你要用自己的意志力将注意力保持在手头的任务上。起初这种专注是被迫的,但是随着冲量建立,推动你进入专注状态。你的目标是熬过前5~10分钟。如果能撑过10分钟,你就有足够的冲量继续。在这种情形下,即使是轻微的分心也不大可能打破你的专注。
我们可以在工作时使用番茄工作法来保持专注,并且用番茄工作法估算和衡量每一项任务要花多长时间。
番茄工作法的基本思路是:你规划出打算一天之内完成的工作,然后设置一个时长25分钟的定时器,去完成计划中的第一项任务;在这25分钟之内,你只专注于这一项任务,心无旁骛。一旦有干扰,可以用各种方法屏蔽掉干扰,你要努力保证自己完全不被打扰。在25分钟结束的时候,设置一个5分钟的定时器,休息一下。这就是所谓的一个“番茄钟”。每4个番茄钟后,你都需要休息一会儿,通常为15分钟。
番茄工作法并不是简单的每天用来设置若干个“25分钟”的番茄钟。 番茄工作法只有被当作估算和评估工作的工具使用时,才能发挥它的真正威力。 通过追踪自己在一天内完成了多少个番茄钟,以及为每天要完成的番茄钟的数量设定目标,你就能真正评估自己每日工作的努力程度,也能知晓自己的工作能力。
使用番茄工作法,你可以把每周看作是由有限个番茄钟组成的。 想在每周完成一定数量的任务前,你需要搞清楚自己一周能工作多少个番茄钟,并相应地设置任务的优先级。 通过计算自己完成的番茄钟的数量,可以确切知道自己一周完成了多少任务。 如果你没能完成自己设定的任务,但是却用完了足够数量的番茄钟,那么问题就不是工作量是否饱满,而是给某个任务项设置的优先级是否正确。
所以,正确使用番茄工作法的背后的精髓,是正确“设置优先级”。
实际工作中,你肯定经历过试图通过列出一份每日任务清单来来安排任务,但是,当你完成某些任务耗费的时间比你预计的要长的时候,你将备受打击。最后很可能导致的结果是,就算你每天累得像狗一样,还是无法完成清单上的任务,所以即使你竭尽全力还是觉得自己很失败。
我们不一定能够控制完成一项任务到底需要多少时间,但是我们可以控制自己这一天中愿意为某项任务(或某些任务)花多少时间。 如果在这一天中你工作松懈却又完成了列表中的所有任务,那只不过是因为任务比预期的简单而已。制订任务列表全凭主观臆断,每天能够专注完成的工作量才是最重要的。
所以,正确使用番茄工作法,是你在一天中为自己设置了x个番茄钟的工作目标。
你可能会这么估算,每个工作日你平均工作8小时,一个番茄钟是30分钟,所以理论上讲,你应该在工作时间内能完成16个番茄钟。但实际上,即使是在12小时以内完成16个番茄钟也是极为吃力的。
在实施番茄工作法初期的时候,你可能会发现一天要想完成6个番茄钟都很困难,一天的时间似乎转瞬即逝,要在一天的大部分时间里保持专注需要极大的奉献精神和意志力。 即使你已经是一个非常高效专注的人,要想实现每天10个番茄钟的目标,通常需要工作8小时以上才能达到这个目标,有些时候还达不到标准。
史蒂芬·霍金(Stephen King)讲过类似的话:每人每天能够专注地、富有成效地工作的时间是有上限的。你的时间只有这么多,要怎么利用你自己说了算。
生产力提升计划 ¶
生产力提升计划的一个方法是把一周的时间分配给一个个用时不超过两小时的小任务。在工作时通过番茄工作法来保持专注,并且用番茄工作法估算和衡量每一项任务要花多长时间。
季度计划。
列出本季度你想要完成的几个大目标,并制订一些较小的目标,并初步考虑在每一周或每一天分别完成哪些工作。通过Evernote或者Onenote这样的工具记录这些计划项。
作为一名软件开发人员,你可能会有的季度目标,比如,学习一门新的编程语言或技术,开发第一款iOS应用,获得认证,或找到一份新工作。
月计划。
从季度计划中挑选任务,粗略估算出当月你能够完成多少工作,看看有哪些任务可以可以放入当月的计划,此时你并不能做到非常精确。
周计划。
可以在每周一的早晨做周计划,利用日历工具或者看板(kanban)工具来管理一周内每天的任务,并可以标注状态。并在每天开始工作的时候,浏览一下本周需要做的事情的清单。 同时,对于一些本周无法完成的任务,或者你已经知道下周必须要做的事情放进下周的周计划里面,以免自己忘记。 这样,你对本周要完成的任务就会有一个非常清晰的认识,也能调整各个任务的优先级,以确保你认为重要的和必须要完成的任务优先得到保障。同时,你也能清楚地知道每周自己的时间都去哪儿了。
日计划及其执行。
在开始今天工作前,审视一下今天的任务,看看是否需要调整,看看前一天的任务是否有未完成的,看看今天的任务是否需要调整。
需要注意的是,不允许出现“赶工”情况。
即,如果你原本计划需要一个番茄钟完成的某项任务,最终实际花费了四个番茄钟才完成,你也不应该额外地去完成你在当天给自己安排的其他任务,甚至那周安排的其他任务。这里强调的是,你的目标是完成“X个番茄钟”,而不是“完成X项任务”。一旦你开始专注于“完成X项任务”,你要面临的一定是一份长长的待办事项清单,你会重新陷入泥潭之中。
每一天你都会受到很多干扰。有一些应对方法供参考:
- 白天工作时间,把手机置于静音状态;
- 在休息的时候检查电子邮件,除非紧急邮件,否则一律在某个集中的时间段内统一回复;
- 关闭或者隐身聊天软件;
每隔一段时间,记得要安排一个休假,让自己放松一下。
上面的方法仅供参考,核心思想是是依照自己的情况,设定一些规则,以确保自己获得持续的成果。把自己当前每周的任务记下来,看看是否有某种可以为自己制订一个能够按月、按周或者按天实施的可重复使用的方法。尝试使用一些任务管理的有效工具,看看哪些工具最适合你。
定额工作法 ¶
提高工作效率的过程中,肯定会遇到2类情况:
- 每天都会重复发生的任务;比如制订的健身计划,实际去健身房的次数可能远低于预期。
- 需要几周甚至几个月才能完成的大任务;
要想确保自己在追求目标的道路上获得持续的进展,唯一的方法就是确立一个明确的目标,规定自己要在预先确定的时间段内需要取得多大的进展。这就是定额法的思路。比如,规定自己每周跑步3次。你可以下定决心每周都要达到3次这个额度。 所以,为所有需要重复做的任务都设置定额,也包括对重复频率的量化,并承诺按期完成。无论刮风下雨,都要完成自己承诺的定额。
定额法背后的逻辑是,把一个大任务,拆解成可重复完成的一系列小任务。比如,每年跑步1200公里,拆解成每月跑步120公里,拆解成每天跑步4公里。
定额法的规则:
- 挑选一项重复性任务。
- 明确有效时限,在此期间该任务被重复执行。
- 明确在给定的有效时限内该任务应该完成的次数的定额。
- 给自己承诺:一定要达成定额。如果你让自己失信一次,就会有第二次,很快定额就会变得一文不值。
- 调整。调高或者调低定额,但是不能在有效时间段之内调整。
以缓慢但稳定的节奏工作,要优于快速但缺乏持久和坚持的工作方式,还可以帮你克服意志力薄弱的问题。
多任务并行 ¶
现实中,有的任务适合多任务并行,有的则不适合。如果你真想最大限度地提升自己的工作效率,就必须知道什么时候需要多任务并行,什么时候不需要,以及如何高效地进行多任务并行。
多任务导致效率低下的根本原因似乎在于,我们根本没有能力真正去践行多任务并行。对于很多活动,我们可能会自认为是在进行多任务并行,但实际上我们做的不过是在不断地进行任务切换。这样的任务切换看起来确实是工作效率下降的罪魁祸首。任务切换越多,浪费的时间也就越多,因为你的大脑并不能专注于一项任务。
比如,当你有新邮件提醒时,如果你停下手上的工作去阅读和回复邮件,实际是你的专注状态被打断,并不是真正在进行多任务并行。你只是中断了自己手边正在做的工作去处理电子邮件,本质就是任务切换而已,因为你不可能在写代码的同时回复邮件,因为你的手和键盘不能同时做这两件事情。 相比而言,在一天中找个单独的时间集中处理所有的电子邮件,期间不被其他任务打扰,你就可以进入了更专注的“电子邮件模式”,效率会高很多。
一次性完成一系列互相关联的任务,而不是将它们拆分完成。批量处理电子邮件就是非常好的起点,任何在短时间可以完成的任务也都适合批量处理。
比起在不同时间段分别处理相关任务,批量处理相关任务拥有两大优点。
- 第一,你不会打破自己对正在处理的大任务的专注。
- 第二,你会更专注于自己平常没有足够的时间进入专注状态去处理的任务。回复1封邮件不会让你有充分的时间专注于这一任务,但是集中回复20封电子邮件就可以把你带入专注模式。
真正的多任务并行是指同时做两件甚至更多事情,什么样的事情才是真正的多任务并行?最有可能的就是,将一项不费脑筋的任务和一项一定程度上需要精神专注才能完成的任务组合起来。比如,一边听音乐一边写代码,上下班路上听有声读物或者阅读。
对自己负责 ¶
让人们完成工作主要有两大动机——内部动机(来自内心的动机)和外部动机(来自外部奖励或惩罚的动机)。
内部动机要比外部动机有效得多。本着对自己负责的态度激励自己。在内部动机的激励下工作时,我们能完成更多的工作,也更倾向于把工作做得更好。
责任感。
拥有一份工作的责任感会促使我们去做一些如果我们可以自主决定是绝对不会做的事情。这话有点绕口。 举个例子,如果公司让你现在开始每周可以在家工作两天,在家工作的这两天里,你可能很难做到像在公司一样的工作状态和效率,其实这不是偷懒,只是你不习惯对自己负责。曾经的你已经习惯了由外部因素来左右自己的行为。当现在给你权利来自己决定是否工作的时候,你选择不工作,是人之常情。 这暴露了一个问题,你是受外部动机所左右而非内部动机。是对公司负责让你处于被监督的状态,然而一旦自己能做主,你就没有发自内心的责任感来控制自己的行为。
如果缺乏对自己的责任感,你将永远依赖外部动机来驱使你努力工作。你容易折服于一根胡萝卜的诱惑,也容易屈从于一根大棒的威胁。自我控制是一门自我激励的艺术,而自我激励的核心则是自我责任感。如果你想不再依赖别人的影响,获得稳定、可预测的结果,你就要学会对自己负责。换句话说,如果你有梦想,那就先从对自己负责开始。
要培养“对自己负责”的精神,首先要让自己的生活井然有序。 当你去工作的时候,哪天需要上班是固定的,几点上班几点下班也是固定的。尽管有些事情可以变通,但这些都是有明确规定的,而且你知道如果违反了这些规定,会被问责。 所以,你必须通过为自己设定规则,将这种条理性自愿地应用于自己的生活中。
比如,你在玩一款游戏,要为游戏里自己扮演的角色安排每天的活动。你会如何规划并安排时间?你会为自己制订怎样的食谱?你会每天安排几小时的睡眠?这些问题的答案就是让你保持对自己负责的最好的备选规则。
你可能会发现,只对自己负责的时候很容易违反自己制订的规则。在这种情况下,请别人来监督自己履行责任,完成自己的承诺,是一个很好的方法。
比如,敏捷模式下,开发小组每天都会开例会,每个人都要根据分配的任务,讲讲自己当下做了什么和计划做什么。这实际也是一种互相监督计划的落实情况的方法,没人希望因为自己不遵守计划而令组员失望。
此外,公开自己的日常活动也是被监督的方法。比如,你每周要在专栏里面写一篇技术分享的文章,如果缺少一周,肯定是会被你的读者发现的,那种尴尬或者不想让相信你的人失望的感觉会激励你采取行动。
最重要的是要确保自己对自己的行为带有某种责任感。坚守自己设定的标准时,生产效率会高很多。
采取行动 ¶
我们明知道应该采取行动的时候却选择拒绝采取行动,恐惧可能是最大的原因。恐惧出错,恐惧把事情搞砸了,恐惧后果不可估量或失败,恐惧改变,恐惧做不一样的事情。
我们大多数人在不能下定决心的时候选择的默认选项:根本不采取行动。无论你在逃避什么,无论是什么在困扰着你,都不要拒绝采取行动。当下就是行动的时刻。当下就是决策的时刻。
很多时候,你需要试错好多次之后才能找出正确的行动方向。在任何行动上耽误的时间越长,完成整个试错过程找出正确方向的用时也就越长。
我们经常试图耗费300%的努力寻找95分的解决方案,而不是满足于找到90分的解决方案。我们的生活就是这样的,我们写代码的时候也是这样的。
试想一下,当你无法在两个不相上下的算法之间做出选择以解决代码中的问题,从而无法向某个重要客户交付一项功能时,会发生什么。在这种情况下,最好就是立刻选择其中一种算法,即使它不是最好的那一个。通过采取行动,即使你发现这个算法无效,也有时间去实现另一个算法。而选择不做选择,也就是延迟行动,最终会导致最糟糕的结果。
跑起来的汽车更容易转向。只有开始做一些事情的时候,你才能预测自己将来要采取的一切行动,评估哪些可能是错的。通常,要找出一个方向是错的,唯一的方法就是向着那个方向前进。如果错误的代价很小,有所作为总好过无所事事。
简单的检查清单,看看它是否能帮你下定决心采取行动。
- 阻拦我采取行动的障碍是什么?
- 如果我需要做出选择,我的选择会是什么?我要从哪些选项中做出选择?
- 做出了错误的选择会导致的最坏结果是什么?
- 如果我选择失误,我可以退回去选择其他选项吗?这么做的代价高吗?
- 选择之间的区别是否很大?我能选择可以立即采取行动的次优方案吗?
- 我当前面临的问题有助于自我发现吗?如果开始我采取一些行动,在我发现正确的行动之前,还能进行调整吗?
- 如果我不采取行动,会发生什么?会有什么代价?是浪费时间,错过机会,还是损失金钱?
远程工作 ¶
尽管我也认为在家办公很棒,但其实在家办公有许多自己没有想到的挑战。
挑战1:时间管理。
在家办公的时候,你会面临各种各样在办公室里不会遇到的干扰,比如,没人会知道你上网一整天,吃点零食,买菜烧饭,做点家务,等等。
许多刚刚开始在家办公的人都觉得他们可以在零散的时间工作并且在他们可以工作的时候把事情做完。或者,自己可以在白天享受美好生活,把工作放在晚上完成。其实这都是一种美好的愿望,因为晚上会有更诱人的事情会让你分心。
真正解决这个问题需要缜密的时间管理。你可以在你想工作的任何时间再去工作,但是你必须设定每周的日程表并且坚持下去。日程表越有规律、越是规划得当越好,比如在家仍然坚持“朝九晚五”的典型工作模式,这要才能让保证自我专注、严肃地对待自己的工作。
我们不能过分相信自己可以不受外界干扰或者能够智慧地管理时间。我们需要提前做好计划,否则会屡屡经受不住诱惑。
挑战2:自我激励。
在办公室工作的时候,周围有同事,你不可能很随意的趴在桌上睡觉或者玩手机,但在家工作没人监督,完全靠自律。如果你总是无法做到自律和自控,你也许应该重新考虑是否要在家办公,因为,追剧、玩游戏,这些诱惑实在太大。
在做好时间管理之后,自我激励也许就是在家办公的人面对的最大“杀手”。即使你能有效地管理自己的时间,迟早也会有不想做任何工作的倦怠感。
当你感到倦怠时,日程表和常规是非常重要的倚靠。当你不想工作的时候,有一个必须工作的固定时段可以帮你保持足够的激情去完成工作。你培养一些习惯也是一种方法,当激情不再的时候,习惯可以帮到你。
别想着靠意志力去战胜诱惑,这个教训适用于生活的许多方面。相反,尽可能排除干扰和诱惑,让它们远离你的工作环境,你会生活得更轻松自如。
事实证明,一旦我们专心致志地工作一段时间,我们就会沉浸其中,也有动力继续。这被称为“冲量效应”。从物理学角度,冲量是力与时间的乘积,是力在时间上的积累。冲量会改变物体的动量。冲量等于动量的改变量。工作投入在时间上的叠加,会有效地改变原来无聊的状态到工作的状态。
挑战3:孤独感。
在家办公,你可以独享自己的安静,没有周围同事的不断打扰。但时间久了,就会产生孤独感。
大多数在家办公的软件开发人员并没有意识到,长期缺乏社交会使自己变得孤独。毕竟不管怎么说,作为一个群体,我们过的是一种隐居式的生活。如果不能在一年左右的时间里找到社交生活,你一定会感到自己要疯掉了。监狱里惩处罪犯的最严厉的手段是关禁闭。
那么怎样才能治愈这种孤独感呢?有一个简单的答案:走出去,让自己有机会去认识其他人。
职业倦怠 ¶
这里讨论的“倦怠”并不是指疾病,否则需要向医生咨询。
新鲜感消退之后,“倦怠”就会出现,这是生活中的一个自然规律,每个人应该都有类似的经历。
无论你是接手一个新项目还是学习一项新技能,你最终都会到达这种状态:你兴趣索然,积极性低,进展缓慢,最终,你会身心俱疲。你可以否认或者掩盖这个事实,但你对这份工作、这个项目、这项任务已不再感到兴奋这个事实是客观存在的。
你越是努力工作,完成的工作就越多,这种倦怠感来得就会越快。这就是难以取得工作成效的原因。工作效率越高,你从中体会到的愉悦感就越少。
事实上,你只是撞到了一堵墙。
很多人普遍会把倦怠视为终结。
想当然地以为,既然动机不在、兴趣索然,就应当做点儿别的。于是,我们走出去寻找新工作。这样,会留下做了一半的事情。我们通过半途而废,努力寻找新事物,尝试找回自己真正的激情。有时候,我们觉得自己该去度个假。可是等度假归来,我们的倦怠感更甚从前。不仅失去了动机和兴趣,就连工作的状态都渐渐消失了。
事实上,兴趣的产生依赖于希望和期待。我们中大多数人无论如何努力最终都会发生撞墙的现象。这种倦怠感完全是自然而然产生的,这就是那堵看不见的“墙”,但并不是一个严重的问题。
大多数人在“撞墙”的时候会选择放弃。他们没有想方设法去穿越它,因为他们觉得自己已经倦怠了。在撞墙之前,竞争非常激烈。选手们站满跑道,每个人都热情高涨、激动不已。跑道是如此轻松,没有人会被淘汰。由于很多人没有穿越过那堵墙,所以墙的另一侧极为宽阔,人数寥寥,没有太多竞争。大部分选手都已经中途退出了比赛。 所以,如果能咬紧牙关坚持到底,如果能穿越那堵墙战胜自己,最终你会发现,简单地无视它的存在,你的倦怠感已经不治而愈。经历痛苦就是克服倦怠的秘诀。你以后还会撞到更多的墙,但每穿越它一次,你将会体验到全新的动力、充沛的活力。你会发现突然间一切都变得轻而易举,你的动机和兴趣再次回归。另外,你的竞争者的数量会越来越少。
是不是和跑步很类似,特别是跑马拉松?
如何穿过那堵墙?
首先,意识到墙的另一侧有东西在等着你。大多数人之所以放弃就因为他们没有意识到,如果持续,穿越那堵墙,事情会变得更好。你自己要相信自己的努力会帮助你坚持下去并最终渡过难关。
其次,为自己设定了一个时间表,并且坚决执行。无论刮风下雨,无论自己感觉如何,都坚持完成每天的目标。
所以,在开始你计划的第一天,就制定一个合理的计划,那时你的兴趣和动机都处于最高点。当你不可避免地撞到这样一堵墙的时候,这个计划能帮助你穿过它。
时间是怎样浪费掉的 ¶
我们都会浪费时间, 如果我们能够学会停止浪费时间,我们的生产效率会尽可能地高。 如果能最大限度地增加每一天的有效时间,以便绝对没有时间被浪费,你的能力也能发挥到最大。 可惜,这个目标太不现实了。
我们能做的是,弄清楚自己在哪儿浪费的时间最多,并消除它们。
常见的时间杀手:
- 看电视。不仅浪费时间,而且还会以你察觉不到的方式影响你的认知能力,放弃对自己的思想和行为的控制。可以尝试通过寻求其他事情来占用自己的时间,以及打破固定播放的电视节目对你的日程表的控制(比如,追剧),或许可以帮你减轻对电视的依赖,为自己每周腾出一些时间。
- 社交媒体。
- 手机,包括短视频。
- 新闻网站。
- 不必要的会议。其实,很多会议中你就是一个可有可无的听众。另外,开会要高效,有明确目的去开会,而不是无果而终,浪费大家时间。
- 玩电子游戏(尤其是网络游戏)。核心是,不能用玩游戏来逃避自己本该完成的工作。
- 工间喝咖啡休息。
管理时间的目的不是让你抛弃生活中的喜好,只是确保你没有把时间浪费在一些没必要做或者不那么喜欢做的事情上,或者吞噬掉你所有业余时间的事情上。 所以,建议你使用某种时间追踪系统来看看每天时间的确切去向。 如果能准确了解自己的时间花在哪儿了,就能识别并且消除那些最大的时间杀手。试着弄清楚自己每天在不同任务上花费的时间。即使是追踪一下每天吃饭花了多少时间,也能真正了解时间都去哪儿了。
澄清一下“什么是真正的浪费时间”和“什么不是浪费时间”。只有当你没有在做你想做的事情时,那就是在浪费时间。如果我现在就是打算看电视或玩电子游戏,那看电视或玩电子游戏就不算是浪费时间。如果你在本该锻炼身体的时间去看电视或者玩电子游戏,那看电视或玩电子游戏就是浪费时间。
惯例的重要性 ¶
提升自己生产力的真正秘诀在于:长期坚持做一些小事。比如,每天写1000字,每天跑3公里。 横亘在自己与梦想之间的无非就是“惯例(Custom)”。惯例塑造你的生活,让你变得更有生产效率,惯例是让你实现目标最强大的方式之一。你每天的行为日积月累下来,可以让你生活的每个方面都得到提升。
你可能想在很多事情上改变自己,但是关键在于做到改变自己需要时间,需要持之以恒。你必须要形成惯例,缓慢但稳步地向着自己的目标前进。
每天你做什么样的决定塑造着未来的你。
首先,一个好的惯例始于一个大的目标。
其次,围绕这一目标安排自己的日程。
大多数人必须要每天工作8小时,需要保证8小时的睡眠,每天吃饭还要花2小时,每天路上通勤要花2小时,所以,每天最多还有4~6小时个可以分配给自己想要达成的目标。虽然每天4小时看起来不多,但每周也能有28小时。如果每天这4小时用来看电视刷短视频,也就这样无感的流逝了。
第三,精确地安排这些时间。
如果你的工作是朝九晚五的,那么,围绕着每天4小时,每周5个工作日,来安排活动,形成惯例。
如果你为自己工作或者是在家办公,一定要制订一份日程,明确规定自己每天都做什么,包括什么时候开始工作,什么时候停止工作。这么做缺乏灵活性,但能提高生产力,也能让你知道自己在朝着目标前进。
这其中也建议围绕着每天吃什么来形成惯例,避免为了吃什么而纠结。Run Simple!
每天的生活越有条理,就越能把控自己的生活。如果你一直对外界做出反应,如果你总是在事情出现的时候被动地处理事情而不是主动地规划,那么你的生活会被周围的环境所左右,而不是你自己。
注意不要过于沉迷于惯例。你应该允许例外发生而打乱一天的日程安排。你同样需要学会从容应对这些事情。应对例外的一个方法是,找另外一个时间去完成被影响的事情。
养成好习惯 ¶
亚里士多德说过,“成就我们的恰恰就是那些不断重复做的事情。因此,优秀不是一种行为,而是一种习惯。”
我们每个人都有习惯(Habit),有好有坏。好习惯能够推动我们前进,帮助我们成长;坏习惯则阻止我们前进,阻碍我们成长。 培养和养成良好的习惯可以让你不需要刻意努力就保持很高的生产效率。如同惯例可以帮我们缓慢而坚定地每次只砌好一块砖,最终建起一面巨大的墙一样,习惯也可以通过日积月累的努力,让我们前进或者后退。二者最大的区别在于,惯例是我们可以控制的,而习惯却不受我们控制。
我们的大脑非常善于养成习惯。我们会根据周围的事物自发地养成习惯。 一件事情做得越多,越可能形成习惯。 习惯的力量往往基于奖励的价值。我们都喜欢做能够带来更好回报的事情。 而且,可变化的奖励要比已知的标准奖励更让人着迷,比如买彩票,不知道自己是否能得到奖励或者不知道奖励有多大,这会形成一种很坏的习惯,即公认的“上瘾”。
你可能已经有数百个自己没有觉察到的习惯。比如刷牙,抽烟,跑步。
习惯主要由三个要素构成:暗示,惯例和奖励:
- 暗示是导致习惯被触发的某样东西。例如,只要我们进入电影院,我们就有了买爆米花的暗示。
- 惯例就是你做的事情,也就是习惯的本质。惯例可能是抽烟、跑步,也可能是在检查代码之前运行所有的单元测试。
- 奖励就是让习惯真正保持下去的“锚”。这是一种你从执行习惯中获得的良好感觉。奖励可能只是一种满足感。
我有一个坏习惯:每天当我坐在电脑前,我就会马上检查电子邮件,或许你也有类似的情况。我们来拆解一下这个习惯。
- 首先是暗示。坐在电脑前似乎是一个暗示,预示着这个习惯的开始。
- 其次是惯例。这个惯例就是检查电子邮件。
- 最后是奖励。奖励具有两面性。看到有人给我的帖子点赞会让我感到高兴,邮箱里也有新邮件等着我回复。另外,我觉得这么做还能缓解压力,因为我可以从自己当日要完成的工作中暂时解脱出来,放松片刻。
我曾试着抛弃这个习惯,但是做起来相当困难。习惯是自发的,很难改,但我可以改变惯例。我把检查电子邮件改为制定当日计划。
试着从小事做起。选一个你找出来的坏习惯,不要试图马上就改变它。相反,尽量找出这个习惯被什么触发,你这么做有什么表现,以及是什么奖励激励你产生冲动要这样做。有时候,你甚至会发现,所谓的“奖励”不过是个你期望能够实现却从未兑现的承诺。
例如,你可能决定自己要养成在检查代码之前运行所有单元测试的习惯,那么你或许会决定:假如在检查代码之前运行了所有单元测试就给自己5分钟的休息时间去检查电子邮件。你只要留意并确保给自己的奖励本身不是一个坏习惯(比如锻炼后吃糖)。 然后,考虑一下,是什么触发了你的这个习惯?为你的新习惯找出暗示,并使之固定不变。
接下来,努力找出是否有别的惯例可以代替当前这个为了某个习惯正在执行的惯例。
最后也是最困难的部分是,强迫自己坚持足够长的时间,以使新习惯取代旧习惯。
分解任务 ¶
“好忙啊,问题好大啊……”这是经常听到的感慨。可以想象这个感慨后面会导致的结果,低效、拖延。
任务越大,看起来就越吓人。大型任务给人带来沉重的心理负担。
面对大问题时,我们倾向于花更多的时间思考问题本身,而不是采取行动去解决问题。人类倾向于选择阻力最小的路径。当面对一项大任务的时候,检查电子邮件或者泡上一杯咖啡看起来就是更容易的路径,于是拖延随之而来。
而且,任务越大,越难明确定义,往往也很难估算完成时间。如果让你去商店买鸡蛋、牛奶和面包,这个任务就是非常明确的,你知道该做什么。你正确完成任务的概率也很高。但是,如果让你创建一个网站,这个任务很大,定义也不明确。
大任务更可能导致拖延,通常描述也更少,更容易出错,也更难估算完成时间。
我们在阅读的时候,与那些篇幅巨大、很少停顿的书相比,每章1000~2000字的篇幅更容易阅读,而且,从作者角度,也易于完成写作。
把大任务分解为小任务的时候,务必确保每个小任务都有一个明确的目标。在明确这些目标的过程中,经常会发现一些遗漏了的重要信息。
17|经验分享 ¶
对大多数软件开发者来说,博客或者专栏是非常好的选择。原因很简单:入门门槛很低,而且效果非比寻常。 如果你持续不断地定期撰写博客或专栏,那么当人们在互联网上搜索你的名字时几乎一定都会找到你的文章。 正是因为你有一个博客或专栏,并且定期更新,这将提升你在任何一位招聘人员、雇主或者潜在客户那里的声望。
要提高你的沟通技巧,我认为没有比写作更好的方法了。写作教你用别人能理解的方式清晰明了地组织你的思维。你写的越多,你的沟通能力也就越好。
博客或专栏还可以帮你记录自己的个人职业发展状况,为你提供历史文档和参考资料,让你能够清楚回顾过去是如何解决某个问题的,用你过去已经讨论或者解决的问题来作为对当前一些问题的答案。
开设博客或专栏的时候,你的一项首要工作就是选择主题,这里的主题不是theme,是指话题(topic)。从本质上说,博客或专栏的主题要与你的专业或者工作一致。
开始的时候,你要让你的主题非常聚焦、非常紧凑,你可以更为轻松地控制这个领域,在将来慢慢扩展它。 总体来说,在获得流量的过程中,最重要的工作是撰写高质量的博客文章,坚持不懈、持之以恒。 总有一些日子里,你根本不想写。但你还得继续坚持走下去。纪律就是做你应该做的事,不管你喜欢与否。而且你需要有纪律来保障自己持续写,并且要坚持不懈。终有一日会守得开花月明。大多数人没有足够的耐心、没有坚持不懈等到那一天的来临,这就是大多数人都无法从生活中得到他们想要的东西的原因。
新博主犯的最大的错误之一就是,他们试图把每一件事都呈现出来,就像在撰写学术论文或者新闻报道那样。这么做会令文章单调乏味,缺乏个性,缺乏生机。努力尝试让自己很专业是不错的,但是一个没有独特魅力和独立观点的作家会让人觉得非常无聊。
不要害怕在你的写作中加入一些个性。给它注入一点儿“活力”。有自己的见解和观点是没有问题的。语法不好没有关系,只要能达成你的目的就好。
你的声音就是你的本来的样子。阅读你的文章的人不应该只是学习如何用最新的Java框架创建Android应用程序,还应该了解你作为一个作家的身份以及你的个性。这就是写作最有趣的地方。很多人对“技术”感兴趣,他们对“人”更感兴趣。
如何处理那些对你写的内容发表负面评论的“喷子”呢?最有效的做法是漠视它们。
18|导师 ¶
何为导师 ¶
导师(mentor)可以以各式各样的形态存在。
我们通常会犯这样的错误:根据他人的生活来判读其是否具有帮助我们的能力。
与此相矛盾的是,许多最为成功的职业运动队教练并不是职业运动员,有的励志演说家的生活与他们所宣称的那一套大相径庭。
他们只是与实际生活中的自己不一致而已。你不应该因为某人在自己的生活中成就平平,最好的老师往往深藏不露。俗话说不能以貌取人。
在寻找一位导师的时候,你必须要抛开自己的判断和推理,只去关注导师的成就。你可以去找那些已经实现了你所设定的目标的人做你的导师,或者水平略胜你一筹的人做你的导师。你也可以去找已经帮助别人实现你设定的目标的人,即使他自己还没有达到这个水平。
如果一个人能够对很多人产生好的影响,能够帮助他们实现目标,那么他也更有可能为你做同样的事情。
当我们向别人寻求帮助时,我们要不坚持自己的逻辑和推理,假设自己并不知道什么最好,假设自己的想法观点是错的,否则我们也就没有求助的必要了。
如何寻找导师 ¶
你最好的选择就是去自己认识的人中找,自己的朋友的朋友、家人的朋友等。你极有可能在由家人和朋友组成的关系网中找到适合做你导师的人。这种寻找导师的方式最好,因为你从自己的熟人、家人、好友推荐的人那里找到导师的概率更大。
如果你想在一家公司里获得晋升,那么在公司内部给自己寻找一位导师无疑是明智之举。有些公司内部也提供平台,帮助员工寻找适合自己目标的导师。
你的老板或者你老板的老板这样的资深人士是导师的不二人选,你很可能会提前接受晋升所需要的各种教育。此外,与高管做朋友对你的职业生涯有益无害。 但是,如果格局不够高,你的老板可能不想在精心指导你之后看到你翅膀硬了,离开公司另攀高枝。 所以底线是:你得知晓跟你打交道的人的人品如何。
即使你能给自己找到一位完美匹配的导师,也不能保证这位导师愿意指导你。 那么你如何说服未来的导师自己值得他投入呢?完成这一任务的最佳途径就是交换互助,比如,自己对学习的渴望,或者免费工作,以单调的工作换取学习的机会。或者,可以考虑请他吃午餐或者晚餐,在吃饭的时候让他给你一些建议。
一定要有耐心!你只要确保自己求教的方式足够有礼貌,要做一个别人用棍子赶才能赶走的人,即便如此,过一会儿也还要回来。你的坚持不懈不会总有回报。
寻找导师的时候,可以考虑下面几点:
- 在寻找导师之前,你必须要明确,你需要导师帮你解决什么问题。仔细想想你为什么需要一位导师,你希望从这段师徒经历中获得什么。
- 列出所有你认识的人中可以做自己的导师的人。请其他人在你的列表上再列出他们认识的人,用好你的人际网络。
- 想一想,为了能够换取导师的帮助,你能给他提供什么?
成为导师 ¶
许多开发人员都认为自己没必要成为别人的导师,或者,他们可能觉得自己没资格在别人前进路上去教导或帮助别人。 其实,无论你生活在哪里,也无论你从事何种职业,你一定会在某个领域领先别人一步,可以帮到某个人,成为别人的导师。
身为导师并非每时每刻都要成竹在胸、永无谬误。身为一名导师,要客观地看待别人的问题并提供相应的解决方案,而对方之所以看不到这些解决方案,只因当局者迷。有时候仅仅以“旁观者”的观察视角就足以帮助别人获得成功。
有些人,其实他对我的问题一无所知,他们只是认真倾听我所叙述的,就可以看出我未曾注意到的显而易见的东西,给予我有益的指导。有时候你给别人做导师真正要做的就是给予关注。因为当遇到涉及自身的问题和麻烦的时候,我们都会有些目光短浅。高尔夫球手老虎伍兹也需要一位教练。
教学相长 ¶
“我又不是老师”、“我不知道怎么去教别人”,这是经常听到的借口。
教授是学习的最佳途径之一,所以,身为导师不仅能够帮助他人,也能给你自己的生活带来切实可见的好处。
能将自己的专业知识教授给别人,是成为专家的一部分要求。如果在某个领域你从来没有教会别人,那么很难说明你在该领域获得了足够的专业知识。
“知其然”这种肤浅的理解力无碍于我们完成工作,因而不易被察觉。然而一旦我们试着向别人解释某件事情的运作原理或背后的原因的时候,我们会发现我们并没有“知其所以然”,在认知上的漏洞就会暴露出来。
在你试图教别人的时候,你强迫自己重新组织大脑中的资料。最好的思维方法就是解释某样东西并将其记录在纸上,或者记录到Word文件,或者幻灯片中,使你可以将这些互不连贯的碎片信息收集起来,并以一种有效的方法重新组织起来。
要想教人,你得先把自己教会。传道授业为何是卓有成效的学习方法,原因正是如此。
你教的目的是帮助别人,而不是为了证明自己的优越性或者寻求认可。
- 在你做导师的时候,你通常会比自己的学生还学得多,你会修正自己关于某个课题的观点,以全新的视角观察和思考。
- 在你做导师的时候,你经常面对的都是最强悍的问题:为什么?当你被迫去探究这些“为什么”的时候,你会发现其实自己并不知道为什么。
- 当你帮助别人的时候,你会发现,你探求答案的过程能让你愈加深入思考,甚至可能完全改变你最初的想法。
- 你帮助过的每一个人,可能终有一天会超越你并且回馈于你。
- 做导师还会让你感觉良好。
- 指导别人能让你发现人生的新目标和新意义,帮助别人可以给自己带来真正的幸福。
一个品行端正、有原则但缺乏智慧和知识的人,如果给予正确的指引,最终也会成功。反之,如果一个人缺乏这些素质,即便获得全世界的帮助,也是无济于事。 所以,导师要找真正有意愿去学习,并愿意为此付出努力的人做自己的门徒。那些因为懒惰不愿意付出而向你寻求帮助的人,不配做你的门徒。 你可以找那些希望在你的帮助下加速前进,同时也汲取你的经验以避免犯错的人做自己的门徒。
19|职业发展 ¶
职业目标 ¶
厄尔·南丁格尔说过,“你所能犯的最大错误就是相信自己是在为别人工作。这样一来你对工作的安全感已然尽失。职业发展的驱动力一定是来自个体本身。记住:工作是属于公司的,而职业生涯却是属于你自己的。”
经营自己的职业生涯就像经营一家企业,把自己的软件开发生涯当作一桩生意来看待。这种心态对于管理职业规划至关重要。因为只有你开始把自己当作一家企业去思考时,你才能开始做出正确的商业决策。
尽管在你的职业生涯的某个特定时间段里,你可能确实是在为某家公司打工,但是千万不要让那个特定的角色固化了你和你的整个职业生涯,这一点非常重要!
把雇主当作你的软件开发企业的一个客户。虽然你目前所有的收入都是从这一个客户处得来的,但是这种角度的转变,可以将你从朝九晚五打工者的弱势地位,转换成为自我治理和自我引导的主动地位,积极主动地管理自己的职业生涯。
作为一个企业,首先要有一个产品或服务。作为一名软件开发人员,从经营企业的角度看,你所能提供的服务就是创建软件。
作为一个企业,仅有服务或产品是不够的,必须要让潜在客户了解该产品或服务。产品营销做得越好,你就能给服务定越高的价格,也越有机会吸引更多的潜在客户。
作为打工人的你,把你的职业当作一个企业,把你现在的雇主视作客户,你所能提供的是不是软件开发服务?你是不是应该做好自我营销?是不是要吸引更多的客户(雇主)来找你,而不是你去找客户(雇主)?
所以,从你入行第一天,就需要这样考虑自己的职业生涯:
- 专注于你正在提供怎样的服务,以及如何营销这项服务;
- 想方设法提升你的服务;
- 思考你可以专注为哪一特定类型的客户或行业提供特定的服务;
- 集中精力成为一位专家,专门为某一特定类型的客户提供专业的整体服务(记住,作为一个软件开发人员,你只有真正专注于一类客户,才能找到顶尖的岗位)。
当你已经把软件开发职业当作一项商业活动来看待,那么,现在应该制定你的业务目标(职业目标)了。每个人都是独一无二的,职业目标肯定也是不尽相同的。想要实现任何目标,都必须先知道目标是什么。
然而,知易行难,现实是鲜有软件开发人员能够为自己的职业生涯设定目标。要么缺乏对自己人生目标的具体认知,要么没有尽力去实现自己的人生目标。
或许担心,一旦为自己的职业生涯规划一个长目标,如果以后发现这条路错了改怎么办?如果我以后不喜欢这条路改怎么办?大家希望自己还能拥有各种选择。
其实,不做决策其实也是一种决策,代表着你决定什么都不做,通常这是最糟糕的决策。 在生活中,即使选择的是次优的选项或者次优的路径,那也几乎总是比随波逐流的路径要好。
如何给自己设定目标?
首先定一个大目标,大目标并不需要那么具体,但是必须足够清晰,能够让你知道自己是在向它前进还是离它越来越远。
一切都取决于你确定的大目标是什么。你希望从职业生涯中收获什么?你希望自己5年或10年后在哪里?认真思考一下这个大目标是非常重要的。
一旦你想通了自己的长远目标是什么,那么下一步就是设定路线,制订通往大目标的小目标。 也可以运用一下逆向思维,反推一下,假设如果你已经达到了大目标,那么沿途你需要经历了哪些重要阶段和里程碑? 目的是通过设定大小不同的目标,确保你向着自己的大目标前进.
在设定了大目标和设定了通往大目标的路线(小目标),接下来就是定期核对自己的目标。这有助于在必要时进行调整,让你对自己负责。你可能更愿意在每周末先跟踪上周设定的目标,再为下一周设定目标。这同样适用于每月、每季和每年。
三条职业路径 ¶
作为一名软件开发者,你可以在多条职业道路之间做出选择。
太多的初级程序员从不花时间考虑他们的职业发展道路,从来没有深思熟虑过他们想要走什么样的道路,想要投身于哪一个领域。相反,他们只会站在路边,声嘶力竭地高喊“有没有哪个团队想要我”,然后随随便便就加入一群想要去铤而走险的人中,把别人的道路当作是自己的道路。
三类软件开发者:
- 职业开发者(雇员);
- 大多数程序员要么本身就是一名职业开发者,要么在职业生涯中的某个阶段里是一名职业开发者。
- 稳定。有一份工作,有一份薪水,但也有可能失去工作。
- 从业之路比较轻松。不用操心“做什么才能赚钱”这种问题。
- 带薪假期。
- 公司缴纳社会保险。
- 缺少自由。收入封顶。
- 自由职业者(雇佣兵);
- 自由职业者就是一名为自己工作的软件开发者,他们不必忠诚于任何一家特定的公司,为任何他们选择的客户工作。
- 更大的自由度(自己掌控时间)。
- 可以持续不断地做新项目。
- 赚钱潜力。
- 自己去寻找业务。
- 需要自己打理一切事务的开销。
- 从“为一个老板服务”变成了“为许多老板服务”。
- 创业者(程序员与企业家的混合体);
- 完全自由。
- 巨大的赚钱潜力。
- 做你想要做的工作。
- 没有老板。
- 风险很大。
- 完全依靠自己。
- 需要许多其他技能。
- 可能需要长时间工作。
到底该怎么选?
对大多数软件开发人员而言,在职业生涯的起步阶段,做一名雇员是明智的选择。即使你已经树立了“为自己工作”的志向,做雇员是学习并锤炼技能的良好起点。
选择哪种就业类型完全取决于你自己,并且你也可以随时切换路径。
列一个名单,列出你认识或者听说过的对应上述三种类型的软件开发人员。 如果你打算自由职业或者创业,那么先和你认识的已经走上这条路的朋友聊聊,了解一下这条路到底怎么样,避免在盲目无知的情况下投身其中。
专业化 ¶
很多软件开发人员并没有具体的专业方向。软件开发人员完全以自己使用的编程语言来定义自己的专业属性。
“我是C#开发人员”或者“我是Java开发人员”,这种专业划分太宽泛了,并不足以说明你能胜任哪种类型的软件开发工作。
一门编程语言并不能让其他人了解你是哪类软件开发人员,也不能告诉其他人你真正能做什么。它只是让其他人知道你在工作中使用哪一种工具。(工具是变化的,不具有继承性,所以不能成为个人核心竞争力)
注意,专业化的规则是:专业化程度越深,潜在的机会就越少,但获得这些机会的可能性越大。
软件开发人员有很多不同的专业分类。比较明显的分类方法是按照开发语言分类和按照平台分类,但是也可以按照方法论分类、按照技术或业务种类分类。
下面是开发人员的专业化(specialization)的例子:
- Web开发。作为一名Web开发者,你可以在前端工作,你也可以在后端工作,保障应用程序正常运行,或者你也可以同时工作在前端和后端,成为“全栈开发者”。
- 移动开发。几乎每一家公司都需要一款移动应用,有时甚至不止一款。
- 桌面开发。在现实中,对编写直接运行在PC上的桌面应用程序的软件开发者,总归会有一些需求的。至少在现在,这是一个可行的职业选择,只不过形势看起来是不大好。
- 电子游戏。这是一个可行的职业选择,但这又是一个困难重重的选择,竞争激烈,工作辛苦,长时间加班。
- 嵌入式系统。嵌入式系统的开发者大多是工作在实时操作系统上,这些操作系统运行在电子设备内部,这是一个很好的职业选择,因为它的需求量巨大,而且它需要专业技能,这些技能非常有价值。
- 大数据科学。数据科学家利用来自不同领域的技能和技术来获取大量数据、理解大数据,然后做出结论和预测。随着数据量的不断增长,数据科学的未来肯定是一片如火如荼之势。
- 工具和企业信息化。企业信息化软件的开发工作可能非常具有挑战性,需要一套独特的能力和知识体系,因为企业信息化软件的开发者通常必须对组织、对组织内的政治局势有着深刻的理解。比如SAP、金蝶这些ERP软件。
- 云。大多数云应用同时也是Web应用,但它们并不一定都是Web应用。云开发者需要了解云是如何工作的,特别是在可伸缩性和可用性方面。
- 自动化测试。专注于测试自动化的软件开发者要构建用于自动化应用测试的工具,编写自动化测试脚本以执行和验证功能。测试自动化极具挑战性,复杂度也很高。
有一些技巧来帮你选择自己的专业:
- 在你现在或以前工作的公司里,有哪些主要的痛点?你能成为一名专门解决这些痛点的专家吗?
- 有没有一种特定的工作是无人能做,或者缺乏经验丰富的人?成为这个领域的专家,你就会获得大量业务。
- 在各种会议上和用户组中哪些话题最常出现?
- 无论是针对同事,还是在Stack Overflow这样的网站上,哪类问题你回复的最多?
精通多种语言的程序员该怎么办? 学富五车,或者灵活变通并同时仍有所专长让自己卓尔不群。如果你非要二选一,那先从专业化开始,再拓展分支。
史蒂文·普雷斯菲尔德(Steven Pressfield)在《The War of Art》这本书书中,阐述了“专业”与“外行”之间的区别:“成为专业人士是一种心态。如果我们总是与恐惧、自毁、拖延和自我怀疑做斗争,那么问题就是:我们正在像外行那样思考问题。外行毫不起眼,外行废话连篇,外行屈从于逆境。专业人士可不这么想。不管怎样,他引人注目,他恪尽职守,他始终如一。”
专业人士的特点:
- 遵守自己的原则。
- 专注于正确完成工作。
- 不惧怕承认自己错了,不会文过饰非。
- 持续稳定。
- 勇于承担责任。
外行的特点:
- 让干什么就干什么。
- 专注于完成工作。
- 不懂装懂。
- 无法预测,不可靠。
- 回避责任。
一切都始于习惯。习惯是成为专业人士的必不可少的部分。 如果你想改变自己的人生,那从改变自己的习惯开始。当然,说起来容易做起来难。坏习惯很难被打破,而新习惯又不容易养成。
如果想成为一名专业人士,首先,你需要培养自己的专业习惯;其次,你需要具备强大的时间管理技能。
软件开发人员所要面对的最大的道德挑战就是:以他们了解的决策前行是正确的,也符合客户的最大利益,但是这样的决定可能会危及自身福祉或职业稳定。专业人士需要知道在什么时候说“不”,即使是面对自己的老板。
如果你承担不起说“不”的代价时该怎么办?
在这种情况下,你还是去做你被要求做的吧,但千万不要让自己再次陷入这种境地。同时,你应当尽可能地让自己占据上风,或者至少是旗鼓相当。 当你需要一份工作时,就很容易落入圈套,一旦陷入困境,你就限制了自己的选择,任由他人给你施加压力。 如果你身处这样的情况,请尽快脱身,可以考虑换一份工作,换一份不会要求你做很多道德上的抉择的工作。
许多软件开发人员犯的一个巨大错误就是,当无法达到标准时,他们不是完善自己、迎接挑战,而是降低标准。
你当然可以改善你的弱点,但最好了解自身的强项并发挥你的长处。专业人士对自己的能力和弱点有着良好、精准而又客观的自我评估。
如何穿越“玻璃天花板”?
软件开发者不管选择了哪一条特定的职业路径(也许不止一条),最终都会遇到所谓的“玻璃天花板”。这个玻璃天花板实质上就是一个极限,限制了你在职业发展路径上可以前进多远,限制了你作为一个软件开发者可以得到的最高薪酬。但是,有办法绕过或者穿越这个玻璃天花板。
比如,你可以选择不再为别人工作。如果选择做一个自由职业者,你的玻璃天花板要宽敞许多。任何一种选择都可以让你穿越玻璃天花板。
如果你依然坚守职业开发者的道路,那你可以在打造个人品牌和自我营销上加大投入,这样你可能凭着自己的声望就能找到一家公司,让你的薪酬远远高于平均水平。
管理还是技术 ¶
大多数中小型公司在向上晋升和发展方面都存在实际的限制。作为一名软件开发者,你不可能比公司的发展通道最高级别还要高,其实,所谓的“最高级别”其实也没有高到哪里去。
如果你想在事业上取得成功,你绝对应该致力于提升自己的人际交往技能。无论你选择走哪条道路,你都需要先学会“做人”。
就管理工作而言,你面临的最大问题并不在于你能否成为那种能胜任管理工作的“人”,而在于技术人员出身的你能否忍受不能从事技术工作的缺憾。你是不是总想要撸起袖子去写代码或者去做其他技术工作。
在大公司,如果你选择走上管理通道,你可能会成为一名开发者经理,然后可能是一名部门经理或项目经理,再然后,如果你能一直获得晋升,你可以一路做到高级管理职位,如开发总监甚或是首席技术官(CTO)。
如果你选择了技术通道,你可能会从高级开发者转去做架构师,然后再晋升为高级架构师或首席架构师。
但是,如果你达到了“玻璃天花板”还想继续有所突破,那你就不得不做出抉择:坚守技术通道,还是转去管理通道。
你需要一直思考“我要去哪里”。无论你决定做什么,最重要的是:你需要做出决策,并且为此做出计划。即使你做出了选择,你也不必死守在一条通道上一成不变,你可以不断调整改变计划。但是,你应该至少制订一些计划,否则你会在自己的职业生涯中漫无目的地随波逐流。
努力工作的价值 ¶
每个人,包括我自己在内,一生中都在寻找捷径——不用努力工作就能获得成功的方法。
现实的情况是,一切有价值的东西无一不是努力工作的结果。在生活中,特别是在软件开发的职业生涯中,如果你想看到成果,你就必须要学会坐下来,做好自己并不想做的工作——并且要坚持不懈。
为什么有的事情就是比其他事情做起来难得多得多,我可以一次玩几小时游戏也没问题,却似乎总无法让自己坐下来学习一些新知识?它们一个是游戏,一个是工作。一个快乐,一个辛苦。
基本上没人愿意做艰苦的工作。但事实是,有些工作很辛苦,而有些工作则很轻松。
然而,我们认为艰苦的工作最有可能是让我们获益良多的工作。艰苦的工作最有可能是推进我们职业发展或者为我们打开机遇之门的工作。所有没有任何好处的工作看起来总是那么轻而易举。
“聪明地工作可以胜过努力地工作”这一理念存在着一个重大的谬误。要想出人头地必须要聪明地工作,这确实没错,但是无论什么时候,努力工作的人总是超越自认为聪明工作的人。事情的真相是,如果想真切地看到自己行动的成果,我们必须自愿努力工作。
如果真想富有成效,你就不得不学会工作的时候既聪明又努力。光有聪明是不够的。一定量的机智是必须具备的,然而要想获得真正的成功,面对挫折的时候一定量的毅力也是必要的。
努力工作总是枯燥的。这或许是为什么我们逃避艰苦的工作的一个原因。
马拉松比的是谁耐力更长久,而不是看谁冲刺更有力。起初,你的激情让你暂时爆发,但是那些愿意投入漫长的努力,并愿意为了完成工作执着于枯燥工作的人,最终会超过你,并且遥遥领先。
我们所面对的现实就是残酷的。没有一件事情是轻而易举的。如果真想成功,如果真想要成为成功人士,你就不得不在有些时候通宵达旦。 你可能会在自己的职业生涯的数年里每周工作60~70小时。为了获得领先的地位,你可能会好几年都不得不放弃看电视或者与朋友们外出游玩。 你无法欺骗这个规则。你的收获取决于你的付出。种瓜得瓜,种豆得豆。没有播种,永远没有收获。
不过,这并不意味着你永远都不能有片刻轻松。成功会带来更多的成功。越成功就越容易获得成功。但是,攀登第一座山峰的过程是漫长又艰难的。
如何做到努力工作?我们所有人都得跟同样的问题做斗争。我们都有拖延的倾向,都会逃避真正对我们重要的工作。 如果要想不顾一切地追求成功,就不得不学习如何击败这个阻力。但是,如何才能将阻力彻底打倒呢?我们只需要坐在办公桌前,做我们应该做的事情。我们必须要学会脚踏实地、埋头苦干。没有奇迹会发生。
20|工作稳定性 ¶
现实中,根本就没有所谓“工作保障”。因此,赶快把工作保障和工作稳定性这类想法抛于脑后吧。要习惯于不舒服。
再也不能指望在一家公司里找到一份工作并在那里待上二三十年,直到你退休后领上养老金为止。看看黑莓(Blackberry),诺基亚(Nokia),柯达(Kodak)这些公司,就知道现在变更的速度日新月异,即使你已经在那里工作了很多年,你也会突然发现自己处在一个风雨飘摇的地方。
太多的软件开发者想要挑选“稳定”的公司工作,而不是选择更有前途也“风险更高”的机会,因为他们认为大公司不会像创业公司一样迅速崩溃。这种见解是完全错误的。你必须得接受:当今商业世界从本质上讲就是不稳定,特别是在技术方面。
你随身备有一份“紧急逃生计划”吗?不要试图寻找稳定,相反,努力让自己变得更强健有力、适应力更强,这样你就永远不会失业。
工作保障并非来自囤积知识。 许多软件开发者在试图获得更多保障的时候所做的最糟糕的事情之一就是囤积知识、有能吝教。 他们不会公开分享他们正在学习的东西,也不会教别人如何做好自己的工作,以便在职场灾难突如其来时,生活也会继续下去,他们做着完全相反的事情。他们故意让事情变得复杂,试图确保他们是唯一知道系统如何构建、如何工作的人,他们就是那个知晓如何处理这个险象环生的架构的唯一智囊。他们竭尽所能想营造一种氛围:如果他们真的发生什么意外,世界就会就此彻底毁灭。 但现实世界不是这样运作的,不管你认为自己有多重要,也不管你认为自己知晓怎样的“机密”,世界都会照常运转。有能吝教并非营造工作保障的方法,因为你阻止不了进步。
如果你要想达到最高水平的工作保障,你就得自觉自愿地让你自己变得不那么不可或缺。事实证明,在任何公司里,最有价值的员工都是那些让自己的工作变得无足轻重的人。 如果你让你的工作变得无关紧要,那你确实无法保住这份工作,但你也不会被解雇。你会被升职的。这才是工作保障的真谛——你所触碰过的一切都变成了金子,所以你会一直被委派去负责越来越多的工作。 你越多地分享你所知道的,你就会越变得价值连城,这是当今唯一真正实用的工作保障形式。
用能力代替稳定。 实现工作稳定和工作保障的最好方法不是在一家稳定的公司获得一份完美的工作,也不是借由只有你才知晓的有关工作的关键秘密来绑架公司,而是通过持续不断地积累知识和毫无保留地分享知识来实现自我价值的增值,让自己压根就不需要工作保障或工作稳定这类东西。
**以终为始**的策略。 不要把自己的希望寄托在某一家公司或某一家公司的某一份工作上,而是持续不断地提高自己的能力,让自己在任何时候都能轻松地找到一份新工作。
在生活中,对于任何特定的情况,你总归会有以下三种选择:(1)接受它;(2)改变它;(3)远离它。
拥抱不确定性 励志演讲家与畅销书作家托尼·罗宾斯Tony Robbins说,“你的生活质量与你在充满不确定性的生活中感觉到通体舒畅的程度成正比。”
不管你有多富有,不管你的工作有多体面,也无论你有多想要竭尽全力保全和留住你所拥有的,生活总归有风险。无论你拥有什么,总可能有一些机会被夺走。当你不遗余力想要阻止这一切发生的时候,你将会失去生活的快乐。
所以,提高你自己的能力,这样你就能更轻松地找到一份新工作;让自己在当前的岗位上发挥出更大的价值,去分享所有你可以分享的知识,不要总想着藏着掖着;这样无论遇到什么困难,你总能坦然度过。
21|兼职与自由职业 ¶
兼职 ¶
毋庸置疑,兼职项目是你提升自己软件开发者职业生涯的最佳方式之一。
虽然靠兼职项目发不了大财,但能帮你拓展了各种各样的技能,这些技能会对你的职业发展帮助巨大,对自己的编程能力有了信心。
一个为期6个月的兼职项目可能带给你的经验,相当于你在朝九晚五的全职工作中好几年才能积攒下的经验。不仅如此,每个人都有机会从中获得经济利益,特别是在你成长和学习的过程中。
如何挑选一个兼职项目?
建议你从一些很小的东西开始。从一个非常简单的兼职项目入手,确保你知道自己可以轻而易举完成这个项目,比如最多只需要几个星期或者一个月的时间就可以完成的小项目。
原因在于:大多数人都很擅长欺骗自己。他们习惯于违背自己的承诺和誓言,以至于失去了信任自己的能力。他们之所以违背诺言,是因为他们试图着手处理那些体量过大、投入过大的项目。他们的企图逾越了自己的能力范围,这会导致他们失败或放弃,于是,持续不断地让自己失望,因为他们失去了信任自己的能力。
打破这一循环的最好办法是做出小的承诺并切实履行这些承诺。大多数软件开发者要去完成的第一个兼职项目就是那些已经存在的项目的复制版本。 不要担心复制,你只需注意你的复制版本不要做成完全的抄袭,在原有的基础上,你可以添加一些自己的小功能点
让兼职项目服务于至少两个目标。比如,你可以在你自己的兼职项目中,将下列目标组合在一起:
- 学习一种新的编程语言;
- 学习新的框架;
- 实践并掌握现有的技能;
- 创建一个应用程序,解决你当前的某些问题;
- 创建一个应用程序,解决你或者别人的某些问题;
- 创造额外的收入来源;
- 在你的面试材料中使用它;
- 作为博客或者专栏的内容;
- 创建一个应用程序,以便于展示视频内容;
- 利用该项目指导别人;
- 利用该项目得到别人的指导;
- 了解一下你感兴趣的行业;
- 完成学习的作业;
- 其他;
通常情况下,一个项目需要下面三样重要的东西才能保证完成:
- 定义项目的终极目标,即完成的标准。
- 设定最后期限。要有进取心,但也不要过于激进。给自己一点缓冲时间,但不要太多。
- 制订一个制度和一份进度计划,用于管理这一兼职项目的进展。
如果临时有事情干扰了既定的日程安排,那就在日历上指定一个替代时间去完成既定的任务。
就算一个项目完成了99%的任务,如果它不能被交付,那么它的价值也是0%。如果你在项目中被问题“卡住”了,与其让自己深陷其中(因为你正试图给问题找到完美的解决方案),还不如放下包袱继续前行,这应该是个更好的策略,因为并非所有的问题都必须要解决。
不管要做哪个项目,也不管你有多讨厌它,只要你开始去做某些事情,你就一定要善始善终地完成它。这种态度会改变你的生活。
“行百里者半九十”,能做到善始善终实在不易。再伟大的城墙也是由一块一块完美无缺的砖头砌成的。 坚持不懈才是关键。如果你想要完成你的兼职项目,那就要学会坚持不懈,锲而不舍。
对于简直项目,第一条建议是,从一开始,你的目标就是要从兼职项目中能找到一些赚钱的方法,哪怕只能赚到蝇头小利。 如果你需要把该应用程序定为免费,那你可以在应用程序中添加一些广告,也可以给这个应用程序做一个试用版本、一个付费版本。
但是也要现实一点,你并不能指望从你的兼职项目赚大钱。
自由职业 ¶
做一名自由职业者,摆脱老板的管束,那是很美好的梦想。现实是,你如何成为一名真正的自由职业者为自己工作?你如何创业?
你应该问自己的第一个问题就是:你确定自己真的要走这条路吗?怀揣着自己创业、成为一名自由职业者的梦想,没有问题。但梦想是一回事,现实是另一回事。
能想到的现实是:
- 在你已经在自己的全职工作上忙碌了一整天之后,你还得愿意在“自己的工作上”投入大量的时间。
- 你不得不去做一些令自己不舒服的事。你不得不面对拒绝。
- 在许多情况下,你将不得不冒着很大的风险。
- 正常的工作为你提供稳定的薪水和稳定的生活,而自由职业与创业却不会如此。
- 你可能要为某个客户工作几个星期或者几个月却得不到分文报酬。
- 你可能要花上几个月甚至几年的时间来创造一个产品,而最终的结果却是彻底失败。
如果你不想遵循别人的规则,那你必须要为自己制订规则并且遵循它们。这可是一个艰难的任务。
自由职业的定义相当简单:你不会受雇于任何人,而是受雇去完成特定的某项工作。 一名真正的自由职业者可以为多个客户工作,尽管不一定要同时工作,但自由职业者必须自行管理寻觅客户、订立合同和运行业务的所有开销。
为别人工作太久之后,你就像动物园里的狮子。你生活在有一个舒适惬意的围栏里,你可以在里面四处游荡,你知道边界在哪里,可你就是“忘了”怎样自己去捕食。
成为一名自由职业者,就是让你把自己的“动物本能”激发出来,学会如何养活自己。这里有两种方式,一种艰难的方式和一种轻松的方式。
艰难的方式就是走出去,提高你的销售技能,打破所有的成规俗套。 与所有可能对你的服务感兴趣的人联系,与所有可能认识你的人联系,让他们知道你已经在开展自己的业务了,让他们知道你能为雇用你的人提供什么样的具体好处。不要谈论在服务方面你能做些什么,要从结果的维度跟别人谈论你都能为他们做些什么。
轻松的方式就是通过建立声望的方法,特别是通过开通博客或者专栏的方法。让客户来找你。 这种轻松的方式短期内可能会难度更大,因为建立声望需要付出大量精力,需要完成许多工作、付出大量时间。 所有用来打造你的个人品牌的事情都不是一蹴而就的。但是,如果你很早就开始在日常工作中专门做过这些事情,那么当你准备跳入自由职业者的世界时,就会很容易,因为你的客户已经来找你了。他们不仅会来找你,而且还愿意付给你更多钱。
身为一名软件开发者,你很适合自己创业成为一名企业家。你可以做一名自由职业者,但你也可以创办一家初创型企业,开发并销售自己的App或者其他服务。 如果你打算从自由职业者转向更一般的“创业”,那么要认识到,创建一家企业并不是那么难,难的是创办一家能赚钱的企业,维持业务的正常运转,保障企业经营成功。现实是大多数企业都以失败告终。 这其中,很多软件开发者在那些无关紧要的事情上浪费了大量的精力、时间和金钱,然而自始至终他们也没有把精力投入如何让业务本身成功上。
开启创业模式 ¶
正确的开启创业模式,是你要假定创业可能会失败,然后再去考虑起步时所需的最小工作量与开销。 当你刚开始创业的时候,你需要尽全力投身到真正重要的事情上,这样才能让你的新企业拥有最大的成功的机会;而如果你不幸真的失败或关门大吉,那你之前所做的一切并没有让你赚到钱,都是彻头彻尾的浪费,所以你要尽可能地减少浪费。
许多创业者都会犯的一个巨大错误就是存一大笔钱然后就辞职,这样他们就可以创业了。这似乎是一个不错的计划,但它往往是一个可怕的会导致灾难的计划。
事实上,重压之下一切都会面目全非。当你面对这种前所未有的压力时,你更有可能没有动力去真正做任何实际的工作。另外,当你从一份朝九晚五的常规工作突然转变成自己要为自己安排时间的时候,你会很容易因此不知所措。
因此,建议是不要辞职,至少不要马上辞职。相反,无论你打算创业做什么,你都可以一边创业(作为副业),一边保留一份全职工作。没到正式辞职的那一刻,你永远不知道为自己工作是多大的工作量,但是到那时才知道的话已经为时已晚了。
如果你在做全职工作的时候不能忍受夜间加班和牺牲周末,那么创业之后你也不会做出这样的牺牲。这是肯定的。因此,最好还是趁你现在还有一份“舒适”工作的时候,就努力工作,培养高效的好习惯。这种转变是很难的,你必须要提前做好准备。
这里有一个误区需要特别说明。 你会觉得做雇员的时候你每天能工作10个小时,自己创业后,每天工作8小时妥妥没问题。其实不然,每天检查回复邮件,包括一些关联的电话沟通,按2小时算;一般性的电话沟通或者社交活动,按1小时算,各种私事或者偷懒,按1小时算,这就4小时没了,只剩4小时用在真正的工作上。 要知道,创业的你,只有在工作的时候才有收入,做雇员的你,24小时都是带薪的。
虽然你为自己工作的真实动机可能就是因为你热爱自己正在做的事情,但是不要指望热情可以持续很久。随着时间的流逝,热情往往会变得捉摸不定乃至于消失殆尽。
所以,先把创业项目当作副业。先让它运行起来再说。在两年或者更长的时间里,你可能一直都需要做两份工作。这样做的目的,是让你在辞掉工作之前,能够对自己实际承担的工作量有一个符合实际的预期,并训练自己提前处理更高强度的工作负荷。
一旦你的创业项目可以给你带来足够的收入,你就可以辞去你的全职工作,把创业项目变成你的全职工作。但是,即使在你的副业收入为你提供了足够的收入供你生活,让你足以辞职的时候,你的收入仍然比你在全职工作中挣的钱要少得多。
另外一个重要的点,是在你开始做兼职项目之前,你要仔细查看你当前就职的公司是否有专门针对兼职的特别条款,提前做好风险评估。如果你认为你和自己的雇主之间会有麻烦,那你可能真的会有麻烦,这是底线。你可以选择对你的副业秘而不宣,也可以选择将其公开,但这两种方式都有自身的风险。
获得客户的途径 ¶
在你开始创造一个产品之前,甚或是在你考虑如何收费、如何寻找顾客之前,你首先要找到受众。
许多软件开发人员一开始就深陷创业者最常犯的错误之中,在为产品找到客户之前就构建好产品,也就是说,他们在尚未有受众的时候就创建产品。 从构建产品开始可能有些道理,不过你要避免落入这个陷阱之中,否则你只是冒险为一个不存在的问题创造了一个解决方案。 而且,太多崭露头角的创业者为自己的第一个产品设置了非常激进的目标,不顾一切地追求新的梦想。**从小处着手**很重要。 如果你想尽可能缩短自己的学习曲线,你就需要尽量缩短开始行动到看到成果之间的周期。
找到受众会给你带来一个巨大的优势。它几乎可以保证你一定会大获成功。是的,这需要你额外付出努力,这需要时间,而且当你寻找受众的时候,实际上你赚不到多少钱,你必须为此创建大量免费的内容。但是,一旦你拥有了受众,你就可以拥有一项依赖于单一产品的业务,你可以将你的余生投入其中。
但是,许多人创业时都是先有一个伟大的想法,然后从这个伟大的想法出发创造出伟大的软件,可以完美地解决某人的问题,然后花大把的钱在营销上,去寻找客户并且说服他们购买自己产品,但很难让任何人在完全不相干的情况下从你那里购买东西。
每一位成功的企业家一定是一位成功的推销员。事实上,即使你从未成为一名企业家,也从未决定自己要创业,你的推销技巧也可能会成为你的人生是否成功的决定性因素。我们一直在推销。人人都在推销。但有些人就是做不好推销。 推销是很难的。还不仅因为这些技巧很难掌握,而且推销需要你去直面生活中最大的恐惧之一:拒绝。推销总是要面对拒绝,而且你必须要直面拒绝。
要想真正擅长推销,实践是必不可少的。找一份电话销售或者挨家挨户上门推销的工作。不必在乎能不能赚钱,你可以从中汲取到真正的向人们推销的经验,你也能学会如何面对拒绝。 特别是当你经营一家企业,你就不能把销售工作外包出去。你可以雇用一个销售团队,但你自己必须首先是一名推销大师。
“吸引式营销”(inbound marketing)的基本思想是让潜在的客户主动送上门,而不是你去找他们。你要做的事情就是免费提供有价值的东西。 例如,你也可以做免费的网络课程、在大会上做演讲、写博客或者专栏等。
“吸引式营销”唯一的问题是起效时间有点长。你必须有足够丰富的内容来吸引足够多的潜在客户来充实自己的工作渠道。这也是现在就开始着手暂时别辞职的好理由。长远来看,吸引式营销能给你带来更多的业务。
企业家的生活就像是过山车。某一天你站在世界之巅,然而第二天一切都变成一团乱麻。所有这一切都很艰难,但值得付出,因为你的人生就是属于你的,也是你自己一手打造的。
22|心态 ¶
工作与生活的平衡 ¶
工作/生活平衡是一种心态,而不是一个具体的公式。
如果我们把工作变成“工作”,那就会是导致痛苦的原因。
要想实现真正的工作/生活平衡,就根本不要想着去实现它,而是要模糊工作/生活之间的界限,让所有一切都变成“生活”。把两个高度分隔的概念看作是一个整体。不要再试图平衡工作与生活,而要去寻求“过一种平衡的生活”。
在我认识的软件开发者中(也包括其他行业的人),有太多人过着两种割裂的生活。
- 一种生活就是他们的“工作”生活。时而喜欢,时而忍耐,时而恐惧。
- 一种生活就是他们的“生活”生活。聚会、跑步、吃喝,做任何他们喜欢的事情,时间似乎从来没有充裕过。
- 还有一种人,他们基本就没有生活,一直就在工作、工作还是工作,他们把自己的“生活”全盘搁下了,直到达到某个目标甚或是直到退休,才算实质上过上自己的生活。
工作与生活平衡就是一个神话,这才是问题的真正所在。这个概念要求你把自己的生活分割开来,告诉自己这段时间是为了工作,而那段时间属于生活,两者是两条永不相交的平行线。
割裂你的生活是有毒的。当你试图把工作和生活区别对待时,你会爱上一个、害怕另一个,你就剥夺了自己拥有一个充满乐趣、丰裕充实、目标明确的生活的机会。事实是,和其他任何事情一样,你的工作就是你生活的一部分。我们必须停止从“平衡工作/生活”的角度思考,而要开始从“生活的质量”的角度思考。
你想过什么样的生活?对你而言什么才是重要的?这些都是你要问问自己的重要问题。一旦你能够回答这些问题,你就会开始思考如何设计自己的生活(工作也包含其内)、你想要的生活方式,而不是试图让自己的生活去匹配下班后的剩余时间。
很多软件开发者花在办公室里的时间太多太多,很多时候是被逼无奈。但在大多数情况下,加班对你的职业生涯的影响并不大,而且会大大降低你的生活质量。
努力工作没有错,当你为别人工作时,你要竭尽全力,确保你的付出和雇主给的薪水是匹配的。 但是,你的目标应该是为自己努力工作,而不是为了别人发家致富而努力工作。当你的目标是为自己努力工作,你就不会关心平衡,因为这就是你的生活的一部分, 因为这是你为了你自己而作出的选择。哪怕它是一项充满艰难困苦的工作,你都愿意为此做出牺牲。
如何确保你能掌控自己的生活?方法之一是确保你要先用自己的时间做自己的事情。
每天早上早起一小时,把这段时间奉献给自己。把每天的第一个小时,也是最富有朝气的一小时用在自己身上,花在自己的野心上。这一小时可以用来做自己的兼职项目,可以用来强身健体。我想这一小时甚至都可以用来玩电子游戏,如果玩电子游戏就是你想在你的生活里要做的事情。
当你以这种方式生活时,你就不会觉得自己的真实生活就是在被“抢劫“之后所剩无几的那几个小时。如果你需要更多的时间,那就投入更多的时间——早起两小时。如果有必要的话,凌晨4点就起床,把一天中最有效率的时间花在自己身上。
把照顾好自己放在首位。在你去关心他人之前,也就是在你付出之前,确保你能得到。这听起来很自私,但是事实上你只能给予别人你已经拥有的东西。
我们要对自己的生活负责,我们要为选择怎样度过自己的生活负有最终的责任。没有人会拿枪指着你的头,逼着你去做什么。我的意思是,没有人告诉你,你必须每天去工作,甚至说你必须要有一份工作。你选择去工作是因为你喜欢那份薪水。
你可能会说:“我无法每天都花两小时锻炼身体,我无法照顾好自己。”好吧。你不必这样做,但你要意识到这就是你正在做出的选择。你把其他事情的优先级置于“两小时锻炼”之上。在大多数情况下,这可能是一个很好的选择,但关键是你意识到这是一个选择。再强调一次,关键在于,这是你的选择。
尽量避免自欺欺人,告诉自己你别无选择,就好像你真的无法控制似的。你总是有选择的。生活中,要想得到你想要的,总是要有一定程度的牺牲。你愿意为此而付出多少代价?这是一个没有答案的问题。
在生活中,你试图维持的人际关系越多,你会感觉到自己拥有的时间越少,因为维持所有这些关系都需要时间和精力。所以,谨慎选择你的人际关系,不必把更多时间花费在无效社交上。
生活中有太多的人都和那些经常把我们打倒在地而不是让我们振作起来的人(有时甚至就是家人)保持亲密关系。生命太短暂,不值得浪费时间和这些人在一起。当然这并不意味着你必须要把他们完全排除在你的生活之外,但你总是可以把他们从朋友降为熟人。你越是能够大幅度提升你在非工作生活时间的利用质量,你就越能体会到没有必要去平衡工作/生活。
最后一条建议是:活在当下。我们中的许多人把我们的大部分思考都花在过去或者未来上,我们没有意识到生活就在当下,生活正在流逝。
经常听到周围有人这样说,“一旦我实现了这个目标,一旦孩子们都长大了,一旦我找到一份更好的工作,我就会......。”有些人一辈子都在等候开启他们的生活。生活不是彩排,你的生活就在当下。所以不要再拖延“过你自己的生活”了,现在就开始吧。
只有在你不再试图实现工作/生活平衡的时候,在你专注于尽可能充实你的生活的时候,你才能真正做到工作/生活平衡,而只有在你愿意花时间和精力去主动思考决定你想要过怎样的生活,并且在你采取必要的行动使之成为现实的时候,你才能做到这一点。
照顾好自己,谨慎挑选自己的人际关系,尽可能地活在当下,你就会发现,你的生活并不需要“平衡”,因为无论你做什么,你都会找到快乐和满足。
心智和身体 ¶
拿破仑·希尔说过,“如果你不征服自己,你就会被自己征服。” 圣雄甘地说过,“信念决定思想,思想决定言语,言语决定行为,行为决定习惯,习惯决定价值,价值决定命运。”
如果你不相信自己能够做到,你几乎做不成任何事情。
假设桌子上有一个物体,你想把这个物体移到另外一个地方。如果你不相信这是可行的,就不会尝试去做。但是,如果你相信这是可行的,并且相信自己能移动自己的手,拿起这个物体,把它从桌子上拿下来,那么你就能用大脑控制身体完成整套动作。
这里的“心智”是指你“身体”内非物质的部分。可以理解为一种精神,或者一种意识,有别于我们说的物理存在的身体,包括大脑。
心智影响身体,也是在说心智影响大脑。心智影响身体的直接例子是“安慰剂效应”。
我们的心智通过思考操纵身体,表现为各种活动,进而操纵宇宙。我们所思考的都有能力影响我们的现实世界。
那些想要改变自己信念、控制自己想法的人,通过积极的正念可以将其想要的变为现实。
不管这个机制是如何运转的,重要的是你要理解自己的所思所想影响并塑造了你现在的生活。
回忆一下你每天交往的人,是不是会观察到某种思维模式导致某种行为模式和结果? 你认识的成功人士,他们会对生活持有消极态度,对自己或别人缺乏信念和信心吗? 你认识的人里面是不是有人一直说自己是生活的受害者,但实际上他们的悲惨命运并不是因为任何外力的作用? 反省自己过去生活,你自己是不是经历过由于过度的担心、过度的恐慌而一些事情过于悲观?
如果你真的想为自己的生活定好方向并控制好它,那你就要学会如何利用内心的力量、思想的力量。
积极心态 ¶
有很多的乐观主义者,他们在表面上满怀期望和希望,但内心却怀着各种的负面想法和情绪。
许多人对积极思考的想法持拒绝态度,因为他们觉得,不切实际的乐观主义是毁灭性的。有不少人持有这样的反对意见,说“我很现实”。
积极思考与现实主义是不矛盾的。事实上,积极思考在应用层面上是现实主义的最终体现,因为它是一种信念,这种信念让你有力量改变现实,让你确信你不是环境的受害者。
积极思考问题的根源是这样一种信念——你比你所处的环境更伟大。这种信念让你总能先看到事物好的一面,因为无论身处何种环境,你都有能力改变自己的未来。随着时间的推移这些想法会由内向外地彻底改变你。
从现实角度看,积极思考就是选择从好的一面(而不是从坏的一面)去思考问题。你对生活中遇到的每一种状况都可以有自己的理解。这些状况本身并不存在“好”或者“坏”。是你自己来解释这些状况,所以是你决定它是“好”的还是“坏”的。 一个持有积极心态的人看到的好的一面往往比坏的一面要多,并不是因为这些状况客观上就是好的,而是因为他们认识到他们有选择的权利。
你应该也有这样的感受,你的工作态度会直接影响你的工作表现。当你保持一个积极的态度时你就更愿意去面对任何障碍,把挑战看成要克服的困难,而不是消极地认为是外界环境把你逼到了绝境,工作效率也会得到提高。
我们生活不就是想要快乐吗?如果是的话,为什么不去积极地看待问题呢?
只有积极的心态是不够的,你会在极度渴望一个积极心态的同时,又一味地谴责自己那暂时无法实现的远大抱负。
如果想改变自己的态度,你就必须改变自己的想法。如果想改变自己的想法,你就必须转变自己的思维模式。你的思维模式是由你的习惯决定的,因此我们可以追溯到改变你生活中处理任何关键事情所采用的主要方式:养成一个习惯。
养成积极思考的习惯和养成其他习惯一样,通过坚定地、持续不断地、有意识地重复做一件事情,直到由潜意识来掌握大局。
虽然我不是冥想主义者,但我接受经常冥想的人更容易体会到正面情绪的观点,可以冥想作为提高你积极思维能力的方法。现在许多公司推行的SIY(Search Insight Yourself)就是基于冥想的课程,通过积极心态来提高自身生产力。
劳逸结合也很重要,充分的休息放松后,更容易保持积极心态。
自我形象 ¶
安德鲁·卡内基(Andrew Carnegie)说过,“那些不能激励自己的人一定是甘于平庸的人,无论他们的其他才能有多么令人印象深刻。”
你真正要做的是从大脑开始,战胜平庸。你是如何看待自己的,这一点可以限制你的发展,也可以让你加速前进。
自我形象是在甩掉别人对你的看法,摆脱所有用来自我安慰的谎言和欺骗以后,你看到的自己的样子。
一个被认为不善于打乒乓球的人,他能变成一个熟练打乒乓球的人吗?很有可能他不会。除非他学着去改变他的自我形象,从而看到另外一面的自己,否则他永远都不可能成为一个熟练打乒乓球的人。他的大脑对他自己的认知有局限性,这将导致他遵从于他自己设定的自我形象。
很可能你也有过相似的局限性,可能你从来没有注意到而已。你可能把这种局限性看成是一成不变的、不可改变的事实。这就是生活的方式。 你觉得这是源于你懒惰吗?你与人难以相处吗?你不容易集中注意力吗?你很害羞或者很内向吗?
研究结果表明,你有改变自我形象的能力。“假装自己能成功”这个观点背后是说,如果你重复做一件事同时,假装你已经是自己想成为的那样的人,你最终将变成那样的人。 这个道理看似很简单。但是我们无法这么思考问题,有时候我们很难相信我们能改变自己的性格特征,因为我们确信本质上那是属于我们自己的一部分,即,把自己的弱点和局限性当作了自己重要的一部分。 比如,你可能注意到,穿短裤和拖鞋的你和西装革履的你,在行为举止上会有很大的不同。
如果你可以接受“我能改变那些自己坚守的关键信念”,那么你就能根据自己的喜好去改变你的自我形象。这个概念被称为“固定心态”与“成长心态”
固定心态(Fixed Mindset):拥有这种心态的人认为人的能力是固定不变的,他们往往急于证明自己的能力,逃避挑战,害怕失败,因为他们觉得失败意味着自己能力不行。
成长心态(Growth Mindset):这类人则相信能力是可以通过努力和学习不断发展提高的。他们欢迎挑战,把失败视为成长和学习的机会。
“固定心态”与“成长心态”的理论是由斯坦福大学心理学教授卡罗尔·德韦克(Carol Dweck)提出的。
例如,具有固定心态的学生可能会因为一次考试成绩不理想而备受打击,觉得自己不是学习的料;而具有成长心态的学生则会分析考试中的问题,积极改进,相信自己通过努力下次能取得更好的成绩。 在职场中,固定心态的人可能会因为担心做不好而拒绝新的任务,而成长心态的人会乐于尝试新挑战,从过程中提升自己。
设定一个你想成为的清晰形象,你的大脑有惊人的能力去寻找摆在它面前的任何目标,假以时日,持之以恒地正确执行,让每一天都充满正面的肯定,这样就能更加确认并加强你的新信念,你的大脑就能够带领你走向你需要走向的那条道路。
尝试一下下面的做法:
- 列出你的优点和缺点。不仅试着想想你是如何认知自己的,也试着想想别人又是如何认知你的。这份清单不一定完全正确,你的自我形象的很多方面被埋在了潜意识的深处,但这样做会是一个很好的起点。
- 你觉得这份清单上有哪些方面是无法改变的?为什么?想想这些方面是永久性的,还是只是因为你的信念给你自己带来了局限。
- 尝试至少改变自我形象的一个负面的方面。试着用这个“假装自己能成功”的方法和正面的肯定来强化自己的新信念。
锲而不舍 ¶
《荀子·劝学》说,“锲而不舍,金石可镂。”
在生活中,也许你能学会让你更成功的所有技能,但是如果你缺少持之以恒这个重要的技能,一切都将是毫无意义的,因为生活中我们会面对很多麻烦而导致你放弃。
你的专业知识可能不足,你可能缺乏社交技能和金融知识,但是只要你能坚持到底,你最终会找到自己的出路。
畏惧失败似乎是大多数人的本能。人都喜欢做自己擅长的事情,逃避做那些自己不能胜任的或是缺乏技能的事情。在大多成年人身上这种现象会被放大。
我们一般倾向于认为,失败是一件不好的事情。我们好像看不到失败的阴影中暗含着一线曙光,我们只把失败看作终点。失败这个词本身暗示着死胡同、绝望的终点,而不是通往成功之路上的一个暂时壁垒。
我们往往太过较真,把失败看得太重。因为我们接受过把失败看作通往成功道路的训练,很多情况下这也是唯一的一条道路,所以我们会不惜任何代价地避免失败。
你可以尝试避免犯错,但是不要因为害怕伤害自尊而以付出错失良机为代价。一旦你意识到失败是好事,失败并不能定义你的价值而你对待失败的态度恰恰才能说明你的价值,你才会真正学会对失败无所畏惧。
要实现不畏惧失败,第一步就是真正意识到失败不是终点,除非你自己坚信它就是终点。如果你玩过很难通关的电子游戏,那你就能体会到通关路上的艰辛和通关后的喜悦。假设一下,如果你在游戏中的第一次失败后就放弃了,会是怎样的结果?
某种程度上,从很多次失败中获得的经验反而让你最终获得了成功的体验,这会令你乐在其中。所以,你没有理由把失败当作一种永恒的状态而逃避生活中的失败没有理由指望一生不经历失败。
“塞翁失马,焉知非福。”
我们从学生时代开始,学到的都是用负面的视角去看待失败。比如考试成绩从90分变成80分,这会被看为退步。 鲜有人引导我们要把这个失败看作能让我们离自己的目标越来越近的学习经验。 在现实生活中失败通常是必要的里程碑,它能带领我们离成功越来越近。
在任何特定的情况下,如果我放弃,我只会失败,但不管结果如何,只有两种选择。第一,我会成功,这显然很棒。但是,第二,我会得到一个提升和学习的机会。我对其中任何一个都能接纳,所以从这个意义上说,要么赢,要么学。没有失败这个选项。
走出舒适区 ¶
如果你真的想在生活中取得长足进步,你就一定要学着克服我们大多数人都会有的一种恐惧:看起来像个傻瓜。你需要学会不在乎别人怎么想,你需要学会如何无惧自己被别人看作傻瓜。因为,就算被人当成傻瓜又如何?
如果你想成功,你必须要学会收起自己脆弱的自尊心,勇敢走出去,别害怕让自己出丑。
迈克尔·乔丹是这样说他自己的,“在我的职业生涯中,我一共错失了9000多次投篮,输掉了近300场比赛。有26次,我错失掉一投绝杀的机会。我失败了一次又一次。这就是我能够成功的原因。”
斯多葛哲学 ¶
斯多葛哲学是古希腊的一个重要哲学流派。
斯多葛派强调理性的重要性,主张人们应当用理性来控制情感和欲望,追求内心的平静和安宁。他们认为世界是由理性统治的,人们应该顺应自然和命运,接受生活中不可改变的事情,同时通过自我修养和道德实践来提升自己。
在斯多葛哲学中,美德被视为最高的追求,包括智慧、勇敢、节制和正义等。它对后来的哲学、伦理学以及人们的生活态度都产生了深远的影响。
斯多葛哲学的核心在于试图定义在你存在于这个星球上时,怎样才能让你的价值最大化,并且不浪费你的生命去关注那些你无法掌控的事情,最大限度地提高你对你可以掌控的东西的掌控能力。
斯多葛哲学的本质是基于这样一种理念:我们应该努力使我们成为最好的自己,我们需要恪守这样的生活方式。这个概念被称为幸福(eudaimonia)。
斯多葛主义的核心思想是超脱。 塞涅卡是斯多葛学派的代表人物之一。他说过这样一段话,“请记住,我们所拥有的只是“借来的”财富,它可以在没有我们许可的情况下,甚至不提前通知我们的情况下,悄然离去。因此,我们应该爱我们所有的亲人,但始终要牢记,我们没有承诺永远守着他们。是的,我们甚至无法承诺可以长期守护他们。”
在佛教经典《金刚经》中,有“一切有为法,如梦幻泡影,如露亦如电,应作如是观”的描述,表达了世事无常、人生短暂的观点。这与塞涅卡所说的财富和亲人都是“借来的”,可能会在没有预兆的情况下失去的观点有一定的相似之处。
此外,佛教中的无常观念还强调了一切事物都是在不断变化和流转的,没有永恒不变的实体。这种无常的观念提醒人们要珍惜当下,不要执着于物质和外在的事物,而是要关注内心的平静和解脱。和塞涅卡的观点有一些相似。
马可·奥勒留在他的《沉思录》如是说,“选择不受伤害,你就感受不到伤害。感受不到伤害,也就没有受过伤害。” 这其实是一种心境,比如,面对交通拥堵时坦然接受,可以听听音乐或者有声书,就不会出现“路怒症”。
学会接受,便不再有担心,就能掌控自己不被自己情绪所左右。