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

一些想法:关于学习一门新的编程语言

很多人可能长期使用一种编程语言,并感到很有成就感和舒适感,发现学习一种新的编程语言的想法令人生畏而痛苦。或者可能知道并使用多种编程语言,但有一段时间没有学习新的语言。更或者可能只是好奇别人是如何潜心学习新的编程语言并迅速取得成效的。无论学习新的编程语言有多容易或多困难,这篇文章解释了我如何学习新的编程语言及一些思考。虽然人们学习的方式不同,但发现我自己的过程很有趣,特此记录下来。

背景介绍

  • 编程语言N+1

这篇文章并不是针对学习编程的。学习第一门编程语言要比学习另外一门语言难得多。原因是计算机编程中涉及许多抽象的概念。当第一次接触编程时,大多数语言都要求理解迭代、作用域、(不)可变性、数组、模块、函数等概念。好消息是,当学习一种额外的语言时,可能已经熟悉了常见的概念,因此可以采取更精简的方法,以便快速上手。

  • 课程、视频、练习

网上有很多教授各种编程语言的材料,但我觉得结构化的课程、视频或练习并不高效。如果已经知道常见的编程概念,并且对想在新的编程语言中建立的东西有一个想法,那么制定自己的课程会更有效率。跳来跳去的材料会专注于新颖的、真正需要的信息。通过别人设计的一系列练习,可能会把时间花在练习错误的事情上,因为通常自己才是最了解应该练习什么的人。课程、视频和练习往往是一种“按部就班 ”的体验,这会以一种线性的方式接触到信息,无论它在此时是否有用。

1. 了解计算模型

计算模型描述了程序如何被计算机执行和运行。计算模型包括一组计算规则、数据类型、语法和语义约束,以及算法和数据结构。这些计算模型可以有不同的实现方式,例如,一些编程语言使用堆栈模型来实现计算,而另一些编程语言使用寄存器模型。计算模型的选择和设计关系到程序的执行效率和可靠性。

一种新的编程语言的第一个问题应该是 "它的计算模型是什么?"。可悲的是,许多语言手册和网站除了描述支持哪些编程范式(面向对象、串联、函数式、逻辑编程等)之外,并没有描述计算模型。实际的计算模型可能只有在后来才会完全显现出来。或者它可能在语言标准文件中表达得太详细了,以至于在早期就没有用处了。在任何情况下,都值得阅读编程语言的网站,了解有关计算模型的信息,以把握大局。

为了编写程序,需要了解的是计算模型。在学习一门新的语言时,我们往往过多地考虑语法和语言特征。计算模型告诉我们如何将需求分解成程序。在如何组织数据和代码方面,我们对待逻辑编程的方式与面向对象编程不同。语法,甚至在某种程度上,语言的特点都不重要。了解计算模型还可以帮助我们将新的编程语言与其他语言相对比,特别是已经知道的编程语言。它呈现出一些新的概念,让我们知道编程语言之间会有多大的不同,以及在哪些方面需要重新学习。

2. 语言教程

在熟悉了编程语言的计算模型后,下一步就是学习基本的语法和概念。大多数现代编程语言在网上都有一个官方教程。该教程介绍了语言元素,通常有简短的例子,其目录概述了该语言的内容。该教程可以在几小时或几天内完成。与完整的课程不同,官方编程语言教程往往适合非线性阅读,当一门语言的某些知识已经很熟悉或无足轻重时,这很有帮助。

我记得几年前在一个下午就读完了Python教程,但要注意:这时可能会写出有效的语法,但还不会写出成文法的代码。我们可以说:我可以用任何语言写 Hello World。但为了写出表达自然、有效利用语言优势的程序,需要付出更多的努力。

3. 编写练习程序

在意识到语言元素之后,下一步是探索语言的工作方式。这可以通过编写小程序来完成。通常这些练习程序是已经用其他语言解决过的熟悉的任务。如果想写游戏,也许是 Ping Pong。如果写网络应用,它可能是一个TODO List。有很多不同的知名程序可以写。在编写练习程序的过程中,会遇到一些语法错误或问题。学会解释常见的错误信息是很重要的,因为它们会在以后更复杂的场景中出现,如果以前没有见过它们,就会更难解决它们。

还会遇到需要在标准库或语言参考手册中寻找解决方案的常见任务。无论是解析命令行选项、正则表达式匹配、HTTP请求,还是错误处理,语言可能都有办法做到。练习程序提供了一个简单的环境,可以探索编程语言的基本用法。

4. 获得对语言的更深的理解

一旦写了一些练习程序,就可以开始写自己的程序来解决新问题。在这个阶段,开始有了成效,但仍有更多的东西需要学习。特别是,为了写出自然的代码,必须研究该语言的习惯和模式。一旦我对一种语言的基础知识有了经验,我喜欢阅读标准库、流行库和流行应用程序的源代码。一开始这很难,因为它们使用了不熟悉的语言特性或库的依赖关系,但在跟进一个程序的未知部分后,会发现阅读其他程序会变得更容易,因为语言知识已经扩大。

在这一点上,也值得寻找风格指南、语言习惯手册、以及关于常见故障的文档。这些将提供关于用新的编程语言进行原生思考的信息。这也是熟练掌握该语言并有能力自信地阅读和编写真实程序所需要的。虽然我以线性顺序介绍了一些步骤,但学习复杂的科目往往是一个反复的过程。有时我发现自己随着理解的发展在各个步骤之间来回跳动。

总结

学习一门新的编程语言,无论怎么做,都是很耗时的。然而,这并不需要全部在前期进行,经过几天的阅读文档和实验练习程序,就可以完成基本任务。通过研究流行的程序和阅读指南来学习如何有效地使用一种语言,是我发现的达到流利程度的最快方法。最后,它只是需要实践、实践、再实践!

相关文章:

一些想法:关于学习一门新的编程语言

很多人可能长期使用一种编程语言,并感到很有成就感和舒适感,发现学习一种新的编程语言的想法令人生畏而痛苦。或者可能知道并使用多种编程语言,但有一段时间没有学习新的语言。更或者可能只是好奇别人是如何潜心学习新的编程语言并迅速取得成…...

线性代数——矩阵

文章目录 版权声明基础概念矩阵的运算矩阵的加法数与矩阵相乘矩阵的乘法矩阵的转置 矩阵和方程组方阵和行列式伴随矩阵可逆矩阵分块矩阵矩阵的初等变换初等矩阵等价矩阵行阶梯矩阵行最简矩阵初等变换在矩阵求解中的应用 矩阵的秩 版权声明 本文大部分内容皆来自李永乐老师考研…...

taro之小程序持续集成

小程序持续集成 Taro 小程序端构建后支持 CI(持续集成)的插件 tarojs/plugin-mini-ci。 目前已支持(企业)微信、京东、字节、支付宝、钉钉、百度小程序 功能包括: 构建完毕后自动唤起小程序开发者工具并打开项目上传…...

Ceph入门到精通-Ceph 编排器简介

第 1 章 Ceph 编排器简介 作为存储管理员,您可以将 Ceph 编排器与 Cephadm 实用程序搭配使用,能够发现设备并在 Red Hat Ceph Storage 集群中创建服务。 1.1. 使用 Ceph Orchestrator Red Hat Ceph Storage Orchestrators 是经理模块,主要…...

【Feign扩展】OpenFeign日志打印Http请求参数和响应数据

SpringBoot使用log4j2 在Spring Boot中所有的starter 都是基于spring-boot-starter-logging的&#xff0c;默认使用Logback。使用Log4j2的话&#xff0c;你需要排除 spring-boot-starter-logging 的依赖&#xff0c;并添加 spring-boot-starter-log4j2的依赖。 配置依赖 <…...

MongoDB (零) 安装和简单使用

1.安装(Ubuntu) 1.1.安装gnupg sudo apt-get install gnupg1.2.获取GPG Key curl -fsSL https://pgp.mongodb.com/server-6.0.asc | \sudo gpg -o /usr/share/keyrings/mongodb-server-6.0.gpg \--dearmor1.3.创建本地文件 echo "deb [ archamd64,arm64 signed-by/usr…...

Java中的异常是什么?

Java中的异常是指在程序运行时发生的错误或异常情况。这些异常可能会导致程序崩溃或无法正确执行&#xff0c;因此需要在代码中进行处理。Java中的异常机制可以帮助程序员捕获并处理异常&#xff0c;从而保证程序的稳定性和可靠性。 Java中的异常分为两种类型&#xff1a;受检…...

微短剧“小阳春”,“爱优腾芒”抢滩登陆?

降本增效一整年&#xff0c;长视频平台们似乎扭转了市场对于它们“烧钱”的印象。 爱奇艺宣布2022全年盈利&#xff0c;腾讯视频宣布从去年10月起开始盈利&#xff0c;视频平台们结束了一场“无限战争”。 与此同时&#xff0c;随着短视频平台的崛起&#xff0c;视频内容的形…...

C++菱形继承(再剖析)

当子类对象给父类对象的时候&#xff0c;怎么找公共的虚基类&#xff08;A&#xff09; 就得通过偏移量来算虚基类的位置 ---------------------------------------------------------------------------------------------------------------------------- 我们来分析一下B…...

java获取星期几

如果你要问 java什么时候学习比较好&#xff0c;那么答案肯定是 java的星期几。 在 Java中&#xff0c;你可以使用 public static void main &#xff08;&#xff09;方法来获取一个类的所有成员变量&#xff0c;然后在所有类中调用这个方法来获取对象的所有成员变量。它能以对…...

【TypeScript】03-TypeScript基本类型

TypeScript基本类型 在TypeScript中&#xff0c;基本类型是非常重要的一部分&#xff0c;下面我们将详细介绍TypeScript中的基本类型。 基本类型约束 在TypeScript中&#xff0c;可以使用基本类型来约束变量的类型。常见的基本类型有&#xff1a; number&#xff1a;表示数…...

什么是跨域?

什么是跨域 什么是跨域&#xff1f; 什么是同源策略及其限制内容&#xff1f; 同源策略是一种约定&#xff0c;它是浏览器最核心也最基本的安全功能&#xff0c;如果缺少了同源策略&#xff0c;浏览器很容易受到XSS、CSRF等攻击。所谓同源是指"协议域名端口"三者相…...

Gradle理论与实践—Gradle构建脚本基础

Gradle构建脚本基础 Project: 根据业务抽取出来的一个个独立的模块Task&#xff1a;一个操作&#xff0c;一个原子性操作。比如上传一个jar到maven中心库等Setting.gradle文件&#xff1a;初始化及整个工程的配置入口build.gradle文件: 每个Project都会有个build.gradle的文件…...

【Vue 基础】vue-cli初始化项目及相关说明

目录 1. 创建项目 2. 项目文件介绍 3. 项目的其它配置 3.1 项目运行时&#xff0c;让浏览器自动打开 3.2 关闭eslint校验功能 3.3 src文件夹简写方法 1. 创建项目 vue create 项目名 2. 项目文件介绍 创建好的项目中包含如下文件&#xff1a; &#xff08;1&#xff09…...

【c语言】详解c语言#预处理期过程 | 宏定义前言

c语言系列专栏&#xff1a; c语言之路重点知识整合 创作不易&#xff0c;本篇文章如果帮助到了你&#xff0c;还请点赞支持一下♡>&#x16966;<)!! 主页专栏有更多知识&#xff0c;如有疑问欢迎大家指正讨论&#xff0c;共同进步&#xff01; 给大家跳段街舞感谢支持…...

内网远程控制软件哪个好用

市面上远程控制软件很多&#xff0c;但是支持纯内网环境&#xff08;无外网&#xff09;的很少。大部分远程控制软件可以在局域网用&#xff0c;但是它的数据流量还是要走软件公司服务器&#xff0c;也就是要走外网&#xff0c;所以在纯内网环境没法使用。那么什么软件支持纯内…...

【计算机基本原理-数据结构】数据结构中树的详解

【计算机基本原理-数据结构】数据结构中树的详解 1&#xff09;总览2&#xff09;树的相关概念3&#xff09;二叉树、满二叉树、完全二叉树4&#xff09;二叉查找树 - BST5&#xff09;平衡二叉树 - AVL6&#xff09;红黑树7&#xff09;哈弗曼树8&#xff09;B 树9&#xff09…...

数字设计小思 - D触发器与死缠烂打的亚稳态

前言 本系列整理数字系统设计的相关知识体系架构&#xff0c;为了方便后续自己查阅与求职准备。在FPGA和ASIC设计中&#xff0c;D触发器是最常用的器件&#xff0c;也可以说是时序逻辑的核心&#xff0c;本文根据个人的思考历程结合相关书籍内容和网上文章&#xff0c;聊一聊D…...

Notes/Domino 11.0.1FP7以及在NAS上安装Domino等

大家好&#xff0c;才是真的好。 目前HCL在还是支持更新的Notes/Domino主要是三个版本&#xff0c;V10、11和12&#xff0c;这不,上周HCL Notes/Domino 11.0.1居然推出了FP7补丁包程序。 从V10.0.1开始&#xff0c;Domino的FP补丁包程序主要是用来修复对应主要版本中的一些问…...

【VM服务管家】VM4.x算子SDK开发_3.3 模块工具类

目录 3.3.1 位置修正&#xff1a;位置修正算子工具的使用方法3.3.2 模板保存&#xff1a;实现模板自动加载的方法3.3.3 模板匹配&#xff1a; 获取模板匹配框和轮廓点的方法3.3.4 模板训练&#xff1a;模板训练执行完成的判断方法3.3.5 图像相减&#xff1a;算子SDK开发图像相减…...

【Oracle APEX开发小技巧12】

有如下需求&#xff1a; 有一个问题反馈页面&#xff0c;要实现在apex页面展示能直观看到反馈时间超过7天未处理的数据&#xff0c;方便管理员及时处理反馈。 我的方法&#xff1a;直接将逻辑写在SQL中&#xff0c;这样可以直接在页面展示 完整代码&#xff1a; SELECTSF.FE…...

QMC5883L的驱动

简介 本篇文章的代码已经上传到了github上面&#xff0c;开源代码 作为一个电子罗盘模块&#xff0c;我们可以通过I2C从中获取偏航角yaw&#xff0c;相对于六轴陀螺仪的yaw&#xff0c;qmc5883l几乎不会零飘并且成本较低。 参考资料 QMC5883L磁场传感器驱动 QMC5883L磁力计…...

抖音增长新引擎:品融电商,一站式全案代运营领跑者

抖音增长新引擎&#xff1a;品融电商&#xff0c;一站式全案代运营领跑者 在抖音这个日活超7亿的流量汪洋中&#xff0c;品牌如何破浪前行&#xff1f;自建团队成本高、效果难控&#xff1b;碎片化运营又难成合力——这正是许多企业面临的增长困局。品融电商以「抖音全案代运营…...

Ascend NPU上适配Step-Audio模型

1 概述 1.1 简述 Step-Audio 是业界首个集语音理解与生成控制一体化的产品级开源实时语音对话系统&#xff0c;支持多语言对话&#xff08;如 中文&#xff0c;英文&#xff0c;日语&#xff09;&#xff0c;语音情感&#xff08;如 开心&#xff0c;悲伤&#xff09;&#x…...

使用 Streamlit 构建支持主流大模型与 Ollama 的轻量级统一平台

🎯 使用 Streamlit 构建支持主流大模型与 Ollama 的轻量级统一平台 📌 项目背景 随着大语言模型(LLM)的广泛应用,开发者常面临多个挑战: 各大模型(OpenAI、Claude、Gemini、Ollama)接口风格不统一;缺乏一个统一平台进行模型调用与测试;本地模型 Ollama 的集成与前…...

稳定币的深度剖析与展望

一、引言 在当今数字化浪潮席卷全球的时代&#xff0c;加密货币作为一种新兴的金融现象&#xff0c;正以前所未有的速度改变着我们对传统货币和金融体系的认知。然而&#xff0c;加密货币市场的高度波动性却成为了其广泛应用和普及的一大障碍。在这样的背景下&#xff0c;稳定…...

IP如何挑?2025年海外专线IP如何购买?

你花了时间和预算买了IP&#xff0c;结果IP质量不佳&#xff0c;项目效率低下不说&#xff0c;还可能带来莫名的网络问题&#xff0c;是不是太闹心了&#xff1f;尤其是在面对海外专线IP时&#xff0c;到底怎么才能买到适合自己的呢&#xff1f;所以&#xff0c;挑IP绝对是个技…...

使用Spring AI和MCP协议构建图片搜索服务

目录 使用Spring AI和MCP协议构建图片搜索服务 引言 技术栈概览 项目架构设计 架构图 服务端开发 1. 创建Spring Boot项目 2. 实现图片搜索工具 3. 配置传输模式 Stdio模式&#xff08;本地调用&#xff09; SSE模式&#xff08;远程调用&#xff09; 4. 注册工具提…...

GruntJS-前端自动化任务运行器从入门到实战

Grunt 完全指南&#xff1a;从入门到实战 一、Grunt 是什么&#xff1f; Grunt是一个基于 Node.js 的前端自动化任务运行器&#xff0c;主要用于自动化执行项目开发中重复性高的任务&#xff0c;例如文件压缩、代码编译、语法检查、单元测试、文件合并等。通过配置简洁的任务…...

【Android】Android 开发 ADB 常用指令

查看当前连接的设备 adb devices 连接设备 adb connect 设备IP 断开已连接的设备 adb disconnect 设备IP 安装应用 adb install 安装包的路径 卸载应用 adb uninstall 应用包名 查看已安装的应用包名 adb shell pm list packages 查看已安装的第三方应用包名 adb shell pm list…...