本教程的主要目的是引导大家通过合理的过程和步骤,一步一步掌握编程的理论与技巧,提高学习的效率和效果,并降低学习过程的痛苦指数。和其他传统的教程不同之处主要在于:1) 使用Git来记录学习过程的代码、心得:保存学习过程的进度,能够更好的师生互动; 2) 本教程只提供了学习大纲,需要找适合自己的教程,并自己设计学习进度和安排。请有志于机器学习,计算机视觉的同学脚踏实地的把基础打扎实之后再开始相关专业知识的学习。
注意:
编程,英语,数学是通往未来的三个主要钥匙。其中编程是让你实现梦想,英语是让你找到通往梦想的资料,数学是让你构建路径的模型和策略。上述三样能力都是需要长时间积累,很难在短时间突击提高,因此建议各位同学能够脚踏实地把基础打扎实,克服眼高手低的问题。由于研究生阶段学习时间比较短,需要同时学习大量的理论知识并完成大量的编程、实验,如果编程能力太弱,则导致研究过程处处受挫,从而丧失兴趣和目标。如果编程能力足够强大,则很多课题能够通过不断尝试、试错,找到解决问题的办法。总之编程能力的高低对研究生阶段的能力提升起到关键的作用,强烈建议各位同学切实重视编程功力的提升!
很多同学都学习过C语言等课程,但是在学习过程仅仅是学习了语言的用法等,仅仅是学习了编程表面层面的知识,并未将语言和数据结构、算法、编程工具、操作系统等进行有机整合,所以大部分情况下,大家所学到的知识并不能解决实际问题,非常有必要进行系统性的学习和练习。
编程和很多其他的课程不一样,不是看看就能学会,需要不断的练习,不断的debug,不断的反思,不断的重构代码才能学好。其中各种语言是招式,相对好学;而算法、程序性思维是内功,并不容易提高。而内功的高低才正真决定了一个人编程能力的高低,希望大家能够通过坚持不懈的努力提高自己的功力。编程思维是一种综合的解决问题能力,由于计算机需要非常精确的指令才能正常工作,因此需要事前把每一个处理步骤的原理、实现都要搞得非常清楚,这样就锻炼了大家分析问题、设计流程、解决问题、总结反思等多方面的能力。
本教程提供了一个编程能力的综合学习引导,预期需要达到的《能力和技能》主要包括:
通过这个综合练习,为后续研究生阶段研究项目的编程打下坚实的基础,缩短研究过程试错周期,从而让研究生阶段能够学到更多知识、取得更大的成绩,希望大家能够认真对待!
大部分的计算机视觉、机器学习算法的底层代码通过C++来实现,另外经典的算法教程通过C/C++来讲授,因此需要把C++学好。但是C++非常博大精深,很难一上来就全部学会,因此需要采用循环迭代的学习方法,即通过多次from the shallower to the deeper的学习过程实现高效率的学习。比较高级、复杂的语言特性不用一上来就去学,可以等基本语法、常用数据结构学的比较扎实之后再着手高级的语法、技巧等。或者等基本语法、用法学完之后,在做练习题目的时候琢磨高级语法特性、技巧,体会为什么要设计这些高级用法,这样的学习有的放矢,效率更高。
主要的学习阶段和步骤分为如下的5个阶段,可以同时进行两个或以上的内容学习和练习,从而提高整体的学习效率。
需要在2周-3周完成:
需要在3周-6周完成:
需要在3周-6周完成:
需要在2周-4周完成:
需要在2周-4周完成:
如果没有学过操作系统、计算机原理、嵌入式系统、编译原理、计算机网络等课程,可以快速学习这方面的知识,学过这方面的知识会提升大家对开发大型、面向实用系统的开发能力。主要包括内容包括
需要在2周-4周完成,为更好的提高自己的能力建议完成:
需要在2周-4周完成,为更好的提高自己的能力建议完成:
如果你能坚持到这个阶段,说明你编程功力很强了!可以自由遨游于机器的世界,充分发挥你的能力去创造奇迹!
请认真阅读具体要求和操作步骤,如果有不清楚的地方请及时咨询。
git add -A
git commit -m "Change log"
git push origin master
上传作业到自己的项目里。每次完成一个作业就提交代码一次,或者每天完成之后提交一次代码。
其他说明:
关于Git和Gitee的操作可以深入学习《Git教程》。
可以参考《Gitee增加用户》来增加用户,将邀请链接地址发送给bushuhui@nwpu.edu.cn
(重要步骤,请不要忘记遗漏!),从而加提高协同便捷性。大家提交作业后,我会在大家的项目里写入批注、建议等等,从而构建良好的反馈机制,能够更有效的取得学习效果。
如果无法提交代码到服务器,可以尝试将服务器最新的代码更新到本地,执行操作: git pull origin master
。合并完成之后再执行代码提交git push origin master
关于Markdown,可以参考《Markdown教程》,可以安装Typora软件来编写Markdown,这个软件最大的特点是能够及时看到最终的效果。
由于本课程只是后续科研的基础,所以需要快速、高质量完成编程的学习,但是编程能力的提高需要系统性的锻炼,需要学习的内容比较多,如果按照一般的学习方法则花费的时间太久,因此需要锻炼并提升自己的快速学习能力。上面所列的8个阶段的学习,最好能同时进行2-3个以上内容的学习、练习。例如在做Stage3的LeetCode练习题的时候,可以同步做Stage4的小项目练习。
因为研究生阶段需要学习的知识、技能非常多,按照传统的学习方法已远远无法满足大量知识、技能的学习。在本练习过程可以改变学习的策略,即通过项目牵引的方式进行学习,不是让大家囫囵吞枣,而是调整学习过程的一些先后顺序。尽可能早的完成 《第四阶段的小项目》 的练习,虽然基础可能不是特别牢固,但是克服自己心中的恐惧,尽可能用已有的知识,通过改造示例程序去完成第一个小项目。在做到过程发现缺少哪些知识、技能,然后在整个过程有意识的去补相关的知识、技能。
具体的进度安排可以参考下面的进度图,其中每个色块表示当前阶段开始、结束、以及持续的时间。下面的时间、进度安排只是建议,大家需要根据自己的能力、时间合理安排自己的进度,但是核心的原则是尽最大努力同时进行2-3个内容同步学习和练习。
本学习材料主要针对有意提高自我编程能力的学生,通过本学习材料能够学习得到研究生阶段所需要的编程基础知识、技能。通过系统化的练习能够将所学的知识串联起来,从而提高学习的效率和效果。由于人工智能技术飞速的发展,所以想要在研究生阶段取得更好的成绩需要非常强的自学能力,在学习本系列教程的过程中,需要自己不断的反思,如何才能更有效的学习?怎么才能抓住所学科目的重点?如果遇到不会的问题,如何去找资料?什么样的问题去问?什么样的问题要自己去找答案?
本教程和习题和传统的课程很大的不同点在于:必须通过自己的编程、实践,唯有自己亲自练习才能真正学到各个科目的精髓,才能切实地提升自己的能力,从而摆脱眼高手低的问题。另外本教程给出的参考资料并不是很完善,需要自己去找适合自己的学习材料,这是为了锻炼自己找资料的能力。
每次完成一个编程题目就提交一次代码,或者每天完成学习、练习之后就提交一次代码。
要有良好的心态,这是为自己学习,不是应付一件差事。未来的世界是机器的世界,如果不会写程序将寸步难行。学习写程序和成为码农没有必然的联系,而是扩展自己认知范围的一种重要方向,因为程序性思维是一类非常重要的思维技能。编程作为机器时代的必备技能,如果不会编程将会是未来的“文盲”,所以需要从认识上尽可能降低排斥心理。在一个小学生都在学习编程的时代,作为一个20多岁精力最为旺盛的研究生如果不会写程序,如何面对这个时代?
编程、算法和很多其他课程不一样,不是花几天突击一下就能提高的;而是需要坚持一段时间持续不断的锻炼、思考,突然一天才发现自己能力提升了。因此建议大家根据自己其他课程、时间等,合理安排学习编程的时间,坚持每周都做一些题目,每周至少抽出半天来练习编程和算法。
不能直接抄已有的程序,或者抄别人的程序,如果自己不会要自己去想,去找解决方法,或者去问。如果直接抄别人的代码,这样的练习一点意义都没有。在这个阶段大家静下心提高编程思维能力,为后续的研究打好基础,否则后续的研究过程不仅做不了深入的研究,而且做东西会比较慢。如果感觉太难,可以做的慢一些,但是坚持自己思考、自己编写代码。这个练习重要的是通过自己思考、尝试,从而构建自己的思维系统,只有通过练习才能锻炼并提高自己的真正的能力。
请先遍历一遍这个文件夹和所有的子文件夹,了解有什么内容,资料。各个目录里有很多说明文档,如果不会先找找有没有文档,如果找不到合适的文档就去网上找找。通过这个过程锻炼自己搜索文献、资料的能力。
不要想一次就把编程、算法学精通!由于存在大量的概念、复杂思维、大量的技巧等,比较短的时间大部分人的大脑是无法接收并理解如此多的东西,因此使用iterative学习方法比较有效率。先把简单的C++/数据结构的书、教程学完一遍,然后开始练程序,等练完之后再进入更深一层的理论学习,例如《C++ Primer》或者《算法导论》等书。编程和其他课程有非常大的不同,需要自己在编程过程体会每个知识点的具体含义,只有在实际编程过程才会学到很多书上没有的技巧、解决问题的思路等等。一句话就是:不要怕,马上开始真实的练习!
做习题的过程不要着急,如果感觉难,无从下手,可以在自己之前的代码基础上修改,逐步实现需要的功能;或者想办法简化任务,等简单的完成之后在增加细节,直到原始问题被解决。只有自己写才最锻炼,看上去慢,实际上是最快,最有效的学习方式,这样才能更深刻的理解算法的思维。要把算法思维搞懂,只要能搞懂,后面的内容学起来就很快。其实算法思维没有几类,前面的真正掌握了,后面的学起来很快的。
在学习、编写练习题目的时候,有太多概念、操作过程复杂,脑子比较混乱,如果这样不要着急!慢慢来!本教程主要目的,就是要你脑子糊涂,然后通过自己的思维把各种关系、流程理顺,从而学会如何思考解决复杂问题。本学习的主要目的是要强化这个由混乱到清晰的过程,而不是最终的代码,这就是内功心法。编程语言等招式通过记忆就可以学会,而最重要的思维、内功别人没有办法教,只有自己悟出来的才算是真正掌握。
因为研究生阶段需要学习的知识、技能非常多,按照传统的学习方法已远远无法满足大量知识、技能的学习。在本练习过程可以改变学习的策略,即通过项目牵引的方式进行学习,不是让大家囫囵吞枣,而是调整学习过程的一些先后顺序。尽可能早的完成 《第四阶段的小项目》 的练习,虽然基础可能不是特别牢固,但是克服自己心中的恐惧,尽可能用已有的知识,通过改造示例程序去完成第一个小项目。在做到过程发现缺少哪些知识、技能,然后在整个过程有意识的去补相关的知识、技能。
这些课题最好使用《Linux》以及Linux下的开发工具来做。逼迫自己使用《Linux》,只有多练、多用才能快速进步。如果实在太难,先在虚拟机里装一个Linux(例如Ubuntu,或者LinuxMint等),先熟悉一下。但是最终需要学会使用Linux。
制定计划,严格按照自己设定的时间节点来完成。如果有拖延症,努力克服自己的拖延症。
写程序要细心,一个很小的错误导致程序不能正确运行。通过不断的debug提高自己排错的能力。
学习过程要多思考,思考什么是程序?程序为什么这样写?有没有更好的方法来解决问题?怎么才能优化地更好,让程序执行的更快?怎么才能把函数、功能封装起来。总之要多想。
不仅要将程序写出来,还要把写程序过程中遇到的问题,如何解决的都写到报告里。报告要包括:程序目的,算法,难点问题,结果,思考等。
如果学习基本语法、写基本的C++程序疲惫了,可以尝试做一下《第四阶段的小项目》或者《第三阶段的算法练习题》换换脑子。通过做小项目或算法练习题,发现自己的短板,从而有针对性的学习。
这个练习的最主要的目的是通过《Stage4的综合练习》来牵引学习C++,数据结构、算法等。通过这个学习过程让自己学会一种思维,如果遇到解决不了的问题,如何去找到解决这个大、难问题的子问题,并通过什么途径一个一个去解决,从而最终把大的难题解决。
要相信奇迹会发生,自己只要能坚持把Stage4做完,能力就会有比较大的提升。根据以往的经验,这个练习题做完的同学,解决问题、编程思维等能力都有很大的提升,所以需要让自己坚信,内功真的需要一层一层修炼。
完成编程练习,《Stage4的综合练习》等,往往编写的程序比较混乱、代码不清晰、复用能力比较弱。需要通过多次的《代码重构》来提高自己的综合编程能力,在多次的代码重构过程中,提升自己的逻辑思维能力、工具和技巧等方面的能力。
在上述内容学习完成之后,可以进行机器学习、计算机视觉方面的学习与研究,具体的资料可以参考:
此处可能存在不合适展示的内容,页面不予展示。您可通过相关编辑功能自查并修改。
如您确认内容无涉及 不当用语 / 纯广告导流 / 暴力 / 低俗色情 / 侵权 / 盗版 / 虚假 / 无价值内容或违法国家有关法律法规的内容,可点击提交进行申诉,我们将尽快为您处理。