如果您现在有机会参加一门计算机科学课程,并因此显着增加您在某个学科领域的知识,那会是什么?本科或研究生水平。
编译器?分布式算法?并发理论?高级操作系统?
让我知道为什么。
(请注意,我很欣赏这不是一个牵强的场景 - 但时间和惯性可能会阻止人们参加课程或阅读书籍或其他任何东西)
如果您现在有机会参加一门计算机科学课程,并因此显着增加您在某个学科领域的知识,那会是什么?本科或研究生水平。
编译器?分布式算法?并发理论?高级操作系统?
让我知道为什么。
(请注意,我很欣赏这不是一个牵强的场景 - 但时间和惯性可能会阻止人们参加课程或阅读书籍或其他任何东西)
编译器。
就像学习一门外语迫使你比以往任何时候都更仔细地考虑你的母语一样,我相信编写编译器会让你对你正常编写的所有代码有深刻的了解。
数据结构和算法 - 本课程教您如何构建更高效的代码,还教您解决复杂问题的常用方法。我不是最好的,但我相信这种类型的课程教你如何思考复杂问题的方式可以帮助你在许多其他领域。
我很想参加硬核(如约翰卡马克硬核)图形编程课程。涵盖从硬件级别到光栅化和渲染算法以及完成 3 维数据操作和数据存储技术的所有内容。我在大学时提供的那一份相当平庸。
用户界面设计,在心跳中。
我在大学里学到了很多关于如何做好编程的知识,但从来没有提到过用户体验。在工作了十多年之后,我认为这种疏忽是彻头彻尾的犯罪。
操作系统。了解您在较低级别的刻度上如何开发该框有助于您以后掌握所有较高级别的概念,尤其是在出现问题时。
算法课,放下手。
“如果你想成为世界级的程序员,你可以每天编程十年,也可以每天编程两年,然后上一门算法课。” - Erik Demaine 教授(麻省理工学院)
学习算法复杂度、排序、合并和搜索算法非常重要。
这是引用来自麻省理工学院OpenCourseware 算法课程视频的视频链接。
实践中的神经网络
AI
自然语言或语义处理简介。
这些中的任何一个......如果我有时间,我现在很乐意做任何这些。
但是,如果您将范围扩大到涵盖任何课程,我将不得不参加会计课程。这将在各种方面都很有用。
我有兴趣参加机器学习课程。我从事统计工作,与机器学习有很多重叠之处。我很乐意看到解决一些相同问题的不同视角。
联网。(不是社交网络……尽管无论如何这可能是一门有趣的课程。)
我会选修一门涵盖我知道自己无法学习的材料的课程。例如,我对量子计算完全着迷,我很想知道更多关于它的信息,即使它可能对我没有专业帮助。
隐私和匿名(实际上,我刚刚审核了这个,所以它真的不完全适合这个问题)。一旦您弄清楚使用最少的信息可以多么容易地在网络上唯一识别您,您将更加谨慎地处理您分发的信息(作为用户)和收集/显示的信息(作为开发人员) )。
我还没有完成我的硕士论文,所以我仍然可以参加任何我喜欢的CS课程。但我认为我可以通过阅读书籍和做一些练习来更轻松地学习相同的东西,而无需参加课程(并且从练习和考试中获得压力)。另一种选择是只听讲座,但不正式参加课程(至少在赫尔辛基大学,讲座是公开的,任何人都可以听)。
以下是我接下来想学习的东西:函数式编程、分布式系统。编译器也是一个有趣的话题,但我现在不需要这些知识。
我的大学会有关于所有这些的课程,但现在我更喜欢自学。我将从 lambda 演算和 Haskell 课程下载课程材料和练习,并阅读一两本关于分布式系统和算法的书。
基因编程?
计算机网络或编译器构建 - 两者都是我学校的选修课,由于日程冲突,我从来没有机会参加。
(从技术上讲,我的一些课程教授了编译器构造的各种元素——解析、管理符号表、激活记录——但它们更多地是关于机器/语言理论,而不是关于如何实际构建编译器)。
算法(再次)。可悲的是,我认为我没有像第一次那样获得那么多。我的第二个选择是编译器。
还有编译器,因为它们需要在许多领域的效率,解析、模式匹配、语义分析、代码生成等。
干杯
《软件许可及相关版权法》将在未来几年火爆
并行编程。我真的不认为它需要只是函数式编程。我对用非功能性语言探索这个话题同样感兴趣。
计算几何。我从书本上学到的东西过得去,但我希望有机会时能真正深入了解。
我很惊讶我没有看到任何人追求计算理论。这是我在大学学到的最令人讨厌的科目。这里肯定有人和我有同样的胃口。:-)
CS -> 1. 计算理论,2. 计算建模,3. 编程语言
它让我对整体问题的解决有了更抽象的看法。我的经验告诉我,我越抽象,我就能为一个问题制定更好的解决方案。:-)
建模是如此强大,以至于大多数问题的解决都依赖于它。有了它,我们通常以低层次的方式解决问题。它通常不是最好的解决方案。
它是计算机与程序员的接口。我有兴趣让所有人的编程变得更容易。因此,如果界面可以改进,所有人都会受益。
排版。其次是用户界面设计。
我认为,这些是我的技能最需要提高的领域。
这是我可以推荐的一门课程(这是一门远程学习课程)。
您将了解逻辑、递归、二叉树/BST、真值表、效率、函数的正式定义。它不需要任何超出学校水平的数学背景。第 1 年的模块中涵盖了有关位操作、二进制计数等基本主题。
你不使用haskell,虽然我听说很多大学都在使用它——它是一种java解释的函数式语言。
我的前两个(操作系统和编译器)已经被占用了。我的下一个选择是一门关于数据库设计的好课程。数据库是任何 Web 项目的重要组成部分。了解它们在内部的工作方式将使以后与它们一起工作变得容易得多。
极限编程。编程比赛的问题。编码很多。快速编码。高效编码。包括使用版本控制:)
安全或密码学
并行/分布式编程,因为 CPU 不会很快变得更快;多核和互联网将会出现一段时间。本科课程,因为我没有先验知识。
操作系统。在将软件系统中的组件/服务拼凑在一起、规划性能以及诊断/解决性能瓶颈方面,任何具有操作系统知识的人都具有巨大的优势。
任何使用最新语言的现代算法课程不仅教您算法,还教您语言!
信息技术监管
诸如 SOX、PCI、HIPAA 和来自不同司法管辖区的其他法律要求,以及在 IT 领域可能适用的隐私法。黑客在这里也可能在某种程度上涵盖,因为它是法律课程和信息技术之间的一种交叉,对某些人来说不一定是计算机科学。
由于我已经学习了编译器、算法和所有其他标准的 CS 东西,我可能会学习一些更有趣和“时尚”的东西,比如iPhone 开发
我希望我能拿一篇教一点汇编的论文。我所做的所有论文都是用高级语言编写的。
我也希望我能早点进入数据库,我是在第二年才开始拿这些论文的。所以我一直没能拿到关于 Hibernate、JDBC 等的高级论文。
当我想在大学学习神经网络时,我仍然很沮丧
编译器和操作系统
计算机架构。更好地了解您的软件最终是如何运行的。
统计数据。能够查看日志、计算错误、计算成功并给出未来失败的概率对于确定“我们需要现在解决这个问题,还是可以等待一段时间?”很有用。
计算机图形和/或图像处理。没有更好的方法来开始考虑算法中的并行化。