不会飞的章鱼

熟能生巧,勤能补拙;念念不忘,必有回响。

职场求生攻略

本文笔记源自专栏《职场求生攻略》

职业素养篇

优先级

优先级为什么重要

  • 手忙脚乱,工作不得法,往往是因为优先级没安排好;
  • 时间和精力有限;
  • 事情等不起;
  • 对事情的质量要求不同。

基于工作性质安排优先级

  • 公司发展计划相关
  • 安全相关
  • 生产相关

基于合作安排优先级

  • 日常工作的优先级要由经理确定
  • 经理安排的临时的急事
  • 需要别人配合的事
  • 阻塞别人的工作的事

做事情本身的优先级

  • 先沟通,后做事
  • 先外后内
  • 随时沟通

邮件

邮件的特性

  • 异步交流
  • 无法修改
  • 方便扩散

邮件是公司内部的合同

  • 邮件的确认功能
  • 邮件的证据链功能
  • 邮件的沟通协调功能
  • 邮件的防遗忘功能
  • 邮件的广而告之功能

邮件的魅力

  • 化语言,为责任
  • 化责任,为动力

邮件的小技巧

  • 记得定期查看邮件
  • 发送邮件的小技巧:看清收件人,再决定说什么;学会抄送老板;用好邮件组;多检查一下标题和收件人
  • 写会议纪要

爱上交流

为什么程序员普遍不喜欢交流

  • 工作被打断严重影响效率
  • 交流不能直接帮程序员完成工作

爱上的第一步:正视和人交流

  • 程序员需要信息的输入
  • 程序员需要输出自己的观点和成绩
  • 看到交流的好处,养成主动交流的好习惯

程序员交流的技巧

  • 换位思考,注意受众
  • 交流要带有足够的信息
  • 先说重点和结论

发挥主观能动性

为什么要发挥主观能动性

  • 软件研发的复杂性,导致没有标准可以参考,也导致很多事情无法在设计之初预见
  • 现代软件研发快速迭代,导致需求和需要应对的问题也在变化,程序员不能固守之前的设计
  • 做完不等于做好,能用不等于好用

如何发挥主观能动性

  • 交付思维:站在用户的角度,交付真正解决用户问题的软件系统
  • 注意时间:完成好过完没

对程序员的职责

对自己的基本能力负责

  • 持续精进技术能力
  • 熟悉公司的内部系统

对安排的工作负责

  • 尽自己的努力完成工作
  • 发现自己无法完成工作时,尽早告诉经理

对工作时间负责

  • 解决问题时要在线
  • 准时参加会议

职业选择篇

选择公司考虑的角度

企业文化和价值观

  • 文化和价值观不是虚头巴脑的东西
  • 如何选择适合自己的企业文化和价值观

行业势头

  • 下降期的行业
  • 黄金发展期的行业
  • 风口期的行业

工资待遇

  • 基本工资最受法律保护
  • 奖金
  • 股票
  • 福利

公司规模

  • 行业头部大公司

人才水平

  • 决定了公司对人才的态度
  • 决定了公司内部合作与管理的风格

“跟对人”的表现

认同彼此的价值观和人格

  • 价值观和性格会被经理影响
  • 有担当
  • 优秀、真诚、公平

定期和你交流

  • 和你有一对一的会议
  • 表扬做的优秀的地方
  • 指出做的不好的地方,并通过沟通,给出改进的方案
  • 给出让你发展到下一阶段的建议
  • 没有一对一会议该怎么办?

可以互相讨论甚至争论

  • 发挥主观能动性的前提
  • 能够得到更好、更完整的结论

资源和利益的分配

  • 给手下人新的机会
  • 给手下人发展的时间
  • 争取利益,并能公平分配

跟对人为什么更重要

奇葩的经历是存在的

  • 贬低控制型
  • 技术压制型
  • 极致压榨型
  • 性格缺陷型

别对公司抱有太多的幻想

  • 程序员被替代的代价并没有那么高
  • 如何做事是经理权限之内的事情
  • 公司不能传达按劳分配的信息
  • 惩罚经理对公司的损失大
  • 邮件的“广而告之”功能

跟对人,才能做对事

  • 跟错人,观念不合,做事阻力大
  • 跟错人,事情做成了,利益也不会分配到这里
  • 程序员是无法无视自己的经历的

跳槽前的checklist

为什么想跳槽

心态

  • 是自己的问题,还是外部的问题
  • 换公司无法解决自身的问题

主动求变

  • 新行业,新方向
  • 自己的兴趣

薪资待遇

  • 不要让薪资待遇成为你跳槽的唯一原因
  • 稳定+合理

为什么不应该跳槽

  • 公司不愿意聘用和培养频繁跳槽的人
  • 长期来看,在一个公司的积累和成长最值钱
  • 内部转岗

准备简历和面试

面试的逻辑:与面试官合作,展示自己的优势和优秀之处

写简历

精简工作经历

  • 解决的问题
  • 自己的成长
  • 两页以内

经历倒叙

突出重点,强调自己的优势

排版工整

准备面试

针对公司面试风格,提前做准备

应届生

  • CS基础
  • 刷算法与数据结构题目

工作1-2年

  • 为什么换工作
  • 刷算法与数据结构题目

工作经历丰富

  • 弄清自己的优势
  • 突出工作成果
  • 梳理自己的技术,准备面试
  • 建议内推

面试中需要注意什么

  • 不要勉强
  • 注意反馈,交流通畅,表达清晰
  • 不推荐靠面经面试
  • 准时到,不要和面试官较劲

关于面试的世纪疑问

为什么我感觉面试官就是在刁难我?

为什么面试中问到的问题比实际工作中用到的要难?

学历重要吗?

软件外包

什么是软件外包:大部分软件外包公司是帮甲方做“体力活”

外包有哪些局限性?

  • 难以获得完整地解决问题的能力
  • 外包公司不注重人才的技术成长,涨薪受限
  • 外包公司没有探索的环境
  • 可替代性强,可能无法完整参与一个项目

什么情况下可以考虑外包?

  • 通过外包快速积累经验
  • 希望进入一个新的行业
  • 为了眼前的苟且

软件外派

外派与外包的不同

  • 外派在甲方工作,外包则在自己公司工作
  • 外派是要和甲方公司签订派遣协议的
  • 外派做的事情更贴近甲方公司员工自己做的事情,外包则是做甲方公司不做的事情

外派做的是甲方来不及做的事情,或是低技术含量的东西

外派的不足

  • 工作于此,却不属于此
  • 没有机会独立承担任务
  • 不稳定,终止派遣合同的代价远比终止劳动合同要低得多
  • 发展受限,不会有被甲方培养的机会

外派的优点

  • 增长见识
  • 和外包比,可以较早参与新项目
  • 证明自己的能力,赢得更多的机会
  • 现金收入较高

程序员转管理

转管理后的不同:管理岗要通过让手下创造更多的价值,来实现自己的价值

一线经理要做什么

对内

  • 从IC视角转向管理视角,发挥团队的最大战斗力
  • 管理绩效,合理激励

对外

  • 组织协调各种资源
  • 计划和安排,争取资源
  • 进行各种交流,做出承诺和决策

对未来

  • 理解公司的发展方向
  • 培养人才,发展团队
  • 获取课后,赢得认可

什么样的人适合转管理

  • 喜欢和人打交道
  • 会经营、有眼光、有干劲
  • 能够承受压力
  • 有远大抱负

转不转管理呢?

  • 管理的临界级别确实比个人岗要高1~2个级别
  • 无论是不是转管理,临界级别在那里,成长都是有瓶颈的
  • 程序员要有专攻的方向,比如业务,比如架构
  • 无论是否转管理,越成长,越需要交流,获取信息,整合信息

加入创业公司

认清创业公司

  • 做项目变现的公司“不是”
  • 小公司“不一定是”
  • 创造新事物的公司才“是”

加入创业公司,需要权衡哪些事情?

  • 提前算好收支这笔账
  • 选择公司就是选择团队
  • 认可创始人
  • 亲兄弟,明算账
  • 准备好强大的精神和肉体
  • 能持续跟得上公司的发展

创业VS普通工作

  • 创业是Hell难度,工作的Normal难度
  • 其实创业是一种心态,在普通工作中,如果用创业的心态工作,依然可以收获更多的回报
  • 创业即使失败,也可以帮助认清自己,收获一段难忘的回忆

职场情商篇

升职

升职的逻辑

  • 先达到下个级别的能力,公司才回考虑升职
  • 稳定输出工作成果,而不是时而做得好,时而做得不行
  • 技术上不仅要绝活,更要能全面掌握工作需要的技术
  • 资历是升值必须考虑的因素,也是对老员工各种积累和软能力的认可

程序员的三个阶段

  • 写出好代码不再是问题
  • 稳稳的搞定一个系统,清楚系统的方方面面,各种细节,系统的能力的边界等
  • 了解系统所解决的问题领域,可以让系统发展的一个更高的层面

升职的经理视角

  • 符合升值逻辑
  • 和经理彼此不对付的人,大概率不会得到升职
  • 离职可能性高的人,升职的概率会低

职场政治

为什么一定会有职场政治

  • 人少总是小而美,利益分配很简单
  • 人多就会有“江湖”,职场政治就是帮忙搞定职场利益分配的

一般公司里的那些职场政治

  • 改组:必须要打破老的利益格局,发展才能有突破
  • 合作要考虑利益,要互惠互利,不要轻易动对方的蛋糕

程序员应该做什么

  • 尊重职场政治
  • 懂得组织的利益所在

自上而下的技术更新

自上而下所推动的技术更新,肯定是伴随利益变动的

业界那些技术驱动型更新

  • 亚马逊的SOA:能成为云计算老大的基础之一
  • 阿里巴巴公司的去IOE:用自己的核心技术,支撑起电商帝国
  • 京东从.Net平台换到Java平台:公司不同发展阶段的需要
  • 上云计算:解开了各个公司业务被计算资源的束缚

程序员如何应对

  • 了解变化的原因和目的,变化都是取舍的艺术
  • 看清和自己相关技术的发展和趋势,做好应对准备
  • 必须积极应对:或全力以赴的履行自己的职责,或明哲保身换个地方

向同事请教问题

顺畅沟通的内核:尊重

输出式沟通

  • 尊重被输出人的自主意愿
  • 不要打断别人解决问题的过程
  • 是在帮助别人,而不是在显摆自己

请教式沟通

  • 没人有义务帮你,所以请尊重别人的时间和精力
  • 自己能搞定的问题不要麻烦别人
  • 探索式的问题更受人欢迎

请教式沟通小技巧

  • 不要问相同的问题
  • 请教后积极总结归纳,如果收获很多,可以总结出文档
  • 需要大量帮助时,可以向经理申请专门的人帮助自己

向上沟通

  • 先准备好数据,要言之有物
  • 汇报工作时,先说成果和问题
  • 申请资源时,要给出详尽的数据和前因后果
  • 请求帮忙做决策时,要带着解决方案来,不要只带着问题来

技术成长篇

技术舒适区

程序员的技术舒适区,就是自己的技术领地

为什么程序员必须一直学习

  • 技术要么发展,要么被淘汰
  • 学到手的技术会一直贬值,不学习,自己就跟着技术一起贬值

技术骨架的构成

  • 核心架构设计:这个技术有哪些核心的架构设计
  • 功能模型:这个技术有哪些功能,功能的接口是什么
  • 状态模型:系统在运行时有哪些状态,状态之间的变化原因是什么
  • 数据模型:这个技术是怎么组织数据的,是怎么处理数据的
  • 线程模型:这个技术有哪些线程,分别是做什么的

程序员的舒适状态

  • 在工作中寻找能提供正反馈的学习目标,工作中有想当比例的时间在学习
  • 关注行业发展,了解新技术的基本情况,但是不主动出击去深入学习用不到的技术
  • 没事不找事,遇事不怕事,工作中遇到任何技术问题,都抽时间搞定它
  • 深入学习新技术时,搭建技术骨架,用新知识点缀自己的技术骨架

技术观

软件工程师是要用技术把事情做成

吃透技术

  • 熟练使用
  • 精准掌控
  • 知根知底

需求至上

  • 技术的目的是满足需求
  • 技术的价值是支撑业务
  • 技术要解决用户的问题,而不是证明技术本身更高明

错误的技术观点

技术不扎实,不思进取

  • 我们都是从小白做起
  • 积极主动学习,补齐短板

技术洁癖,满眼问题

  • 每个项目都有各种不尽如人意的外部条件
  • 软件工程师存在的价值,面对这些问题,继续把项目向最好的方向推进
  • 先证明自己的能力和价值,再提更多的条件

使用不必要的技术手段

  • 技术存在的目的是解决问题,其余都不重要
  • 拿公司试验场:学了新技术,内心很骚动,不用不爽
  • 故步自封的遗老遗少:无视技术的创新和发展

软件系统架构师

软件架构师就是构造一个世界,让业务可以在这个世界里运转

软件系统架构师做什么

  • 理解要解决的问题
  • 摸清解决问题能使用的资源
  • 定义解决问题的模型
  • 给出模型各个模块的详细设计

如何一步步成为架构师

  • 每个程序员都或多或少在做架构师的事情
  • 务实技术实力
  • 注重自己架构能力的培养
  • 主动学习架构,注重自己架构师能力的培养
  • 保持开放的心态,不能固守己见

架构师的核心能力

  • 来自实践和技术的积累
  • 对行业和技术的产生有自己的理解,形成自己的视界

系统集成

系统集成为什么最难

  • 实际情况可能没有预料到,也可能发生了变化
  • 系统集成既意味着有交互,所有没落实的细节问题都会在这里暴露出来
  • 系统集成是要产出结果,要得到别人的认可

软件系统集成的常见问题

  • 内部子模块之间架构不统一
  • 对外部系统的假设不成立
  • 外部系统配置问题
  • 用户输入数据问题
  • 外部系统传输的数据问题

软件系统集成的应对方法

  • 架构要统一
  • 不做假设,尽早验证外部依赖
  • 做系统集成的边界,充分的记录log

加餐

沟通中的冲突

处理冲突的双方要对等

  • 自己说了不算的事情,不要作出承诺
  • 很多和利益相关的冲突,我们程序员只是打辅助,不需要主动参与

程序员应该如何应对冲突

  • 找到大家的共识
  • 以共识为基础,把事情向前推进
  • 做事情的方式方法可以妥协
  • 目标必须坚持

程序员工作中的那些共识

  • 代码偏好:findbugs等行业标准
  • 接口设计:接口设计应该包含
  • 系统架构:大家对问题的理解要统一
  • 新功能:理解新需求、升级架构、以支持新功能

冲突的价值

  • 相互切磋,不打不相识
  • 逼迫自己深入思考自己的观点
  • 磨合团队,达成默契

程序员一定不要逃避冲突,逃避冲突只能让问题对自己来说更麻烦

如何应对加班

任务太多

  • 分析是否当前的效率低下
  • 提升效率:升级系统,开发自动化工具
  • 不要习惯低效率工作,要发挥自己的才能

出现了紧急的事情

  • 避免线上问题:增强监控,规范上线流程
  • 紧急的项目:如果收获可观,可以考虑阶段性的付出时间

公司强制加班

  • 学习和探索新技术
  • 修复大家都在抱怨的小痛点
  • 去遗留系统里淘金,理解系统处理的业务
  • 准备好为系统升级

加班的时间,也是我们自己的时间,要利用加班的时间做能提升自己的事情,不要浪费自己的时间。

程序员怎么越干越努力

如何应对焦虑感

  • 习惯焦虑,让焦虑感督促自己持续学习和进步
  • 找到适合自己的发展道路

前期职业?后期职业?

  • 任何职业的从业者都很多,而能脱颖而出的都是少数
  • 任何职业,都需要努力,选择不能代替努力

软件行业确实不一样

  • 新兴行业,缺人不缺钱
  • 软件公司危机感
  • 程序员必须有创新的精神,有斗志,不安于现状

不同类型的职业

  • 技术简单,产出明确,工作流程可以规范化
  • 产出成果的过程复杂,人才无法批量培养,需要经验积累和发挥自己的主观能动性

程序员如何应对

  • 持续学习技术
  • 持续思考业务
  • 吃掉更多的资源,积累自己的经验

数据

做系统,数据比软件更重要

  • 数据是软件系统的根本,就好像经济活动里的钱和账,抓住数据就能看清根本
  • 数据升级和迁移,相比软件升级要难的多,风险也大的多,对于系统的数据架构设计,值得多花点心思
  • 数据被删了,会损失惨重,程序代码被删了,只要不造成数据问题,基本没什么长期影响
  • 数据是新时代的“土地”,什么都要靠它,而且很难买到,自己积累则要费力更费时

与人沟通,没数据,莫开口

  • 先说数据,再说自己的分析,没有数据支撑,大家很难达成共识或得出结论
  • 注明使用数据的出处,方便你从数据源验证更多的数据
  • 如果有可能,交叉验证,从不同的角度获取相同意义的数据进行比对和验证
------ 本文结束------
如果本篇文章对你有帮助,可以给作者加个鸡腿~(*^__^*),感谢鼓励与支持!