一位计科学长写给 2023 级计算机类和人工智能专业的同学们的程序设计入门指南

本文主要是介绍一位计科学长写给 2023 级计算机类和人工智能专业的同学们的程序设计入门指南,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

本指南内容较多,但你们若能耐心读完,你们将收获很多……

欢迎访问作者的个人官方主页:Xi Xu’s Personal Official Home Page

LOGO

1 关于程序设计

  • 什么是程序设计和程序设计语言?

    程序设计1(programming),或称编程,是给程序解决出特定问题的过程,软件开发过程中的重要步骤。程序设计方法往往以某种程序设计语言为工具,给出这种语言下的程序。程序设计过程一般包括分析、设计、编码、测试、调试等不同阶段。程序设计语言2(programming language),或称编程语言,是用来定义计算机程序的形式语言。它是一种被标准化的交流技巧,用来向计算机发出指令,一种能够让程序员准确地定义计算机所需要使用数据的计算机语言,并精确地定义在不同情况下所应当采取的行动。最早的编程语言是在电脑发明之前产生的,当时是用来控制提花织布机(Jacquard loom)及自动演奏钢琴的动作。在电脑领域已发明了上千不同的编程语言,而且每年仍有新的编程语言诞生。

  • 为什么需要学习程序设计?

    因为,程序设计是你们所必须掌握的专业基础技能,是进一步学习其他专业知识的第一步阶梯。

    • 竞赛:参加程序设计竞赛可以提高你们的编程能力、逻辑思维能力、创新能力和团队合作能力,同时也可以增加你们的荣誉感和自信心。程序设计竞赛有很多(具体见后文),这些竞赛都是你们展示自己才华的舞台,更重要地,也是你们获得奖学金、推荐免试研究生、就业优先等机会的重要途径。

    • 考研:你们中有很多会选择考研,因为你们希望通过深造来提升自己的专业水平和学术水平;本科非双一流院校毕业的你们也可以通过考研来提升自己的学历,弥补高考的遗憾。考研的过程中,程序设计是一个重要的考察内容,不仅要求你们掌握一门或多门编程语言,还要求你们能够用程序设计解决实际问题,例如数据结构、算法分析、操作系统、数据库等。考研的难度和竞争都很大,因此程序设计的能力对于考研成功至关重要。

    • 就业:就业是你们的最终目标,因为你们希望用自己所学为社会创造价值。就业市场上,程序设计是你们最基本也最核心的技能,无论是从事软件开发、系统维护、网络安全、人工智能、云计算等领域,都离不开程序设计。程序设计的水平直接影响了你们的就业竞争力和薪酬水平。

    • 等等。

    总之,程序设计是你们在竞赛、考研、就业等方面必不可少的基本技能,也是展示自己才华和创造价值的重要手段。另外,兴趣是最好的老师,如果你们对程序设计感兴趣,那么我以上所列举的需要学习程序设计的原因就对你们来说没有那么重要了,因为就没有什么困难和障碍是不能克服的了。相信你们若有着对程序设计的热情和潜力,只要你们努力学习和实践,你们一定能够达成自己的目标。

2 那么,如何学习程序设计?

这是一些通用的建议:

  • 打好基础,程序设计基础即程序设计语言语法。学习程序设计语言语法的规则和基本概念,比如变量、数据类型、运算符、流程控制、函数等。这些是程序设计的基石,可以帮助你理解不同的程序设计语言和风格。

  • 利用在线资源,这是学习程序设计的一个重要途径。你们可以通过在线资源来学习程序设计,比如在线课程、在线书籍、在线交流社区(具体见后文)。课程的书本和课堂往往只涉及最基本的知识,你们如果想要更深入地学习和理解程序设计,就需要好好利用优质的在线资源。

  • 阅读书籍,这是学习程序设计的一个另一个重要途径。在程序设计领域,有很多经典的书籍,比如《C 程序设计语言》、《C++ Primer》、《算法导论》、《深入理解计算机系统》、《代码大全》、《重构》、《设计模式》等。这些书籍可以帮助你们更好地学习和理解程序设计的技巧和风格,也可以帮助你们更好地解决问题。

  • 动手实践,这是最重要的。仅仅看书或者视频是不够的,你们需要自己动手敲代码,调试错误,优化性能。这样才能提高你的程序设计能力和信心。实践最简单的方式就是练习程序设计题目,有很多这样的在线练习平台(具体见后文)。另外,你们也可以积极参加各种程序设计竞赛,评估自己的水平,清楚自己和他人的差距,从而更好地提高自己。

  • 熟练使用开发工具,这是提高你们的程序设计效率的重要途径。你们需要熟练使用开发工具,比如编辑器、编译器、调试器、性能分析器等。这些工具可以帮助你们更好地编写、调试和优化程序,提高你们的编程效率。其中,学会使用调试器最重要。调试器是一个可以帮助你检查和修改代码运行过程中的变量、状态、错误等信息的工具。学会使用调试器可以让你更快地发现和解决问题。普遍认为,学会调试才算是真正入门程序设计。

  • 手写代码,它的重要性以后你们会逐渐明白的。在纸上手写代码可以锻炼你的逻辑思维和记忆力,也可以帮助你备考和准备面试。

  • 参考代码,但不要抄袭。参考别人的代码可以帮助你们学习和理解程序设计的技巧和风格,但是你们不能抄袭别人的代码,因为这样你们就失去了学习的意义。

  • 加强英语阅读能力,这是学习程序设计的必备技能。程序设计语言的语法和基本概念都是英文,因此你需要具备一定的英语阅读能力,才能够学习和理解程序设计语言的语法和基本概念。另外,程序设计语言的文档和教程也是英文的,因此你们需要具备一定的英语阅读能力,才能够学习和理解程序设计语言的文档和教程。

  • 分享和讨论,这是学习的最好方式。你们可以和同学、老师、朋友、同事分享和讨论程序设计的问题和经验,这样可以帮助你们更好地理解程序设计的技巧和风格,也可以帮助你们更好地解决问题。你们也可以参加程序设计社区(具体见后文),这些社区可以帮助你们更好地学习和理解程序设计。

  • 等等。

总之,学习程序设计需要你们不断地练习和思考,需要你们不断地积累和总结,需要你们不断地分享和讨论,需要你们不断地提高和进步。

3 在这个暑假,你们可以做什么?

上文是为了让你们意识到学习程序设计的重要性,和学习程序设计的一些通用的建议。下文是为了让你们知道在这个暑假,你们可以做什么。

  • 明确学习路线。大一第一学期的专业必修课的教材有《C 语言程序设计》,大一第二学期的专业必修课的教材有《面向对象程序设计教程(C++ 语言描述)》。C/C++ 语言的语法是这两本教材的主要内容。计算机类和人工智能专业的学生最先学习 C/C++ 有以下几个原因:

    • C/C++ 是基础的编程语言,它们可以帮助学生理解计算机的工作原理,例如内存管理、指针、数据结构等。

    • C/C++ 是广泛使用的编程语言,它们在许多领域都有重要的作用,例如操作系统、游戏、图形、网络等。

    • C/C++ 是影响了许多其他编程语言的编程语言,学习了 C/C++ 之后,学生可以更容易地学习其他编程语言,例如 Java、Python、C# 等。

    大二第一学期的专业必修课的教材有《数据结构(C 语言版)》。“数据结构 + 算法 = 程序”是一句经典的计算机科学的格言,它的意思是说,任何一个程序都可以用数据结构和算法来描述和实现。数据结构是指数据的组织方式,算法是指数据的操作方式。这句话最早是由美国计算机科学家尼克劳斯·维尔特(Niklaus Wirth)在 1976 年出版的《算法 + 数据结构 = 程序》(Algorithms + Data Structures = Programs)一书中提出的。这句话强调了数据结构和算法在程序设计中的重要性,也反映了计算机科学的本质。数据结构和算法是计算机科学的核心内容,也是你们必须掌握的基础知识。不同的数据结构和算法有不同的优缺点,适合解决不同的问题。选择合适的数据结构和算法可以提高程序的效率和可靠性,降低程序的复杂度和开发成本。具体的 C/C++ 学习路线可以参考 bilibili UP 主“程序员鱼皮”的专栏《鱼皮 C++ 学习路线一条龙!》。

  • 学习中国大学 MOOC 上翁恺的《程序设计入门 —— C 语言》和《C 语言程序设计进阶》(除“第2周:ACLLib的基本图形函数”和“第6周:交互图形设计”)。它们作为一个整体是大一上学期最重要的专业必修课的课本《C 语言程序设计》的配套官方慕课,C 语言的语法是本课程的主要内容。本慕课的课程概述指出“C 语言是古老而长青的编程语言,它具备了现代程序设计的基础要求,它的语法是很多其他编程语言的基础,在系统程序、嵌入式系统等领域依然是无可替代的编程语言,在各类编程语言排行榜上常年占据前两名的位置。本课程是向后续的计算机组成、操作系统、编译原理、体系结构等课程前进的基石,对于 C 语言本身甚至程序设计语言基础原理的深入理解都是应该掌握的。”因此,学好本课程非常重要,它是你们学习程序设计的基础。本慕课的授课老师翁恺3,在中国大学 MOOC 开设了 C 语言程序设计、Java 语言程序设计等课程,是目前选课人数最多、最活跃的课程之一,是累计选课人数最多的教师之一,累计选课人次 300 余万,单次选课最高 28 万人,其中两门课程被认定为国家精品在线开放课程(其中包括本慕课)。作者本人(下文用“我”替代)就是通过翁恺的慕课学习《C 语言程序设计》,开学后发现翁恺所讲的内容比课本详细很多,因为他会教你如何理解 C 语言的语法背后的原理。

  • 基本掌握一个适合编写 C/C++ 语言的开发应用程序。开发应用程序主要分为代码编辑器和 IDE(Integrated Development Environment,集成开发环境,集成了代码编写功能、分析功能、编译功能、调试功能等一体化的开发软件服务套)。对于作为程序设计的入门者的你们往往会被推荐使用 IDE,因为它可以即装即用。但是,由于组件很多(对于现在的你们还有我来说都是不必要的),它们往往会占用很大的磁盘空间和内存,严重浪费系统资源;由于功能复杂(同样是是不必要的),它们的界面往往会显得十分臃肿,对你们十分不友好;等等。代码编辑器不仅没有以上缺点,而且往往具有可扩展性、跨平台兼容性等特点。因此,在本指南中,我推荐你们使用最受全球开发者欢迎的由微软开发且跨平台的免费代码编辑器 Visual Studio Code 4。该软件以扩展的方式支持语法高亮、代码自动补全(又称 IntelliSense)、代码重构功能,并且内置了命令行工具和 Git 版本控制系统。用户可以更改主题和键盘快捷方式实现个性化设置,也可以通过内置的扩展程序商店安装其他扩展以拓展软件功能。在 2019 年的 Stack Overflow 组织的开发者调查中,Visual Studio Code 被认为是最受开发者欢迎的开发环境。据调查,87317 名受访者中有 50.7% 的受访者声称正在使用 Visual Studio Code。根据我的搜索结果,Visual Studio Code 的一些具体优点如下:

    • 跨平台:Visual Studio Code 可以在 Windows,macOS 和 Linux 上运行,无需担心平台兼容性问题。

    • 轻量级:Visual Studio Code 相比于 Visual Studio 等 IDE,更加轻便和快速,不需要大量的下载和安装,也不占用太多的磁盘空间和内存。

    • 智能:Visual Studio Code 内置了对 JavaScript,TypeScript 和 Node.js 等 Web 开发语言的支持,以及 IntelliSense 代码补全,语法高亮,代码格式化,代码重构等功能,可以提高编码效率和质量。

    • 可定制:Visual Studio Code 可以根据个人喜好和需求进行各种设置和调整,包括主题,字体,快捷键,编辑器行为等。

    • 可扩展:Visual Studio Code 拥有一个活跃的开源社区,提供了数千种扩展插件,可以为不同的语言和运行时环境(如 C/C++,C#,Java,Python,PHP,Go 等)提供更多的功能和工具,例如调试器,测试器,版本控制器等。

    • 适用性广:Visual Studio Code 不仅适合于 Web 开发和云应用开发,也可以用于其他领域和场景的开发,例如数据科学,机器学习,物联网等。它可以作为主力开发工具,也可以作为代码编辑器或文本编辑器使用。

    • 等等。

    总之,Visual Studio Code 是非常优秀的代码编辑器且完全适合你们。你们要做的就是要会配置(Visual Studio Code 可以经过自行配置实现 IDE 的几乎所有的功能,当然还有 IDE 所不具备的功能,因为就像上文说的具有可定制和可拓展的优点)和使用它,关于这些你们不必担心,只需参考我的另一篇文章《Visual Studio Code (VS Code) – C/C++ 入门》,这篇文章是我翻译 Visual Studio Code 官方文档中与 C/C++ 相关的部分后写的。在各大 IT 博客论坛发表后,获得了很多的评论,其中有很多是在配置 Visual Studio Code 时遇到的问题,我都一一解答后基本都解决了。近期,为了让你们按照文章操作起来更方便,我根据评论中的所有的问题、刚刚发布的 AI (要学会适当使用)等功能将文章进行了一次最大的更新,其中我还更改了官方文档中的操作步骤的顺序,使其更加合理(有些问题就是操作步骤的顺序不当而引起的)。文章中指出“本教程内容较多,但若严格按照本教程操作,就能轻松实现 Visual Studio Code – C/C++ 入门,所以请耐心完整地学习本教程。”另外,若遇到任何问题,可以咨询我(在手机上点击,没事的情况下会秒回)哦!

  • 练习【新手上路】语法入门&算法入门题单。学完《程序设计入门 —— C 语言》的 “第2周:计算” 后,就可以开始了。练习的重要性不用再次强调。

4 更多

  • 程序设计在线练习平台

    • PTA

    • 牛客竞赛

    • 洛谷

    • LeetCode

    • Codeforces

    • AtCoder

    • AcWing

  • 程序设计在线交流社区

    • Stack Overflow

    • SegmentFault

    • 知乎

    • CSDN

  • 《2023 全国普通高校大学生竞赛分析报告》竞赛目录(教育部认可的 84 项全国大学生学科竞赛)中的程序设计竞赛

    • ACM-ICPC 国际大学生程序设计竞赛

    • 中国高校计算机大赛 - 团体程序设计天梯赛

    • 蓝桥杯全国软件和信息技术专业人才大赛

    • 百度之星·程序设计大赛

    • 码蹄杯全国职业院校程序设计大赛

    其它的程序设计竞赛可以参考另外一位博主的博客《计算机专业的同学应该参加哪些比赛?》。

  • 源代码托管平台

    • GitHub

    • Gitee


  1. 程序设计 - 维基百科,自由的百科全书 ↩︎

  2. 程序设计语言 - 维基百科,自由的百科全书 ↩︎

  3. 翁恺 - 浙江大学个人主页 ↩︎

  4. Visual Studio Code - 维基百科,自由的百科全书 ↩︎

这篇关于一位计科学长写给 2023 级计算机类和人工智能专业的同学们的程序设计入门指南的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/185887

相关文章

Java操作Word文档的全面指南

《Java操作Word文档的全面指南》在Java开发中,操作Word文档是常见的业务需求,广泛应用于合同生成、报表输出、通知发布、法律文书生成、病历模板填写等场景,本文将全面介绍Java操作Word文... 目录简介段落页头与页脚页码表格图片批注文本框目录图表简介Word编程最重要的类是org.apach

Python设置Cookie永不超时的详细指南

《Python设置Cookie永不超时的详细指南》Cookie是一种存储在用户浏览器中的小型数据片段,用于记录用户的登录状态、偏好设置等信息,下面小编就来和大家详细讲讲Python如何设置Cookie... 目录一、Cookie的作用与重要性二、Cookie过期的原因三、实现Cookie永不超时的方法(一)

从入门到精通MySQL联合查询

《从入门到精通MySQL联合查询》:本文主要介绍从入门到精通MySQL联合查询,本文通过实例代码给大家介绍的非常详细,需要的朋友可以参考下... 目录摘要1. 多表联合查询时mysql内部原理2. 内连接3. 外连接4. 自连接5. 子查询6. 合并查询7. 插入查询结果摘要前面我们学习了数据库设计时要满

Linux中压缩、网络传输与系统监控工具的使用完整指南

《Linux中压缩、网络传输与系统监控工具的使用完整指南》在Linux系统管理中,压缩与传输工具是数据备份和远程协作的桥梁,而系统监控工具则是保障服务器稳定运行的眼睛,下面小编就来和大家详细介绍一下它... 目录引言一、压缩与解压:数据存储与传输的优化核心1. zip/unzip:通用压缩格式的便捷操作2.

从入门到精通C++11 <chrono> 库特性

《从入门到精通C++11<chrono>库特性》chrono库是C++11中一个非常强大和实用的库,它为时间处理提供了丰富的功能和类型安全的接口,通过本文的介绍,我们了解了chrono库的基本概念... 目录一、引言1.1 为什么需要<chrono>库1.2<chrono>库的基本概念二、时间段(Durat

Linux中SSH服务配置的全面指南

《Linux中SSH服务配置的全面指南》作为网络安全工程师,SSH(SecureShell)服务的安全配置是我们日常工作中不可忽视的重要环节,本文将从基础配置到高级安全加固,全面解析SSH服务的各项参... 目录概述基础配置详解端口与监听设置主机密钥配置认证机制强化禁用密码认证禁止root直接登录实现双因素

解析C++11 static_assert及与Boost库的关联从入门到精通

《解析C++11static_assert及与Boost库的关联从入门到精通》static_assert是C++中强大的编译时验证工具,它能够在编译阶段拦截不符合预期的类型或值,增强代码的健壮性,通... 目录一、背景知识:传统断言方法的局限性1.1 assert宏1.2 #error指令1.3 第三方解决

深度解析Spring Boot拦截器Interceptor与过滤器Filter的区别与实战指南

《深度解析SpringBoot拦截器Interceptor与过滤器Filter的区别与实战指南》本文深度解析SpringBoot中拦截器与过滤器的区别,涵盖执行顺序、依赖关系、异常处理等核心差异,并... 目录Spring Boot拦截器(Interceptor)与过滤器(Filter)深度解析:区别、实现

MySQL追踪数据库表更新操作来源的全面指南

《MySQL追踪数据库表更新操作来源的全面指南》本文将以一个具体问题为例,如何监测哪个IP来源对数据库表statistics_test进行了UPDATE操作,文内探讨了多种方法,并提供了详细的代码... 目录引言1. 为什么需要监控数据库更新操作2. 方法1:启用数据库审计日志(1)mysql/mariad

SpringBoot开发中十大常见陷阱深度解析与避坑指南

《SpringBoot开发中十大常见陷阱深度解析与避坑指南》在SpringBoot的开发过程中,即使是经验丰富的开发者也难免会遇到各种棘手的问题,本文将针对SpringBoot开发中十大常见的“坑... 目录引言一、配置总出错?是不是同时用了.properties和.yml?二、换个位置配置就失效?搞清楚加