我正在为一家小公司编写C#.NET应用程序。对于我们这些没有编程学位的人来说,我们错过了什么可能需要多年时间才能找到自己的教学?
我拥有电子工程学位,所以我不喜欢16岁时离开学校,坐在Visual Studio旁边。我已经在我的研究,算法,控制系统,数学等方面介绍了一些基本的嵌入式C。我觉得必须有一些我应该知道的事情,但不要这样做。
答案 0 :(得分:16)
我是EE的同事,但我在计算机科学方面涉及很多,所以我可以谈论计算机科学学位所涵盖的未涵盖EE学位的主题。
离散数学
编程数学与工程数学有很大不同。唯一明显的重叠是离散概率。其他主题,如算法分析和Big O表示法,通常不包含在工程数学课程中。
数据结构和算法
工程编程课程通常涵盖简单的算法概念,如递归和分治(快速排序和FFT)和简单的数据结构,如链表和树。关于数据结构和算法的计算机科学课程将涵盖其他算法概念,如动态编程和其他数据结构,如图形。
计算理论
我知道像自动机理论和完整性(P,NP等)这样的话题肯定不在我的EE学位中。
答案 1 :(得分:9)
嗯...... Big O notation感觉就像通常教过的那些东西之一,但你可能不会自己接受。
Discrete mathematics也可能属于该类别,也可能属于statistics。那些可能也是EE学位,这个答案可能有点过于悲观。 :)
答案 2 :(得分:8)
我上过大学,但主修心理学和哲学。离开学校十年后,我把电脑作为一种爱好,花了很多时间,只是阅读我可以拿到的所有东西并自己尝试。
几年后,我从以前的职业道路转向专业编程。经过四年的工作,我最终在一家大型软件公司的R& amp; D设施。我的同事认为我有一个M.S.在计算机科学领域,即使我从未将自己表现为拥有一个。
我的结论是知识就是知识。您可以自己或通过上学来获得它。重要的是你拥有它,无论你是否在学校,都有动力继续学习。
答案 3 :(得分:4)
想想你没有错过的东西:女孩,派对......只是在开玩笑;)
我认为研究EE是你需要强化的唯一领域是那些与软件架构相关的领域:UML,模式,设计......
是的,还有其他方面你会错过(编译器,网络等),但你可能会从中学到的知识,你将学习工作,而不是一件大事。
答案 4 :(得分:4)
根据我的经验,4年的代码或算法伪代码有助于培养评估技术优雅的本能 - 您可以更快地从糟糕的想法中分辨出好的想法。能够在提出错误想法五分钟之后丢弃一个糟糕的想法,而不是在尝试使其工作五个月之后,这是有价值的。
答案 5 :(得分:3)
运营研究,计算复杂性,一些“高级”算法内容(缓存显而易见性,数据挖掘等)的正式培训以及关于并发问题的文化,这些内容通常包含在操作系统和编程课程中。甚至可能在编程方面有一些好的实践,但我认为你已经学到了这一点。
根据您目前的工作,这些可能会或可能不重要,但我认为您的学位可以让您自学这些东西。
答案 6 :(得分:3)
可能你唯一遗漏的是一些理论,尽管你的EE学位会得到一些。
理论在实际编程中的运用受到了激烈的争论,通常是那些没有学位的人坚持认为他们没有遗漏任何东西,而那些学位声称他们是。我更倾向于采取你不需要学位的中间立场,你不会学到其他地方无法找到的秘密,你学到的东西也不是很多商业(如非学术)编程所必需的位置。它所做的是帮助很多事情,比如知道为什么一项任务很难或不可能,或者一些特定的事情是如何运作的。它也是建立其他职业生涯的良好基础。
答案 7 :(得分:3)
我认为更多的是关于我们的大脑运作方式 - 它如何分析,搜索/找到解决方案等...... 程序员与学位之间的差异,没有它随着时间的推移而平滑,你的经验变得更加重要/信息/坚实,以你的思想为基础。
答案 8 :(得分:2)
我确实在18岁时离开了学校,没有任何学位,现在我已经花了10年时间专业地编写各种语言。我已经问过几个确实得到Comp的人的确切问题。科学。或软件工程学位。到目前为止,我发现我唯一错过的是从大学毕业后获得的一般生活经历。
我发现了一些做Comp Sci或类似事件的人,然后又开始了一个不相关领域的职业生涯。可能是Comp Sci课程将帮助您确定这是否真的适合您。
答案 9 :(得分:2)
很难说你错过了什么,因为编程课程中没有教授的秘密也无法在其他地方阅读。但根据我的经验,没有正确教育的人经常会遇到诸如递归,正确的面向对象等概念的问题。而且他们经常使用自己的命名模式等,而不是遵循常规练习。
答案 10 :(得分:2)
拥有学位,你将有更好的机会获得更高薪的工作。您也可以学到很多理论知识,这有助于识别不同框架/编程语言中的共享结构。最有帮助的一件事是你在学习期间收集的广泛背景信息。你可以通过将它与你之前学到的更一般的东西进行比较来回答很多关于大多数未知主题的问题。
答案 11 :(得分:2)
我从很久以前就拥有EE和Comp Sci的学位:)在计算机学位课程中你肯定会学到很多好东西,但并不是一切。还有一些你没有学到的具体内容(各种java包,使用Studio进行调试,源代码控制系统,特定框架中使用的模式)。但有些事情你确实学到了很好的基础知识,即使你当时可能没有意识到这一点(算法等,就像人们发布的那样)。
我也合作(在辛辛那提工程学院需要)这是一次很棒的经历。这让我意识到你在课堂上学到的一些看似抽象的东西有实际用途,所以我在学校的动机比以往任何时候都要多。
虽然我认为学位通常表明一定程度的基础背景技能,以及勤奋的努力,但我在面试时会寻找更多。而且我认识一些没有学位的优秀开发人员,因此并不总是需要。此外,大学通常不会涵盖工程的社会方面,或者在非常大的系统上工作,这在很多工作环境中都非常关键。
离开很长一段时间后,我意识到忘记我在学校或工作中学到的东西很容易。我们的行业不断变化,所以我认为在现场阅读很重要。我认为阅读更广泛而不仅仅是技术上详细的内容非常重要。这就是我喜欢joelonsoftware的原因。我最近浏览了他的网站以及他编辑/编写的书籍,同时寻找了解有关软件开发的更多信息。
所以我会推荐所有人,不论是否,阅读有关软件开发的书籍和文章。我的软件工程专业毕业班之一确实让我们读过像神话人月这样的东西,这很棒。我也喜欢有关软件构建的书籍,例如McConnell的Code Complete。乔尔在他的网站上有很好的推荐清单:
答案 12 :(得分:1)
我在1984年离开学校后开始全职编程,直到90年代初才开始从事任何三级计算机相关课程。我专注的主要课题是IT管理和离散数学,我发现这些都非常有用。实际的编程部分相当薄弱,Pascal从教科书中找到了东西。一些数据库类非常好,但是规范化,关系式代数等等......系统分析和结构化设计也是如此。
我的感觉是,如果没有严格的课程,你可能会跳过很多你认为无聊的东西,这实际上非常有用。
答案 13 :(得分:1)
当然,只是猜测你的情况,但我经常发现“我刚刚学会了编程,而且每次都在练习”程序员(包括我在内的一类,我可能会添加)有时会缺少工具由编译器课程提供(有关资源,请参阅Learning to write a compiler)。对此的认识慢慢地在我身上,但回顾它这是巨大的。
我对非正式培训的程序员的第二个担心是了解计算机如何在低级别工作,但如果你正在进行嵌入式工作,我想你(至少!)在这个领域有一个良好的开端。
我认为在(在评论中)我将其描述为“编写编译器的课程”时听起来毫无用处。毕竟,你可能认为你不打算编写任何编译器,所以你没事。但是,该课程确实提供了一套强大而通用的工具,您可以在许多情况下使用它。请参阅How much of the compiler should we know?。
答案 14 :(得分:0)
当你编写小应用程序时,它有点容易。当项目变得更大时,如果您不知道如何应用架构,良好的设计等,您将会遇到问题。当人们学习时,它也是一种练习。如果雇主认为您正在或可能仍处于学习阶段,则说服雇主雇用您更难。大学里也有熟练的教授知道你可能没有想过的很多重要信息,但他们可以分享给你。