本文笔记源自专栏《职场求生攻略》
职业素养篇
优先级
优先级为什么重要
- 手忙脚乱,工作不得法,往往是因为优先级没安排好;
- 时间和精力有限;
- 事情等不起;
- 对事情的质量要求不同。
基于工作性质安排优先级
- 公司发展计划相关
- 安全相关
- 生产相关
基于合作安排优先级
- 日常工作的优先级要由经理确定
- 经理安排的临时的急事
- 需要别人配合的事
- 阻塞别人的工作的事
做事情本身的优先级
- 先沟通,后做事
- 先外后内
- 随时沟通
邮件
邮件的特性
- 异步交流
- 无法修改
- 方便扩散
邮件是公司内部的合同
- 邮件的确认功能
- 邮件的证据链功能
- 邮件的沟通协调功能
- 邮件的防遗忘功能
- 邮件的广而告之功能
邮件的魅力
- 化语言,为责任
- 化责任,为动力
邮件的小技巧
- 记得定期查看邮件
- 发送邮件的小技巧:看清收件人,再决定说什么;学会抄送老板;用好邮件组;多检查一下标题和收件人
- 写会议纪要
爱上交流
为什么程序员普遍不喜欢交流
- 工作被打断严重影响效率
- 交流不能直接帮程序员完成工作
爱上的第一步:正视和人交流
- 程序员需要信息的输入
- 程序员需要输出自己的观点和成绩
- 看到交流的好处,养成主动交流的好习惯
程序员交流的技巧
- 换位思考,注意受众
- 交流要带有足够的信息
- 先说重点和结论
发挥主观能动性
为什么要发挥主观能动性
- 软件研发的复杂性,导致没有标准可以参考,也导致很多事情无法在设计之初预见
- 现代软件研发快速迭代,导致需求和需要应对的问题也在变化,程序员不能固守之前的设计
- 做完不等于做好,能用不等于好用
如何发挥主观能动性
- 交付思维:站在用户的角度,交付真正解决用户问题的软件系统
- 注意时间:完成好过完没
对程序员的职责
对自己的基本能力负责
- 持续精进技术能力
- 熟悉公司的内部系统
对安排的工作负责
- 尽自己的努力完成工作
- 发现自己无法完成工作时,尽早告诉经理
对工作时间负责
- 解决问题时要在线
- 准时参加会议
职业选择篇
选择公司考虑的角度
企业文化和价值观
- 文化和价值观不是虚头巴脑的东西
- 如何选择适合自己的企业文化和价值观
行业势头
- 下降期的行业
- 黄金发展期的行业
- 风口期的行业
工资待遇
- 基本工资最受法律保护
- 奖金
- 股票
- 福利
公司规模
- 行业头部大公司
人才水平
- 决定了公司对人才的态度
- 决定了公司内部合作与管理的风格
“跟对人”的表现
认同彼此的价值观和人格
- 价值观和性格会被经理影响
- 有担当
- 优秀、真诚、公平
定期和你交流
- 和你有一对一的会议
- 表扬做的优秀的地方
- 指出做的不好的地方,并通过沟通,给出改进的方案
- 给出让你发展到下一阶段的建议
- 没有一对一会议该怎么办?
可以互相讨论甚至争论
- 发挥主观能动性的前提
- 能够得到更好、更完整的结论
资源和利益的分配
- 给手下人新的机会
- 给手下人发展的时间
- 争取利益,并能公平分配
跟对人为什么更重要
奇葩的经历是存在的
- 贬低控制型
- 技术压制型
- 极致压榨型
- 性格缺陷型
别对公司抱有太多的幻想
- 程序员被替代的代价并没有那么高
- 如何做事是经理权限之内的事情
- 公司不能传达按劳分配的信息
- 惩罚经理对公司的损失大
- 邮件的“广而告之”功能
跟对人,才能做对事
- 跟错人,观念不合,做事阻力大
- 跟错人,事情做成了,利益也不会分配到这里
- 程序员是无法无视自己的经历的
跳槽前的checklist
为什么想跳槽
心态
- 是自己的问题,还是外部的问题
- 换公司无法解决自身的问题
主动求变
- 新行业,新方向
- 自己的兴趣
薪资待遇
- 不要让薪资待遇成为你跳槽的唯一原因
- 稳定+合理
为什么不应该跳槽
- 公司不愿意聘用和培养频繁跳槽的人
- 长期来看,在一个公司的积累和成长最值钱
- 内部转岗
准备简历和面试
面试的逻辑:与面试官合作,展示自己的优势和优秀之处
写简历
精简工作经历
- 解决的问题
- 自己的成长
- 两页以内
经历倒叙
突出重点,强调自己的优势
排版工整
准备面试
针对公司面试风格,提前做准备
应届生
- CS基础
- 刷算法与数据结构题目
工作1-2年
- 为什么换工作
- 刷算法与数据结构题目
工作经历丰富
- 弄清自己的优势
- 突出工作成果
- 梳理自己的技术,准备面试
- 建议内推
面试中需要注意什么
- 不要勉强
- 注意反馈,交流通畅,表达清晰
- 不推荐靠面经面试
- 准时到,不要和面试官较劲
关于面试的世纪疑问
为什么我感觉面试官就是在刁难我?
为什么面试中问到的问题比实际工作中用到的要难?
学历重要吗?
软件外包
什么是软件外包:大部分软件外包公司是帮甲方做“体力活”
外包有哪些局限性?
- 难以获得完整地解决问题的能力
- 外包公司不注重人才的技术成长,涨薪受限
- 外包公司没有探索的环境
- 可替代性强,可能无法完整参与一个项目
什么情况下可以考虑外包?
- 通过外包快速积累经验
- 希望进入一个新的行业
- 为了眼前的苟且
软件外派
外派与外包的不同
- 外派在甲方工作,外包则在自己公司工作
- 外派是要和甲方公司签订派遣协议的
- 外派做的事情更贴近甲方公司员工自己做的事情,外包则是做甲方公司不做的事情
外派做的是甲方来不及做的事情,或是低技术含量的东西
外派的不足
- 工作于此,却不属于此
- 没有机会独立承担任务
- 不稳定,终止派遣合同的代价远比终止劳动合同要低得多
- 发展受限,不会有被甲方培养的机会
外派的优点
- 增长见识
- 和外包比,可以较早参与新项目
- 证明自己的能力,赢得更多的机会
- 现金收入较高
程序员转管理
转管理后的不同:管理岗要通过让手下创造更多的价值,来实现自己的价值
一线经理要做什么
对内
- 从IC视角转向管理视角,发挥团队的最大战斗力
- 管理绩效,合理激励
对外
- 组织协调各种资源
- 计划和安排,争取资源
- 进行各种交流,做出承诺和决策
对未来
- 理解公司的发展方向
- 培养人才,发展团队
- 获取课后,赢得认可
什么样的人适合转管理
- 喜欢和人打交道
- 会经营、有眼光、有干劲
- 能够承受压力
- 有远大抱负
转不转管理呢?
- 管理的临界级别确实比个人岗要高1~2个级别
- 无论是不是转管理,临界级别在那里,成长都是有瓶颈的
- 程序员要有专攻的方向,比如业务,比如架构
- 无论是否转管理,越成长,越需要交流,获取信息,整合信息
加入创业公司
认清创业公司
- 做项目变现的公司“不是”
- 小公司“不一定是”
- 创造新事物的公司才“是”
加入创业公司,需要权衡哪些事情?
- 提前算好收支这笔账
- 选择公司就是选择团队
- 认可创始人
- 亲兄弟,明算账
- 准备好强大的精神和肉体
- 能持续跟得上公司的发展
创业VS普通工作
- 创业是Hell难度,工作的Normal难度
- 其实创业是一种心态,在普通工作中,如果用创业的心态工作,依然可以收获更多的回报
- 创业即使失败,也可以帮助认清自己,收获一段难忘的回忆
职场情商篇
升职
升职的逻辑
- 先达到下个级别的能力,公司才回考虑升职
- 稳定输出工作成果,而不是时而做得好,时而做得不行
- 技术上不仅要绝活,更要能全面掌握工作需要的技术
- 资历是升值必须考虑的因素,也是对老员工各种积累和软能力的认可
程序员的三个阶段
- 写出好代码不再是问题
- 稳稳的搞定一个系统,清楚系统的方方面面,各种细节,系统的能力的边界等
- 了解系统所解决的问题领域,可以让系统发展的一个更高的层面
升职的经理视角
- 符合升值逻辑
- 和经理彼此不对付的人,大概率不会得到升职
- 离职可能性高的人,升职的概率会低
职场政治
为什么一定会有职场政治
- 人少总是小而美,利益分配很简单
- 人多就会有“江湖”,职场政治就是帮忙搞定职场利益分配的
一般公司里的那些职场政治
- 改组:必须要打破老的利益格局,发展才能有突破
- 合作要考虑利益,要互惠互利,不要轻易动对方的蛋糕
程序员应该做什么
- 尊重职场政治
- 懂得组织的利益所在
自上而下的技术更新
自上而下所推动的技术更新,肯定是伴随利益变动的
业界那些技术驱动型更新
- 亚马逊的SOA:能成为云计算老大的基础之一
- 阿里巴巴公司的去IOE:用自己的核心技术,支撑起电商帝国
- 京东从.Net平台换到Java平台:公司不同发展阶段的需要
- 上云计算:解开了各个公司业务被计算资源的束缚
程序员如何应对
- 了解变化的原因和目的,变化都是取舍的艺术
- 看清和自己相关技术的发展和趋势,做好应对准备
- 必须积极应对:或全力以赴的履行自己的职责,或明哲保身换个地方
向同事请教问题
顺畅沟通的内核:尊重
输出式沟通
- 尊重被输出人的自主意愿
- 不要打断别人解决问题的过程
- 是在帮助别人,而不是在显摆自己
请教式沟通
- 没人有义务帮你,所以请尊重别人的时间和精力
- 自己能搞定的问题不要麻烦别人
- 探索式的问题更受人欢迎
请教式沟通小技巧
- 不要问相同的问题
- 请教后积极总结归纳,如果收获很多,可以总结出文档
- 需要大量帮助时,可以向经理申请专门的人帮助自己
向上沟通
- 先准备好数据,要言之有物
- 汇报工作时,先说成果和问题
- 申请资源时,要给出详尽的数据和前因后果
- 请求帮忙做决策时,要带着解决方案来,不要只带着问题来
技术成长篇
技术舒适区
程序员的技术舒适区,就是自己的技术领地
为什么程序员必须一直学习
- 技术要么发展,要么被淘汰
- 学到手的技术会一直贬值,不学习,自己就跟着技术一起贬值
技术骨架的构成
- 核心架构设计:这个技术有哪些核心的架构设计
- 功能模型:这个技术有哪些功能,功能的接口是什么
- 状态模型:系统在运行时有哪些状态,状态之间的变化原因是什么
- 数据模型:这个技术是怎么组织数据的,是怎么处理数据的
- 线程模型:这个技术有哪些线程,分别是做什么的
程序员的舒适状态
- 在工作中寻找能提供正反馈的学习目标,工作中有想当比例的时间在学习
- 关注行业发展,了解新技术的基本情况,但是不主动出击去深入学习用不到的技术
- 没事不找事,遇事不怕事,工作中遇到任何技术问题,都抽时间搞定它
- 深入学习新技术时,搭建技术骨架,用新知识点缀自己的技术骨架
技术观
软件工程师是要用技术把事情做成
吃透技术
- 熟练使用
- 精准掌控
- 知根知底
需求至上
- 技术的目的是满足需求
- 技术的价值是支撑业务
- 技术要解决用户的问题,而不是证明技术本身更高明
错误的技术观点
技术不扎实,不思进取
- 我们都是从小白做起
- 积极主动学习,补齐短板
技术洁癖,满眼问题
- 每个项目都有各种不尽如人意的外部条件
- 软件工程师存在的价值,面对这些问题,继续把项目向最好的方向推进
- 先证明自己的能力和价值,再提更多的条件
使用不必要的技术手段
- 技术存在的目的是解决问题,其余都不重要
- 拿公司试验场:学了新技术,内心很骚动,不用不爽
- 故步自封的遗老遗少:无视技术的创新和发展
软件系统架构师
软件架构师就是构造一个世界,让业务可以在这个世界里运转
软件系统架构师做什么
- 理解要解决的问题
- 摸清解决问题能使用的资源
- 定义解决问题的模型
- 给出模型各个模块的详细设计
如何一步步成为架构师
- 每个程序员都或多或少在做架构师的事情
- 务实技术实力
- 注重自己架构能力的培养
- 主动学习架构,注重自己架构师能力的培养
- 保持开放的心态,不能固守己见
架构师的核心能力
- 来自实践和技术的积累
- 对行业和技术的产生有自己的理解,形成自己的视界
系统集成
系统集成为什么最难
- 实际情况可能没有预料到,也可能发生了变化
- 系统集成既意味着有交互,所有没落实的细节问题都会在这里暴露出来
- 系统集成是要产出结果,要得到别人的认可
软件系统集成的常见问题
- 内部子模块之间架构不统一
- 对外部系统的假设不成立
- 外部系统配置问题
- 用户输入数据问题
- 外部系统传输的数据问题
软件系统集成的应对方法
- 架构要统一
- 不做假设,尽早验证外部依赖
- 做系统集成的边界,充分的记录log
加餐
沟通中的冲突
处理冲突的双方要对等
- 自己说了不算的事情,不要作出承诺
- 很多和利益相关的冲突,我们程序员只是打辅助,不需要主动参与
程序员应该如何应对冲突
- 找到大家的共识
- 以共识为基础,把事情向前推进
- 做事情的方式方法可以妥协
- 目标必须坚持
程序员工作中的那些共识
- 代码偏好:findbugs等行业标准
- 接口设计:接口设计应该包含
- 系统架构:大家对问题的理解要统一
- 新功能:理解新需求、升级架构、以支持新功能
冲突的价值
- 相互切磋,不打不相识
- 逼迫自己深入思考自己的观点
- 磨合团队,达成默契
程序员一定不要逃避冲突,逃避冲突只能让问题对自己来说更麻烦
如何应对加班
任务太多
- 分析是否当前的效率低下
- 提升效率:升级系统,开发自动化工具
- 不要习惯低效率工作,要发挥自己的才能
出现了紧急的事情
- 避免线上问题:增强监控,规范上线流程
- 紧急的项目:如果收获可观,可以考虑阶段性的付出时间
公司强制加班
- 学习和探索新技术
- 修复大家都在抱怨的小痛点
- 去遗留系统里淘金,理解系统处理的业务
- 准备好为系统升级
加班的时间,也是我们自己的时间,要利用加班的时间做能提升自己的事情,不要浪费自己的时间。
程序员怎么越干越努力
如何应对焦虑感
- 习惯焦虑,让焦虑感督促自己持续学习和进步
- 找到适合自己的发展道路
前期职业?后期职业?
- 任何职业的从业者都很多,而能脱颖而出的都是少数
- 任何职业,都需要努力,选择不能代替努力
软件行业确实不一样
- 新兴行业,缺人不缺钱
- 软件公司危机感
- 程序员必须有创新的精神,有斗志,不安于现状
不同类型的职业
- 技术简单,产出明确,工作流程可以规范化
- 产出成果的过程复杂,人才无法批量培养,需要经验积累和发挥自己的主观能动性
程序员如何应对
- 持续学习技术
- 持续思考业务
- 吃掉更多的资源,积累自己的经验
数据
做系统,数据比软件更重要
- 数据是软件系统的根本,就好像经济活动里的钱和账,抓住数据就能看清根本
- 数据升级和迁移,相比软件升级要难的多,风险也大的多,对于系统的数据架构设计,值得多花点心思
- 数据被删了,会损失惨重,程序代码被删了,只要不造成数据问题,基本没什么长期影响
- 数据是新时代的“土地”,什么都要靠它,而且很难买到,自己积累则要费力更费时
与人沟通,没数据,莫开口
- 先说数据,再说自己的分析,没有数据支撑,大家很难达成共识或得出结论
- 注明使用数据的出处,方便你从数据源验证更多的数据
- 如果有可能,交叉验证,从不同的角度获取相同意义的数据进行比对和验证