如何从学生成长为软件工程师?

你好!我叫Denis Dovzhenko,几年来,我一直在与C / C ++软件工程师职位的候选人进行技术面试。如果与高级软件工程师及以上职位的候选人的主要谈话是关于工作经验,那么对未来的实习生和大三的选择是基于大学获得的知识以及解决相同水平学术问题的能力。正是在这里,事实证明,即使在一流的技术大学中,他们也教授“不是那样”和“不是这样”。几乎从培训的第一天就开始为从学生状态到工程师状态的过渡做好准备是很高兴的。

在本文中,我将讨论在圣彼得堡开发中心,戴尔技术公司如何帮助学生为软件工程师的成功发展做好准备。



教育,还是在哪里学习?


在学校里,我们习惯于每个任务都有唯一正确解决方案的事实。到学士学位课程结束时,一些学生已经感觉到它可能不是唯一的一个,但是对于最适合问题情况的选择解决方案的标准尚未了解。无论如何,在单身汉的脑海中,通常绝对有信心,软件工程师不过是受过训练的猴子(代码猴子)而已。毕竟,正是实验室工作所发展的正是这种技能:对角阅读任务并迅速完成任务。但是,什么样的学生会在课程开始前一周开始做实验?突然间,在采访中,邪恶的叔叔要求他至少提供一种最低限度的算法文化,谈论一些“开发过程”,迫使他们解决复杂的问题……事实证明,认为学士学位的初级步骤太高,而硕士似乎还没有足够的地位。

我认为问题在于,即使在IT专业中,编程教学也与实际任务脱节。在课程中,该学科可能被称为“用语言编程...”,但实际上,在教室中,带有牵强的示例的语法冗长而乏味,并且编程艺术几乎不存在。通常在大学课程中,根本不会理解将由计算机执行代码,但是人们会读它!

经常发生的情况是,“编程”是与计算机硬件隔离地进行研究的,软件体系结构已转移到高级课程,并且没有人担心阅读参考条款的能力。当然,也有例外,例如我的同事A.V. Martynov在圣彼得堡理工学院开展了几年的“ C ++工业编程”课程。



结果,在访谈期间,甚至在学生项目参与者编写的代码中,当作者根本没有考虑可能的限制时,我经常注意到“从教科书中”复制了示例。例如,在使用C / C ++的情况下,大多数高年级学生也无法清楚地解释静态,动态分配和堆栈内存之间的区别,有关语言关键字与存储持续时间和链接的关系的问题只会使他们感到恐惧。在面试中,我尝试给出下面的分析示例(请注意,尽可能简单),但现在我不这样做。对于大多数学生来说,为什么调用f2()函数使SEGFAULT导致程序崩溃的原因远远超出了理解范围。

#include <iostream>

using namespace std;

extern void populate(int* data, unsigned long size);

const unsigned long ARRAY_SIZE = 2048 * 2048;

int d1 [ARRAY_SIZE];

long f1()
{
  populate(d1, ARRAY_SIZE);
  long ret = 0;
  for (unsigned long i = 0; i < ARRAY_SIZE; ++i) {
    ret += d1[i];
  }
  return ret;
}

long f2()
{
  int d2 [ARRAY_SIZE];
  populate(d2, ARRAY_SIZE);
  long ret = 0;
  for (unsigned long i = 0; i < ARRAY_SIZE; ++i) {
    ret += d2[i];
  }
  return ret;
}

int main()
{
  cout << f1() << endl;
  cout << f2() << endl;
  return 0;
}

我相信现在是雇主,学生和大学领导者认识到利益冲突的时候了。为了大大简化图片,可以将其简化为以下语句:

  • 学生希望获得文凭的努力最少,并将其视为获得高薪工作的必经之路。
  • 教育机构希望通过钩子或骗子获得较高的评价,从而增加各种资金,包括教师的工资资金。而在计算等级,例如常用的方法,例如,指示“学生就业”为总的高达2%。
  • 雇主在心里大喊:“是的,您终于开始为普通的毕业生做好准备,他们不需要再培训几年,甚至不需要再培训这一次的高级和高级员工。”

这些问题甚至在一流的技术大学中也很明显,那么对于那些“低调”的学生,我们能说些什么呢?


在圣彼得堡开发中心办公室举行的戴尔技术日活动在

最近的论坛“ 查找信息技术”中“出乎意料的大量学生被吸引到Dell Technologies展台,讲述了以下故事:”我没有在USE中获得高分,我对大学对IT专业申请人的高要求感到恐惧,因此去了Zaborostroitelny InstituteN。到第二年年底,我突然意识到栅栏的建设不是我的,请带我去看程序员。”因此,半个多世纪以前出版的艾萨克·阿西莫夫(Isaac Asimov)的小说“职业”的情节几乎是真实复制的。从现代小学生或初中生的角度来看,所描绘的未来世界几乎是完美的:无需参加课堂或讲座,也无需做家庭作业。就在您到达培训中心的某一天,几分钟之内,来自载体的信息就会直接写到大脑(在故事中,它们被称为“培训磁带”),您可以放轻松-学习过程已完成。

故事“专业”的片段
– , , – . – . . , , , -. , . , , , , . ? , , - . .
– ? – . – , ? ?
– . - . . , , , , , . .
– ?
– , , , , , . , , . : « . , ». , : « , , ». , , , . , .

由于立即将技能投资到学生的脑袋上仍然是很棒的,因此学生将不得不自己努力。即使在大学“一级”教授编程,也必须学习该课程,而不是“听”这门课。而且在围墙建造学院的培训甚至可以提供帮助,因为它不会产生“他们向我们读了,我知道的一切”的错误感觉。

对有兴趣招募合格人员的公司而言,也应负责培训学生。在本文的第二部分中,我将以圣彼得堡R&D戴尔技术中心为例,讨论一些计划,以支持学童和学生建立IT专业职业。

公司如何“锻造”人员?


普遍的看法是:“当孩子躺在长椅上时,有必要抚养它。”基于这一原则,戴尔技术公司开发了一个与未来工程师互动的多阶段系统:从培训高中生到中心工程师参与委员会的工作,以保护本科生和硕士学位。

自2018年以来,我们一直与数字香蕉学生IT课程的组织者成为朋友。去年,我们的工程师帮助为学生举办了黑客马拉松,并在数字丛林节上进行了讲座和大师班。国际上还为高中生提供了另一项教育计划,即“学生之星”。我们开发中心参与该计划的第八年已经过去了:每年6月,大约30名10年级物理学校的毕业生将在软件工程界沉浸一个星期。如果现在谈论与Digital Banana的可衡量的成果还为时过早,那么我们已经看到领先技术大学的学生中过去几年的STAR学生毕业生。

新生中仍在寻找有前途的未来工程师。与伦纳德·欧拉基金会(Leonard Euler Foundation)合作,在戴尔技术联盟网络中的六所大学(理工大学,圣彼得堡国立大学,ITMO,LETI,SUAI,PSUPS)中,第一届课程将授予个性化的“成功新生奖学金”。在第二年,学员将有机会参加指导计划。顺便说一句,几年前,有关此文章的文章已发布在Habré的此博客上。我只能补充一点,在最近几年的照片中,可以再次看到同样的面孔-我们的许多受训者成功地从大学毕业,成为Dell Technologies的雇员,现在以指导者,老师和策展人的身份回到指导计划。


, , .

下一阶段是“联合学生项目计划”,这使学生有机会直接在大学中参与R&D项目。而且,该项目的所有参与者都不必是同一所大学的学生;其他(甚至是有条件的“建立篱笆”大学)的学生也可以加入他们的行列。联合项目的任务已经从我们真正的积压工作中提取,也已经从我想为该项目完成的任务中提取,但是在优先级更高的任务压力下,很有可能推迟“稍后”。在一个联合项目中,团队负责人的角色由大学的一名员工担任,我们的工程师充当客户。参加联合学生项目带来的额外好处是,表现良好的学生将首先被视为实习生职位的候选人,联合项目的结果可以用作学期论文或学位论文的材料。

与大学合作项目的历史有许多肯定成功的案例。例如,Unity存储实用程序之一的开发是与SUAI的联合项目开始的。还有一个奇怪的情况是,对于ITMO的三年级学生来说,一个联合项目的职责范围太复杂了(作为项目的策展人之一,我试图将部分责任推卸给自己),但是直到最后决赛的参与者都可以展示出他们应对困难的能力,并且实际上全力以赴成为了我们的实习生。现在他们已经是成熟的工程师。

经过共同研究项目后加入我们团队的Dell Technologies工程师:Anastasia Zinner,Nikita Tyukachev,Vladislav Alekseev

大学开始鼓励学生以各种可能的方式参与到第三至四年级本科生的实际项目中(我们记得,刺激是在古罗马用来驱动drive牛的尖棒)。那时,在普通学生的脑海中弹出了“实习”这个神奇的词,它应该立即自动完成将pa变成学生蝴蝶变成工程师的转变。正如艾萨克·阿西莫夫(Isaac Asimov)所描述的那样,不需要任何额外工作(申请实习)的另一种过渡是如此美妙。在现实生活中,没有即时的转变;实习是一个漫长的过程。在Dell Technologies,实习生实际上扮演初级员工的角色,并且在成为公司的全职员工之前,他们在六个月到一年的时间内担任实习生。

显然,指导计划和联合学生项目的参与者在招聘实习职位时会获得一定的优势。至少,他们是第一个从其导师或项目策展人那里接收有关未平仓职位信息的人。在访谈中,我们发现学生课程的参与者通常是更强的候选人。另一方面,我们不会对尚未通过学生项目的候选人敞开大门。

在本文讨论范围之外,还有许多其他与学生互动的方式。例如,在学生论坛上的讲座或在我们办公室定期举办的“技术日”,任何人都可以参加。鉴于劳动力市场的当前状况,公司必须花费时间和金钱来培训公司内部或外部的人员。我想相信,我们的行动不仅使我们能够为自己准备合格的专家,而且还为工程师的成长和整个行业的发展做出了贡献。

该材料的作者是软件高级首席工程师Denis Dovzhenko。

All Articles