编程基础

前端六班——基础第一课

自我介绍

方方

华中科技大学

软件工程

工作经历

2011年开始做前端

毕业拿到百度、腾讯的 Offer

目前就职阿里巴巴

爱好:羽毛球、养狗

目录

  1. 为什么要学编程基础
  2. 一些名词
  3. 二进制、八进制、十六进制
  4. 存储
  5. 键盘与字符
  6. 字符集与字符编码
  7. 算法基础
  8. 问答

为什么要学编程基础

为什么不先学 HTML、CSS?

硬件

操作系统

浏览器

HTML / CSS / JS

服务器

渲染引擎

JavaScript 引擎

HTTP 协议

一些人

比尔·盖茨

Linus Torvalds

艾伦·图灵,计算机科学之父

 

布兰登·艾克(Brendan Eich)

John Resig(1984)

TJ Holowaychuk(Node.JS 半边天)

一些名词

  • 算法——做事的步骤
  • Unix & Linux
  • KISS - Keep It Simple, Stupid
  • 艾伦·图灵,计算机科学之父
  • 布兰登·艾克(Brendan Eich)
  • John Resig(1984,jQuery 之父)
  • 开源社区(《大教堂与集市》)
  • 软件工程(《人月神话》)
    • 关于加班
    • 关于团队人数

一些阅读

  • 黑客与画家
    • 什么是优秀的程序员
    • 容易被鼓动去学 Lisp
  • Just for fun(只是为了好玩)
    • Linux 的来龙去脉
    • 生存、社会交往和好玩
    软件随想录(Joel谈软件)
    • 怎么成为好程序员
    • 怎么招聘好程序员
    • Smart, and get things done
  • 阮一峰酷壳(陈皓)

个人推荐

一些英文

  • bin - binary 二进制
  • src - source 源代码、来源
  • dest - destination - 目的地
  • dist - distribute 分发
  • build - 构建
  • license - 源代码许可证
  • repo - repository 仓库、代码库
  • lib - 库、代码库
  • foo bar - 临时命名
  • temp - 临时变量
  • spec - specification 规格文档

忠告:不要使用缩写,别人看不懂!

一些网站

  • github.com
  • stackoverflow.com
  • mdn
  • w3c specification
  • ECMAScript specification

忠告:学英文!

二进制的世界

 1 + 1 = 10

1. 电路中易于实现:高电平为1,低电平为0

2. 物理上易于实现:有孔为1,无孔为0

3. 其实是有三进制计算机的

二进制的世界

单位

1 位(bit)

1 字节(byte)

1 KB(kilobyte)

1 MB(Megabyte)

0 或 1

0000 0000 ~ 1111 1111

1024 byte

1024 x 1024 byte

1024 等于 2 的 10 次方

计算机怎么存数据?

以文本为例

123

495051

001100010011001000110011

313233

原文

编码

二进制

十六进制

键盘上的字符

以QWERT键盘为例

字符集

最简单的 ASCII

容纳全球语言的字符集

字符集的历史

一定要优先使用 Unicode!

字符集

字符集不适合计算机

1. 如何才能区别Unicode和ASCII?

计算机怎么知道三个字节表示一个符号,而不是分别表示三个符号呢?

 

2. 资源浪费

英文字母只用一个字节表示就够了,如果Unicode统一规定,每个符号用四个字节表示,那么每个英文字母前都必然有3个字节是0,这对于存储来说是极大的浪费,文本文件的大小会因此大出二三倍

字符编码

字符集只规定了字符对应的数字,却没有规定如何存储

字符编码字符集的存储方式

字符编码

字符集只规定了字符对应的数字,却没有规定如何存储

字符编码字符集的存储方式

举例

已知"严"的unicode是4E25(100111000100101

根据上表,格式是"1110xxxx 10xxxxxx 10xxxxxx"

从后向前填入格式中的x,多出的位补0

得到了"严"的UTF-8编码是"11100100 10111000 10100101",转换成十六进制就是E4B8A5

 

算法

算法是做事的步骤

1. 有结果

2. 无歧义

3. 有限步骤

4. 可行性

算法

可以利用的东西

1. 赋值(存储到某个地方)

2. 加减乘除等基本运算

3. 数组

4. 遍历数组

5. 其他……

算法

以选择排序为例

题目:给你一个数组,给我从小到大排好序

输入:[5,2,1,4,3]

输出:[1,2,3,4,5]

算法

回忆一下军训站队

算法

用伪代码描述做事的过程

numbers <- [5,2,1,4,3]

从 0 开始遍历 numbers: index

    minNumberIndex <- index

    从 index + 1 开始遍历: index2
        if(numbers[index2] < numbers[minNumberIndex])
            temp <- number[index2]
            number[index2] <- number[minNumberIndex]
            number[minNumberIndex] <- temp

output numbers

算法

说明了什么?

1. 计算机很傻,只会做几件机械的事情

2. 思路要程序员想

3. 程序员要用无歧义的语言(程序)告诉计算机怎么做

问答环节

1. 课程安排

2. 任何问题

第一课 编程基础

By 方方

第一课 编程基础

  • 4,110