程序员该如何学习技术

2023-10-31

程序员该如何学习技术

前言

  学习是第一生产力,我从来都是这么认为的,人只有只有不断地学习才能意识到自己的缺点和不足,身为程序员,我更认为人们应当抱着终身学习的想法实践下去,这是我所一直践行且相信的。

风景图

  高处不胜寒,只有站在更高的地方,才能欣赏更多的风景,当年老时再回味这一切,你会发现这都是值得的。

 

 

「查阅文档」

Spring

  这是我认为是最快也最好的学习方法。对于自己工作中常用到的技术,抽时间把官方文档通读一遍(其实篇幅都不大),绝对收获满满,因为官方文档内藏很多细节,真的值得一读。没事的时候多翻翻自己使用的框架/系统/平台的API,看看有哪些自己不知道或者没用过的功能,想想这个功能可以用来做什么,能不能解决现存的问题,或者优化当下的解决方案。

读过 Spring Boot/Spring 的官方源码之后我才知道:

  1. 如果你想使用基于XML的配置,SpringBoot 也完全支持,只要先使用 @Configuration 加载核心配置,然后通过 @ImportResource 注解就可以使用 XML 配置文件啦。

    导入XML文件配置

     

  2. 总所周知,Spring Boot的自动配置是出了名的,如果你想了解当前应用的都配置了哪些自动配置,那么可以打开 --debug 开关,这样做可以启用核心日志器进行日志调试并且将具体情况输出到控制台。

    如何查看自动配置详细信息

     

  3. 什么依赖注入方式最好?看过Spring的官方文档就会知道,Spring 官方通常提倡使用构造器注入,因为它能够实现应用程序的组件作为不可变对象并且会确保所需依赖不为 null。此外,构造器注入组件总是在返回客户端(调用)代码中处于完全初始化状态。但作为旁注,大量的构造器参数是一种糟糕的代码,这意味着类或许有太多的职责,应该重构代码以更好解决适当的关注点分离问题。

    什么是最好的依赖注入方式

 

  如果你是前端工程师,通读 HTTP 协议和 ECMAScript 标准,就能秒杀 95% 的同行,不开玩笑。不过如果实在没时间,我们也可以把官方文档当成工具书,有问题的时候翻一翻,我相信大部分的问题都能通过官方文档找到很好的解决方案

 

「阅读源码」

代码

  都说细节决定成败,所以此方法是深入学习开源技术的唯一途径。程序员只有理解了某个功能在底层是如何实现的,我们才能真正把握这段代码或这个方法又或者是工具类更适合用来做什么,不能用来做什么。

  举几个例子,Java 语言中最常用的 String 类,如果你没看过 String 的源码那你不会知道 String类 toString 方法底层实现就是返回了字符串本身;

	/**
     * 此对象(这已经是一个字符串了) 返回自身
     *
     * @return  字符串本身
     */
    public String toString() {
        return this;
    }

  Collections 工具类的 sort 方法底层其实调用了 Arrays.sort() 方法进行排序,我第一次看的时候觉得很不可思议,JDK官方在代码复用这点上确实很厉害!

 	default void sort(Comparator<? super E> c) {
        Object[] a = this.toArray();
     	 // 这里调用了Arrays.sort()方法对数组进行排序
        Arrays.sort(a, (Comparator) c);
        // 然后使用迭代器重新设置元素
        ListIterator<E> i = this.listIterator();
        for (Object e : a) {
            i.next();
            i.set((E) e);
        }
    }

  此外,HashSet 的底层实现你没看过的话,绝对出乎你的意料,其空参构造仅仅就是 new 了一个 HashMap 而已,也就是说 HashSet 近乎就等于 HashMap。高情商: HashSet 青出于蓝而胜于蓝;低情商: HashSet 就是套皮了的 HashMap

  	/**
     * 构造一个新的,空的set集合,其底层的HashMap实例默认初始化容量(16)、加载因子(0.75)
     */
    public HashSet() {
        map = new HashMap<>();
    }

  有兴趣的话,大家还可以看看 LinkedHashSetTreeSet 的底层实现和上面的是近乎一般无二的。

  正如就算不明白怎么造汽车,我们也能把车开好。而如果多少知道一点底层的东西,开起来就会更得心应手。当车出现问题时,也不至于完全束手无策,只能蹲在路边等待救援。你Spring框架用了多少年了,却连一行源码都没读过?如果它是你女朋友,估计早该分手了。

 

「勇于尝试」

图不重要,看字

  每个人都有机会,但不是每个人都有勇气,只要你勇敢地踏出这一步我认为你就成功了一半。这世界上有很多牛逼的程序员不一定是因为学的很多然后学历很高就非常厉害,反而是因为踩到的坑多了,遇到的bug多了,经历了这么多的事物,慢慢地可以应对所有的情况,最终成长为了一个牛逼的大佬 (PS:可能头发也会掉光)

  鲁迅曾说过一句话:这世上本没有路,走的人多了,也便有了路。

  我认为勇于尝试是学习任何技术的必经之路。在有保护的环境下进行大量的试错,是最高效的学习方法。现在虚拟机技术已经那么成熟,云服务器也很便宜,为什么不能分分钟搭建一个自己的服务器,然后在上面花式作死呢?我相信很多新手都听说过无数次 rm -rf / 的事故,但是你尝试过这个命令么?你知道这个命令输出之后是什么样子吗?你不知道,公司为我们提供的最有价值的东西,其实就是实战的机会。 我们所学习的技术,最终还是需要通过工作来变现,成为我们的经验。通过公司我们可以接触到真实的数据,了解真实的用户,观察真实的系统是怎样运转的,积累真正的经验…… ,给自己投资比什么都划算, 但是所谓的机会,只属于提前准备好的人,而大部分人只会随波逐流, 不要等到工作都安排到你身上了再去尝试。公司不是你的试验田,你也不该拿用户当小白鼠。若是公司没有给你机会,那只能说明你还没有准备好。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

程序员该如何学习技术 的相关文章

随机推荐

  • java.lang.NoClassDefFoundError:com/google/common/base/Moreobjects

    项目所属环境不同 解决方案不一定适合所有人 见谅 java lang NoClassDefFoundError com google common base Moreobjects 编译可以通过 运行报错 很无奈 突然蹦出这鬼东西 经过一番
  • ESP32S2+ES8388移植过程及问题

    电路图如下 有点小瑕疵ES8388 VMID PIN10 19 20电容没有忘加 查资料应该不影响语言输出 可能噪音大 如果能导致不输出请告诉我一下 ESP32S2管脚映射 这里主要问题是我不确定MCLK 放到S2的PIN33是否合适 查资
  • C++ 类的静态成员和非静态成员

    类的静态成员不占据类对象的字节数 1 一个空类占用字节数为1 2 int整形变量占据的字节数为4 class Person int m A 非静态成员变量 属于类的对象上 static int m B 静态成员变量 不属于类的对象上 voi
  • JSP三大指令,六个动作,九个内置对象,四大作用域

    一 JSP三大指令 1 1 page指令 page指令 后面跟着三个属性 分别是language contentType pageEncoding 属性名 取值范围 描述 language Java 解释该JSP文件时采用的语言 一般为Ja
  • 少样本学习概述及三种经典方法

    从迁移学习讲起 Pre train Fine tune 不同领域数据规模不同 模型表现并不理想 但是 模型浅层可以学到通用特征 深层才学到更为复杂的分类特征 在大规模数据上训练的模型 其底层特征保持较高的通用性 迁移学习的下游任务仍然受限于
  • 计算机键盘正确指法操作方法,键盘指法,图文详解键盘指法练习方法

    随着时代的发展 现在越来越多的工作都是用电脑来完成的了 这就需要我们会打字了 很多朋友打字很慢是因为键盘指法不对 为了让您能更好的打字 今天小编就教您键盘指法练习方法 很多打字很快的朋友都是采用的盲打的方式 这就要求对键盘上的按键很熟悉 同
  • 二叉树之重建(js)

    二叉树之重建 输入一颗二叉树的先序遍历和中序遍历 输出它的后序遍历 输入 DBACEGF ABCDEFG BCAD CBAD 输出 ACBFGED CDAB var root value null left null right null
  • 【华为面试题】栈(二)

    题目 代码 function getMinElectricBoxes input str const n input str length const powerBoxPositions let lastPowerBoxUsed false
  • requests 实现模拟登录,获取cookie

    有个需求需要模拟登录csdn获取cookie 对csdn进行后续系列操作 刚开始使用的selenium 功能可以实现 但是效率有点低 后来改用的requests 遇到不少坑 今天来总结一下 首先找到csdn登录的url 在故意输错密码的情况
  • size函数 matlab 含义,size()函数的使用

    matlab中对于矩阵的计算是十分方便的 其中关于矩阵的函数有很多 size 在c c 中sizeof用来求某变量所占用的字节数 在matlab中size 则可以用来求矩阵的 长度 矩阵的长度有两方面 1 行数 2 列数 所以size 也有
  • [创业之路-73] :如何判断一个公司或团队是熵减:凝聚力强、上下一心,还是,熵增:一盘散沙、乌合之众?

    目录 前言 一盘散沙 乌合之众 凝聚力强 上下一心 一 股权结构与利益分配 一盘散沙 乌合之众 凝聚力强 上下一心 二 组织架构与岗位职责 一盘散沙 乌合之众 凝聚力强 上下一心 三 战略目标 一盘散沙 乌合之众 凝聚力强 上下一心 四 规
  • Cloudflare 重定向配置

    最近把之前的一个网站域名换成另一个域名 想要添加一下重定向 避免流量流失 虽然本来就没流量 然后在 Cloudflare 配置时尝试多次都失败了 遇到各种 Your connection is not private 或者 Webpage
  • 代码审查常见问题,建议收藏

    最近某宝弹窗事件导致其APP被大量用户删除 影响极其恶劣 我在想 如果他们的内部代码审查更加严格一点 少走形式 就能将隐患扼杀在摇篮里了 基于此 我们部门专门成立了由小组长和核心成员组成的代码评审组 将以前的代码评审模式进行了一些优化 加强
  • Win10 设备管理器一个USB设备描述符请求失败解决方法

    问题 进入设备管理器 发现 通用串行总线控制器 下有一项带有黄色 未知USB设备 设备描述符请求失败 或者 解决方法如下 1 点击Windows键 R或者 点击系统桌面左下角 开始 在开始菜单中点击 运行 在运行对话框中输入 service
  • 彻底学会IO流

    概述 IO流就是用来处理设备间数据传输问题的 常见的应用 文件复制 文件上传 文件下载 IO的数据传输 可以看做是一种数据的流动 按照流动的方向 已内存为参照物 进行读写操作 IO可以保存到文件 其实就是内存在读取 内存在写入 而且不会消失
  • Linux常用命令记录

    1 查询当前文件夹下各个文件尺寸大小 du h max depth 1 查看当前目录下文件总共占用的空间 du sh 查看当前目录下各个文件或目录分别占用的空间大小 du sh 2 查询端口占用 lsof i xxxx 3 防火墙允许端口
  • Jaspersoft 报表: 基于JDBC填充报表数据

    第一步 在Jaspersoft Studio工具中新建JDBC数据源 然后Next 选择 Database JDBC Connection 点击Test 显示 Successful 然后Finish 第二步 新建报表模板 1 新建报表模板人
  • IMU标定算法流程

    由于VIO中 普遍使用的是精度较低的imu 所以其需要一个较为准确的内参数和noise的估计 Noise大家通常使用Allan方差进行估计可以得到较为可信的结果 这里不赘述了 内参数标定比较方便的一个工具就是imu tk 所以本篇文章主要详
  • qml扩展插件的创建与使用(添加qml文档)

    前言 笔者之前记录过如何使用qml模块 qml自定义Quick模块 使用qml源码 白杨树下 的博客 CSDN博客 在设计器中使用qml自定义Quick模块 使用qml源码 白杨树下 的博客 CSDN博客 qml设计器 笔者也没计划要再复制
  • 程序员该如何学习技术

    程序员该如何学习技术 前言 学习是第一生产力 我从来都是这么认为的 人只有只有不断地学习才能意识到自己的缺点和不足 身为程序员 我更认为人们应当抱着终身学习的想法实践下去 这是我所一直践行且相信的 高处不胜寒 只有站在更高的地方 才能欣赏更