“面试造火箭、工作拧螺丝” 这便是招聘求职面试的常态。
话虽如此,提高技术水平自然是程序员必备的能力,技术水平又包括了深度和广度,后续我们将从深度和广度两个大方向各用两篇文章说明,包括了方法论与实践。
接下来本篇内容将和大家分享的是对“技术深度”的方法论一些思考和学习建议。
对于深度与广度的抉择,可以分为前和中后期两个阶段来做考虑,起码我是这样的想的:
前期也就是刚开始工作的三五年内,刚从学校出来,身上所掌握的东西还没有完全能跟得上整个公司的脚步,这个时候必然是以深度优先,用自己的技术把岗位的职责做到游刃有余,是大多数新晋开发者都应该追求的境界。先求深度,再求广度。
1、为什么要加深技术深度
很直接的两个表层原因就是:
1.工作需要
如果技术深度不足,碰到问题停留在表面,那么很有可能无法胜任工作,这是非常“致命“的...
2.面试需要
对于面试来说,技术深度最能体现出候选人的能力。
以个人校招面试经验举例:
面试阿里、美团、快手等大厂时,如果想冲刺sp甚至ssp,那么在面试过程中必须体现出技术的深度,这不仅仅代表技术的水平,也能侧面体现学习的态度和学习能力!
所以应付面试只是表象,底层反映的是持续学习的态度和专注自我提升的能力!
2、学习层次认知
我们先看看加涅定义学习的层次:
陌生——辨别——概念——规则(方法,套路等)——高级规则(解决问题)。
对应到我们技术,在我们技术简历上面,经常出现的词汇:
了解——熟悉——掌握——精通——专家,这就是由浅入深的形象描述。
1、了解:入门,简单的认知和记忆,表示知道。是最低水平的认知学习结果。
2、熟悉:概念,了解概念得清楚,清楚地知道概念;(对某种技术或学问)侧重于知道得清楚,比了解更进一层。
3、掌握:规则、应用规则到实践,是在熟悉的基础上能充分加以运用。
4、精通:高级规则,深入底层。
5、专家:扩展创新
这里大家还可以参考老白的学习路线 学习路线 ,可以看到老白的学习路线就是按技术深度排列的~
参考骨灰级大佬的观点(来自极客时间的《左耳听风》专栏):
1、了解:这个技术出现的背景、初衷和要达到什么样的目标或是要解决什么样的问题。这个其实就是回答:“我是谁”,“从哪来?” “到哪去”的三个哲学问题。
2、熟悉: 这个技术的优势和劣势分别是什么,或者说,这个技术的 trade-off 是什么。任何技术都有其好坏,在解决一个问题的时候,也会带来新的问题。另外,一般来说,任何设计都有 trade-off(要什么和不要什么),所以,你要清楚这个技术的优势和劣势,以及带来的挑战。
3、掌握:这个技术适用的场景并应用实践。任何技术都有其适用的场景,离开了这个场景,这个技术可能会有很多槽点,所以学习技术不但要知道这个技术是什么,还要知道其适用的场景。没有任何一个技术是普适的。注意,所谓场景一般分别两个,一个是业务场景,一个是技术场景。
4、掌握:技术的组成部分和关键点。这是技术的核心思想和核心组件了,也是这个技术的灵魂所在了。学习技术的核心部分是快速掌握的关键。
5、精通:技术的底层原理、关键实现、本质。任何一个技术都有其底层的关键基础技术,这些关键技术很有可能也是其它技术的关键基础技术。所以,学习这些关键的基础底层技术,可以让你未来很快地掌握其它技术。
6、精通:已有的实现和它之间的对比。一般来说,任何一个技术都会有不同的实现,不同的实现都会有不同的侧重。学习不同的实现,可以让你得到不同的想法和思路,对于开阔思维,深入细节是非常重要的。
7、专家:扩张创新。
3、技术实践和从问题中深入学习
要真正的精通一门技术,最终还要通过实践来深入。就像游泳教练,必定游泳水平好,因为这些都是实践性很强的工作。书上学来终觉浅,绝知此事要躬行。
在实践中,遇到问题,不仅只解决问题,还要对问题刨根问底,深入挖掘问题发生的根本原因,这样可以系统性地修复问题,从而使其永久消失。
我们中国古代以来就有“打破沙锅问到底”的习惯;“打破沙锅问到底”是一句俗语,形象表达了锲而不舍、不断探索的精神,这是人们常挂在嘴边的一句口头禅。
我们遇到问题,从外到里,逐层分析:
1、问题表象是什么
2、直接原因是什么?
3、中间原因是什么?
4、根本原因是什么?
真正的解决问题必须找出问题的根本原因,如果只解决问题,而不深入问题背后的根本原因,这门技术也是不够深入。
比如:
问题:java应用出现超时抖动?
1)解决:Java应用出现FGC. (增大 -Xmx -Xms 内存设置)
2)直接原因:流量激增? 长时间运行? 代码问题导致占用内存对象不释放?。。。
3)中间原因:流量没有做预警? 研发人员能力问题?
4)根本原因:JVM虚拟机的基本原理?GC机制? JVM性能监控?。。。
简单小结一下,本篇与大家分享的内容更多的是提供方法论以及提高对“加深技术深度”的认知,平时从实践中去深入学习问题,解决问题不能停留在表面,要学会从里到外逐层分析,借助解决问题去深入学习。
方法论篇终归是理论思想和认知的提高,下篇会继续更新实践篇,会有个人亲历的一些不错的实践方式分享给大家,欢迎大家追更~
参考文章:
https://zhuanlan.zhihu.com/p/267322015
https://cloud.tencent.com/developer/article/1428950
https://blog.csdn.net/zhiguigu/article/details/121017389
--------------------------------------------------------------------------------------------------------------------------------
更多精彩内容请关注公众号:绝命Coding