程序员该如何学习技术

news2024/11/28 18:58:39

程序员该如何学习技术

前言

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

风景图

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

 

文章目录

  • 程序员该如何学习技术
    • 「查阅文档」
    • 「阅读源码」
    • 「勇于尝试」

 

「查阅文档」

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 / 的事故,但是你尝试过这个命令么?你知道这个命令输出之后是什么样子吗?你不知道,公司为我们提供的最有价值的东西,其实就是实战的机会。 我们所学习的技术,最终还是需要通过工作来变现,成为我们的经验。通过公司我们可以接触到真实的数据,了解真实的用户,观察真实的系统是怎样运转的,积累真正的经验…… ,给自己投资比什么都划算, 但是所谓的机会,只属于提前准备好的人,而大部分人只会随波逐流, 不要等到工作都安排到你身上了再去尝试。公司不是你的试验田,你也不该拿用户当小白鼠。若是公司没有给你机会,那只能说明你还没有准备好。

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

体验 GPT-4 后,回顾 OpenAI 发展历程及感悟

从 ChatGPT Plus 发布第一天就开始重度使用&#xff0c;刚刚和新发布的 GPT-4 进行了 20 多轮对话&#xff0c;来简单介绍下这几个模型背后的技术&#xff0c;并且分享下感受。 GPT 在发展历程中&#xff0c;一共经历了 4 个阶段&#xff0c;分别是 1、2、3、4。这几个阶段分别…

【VM服务管家】VM4.x算法模块开发_4.3 联合Halcon开发

目录 4.3.1 联合开发&#xff1a;集成HALCON第三方算子到VM工具箱的方法 4.3.1 联合开发&#xff1a;集成HALCON第三方算子到VM工具箱的方法 描述 环境&#xff1a;VM4.0及以上 VS2013 问题&#xff1a;有的用户在使用VisionMaster软件在开发视觉项目时&#xff0c;可能同时也…

来了来了,我使用 ChatGPT 开发了一个 AI 应用

ChatGpt 实在太火爆了&#xff0c;很多人在问我怎么使用 chatgpt 开发一个 AI 应用程序。这不就来了吗~ 开始 你所需要准备的一个OpenAI 的密钥和一点点代码来发送提示并返回结果&#xff0c;例如下面这段代码&#xff1a; import { OpenAIApi, Configuration } from openai…

基于RAM树莓派实现智能家居:语音识别控制,Socket网络控制,火灾报警检测,实时监控

目录 一 项目说明 ① 设计框架 ② 功能说明 ③ 硬件说明 ④ 软件说明 二 项目代码 <1> mainPro.c 主函数 <2> InputCommand.h 控制设备头文件 <3> contrlDevices.h 外接设备头文件 <4> bathroomLight.c 泳池灯 <5> livin…

GraphQL(三)DataLoader 详解

DataLoader是一个通用实用程序&#xff0c;用作应用程序数据获取层的一部分&#xff0c;通过批处理和缓存为各种远程数据源&#xff08;如数据库或 Web 服务&#xff09;提供简化且一致的 API 批处理 const user await userLoader.load(1); const invitedBy await userLoade…

【C++】7. auto和nullptr(c++11)

文章目录 一、auto二、nullptr 一、auto 在C98中&#xff0c;auto是一个存储类说明符&#xff0c;表示变量具有自动存储期&#xff0c;即在函数或块的作用域内创建和销毁。 在C11中&#xff0c;auto是一个类型占位符&#xff0c;表示变量的类型由其初始化器自动推断。 使用如下…

分类和扩展与继承

文章目录 [TOC](文章目录) 分类定义分类的使用使用场景使用注意点 Extension 扩展分类和扩展的区别 继承的定义使用注意点 新建一个分类 分类基础知识 分类 分类是指为已有的类添加方法&#xff0c;也可以说是将很多很复杂的代码划分为几个分区。 定义 分类的作用是扩展已有…

第十四届蓝桥杯大赛软件赛省赛 Java 大学 B 组题解

试题 A: 阶乘求和 本题总分&#xff1a;5 分 【问题描述】 令 S 1! 2! 3! ... 202320232023!&#xff0c;求 S 的末尾 9 位数字。 提示&#xff1a;答案首位不为 0。 【答案提交】 这是一道结果填空的题&#xff0c;你只需要算出结果后提交即可。本题的结果为一 个整数&am…

Linux信号:SIGCHLD信号和僵尸进程

1. SIGCHLD信号产生条件&#xff1a; &#xff08;1&#xff09;子进程终止&#xff1b; &#xff08;2&#xff09;子进程收到SIGSTOP暂停&#xff1b; &#xff08;3&#xff09;子进程处于暂停状态&#xff0c;收到SIGCONT被唤醒。 2. 捕捉SIGCHLD&#xff0c;避免僵尸进程&…

网络钓鱼:工作场所保护电子邮件安全的五个步骤

导语&#xff1a;Sophos电子邮件产品管理高级总监David Mitchell分享了他的主要技巧&#xff0c;以优化工作场所的电子邮件安全性。 Sophos电子邮件产品管理高级总监David Mitchell分享了他的主要技巧&#xff0c;以优化工作场所的电子邮件安全性。 尽管工作场所的聊天和即时…

云原生时代崛起的编程语言Go基础实战

文章目录 概述定义使用场景Go 安全 使用须知搜索工具Go基础命令标准库 基础语法Effective Go 概览命名规范注释变量常量(const)控制结构数据类型迭代&#xff08;range&#xff09;函数指针字符串和符文结构体(struct)方法接口(interface)泛型错误&#xff08;errors&#xff0…

iOS描述文件(.mobileprovision)一键申请

转载&#xff1a;IOS描述文件制作教程 iOS描述文件(.mobileprovision)一键申请 在主界面上点击描述文件按钮。 ​ 编辑切换为居中 添加图片注释&#xff0c;不超过 140 字&#xff08;可选&#xff09; 新建ios描述文件 然后点击新建&#xff0c;然后输入描述文件名称&…

数据库设计与前端框架

数据库设计与前端框架 学习目标&#xff1a; 理解多租户的数据库设计方案 熟练使用PowerDesigner构建数据库模型理解前端工程的基本架构和执行流程 完成前端工程企业模块开发 多租户SaaS平台的数据库方案 多租户是什么 多租户技术&#xff08;Multi-TenancyTechnology&a…

【密码算法 之六】CCM 浅析

CCM模式浅析 1. 综述2. 加密2.1 前置条件&#xff08;Prerequisites&#xff09;2.2 输入&#xff08;Input&#xff09;2.3 输出&#xff08;Output&#xff09;2.4 加密流程&#xff08;Steps&#xff09; 3. 解密3.1 前置条件&#xff08;Prerequisites&#xff09;3.2 输入…

Orangepi Zero2 全志H616简介

为什么学 学习目标依然是Linux 系统 &#xff0c;平台是 ARM 架构 蜂巢快递柜&#xff0c;配送机器人&#xff0c;这些应用场景用C51,STM32单片机无法实现 第三方介入库的局限性&#xff0c;比如刷脸支付和公交车收费设备需要集成支付宝SDK&#xff0c;提供的libalipay.so 是…

【VM服务管家】VM4.0平台SDK_2.2 模块API类

目录 2.2.1 方案保存&#xff1a;方案高速保存的方法2.2.2 Group模块&#xff1a;Group输入输出图像数据的方法2.2.3 模块操作类&#xff1a;设置输入图像、参数和ROI的方法2.2.4 图像源&#xff1a;通过图像源模块接口设置图像输入的方法2.2.5 图像源&#xff1a;通过SDK传入相…

go 语言环境安装(Windows 系统下安装)

go 语言官网:The Go Programming Language 下载 go 安装包的网址&#xff1a;All releases - The Go Programming Language go 支持很多种操作系统 Windows 系统下 - 安装和配置SDK 一、SDK 介绍 SDK 的全称是 Software Development Kit &#xff0c;即 软件开发工具包 二…

STM32物联网实战开发(1)——全新的程序框架

现在STM32公司主推的是HAL库的开发&#xff0c;标准库已经不再更新。通过STM32cubeMX的图形界面生成代码非常的方便。 一、程序框架的构想 1、STM32cubeMX 生成的代码与添加的应用代码分离&#xff1b; 2、利用 STM32cubeMX 重新生成代码&#xff0c;不影响应用代码&#xf…

zabbix配置钉钉告警(附含钉钉告警脚本 · 实战亲测无任何问题)

&#x1f341;博主简介 &#x1f3c5;云计算领域优质创作者   &#x1f3c5;华为云开发者社区专家博主   &#x1f3c5;阿里云开发者社区专家博主 &#x1f48a;交流社区&#xff1a;运维交流社区 欢迎大家的加入&#xff01; 文章目录 钉钉上操作&#xff08;钉钉告警以关…

密码学新进展:基于同态加密的数据保护是否会成为未来的趋势?

第一章&#xff1a;引言 在今天这个数字时代&#xff0c;数据的重要性不断增加&#xff0c;已经成为了现代社会最宝贵的财富之一。各种机构和企业在日常运营中都会处理大量的数据&#xff0c;包括用户信息、财务数据、产品销售数据等。这些数据的安全性非常重要&#xff0c;因…