技术大佬们都是怎么学习的?

目录

问题

熟悉更多业务

熟悉端到端

自学

Do exercise

Learning

trying

Teaching


问题

今天逛帖子的时候,看到这么个问题: 

        这个问题我曾经也很好奇过,那些成为技术大佬的人当初是怎么学习,以及怎么成长过来的,因为我相信他们也是从 0 开始的,也会经历困难期之类的。或许,站在大佬们的“肩膀上”,可以走的更远。

        然后这个问题下面,有位“无名大佬”回答了这个问题,我看完后觉得相当不错,重新排版和整理了下,分享给大家一起共勉。

        无论你是在校学生,还是职场老鸟,我相信这些想法和建议都会对你有所启发。


熟悉更多业务

不管是不是你负责的;熟悉更多代码,不管是不是你写的。

这样做有很多好处,举几个简单的例子:

  • 需求分析的时候更加准确,能够在需求阶段就识别风险、影响、难点。

  • 问题处理的时候更加快速,因为相关的业务和代码都熟悉,能够快速的判断问题可能的原因并进行排查处理。

  • 方案设计的时候考虑更加周全,由于有对全局业务的理解,能够设计出更好的方案。


熟悉端到端

        比如说你负责 Web 后台开发,但实际上用户发起一个 HTTP 请求,要经过很多中间步骤才到你的服务器(例如浏览器缓存、DNS、Nginx 等)。

        服务器一般又会经过很多处理才到你写的那部分代码(路由、权限等)这整个流程中的很多系统或者步骤,绝大部分人是不可能去参与写代码的。

        但掌握了这些知识对你的综合水平有很大作用,例如方案设计、线上故障处理这些更加有含金量的技术工作都需要综合技术水平。

        “系统性”、“全局性”、“综合性”这些字眼看起来比较虚,但其实都是技术大牛的必备的素质,要达到这样的境界,必须去熟悉更多系统、业务、代码。


自学

        一般在比较成熟的团队,由于框架或者组件已经进行了大量的封装,写业务代码所用到的技术确实也比较少。

        但我们要明白“唯一不变的只有变化”,框架有可能要改进,组件可能要替换,或者你换了一家公司,新公司既没有组件也没有框架,要你从头开始来做。

        这些都是机会,也是挑战,而机会和挑战只会分配给有准备的人,所以这种情况下我们更加需要自学更多东西,因为真正等到要用的时候再来学已经没有时间了。

        以 Java 为例,大部分业务代码就是 if-else 加个数据库操作,但我们完全可以自己学些更多 Java 的知识,例如垃圾回收,调优,网络编程等。

        这些可能暂时没用,但真要用的时候,不是 Google 一下就可以了,这个时候谁已经掌握了相关知识和技能,机会就是谁的

        以垃圾回收为例,我自己平时就抽时间学习了这些知识,学了 1 年都没用上,但后来用上了几次,每次都解决了卡死的大问题。

        而有的同学,写了几年的 Java 代码,对于 stop-the-world 是什么概念都不知道,更不用说去优化了。

        你负责的系统和业务,总有不合理和可以改进的地方,这些“不合理”和“可改进”的地方,都是更高级别的怪物,打完后能够增加更多的经验值。

        识别出这些地方,并且给出解决方案,然后向主管提出,一次不行两次,多提几次,只要有一次落地了,这就是你的机会。

例如:

  • ·重复代码太多,是否可以引入设计模式?

  • ·系统性能一般,可否进行优化?

  • ·目前是单机,如果做成双机是否更好?

  • ·版本开发质量不高,是否引入高效的单元测试和集成测试方案?

  • ·目前的系统太庞大,是否可以通过重构和解耦改为 3 个系统?

  • ·阿里中间件有一些系统感觉我们也可以用,是否可以引入?

        只要你去想,其实总能发现可以改进的地方的;如果你觉得系统哪里都没有改进的地方,那就说明你的水平还不够,可以多学习相关技术,多看看业界其它优秀公司怎么做。

        例如我刚开始接手了一个简单的后台系统,每天就是配合前台做数据增删改查,看起来完全没意思,是吧?如果只做这些确实没意思,但我们接手后做了很多事情:

  • ·解耦,将一个后台拆分为 2 个后台,提升可扩展性和稳定性。

  • ·双机,将单机改为双机系统,提高可靠性。

  • ·优化,将原来一个耗时 5 小时的接口优化为耗时 5 分钟。

        还有其他很多优化,后来我们这个组承担了更多的系统,后来这个小组 5 个人,负责了 6 个系统。


Do exercise

        在做职业等级沟通的时候,发现有很多同学确实也在尝试 Do more、Do better,但在执行的过程中,几乎每个人都遇到同一个问题:光看不用效果很差,怎么办?

例如:

  • ·学习了 JVM 的垃圾回收,但是线上比较少出现 FGC 导致的卡顿问题,就算出现了,恢复业务也是第一位的,不太可能线上出现问题然后让每个同学都去练一下手,那怎么去实践这些 jvm 的知识和技能呢?

  • ·Netty 我也看了,也了解了 Reactor 的原理,但是我不可能参与 Netty 开发,怎么去让自己真正掌握 Reactor 异步模式呢?

  • ·看了《高性能 MySQL》,但是线上的数据库都是 DBA 管理的,测试环境的数据库感觉又是随便配置的,我怎么去验证这些技术呢?

  • ·框架封装了 DAL 层,数据库的访问我们都不需要操心,我们怎么去了解分库分表实现?

        诸如此类问题还有很多,我这里分享一下个人的经验,其实就是 3 个词:learning、trying、teaching!


Learning

        这个是第一阶段,看书、Google、看视频、看别人的博客都可以,但要注意一点是“系统化”,特别是一些基础性的东西,例如 JVM 原理、Java 编程、网络编程,HTTP 协议等等。

        这些基础技术不能只通过 Google 或者博客学习,我的做法一般是先完整的看完一本书全面的了解,然后再通过 Google、视频、博客去有针对性的查找一些有疑问的地方,或者一些技巧。


trying

        这个步骤就是解答前面提到的很多同学的疑惑的关键点,形象来说就是“自己动手丰衣足食”,也就是自己去尝试搭建一些模拟环境,自己写一些测试程序。

例如:

  • ·JVM 垃圾回收:可以自己写一个简单的测试程序,分配内存不释放,然后调整各种 JVM 启动参数,再运行的过程中使用 jstack、jstat 等命令查看 JVM 的堆内存分布和垃圾回收情况。这样的程序写起来很简单,简单一点的就几行,复杂一点的也就几十行。

  • ·Reactor 原理:自己真正去尝试写一个 Reactor 模式的 Demo,不要以为这个很难,最简单的 Reactor 模式代码量(包括注释)不超过 200 行(可以参考 Doug Lee 的 PPT)。自己写完后,再去看看 Netty 怎么做,一对比理解就更加深刻了。

  • ·MySQL:既然有线上的配置可以参考,那可以直接让 DBA 将线上配置发给我们(注意去掉敏感信息),直接学习;然后自己搭建一个 MySQL 环境,用线上的配置启动;要知道很多同学用了很多年 MySQL,但是连个简单的 MySQL 环境都搭不起来。

  • ·框架封装了 DAL:可以自己用 JDBC 尝试去写一个分库分表的简单实现,然后与框架的实现进行对比,看看差异在哪里。

  • ·用浏览器的工具查看 HTTP 缓存实现,看看不同种类的网站,不同类型的资源,具体是如何控制缓存的;也可以自己用 Python 写一个简单的 HTTP 服务器,模拟返回各种 HTTP Headers 来观察浏览器的反应。

        还有很多方法,这里就不一一列举,简单来说,就是要将学到的东西真正试试,才能理解更加深刻。印第安人有一句谚语:I hear and I forget. I see and I remember. I do and I understand ,而且“试试”其实可以比较简单,很多时候我们都可以自己动手做。

        当然,如果能够在实际工作中使用,效果会更好,毕竟实际的线上环境和业务复杂度不是我们写个模拟程序就能够模拟的,但这样的机会可遇不可求,大部分情况我们还真的只能靠自己模拟,然后等到真正业务要用的时候,能够信手拈来。


Teaching

        一般来说,经过 Learning 和 Trying,能掌握 70% 左右,但要真正掌握,我觉得一定要做到能够跟别人讲清楚。因为在讲的时候,我们既需要将一个知识点系统化,也需要考虑各种细节,这会促使我们进一步思考和学习。同时,讲出来后看或者听的人可以有不同的理解,或者有新的补充,这相当于继续完善了整个知识技能体系。

        这样的例子很多,包括我自己写博客的时候经常遇到,本来我觉得自己已经掌握很全面了,但一写就发现很多点没考虑到

        组内培训的时候也经常看到,有的同学写了 PPT,但是讲的时候,大家一问,或者一讨论,就会发现很多点还没有讲清楚,或者有的点其实是理解错了。写 PPT、讲 PPT、讨论 PPT,这个流程全部走一遍,基本上对一个知识点掌握就比较全面了。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/23731.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

私有GitLab仓库 - 本地搭建GitLab私有代码仓库并随时远程访问「内网穿透」

文章目录 前言1. 下载Gitlab2. 安装Gitlab3. 启动Gitlab4. 安装cpolar内网穿透5. 创建隧道配置访问地址6. 固定GitLab访问地址6.1 保留二级子域名6.2 配置二级子域名 7. 测试访问二级子域名 转载自远控源码文章:Linux搭建GitLab私有仓库,并内网穿透实现公…

Makefile

Makefile 1.举一个Makefile的例子2.使用变量3.更省事的方式,让Make 自动推导.PHONY:clean是什么意思?! 4.cmake与Makefile的联系在 linux 平台下使用 CMake 生成 Makefile 并编译的流程如下: 1.举一个Makefile的例子 hello_demo : hellospea…

回收站中怎么找回误删除的文件?这几种方法很实用

当我们在电脑上操作文件的时候,难免会有不小心删除文件的情况发生。这个时候,我们可以打开回收站来找回误删除的文件。但是,有时候我们也会误将回收站清空。那么,该怎样才能找回已经误删除的文件呢?在这里提供了回收站…

chatgpt赋能python:用Python下载MP3的方法

用Python下载MP3的方法 如果你想从互联网上下载MP3,那么你可以使用Python来实现这个任务。在本文中,我们将介绍如何用Python编写程序来下载MP3,同时还将分享一些有用的工具和资源。 Python中使用的库 要下载MP3,你需要使用Pyth…

一篇文章搞定《Android事件分发》

一篇文章搞定《Android事件分发》 什么是事件分发MotionEvent事件事件如何从屏幕到APPInputManagerServiceWindowManagerServiceWindow小结 事件如何从APP到达对应页面第一步:分类第二步:送去Activity后续的传递小结: 页面的事件分发整个流程…

移动云COCA架构,重新定义下一代云

当前,算力已经成为 全球科技竞争的焦点 为此,移动云重磅发布 「移动云COCA(Compute on chip Architecture)软硬一体片上计算架构」 以下简称移动云COCA架构 以此打造国家级自主可控的 高性能算力底座 带动国产化智算产业成熟…

【ISO14229_UDS刷写】-5-$38诊断服务RequestFileTransfer理论部分

总目录:(单击下方链接皆可跳转至专栏总目录) 《UDS/OBD诊断需求编辑工具》总目录https://blog.csdn.net/qfmzhu/article/details/123697014 目录 1 $0x38 RequestFileTransfer诊断服务描述 2 0x38服务请求消息 2.1 0x38服务请求消息定义…

写给初学者的YOLO目标检测 概述

文章目录 什么是目标检测What is YOLO?为什么YOLO在目标检测领域如此流行?1. 速度快2. 高检测精度3. 更好的泛化性4. 开源 YOLO架构YOLO目标检测是如何工作的?残差块(Residual blocks)边界框回归(Bounding box regression)交并比…

基于ESP32-CAM 和 OpenCV 设计的手势控制虚拟鼠标

概述 在本文中,我们将使用ESP32-CAM和OpenCV开发手势控制虚拟鼠标。ESP32 Camera Module和Python程序可用于无线控制鼠标跟踪和点击操作。 入门者必须具备 Python、图像处理、嵌入式系统以及物联网的丰富知识。首先,我们将了解如何控制鼠标跟踪和单击,以及运行 python 程序…

20年前,微软给金山那刀,现今一举将WPS推上领奖台,WPS,赢了

WPS,赢了 正如姚冬(金山办公副总裁)所说: 文本的命令行到图形界面的那次,改变整个人机交互的方式,我们公司历史上最大的一次危机也是那一次, 但我们依然挺过来了,我们相信这次技术浪…

一个神奇的工具,让URL地址都变成了“ooooooooo“

一个神奇的工具,让URL地址都变成了"ooooooooo" 一、核心代码二、URL编码/解码 最近发现一个有意思工具,就是将一个URL地址转换为都是 ooooooooo 的样子,通过转换后的地址访问可以转换回到原始地址,转换的逻辑有点像短链…

linuxOPS基础_linux安装配置

Linux系统下载 Linux系统版本选择:CentOS7.6 x64,【镜像一般都是CentOS*.iso文件】 问题:为什么不选择最新版的8 版本? 7.x 目前依然是主流 7.x 的各种系统操作模式是基础 官网:https://www.centos.org/ ,…

springboot+vue4S店车辆管理系统(java项目源码+文档)

风定落花生,歌声逐流水,大家好我是风歌,混迹在java圈的辛苦码农。今天要和大家聊的是一款基于springboot的4S店车辆管理系统。项目源码以及部署相关请联系风歌,文末附上联系信息 。 💕💕作者:风…

linux小技巧-如何修改IP(四种方法)

目录 项目场景: 方法分析及步骤介绍 原因分析: 解决方案: 项目场景: 项目上经常遇到修改IP的情况,这里总结一些各个情况下修改IP的方法,尤其时有时候没有主机屏幕显示,借助于命令行的方式修…

行业领先生物制药企业在冷链物流运输中采用虹科LIBERO温度记录解决方案

中国首个获得世界卫生组织国际通用名的生物Ⅰ类新药是用于抗血管内皮生长因子的融合蛋白,该药物通过结合血管内皮生长因子VEGF,竞争性抑制VEGF与受体结合并阻止VEGF家族受体的激活,从而抑制内皮细胞增殖和血管新生,达到治疗湿性年…

即时通讯软件(企业IM)对企业的作用

随着网络时代的来临,即时通讯软件也开始逐渐在企业中流行起来,甚至很多公司都已经将即时通讯软件作为内部沟通的主要工具,那么这种情况下,即时通讯软件对企业究竟有什么作用呢? 首先,即时通讯软件对于企业内…

Solidity拓展:数据类型的转换

1.数据类型隐式转换 (自动) 同一类型之间的转换:由低长度转换为高长度int8-int16-int32int256,但int不能自动转换成uint,因为放不下负数所以直接不让转换,且 int8 不能转换成 uint256 (因为 uint256 不能涵盖某些值,例如, -1&…

Spark集群的运行基本流程是怎样的?

Spark集群的运行架构 Spark是基于内存计算的大数据并行计算框架,比MapReduce计算框架具有更高的实时性,同时具有高效容错性和可伸缩性,在学习Spark操作之前,首先介绍Spark运行架构,如图所示。 在上图中,Sp…

“数字”厨电成新宠?“传统”厨电如何凭实力年销破百亿?|厨房电器SMI社媒心智品牌榜

Social Power 核心解读 AI加持,数字厨电新物种持续走红 传统厨电发力社媒,“有范儿”实力吸睛 4月中下旬的“魔都”可谓热闹非凡,上海车展喧嚣未落,隔壁2023AWE(中国家电及消费电子博览会)的群雄逐鹿紧随…

PCIE知识点-022:PCIe 时钟结构

图1:参考时钟结构示意图[4] 1. Common Refclk Architecture Common Refclk Architecture,即同源参考时钟架构,PCIe收发设备共用一个时钟源,是目前是使用最为广泛的方案。 缺点: 对于适用同一 Common Clock 作为参考时…