远大前程, 从软件新手到行业大牛
2016-10-19
成功的特征
- 有乐趣的工作
- 在公司和业界的影响力
- 改善社会
- 自由度 — 随时做你想做的事
- 名望
- 旅行
来自Marissa Mayer(Google)的建议
找个感觉非常舒服的工作环境, 因为这将有助于你积极参与。 如果在一个地方, 无论关于软件架构 决策或公司战略都能畅所欲言、分享意见和想法, 你就会想在这样的地方工作。
为寄予你希望和鞭策你的人工作。要有优秀的导师来指导你的工作。
尝试与你可以找到的最聪明的人一起工作, 因为他们的挑战会使你勤于思考, 工作更努力。与真正 顶尖、聪明的工程师一起工作, 会从根本上改变你的思维方式和编程方式。
做一些还没有准备去做的事情。做一些自己害怕的事意味着你将向前迈进一步, 可以学到新东西, 你 将会成长。
简洁性与完整性
简洁性与完整性的斗争往往是简洁和优雅获得胜利。
来自Jon Bentley(编程珠玑)的建议
- 追随天赐之福
- 学习你可以学习的一切知识, 这些知识会在某一天某个地方以某种方式和软件关联上的
- 尝试新事物, 不要放弃(要回归到)旧事物
- 有最优秀的人一起工作
- 找到一个导师, 从你敬仰的人身上学东西
- 回报你的团队、公司、技术社区或左邻右舍
- 练习写作和编码, 审查同事的工作, 也让同事审查你的工作
- 对你的团队、公司、技术社区或左邻右舍好一点, 忠诚是双向的
- 阅读好书
Elements of Style
How to Solve It
The Woolsey Papers
一些需要掌握的经验和技能
-
至少学习四种不同的编程语言和四种不同的数据格式
C
Java
Python
Go
JavaScript
JPEG
XML
CSV
YAML
HTML
-
开发至少能支持一千人并发访问的软件
Python
Node.js
Go
-
开发可以拓展到超过1TB数据量的软件
Mongodb
Mysql
Postgresql
redis
-
参加10个以上程序员一起做的项目
-
做既有代码的拓展工作, 这些代码至少是5年开发的, 而且无法从原始作者那里得到任何信息
-
解决至少50个别人代码中的缺陷
-
编写支持国际化语言输入的程序
-
研究下列情形的性能特点
- 无论是否存在CPU缓存未中的情况, 都能从内存中获取数据
- 对比从磁盘连续块读取与随机
I/O
寻址 - 对比大块数据与小块数据的
I/O
- 三种流行的编程语言(
Java
C/C++
PHP
)
-
输入理解
HTTP/TCP/IP
等网络知识 -
通过改进算法提高程序性能
职业发展所需的技术技能
基本功
- 核心编程语言(
Java
C/C++
PHP
) - 操作系统
- CPU
- 面向对象设计
- GUI编程
- 存储系统(
RAID
) - 固态存储系统(
SSD
) - SAN/NAS
- 内存管理
- 数据结构和算法
- 数据库
XML
和Web
编程
开发技能
-
编码技能
- 需求计划
- 功能规格
- 单元测试
- 软件架构设计
- 封装
- 重用
- 调试
- 诊断
- 可扩展性
- 评审方法
- 可用性设计
-
质量保证
- 测试
- 代码和分支覆盖理论
git
- Code Review
-
战略规划
- 需求收集
- 市场分割
- 资源规划
- 规模规划和估计
领域专长
- 网络
- 数据库
- 后端架构
- 前端架构
- 社交网络
工作中的小技巧
- 了解自己
- 感知别人
- 散发积极的情绪
- 保证从不表达愤怒
- 识别他人的职业抱负
- 经常感谢同事所做的贡献
- 帮助他人
- 一定向身边情商高的人学习
- 善于交际
职业发展
- 0~1年 初级程序员
- 1~3年 中级程序员
- 3~5年 高级程序员
- 5~8年 架构师
- 8~10年 高级或首席架构师 及从事部分管理工作
- 10年以上 CTO
影响圈与关注圈
你能影响到的事情
- 产品质量
- 生产计划
- 你被分配的工作
- 你要发展的技能
- 你的社会表现
- 你工作的努力程度
你关心, 但很难有所控制的事情
- 公司战略
- 国家经济情况
- 政局稳定
- 国际贸易协议和关税
- 合作者的人格缺陷
- 天气
你是如何在技术趋势和创新上保持领先的? — David Vaskevitch(微软)
我读很多的书, 与许多人交流, 并尝试各种新技术。
时间管理的三个方法
- 优先级
- 授权
- 更加努力地工作
卓越之路
-
著书立说
- 写你知道的内容
- 注重质量
- 创作出自己愿意读的作品
- 尽量与别人合作发表作品
- 写作风格和策略不容忽视
- 写作不是为了致富
-
公开演讲
- 了解听众
- 根据听众调整演讲风格
- 清晰和节奏是关键
- 让听众参与进来
- 适度使用手势
- 微笑
- 请记住, 主角是你, 而不是图表
- 树立与听众无关的反面角色
-
热爱软件艺术, 注重开发流程