题
这个时候最重要的是什么?我知道我以后可以获得编程经验。毕业后要成为一名优秀的程序员或分析师,我应该学习以下哪些内容?
- 数据结构
- 算法
- 软件工程
- 低级方面
- 设计模式和OO分析
[编辑]
感谢您的回答。我想包括其他重要主题以供其他学生参考:
- 并发编程
- 操作系统
[/编辑]
笔记:我认为列表中的第一项应该是 学英语
解决方案
他们全部。清单中的所有内容都很重要。
其他提示
我个人会研究以下内容:
- 一种类 C 语言 (C/C/C++/C#/Java)
- 一种脚本语言
- 一种函数式编程语言
- 特别是当我们正在转向多核世界时,这将派上用场,因为它允许的并行性超出了其他语言目前所能做到的。例如,整个电信基础设施都在 Erlang 上运行。
- 数据结构
- 您将在任何地方使用它们。它们与编程语言无关,您在整个职业生涯中都需要它们
- 算法
- 这些很可能与上述物品搭配。某些数据结构有某些算法来访问它们。
- 设计模式
- 是的,当然要学习各种设计模式,但同时要知道它们并不是软件工程的全部。
您列表中的其他所有内容也非常重要,因此,虽然我建议上述项目,但它们并不比您列出的其他项目更重要。这些是我希望从学校教育中学到的东西,我很遗憾地说我没有将它们作为课程提供,而是必须与我的所有其他课程一起学习它们。
鉴于您没有在列表中提到任何特定语言,我认为您已经走在正确的轨道上。我认为这是计算机科学学生犯的第一个错误——专注于一种语言或一种范式。
你的整个清单非常重要;我唯一要补充的是对多线程的相当深入的研究。未来它会变得越来越重要:(Ars-Technica 文章)
把乔尔插在这里似乎很合适;-)
全部都是必须的!!
你在想什么?我预计你会在专注度之间做出选择(例如,游戏设计与安全和密码学)。
你不能在“算法、oop、数据结构、软件工程等”之间进行选择。这些是基础!你必须把它们全部学会。
我将从数据结构和算法开始,没有竞争。OO 设计很有用。是的,有点低级。可以跳过软件工程(持怀疑态度也可以)。
此外,这里有一些想法:
- 关系数据库基础知识(不仅仅是“如何使用 Oracle”,而是实际的关系代数)
- 操作系统
- 编译器+解释器
- IR 中的一些东西(/遗传算法/神经网络)
是的,我偏向于“硬核”CS 的东西。繁忙的工作、超繁重的流程和其他 PM 垃圾你很快就会在行业中学到,没有必要在它们上浪费你的教育资源。:-)
让我们来看看..
您需要了解复杂性以及数据结构和算法,以便做出重要的选择。不幸的是,您需要真正理解这些主题并解决复杂的脑筋急转弯,因为它们在工作面试中比在您以后的实际工作中发挥的作用要大得多。因此,出于实际原因,这些是最需要关注的事情。
软件工程、设计模式和分析非常重要(尽管我有偏见)。不幸的是,除了设计模式之外,如果没有在重大项目上积极实践,你就无法真正学习这些主题。重点理解面向对象编程的概念和虚函数/动态绑定的概念,因为它们非常重要,但很多人没有正确理解它们。尽最大努力获得良好的实习机会。
您列出的所有内容都是体面的计算机科学教育的基本组成部分,尽管您确实应该添加以下内容:
- 操作系统
- 联网
- 数学(离散、微积分、代数、证明、统计入门课程)
- 数据库
- 基础(有限自动机、正则表达式、图灵机等)
这两个列表将使您对计算机科学有一个很好的核心理解,之后您应该选择一些更专业的主题(您最感兴趣的主题)。
- 人工智能
- 加密/安全
- 图像/信号处理/识别
- 编译器
- 图形
- 游戏设计
- ETC。
你会发现,一旦你开始深入某个主题,所有这些核心课程,包括数学,都会开始发挥作用!例如,我目前正在研究图像识别,并且必须使用和理解统计、人工智能、微积分、证明、代数、算法、数据结构、OOP 等内容。
清单上的所有内容都很重要,但您还需要正确的态度。你需要挖掘足够的细节来了解你所学习的每件事是如何运作的以及为什么这样做,而不仅仅是完成课堂作业。这才是真正会给你作为未来专家带来优势的东西。
- 多线程和分布式系统。
- 如何使用漂亮的 GUI 构建用户友好的应用程序。
所有这些都非常好,但算法是一个很好的起点。也许您甚至应该首先研究离散数学课程来了解理论。