我在CS课程。我应该关注哪些编程主题?

时间:2009-03-13 05:14:54

标签: computer-science

此时最重要的是什么?我知道我以后可以获得编程经验。我毕业后应该学习以下哪一项才能成为优秀的程序员或分析师?

  • 数据结构
  • 算法
  • 软件工程
  • 低级别方面
  • 设计模式和OO分析

[编辑]

感谢您的回答。我想将其他重要主题作为其他学生的参考:

  • councurrent programming
  • 操作系统

[/编辑]

注意:我认为列表的第一项应该是学习英语

11 个答案:

答案 0 :(得分:17)

所有这些。列表中的所有内容都很重要。

答案 1 :(得分:7)

我个人会研究以下内容:

  • One C like language(C / C / C ++ / C#/ Java)
  • 一种脚本语言
  • 一种函数式编程语言
    • 特别是因为我们正在转向多核心世界,因此它可以派上用场,因为它允许并行化超出当前其他语言的范围。例如,整个电信基础设施都在Erlang上运行。
  • 数据结构
    • 你将在任何地方使用它们。他们是编程语言无关的,你将在整个职业生涯中需要它们
  • 算法
    • 这些最有可能与上述项目一致。某些数据结构具有某些访问它们的算法。
  • 设计模式
    • 是的,当然要学习各种设计模式,但同时要知道它们不是软件工程中的全部。

列表中的其他所有内容也非常重要,因此,虽然我建议使用上述项目,但它们并不比您列出的其他项目更重要。这些是我希望我离开了我的求学和我很伤心地说,我没有让他们为类提供的项目,但必须学习他们自己的旁边我所有的其他课程。

答案 2 :(得分:3)

我认为您已经在正确的轨道上,因为您没有在列表中提及任何特定语言。我认为这是CS学生的头号错误 - 专注于语言或范式。

您的整个清单非常重要;我唯一要补充的是对多线程的深入研究。它在未来会变得越来越重要:(Ars-Technica article

答案 3 :(得分:2)

在这里插入Joel似乎很合适; - )

http://www.joelonsoftware.com/articles/CollegeAdvice.html

答案 4 :(得分:2)

所有这些都是强制性的!!

你在想什么?我希望你能在集中注意力之间做出选择(例如,游戏设计与安全和密码学)。

您无法在“算法,oop,数据结构,软件工程等”之间进行选择。这些是基础知识!你必须全部学习它们。

答案 5 :(得分:2)

我会从数据结构和算法开始,没有比赛。 OO设计很有用。 有点低级,是的。 可以跳过S / W工程(可以使用盐)。

此外,这里有一些想法:

  • 关系数据库基础知识(不仅仅是“如何使用oracle”,而是实际的关系代数)
  • 操作系统
  • 编译器+口译员
  • IR中的东西(/遗传算法/神经网络)

是的,我偏向于“硬核”CS的东西。繁忙的工作,超重的流程和其他PM垃圾你很快就会在行业中学习,不需要浪费你的教育资源。 : - )

答案 6 :(得分:1)

让我们看..

您需要了解复杂性和数据结构和算法,以便您可以做出重要选择。不幸的是,您需要真正理解这些主题并解决复杂的脑筋急转弯,因为它们在求职面试中的作用要大于以后的实际工作。因此,出于实际原因,这些是最重要的事情。

软件工程,设计模式和分析非常重要(尽管我有偏见)。不幸的是,除了设计模式之外,如果没有积极地在主要项目上练习,你就无法真正学习这些主题。专注于理解面向对象编程的概念和虚函数/动态绑定的概念,因为它们非常重要,许多人不能正确理解它们。尽力做好实习。

答案 7 :(得分:1)

您列出的所有内容都是体面的计算机科学教育的基本组成部分,尽管您确实应该添加以下内容:

  • 操作系统
  • 网络
  • 数学(离散,微积分,代数,证明,统计学的入门课程)
  • 数据库
  • 基础(有限自动机,正则表达式,图灵机等)

这两个列表将为您提供对计算机科学的良好核心理解,之后您应该选择一些更多专业主题(您最感兴趣的主题)。

  • 人工智能
  • 加密/安全
  • 图像/信号处理/识别
  • 编译器
  • 图形
  • 游戏设计

你会发现,一旦你开始深入研究一个主题,所有这些核心课程,包括数学,都将开始发挥作用!例如,我目前正在研究图像识别,并且必须使用和理解来自统计,AI,微积分,证明,代数,算法,数据结构,OOP等的东西。

答案 8 :(得分:0)

列表中的所有内容都很重要,但您也需要正确的态度。您需要深入了解您学习的每件事物如何运作以及为何以这种方式完成的细节,而不仅仅是课堂作业。这将使您成为未来专家的优势。

答案 9 :(得分:-1)

所有这些都非常好,但算法是一个很好的起点。也许你甚至应该首先考虑理论上的离散数学课程。

答案 10 :(得分:-1)

  1. 多线程和分布式系统。
  2. 如何使用漂亮的GUI构建用户友好的应用程序。