面试的时候,我会问面试者,你日常如何构建自己的知识体系,如何让自己更高更快更强?多数工程师并没有深入地思考过这个问题,基本上是零敲碎打,随机性大。
本着不能让你白来一趟的精神,好为人师的我会娓娓道来:
第一阶段 认真构建完整的知识体系
十几年前我投身软件行业的时候,光是讲解数据库原理、操作系统、TCP/IP、组网、算法等等基础知识的英文原版书摞起来就等身,认认真真看完,各种上手实践,入行后,读遍 C++ 各种经典著作,读遍各种协议原文,认认真真打基础。
很多工程师都说自己平常就是在某些 IT 门户上看看推荐的博文或新闻,我说这属于典型的零敲碎打,不够刺激。
聊到这时,我会举一个例子,为什么要阅读长篇小说,因为中短篇小说就像用针扎你,而长篇小说就像把你装进一个沙袋里吊起来,从四面八方用狼牙棒打你,酣畅淋漓。构建可用的知识体系,就得读书,书是有体系结构的,你关心不关心,现阶段你用到用不到,它都讲到了,从头到尾看几遍,针扎得透透的。
何谓知识体系?
几年前,前支付宝架构师姚建东曾经在我们公司做过技术人员如何规划自己的分享讲座,他是这么论述的:
技术与技巧包括:
- 计算机基础理论
- 计算机模型:内存/IO/时钟/CPU……
- 算法
- 专项技术领域:
- 数据挖掘
- 数据管理
- 智能推荐
- 搜索
- ……
- 语言与工具
- 语言与相关体系
- 开发工具,分析工具,代码管理工具
- HTML/CSS/JS/Ajax
- 常用框架与第三方类库
- 调试与测试
- 调试方法和哲学
- 定位问题
- BUG管理工具
- 单元测试
- 集成测试
- 性能测试
- 安全测试
- 兼容性测试与方法
- JS/Ajax测试与方法
- 服务层测试
- Web层测试
- 网络与系统
- TCP/IP协议与模型,HTTP/SMTP等协议
- Linux系统,网络分析工具,系统分析工具
- 容量,流量与负载均衡
- 应用部署、规范、规划
- 安全
- 监控与故障分析
- 磁盘与存储
- Shell
- DNS与域名
- 缓存,反向代理
- 图片服务器(海量小文件)
- 需求挖掘与分析
- 需求文档格式
- 需求访谈
- 需求分析方法,需求分析工具
- 领域知识与经验
- 系统分析与设计
- UML语言与模型
- 分析模式
- 设计模式,领域驱动
- 系统分析文档格式
- 系统设计文档格式
- 功能性需求与非功能性需求
- 数据与系统
- 数据库
- 可伸缩策略,扩展策略,备份,容灾,性能,安全,高可用……
- 数据设计与范式,SQL/NoSQL,Cache,分布式文件
- 架构设计
- 架构模式,典型互联网公司架构演进历史
- 架构原则,常用策略
- 架构设计方法
- 非功能性理解
- 扩展性
- 伸缩性
- 稳定性
- 一致性
- 性能
- 吞吐量
- 容量预测与规划
- 架构体系与相关技术
- 过程与管理
- 分析过程
- 研发过程
- 评审过程
- 测试过程
- 发布过程
- 回滚过程
- 文档管理
- 知识管理
- 项目管理
以上其实就是一份从业基础知识清单,你可以按图索骥,阅读相关书籍。
第二阶段 顺着一个Topic钻进去,锻炼自己的预研能力
无论公司业务还是自己喜欢做的事,都可以抽象出通用性课题,然后以做论文的方式杀进去。这个事情得反复操练,有意识操练。
做事方式为:
- 抽象出 Topic——如分布式锁,分布式并行计算引擎,防CSRF的FormToken自动生成框架,定时任务管理与调度平台,分布式跟踪,等等
- 向功课好的学生学习——有针对性地深入了解业界其他公司是如何分析问题和解决问题的,汇总各种方案,站在巨人的肩膀上
- 分析特定应用场景,技术选型
- 兼顾高可用性和可伸缩,做设计评审
- 做测试自证靠谱,梳理知识点,开技术分享会
- 上线商用,总结经验教训,开经验分享会
其中一个重点是汇总和分享。05年时,应电信级统一消息业务需要,我去研究了 SIP 协议,做了各种试验,分析报文,写了一系列的幻灯片,做了公开分享,一时间还颇受欢迎:
- SIP_to_Freshman_by_zhengyun.ppt
- SIP之穿越NAT_by_zhengyun.ppt
- SIP体系架构讲义及消息交互演示_by_zhengyun.ppt
- SIP多方会话消息之实例讲解_by_zhengyun.ppt
- SIP安全框架之认证[NTLM和Kerberos]_by_zhengyun.ppt
- SIP消息之逐项讲解_by_zhengyun.ppt
为什么要写出来、讲出来呢?
因为有一个学习金字塔理论,如下图所示:
我们读过的事情能够记住学习内容的10%,
我们听过的事情能够记住20%,
我们看过的事情能够记住30%,
我们听过和看过的事情能够记住50%——如看影像/看展览/看演示/现场观摩,
我们说过的事情能够记住70%——如参与讨论/发言,
我们说过和做过的事情能够记住90%——如做报告,给别人讲,亲身体验,动手做。
这也就是我在《窝窝研发过去几年做对了哪些事》中阐述的管理方法:我们从入职之后就有意识地训练大家,让大家能够公开陈述、清晰表达。所以,试 用期内,新人必须做一次技术分享和一次技术评审,面对各方的 challenge;预研的中间和结尾都要有分享会;平时也要定期组织技术讲座。
第三阶段 疯狂回答技术问题
知识体系慢慢构建,与业务相关的抽象 Topic 也在探索中。
但这还不够。
因为你亲身接触到的世界太小,可能不足以构成挑战,你可能意识不到自己缺多少知识和技能,不利于你分析问题、提出问题和解决问题的能力培养。
所以,要主动出击:
疯狂回答问题。
我曾经在入行的头几年里几乎把我关注的垂直领域(包括语言领域和业务领域)里的所有问题都回答了一遍。我对外宣扬知无不言言无不尽,放出邮件地 址和 MSN(那时候 MSN 很高大上),很多网友都会发邮件或者加我好友,问各种开发疑难问题,平均每天都有几个,然后我把解决问题的过程写成微软 KB(KnowledgeBase) 文体发表在我的博客上。
你想想看,工作中的问题你平均每隔几天才能遇到一个,而这么做,每天你都会遇到几个乃至于十几个,第一让你脑力激荡,第二接触到更多新知。
05年到06年期间,我因工作需要学习了 JavaME(或古老的称呼 J2ME),早年间 Symbian 手机上的客户端开发。那段时间我天天扫中文论坛的帖子,力求回答所有问题,尤其是那些 BUG 或故障。对于那些暂时没有人解决的,如流媒体实时播放,如仿 OperaMini 二级菜单界面,都上下求索,最后放出思路以及源码。
同时,我经常整理常见问题,梳理成册并发布。譬如我整理过的 J2ME 疑难问题:
- [J2ME Q&A]真机报告MontyThread -n的错误之解释
- [J2MEQ&A]WTK初始化WMAClient报错XXX has no IP address的解释
- [J2ME Q&A]untrusted domain is not configured问题回应
- [J2ME]“Cannot open socket for LIME events”错误解决
几个月后,我成为 J2ME 中文论坛超级版主。通过这个历程,我想告诉大家,回答网友问题,技巧得当的话,比如别老是重复回答新手问题,试着攻克那些疑难问题,或者离奇故障,绝对不会浪费你的时间。
为什么?
因为你要信奉:
你学过的每一样东西,你遭受的每一次苦难,都会在你一生中的某个时候派上用场。——佩内洛普·菲兹杰拉德 《离岸》Everything that you've learnt and all the hardships you've suffered will all come in handy at some point in your life.
第四阶段 RCA/总结
现在是你把经验教训变为财富的时刻了。
什么是好的技术 Leader?
随便一个业务需求或业务场景讲出来,你立刻把它抽象为几个模块/系统/Topic,然后侃侃而谈,业界都是怎么解决的,我们以前又是怎么分析怎么解决的,现在咱们这种情况下应该如何设计,可能会遇到什么问题,我们应该做哪些预防设计,blabla。
怎么做到这一点?
第一,写 RCA 报告。
我以前说过,『窝窝从 2011 年开始,一直坚持每错必查、错了又错就整改、每错必写,用身体力行告诉每一个新员工直面错误、公开技术细节、分享给所有人,长此以往,每一次事故和线上漏 测都会变为我们的财富。这就是我们的 RCA(Root Cause Analysis)制度,截止到目前已经收集整理了近两百个详尽的 RCA 报告。』
RCA 报告格式为:
- 背景知识(Optional)
- 问题现象
- 影响范围
- 问题原因
- 问题分析过程(Optional)
- 解决办法
- 后续处理措施:如线上脏数据如何修复,如对用户造成的影响如何弥补等(Optional)
- 经验教训
- RCA类型:如代码问题、实施问题、配置问题、设计问题、测试问题
第二,写总结。
话说,要经常拉清单。
侃侃而谈得有资料,这些都得是你自己写才能印象深刻,关键时刻想得起来。
好了,这就是我告诉面试者的高手炼成四个阶段。
点击链接看一下技术总监是干什么的。
相关推荐
此外,教材中还特别设置了“试试看”、“算法时间”和“习题”等环节,鼓励实践操作,加深理解,检验学习成果,这些都是提升学习效果的有效手段。 - **编写背景与经验分享**:作者结合自身丰富的自学经历,特别是从...
3. **创新能力**:鼓励创新思维,有展现创新精神的实例,如发表文章和参与制作大型DV电影。 4. **科研能力**:撰写并发表学术论文,参与省级重点课题,显示了较强的科研能力和学术视野。 5. **实际操作技能**:...
同时,鼓励学习者在评论区互动,这为学习过程提供了社区支持和答疑解惑的平台。 标签“RPA”直接指出了主题,即机器人流程自动化,它是现代企业中用来提高效率、减少人力错误的关键技术。RPA涉及的工作包括数据录入...
3) SD(Self Development)自我启发,鼓励员工自我学习和成长。这三者相辅相成,分别占据了70%、15%和15%的比例。 在教导下属时,重要的是抓住合适的时机,如新员工报到前的准备、工作中遇到问题时的即时指导、部属...
许多孩子在虚拟世界中塑造不同的自我形象,可能会导致他们在现实生活中也习惯性撒谎。家长和教育者需要引导孩子理解网络诚信的重要性,通过设定适当的网络使用规则,培养他们的诚实行为。 此外,游戏化学习也是一种...
这种方法鼓励了学生自我肯定,激发了他们的正面情绪,从而更愿意接受批评并改正错误。 其次,陶行知的教育方式体现了温和与温馨。他以和善的态度和亲切的语言与王友交流,营造了一种充满关爱的教育氛围,使得学生...
7. **学习与分享**:JavaEye论坛鼓励用户在遵守规则的前提下,积极学习新技术、新知识,并分享自己的理解和实践经验。这种互动和分享是提升个人技术水平和拓展视野的有效途径。 了解并遵循这些规则,不仅能保证你在...
博客在这个过程中起到了重要的作用,它不仅是资源的收集和分享平台,也是教师自我提升和学习交流的舞台。 1. **博客的开启与探索** 作者最初对博客并不熟悉,但在了解到博客可以作为一个个人空间后,于2005年在...
因此,作品评价法成为一种有效的评价方式,它鼓励学生通过创作作品展现所学,同时促进他们的自我反思和同伴交流。 以《制作贺卡》这堂课为例,教师引导学生运用Word软件创作图文并茂的贺卡,以此来检验学生对布局...
- **学习方法**:建议按照书中的指导逐步学习,注重实践操作,同时充分利用书中提供的资源进行自我检验。 通过上述内容的梳理,可以看出《易学C++》不仅是一本技术书籍,更是一本注重实用性和可读性的学习指南。它...
本文将基于标题“集中注意力”以及描述“如何集中注意力,转载自互联网,仅供学习交流”,深入探讨注意力的相关知识点,帮助读者更好地理解注意力的重要性,并提供一些实用的方法来提高自己的注意力。 #### 一、...
- **开发书籍视频**:推荐优质学习资源,促进自我提升。 - **项目外包求职**:连接开发者与企业,拓展职业机会。 #### 论坛特区 - **Android玩机分享**:交流使用心得,分享个性化配置。 - **关注移动互联网**:...
3. **工作态度变化**:随着时间推移,尽管尝试通过自我激励来恢复工作热情,但最终发现这种策略无法持久。这反映出工作中可能存在的疲劳积累和心理压力,以及个人情感与工作效率的紧密联系。 4. **个人决策过程**:...
4. **个人修养**:不断提高自身的思想觉悟,努力完善自我,展现出较高的职业素养和个人品质。 ### 教育教学 1. **教学能力**: - 备课充分:坚持每节课前进行深入细致的备课,确保授课内容的准确性和有效性。 - ...
- **互动交流**:鼓励读者留言评论,积极回应读者的问题和建议。 - **加入社群**:加入与自己兴趣爱好相符合的博客社群,扩展社交圈。 - **注意事项**: - **版权意识**:尊重原创作品,避免未经许可转载他人内容...
7. **内容来源的标注与原创性**:转载其他社群的内容时应标明来源,同时鼓励成员创作原创内容,以增强社群的独特性和吸引力。 8. **内容的整理与回顾**:定期整理社群内的精华内容,可以帮助成员更好地消化信息,...
- 鼓励用户不要直接在发布平台咨询修改问题,而是应该通过自我学习和研究来解决问题。 6. 子分类调用模板说明: - 讨论了如何调用子分类模板forumdisplay_subforum.htm,这允许在主题列表页中实现更细致的版块显示...
通过乔那坦的经历,作者传达了追求个人价值和理想的重要性,鼓励人们勇于突破自我限制,追求更高的人生目标。 #### 六、PPT资源推荐 - **PPT模板**:[www.1ppt.com/moban/](http://www.1ppt.com/moban/) - **PPT...
【运输班组长模拟考试知识点详解】 一、填空题知识点: 1. 矿井瓦斯是指井下以甲烷为主的有毒有害气体的总称,是煤矿安全...10. 自我提升:持续学习,不断提升自身领导能力和业务水平,以适应不断变化的环境和挑战。