大一大二的计算机专业同学应该学习什么?如何学习?

2023-12-05

本文是回答一位知友的提问:

已经大一下了 现在在学 C++ 感觉书上很多术语都不懂 编程自己也得花很多时间才能做出来,但感觉自己身边的同学却什么都会。有什么好的建议吗?我一定努力改正

正文

一、可能的原因

调整心态,克服恐惧和畏难情绪,建议反思一下造成你目前这种现状的原因是什么?

无外乎有两种原因:

原因一:可能是你大一上学期不努力或者不认真,同学们都在认真学,你没花足够的时间和心思在学习这些知识上;

原因二:你的接受和理解能力比一般同学要慢。

如果是原因一的话,你能来知乎提出这个问题,说明你已经意识到自己的不足,已经很难能可贵了,现在努力亡羊补牢未为晚也。

如果是原因二,需要自己花更多的时间去挨个解决知识点上的困难,可能是自己学习方法不得当,也可能就是比别人理解的慢,个体有差异,这个不能强求的,但是勤能补拙,花更多的时间和精力去专注。

二、技术学习本身

回到技术学习本身,作为一个过来人的老学长。一般在大一的时候,对于计算机专业,建议熟悉一门编程语言和其相应的开发环境。

这里就以你学习的 C/C++ 技术栈来讨论:

2.1 学好 C 语言

建议你一定要学好 C 语言,它应该作为你必须掌握好的语言。

C 语言是你之后学习操作系统、网络编程、多线程编程等计算机基础学科的钥匙。

你要熟悉 C 语言的基本语法,包括:

  • 顺序、条件、循环三大控制语句

  • C 中几大基元数据类型的用法

  • 熟悉掌握数组的用法

  • 熟练掌握指针的用法

  • 熟练掌握结构体、枚举、联合等数据类型的用法

  • 熟练使用常用 C 库函数,如控制台输入输出流、字符串操作、文件操作、时间函数等等

以上阶段算是启蒙阶段,在这个阶段,是基础编程语法的学习,当然,你不仅仅要掌握这些基本语法,你还要反复练习。

给你推荐一本书——《C语言程序设计 现代方法》,这本书是我大学那会儿迷茫时的一座灯塔,今天我把它推荐给你。

这本书在国外是作为经典大学教材的,两位译者一位是亚洲理工大学,一位是中科院,书翻译的也很地道。强烈推荐一下,有网友分享了本书的电子版:

链接: https://pan.baidu.com/s/1_-rYyn-k8qkfShqO_o1DZA 提取码: rwr6

当然,如果你熟悉了 C 语言的常用语法后,你想进一步针对 C 语言的一些细节和高级特性进行查漏补缺,推荐看看《C 专家编程》:

链接: https://pan.baidu.com/s/1ArlDD46qoAigSOVM8KKFCQ 提取码: i4ai

无论是 C 还是 C++,指针是非常关键也是核心的一个知识点,它上承 C/C++ 编程本身的学习,下承操作系统原理。当然,指针一直是很多初学者的老大难,可以把指针作为一个专题彻底搞明白,关于这方面也有一本非常好的书,这本书的语言写的也非常通俗易懂,我当年读完之后,对指针再无疑惑,书名叫《C和指针》:

链接: https://pan.baidu.com/s/1i0CZULII023kxMk7AfGeOg 提取码: vpcv

《C 专家编程》和《C和指针》都是国外经典书籍。

题主提到很多相关 C++ 概念不明白可能也是 C 语言中留下的“夹生饭”,至少指针相关的概念就是,如果存在这种现象,建议逐一夯实之。

2.2 熟悉 C/C++ 语言相关的开发工具链

无论你的理论知识学的多么麻溜,连代码写在什么地方、如何编译、如何调试和运行都不知道,一切都是水中月镜中花。所以掌握 C/C++ 语言相关的开发工具链你才能不断练习,提高动手能力,我们学习开发最终是为了付诸实践的。

熟悉 C/C++ 语言的相关的 IDE 开发环境,Windows上我推荐 Visual Studio,Mac 上可以使用Subline 或者VSCode,如果你最终的程序需要在 Linux 跑,你需要熟悉 cmake/make/gcc/g++/gdb 工具链,vim 的基本操作也要熟悉,但绝对不要直接在 vim 中写代码,纯属浪费时间,实际企业级开发也没人会这么做。这里强调一下,如果可能,至少要熟悉 Visual Studio 和 gdb 调试,调试需要掌握哪些内容呢?

建议掌握:

  • 如何启动和结束调试

  • 如何添加/删除/启用/禁用断点(包括普通断点、条件断点和数据断点)

  • 如何查看当天断点下的调用对战

  • 如何查看程序运行过程中的线程信息(这块可以放到下文再学)

  • 如何查看某个变量的内存值

掌握了一门编程语言加其开发的工具链,你的想法就可以通过动手变为现实了。熟悉了 C/C++ 语言和其相关的开发工具链,接下来你可以根据你的兴趣学习更多的高阶知识。

2.3 编程语言方面

学好 C++ 本身,学习的阶段,请抛弃各种总结经验技巧的面经,逐个掌握 C++ 语言的各个语法,包括但不局限于:

  • 指针和引用的概念

  • 指针与内存关系

  • 程序编译过程,静态链接库和动态链接库

  • static、const、#define的用法和区别

  • C和C++区别

  • 内存中的栈和堆分配

  • 面向对象理解

  • 访问限定符 public/protected/private

  • 构造函数/析构函数/拷贝构造

  • 多态

  • 虚函数与纯虚函数、虚函数实现机制、虚函数表

  • 继承原理、虚继承、菱形继承

  • new/delete和malloc/free

  • 重载、重写和覆盖

  • 类型转换方式

  • RAII 与 pimpl 惯用法

  • 内存溢出和内存泄漏

  • STL标准模板库

  • 迭代器、空间配置器理解

  • 常用容器特点、用法以及底层实现vector、list、deque、set、map、unorderedmap

C++11/14/17 新标准也慢慢成为主流,这块也要熟悉,要熟悉新标准常用的语法与新功能,包括:另外,时至今日,你一定要熟悉 C++11/14/17 常用的语言特性和类库,这里简单地列一下:

  • 左值/右值/std::move/std::forward

  • 统一的类成员初始化语法与 std::initializer_list

  • 注解标签(attributes)

  • final/override/=default/=delete 语法

  • auto 关键字

  • Range-based 循环语法

  • 结构化绑定

  • stl 容器新增的实用方法

  • std::thread

  • 线程局部存储 thread_local

  • 线程同步原语 std::mutex、std::condition_variable 等

  • 原子操作类

  • 智能指针类

  • std::bind/std::function

C++11/14 网上的资料已经很多了,C++17 的资料不多,重点掌握的还是 C++11 引入的各种实用特性,这就给读者推荐一些我读过的书:

  • 《深入理解 C++11:C++11 新特性解析与应用》

  • 《深入应用 C++11:代码优化与工程级应用》

  • 《C++17 完全指南》

  • 《Cpp 17 in Detail》

链接: https://pan.baidu.com/s/1xVuBcfm0qMvhHsMSAXcA4w 提取码: g4iy

2.4 学好算法和数据结构

如果你想毕业后进大厂,从这时开始学习算法和数据结构。

一定要找一两本经典书籍系统地学习下常见的算法理论、思想和常用的数据结构知识。等熟悉了这块的知识,再适当地刷一些算法题目或者做一些算法练习。

学习算法和数据一定不能急功近利,算法和数据结构的知识一定要作为一个长期的学习目标。

与 C 语言相关的算法和数据结构的书有:

《数据结构与算法分析— C语言描述

链接: https://pan.baidu.com/s/1uS008c8I3TNXytglH-dTpQ 提取码: 2d7j

当然,如果你觉得这块很难理解,可以先通过一些轻松点的书入门以建立一些感官认识,推荐《大话数据结构》这本书:

链接: https://pan.baidu.com/s/1Kc18KXju8QoX9VKGYUz9xA 提取码: 4hi1

2.5 注重代码规范与风格优化

在你学习的过程中,请一定要认真对待自己每一个变量名、函数名,养成良好的代码习惯。我学生时代花了大量时间去学习一些教人写出优美风格的代码书籍、资料、源码,在你还是个小白的时候,要认真精读一些优秀代码,不仅要学习它们的整体设计思路,还要学习它们的代码风格和细节。这里推荐《程序设计实践》《代码整洁之道》这两本书,特别是《程序设计实践》,强烈建议学生朋友看一下,能大幅度地提高你实际编码的技巧和编码风格。

我刚毕业那会儿,在做一些笔试题的时候,虽然笔试题本身可能没解答出来,但是好多次都是因为代码风格非常好赢得面试官的青睐,也拿到了不少的机会。这和我上学的时候,刻意注重培养这一块的能力有关。

以上是我觉得大一大二的计算机专业的同学应该要做的事情。

三、写在最后的话

越早意识到自己不足,越早行动起来,功不唐捐。

最后用哈佛图书馆的校训中的一句话来勉励一下:今天不走,明天要跑;没有艰辛,便无收获。

祝福你们。

上文中提到的书单,完整列表在这里:

计算机必看经典书籍(含下载方式)

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

大一大二的计算机专业同学应该学习什么?如何学习? 的相关文章

  • 如何在测试套件中定义 JUnit 方法规则?

    我有一个类 它是 JUnit 测试类的 JUnit 套件 我想定义一个规则on the suite 这是可以做到的 但需要做一些工作 您还需要定义自己的 Suite 运行程序和测试运行程序 然后在测试运行程序中重写 runChild 使用以
  • Google 地图查询返回的 JSON 包含像 \x26 这样的编码字符(如何解码?)

    在 Java 应用程序中 我获取 JSON 来自 Google 地图 其中包含以下字符 x26我想将其转换为其原始字符 据我所知 这是一个 UTF 8 表示法 但我不完全确定 在源 JSON 中 可能会出现各种编码字符 例如 x3c div
  • 将链接对象转换为流或集合

    我想迭代堆栈跟踪 堆栈跟踪由可抛出对象组成 其 getCause 返回下一个可抛出对象 最后一次调用 getCause 返回 null 示例 a gt b gt null 我尝试使用 Stream iterable 这会导致 NullPoi
  • 无法加载 jar 文件的主类

    我使用 Eclipse IDE 开发了一个应用程序 创建应用程序后 我以 jar 格式导出项目 当我尝试运行此 jar 文件时 出现错误 无法加载主类 请帮忙 当您将项目导出为 jar 时 请参阅此所以问题 https stackoverf
  • 有没有好的方法来解析用户代理字符串?

    我有一个Java接收模块User Agent来自最终用户浏览器的字符串的行为需要略有不同 具体取决于浏览器类型 浏览器版本甚至操作系统 例如 FireFox 7 0 Win7 Safari 3 2 iOS9 我明白了User Agent由于
  • MI设备中即使应用程序被杀死,如何运行后台服务

    您好 我正在使用 alaram 管理器运行后台服务 它工作正常 但对于某些 mi 设备 后台服务无法工作 我使用了服务 但它无法工作 如何在 mi 中运行我的后台服务 MI UI有自己的安全选项 所以你需要的不仅仅是上面提到的粘性服务 你需
  • Google Inbox 类似 RecyclerView 项目打开动画

    目前 我正在尝试实现 Google Inbox 例如RecyclerView行为 我对电子邮件打开动画很好奇 我的问题是 该怎么做 我的意思是 他们使用了哪种方法 他们用过吗ItemAnimator dispatchChangeStarti
  • PropertySources 中各种源的优先级

    Spring引入了新的注释 PropertySources对于所有标记为的类 Configuration since 4 0 需要不同的 PropertySource作为论证 PropertySources PropertySource c
  • 如何将 XMP XML 块序列化为现有的 JPEG 图像?

    我有许多 JPEG 图像 其中包含损坏的 XMP XML 块 我可以轻松修复这些块 但我不确定如何将 固定 数据写回图像文件 我目前正在使用 JAVA 但我愿意接受任何能让这项任务变得容易的事情 这是目标关于 XMP XML 的另一个问题
  • 所有junit测试后的清理

    在我的项目中 我必须在所有测试之前进行一些存储库设置 这是使用一些棘手的静态规则来完成的 然而 在所有测试之后我不知道如何进行清理 我不想保留一些神奇的静态数字来引用所有测试方法的数量 我应该一直维护它 最受赞赏的方法是添加一些侦听器 该侦
  • 使用 Guava 联合两个 ImmutableEnumSets

    我想联合两个ImmutableEnumSets来自番石榴 这是我的尝试 public final class OurColors public enum Colors RED GREEN BLUE YELLOW PINK BLACK pub
  • 具有多种值类型的 Java 枚举

    基本上我所做的是为国家编写一个枚举 我希望不仅能够像国家一样访问它们 而且还能够访问它们的缩写以及它们是否是原始殖民地 public enum States MASSACHUSETTS Massachusetts MA true MICHI
  • 从 Java 日历迁移到 Joda 日期时间

    以前 当我第一次设计股票应用相关软件时 我决定使用java util Date表示股票的日期 时间信息 后来我体会到了大部分方法java util Date已弃用 因此 很快 我重构了所有代码以利用java util Calendar 然而
  • Apache Commons CLI:替代已弃用的 OptionBuilder?

    IntelliJ 显示此示例代码中不推荐使用 OptionBuilderhttp commons apache org proper commons cli usage html http commons apache org proper
  • 将 RSA 密钥从 BigIntegers 转换为SubjectPublicKeyInfo 形式

    WARNING 最初的问题是关于 PKCS 1 编码密钥 而问题中的实际示例需要SubjectPublicKeyInfo X 509 编码密钥 我目前正致力于在 java 中从头开始实现 RSA 算法 特别是密钥生成方面 现在我的代码可以给
  • 在 Selenium WebDriver 上如何从 Span 标签获取文本

    在 Selenium Webdriver 上 如何从 span 标记检索文本并打印 我需要提取文本UPS Overnight Free HTML代码如下 div id customSelect 3 class select wrapper
  • Path2D 上的鼠标指针检测

    我构建了一个Path2D http docs oracle com javase 7 docs api java awt geom Path2D html表示由直线组成的未闭合形状 我希望能够检测何时单击鼠标并且鼠标指针靠近路径 在几个像素
  • 如何将实例变量传递到 Quartz 作业中?

    我想知道如何在 Quartz 中外部传递实例变量 下面是我想写的伪代码 如何将 externalInstance 传递到此作业中 public class SimpleJob implements Job Override public v
  • Java中有类似分支/跳转表的东西吗?

    Java有类似分支表或跳转表的东西吗 分支表或跳转表是 根据维基百科 http en wikipedia org wiki Branch table 用于描述使用分支指令表将程序控制 分支 转移到程序的另一部分 或可能已动态加载的不同程序
  • Java 推断泛型类型

    我正在寻找类似的推断捕获泛型类型的概念 类似于以下方法片段 但不是捕获泛型类型的类 public

随机推荐

  • 基于Vue+nodejs+elementUI的校园二手书管理系统oc81w

    最终实现一个基于vue2 0 node js且功能完善 流畅易用的二手书交易平台 为用户提供了一个能登录注册 能买能卖 能搜索二手书的平台 拥有良好的用户体验 帮助他们更加便捷地进行二手书籍的交流和交易 通过该系统 用户可以轻松地添加 编辑
  • 基于Java的智慧图书馆图书借阅推荐系统springboot+vue

    本系统共包含17个表 分别是关于我们表 配置文件表 图书信息评论表表 罚款信息表 归还记录表 借阅记录表 公告信息表 收藏表表 关于我们表 token表表 图书分类表 图书盘点表 图书信息表 用户表表 信息提醒表 续借记录表 用户表等信息表
  • python汽车4S店服务系统django汽车用品商城系统0dq3x

    系统用户功能为 1 用户 主要通过汽车服务商城浏览服务并选择下单 功能可表现为注册登录 信息服务 信息浏览 推荐服务 预约服务 在线咨询 客户评价 注册登录 对第一次使用的用户进行账号注册 可以选择记住密码 信息服务 学生能修改个人信息 修
  • django基于Python可视化分析系统的在线学习资源推荐系统的设计与实现vue

    1 系统总功能模块设计 可视化的学习系统分两大部分 即管理员管理和用户管理 系统按照用户的实际需求开发而来 贴近生活 从管理员出拿到分配好的账号密码可以进入系统 使用相关的系统应用 管理员权限最大 其次的用户 管理员总体负责整体系统的运行维
  • django基于Python的热门旅游景点数据分析系统vue

    热门旅游景点数据分析系统综合网络空间开发设计要求 目的是将传统管理方式转换为在网上管理 完成热门旅游景点数据分析管理的方便快捷 安全性高 交易规范做了保障 目标明确 热门旅游景点数据分析系统功能主要包括个人中心 门票信息管理 名宿信息管理
  • nodejs微信小程序+python+PHP电费管理系统的设计与实现-毕业设计推荐

    目 录 摘 要 I ABSTRACT II 目 录 II 第1章 绪论 1 1 1背景及意义 1 1 2 国内外研究概况 1 1 3 研究的内容 1 第2章 相关技术 3 2 1 nodejs简介 4 2 2 express框架介绍 6 2
  • C++11/14/17 学习书籍推荐

    本文是回答一位知友的提问 如果现在买C 17的书学习 里面是否包含C 14 C 11的知识 或者推荐哪个版本 和书谢谢 正文 我理解题主应该是想学习 C 新标准 即 C 11 及之后版本的 C 标准新增的一些实用语言特性 时至今日 C 11
  • 如何学习 C 语言?

    人常说 给一个人看一个程序 你将折磨他一天 教一个人写程序 你将这么他一辈子 你确定要学 C 语言吗 如果准备好了 咱们进入正题 万事开头难 C 语言是一门下限很高上限也很高的编程语言 它是你之后学习操作系统 网络编程 多线程编程等计算机基
  • 计算机毕业设计选题推荐-SpringBoot 桂林旅游景点导游平台

    作者主页 疯狂行者 java领域优质创作者 专注于Java技术领域技术交流 文末获取源码 精彩专栏推荐订阅 在 下方专栏 Java精彩实战项目案例 Java精彩新手项目案例 Python精彩新手项目案例 文章目录 Java精彩实战项目案例
  • java高校学生实习管理系统springboot+vue

    高校学生实习管理系统管理员 学生 教师 管理员功能有个人中心 学生管理 教师管理 公告信息管理 实习申请管理 实习信息管理 实习成绩管理 学生可以注册 可以实习申请 查看公告信息 查看实习成绩 教师给学生添加实习成绩 审核学生实习申请 查看
  • C++ 游戏服务器方向需要多少功底?

    这篇文章是回答一位知友的提问 现在大二了马上升大三 就读于一个很垫底的211 专业是计算机相关的 但是对本专业内容不感兴趣 希望能从事c 后端的工作 对游戏比较有兴趣 但又不知道需要哪方面的知识 希望各位能给出一个客观的评价或者批评 帮忙指
  • C/C++ 函数调用是如何实现的?

    一 写在前面的话 C C 函数调用方式与栈原理是 C C 开发必须要掌握的基础知识 也是高级技术岗位面试中高频题 我真的真的真的建议无论是使用 C C 的学生还是广大 C C 开发者 都该掌握此回答中所介绍的知识 如果你看不懂接下来第二部分
  • Nodejs+vue+elementui+mysql酒店宾馆客房预订管理系统479v8

    对一个宾馆而言 一个良好的管理系统就等于优质的服务 赚钱的工具 为宾馆的发展带来光明的前景 模块介绍 1 用户注册与登录模块 员工和管理员注册与登录 个人信息修改等 2 个人中心模块 对个人信息进行修改添加等 3 员工管理模块 添加 修改员
  • 基于java的高校教职工档案管理系统springboot+jsp

    一 拟解决的关键问题 1 登陆模块 该模块对档案管理系统设定登录约束 并在该模块对档案系统登录用户进行权限分配 2 档案收集模块 对各类档案材料进行录入和入库 数据库 主要包括学历档案信息 工作经历档案信息 职称档案信息 职务信息档案 表彰
  • python+django民俗风俗习惯传统文化网站pycharm毕业设计

    1 所有记录信息要保持全面 信息记录内容不可以是空 2 各种数据间相互联系要保持正确 3 相同数据在不同记录中要保持一致 传统文化如果还用之前的只有线下进行黑板报形式的去实行 已经很落伍了 这样会导致了效率低下 而且 时间一长的话 积累下来
  • 计算机毕业设计python+django家庭养老服务管理系统vr18o

    快本居家养老系统管理员和工作人员两个角色 管理员功能有个人中心 老人账号管理 工作人员管理 老人档案管理 订单申请管理 检查检验项目管理 维修服务管理 订单信息管理 转诊信息管理 生活服务管理 服务记录管理 生活用品信息管理 药品信息管理
  • 基于Android的旅游服务APP系统

    收藏关注不迷路 源码文章末 文章目录 前言 一 项目介绍 二 开发环境 三 功能介绍 四 核心代码 五 效果图 六 文章目录 前言 本Android的旅游服务APP是根据当前我国旅游的大环境相关的内容实际情况开发的 在系统语言选择上我们使用
  • nodejs微信小程序+python+PHP健身房信息管理系统的设计与实现-计算机毕业设计推荐

    目 录 摘 要 I ABSTRACT II 目 录 II 第1章 绪论 1 1 1背景及意义 1 1 2 国内外研究概况 1 1 3 研究的内容 1 第2章 相关技术 3 2 1 nodejs简介 4 2 2 express框架介绍 6 2
  • 计算机毕业设计推荐之java网上购物商城系统sringboot+vue_o9m4k

    系统使用过程主要涉及到管理员和用户两种角色 主要包含个人中心 用户管理 商品类别管理 热卖商品管理 投诉建议 系统管理 订单管理等功能 系统开发主要在 Windows 系统下进行 采用支持跨平台的 Java语言开发完成 因此可以运行在任意开
  • 大一大二的计算机专业同学应该学习什么?如何学习?

    本文是回答一位知友的提问 已经大一下了 现在在学 C 感觉书上很多术语都不懂 编程自己也得花很多时间才能做出来 但感觉自己身边的同学却什么都会 有什么好的建议吗 我一定努力改正 正文 一 可能的原因 调整心态 克服恐惧和畏难情绪 建议反思一