十玩:一个软件和游戏分享下载站!

想入门编程和计算机,循序渐进的学习过程分享

洅戰江楜2019-10-16「软件向导235人围观

本人是计算机科学与技术专业的大三学生,看到不少想入门编程和计算机的,就写了一个循序渐进的学习过程,希望对各位有一定的参考意义。
应该很大一部分人是为了学安卓开发而入门计算机的,不过也不排除有很大一部分其他各种各样原因的,这里也不多举例子,不管你出于什么目的,我们都从c语言开始。
你一开始学c语言的时候,还只会双击编程软件,新建文件,然后写上一些东西,最后点击编译和运行按钮,然后就弹出一个黑窗口出来,里面显示一行”hello world”,这是你学编程最初获得的成就感。

想入门编程和计算机,循序渐进的学习过程分享

hello world

后来你会用printf和scanf,也会各种变量类型和程序结构,可以自己输入内容,然后让程序根据scanf读入的东西来进行计算,最近打印结果了。再后来你还发现可以把不同的功能和模块放到不同的地方,然后你就知道什么是函数了,你没有放弃,继续学习,指针也会用了,文件读写也会了,到这里,你就会基本的程序设计。

想入门编程和计算机,循序渐进的学习过程分享

c语言

但是好学的你没有停止脚步,你想知道为什么电脑能”看懂”你的代码,你开始查资料,然后你就知道了什么叫”编译”,什么叫”链接”,什么叫”运行”。于是你自己装了一遍编译器,自己在cmd输入了一次gcc hello.c,你对c语言的理解更深刻了。
但是你还是不满足于基本的输入数据->代码计算->黑窗口显示结果这个过程,你想做点高大尚的,比如写个贪吃蛇,在亲朋好友面前好好炫耀一下。但是你一开始就遇到了困难:你发现你不能显示图形,你不知道怎么去响应键盘,也不知道怎么让蛇动起来,更难以理清整个程序都结构和思路,c语言已经不能满足你了。
你想用数组来表示蛇,因为蛇就是一长串的点啊,但是你发现数组的长度是固定的,而你的🐍的长度蛇可变的,这可咋办,你去百度,然后发现了一个叫顺序表的东西,你发现这个东西和数组差不多,但是长度是可以变的,这不是多么适合。知道顺序表后你发现这个东西是一门叫”数据结构的”课教的,然后你对数据结构产生了兴趣,你开始了解什么叫链表,什么叫栈,队列,什么叫树和图,你开始知道什么叫算法。当然只了解是不够的,你用c语言写了一遍这些东西,对c语言更加熟练,也对如何设计程序显得更加得心应手。但此时的你还没真正领会到数据结构给你带来的巨大作用。

想入门编程和计算机,循序渐进的学习过程分享

典型数据结构”红黑树”

你还在写c语言,在写🐍吃掉食物的时候你可能会这么写:eat(snake,food),但你总觉得怪怪到,因为”吃掉 蛇 食物”不符合人类熟悉的语序,你开始思考有没有一种”蛇 吃掉 食物”的写法呢,进过查资料,你开始了解面向对象,但是糟糕的是,c语言不支持面相对象,因此你不得不去再学一门新的编程语言,这时候你大概率会选择c++或者java,你开始认识什么叫对象,什么叫类,什么叫继承,封装。在知道这些后你决定用面向对象的思维去重写贪吃蛇,当你写下snake . eat(food)的时候,你懂面相对象思维了。不仅如此你发现java自带arraylist / c++也自带vector,你再也不用像c语言一样自己实现这些数据结构了。

想入门编程和计算机,循序渐进的学习过程分享

java

这时的你对c语言开始产生厌倦,“c语言好麻烦啊”这样的话不会说出口也会在心中一闪而过。你开始吧重心放到面相对象语言上,你发现以前写的好多数据结构这里面都有实现好的,自己以前用c语言写了好多行才能实现的功能用java/ c++一两行就搞定了,因为它们自带的库简直不要太方便。你更加兴奋了,你继续钻研,学习了泛型,并惊叹于它们内置的数据结构设计的精妙,这时候你可以用面相对象的思维解决一下问题了。
如果你是学java的,你想继续学习java的后续内容,你学习了swing,第一次摆脱了黑窗口程序。你想学servlet和jsp,你开始了解html和css以及前端的各种东西,但是后面的过程并没有那么顺利,因为你还不理解服务器是什么,不知道计算机网络是什么,也对数据库没有清晰的认识。
如果你是学习c++的,你学习各种标准库,你发现你还是只能写一些黑窗口程序,只是比c语言高级了那么点。你不相信c++只能干这些,于是你去百度,你发现c++能进行服务器后台开发,而百度告诉你在这之前你又要懂得计算机网络的知识。
殊途同归,你在这时候发现计算机不只是编程语言,还有各种各样丰富多彩的内容。
这时候你的学习速度开始加快,越来越快。
你开始学习计算机网络,开始知道在http下层为其提供服务的tcp和ip,慢慢开始理解”协议”一词的含义,开始能用专业的术语解释什么叫路由器,什么叫局域网,你对网络有了一定的认识。看理论还不能满足你,你主动去了解网络编程,去学习操作系统为你提供的socket接口,这时候你惊奇地发现这些接口又是c语言函数。当你成功地把在自己键盘上输入的hello发送到其他电脑,然后其他电脑发回给你一句hi的时候,你明白了什么叫客户端,什么叫服务端。

想入门编程和计算机,循序渐进的学习过程分享

Internet

你开始学习数据库,你理解了什么叫关系,什么叫范式,什么叫事务,学习设计数据库表,学习如何使用sql语句对数据库进行操作,这时候你已经有了基本的数据库管理能力。

想入门编程和计算机,循序渐进的学习过程分享

数据库

如果你是学java的,因为扫清了目前能看到的障碍,你继续学习后端,这一次你会用jdbc连接数据库,对servlet的工作原理有了更深入的理解。知道request和response背后的故事。这时候你觉得用servlet写太慢了,你开始学习web框架,开始学习spring,你的java后端写的愈发熟练,但是当程序越来越大的时候,你开始难以掌握程序的整体结构,开始写一步看一步,你发现了问题,开始学习写需求文档,需求分析,开始画uml图,开始进行软件测试。你开始注重代码的规范,注重程序的扩展性,维护性和稳定性,这时候你的程序开始能被称之为”软件”了。但日复一日的增删改查难免让你产生厌倦,你从javase入手想更加深入地学习java,这时候你发算你不懂虚拟机,你发现你定内存的理解还不够,你对堆栈的理解还停留在数据结构的角度,你也不懂线程和进程。

想入门编程和计算机,循序渐进的学习过程分享

spring 框架

而如果你学c++,你发现后台并没有那么容易入门,你开始继续深入学习c++的各种特性,你去学习stl,去感受c++的博大精深,你开始注重程序的模块化,开始注重代码优化,你不想停留于语言,想去学习后端,你开始理解套接字api,开始理解io和缓冲,但是还是会被先线程和进程卡住,被各种io模型卡住。

想入门编程和计算机,循序渐进的学习过程分享

c++

这时候你会去学习操作系统,你又回到了最开始的hello world。你开始知道编译好的程序里面是分了各种各样的段。你开始理解进程,你开始知道双击运行程序其实就是操作系统创建了一个进程,然后把你写的hello world程序放到属于这个进程管理的内存里面。你不再管磁盘叫内存,你知道为什么你的电脑可以同时运行这么多程序。你也开始知道线程的概念,知道什么叫互斥,什么叫信号量,开始理解操作系统和语言自身为多线程提供的实现机制。这时候你可以写多线程程序。

想入门编程和计算机,循序渐进的学习过程分享

好奇心极为严重的你去装了一个虚拟机,在上面运行了一个Linux系统,你开始近距离感受这个世界上最伟大的操作系统之一,开始领略命令行的魅力,不再对黑窗口产生偏见你开始去了解操作系统为你提供的函数,开始学习系统编程。
你发现你不懂的东西越来越多了。
你开始探究printf函数背后的故事,你发现它的背后是操作系统提供的write接口,你一直往下深入,发现最最后的最后就是一条短短的io指令。你开始去了解cpu的结构,开知道什么叫汇编,什么叫架构,什么叫指令集。你开始知道从你在键盘按下一个回车到黑框里面的程序继续执行这一段时间内你的电脑到底发生了什么。这时候你开始知道什么叫中断,什么叫异常,开始知道显示器如显示图形界面。

想入门编程和计算机,循序渐进的学习过程分享

8086cpu下的一段汇编程序

你想知道编译器如何把c语言文件翻译成汇编程序,你对编译型程序和解释型程序有更加深刻的理解,你开始学习语法分析,学习怎么构建语法树,你甚甚至想写出一个以你自己名字命名的语言。

想入门编程和计算机,循序渐进的学习过程分享

编译的基本流程

到了这个时候,你不再执着于编程语言。你想去学习更多的知识,你想知道显卡如何把3d游戏场景渲染出来,你去学习计算机图形学,你去做游戏开发,你想知道程序怎么识别你手写的数字,你开始学习深度学习人工智能,你也可以继续研究操作系统,继续研究编译原理,你也可以继续java后端开发,继续c++后台的学习,可以专心前端,可以深入学习高级的数据结构和算法,这时候你的选择真是太多了,当然,这时候你去学安卓开发肯定就是小菜一碟了,因为你的基础已经足够好。
如果能看到这里说明你对计算机相关内容还比较感兴趣,喜欢就去学吧。
游戏才刚刚开始。

作者:硝酸银

所属分类

评论

昵称 *
添加你的昵称或姓名
邮箱 *
您的电子邮件地址不会被公开