当前位置: 首页 > ai >正文

如何快速学习一门新编程语言

一、前言

Hi,大家好,作为一个程序员,编程语言这么多,前端js、后端go、java、python,嵌入式c、c++…且每几年可能都冒出一些新的语言,比如说前几年出现的go语言,这几年各大厂后端实现都切go语言了,又比如说linux都要使用rust语言重写了,我们难免要学习新的语言。如何快速学习一门新语言,这里斗胆提一些我的心得,相当于是我的一些笔记,以便后续查阅,若能帮到诸君,不胜荣幸。

1.1 “技” 和 “术”

目前LLM盛行,对于新技术的学习借助LLM效率有非常的提升,网络上也有一些介绍方法论的东西,但总感觉飘在空中,不够具体,实践上没有指引,借用LLM当然能提升效率,但是这些方法论始终是LLM的,不是我们自己的。所谓“技术”,分“技” 和 “术”,所谓"技" 的核心含义: 具体操作能力。比如我们会C语言,那C语言就是我们的技能,python语言也是我们的技能。但是这么多语言,我们不能学完,这么多技能,不可能全掌握。所谓"术",就是这些技能的方法论,一通百通,比如“如何快速掌握一门新的编程语言”就是“术”。 个人发展的前几年可以通过提升自己的技能,将"技"通过case by case的方式累计,但是随着年龄增长,一定要掌握“术”的东西,因为面试时面试官可不会问你每一项技能的具体情况。尤其是当下LLM如此强大,每一个"技" 都可以快速通过LLM获得,或者直接通过LLM实现。我们更要掌握“术”,也就是方法论。编程语言是一辆辆车,学习编程语言的方法,就是开车的方法。

1.2 文档目标

介绍方法论的文章网络上很多,这里旨在提供一份checklist,切实的可通过一一对应的方式,快速学习新语言。

1.3 面向对象

本文章面向对象是已经熟练掌握至少一门编程语言的程序员。

二、正文

2.1 学习效率公式

眼花缭乱的编程语言,其实都是大同小异,基本的设计原理都是接近的,70%是相近的,基于已有知识(意掌握的语言),主要聚焦于30%的语言特性差异即可,这其实也是类比的过程。

学习效率公式:

掌握速度 = (已有经验迁移 x 项目复杂度 / (特性差异 x 无效学习时间))

2.2 编程概念

什么是学习?学习是建立认知的过程。什么又是认知?认知就是将对象的概念明确的过程。其实编程语言中的概念:变量、函数、运算符、调试手段、并发性、内存管理、IO处理、面向对象等。主要关注与已掌握的语言的差异,我这里说的主要是语法的快速掌握。

可按如下步骤推进:

1、快速查阅语言特性:

脚本语言 or 编译语言?

面向流程 or 面向对象?

是否是类C语言?

语言特色,如go语言适合高并发,适合后台开发。C语言可以直接底层内存,适合嵌入式等。

2、hello world & 1+1

写一个hello word程序,计算1+1,快速掌握变量定义,函数定义,调试printf实现,如何格式化打印。(粗暴点,掌握了printf的使用,其实就可以开始编程调试了hahaha~)

3、语法学习

根据如下check list,对比已知语言,填写差异项即可。对照checklist,2小时基本可以掌握语法差异。

4、demo开练

掌握基本语法,直接写demo练习。

4、高级feature支持情况和学习

高级feature如泛型、元编程、内存管理gc、函数式编程、闭包,线程创建等可以靠后学习,这是从1到100的过程。

2.3 语法自检表

以博主为例,我是掌握C语言和python的语言基础上,学习JS语言。建立如下语法对比表格。

语法概念C语言python目标语言(JS)
行尾标识;换行符;
格式化打印printf(“love you %d year”, 10000);print(“love you %d year” % 10000)console.log(“Name: %s, Age: %d, Height: %f”, name, age, height);
变量int a = 0;a = 0var a = 5;
变量类型强类型弱类型,根据值确定弱类型
变量赋值a = 100;a = 100let a = 100;
变量空值NULLnil空(Null)、未定义(Undefined)
变量生命周期栈变量: 函数内;
堆变量:全局
默认局部变量,global修饰为全局和C一样,全局变量和局部变量
函数定义int func(int a)def func_c(a,b)function myFunction(var1,var2)
函数体格式{}缩进{}
函数返回值单个返回值,可以返回指针支持返回变量列表return a,b不支持,可以以数组形式返回return [a,b]
逻辑运算符无特殊除//,not、or===, 绝对等于,值和类型均等于
分支条件if (!ok){};
switch-case
if not ok:if (time<20)
{
x=“Good day”;
}
循环语句for(i=0;i<10;i++) {}for a in listA:同C语言。for (var i=0;i<cars.length;i++)
{
/>}
面向对象支持不支持支持支持
类定义struc{int a;int b;}class MyClass:
i = 12345
def f(self):
return ‘hello world’
class MathUtils { static PI = 3.14; // 静态属性 static add(a, b) { // 静态方法 return a + b; } }
self指针传递传递struct指针类方法调用自动传递自动传递
构造函数定义class Complex: def _init_(self, realpart, imagpart): self.r = realpartclass ClassName { constructor(参数列表) { // 初始化实例属性 this.属性名 = 值; } }
继承无,手动复制structclass DerivedClassName(BaseClassName):class Child extends Parent {
线程和协程pthread_createthread.start_new_thread( print_time, (“Thread-1”, 2, ) )const worker = new Worker(‘worker.js’);
worker.postMessage({ data: ‘Hello’ });
GC机制
泛型不支持 (宏,C++支持template)支持支持
元编程宏,#define支持,class AddInfo(type): def new(cls, name, bases, attr): attr[‘info’] = ‘add by metaclass’ return super().new(cls, name, bases, attr) class Test(metaclass=AddInfo): pass支持,ProxyReflectSymbol
函数式编程不支持支持,lambda表达式支持,const sum = [1, 2, 3].reduce((acc, num) => acc + num, 0); // 6
闭包支持,static变量实现。支持,def f1(): n=999 def f2(): print(n)支持,var add = (function () { var counter = 0; return function () {return counter += 1;} })();

三、借用LLM

可以利用LLM给我们生成一份学习思路,当我们不知道如何问LLM时,可以让LLM给我们生成一份提示词

1、你好,我是一名掌握C语言和python的程序员,想要通过LLM学习javascript语言,请帮忙写一份提示词

2、将LLM生成的提示词喂给AI,生成学习报告

可以将上述表格喂给LLM,让其给我们输出报告,但是不建议。因为纸上得来终觉浅,这份表格就是让自己建立认知的过程。具体代码调试过程错误可以交给LLM来解决,通过对话方式即可。

四、学习网站

1、菜鸟教程 - 学的不仅是技术,更是梦想!

2、Learn X in Y Minutes: Scenic Programming Language Tours

http://www.xdnf.cn/news/14671.html

相关文章:

  • 【Linux】理解进程状态与优先级:操作系统中的调度原理
  • STM32HAL 旋转编码器教程
  • 自定义上下两个方向的柱形图
  • Vue.js 中的数字格式化组件:`FormattedNumber`
  • Note2.4 机器学习:Batch Normalization Introduction
  • 栅极驱动器选的好SiC MOSFET高效又安全
  • Microsoft AZ-900AI-900考证速过经验分享
  • docker部署后端服务的脚本
  • 大模型在急性冠脉综合征预测及诊疗方案制定中的应用研究
  • 大数据在UI前端的应用创新研究:用户偏好的动态调整与优化
  • JavaScript中Object()的解析与应用
  • 免费AI助手工具深度测评:Claude4本地化部署与实战应用指南
  • Spring Boot 项目实训 - 图书信息网站
  • Windows11系统上安装WM虚拟机及Ubuntu 22.04系统
  • ESP32 008 MicroPython Web框架库 Microdot 实现的网络文件服务器
  • 开源 java android app 开发(十三)绘图定义控件、摇杆控件的制作
  • 【策划所需编程知识】
  • Tomcat Maven 插件
  • 人工智能-基础篇-3-什么是深度学习?(DL,卷积神经网络CNN,循环神经网络RNN,Transformer等)
  • flink同步kafka到paimon,doris加速查询
  • 目标跟踪存在问题以及解决方案
  • 电脑远程控制另一台电脑无法连接怎么办
  • Java+Python智能化网盘【Day8-2】
  • MySQL基础维护实操手册:从启停到备份恢复
  • 【RAG面试题】如何获取准确的语义表示
  • 华为云Flexus+DeepSeek征文|基于Dify+ModelArts开发AI智能会议助手
  • 氨基酸的结构和作用
  • 小米路由器 AX3000T 解锁 SSH
  • 【机器学习与数据挖掘实战 | 医疗】案例18:基于Apriori算法的中医证型关联规则分析
  • linux网络编程socket套接字