前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >大一大二的计算机专业同学应该学习什么?如何学习?

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

作者头像
范蠡
发布2021-08-10 15:17:41
7710
发布2021-08-10 15:17:41
举报

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

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

正文

一、可能的原因

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

无外乎有两种原因:

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

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

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

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

二、技术学习本身

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

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

2.1 学好 C 语言

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

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

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

  • 顺序、条件、循环三大控制语句
  • C 中几大基元数据类型的用法
  • 熟悉掌握数组的用法
  • 熟练掌握指针的用法
  • 熟练掌握结构体、枚举、联合等数据类型的用法
  • 熟练使用常用 C 库函数,如控制台输入输出流、字符串操作、文件操作、时间函数等等

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

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

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

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

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

《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》

2.4 学好算法和数据结构

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

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

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

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

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

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

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

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

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

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

三、写在最后的话

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

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

祝福你们。

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2021-08-07,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 高性能服务器开发 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 正文
  • 一、可能的原因
  • 二、技术学习本身
    • 2.1 学好 C 语言
      • 2.2 熟悉 C/C++ 语言相关的开发工具链
        • 2.3 编程语言方面
          • 2.4 学好算法和数据结构
            • 2.5 注重代码规范与风格优化
            • 三、写在最后的话
            相关产品与服务
            容器服务
            腾讯云容器服务(Tencent Kubernetes Engine, TKE)基于原生 kubernetes 提供以容器为核心的、高度可扩展的高性能容器管理服务,覆盖 Serverless、边缘计算、分布式云等多种业务部署场景,业内首创单个集群兼容多种计算节点的容器资源管理模式。同时产品作为云原生 Finops 领先布道者,主导开源项目Crane,全面助力客户实现资源优化、成本控制。
            领券
            问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档