# learn_programming **Repository Path**: panbaorui/learn_programming ## Basic Information - **Project Name**: learn_programming - **Description**: 编程练习指导与示例 - **Primary Language**: C++ - **License**: Not specified - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 310 - **Created**: 2019-03-17 - **Last Updated**: 2022-05-24 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README ## 如何学习编程 编程,英语,数学是通往未来的三个主要钥匙。其中编程是让你实现梦想,英语是让你找到通往梦想的资料,数学是让你构建路径的模型和策略。因此建议各位同学能够脚踏实地把基础打扎实,克服眼高手低的问题。 编程和很多其他的课程不一样,不是看看就能学会,需要不断的练习,不断的debug,不断的反思,不断的重构代码才能学好。其中各种语言是招式,相对好学;而算法、程序性思维是内功,并不是很容易提高。内功的高低才正真决定了一个人编程能力的高低。 ## 学习的过程 因为主要的算法还是通过C/C++来实现,因此需要把C++学好。但是很多比较高级、复杂的语言特性可以不用一上来就去学,可以等基本语法、常用数据结构学的比较扎实之后再着手开始。 主要的学习步骤如下: 1. 找一本C++的书 (教材就可以,或者如下的资料): - 将其中的基本内容快速过一遍; - 将其中的练习题都做一遍(大约2周,给自己限定一个时间,必须快速完成) - 在学习过程考虑,如何更有效的编程,如何提高debug能力 - 资料(可以使用在线的教程,或者自己找比较合适的): - [C++ 教程](http://www.runoob.com/cplusplus/cpp-tutorial.html) 2. 《算法导论》 - 根据自己的基础,把重要的内容学一下,并尝试将每一个算法都自己实现一下 (大约4-8周) - 实现过程需要思考,算法的本质是什么,如何将算法转化成循环、判断 - 如何实现算法,如何测试代码,如何构建输入数据 - 可以参考一些教程,加快学习速度,例如: - [麻省理工学院公开课:算法导论](http://open.163.com/special/opencourse/algorithms.html) - [你是如何坚持读完《算法导论》这本书的?](https://www.zhihu.com/question/27744730) 3. 在线编程练习网站 - 在基础知识学习到一定程度之后,需要找一些算法练习题目来继续提高自己的能力 - 如果自己想不到很好的练习题目,可以通过做[leetcode](https://leetcode-cn.com/)等在线网站的练习题,来练习 - 可以根据自己的能力,选择如下的练习来完成 - [初级算法 - 帮助入门](https://leetcode-cn.com/explore/interview/card/top-interview-questions-easy/) - [中级算法 - 巩固训练](https://leetcode-cn.com/explore/interview/card/top-interview-questions-medium/) - [高级算法 - 提升进阶](https://leetcode-cn.com/explore/interview/card/top-interview-questions-hard/) 4. 综合性质的编程练习项目 - 可以思考一下,如何讲所学的编程知识去解决一些实际的问题 - 通过这个综合练习,运用所学的知识解决一个实际的问题,并锻炼系统性问题的解决思路 - 例1:如何自己编写一个自动下五子棋的程序,思考编写这样的程序需要什么样的技术,需要什么算法,如何保存棋盘的状态,如何有效判断在何位置下子最好等等 - 例2:如何自己编写一个数独的自动程序,类似的思考如何才能自己实现这样的程序 **重点** 对于C++,掌握下列知识: * 基本语法:循环、判断、选择、函数、指针、*结构体*和*类* * 文件读写 * 数据结构:*链表*和二叉树 **具体要求:** 1. 根据自己的学习过程,将所编写的程序保存到对应的目录里 2. 学习使用[git](3_tools/git),将代码、报告提交到[gitee](https://gitee.com) 3. 可以参考[报告例子](report/20190304_report_demo.md)来写每周的报告。其中关于[Markdown](3_tools/markdown)的用法可以通过学习资料进行学习 ## 关于如何提交作业,如何使用git,markdown等等,可以参考下面使用帮助。 具体的操作步骤: * 大家fork这个项目到自己的项目 * 然后git clone自己的项目到本地机器 * 在各目录里写入各自的代码、报告等 * 通过`git push ...`上传作业到自己的项目里 * 由于本作业会更新因此需要更新到最新的版本,可以如下操作 ``` git remote add upstream git@gitee.com:pi-lab/learn_programming.git git pull upstream master ``` 大家提交作业后,我会在大家的项目里写入批注、建议等等,从而构建良好的反馈机制,能够更有效的取得学习效果。 ## 学习的建议 本学习材料主要针对有意提高自我编程能力的学生,通过本学习材料能够学习得到后续研究生阶段所需要的基础知识、技能。通过系统化的练习能够将所学的知识串联起来,从而提高学习的效率和效果。由于人工智能技术飞速的发展,所以想要在研究生阶段取得更好的成绩需要非常强的自学能力,在学习本系列教程的过程中,需要自己不断的反思,如何才能更有效的学习?怎么才能抓住所学科目的重点?如果遇到不会的问题,如何去找资料?什么样的问题去问?什么样的问题要自己去找答案? **本教程和习题和传统的课程很大的不同点在于:必须通过自己的编程、实践,唯有自己亲自练习才能真正学到各个科目的精髓,才能切实地提升自己的能力,从而摆脱眼高手低的问题。另外本教程给出的参考资料并不是很完善,需要自己去找适合自己的学习材料,这是为了锻炼自己找资料的能力。** ## 其他相关学习资料汇编 * [智能系统实验室-新人暑期培训教程](https://github.com/npupilab/SummerCamp2018), [智能系统实验室-新人暑期培训作业]([https://github.com/npupilab/SummerCamp2018Homework]) * [机器学习教程](https://gitee.com/pi-lab/machinelearning_notebook),[课程作业](https://gitee.com/machinelearning2018/pr_homework)