V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
NatsumeMio
V2EX  ›  程序员

本科请教计算机科学选修科目如何选择

  •  
  •   NatsumeMio · 60 天前 · 2572 次点击
    这是一个创建于 60 天前的主题,其中的信息可能已经有所发展或是发生改变。
    各位在职大佬程序员们,本人目前本科大一,专业是计算机科学,除了必修科目之外,我需要在选修科目里大概选择十几个课程。请问各位在职程序员们,有什么推荐选择的课程(对以后职业生涯帮助较大 /较为吃香)选择?十分感谢各位。

    以下为列表:
    计算机体系结构
    编译技术
    算法设计
    算法设计与分析
    函数式编程
    编程语言原理
    人工智能
    计算机图形学
    计算的法律方面
    机器学习
    量子信息与计算
    计算机视觉
    电子商务技术
    万维网上的现代技术
    高级数据库系统
    计算机游戏设计与编程
    交互式移动应用程序设计和编程
    应用深度学习
    高级算法分析
    算法博弈论
    生物信息学
    统计学习
    网络安全
    机器人学
    密码学
    分布式和并行计算
    数据驱动计算机动画
    自然语言处理
    AI 实践:实验和应用
    数字取证
    网络攻防
    量子算法和计算机体系结构
    工程质量软件
    科学计算
    物联网数据分析
    41 条回复    2023-02-02 16:21:25 +08:00
    cpstar
        1
    cpstar  
       60 天前
    这不找你的辅导员、找学长、找专业责任教授,来 v 站,还真觉得人均科班计算机么?

    课程有前后关联体系,计算机本身是一门应用学科,看你要干啥了;或者研究计算机本身(就是计算机科学),那也是需要方向。但是这单子里有一些课程是专业必修课吧,比如体系结构、编译技术、算法设计(怎么还有一个算法设计与分析,课程设置是不是有问题)。
    juggtt213
        2
    juggtt213  
       60 天前
    ...感觉学校里很多老师教书就是应付一下,或者教学的内容好几年没变过了,就这样对着课程名字选的话,能不能遇到教学比较上心的老师学到比较有时效性的知识全看运气。
    不如问问学长学姐有没有比较靠谱的老师,如果问不到的话可以退而考虑比较容易通过或者是拿到高分的课,然后把应付学校课程的时间节省下来的时间用来自学...
    rsy
        3
    rsy  
       60 天前 via Android
    如果有保研通道建议选易刷分的科目,提升绩点为重心,就算不在国内读研,出国也是要看 GPA 的,课程分数越高越好。等到大三大四没课的时候出去实习才是对职业生涯帮助最大的。找工作不关心你学过哪些课程,专业对口就够了,主要还是看你算法以及基础知识的掌握情况,这个多刷 leetcode 和面经即可。
    Noicdi
        4
    Noicdi  
       60 天前 via iPhone   ❤️ 3
    说实话,国内除了那几所顶尖,其余的高校的计科都不行(我本科也是),全是照本宣科读 ppt 。建议评估一下自己平常上课时老师们讲的咋样,不行的话不如自己上网找课程学,比如 CS 自学指南和自学计算机科学,这两个教程
    iyear
        5
    iyear  
       60 天前
    除了几所 top 外,计算机大学课程意义相当小,你愿意学老师还懒得教。所以在感兴趣 /水 /好拿绩点之间根据自己未来的方向选就行了,没那么讲究。
    Jooooooooo
        6
    Jooooooooo  
       60 天前
    真要学, 至少学学课本内容, 从这里面挑吧

    计算机体系结构
    编译技术
    算法设计
    算法设计与分析
    函数式编程
    编程语言原理
    高级数据库系统
    统计学习
    分布式和并行计算
    janus77
        7
    janus77  
       60 天前   ❤️ 1
    这里面有一部分是基础课,一部分是分研究方向的课。基础课肯定就那么几门,剩下的课根据你的兴趣爱好去选,比如你喜欢安全方向就选网络安全、密码学,喜欢游戏方向就选图形学、游戏设计,诸如此类。
    thinkershare
        8
    thinkershare  
       60 天前   ❤️ 1
    核心课程: 1-3 本教材, 然后扩展这些核心课程, 这些核心课程都有对应的优秀教材,并存在大量的扩展性阅读资料:
    计算机概述(文化, 入门课程)
    计算机组成原理(数字逻辑电路可选)
    操作系统
    数据结构与算法(这 2 个东西前期不需要分家)
    编译原理(可选)
    数据库系统(至少熟练使用不同类型数据中常用的 1 种)

    学习至少三类编程语言:面向过程, 面向对象, 函数式, 如果前面三门没有 JavaScript , 最好还是要加上它。
    最后选择一个自己最感兴趣的开发平台(Platform)。这部分需要深入挖掘,大学毕业时候能出活,毕业后能靠其生存。

    然后是学习软件设计,这个路非常漫长,需要实践,从面向过程开始,到深入理解面向对象,函数式编程,项目管理,需求分析,分布式系统设计,云原生等,路漫漫,也不需要着急。

    学好数学,特别是离线数学 /线代 /高数,它们都可以让你走的更远。学好英语对掌握第一手的学习资料有非常大的帮助。

    最后是兴趣扩展,这个就看你感兴趣的方向了,如果你打算读研,那学习的思路可能就需要调整。
    最后的建议: 不要在那些非核心的赶时髦的课程上花费太多时间,因为大学的精力和时间都是有限的,你必须选择舍弃掉那些在大学本科你不可能深入研究的课题。
    kizunai
        9
    kizunai  
       60 天前
    建议哪门课给的分高选哪个
    计算机不同于别的专业,网上资料多,感兴趣的内容可以自学
    levelworm
        10
    levelworm  
       60 天前 via Android
    不如这样,看一下 MIT/CMU/BKL 这些名校的课程,哪些感兴趣的,就先学本校同名的课程打底子。
    mythabc
        11
    mythabc  
       60 天前 via Android
    现在这么卷,还是建议选给分高的。GPA 高润都有优势
    MoRanjiang
        12
    MoRanjiang  
       60 天前
    羡慕能选专业课的学校
    kkwa56188
        13
    kkwa56188  
       60 天前
    凭记忆说几个, 能够将 科班的 和 半路出家的 区分开来的 几门课:
    计算机组成原理
    操作系统
    编译原理
    离散数学
    数据结构
    数据库设计
    计算机网络
    运筹学(研)
    Nazz
        14
    Nazz  
       59 天前
    强烈推荐数据结构与算法
    wu67
        15
    wu67  
       59 天前
    问你的师兄. 哪些老师好说话容易给高分就选哪些.
    这些课其实全都教一些比较基础的东西的, 起码当年我们学校是这样, 你想深入学习, 还是得靠自己, 学校开一门课程领你进门而已.

    但是比较重要的还是建议选. 例如:
    数据库, 数据结构,
    离散, 概率论, 编译原理(3 个都建议学, 虽然 crud boy 可能也用不到). 工作中虽然不会真的让你写编译器, 当起码能帮助你理解怎么写好代码, 哪种写法性能更好(虽然可能都比不上商业 /开源环境的优化力度就是了 hhh, 例如 v8 、各 jdk)
    计算机组成原理和逻辑电路偏硬件的, 印象中是一个箱子装着 386 还是啥, 在那打开关记亮灯灭灯, 如果没兴趣可能会很痛苦, ps: 例如我...
    计算机网络, 额我没学好, 一眼难尽, 老师当年在教我们划分子网啥的, 交换机啥啥啥之类, 到后面就像天书一样了, 比较催眠.
    eaststarpen
        16
    eaststarpen  
       59 天前
    不知道其他学校是咋样的, 江苏普通一本, 计算机非强势专业

    我们学校选课啥的都是笑话, 实际上开什么课早就定好了, 没有选择余地。 开放选课, 班长通知选什么, 选好, 结束。

    真的想学东西还是自己网上找吧(op 如果顶尖学府当我没说)

    附: https://csdiy.wiki/
    apake
        17
    apake  
       59 天前
    函数式编程, 编程语言原理
    JamesR
        18
    JamesR  
       59 天前
    计算机游戏设计与编程
    交互式移动应用程序设计和编程
    AI 实践:实验和应用

    选这几个就行了,计算机编程是门偏重实际应用的学科,尽量选择实际做开发项目的就行,弥补你缺乏编程项目的短板。
    JamesR
        19
    JamesR  
       59 天前
    选修课那三个,专业课按别的学校的专业课或者上面回答即可。
    feather12315
        20
    feather12315  
       59 天前 via Android
    计算机体系结构
    编译技术
    编程语言原理
    计算机图形学
    机器学习 / 计算机视觉 (选一)
    网络安全
    分布式和并行计算
    DeltaC
        21
    DeltaC  
       59 天前   ❤️ 1
    选什么课,我觉得不太重要,有个高绩点,挺重要。
    此外,我比较认同楼上,从 https://csdiy.wiki/ 开始,没事去 leetcode 刷题。
    focux
        22
    focux  
       59 天前
    《计算机体系结构》
    《编译技术》
    这两本一定要啃下来。。。
    bigbigbigbug
        23
    bigbigbigbug  
       59 天前
    考研吗?考就选容易刷分的,问学长。不考?那你指望一个选修能带来什么?凭兴趣来吧,要不就看看老师,凭性癖来
    simplereasy
        24
    simplereasy  
       59 天前
    我觉得没有意义,教的这些都没啥用.
    学好必修的数据库和数据结构,再应用好一门语言就可以了.
    其余可以看兴趣学.大部分教的都比较落伍
    chrosing
        25
    chrosing  
       59 天前
    我高中毕业,培训出身,我老大曾经跟我说过,我业务理论没啥问题了.但是欠缺基础,叫我去学 计算机系统与编程相关的.关于系统的设计思想,算法逻辑的基础,还有一些比较底层的编译(了解要知道的程度),数据库相关的
    xhinliang
        26
    xhinliang  
       59 天前
    感觉都挺好的,不知道能学到多少,具体可能跟学校以及授课老师关系很大。如果让我选我可能会选这些:

    高级数据库系统
    机器学习
    算法设计与分析
    高级算法分析
    算法博弈论
    函数式编程
    编程语言原理
    人工智能
    计算机体系结构
    分布式和并行计算
    jmc891205
        27
    jmc891205  
       59 天前
    大一选基础的课就好,不用选那些偏应用的课
    计算机体系结构
    编译技术
    算法设计
    编程语言原理
    zerozerone
        28
    zerozerone  
       59 天前
    别听他们瞎推荐, 这些课程是有发展路径的, 有游戏相关, 算法相关, 体系设计相关, 编程语言相关, 等等几个分支, 课程之间有前后学习顺序, 建议挑一个技能树挨个从前往后点, 乱选啥也学不好
    fiypig
        29
    fiypig  
       59 天前
    这看都差蛮多的,有些硬件相关的有些是人工智能的,这个你要去跟老师核实清楚了,
    forgottencoast
        30
    forgottencoast  
       59 天前
    如果是我,我选:
    计算机体系结构
    编译技术
    算法设计
    算法设计与分析
    函数式编程
    编程语言原理
    人工智能
    计算机图形学
    计算的法律方面
    机器学习
    高级数据库系统
    高级算法分析
    算法博弈论
    统计学习
    分布式和并行计算
    自然语言处理
    AI 实践:实验和应用
    数字取证
    工程质量软件
    科学计算
    物联网数据分析
    7gugu
        31
    7gugu  
       59 天前
    二本和三本的请考虑容易通过的,特别是在三本中,这些都是水课。
    perfectlife
        32
    perfectlife  
       59 天前 via Android
    其实选啥都差不多
    8355
        33
    8355  
       59 天前
    算法设计
    算法设计与分析
    人工智能
    机器学习
    应用深度学习
    高级算法分析
    aw2350
        34
    aw2350  
       59 天前
    就那些半吊子老师,你要是真想学,自己上网上找,要是刷分,找个最省事的
    z1645444
        35
    z1645444  
       59 天前 via Android
    很负责的老师 + 你自己也感兴趣的课,直接选。或者选能直接通关的,时间分给其他事
    sadfQED2
        36
    sadfQED2  
       59 天前 via Android
    选自己感兴趣+老师负责靠谱的。
    HarrisonLee
        37
    HarrisonLee  
       59 天前
    如果你的学校一般,那么强烈建议自学,而且不要使用学校发的教材。如果能够时光倒流,我会在大学期间重点学习 Linux 内核,因为这综合了编程语言( C 语言)、数据结构、计算机组成原理、操作系统理论、计算机网络。不要单独学习这些学科,不然你学完就忘了,要把它们联系起来才不会。给你推荐一些资料吧:

    * 编程语言方面:《 C 语言现代方法(第二版修订版)》,学 Linux 内核,一定要把 C 语言学好,这本书讲的很详细,也很现代,不要看那种很老还很多错误的书。
    * 计算机组成原理方面:《 x86 汇编语言 从实模式到保护模式(第二版)》第一版是 10 前出的,第二版 2023 年 1 月才刚出版上市。虽然名字包含汇编语言,其实也讲了很多 cpu 的工作原理。只学实模式是不够的(王爽那本纯粹就在讲实模式下的指令),要把保护模式也学了,不然一些操作系统的概念不是很好理解(比如特权级与内核态用户态之类的)。要学就学现在正在被大量使用的架构,不要学学校教的那些老掉牙的计算机组成原理。此书作者李忠也在网易云课堂开设了 x86-32 和 x86-64 两门课程(不是打广告),可以作为书的扩展。
    * 数据结构方面:其实就用学校发的数据结构书就够了,不要轻易去看黑书《算法》!!!
    * 计算机网络:谢希仁的《计算机网络》,现在应该是第 8 版了吧;张彦飞的《深入理解 Linux 网络》。第一本是理论,第二本是实际系统中的实现,可以学到 Linux 的网络模块时再看。不要轻易去看《 TCP/IP 详解》!!!
    * 操作系统方面:《操作系统导论》(豆瓣链接是 https://book.douban.com/subject/33463930/,别选错了):理论层面就这一本就够了,结合 Linux 内核来理解理论中的概念。
    * Linux 内核方面:《 Linux 内核设计与实现(第三版)》,《深入 Linux 内核架构》:第一本比较简洁不会涉及太多细节,可以对整个内核有一个完整的认识;第二本会涉及一些细节,相对更复杂。Linux 内核学起来肯定是很难的,光看书也很枯燥,可以看一些视频或者博客。

    你去搜一下相应的豆瓣评分就知道这些书值不值得看了。

    基础方面就这些,大一打二把基础打牢,大三大四再去学其他编程语言和上层应用开发就容易得多。祝你学习顺利,少走弯路。
    fcten
        38
    fcten  
       59 天前
    只知道课程名,以下建议可能不准确。建议查阅对应课程的教学大纲以及历年评价。

    // 基础课,建议选修
    计算机体系结构

    // 基础课,编译原理相关,建议选修
    编译技术
    编程语言原理

    // 基础课,算法相关,建议选修
    算法设计
    算法设计与分析
    高级算法分析

    // 基础课,数据库原理相关,建议选修
    高级数据库系统

    // 机器学习相关,可以说是目前最有钱途的方向了,建议选修
    // 不过本科的选修课可能比较水,想在这个方向找到工作 99%要读研
    人工智能
    机器学习
    应用深度学习
    自然语言处理
    AI 实践:实验和应用

    // 计算机安全相关,对黑客什么的感兴趣可以修
    网络安全
    密码学
    网络攻防
    数字取证

    // 计算机图形学相关,对游戏开发感兴趣的可以修
    计算机图形学
    计算机游戏设计与编程
    计算机视觉

    // 对移动 App 开发感兴趣可以修
    交互式移动应用程序设计和编程

    // 对服务端开发感兴趣可以修
    分布式和并行计算

    // 偏软件工程,对技术质量感兴趣可以修
    工程质量软件

    // 可能比较水的课(尤其是那些看上去就是多学科交叉的课)
    计算的法律方面
    量子信息与计算
    电子商务技术
    万维网上的现代技术
    函数式编程
    算法博弈论
    生物信息学
    物联网数据分析
    科学计算

    // 光看名字不好判断的课
    机器人学
    统计学习
    数据驱动计算机动画
    量子算法和计算机体系结构
    flyico
        39
    flyico  
       58 天前
    本科阶段学这些也就是粗通皮毛,选学分好拿的就行了

    真正学习是工作后的事情,所以大学里最重要的是学会‘自学’的能力
    LXGMAX
        40
    LXGMAX  
       58 天前
    越底层的知识越有门槛,工作中可替代性越低,数学要搞好,其他工作再学也不迟
    bnull
        41
    bnull  
       58 天前
    也不太需要局限于自己学校的可,可以参考下别人的。 [csdiy.wiki](csdiy.wiki)
    关于   ·   帮助文档   ·   博客   ·   nftychat   ·   API   ·   FAQ   ·   我们的愿景   ·   广告投放   ·   实用小工具   ·   1021 人在线   最高记录 5556   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 48ms · UTC 23:10 · PVG 07:10 · LAX 16:10 · JFK 19:10
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.