大多数现代程序员都是大学毕业的。 随着时间的流逝,这种情况将会改变,但是现在情况如此,IT公司的优秀员工仍然来自大学。 在这篇文章中,Acronis大学关系总监Stanislav Protasov谈到了他对未来程序员的大学培训特色的看法。 老师,学生和雇用他们的人甚至可以从削减中找到几个有用的提示。

在过去的十年中,我一直在各所大学教授数学,算法,编程语言和机器学习。 今天,除了我在Acronis的职位,我还是MIPT理论与应用信息学系的副主任。 根据在俄罗斯(不仅是)一流大学中的经验,我对计算机学科学生的培训提出了一些看法。
30秒规则不再有效
我确定您遇到了30秒的规则,该规则指出程序员在快速查看其代码后必须了解该函数的用途。 它发明了很长时间,从那时起,已经有许多操作系统,语言,硬件和算法。 我已经编写代码已有12年了,但是相对最近,我看到了一种产品的源代码,乍一看对我来说似乎是魔术。 今天,如果您不沉迷于主题区域,则30秒规则将停止工作。 否则,您不仅将没有足够的30秒,也没有300秒的时间来弄清楚是什么。
例如,如果要编写驱动程序,则需要深入研究这一领域,阅读数千行特定代码。 通过这种研究主题的方法,专家有了“顺畅的感觉”。 就像说唱一样,当出现良好的节奏感和正确的节奏而没有特殊的合理化时。 训练有素的程序员也可以轻松地识别出无效或简单的错误代码,而无需深入研究发生样式冲突或使用次优方法的地方(但很难解释这种感觉)。
专业化和日益复杂化导致这样一个事实,即单身汉不再提供足够深入地研究所有领域的机会。 但是,仅在这种教育水平上,您需要获得视野。 之后,在治安部门或工作中,您将需要花一些时间将自己沉浸在主题领域的问题和细节中,学习study语,同事的编程语言和代码,阅读文章和书籍。 在我看来,这是在大学的帮助下为未来的
T形专家 “增加横梁”的唯一途径。
大学最好教哪种编程语言?

令我高兴的是,大学教授已经拒绝为以下问题找到正确的答案:“什么是编程的更好?”。 关于哪种更好的争论(C#或Java,Delphi或C ++)实际上已经化为乌有。 许多新的编程语言的出现和教学经验的积累导致了这样一个事实,即在学术环境中已经建立了一种理解:每种语言都有其自身的定位。
使用一种或另一种编程语言进行教学的问题已不再是重中之重。 教什么语言都没关系。 最主要的是语言的充分表现力。 《
多处理器编程的艺术 》一书很好地说明了这一观点。 在这个已经很经典的版本中,所有示例都使用Java,这是一种没有指针但具有Garbage Collector的语言。 在编写高性能并行代码时,几乎没有人会认为Java不是最佳选择。 但是为了解释本书中概述的概念,该语言被证明是合适的。 另一个例子是安德鲁·恩(Andrew Eun)的
经典机器学习课程 ,在八度音阶环境中以Matlab语言教授。 今天,人们可以选择一种不同的编程语言,但是,如果思想和方法很重要,本质上有什么区别?
更实际,更贴近现实
同时,近年来,更多的从业者进入了大学。 如果早期的俄罗斯大学课程因与现实脱节而受到积极批评,那么今天就不可能再对IT教育这么说了。 10年前,大学里几乎没有任何具有该行业实际经验的老师。 现在,越来越多的人在专业部门上课,而不是由计算机科学的专职老师进行授课,而是由IT专业人员执业,他们在空闲时间仅阅读1-2门主要课程。 这种方法在质量培训,更新课程以及寻找公司的潜在员工方面是合理的。 我想告诉您一个秘密:我们支持MIPT的基础部门,并与其他大学建立关系,包括为准备可以在Acronis从事职业的学生做准备。
数学家还是程序员?

曾经扭转编程语言的Holivars进入了哲学方向。 现在,有条件的“程序员”和“数学家”互相争论。 从原则上讲,这些学校可以在两种教育计划中脱颖而出,但是行业仍然不能很好地共享这些微妙之处,而且从大学到大学,我们拥有相似的教育,但偏向略有不同。 这意味着学生和他将继续工作的公司都必须用缺失的部分来补充知识的难题。
用不同语言编写工业代码的从业人员在大学中的出现为学生提供了更好的开发技能。 实用的程序员熟悉标准库,框架和编程技术的实现,从而灌输了学生编写优质代码,快速高效地编写代码的愿望。
但是,这种有用的技巧有时会导致爱好者重新发明轮子。 计算机专业的学生是这样想的:“我应该再写200行好的代码来解决额头上的问题吗?”。
接受过经典数学教育(例如matfak或应用数学)的教师更有可能在接近科学的环境中或在建模和数据分析领域中工作。 “数学家”对计算机科学中的问题有不同的看法。 它们主要不是与代码一起运行,而是与算法,定理,形式模型一起运行。 数学方法的一个重要优点是对可以解决和不能解决的问题有清晰的基本了解。 以及如何解决。
因此,数学老师谈论编程时偏向理论。 来自“数学家”的学生通常会提供经过深思熟虑和理论上更好的解决方案,但通常,从语言的角度来看,这些解决方案不是最佳的,而且常常是不准确的。 这样的学生认为他的主要目标是证明自己从原则上解决这类问题的能力。 但是实现可能很me脚。
在学校或第一门课程中由程序员养育的家伙们带来了一辆“非常漂亮的自行车”,但是,这种自行车通常不会渐近地工作。 相反,他们并没有为深入研究理论和转向教科书寻求最佳解决方案,而是偏爱精美的代码。
在各个大学的学生面试中,我通常会看到哪个“学校”是他接受教育的基础。 而且我几乎没有在基础教育中遇到完美的平衡。 小时候,可以在我的城市为奥林匹克数学做准备,但是没有编程界。 现在,在圈子里,孩子们开始学习使用“时髦”的Go和Python编程。 因此,在大学录取水平上,方法上存在差异。 我认为,在大学中支持这两种技能很重要,否则,要么理论基础不足的专家,要么是没有学过又不想编写好的代码的人都可以在公司工作。
如何为未来的T形专家 “增加横梁” ?

显然,在这种情况下,学生只是选择自己最喜欢的东西。 老师只是简单地传达了一个更接近他的观点。 但是,如果代码编写精美,每个人都会从中受益,而且从算法的角度来看,所有内容都将是清晰,合理和高效的。
- IT视野 。 拥有计算机科学学士学位的毕业生是现成的专家,具有发达的技术前景,他很可能会选择他的个人资料。 但是在年轻的时候,我们不知道他或她会做什么。 可以学习科学或分析,或者相反,每天可以编写大量代码。 因此,学生需要展示IT领域的各个方面的工作,以熟悉所有工具。 理想情况下,理论课程的老师应表现出与实践的联系(反之亦然)。
- 生长点 。 避免过于极端-为了学生自己的利益。 了解自己是“数学家”还是“程序员”并不困难。 解决问题时,只需听一听冲动即可:您想做什么-在教科书中寻找最佳方法,或者编写一些肯定会在以后派上用场的功能? 在此基础上,您可以建立学习的进一步补充轨迹。
- 替代知识来源 。 碰巧程序很均衡,但是“系统编程”和“算法”完全不同,第一位老师更靠近某些学生,第二位老师更靠近其他学生。 但是,即使您不喜欢教授,这也不是使某些学科偏向于其他学科的理由。 单身汉本身有兴趣找到愿意与知识渊源一起工作的意愿,而决不会相信激进观点,例如“数学是科学的皇后,主要是要知道算法”或“好的代码可以弥补一切”。
您可以通过参考专业文献和在线课程来加深理论知识。 您可以提高在Coursera,Udacity或Stepik(其中提供了许多不同的课程)上使用编程语言的能力。 同样,如果学生认为算法老师对数学很了解,但却无法回答实施领域中的复杂问题,他们通常会开始观看硬核语言课程。 并不是每个人都会同意我的观点,但是在我的实践中,
Yandex的C ++专业化已证明了自己,其中越来越复杂的语言芯片被顺序排序。 通常,选择信誉良好的公司或大学的高分课程。
软技能

从大学到在任何公司工作,从一家初创公司到一家大型公司,即使是顶尖大学的学生也很难适应实际的工作环境。 事实是,如今大学在为学生提供很多“护理”。 即使错过了很多课程,没有为控制和测试做好及时准备,睡过头了,考试迟到了,每个人都可以通过并重新参加考试-最终还是获得了文凭。
然而,今天,所有条件都为学生做好了成年和独立专业活动的准备。 他们不仅需要编程,还需要沟通。 这也需要教导。 在大学里,有各种各样的形式来传授这些技能,但是,可惜的是,他们常常没有得到足够的重视。 尽管如此,在我们的军械库中,仍有许多机会获得有效的团队合作技能。
- 书面商务交流 。 不幸的是,大多数离开大学的专家对通信礼节一无所知。 即时通讯工具在晚上和下午的即时通讯中的通讯细节,以及对话方式和非正式词汇的使用。 但是,可以在学生与部门和大学的交流中训练书面语言。
在实践中,管理人员经常面临将大型项目分解为小任务的需求。 为此,您需要很好地描述每个任务及其组件,以便初级开发人员了解它们的要求。 一项设置不当的任务通常会导致需要重做一些事情,因此,书面交流方面的经验有助于毕业生在分布式团队中工作。 - 书面介绍他们的工作结果 。 为了介绍他们的教育项目,高年级学生可以撰写有关哈伯(Habr)的文章,科学文章以及报告。 这样做有很多机会-早在第二年,一些大学就开始提供学期论文。 您还可以将文章作为一种控制形式-它们通常在形式上更接近新闻报道。 这种方法已经在高等经济学院实施。
如果公司采用灵活的开发方法,则有必要以较小的部分,但更频繁地展示其工作结果。 为此,重要的是能够简短地传达一位专家或整个团队的工作结果。 同样,今天许多公司进行“审查”-每年或半年一次。 员工讨论结果和工作前景。 成功的审查是例如在Microsoft,Acronis或Yandex中获得职业发展和奖金的主要原因。 是的,您可以编写良好的程序,但是即使是一个艰难的专家,“坐在角落里”也总是会输给一个知道如何很好地展示自己的成功的人。 - 学术写作 。 另外,值得强调学术写作。 对于学生来说,熟悉编写科学文章的规则,使用论点,在各种来源中搜索信息以及链接到这些来源非常有用。 建议使用英语,因为国际学术界拥有许多优秀的教科书,而且对于各个学科,已经有完善的模板可用于展示科学成果。 当然,在准备俄文出版物时也需要学术写作技巧,但是还有更多关于英文的现代文章的例子。 您可以在相应课程中获得这些技能,该课程现已包含在许多教育计划中。
- 领导会议 。 大多数学生不知道如何准备会议,保留协议和处理数据。 但是,如果我们在大学中通过例如参加集体计划来发展这项技能,就可以避免在工作场所浪费时间。 为此,我们需要控制学生的设计工作,以便教他们如何有效地进行会议。 在实践中,这使每个公司都花了很多钱-因为如果几个薪水很高的人在一次集会上花费一个小时的工作时间,我希望他们获得相应的回报。
- 公开演讲 。 许多学生面对公开演讲只是为了捍卫自己的论文的需要。 并非所有人都为此做好了准备。 我见过许多学生,他们:
- 背对观众
- 摇摆,试图引入a佣,
- 折断笔,铅笔和指针,
- 围成一圈
- 看地板。
当一个人第一次讲话时,这是正常的。 但是由于这种压力,您需要早点开始工作-在同学之间的友好氛围中保护课程作业。
另外,公司的标准做法是使员工能够提出想法,获得资金,职位或专门的项目。 但是,如果您考虑一下的话-这是对术语论文的相同辩护,只是更高层次。 为什么在学习时不训练这种有用的职业技能?
我想念什么?
写这篇文章的原因之一是
在秋明州立大学网站上发表的一篇文章。 本文的作者仅着眼于外国教师注意到的俄罗斯学生的缺点。 我在不同大学中的教学实践表明,俄语学校和高等教育提供了良好的基础。 俄国学生精通数学和算法,与他们建立专业交流更加容易。
相比之下,对于外国学生,俄罗斯老师的期望有时可能被夸大了。 例如,在数学基础培训方面,我遇到的印度学生与俄罗斯学生相似。 但是,他们有时在本科学习结束时缺乏特殊知识。 好的欧洲学生更有可能在学校水平上没有那么强的数学。
而且,如果您在大学学习或工作,现在可以建立沟通技巧(您或您的学生)的工作,扩展基础知识并练习编程。 为此,俄罗斯教育系统提供了所有可能的方法-您只需要正确使用它们即可。
如果您在对帖子的评论中分享了与课程和方法的链接,这些链接有助于平衡教育平衡,以及在大学学习时以其他方式提高软技能,我将感到很高兴。