如何学习一门计算机编程语言

2023-05-16

序言

计算机编程是一个实践性很强的“游戏”,对于新入门者,好多人都在想,哪一门编程语言最好,我该从哪开始呢?我的回答是:语言不重要,理解编程思想才是最关键的!所有编程语言都支持的那一部分语言特性(核心子集)才是最核心的部分。所以从实际情况出发,选一门你看着顺眼,目前比较贴近你要做的工作或学习计划的计算机语言,开始你的编程之旅吧。

观点阐述

语言的核心子集包括哪些部分

  • 基本数据类型及运算符,这包括常量、变量、数组(所有的语言都支持一种基本数据结构)的定义与使用;数学运算符与逻辑运行符等知识。
  • 分支与循环,这是一门语言中的流程控制部分。
  • 基本库函数的使用,编程不可能从零开始,每门语言都有一个基本函数库,帮我们处理基本输入输出、文件读写等能用操作。

业界有一个二八规律,其实编程也一样,大家回头看看,我们写了那么多代码,是不是大部分都属于这门语言的核心子集部分?也就是说,我们只要掌握了一门语言的核心子集,就可以开始工作了。

常用编程范式

  • 面向过程编程(最早的范式,即命令式)
  • 面向对象编程(设计模式的概念是从它的实践活动中总结出来的)
  • 函数式编程(以纯函数基础,可以任意组合函数,实现集合到集合的流式数据处理)
  • 声明式编程(以数据结构的形式来表达程序执行的逻辑)
  • 事件驱动编程(其分布式异步事件模式,常用来设计大规模并发应用程序)
  • 面向切面编程(避免重复,分离关注点)

我们要尽量多的了解不同的编程范式,这样能拓展我们的思路。学习语言的时候,有时可以同时学时两门编程语言,对比学习两门语言的同一概念,让我们能够更容易且深入的理解它。我学习javascript的闭包时,开始怎么也理解不了;我就找了本python书,对比着学,才慢慢的理解了。

编程语言分类

  • 编译型语言 VS 解释型语言
    • 编译型:C、C++、Pascal、Object-C、swift
    • 解释型:JavaScript、Python、Erlang、PHP、Perl、Ruby
    • 混合型:java、C#,C#,javascript(基于V8)
  • 动态结构语言 VS 静态结构语言
    • 动态语言:Python、Ruby、Erlang、JavaScript、swift、PHP、SQL、Perl
    • 静态语言:C、C++、C#、Java、Object-C
  • 强类型语言 VS 弱类型语言
    • 强类型:Java、C#、Python、Object-C、Ruby
    • 弱类型:JavaScript、PHP、C、C++(C、C++,有争议,介于强弱之间)

各种类型的语言,我们都要有所了解,这样才能够全面的理解编程语言中的各种特性,在面对特定的问题时,才能做出正确的选择。

通过实际项目来学习语言(以Typescript为例)

项目需求:统一处理不同图形(圆形、长方形、矩形等)的面积计算。

面向对象三大原则

1.Circle类讲解数据封装概念,将半径与名称封装在类内部,并提供访问方法

export default class Circle {
    private r: number
    private name: string
    constructor(r: number) {
        this.r = r
        this.name = 'Circle'
    }
    getName(): string {
        return this.name
    }
    area(): number {
        return Math.pow(this.r, 2) * PI
    }
}
复制代码

2.长方形与矩形讲解继承概念

//rectangle.ts
export default class Rectangle {
    private a: number
    private b: number
    private name: string
    constructor(a: number, b: number, name?: string) {
        this.a = a
        this.b = b
        if (name === undefined)
            this.name = 'Rectangle'
        else
            this.name = name
    }
    getName(): string {
        return this.name
    }
    area(): number {
        return this.a * this.b
    }
}
//square.ts
export default class Square extends Rectangle {
    constructor(a: number) {
        super(a, a, 'Square')
    }
}
复制代码

3.实例统一处理不同的形状一起计算面积,讲解多态概念

let shapes = Array<any>()
shapes.push(new Circle(2))
shapes.push(new Rectangle(5, 4))
shapes.push(new Square(3))
shapes.forEach((element) => {
    console.log(`shape name: ${element.getName()}; shape area: ${element.area()}`)
})
复制代码

接口概念阐述

加入接口,规范形状对外部分操作要求,让错误提早到编译阶段被发现

export default interface IShape {
    getName(): string;
    area(): number
}
复制代码

函数式编程讲解

用实例来说明怎样理解函数是一等公民,去掉我们习以为常的函数外层包裹

let printData = function(err: any, data: string): void {
    if (err)
        console.log(err)
    else
        console.log(data)
}
let doAjax = function (data: string, callback: Function): void {
    callback(null, data)
}
//我们习以为常的使用方式
doAjax('hello', function(err, result){
    printData(null, result)
})
//真正理解了函数是一等公民后,你会这样用
doAjax('hello', printData)
复制代码

异步处理中的经验分享

在实践过程,处理异步调用容易误解的一个重要概念,异步函数执行的具体流程是什么样的?

let pf = function(data: string, n: number, callback: Function) {
    console.log(`begin run ${data}`)
    setTimeout(() => {
        console.log(`end run ${data}`)
        callback(null, data)
    }, n)
}
let p = Promise.promisify(pf);

(async () => {
    let ps = Array<any>()
    ps.push(p('1111', 2000))
    ps.push(p('2222', 1000))
    ps.push(p('3333', 3000))
    await Promise.all(ps)
})()
复制代码

视频课程地址

以上是《运用typescript进行node.js后端开发精要》视频课程的概要,有兴趣的童鞋可以去观看视频。 传送门: 快来学习Typescript,加入会编程、能编程、乐编程的行列吧!

资源地址

github.com/zhoutk/sifo…

转载于:https://juejin.im/post/5be560daf265da61561ec3ce

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何学习一门计算机编程语言 的相关文章

随机推荐

  • Connect to a Windows PC from Ubuntu via Remote Desktop Connection

    http www 7tutorials com connecting windows remote desktop ubuntu A useful feature of Windows is being able to connect to
  • HTTP MIME type

    扩展名 类型 子类型 IIS 4 0 IIS 5 0 application octet stream 是 是 323 text h323 否 是 acx application internet property stream 否 是 a
  • [资源分享]Linode免费使用 [ 资源分享 ]

    Linode 是目前最优秀的 VPS 服务提供商 最近 xff0c Linode 推出了一种全新的 Linode 帐户注册方式 xff0c 该方式允许用户试用 Linode VPS 4个小时的时间而不需要输入付款信息 xff08 只要有邮箱
  • iOS9 Search API 之 Spotlight

    iOS9以后 有三种api提供搜搜方式 加强引导用户关注 我们的app及相关内容的方式 NSUserActivity Web Markup Core Spotlight 用法 前两种 实战操作性不够强 后续补充 这里先讲 spotlight
  • AngularJS优缺点、使用场景

    AngularJS 优缺点 优点 xff1a AngularJS模板功能强大丰富 xff0c 自带了极其丰富的angular指令 AngularJS是完全可扩展的 xff0c 与其他库的兼容效果很好 xff0c 每一个功能可以修改或更换 x
  • 面试准备

    首行占位 Python相关 1 Python3特性和变化 1 Python3默认编码是UTF 8 xff0c 2为ASCII 2 Python3中只有int xff0c 2中有int跟long xff0c 其中int不能超过sys maxi
  • matlab练习程序(地图上画经纬度)

    需要看下生成的数据在地球上的经纬度具体位置 投影为墨卡托投影 clear all close all clc load coast a 61 load 39 out txt 39 自己的经纬度数据 axesm mercator plotm
  • 让history记录命令的历史执行时间

    2019独角兽企业重金招聘Python工程师标准 gt gt gt 让 history记录命令的历史执行时间 由于 Linux默认的 history记录仅保存了命令的内容 xff0c root 64 oracle history 1 dat
  • windows server 2012 R2登录密码忘了怎么办呢?

    2019独角兽企业重金招聘Python工程师标准 gt gt gt 先确定是否开启了内置管理员 xff0c 或是还建立了其他的管理员账户 如果有的话 xff0c 请先以其他管理员账户登入电脑 xff0c 在本地计算机和组中 xff0c 更改
  • VR的商業模式

    1 硬件销售 根据Digi Capital预估 xff0c 在5年内 xff0c AR VR将会有数亿量级的用户数 从免费到高端系统 xff0c 硬件销售将获利最多 届时每由AR VR生成的10美元利润 xff0c 就有4美元收入属于硬件销
  • RabbitMQ知多少

    1 引言 RabbitMQ Rabbit Message Queue的简写 xff0c 但不能仅仅理解其为消息队列 xff0c 消息代理更合适 RabbitMQ 是一个由 Erlang 语言开发的AMQP xff08 高级消息队列协议 xf
  • 远程控制软件VNC教程和对内网机器控制的实现

    远程控制软件VNC教程和对内网机器控制的实现 作者 Hoky ORG 出处 Hoky ORG 77 砖 82 好 评论 12 条 进入论坛 更新时间 xff1a 2006 01 25 16 02 关 键 词 xff1a 远程控制软件VNC
  • MariaDB 10.3支持update多表ORDER BY and LIMIT

    MariaDB 10 3支持update多表ORDER BY and LIMIT 1 xff09 update连表更新 xff0c limit语句 update t1 join t2 on t1 id 61 t2 id set t1 nam
  • 细胞自动机

    细胞自动机是指定形状的网格上的 有色 单元的集合 xff0c 其根据基于相邻单元的状态的一组规则通过多个离散时间步长演变 然后根据需要迭代地应用规则多个时间步长 冯 诺伊曼是最早考虑这种模型的人之一 xff0c 并将细胞模型纳入他的 通用构
  • centos 常见故障排除

    centos 常见故障排除 实现环境 xff1a Centos x86 64 1 MBR故障和解决办法 xff08 1 xff09 模拟MBR故障 第一步 xff1a MBR中bootloader有446个字节 xff0c 在这里把这446
  • manjaro linux必装工具,在Manjaro系统中安装常用软件的方法

    本文介绍在Manjaro系统中安装一些常用的软件 xff0c 有vim chrome 截图 TIM 网易云音乐 搜狗输入法 markdown编辑器 pdf阅读器 steam git客户端 下载工具uget 视频播放器 zsh 前言 更换为中
  • 10款基于HTML5+CSS3实现的超酷源码动画

    1 基于Bootstrap的jQuery登录表单 这是一款基于Bootstrap的登录表单 xff0c 表单的外观自然不用说 xff0c 沿用了Bootstrap的风格 xff0c 非常漂亮 这款登录表单有一个经过CSS3处理过的头像图片
  • Spring AOP 对Spring MVC的Controller切面拦截不起作用

    2019独角兽企业重金招聘Python工程师标准 gt gt gt 1 问题描述 当使用Spring AOP对Controller层的Controller类的方法进行切面拦截 xff0c 不起作用 AOP配置没有任何问题 2 排查过程 Sp
  • 2008年9月全国计算机等级考试二级C笔试试卷

    2008 年9月全国计算机等级考试二级C笔试试卷 一 选择题 1 一个栈的初始状态为空 现将元素1 2 3 4 5 A B C D E依次入栈 xff0c 然后在依次出栈 xff0c 则元素出栈的顺序是 B A xff09 12345ABC
  • 如何学习一门计算机编程语言

    序言 计算机编程是一个实践性很强的 游戏 xff0c 对于新入门者 xff0c 好多人都在想 xff0c 哪一门编程语言最好 xff0c 我该从哪开始呢 xff1f 我的回答是 xff1a 语言不重要 xff0c 理解编程思想才是最关键的