如何学习一门编程语言_学一门编程语言要多久-程序员宅基地


很多人喜欢争论什么什么编程语言好,我认为这个话题如果不限定应用范围,就毫无意义。

每种编程语言必然有其优点和缺点,这也决定了它有适合的应用场景和不适合的应用场景。现代软件行业,想一门编程语言包打天下是不现实的。这中现状也造成了一种现象,一个程序员往往要掌握多种编程语言。

学习任何一门编程语言,都会面临的第一个问题都是:如何学习 XX 语言?

我不想说什么多看、多学、多写、多练之类的废话。世上事有难易乎?无他,唯手熟尔。谁不知道熟能生巧的道理?

我觉得有必要谈谈的是:如何由浅入深的学习一门编程语言?学习所有编程语言有没有一个相对统一的学习方法?

曾几何时,当我还是一名小菜鸟时,总是叹服那些大神掌握多门编程语言。后来,在多年编程工作和学习中,我陆陆续续也接触过不少编程语言:C、C++、Java、C#、Javascript、shell 等等。每次学习一门新的编程语言,掌握程度或深或浅,但是学习的曲线却大抵相似。

下面,我按照个人的学习经验总结一下,学习编程语言的基本步骤。

学习编程语言的步骤

基本语法

首先当然是了解语言的最基本语法。

控制台输出,如 C 的 printf,Java 的 System.out.println 等。

普通程序员的第一行代码一般都是输出“Hello World” 吧。

·        基本数据类型

不同编程语言的基本数据类型不同。基本数据类型是的申请内存空间变得方便、规范化。

·        变量

不同编程语言的声明变量方式有很大不同。有的如 Java 、C++ 需要明确指定变量数据类型,这种叫强类型定义语言。有的语言(主要是脚本语言),如 Javascript、Shell 等,不需要明确指定数据类型,这种叫若类型定义语言。

还需要注意的一点是变量的作用域范围和生命周期。不同语言变量的作用域范围和生命周期不一定一样,这个需要在代码中细细体会,有时会为此埋雷。

·        逻辑控制语句

编程语言都会有逻辑控制语句,哪怕是汇编语言。

掌握条件语句、循环语句、中断循环语句(break、continue)、选择语句。一般区别仅仅在于关键字、语法格式略有不同。

·        运算符

掌握基本运算符,如算术运算符、关系运算符、逻辑运算符、赋值运算符等。

有些语言还提供位运算符、特殊运算符,视情节掌握。

·        注释(没啥好说的)

·        函数

编程语言基本都有函数。注意语法格式:是否支持出参;支持哪些数据作为入参,有些语言允许将函数作为参数传入另一个参数(即回调);返回值;如何退出函数(如 Java、C++的 return,)。

数组、枚举、集合

枚举只有部分编程语言有,如 Java、C++、C#。

但是数组和集合(有些语言叫容器)一般编程语言都有,只是有的编程语言提供的集合比较丰富。使用方法基本类似。

常用类

比较常用的类(当然有些语言中不叫类,叫对象或者其他什么,这个不重要,领会精神)请了解其 API 用法,如:字符串、日期、数学计算等等。

语言特性

语言特性这个特字反映的就是各个编程语言自身的"独特个性",这涉及的点比较多,简单列举一些。

编程模式

比较流行的编程模式大概有:

面向对象编程,主要是封装、继承、多态;函数式编程,主要是应用 Lambda;过程式编程,可以理解为实现需求功能的特定步骤。

每种编程模式都有一定的道理,我从不认为只有面向对象编程才是王道。

Java是面向对象语言,从 Java8 开始也支持函数编程(引入 Lambda 表达式);C++ 可以算是半面向对象,半面向过程式语言。

语言自身特性

每个语言自身都有一些重要特性需要了解。例如,学习 C、C++,你必须了解内存的申请和释放,了解指针、引用。而学习 Java,你需要了解 JVM,垃圾回收机制。学习 Javascript,你需要了解 DOM 操作等。

代码组织、模块加载、库管理

一个程序一般都有很多个源代码文件。这就会引入这些问题:如何将代码文件组织起来?如何根据业务需要,选择将部分模块启动时进行加载,部分模块使用懒加载(或者热加载)?

最基本的引用文件就不提了,如C、C++的#include,Java 的 import 等。

针对代码组织、模块加载、库管理这些问题,不同语言会有不同的解决方案。

如 Java 可以用 maven、gradle管理项目依赖、组织代码结构;Javascript (包括Nodejs、jquery、react 等等库)可以用 npm、yarn 管理依赖,用webpack 等工具管理模块加载。

容错处理

程序总难免会有 bug

所以为了代码健壮性也好,为了方便定位问题也好,代码中需要有容错处理。常见的手段有:

·        异常

·        断言

·        日志

·        调试

·        单元测试

输入输出和文件处理

这块知识比较繁杂。建议提纲挈领的学习一下,理解基本概念,比如输入输出流、管道等等。至于 API,用到的时候再查一下即可。

回调机制

每种语言实现回调的方式有所不同,如 .Net 的 delegate (大量被用于 WinForm 程序);Javascript 中函数天然支持回调:Javascript 函数允许传入另一个函数作为入参,然后在方法中调用它。其它语言的回调方式不一一列举。

序列化和反序列化

首先需要了解的是,序列化和反序列化的作用是为了在不同平台之间传输对象。

其次,要知道序列化存在多种方式,不同编程语言可能有多种方案。根据应用的序列化方式,选择性了解即可。

进阶特性

以下学习内容属于进阶性内容。可以根据开发需要去学习、掌握。需要注意的是,学习这些特性的态度应该是不学则已,学则死磕。因为半懂半不懂,特别容易引入问题。

对于半桶水的同学,我想说:放过自己,也放过别人,活着不好吗?

并发编程:好处多多,十分重要,但是并发代码容易出错,且出错难以定位。要学习还是要花很大力气的,需要了解大量知识,如:进程、线程、同步、异步、读写锁等等。

反射:让你可以动态编程(慎用)。

泛型:集合(或者叫容器)的基石。精通泛型,能大大提高你的代码效率。

元数据:描述数据的数据。Java 中叫做注解。

库和框架

学习一门编程语言,难免需要用到围绕它构建的技术生态圈——库和框架。这方面知识范围太庞大,根据实际应用领域去学习吧。比如搞 JavaWeb,你多多少少肯定要用到 Spring、Mybatis、Hibernate、Shiro等大量开发框架;如果做 Javascript 前端,你可能会用到 React、Vue、Angular 、jQuery 等库或框架。

小结

总结以上,编程语言学习的道路是任重而道远的,未来是光明的。

最后一句话与君共勉:路漫漫兮其修远,吾将上下而求索。


版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/qianfeng_dashuju/article/details/79962272

智能推荐

Springboot集成mqtt【demo】_springboot mtqq demo-程序员宅基地

文章浏览阅读1.3k次。项目目录如下启动类如下import org.eclipse.paho.client.mqttv3.MqttException;import org.springframework.boot.SpringApplication;import org.springframework.boot.autoconfigure.EnableAutoConfiguration;import org.springframework.boot.autoconfigure.SpringBootApplicatio_springboot mtqq demo

C语言中的popen()函数_c popen函数 resource temporarily unavailable-程序员宅基地

文章浏览阅读3.3w次,点赞10次,收藏66次。Linux中的popen()函数可以在程序中执行一个shell命令,并返回命令执行的结果。有两种操作模式,分别为读和写。在读模式中,程序中可以读取到命令的输出,其中有一个应用就是获取网络接口的参数。在写模式中,最常用的是创建一个新的文件或开启其他服务等。头文件:#include 函数原型:FILE *popen(const char *command, const char *type_c popen函数 resource temporarily unavailable

新手小白也能做短视频自媒体,掌握方法和技巧,稳定每天200多_每天200百条视频怎么做-程序员宅基地

文章浏览阅读323次。大周跟很多新手小伙伴一样,都是从一个什么都不懂的小白,一步一步走到今天的,也遇到过各种各样的问题,坚持下去你就能赢。前期做得比较多,现在每天不去操作,也能有100-200的稳定收益,所以说做短视频自媒体是越到后期越赚钱的,新手小伙伴们完全可以去尝试操作,不要害怕失败。我们前期的收益主要来源与播放量的收益,就是平台给的广告分成,粉丝用户看你的短视频作品时下方会有下拉广告,所以说你的收益是与播放量挂钩的。新手小白经常会出现作品被下架、扣分和重复度过高的问题,导致没有收益或被封号,今天大周分享几个我常用的小_每天200百条视频怎么做

HttpClient 四种请求访问代码 HttpGet HttpPost HttpPut HttpDelete_httpput putrequest = new httpput-程序员宅基地

文章浏览阅读4.9k次。逻辑:String url = "http://www.baidu.com";//将要访问的url字符串放入HttpPost中HttpPost httpPost = new HttpPost(url);//请求头 放置一些修改http请求头和cookiehttpPost.setHeader("Accept", "application/json");......//如果_httpput putrequest = new httpput

EG网关串口连接施耐德M340PLC应用案例-程序员宅基地

文章浏览阅读971次,点赞17次,收藏18次。设置步骤:点击需要报警的变量后面的【报警】→【新增】→填写报警信息与条件→【确定】。【寄存器类型】:在施耐德M340 PLC中,离散量的输入输出使用的是%M地址,模拟量使用的是%MW地址(Modbus寄存器对应关系可以参考下面案例的采集变量对照表)。步骤:点击【后台管理】(只有管理账号才有此权限)→【设备中心】→【EG设备管理】→【+新增】→填写设备信息→点击【保存】。Modbus参数设置完成后,把修改好的程序下载到PLC中,再打开【应用程序树】,点击【GVL】,将变量进行修改。

合成生物学|第一期:什么是合成生物学_如何理解合成生物学的层级结构?-程序员宅基地

文章浏览阅读5.9k次,点赞2次,收藏7次。这个系列是关于天津大学宋凯教授的《合成生物学导论》的学习笔记,将对合成生物学的概念、合成生物系统的设计、数学模拟与性能分析以及合成生物学基础与应用研究进行一个概括性记述,目的主要是通过合成生物学这个前沿方向了解学科交叉融合现状与方法以及掌握一些工程性方法与思路。1. 合成生物学的诞生:1953年,克里克和沃森发现了DNA双螺旋结构、开始了解读生物遗传密码的第一步;2003年,人类基因组计划..._如何理解合成生物学的层级结构?

随便推点

windows11,打不开IE浏览器,自动跳转到edge浏览器_res://ieframe.dll-程序员宅基地

文章浏览阅读3.7w次,点赞4次,收藏17次。目前的 暂时解决办法是,1. 打开 Edge浏览器,--设置2. 点击左上角 设置--默认浏览器3. Internet Explorer模式页面--添加 ‘自己需要IE浏览器打开的网址’,然后 就会在 Edge中,再次打开网址尝试;(次模式 会保存30天,30天后需 再次操作)..._res://ieframe.dll

Oracle12c 容器数据库详解_oracle fcpsb-程序员宅基地

文章浏览阅读1.9w次。如果是非生产环境,容器数据库CDB 这功能还可以。但是,如果生产使用CDB,也可以,但是感觉很鸡肋,一般上生产的,最好为非CDB 数据库。1, CDB 容器数据2, PDB 可插拔式数据库3,根容器 CDB$ROOT4, 种子可插拔数据库 PDB$SEED5, 克隆,通过 种子库(pdb$seed 不能修改,只读),pdb库,非CDB库,创建可插拔数据库。6,非CDB,ORACLE12C 没有创建..._oracle fcpsb

php simplexml_PHP的SimpleXML处理-程序员宅基地

文章浏览阅读347次。PHP版本5引入了SimpleXML,SimpleXML是一种用于读写XML的新应用程序编程接口(API)。 在SimpleXML中,表达式如下: $doc->rss->channel->item->title 从文档中选择元素。 只要您对文档的结构有所了解,这些表达式就很容易编写。 但是,如果您不确切知道感兴趣的元素出现在何处(例如Docbook,HTML和类似的叙..._php simplexml

php超链接颜色,html超链接默认字体颜色怎么清除-程序员宅基地

文章浏览阅读594次。方法:1、在body中使用link、alink、vlink属性来设置其他颜色,例“”。2、先使用“:link”、“:visited”、“:active”选择器选中a元素;然后使用color属性设置其他颜色。本教程操作环境:windows7系统、CSS3&&HTML5版、Dell G3电脑。为了突出超链接,超链接文字通常采用与其他文字不同的颜色,超链接文字的下端还会加一条横线。网页的..._php的href颜色

SourceInsight 4.0使用说明_cppcheck在sourceinsight上使用-程序员宅基地

文章浏览阅读1.8k次,点赞3次,收藏31次。Source Insight是一个面向项目开发的程序编辑器和代码浏览器,它拥有内置的对C/C++,C#和Java等程序的分析。能分析源代码并在工作的同时动态维护它自己的符号数据库,并自动显示有用的上下文信息。Options->Key Assignments 进入快捷键设置界面,找到自己想要设置的命令。如下图所示选择“Exit”命令,可以看到系统默认的快捷键是“Alt+F4”。_cppcheck在sourceinsight上使用

nginx 开启websocket支持_elang启用websocket-程序员宅基地

文章浏览阅读1.8k次。WebSocket是目前比较成熟的技术了,WebSocket协议为创建客户端和服务器端需要实时双向通讯的webapp提供了一个选择。其为HTML5的一部分,WebSocket相较于原来开发这类app的方法来说,其能使开发更加地简单。大部分现在的浏览器都支持WebSocket,比如Firefox,IE,Chrome,Safari,Opera,并且越来越多的服务器框架现在也同样支持WebSocket。在实际的生产环境中,要求多个WebSocket服务器必须具有高性能和高可用,那么WebSocket协议就需要_elang启用websocket

推荐文章

热门文章

相关标签