首页 文章

什么本科计算机科学课程最适合工作场所的程序员? [关闭]

提问于
浏览
18

这里的想法是在大学毕业后让更好的程序员 .

我想我必须使用算法,它不是你可以很容易地自己拿起的东西,我认为它使你能够在更深层次上看到软件的效率和正确性 .

我也相信教授实际编程可能会有所帮助,但我学到了大部分关于工作编程的知识,这让我觉得其中一些编程课程块(不是全部)可以更好地使用 .

这些结果将成为我想写给我老学校CS部门的一封信的一部分,我认为有很多课程我根本没有帮助,而我认为其他课程本来就非常宝贵 .

17 回答

  • 4

    更好的程序员就在大学之外?在学校开始教授诸如凝聚力,耦合,良好的编程实践,版本控制,配置管理,现代开发等概念之前模特 - 我不这么认为 . 我通常看到的是自学者想要自己学习正确的东西,或者如果幸运的话,他们会被雇用到一个讲授和实践好事的组织中 .

  • 24

    我还没有找到一个很好的CompSci课程,为工作场所的软件工程师做好充分的准备 . 如果你找到一个具有以下[虽然它是否可以被称为CompSci我'm doubtful, it'更像真实世界软件设计,这是一个非常不同的野兽] .

    计算机科学是一门理论学科,具有非常现实的世界意义,但在学术界更有用 . 例如,算法设计对软件工程师非常有帮助,但对消费者并没有直接帮助 . 例如,知道如何构建快速排序算法,或理解链表遍历在今天真的没那么有用's software engineering environment - of course, understanding the theory is helpful for choosing the right tools for the job, don' t错误 . 作为开发人员,我们中的许多人依靠计算机科学世界的输出来进一步开发我们的开发工具,事实上,如果没有他们,许多开发人员将会陷入困境,但是将计算机科学毕业生放在用户面前并让他们设计一个对他们来说有意义的软件和学术智慧将会崩溃,因为他们说完全不同的语言 .

    对于软件工程师来说,一个更有用的课程将包括我可以想到的许多[以及可能更多]以下组件:

    • Programming Language - 基本的程序流程,范例,语法等 . 这主要是教得很好,所以我赢了't stick on this one too much. Although it would be helpful if a few completely different classes of programming languages were taught - for instance, I learned C, Pascal and VB 3(? I don' t记住确切的版本) . 如果程序员学习至少一种功能语言,一种命令式语言,一种声明性语言,那将会更有帮助 .

    • Debugging - 在编写nTier应用程序[许多/大多数现实世界的应用程序]时,能够找出出错的地方,如果必要的话,直到协议级别是有用的 . WireShark等分析工具对此非常有用 .

    • Communication Devices - XML,XQuery,XPath,XSL,XSD [因为它们似乎被广泛使用] .

    • Relational Database Design - 这已经相当好地教授了 .

    • Relational Database Performance Tuning - 只是设计表格isn 't enough, knowing when it'适合索引某些字段,并且在很多课程中似乎都涵盖了's not is also important and doesn' .

    • Data Normalization 在很多情况下,这似乎也得到了相当好的教学 . 虽然大多数学生似乎进入现实世界,喷出他们所教授的理论 - 没有实际考虑这些理论的含义 . 有时在现实世界中我们有很好的理由违反规则 .

    • Query Optimization - 编写基本查询通常似乎处于毕业生舒适区的外部极限,应该教授优化 . 此外,应教授查询分析器等工具,以帮助学生调试应用程序的性能问题 .

    • Stored Procedures/Triggers - 我还没有遇到过可以编写存储过程或触发器或有效使用任何一个的学生 . 选择/连接/嵌套选择似乎是查询设计的教学限制 .

    • Basic Algorithms - 根据我的经验教训很好,但是很多学生都喜欢,好吧,我有一组在这种情况下有用的算法,这是最好的,因为x,y或z原因和这里是如何应用它来提供解决方案 .

    • Recursion - 我've yet to find an approach that can teach recursion, it seems that either you get it or you don' t . 有一天,我会找到一个很好的比喻,即使是最基本的程序员也能理解这一点 .

    • Abstraction - 尽管这是OOP的核心原则之一,但这似乎是很多课程的亮点 .

    • Code Refactoring - 知道什么时候重构,几乎同样重要,什么时候不重构 .

    • Code Reuse - 似乎有很多课程正在吐出剪切/粘贴猴子 - 这不是代码重用应该意味着什么!

    • Source Control - 我没有亲自认识一位软件工程师,他们将源代码控制作为课程的一部分......为什么会这样?

    • Backup and Restore - 我想想要备份它吗?我知道我过去 - 虽然不是最近 . 并不是我不知道备份,但正如俗话所说"it'll never happen to me" . 它会发生在你身上,保证在你必须演示你丢失的一切之前它是正确的!

    • File System Maintenance - 好的,有些课程简要介绍了这一点,但很多都没有 .

    • Writing good quality design specifications - 这似乎总是作为课程作业的简要提供,但学生很少被要求自己设计 . 编写工作范围和理解文档模板似乎远远超出了大多数软件课程的范围 .

    • User Documentation - 用户不要't think like you, handing them software that is 2552255 or 2552256 will blow up in your face. There'一句名言"Programming today is a race between software engineers striving to build bigger and better idiot-proof programs, and the Universe trying to produce bigger and better idiots. So far, the universe is winning" . 写一个8岁的人可以关注的用户文档 - 编写它可能看起来很痛苦,但是一旦完成,永远更多,你会感谢自己 .

    • Technical Documentation - 即如果学生可以使用Sandcastle,nDoc或任何文档工具,这将是有用的 .

    • Test Planning - 设计允许测试的测试和软件 . nUnit或类似的将是一个很好的教学软件开发课程的工具 . 事实上,教授任何测试框架都比不教任何测试框架更好......似乎就是这样 .

    • FAT/SAT/UAT Testing - 理解现实世界中的各种测试场景,例如健全性检查,工厂验收测试和用户验收测试,将会有所帮助 . 注销您的软件与开发它一样重要 . 如果你没有得到报酬 - 无论你的解决方案在技术方面多么出色 .

    • Software Architecture - 了解真实世界n层应用程序的不同组件,使用它们的优点和缺点 .

    • Interaction with users - 也许这对你的波长来说并不常见,并且你不会以同样的方式思考,这与通信有关,但实际上是开发人员需要注意的事情 .

    • Common Sense - 丁,丁,丁,丁 - 有很多程序员没有这一点!这些课程旨在证明你可以为自己思考,我不会重复我之前所说的 - 在现实世界中,我们有时会发现违反规则的非常好的理由 . 我们也不要盲目地打破他们 . 软件开发是一门艺术,就像我们必须知道的所有艺术一样,我们可以学习规则,你已经学会了自己思考 .

    • Listening - 我很惊讶有多少次我看到代码编写,因为开发人员"thought they knew what the customer wanted"而不是实际听取用户说的内容并了解他们的实际需求 .

    • Understanding - 与听力齐头并进 .

    • Communication skills

    • Talking to the technically inept - 即您的大部分用户群

    • Project Mediation - 向写支票的人出售你的想法

    • Prioritization - 如何确定哪些功能比其他功能更重要 .

    • Budgeting - 时间估算

    • Time Management - 当你身边的每个人都在阻碍你的时间而不关心你的截止日期时,如何按时完成工作 . 就像当你所有的朋友都希望你在明天结束的时候开始到酒吧品尝一品脱或十分之一时 .

    • Scope creep - 何时说,不,这不在规格/预算中 .

    即使你确实设法在你的课程中学到了所有这些,我敢说你还可以在一个体面的callibre的软件开发咨询实习三到四个月里比在整个课程中学到更多 . 在我获得学士学位后的前6个月里,我学到的东西比在整个3年课程中学到的要多 . 不可否认,如果没有我在课程中学到的许多东西,我就会黯然失色,但是有很多东西被不必要地教导,可以被更有用的内容所取代 .

  • 4

    你在一个真正的公司编写软件的夏天上课 .

    说真的 - CS课程并不意味着培养优秀的程序员 . 他们的目的是培养计算机科学家,作为副作用,他们也可以编写软件 .

  • 4

    计算机科学!=编程 .

    如果您正在寻找更好的程序员,那么请从专为此专注的2年制大学课程中寻找受过教育的人 .

  • 2

    没什么比这更好的了通过构建项目所获得的知识,如果您正在构建一个库系统项目的关系数据库课程,如果你正在使用汇编语言构建像32/64位汇编的PC工具这样的东西并不重要 .

    你只能通过“编程”而不仅仅是通过课程和获得高GPA来成为更好的程序员 .

  • 3

    最重要和最相关的不是CS课程 . 你需要沟通好 . 无论什么课程,您都可以成为更好的倾听者/读者和更好的作家/演讲者 .

  • 1
    • 商业101

    • Office Politics 200

    • 在现实世界中,没有什么是学术性的

    实际上,从第一天开始,你就不会成为一名高级开发人员 . 学习一些编码基础知识肯定会让你走得很远,但是在上升的过程中,我看到很多计算机科学专业的学生在现实世界中挣扎 . 因为他们并不真正了解他们在第1天所做的事情 . 他们在与业务领域斗争并理解他们为什么做他们所做的事情 . 他们不知道与其他商界人士沟通的对象 .

  • 1

    这是一个很难回答的问题,但我认为阻碍程序员参与许多CS程序的一件事是缺乏动手编码 . 它已经看到很多需要研究和论文的AI课程,但没有代码 . 在我看来,能够应用它同样重要's extremely important to understand the theory of computer science, but it' .

  • 1

    我认为学术组织或独立学生项目应该填补学术空白 .

    在我的大学,我们专门为CS学生准备了Association of Computing Machinery学生章节,我们还有一个致力于视频游戏开发的学生组织 . 这些组织通过引入行业发言人并强迫学生相互合作,帮助向学生讲授"real world" .

    如果他们对领先的软件小组感兴趣,或者如果学生想要在文科方面变得更加技术熟练,那么我还建议那些主修计算机科学专业的学生 . 我知道它看起来很奇怪,但我做到了这一点,我发现它实际上教你如何在纯粹的技术和数学视角之外思考,以及如何将人类思维应用于软件开发 .

  • 1

    我想说这是数据库系统和软件工程项目课程之间的关系 . 我学校的本科学位既不需要课程,也可以由本科生学习 . 对大多数程序员来说,拥有一些数据库知识可能比算法更有必要 . 在项目团队中工作,甚至在课程项目上,可以帮助您了解团队动态以及如何在团队环境中工作 .

    另一方面,我坚信,对基础计算机科学主题(包括数据结构,算法,操作系统等)的良好理解对于准备成长为程序员至关重要 .

  • 1

    谢菲尔德大学软件工程学位与工作场所最相关的两个是第二年的软件小屋模块,该模块涉及为现实世界客户制作软件产品的团队 . 我认为有三个不同的客户,团队互相竞争,为他们制作最好的系统 .

    然后在第四年,三分之一的标志来自运营一家软件公司,再次为现实世界的客户 . 虽然不完全像经营实际业务,但由于我们所 生产环境 的任何产品的IP限制(因为我们仍然是大学的学生,他们拥有这项工作),我们确实参与了运营公司的大多数方面 - 禁止任何会计/ Contract 写作 .

  • 3

    数据库设计

    功能编程

    面向对象编程

    x驱动设计

  • 4

    我的观点(作为英语导演)是办公室里的一天在学校值得一周,因此如果你能找到一些方法来获得一些经验,那将是值得的 .

    除此之外,只要对你的自负有信心,发挥自己的优势,并准备谷歌任何你不知道的东西!

    如果您希望从通常的IT人群中脱颖而出,那么请确保您能够正确地进行沟通,因为令人惊讶的是有多少“顶级”毕业生不能 .

  • 17

    这一切都取决于你想要编程的内容以及你感兴趣的类型问题 .

    显然是一般的组合

    • Discrete Maths (你的逻辑,图论,一些数论和复发)

    • Algorithm Design (学习各种问题解决模型,设计范式,思考计算机资源)

    • Software Engineering (管理软件项目,使用现有组件,使用组或组,版本控制,模式等)like this

    • Programming intensive 课程(我参加了this course),它教你解决问题的一般想法,在编写单行代码之前收集你的想法,接触不同的编程范例

    将为您的大部分编程挑战做好准备 .

    之后,这一切都取决于您想要使用的域名 . 询问您的顾问,您所在大学和教授的老年人,并与他们讨论您的目标和兴趣 . 他们会比这里任何人都更好地建议你 .

    但是不要忽视批判性思维,写作课程 . 上课,让您展示自己的想法,并为公开演讲做好准备 .

  • 1

    我认为我得到的最多的课程是 Data Structures and Algorithms . 这些知识独立于技术的进步,它提供了各种程序员使用的基本工具 .

  • 1

    我们需要一个 class 来构建一些社区服务项目 . 这要求我们使用和学习整个软件工程的开局 .

    尽管如此,除非老师决定在课堂上放一些弹头,其目标是尽可能地让事情变得困难,否则这样的课程将会非常缺乏......

  • 2

    数据结构和算法课程,在我的本科生期间,在我的工作场所帮助了我很多

相关问题