前言

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

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

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

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

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

曾几何时,当我还是一名小菜鸟时,总是叹服那些大神掌握多门编程语言。后来,在多年编程工作和学习中,我陆陆续续也接触过不少编程语言:C、C++、Java、C#、Javascript、shell

等等。每次学习一门新的编程语言,掌握程度或深或浅,但是学习的曲线却大抵相似。

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

学习编程语言的步骤

基本语法

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

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

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

基本数据类型

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

变量

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

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

逻辑控制语句

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

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

运算符

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

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

注释(没啥好说的)

函数

编程语言基本都有函数。注意语法格式:是否支持出参;支持哪些数据作为入参,有些语言允许将函数作为参数传入另一个参数(即回调);返回值;如何退出函数(如 Java、C++的 return,)。【另外,想要成为一个优秀的、有能力程序员,做软件开发的话,就来学习C/C++吧!你如果感觉自学C/C++语言有困难的话,我本身是一个C/C++出身的程序员,我整理了一些学习C语言的视频在扣裙,大家有兴趣可以一起来学习,C/C++编程学习,--784,①43;后-133。

数组、枚举、集合

枚举只有部分编程语言有,如 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。

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

(1)异常

(2)断言

(3)日志

(4)调试

(5)单元测试

(6)输入输出和文件处理

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

回调机制

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

序列化和反序列化

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

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

进阶特性

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

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

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

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

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

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

库和框架

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

小结

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

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

作者:静默虚空

本文链接:https://www.cnblogs.com/jingmoxukong/p/8193709.html,转载请联系原作者。

语言输出奇树有多少总方法_如何学习一门编程语言?这些方法告诉你,不要再说你不会学习...相关推荐

  1. java 调用祖父方法_在Java中调用祖父母方法:您不能

    java 调用祖父方法 在文章保护的重点中,我详细介绍了"受保护"如何扩展"包私有"访问. 我在那儿写道: 你能做的是 覆盖子类中的方法或 使用关键字super ...

  2. python的del方法_关于python:__ del__方法是什么,如何调用它?

    我正在阅读代码. 在其中定义了__del__方法的类. 我发现此方法用于销毁类的实例. 但是,我找不到使用此方法的地方. 其主要原因是我不知道如何使用此方法,可能不是这样:obj1.del(). 因此 ...

  3. Java main方法_解释Java中的main方法,及其作用_一个java文件中可包含多个main方法

    public static void main(String[] args) {} 或者 public static void main(String args[]) {} main方法是我们学习Ja ...

  4. 1102示波器使用方法_使用示波器进行故障诊断的方法(1):常见传感器波形分析-汽车用品行业...

    汽车专用示波器可以实时采集点火.喷油.电控系统传感器的波形,通过对传感器波形的分析,可以准确诊断传感器是否故障.通过对点火波形的分析,不仅可以诊断点火系统的火花塞.高压线.点火线圈等各元器件故障,而且 ...

  5. java 异步调用方法_乐字节Java编程之方法、调用、重载、递归

    一.概述 方法是指人们在实践过程中为达到一定目的和效果所采取的办法.手段和解决方案. 所谓方法,就是解决一类问题的代码的有序组合,是一个功能模块.编程语言中的方法是组合在一起来执行操作语句的集合.例如 ...

  6. python selenium定位元素方法_[原创] python selenium 元素定位方法封装

    该楼层疑似违规已被系统折叠 隐藏此楼查看此楼 写好了公用的调用类,接下来就按照pageobject的设计模式写一下基本的元素定位方法,此处我们需要对python的方法传参有所了解,没有自信的同学可以返 ...

  7. java 子类的同名方法_子类父类拥有同名的方法时……

    子类父类拥有同名的方法时-- (这个程序是不能运行的) packageyanzheng; public classParentChildTest { public static voidmain(St ...

  8. 新手编程:程序员 5 种编程入门方法,快速学会一门编程语言!

    程序员要精通一门语言,还是要掌握多门语言? 对于这个问题,公说公有理,婆说婆有理. 技术更新太快,精通一门编程语言已经实属不易,又怎么好意思说精通多门语言呢? 不过呢,当你精通一门语言同时,涉猎一下其 ...

  9. go语言 第三方包安装方法_安装第三方软件到电视的方法,看直播应该下载什么软件?...

    现在市场上的智能产品越来越多,尤其是手机和电视,虽然电视的内容很多,但是还是有很多人不知道怎么在电视上看到免费.高清又稳定的电视直播节目,其实方法很简单,首先大家需要了解一下电视怎么下载软件看直播. ...

最新文章

  1. SSA(static single assignment)(静态单赋值)
  2. VirtualBox 在Linux升级后不能用的解决办法实践
  3. 递归和迭代_迭代与递归
  4. Spring的IoC与DI差异
  5. 工作328:uni-两个页面对象传递
  6. 为什么ElasticSearch应用开发者需要了解cluster state
  7. python yield: send, close, throw
  8. python库--Numpy and pandas
  9. 6421B Lab11 为分支机构优化数据访问
  10. 马屁股和航天飞机的关系
  11. 1一10到时的英文单词_1到10的英语单词
  12. 村级行政shape_行政区划图边界制作shap.doc
  13. Java打包exe文件
  14. JavaScript判断受访域名,调用不同的js文件
  15. 数理统计与数据分析第三版习题 第3章 第5题
  16. 网络 | 1.OSI七层模型各层常见协议
  17. python+selenium自动化脚本例子
  18. PCF8563实时时钟模块功能实现
  19. 在Ubuntu上安装MySQL8.0数据库并使用Navicat远程访问
  20. 微信小程序-百度AI语音识别——(一)

热门文章

  1. R语言自定义变成进行决策曲线分析DCA曲线绘制(Decision Curve Analysis)
  2. Python可视化(matplotlib)图像之误差可视化(Visualizing Errors)
  3. 结构风险和经验风险是什么?怎么去平衡它们?
  4. import keras 报错 ImportError: cannot import name ‘urlopen‘
  5. mysql数据库目标库_修改mysql数据库的库名
  6. python 漂亮打印 pprint 简写
  7. caffe 的命令行训练与测试
  8. 深度抠图--Deep Image Matting
  9. EC2实例,EBS及EFS存储
  10. LVS实现负载均衡及高可用