一位计科学长写给 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

相关文章

Spring Security 从入门到进阶系列教程

Spring Security 入门系列 《保护 Web 应用的安全》 《Spring-Security-入门(一):登录与退出》 《Spring-Security-入门(二):基于数据库验证》 《Spring-Security-入门(三):密码加密》 《Spring-Security-入门(四):自定义-Filter》 《Spring-Security-入门(五):在 Sprin

基于人工智能的图像分类系统

目录 引言项目背景环境准备 硬件要求软件安装与配置系统设计 系统架构关键技术代码示例 数据预处理模型训练模型预测应用场景结论 1. 引言 图像分类是计算机视觉中的一个重要任务,目标是自动识别图像中的对象类别。通过卷积神经网络(CNN)等深度学习技术,我们可以构建高效的图像分类系统,广泛应用于自动驾驶、医疗影像诊断、监控分析等领域。本文将介绍如何构建一个基于人工智能的图像分类系统,包括环境

Retrieval-based-Voice-Conversion-WebUI模型构建指南

一、模型介绍 Retrieval-based-Voice-Conversion-WebUI(简称 RVC)模型是一个基于 VITS(Variational Inference with adversarial learning for end-to-end Text-to-Speech)的简单易用的语音转换框架。 具有以下特点 简单易用:RVC 模型通过简单易用的网页界面,使得用户无需深入了

数论入门整理(updating)

一、gcd lcm 基础中的基础,一般用来处理计算第一步什么的,分数化简之类。 LL gcd(LL a, LL b) { return b ? gcd(b, a % b) : a; } <pre name="code" class="cpp">LL lcm(LL a, LL b){LL c = gcd(a, b);return a / c * b;} 例题:

Java 创建图形用户界面(GUI)入门指南(Swing库 JFrame 类)概述

概述 基本概念 Java Swing 的架构 Java Swing 是一个为 Java 设计的 GUI 工具包,是 JAVA 基础类的一部分,基于 Java AWT 构建,提供了一系列轻量级、可定制的图形用户界面(GUI)组件。 与 AWT 相比,Swing 提供了许多比 AWT 更好的屏幕显示元素,更加灵活和可定制,具有更好的跨平台性能。 组件和容器 Java Swing 提供了许多

【IPV6从入门到起飞】5-1 IPV6+Home Assistant(搭建基本环境)

【IPV6从入门到起飞】5-1 IPV6+Home Assistant #搭建基本环境 1 背景2 docker下载 hass3 创建容器4 浏览器访问 hass5 手机APP远程访问hass6 更多玩法 1 背景 既然电脑可以IPV6入站,手机流量可以访问IPV6网络的服务,为什么不在电脑搭建Home Assistant(hass),来控制你的设备呢?@智能家居 @万物互联

poj 2104 and hdu 2665 划分树模板入门题

题意: 给一个数组n(1e5)个数,给一个范围(fr, to, k),求这个范围中第k大的数。 解析: 划分树入门。 bing神的模板。 坑爹的地方是把-l 看成了-1........ 一直re。 代码: poj 2104: #include <iostream>#include <cstdio>#include <cstdlib>#include <al

MySQL-CRUD入门1

文章目录 认识配置文件client节点mysql节点mysqld节点 数据的添加(Create)添加一行数据添加多行数据两种添加数据的效率对比 数据的查询(Retrieve)全列查询指定列查询查询中带有表达式关于字面量关于as重命名 临时表引入distinct去重order by 排序关于NULL 认识配置文件 在我们的MySQL服务安装好了之后, 会有一个配置文件, 也就

基于UE5和ROS2的激光雷达+深度RGBD相机小车的仿真指南(五):Blender锥桶建模

前言 本系列教程旨在使用UE5配置一个具备激光雷达+深度摄像机的仿真小车,并使用通过跨平台的方式进行ROS2和UE5仿真的通讯,达到小车自主导航的目的。本教程默认有ROS2导航及其gazebo仿真相关方面基础,Nav2相关的学习教程可以参考本人的其他博客Nav2代价地图实现和原理–Nav2源码解读之CostMap2D(上)-CSDN博客往期教程: 第一期:基于UE5和ROS2的激光雷达+深度RG

CSP 2023 提高级第一轮 CSP-S 2023初试题 完善程序第二题解析 未完

一、题目阅读 (最大值之和)给定整数序列 a0,⋯,an−1,求该序列所有非空连续子序列的最大值之和。上述参数满足 1≤n≤105 和 1≤ai≤108。 一个序列的非空连续子序列可以用两个下标 ll 和 rr(其中0≤l≤r<n0≤l≤r<n)表示,对应的序列为 al,al+1,⋯,ar​。两个非空连续子序列不同,当且仅当下标不同。 例如,当原序列为 [1,2,1,2] 时,要计算子序列 [