很多学生毕业并找到第一份工作后,即使他们可能是大学里的优秀程序员,也会觉得自己并不真正懂编程。
在学术环境中进行编程与在“现实世界”中进行编程有什么区别?
很多学生毕业并找到第一份工作后,即使他们可能是大学里的优秀程序员,也会觉得自己并不真正懂编程。
在学术环境中进行编程与在“现实世界”中进行编程有什么区别?
Answers:
在传统的本科计算机科学课程中,您只能学习编程。但是现实世界并不需要仅仅是程序员的人。现实世界需要真正的软件工程师。我知道许多工作说明似乎并没有表达这种区别,这只会使事情变得混乱。在现实世界中,您需要能够:
哦,是的,您还必须也能够编写代码,尽管平均这只需要花费软件工程师40%到60%的时间。
因此,并不是刚毕业的计算机科学专业的本科生不知道如何编程(实际上很多人都是非常好的程序员)。因为他们中的许多人都不知道该怎么做。
Oh yeah, and you also have to be able to write code too, but that's, on average, only 40 - 60% of a software engineer's time.
-甚至在非常糟糕的大型公司商店中,甚至是0-20%。
您的老师给您:
学校编程和现实世界中的编程本质上是天壤之别,与实际重叠很少。CS将为您准备“真实世界”的软件开发,例如田径训练将为参战做好准备。
他们面临着问题的另一个方面:
学术界主要关注“编程科学”,因此研究了使有效的特定算法有效的方法,或研究了为使某些范例更具表现力而量身定制的语言。工业主要集中在生产必须出售的东西上。它必须依靠“工具”,这些工具不仅是语言和算法,还包括库,框架等。
这种“焦点”上的差异使得C语言的学术大师几乎无法编写Windows应用程序(因为我们的Windows API不在C99标准中!),因此感到“无法编程”。但是,实际上,他具有学习自己所缺少的一切的全部能力。如果没有适当的学术研究(不一定是在学术界进行),那么很难找到一些东西。
好答案。让我补充一点,学术程序设计在规模上往往几乎像玩具一样。这对教学很有好处。作为老师,您正在尝试最有效地传达想法。不利的一面是,现实的编程在质量上是如此不同,很难弥合差距。
差异之一在于性能分析。我写了很多帖子试图指出这一点。性能分析只是表面上的算法和测量。要真正有效地执行此操作,您必须将其作为调试过程进行处理。
另一个区别是可维护性。这涵盖了从样式到特定领域的语言设计的所有内容。除非您真正知道要最小化的内容,否则您将无法有效地做到这一点。
这些东西没有被教导,它们在生产率上产生了巨大的差异。
更新:好像有人在读我的思想:毕业生的期望与现实 ...
我认为,还有其他两个因素:
问题规模:在学术界,我主要是“从头开始”开发软件,这意味着在大多数情况下,我遇到的最大程序就是我编写的最大程序。这不强调处理和应对复杂性的必要功能,这些复杂性是由不同的软件相互交互产生的。如果我意识到复杂性需要付出的努力,那么我可能会选择完全不在行业内。
阅读与写作:问题规模的另一个副作用是,在“现实世界”中,我们经常接触别人撰写的作品,这些都是出于维护目的(我在学术界没有做过维护),扩展或仅仅是分工。因此,阅读代码比编写代码变得重要得多。
改善程序设计教育的建议:学术界应使我们更多地了解现实情况,而不必退回到职业培训上。医生必须在某个时候面对尸体,以查看它们是否“为此而生”(我听说过有人在经历这种经历后放弃了该课程)。如果我在二十出头时看到了一个20K LOC项目,该项目由不同的编程风格组成,我必须在一天内就理解并在三个bug中进行修正,那么我可能会考虑其他职业选择,尽管可能没有。
我在学校进行编程培训的个人经验为零-我是英语专业。向我询问有关济慈和拜伦的信息!-但是我收到了几个新的应届毕业生,并在专业软件开发领域培养了他们并指导了他们。所以我可以从这个角度讲。
我的经验是,他们从学校中学到的所有东西实际上都是对编程的兴趣。他们的技能从零到微不足道。即使在他们中技能最高的人中,他们也没有自我指导的能力。他们的想法不仅仅是小规模的。他们实际上是微型的。一个包含数十行代码的系统使它们完全崩溃。
但是你知道吗?他们获得了兴趣,这很重要。兴趣很大。我可以和感兴趣的人一起工作。我可以将他们转变为开发人员,只要他们对成为一名开发人员感兴趣。地狱,这就是我开始的全部。这是对后现代美国小说家的赞赏。
在学术界,
缺点
加号
在行业中
看一下这个:
http://www.dodgycoder.net/2011/10/how-to-become-better-programmer.html
其实,
完全区分学术水平的编程和现实世界的编程是不可能的。
我想说的最大区别可能是:在现实世界中编程-您不仅需要了解编程知识,还应该能够快速适应。
根据您从事的行业,您必须遵守其法律。
迈克尔只是通过陈述与编程相关的任务来触及冰山一角,我将其归类为简单的工作(如果您值得付给面团,那么您将得到报酬)。
通常,在一个行业中,每个主题您将至少面临几个挑战:
如果您将研究博士学位级别的编程项目与现实世界的项目进行比较,则它们的难度,入门级技能等非常相似。
唯一真正的区别就是现实世界的项目
当其他人制定规则时,球比赛就不同了:)
如果您看一看学术界在IT领域学习的科目,就会发现大约一半的时间浪费在数学,科学,选修课等上,而另一半则浪费在学术科目上,例如:编译器设计,算法理论,计算机架构,优化,操作系统,数字电子学以及其他与工业相关的课程,例如C编程和Web编程。
上面提到的大多数主题都很容易理解,但是它们都不会直接为日常IT需求提供强大的背景知识。
遵循Microsoft Web编程要求(即某人成为组织中的生产团队成员所需的区域):
1- C#.NET或VB.NET
2- ASP.NET
3- HTML和CSS
4- SQL Server(或另一个数据库)
5- OO应用程序编程和设计
6- Java脚本
7- MVC框架
8-一些源代码控制工具的暴露
9-接触自动测试工具
10错误追踪工具
11-电子商务概念(可选)
12-ORM
13-一些业务分析技巧
14-一些沟通技巧
15-可能是一些云计算基础
如您所见,在大学/大学期间,上述大多数要求很少被关注(您最多可以选修一门课程)。
不能完全怪罪机构,因为有很多这样的技术堆栈,而且它们还在不断变化。
Microsoft的上述大多数内容都无法帮助想要使用Java开发应用程序的人。
真正的问题是,当今企业所需要的技术堆栈中,没有一个能被完整覆盖。
以上内容涵盖了毕业生是否适合在商业环境中编程等商业工作的问题。该答案不包括研究实验室等的需求。另外,其他领域比上述领域还需要更多技能,例如游戏开发,嵌入式开发,实时系统开发等。
规模和重点
从我的经验来看,在学术环境中,通常您正在处理的应用程序的规模要小得多,可以在一天或一周内完成,甚至可以在一个学期中由一个或两个程序员完成- -通常,您编写的所有内容都是一次性的代码,该词在该学期之后将被丢弃。在现实世界中,您可能会发现自己正在开发一个大型团队花费数月(甚至数年)才能完全开发的应用程序。您将花费更多的时间来调试其他人的代码,并试图了解代码库的基础结构,努力不破坏现有部分来添加一些新的或修改的要求。
需求,集成,客户
此外,开发代码的某些方面,例如需求分析,集成测试等,在学术项目中往往较少代表。为了公平地进行评分,通常讲师已经为您确定了要求,而不是在会议中共同决定的。您不一定非要以他们不想要的特定方法“出售客户”,但从技术角度来看,与他们的需求不同的是实际上是可行的。在学术环境中,您的客户(分级员或讲师)往往会对自己想要的东西有一个非常具体的想法,在现实世界中,您可能会遇到不真正知道自己想要什么并且必须动脑子来了解什么的客户应该建造。