一、前言

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 = 0 var a = 5;
变量类型 强类型 弱类型,根据值确定 弱类型
变量赋值 a = 100; a = 100 let a = 100;
变量空值 NULL nil 空(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 = realpart class ClassName { constructor(参数列表) { // 初始化实例属性 this.属性名 = 值; } }
继承 无,手动复制struct class DerivedClassName(BaseClassName): class Child extends Parent {
线程和协程 pthread_create thread.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

Logo

火山引擎开发者社区是火山引擎打造的AI技术生态平台,聚焦Agent与大模型开发,提供豆包系列模型(图像/视频/视觉)、智能分析与会话工具,并配套评测集、动手实验室及行业案例库。社区通过技术沙龙、挑战赛等活动促进开发者成长,新用户可领50万Tokens权益,助力构建智能应用。

更多推荐