前言
又是一年开学季,回想去年,还是新生的我踏入校园,虽然脚下的路走得踏实,但是梦想的路,却很迷茫。
热爱编程,却不知道如何入门,这大概是很多新生共同的疑惑,距离开学已没多久,我带的学弟学妹一只手已经数不过来,总是给他们讲着一样的东西,突然想到,为何不直接把经验写下来,让他们慢慢看,既能培养他们的自学能力,也可省下我的一些时间
编程其实并不难,先理解下面几组概念
概念
文件、文件夹、路径
很多同学使用的电脑都使用的是Windows系统,文件是依据后缀名分类的,不同后缀名代表不同类的文件,虽然这样理解没有错误,但其实是条弯路,没必要这么麻烦,文件就只简单的分为两类,文本(字符)文件 和 二进制文件,虽然文本文件也是二进制储存的,但是它的内容是人类能看懂的字符,比如英文,中文,或者其他有意义的符号集,这些符号虽然人类能看懂,但是电脑不认识,电脑只知道电路的开闭,也就是1和0,二进制文件就是人类看不懂但是电脑看得懂的文件,也就是全是010101的文件。
文件夹顾名思义就是用来装文件或文件夹的,这个很好理解。
路径,文件和文件夹储存在硬盘中,硬盘可以理解为一座大城市,文件和文件夹就视作房屋,想要在一座城里找到具体的某一间房,当然要知道这间房的具体地址才行,不然一间一间地去排查吗,这个地址,也就是所说的路径,想要在硬盘中找到某个文件或文件夹,就需要知道它们的路径才行。
编辑器、编译器、编程语言
前面说了文件分两类,一类是人能看懂但是电脑不能看懂的,一类是电脑能看懂人看不懂的。写代码,其实就是在编辑一个文本文件,会使用到编辑器,我们写的代码当然能看懂是什么意思,但是电脑不懂代码是什么意思,那么想要让电脑知道代码具体的意思,就需要一个“中间人”来做翻译,这个“中间人”就是编译器
所以,编辑器是用来编辑文本文件的(也可以编辑二进制文件)
编译器是用来将文本形式的代码转换成对应的机器码的(转换过程就叫做编译)
编程语言有很多种,如 C/C++、 Golang、 Java 等等,但实际都是殊途同归,不同语言适用的场景不同罢了,不同语言之间的根本区别,其实就是对应的编译器(静态语言是编译器,动态语言是解释器)不同,所以想使用一门语言进行编程,只需要有语言对应的编译器(解释器)就行了
图解
一些简单的概念讲了,可能会有些难以理解,下面就配合图片来解释,形象一点
PS:好用的编辑器推荐,Sublime Text,VS Code,Atom,非图形界面编辑器Vim(神器,强推)
PS:经常听到的IDE这个词,其实是 Integrated Development Environment(集成开发环境)的缩写,也就是 编辑器 + 编译器 + 许多提高效率的小工具
完整流程图示
Mac
- 输入
cd Desktop
并敲一下enter键 - 输入
touch hello.c
并敲一下enter键,可以发现桌面上多了一个叫做test.c的文件 -
使用文本编辑器打开这个文件
-
在打开的编辑窗口里面输入下面图示内容
- 输入完成后,保存(command + S),然后关闭窗口
- 在刚才的终端窗口中输入
gcc -Wall hello.c -o hello
并敲一下enter键
- 再在终端中输入
./hello
并敲一下回车键
如果上面这些步骤都能够理解,那么相信你应该知道如何在Mac上进行简单的编程了
Windows
- 安装编译器
- 新建文件
- 编辑文件
- 编译生成可执行文件
- 测试运行
Linux
Linux 和 Mac 都是有强大的终端的,操作基本一致,参照Mac
编程语言特点介绍
学校开设
咋们系大一上学期开设C++的基本语法课程,只讲 类和对象(不包括) 之前的内容,但推荐自己把全书看完,全书因为内容浅显易懂,对自己要求高的同学,建议一周阅读完,能力有限的同学,建议两周读完,读完后进行自学(如果不知道读完之后学什么,可以联系你们的学长)。
大一下学期开设Java课程,讲的内容也只是基础语法。
学习完一门语言的基础语法后推荐学习数据结构和算法
C
- 接近底层,可以在裸机上跑
- 高级语言中效率最高,达到汇编的80%
- 面向过程
- 没有GC,很多指针需要自己释放,需要程序员很细心
C++
- 万能的
- 面向对象
- 标准库
- 大量的三方库
Java
- 完备的类库
- 优秀的生态
- Apache、Alibaba 等优秀公司
- 用户基数大
- JVM 各种配置
- 运行在虚拟机上,跨平台
PHP
- 动态编程语言
- 编程范式难以统一
- 面向对象部分设计过于复杂
- 对 MySQL 支持好
- 解释执行,需要单元测试覆盖率保证
JavaScript
- 优秀的生态
- 全栈
- EggJS/Ant Design/Element UI
- 函数第一,相对不易理解
- 语言规范仍在快速发展
Python
- 科学计算
- 数据分析
- 人工智能
- 动态语言
Golang
- 静态类型
- 编译完成的二进制对系统零依赖
- 代码规范统一
- 简化到极致的并发模式,内建的 HTTP 支持
- 促进 Docker、云的发展
- 面向接口
书籍推荐
编程语言入门
《The C Programming Language》
数据结构与算法
《算法导论》《大话数据结构》《算法》(第四版)《算法竞赛入门》(第一二版)
计算机理论
《深入理解计算机系统》《计算机组成原理》《编译原理》
网络
《TCP/IP详解》(卷一二)《计算机网络(自顶向下)》《图解HTTP》
数据库
《数据库系统概论》
Linux
《鸟哥的Linux私房菜》《深入理解Linux内核》《Linux内核源码解析》
有疑问加站长微信联系(非本文作者)