前段时间在知乎看到这个问题「想请教现在的在职程序员第一次编程入门的是怎样的?」,现在又到了大学新生入学的日子,这里把答案贴过来(会有很多外链,可以拖到文章末尾点击阅读原文进文章),希望对大家有所帮助。
按时间线来回忆下:
14 年 9 月 - 15 年 3 月大一上
14 年进入大学接触编程,第一门编程语言 C++。
开始就是学基础语法,学循环、学递归,求绝对值、求阶乘、一元二次方程求解,到最后的学生管理系统。
img
txt 文件是类似下边的数据:
img
写出的程序就是命令行之间的交互,程序把 txt 读入,然后进行增删改查的操作。
img
最开始底层是用一个大数组保存的,当时正好在学链表,自己就想着干脆再用链表重写一下吧,然后花了几天时间将整个代码进行了重写,未来遇到链表的问题都变得轻轻松松了。
大一寒假回家闲来无事就在网上找了些课程,学了郝斌的数据构课程,但当时应该是懵懵懂懂,只了解了大概。
15 年 3 月 - 15 年 9 月大一下
大一下学期接触了 GUI,也就是有界面的应用,学校的课程是 MFC。
img
课程末,把大一上写的黑框的学生管理系统改成了有界面的。
img
接着暑假开始的时候没有直接回家,学校当时有 ACM 集训第一个月留校了,但当时基础太差,如听天书,最终也没走 ACM 的道路。
但期间因为有了 MFC 的知识,自己又尝试做了一个双人版的贪吃蛇。完全从零自己开始写, 画蛇身,动起来,操控,一步一步最后完成的。
并且实现了局域网对战,对网络有了初步的了解。
img
用c语言可以实现多人在线游戏吗?100 赞同 · 8 评论回答
大一期间还接触过其他事情:
期间接触到 @萧井陌的 Badger4us:编程入门指南 v2.0 ,陆陆续续开始看里边的 python 课(未来写过很多 python)、哈佛大学的 cs50 课(了解到很多概念,对 scratch 也印象深刻,未来也专门又用了一次)、SICP(神书,也学到了 lisp 语言)。这篇文章对自己帮助很大,每当迷茫的时候就会去读读。
期间联系了一位老师,从大一寒假开始陆陆续续看论文、学 MATLAB、学算法,详细的故事可以看 有一些超级难的算法比如遗传算法,蚁群算法,看了数学建模国赛感觉好难写,那些人怎么写出来的?
15 年 9 月 - 16 年 3 月大二上
学校课程多了数据结构,对链表、树、图有了更多的了解,期间有个小作业继续利用 MFC 进行可视化。
img
当时学校查成绩只能到教务网站自己去查,没有自己的官方 app,于是就萌发了自己去写一个 app 的想法,开始一步步践行。
寒假的时候开始学习 java 语言:
img
学习 Java 之后才对面向过程编程和面向对象有了更多的理解。
16 年 3 月 - 16 年 9 月大二下
继续学习 java,开始写简单的安卓应用,之前学数据结构的时候做过无界面的计算器,这里结合安卓就做了一个有界面的计算器。
img
img
掌握基本安卓开发后,如果做查成绩的 app 肯定还需要数据,于是又捡起之前的 python,学习爬虫,了解网络知识、html 解析,最终成功查出来。
img
这个之后,被学校的一个互联网社团看到了,于是有了联系,他们也有做学校 app 的想法,于是从独自作战变成了团队合作。
当时的学校网络需要连好之后进行手动登录,于是又写了一个 app
img
暑假第一个月继续留校学习,借了几本安卓的书开始学习
img
16 年 9 月 - 1 7 年 3 月 大三上
在团队里有了更多的事情,由于当时 python 比较熟,又写了一个接口用来在线充值饭卡,之前学校充值饭卡只能线下充。
img
学校课程里也陆陆续续接触一些底层的计算机知识,操作系统、计算机组成原理、汇编语言、数字逻辑这些。
比如电脑上模拟 8086 CPU 做的一个东西:
img
17 年生日的时候搭建了自己的第一个博客,https://windliang.wang ,了解了域名、服务器、git 各种概念,后边陆陆续续就开始总结文章了。
img
17 年 3 月 - 17 年 9 月 大三下
大三下一开学,app 正式上线,支持查课表、查成绩、充值饭卡:
img
17 年 9 月 - 17 年 3 月大四上
经常需要上自习,但每天的空教室是在楼下黑板手写公布的,但其实到教务网站是可以查出来的。于是注册了公众号 windliang,实现了一个查询空教室的功能。
img
再接着学习了前端 html、css、js,写了一个棋类对战游戏(从这里开始和前端结缘),也作为了软件工程的结课作业。
windliang:WebSocket: 从狼吃羊说起
img
由于毕业设计和深度学习有关,也开始总结深度学习的知识。零基础入门深度学习
18 年 3 月 - 18 年 6 月大四下
开始陆陆续续刷题,并且总结题解,https://leetcode.wang
除了上边列的,陆陆续续还做过很多小东西,就是那种突然有个想法就去实现,不会就去一点点学。
之后毕业又读了研,但通过大学四年基本上拥有了基础的编程能力,无论学什么新语言,用什么新框架上手都会很快。
接着就是毕业后的故事,前段时间刚满三周年:windliang:工作三年后的胡思乱想
总结下来,入门编程最核心的就是去多写代码了,最好先定个目标,想要实现什么,然后基于此去学习相关知识,不断攻破。
但对于初学者,每当接触一个新知识点的时候还是很痛苦的,只能不停的拆解目标,一步一个脚印来攻克。
从不会到会,这个过程不断循环,每次有成果出来都会非常开心,随着这个过程不断扩充自己边界,到后来再学新知识就不会那么抗拒了,迁移学习的能力越来越强。