加餐四 | 学习基础技术:你对“基础”的理解准确吗?
加餐四 | 学习基础技术:你对“基础”的理解准确吗?
讲述:安晓辉
时长17:01大小15.55M
典型的错误观点
核心就是工作相关
举例说明
细化基础范围:技能图谱
提升技术的技巧
常见学习误区
如何判断学习深度?
如何让理解更加深入?
基础积累会不会浪费?
我的实际经历
小结
思考题
赞 22
提建议
精选留言(26)
- sugar2021-01-24说一下自己的感受: 总有种感觉:做业务会导致自己的技术在整个计算机科学的技能树上停留在浅层次浅尝辄止,无法深入,做了2-3年基本可以把同一个岗位 做业务所需的技能点全部点亮了,再进一步去点亮更深的技能点都会存在老师在本为中说的:“因为用不到,所以学也没什么用,硬着头皮学收益也会很小”。因此 一直做业务,无法建立自己的不可替代性; 而做基础类技术研发,更像是做科研,有非常多的东西需要去学习,随着时间的积累,可以把技能树一直往深入点亮下去,建立起自己的技术壁垒。技术壁垒有啥用呢?我认为最务实的就是去应对996和35岁焦虑,因为这本质上是国内劳动力过剩导致的一种病态职场现象,做科研的方式去做基础技术而非业务开发,这能让自己无法轻易被年轻人替代,是一个应对上述职业焦虑的办法。 如果一直做业务,似乎必须在管理方面建立自己的“不可替代性”,但是这里存在一个我个人觉得很不爽的地方,就是技术经理普遍面临的尴尬问题:在业务团队每当你面临与pm在产品思路上争论时,技术人的话语权有限,而做基础技术,能有更多工作上的自由,因为在这个领域没有pm,一切东西该怎么做、做成什么样、做得好不好都是技术岗的leader或高工去定义的,pm根本不懂,公司高层也不会轻易干涉,往往会让cto自己养一批技术过硬的人 放手去干就是了。 不知华仔老师怎么看呢?展开
作者回复: 其实你的理解存在一些误解。 首先,做业务2~3年就能把技能树点亮,原因不是做业务本身简单,而是业务没有发展,如果你的业务从10万增长到100万,从100万增长到千万,不同阶段需要的技能是不一样的。 其次,你认为做基础技术可以做的很深并因此可以建立自己的技术壁垒,这也是一个错误的认知。 目前国内有团队做基础技术的公司并不多,而且事实上大部分也都是基于开源方案二次开发。 除非你能负责基础技术的架构和设计,否则大部分的时候其实也是开发各种和业务功能类似的功能,并不会让你的技术越来越深。 第三,基础技术做的好不好并不是自己说了算,而是由基础技术的使用方也就是业务团队来评价的,正因为做的好不好没有明确标准,很多时候就看使用方的口碑, 有人的地方就有江湖,一般来说,除非你的做的特别好,否则基础技术团队永远都是被吐槽的对象。 其实,无论是做业务还是做基础技术,要想技术有提升,必须要面对越来越大的挑战,对于业务来说,就是业务规模在增长;对于基础技术来说,就是基础技术更强大; 而基础技术最后要体现价值,还是要依托业务来展现,你可能会认为自己的基础技术很牛逼,但是如果业务无法验证、市场无法验证,最后还是作用不大的。
共 12 条评论60 - humor2021-01-15虽然道理是这样,但是如果没有学过某项基础技术,比如操作系统和网络,我怎么知道我学到什么深度才算合适呢?或者我后来的工作遇到了难题,要解决这个难题需要用到比较深的基础技术,但是我又没去学这么深,我怎么能想到要去学这项技术,然后应用呢?
作者回复: 第一个问题: 如果你完全都没学过某个技术,连它包含什么内容,涉及哪些概念,有什么应用场景都完全不清楚,是不可能看一眼就知道应该学到什么深度的。 要想自己不学就知道其深度,只有让别人来告诉你,即使别人来告诉你,你也只是知道了结果,不知道为什么有的是要深度学习,有的是要大概了解。 所以说学习不是一次性的,而是要逐步迭代深入的。以计算机网络为例,第一次学习你至少要系统的找本书或者资料系统学习一下,你就能够知道其内容涵盖DNS、TCP、IP、BGP、ARP、RARP、RIP、OSPF……这一大串技术,此时你已经知道每个技术点的大概含义和适应范围了,你再结合自己的工作来判断哪些是大概了解,那些是要深入学习的。 例如,你是做Java后台业务开发的,那DNS、TCP、IP是需要深入了解的,但是ARP、OSPF、BGP就不需要深入了解;但如果你是运维,这些基本都要深入理解。 第二个问题: 要么别人告诉你,要么自己带着问题去探索,然后找到对应的技术点,再深入学习。 例如,false sharing这个案例,一开始我也不知道,我是去查"multi-thread high performance"这个关键字,然后无意中发现的,发现后我就深入的去学习了一下,又了解了MESI等关联知识。
13 - Monday2021-02-08Java服务器开发: 1、工具 1)语言-java,SQL,VUE 2)IDE:Ideal 3)版本管理工具:Git 4)依赖管理:Maven 2、生态 1)中间件:RabbitMQ、Kafak 2)存储:Redis(Codis集群)、Mongodb、MySQL、Postgres、ES 3)依赖组件/系统:Tomcat、SpringCloud、Springboot、CAT、ZK、Promethus、Dubbo、Activiti、Skywalking、Guava 3、容器:Window、Linux、华为云、Docker、K8S 4、原理:生态中和各项的原理(待分解) 感觉很多的东西,但是得分个轻重缓急,本人现在负责冷数据的查询系统,优先学习Postgres展开
作者回复: 分析的非常好,尤其是最后的“轻重缓急”,说明你已经充分理解了晋升原则中的“价值原则”。
12 - 黄立2021-01-15毕竟不是做科研,还是以应用为主,学到用到最好
作者回复: 可以这么说,毕竟时间和精力有限,要考虑投入产出比
12 - 遇见小时候👣2021-05-01Java后端开发 工具:idea,git,maven,visual paradigm/omini graph/ppt/process on/starUML,vscode,markdown 生态:Spring,SpringMVC,SpringBoot,graphQL,MyBatis,HSF,Tair,MetaQ,Diamond,Switch,ScheduleX,MySQL,react,ant-d 容器:Tomcat,Linux,阿里云ECS等 原理:JVM(垃圾回收器及垃圾回收算法等)、线程模型、I/O模型、各种锁及线程工具类的原理和机制等、面向对象设计原则、架构设计原则、CAP理论等、数据库索引实现原理等、设计模式、企业级应用架构模式等展开
作者回复: 总结的很全面
5 - 畅畅2021-04-09这点我自己太有感触了,回顾工作这几年,我其实没有把工作中用到的技术和自己感兴趣的技术区分开,导致我工作中看了很多和工作关联不是很大的“基础知识”。 而且自己也没有梳理出图谱,感觉自己瞎折腾几年,折腾的东西零零散散,感觉自己没学到什么。 接下来应该还是先梳理图谱,然后通过20h理论去先补充自己短腿的地方,然后在用更多的时间去突破重点技术领域。展开
作者回复: 优先整理和工作相关的基础技术图谱,然后在此基础上找一些重点方向突破
5 - 睡觉装深沉2021-04-05太赞了,由于自己是跨专业,所以一直在想怎么补基础。三大错误都犯了一遍。十分感谢纠正我错误的观点。
作者回复: 加油 :)
4 - Y丶z2021-01-18说的没错,但是其中有个度很难衡量,就是现在工作中用不到,但是后续突然用到了,如果当时不会,可能就会错失一些机会。
作者回复: 先把常用的,流行的,成熟的学会了,基本不用担心突然要用,因为可以说每个技术都有多个选择,即使突然要用,你积累多了,学起来也很快
共 2 条评论4 - humor2021-01-15基础技术就算暂时用不到,学习深入一点也会有好处吧,比如可以学习前人的设计思想,将优秀的设计思想引入自己的业务中,或者为以后应用的机会做准备😁
作者回复: 都可以引入自己的业务了,为啥还说用不到呢?
5 - 我来也2021-01-15老师真敢说😄 上次只说了编译原理,这次说了一大堆。
作者回复: 你觉得说的有道理不?😂
共 2 条评论5 - 威龙2021-01-17“打好基础很重要,打准基础更重要”总结的非常到位,虽然自己不是做技术的同学,但是从这篇加餐中get到学以致用的思想。结合日常做产品工作来思考,就是要找准产品和项目的核心价值,找准业务方核心需求,保持Less is more的设计思想。
作者回复: 很有见地 :) 主要是我们的时间和精力有限,如果什么都想学很深,是不现实的,而且投入产出比低。
4 - qinsi2021-01-16那么问题来了,面试或晋升的时候,如果所有候选人在岗位划定的基础能力范围内水平都是一样的,那要如何决定谁被录取或晋升呢?
作者回复: 这个没有标准考试,不会出现两个人的分数完全一样的情况,实际评价的时候,不可能认为两个人水平完全一模一样,一般都是“两个差不多”这种评价,然后如果一定要排名,一定能找到理由区分高低的。
共 2 条评论3 - prozac2021-05-12我觉得认真做技术的人都还是有个技术武侠梦的,谁都想成为睥睨天下的大侠。这也是为什么很多技术人不注重业务,而经常容易陷入纯技术的自嗨中。这只能说有好有坏吧,享受纯技术的进步是一种智识上的享受,日后哪一天不把程序员当主业了,也能把这项技术当做兴趣爱好。但现实是技术不需要钻那么深也能当上P7,P8,只论单纯赚钱的话,技术能力确实只占一半甚至都不到。我大二的时候把SICP学了一半,里面的技巧对我形成了非常深刻的印象,但老实说目前里面的技巧对我工作内容没有明显的帮助。我目前的想法是结合本专栏所学的知识,先掌握好自己目前职级应该做的事,在业余时间把计算机基础知识当做兴趣爱好进行学习。展开
作者回复: 你确定你有那么多业余时间么 :)
3 - 稻草人2021-01-26巧了,我也和老师一样,因为公司架构转型要从PHP转Java了。希望老师能稍微深入说一说Java业务开发技能学习的先后顺序,就是先怎么快速上手Java,然后怎么持续深入~
作者回复: 你对照“三段分解法”和“链式学习法”的方法,就可以整理出具体学习Java的计划和内容。
2 - 大土豆2022-02-20你那同事是什么年龄从Android转Java后端的?😃,现在咋样,还适应吗?
作者回复: 年龄30左右,现在好像又回到原来公司做app了,哈哈 :)
1 - lyonger2021-10-30最好是结合自己所负责的业务,包括业务上下游用到的技术。画一个技能图谱,先从自己负责的业务所需的技能点开始点亮,然后再点亮上下游需要的技能点。 成为解决方案架构师,能真正解决这个业务领域(比如电商,游戏等)的某个问题。
作者回复: 正解
1 - CoderYT2021-04-23这个真是强烈赞同,自己看到过好过连业务都不熟悉的人,整天看spring的源码,而且还要求自己必须达到手写的程度,关键是看了这么久,跟自己的实际工作几乎毫不相干,问他为什么看这个,就说这个”基础“,面试也问,要挖的越深越好。。。实际上的计算机底层知识博大精深,要是一直想着深挖我觉得可以挖到沙子变成芯片,,,学习基础知识关键是找到一个合适的抽象层,不能就一股脑地往下挖下去没完了,底层的知识你学在多也学不完的。。。展开
作者回复: 有的人用Java开发,连Java API都不熟,却天天刷算法,背代码 :)
2 - 邱明成2021-04-09教科书级的讲解
作者回复: 有感而发 :)
1 - 守望者2021-03-03希望老师专门开设一门关于"技术知识的学习方法"相关的课程
作者回复: 专栏里面就有了
1 - 守望者2021-03-03不会思考,不会分析,不会取舍的人,才会想要把所有东西都掌握
作者回复: 这个还真不一定,做技术的人怎么说都会思考分析,只是被很多错误的认知误导了。
2