4

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

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

[编辑]

感谢您的回答。我想包括其他重要主题,以供其他学生参考:

  • 并发编程
  • 操作系统

[/编辑]

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

4

11 回答 11

17

他们都是。您列表中的所有内容都很重要。

于 2009-03-13T05:18:56.360 回答
7

我个人会研究以下内容:

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

您列表中的其他所有内容也非常重要,因此虽然我建议上述项目,但它们并不比您列出的其他项目更重要。这些是我希望我从学校毕业后得到的项目,我很遗憾地说我没有将它们作为课程提供,但我必须在我所有其他课程作业的同时自己学习它们。

于 2009-03-13T05:23:45.817 回答
3

鉴于您没有在列表中提及任何特定语言,我认为您已经走在正确的轨道上。我认为这是 CS 学生犯的第一个错误——专注于语言或范式。

您的整个清单非常重要;我唯一要补充的是对多线程的相当深入的研究。未来会越来越重要:(Ars-Technica 文章

于 2009-03-13T05:50:13.553 回答
2

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

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

于 2009-03-13T05:25:35.233 回答
2

都是必填项!!

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

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

于 2009-03-13T05:31:08.730 回答
2

我将从数据结构和算法开始,那里没有竞争。OO设计很有用。有点低级,是的。可以跳过 S/W 工程(对盐粒没问题)。

此外,这里有一些想法:

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

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

于 2009-03-13T05:31:23.380 回答
1

让我们来看看..

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

软件工程、设计模式和分析非常重要(尽管我有偏见)。不幸的是,除了设计模式之外,如果不积极实践主要项目,您将无法真正学习这些主题。专注于理解面向对象编程的概念和虚函数/动态绑定的概念,因为它们非常重要,而且很多人没有正确理解它们。尽最大努力获得一份好的实习。

于 2009-03-13T05:19:52.457 回答
1

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

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

这两个列表一起将使您对计算机科学有一个很好的核心理解,然后您应该选择一些更专业的主题(您最感兴趣的主题)。

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

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

于 2009-03-13T07:02:56.123 回答
0

清单上的所有内容都很重要,但您也需要正确的态度。你需要深入了解你学习的每件事是如何工作的,以及为什么要这样做,而不仅仅是做课堂作业。这才是真正让您成为未来专家的优势所在。

于 2009-03-13T05:27:45.790 回答
-1

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

于 2009-03-13T05:20:06.120 回答
-1
  1. 多线程和分布式系统。
  2. 如何使用漂亮的 GUI 构建用户友好的应用程序。
于 2009-03-13T05:43:20.170 回答