我的公司,一个C++的房子,总是希望雇用最近的毕业生.然而,由于Java Schools现象,我们通常最终会采访可能只有一点点C++的强大的Java程序员.通常,C++课程并不能让学生真正为使用C++工作做好准备.然而,通常这些都是聪明的孩子,渴望学习并尽力而为.
每次采访,我都在努力解决这个基本问题:
将"Java School"程序员变成C或C++程序员有多难?贵公司是否有过将陈规定型的"Java Schools"程序员转变为强大的C++程序员的经验?值得努力吗?
我努力解决这个问题的原因之一不仅仅是由于C或C++与Java语言的差异,而是学习C或C++所带来的基本技能,我认为这些技能经常在Java学校迷失.这些包括数据结构,计算复杂性,手动内存管理,Joel Spolsky 在这里说的一切.
通常情况下,据我所知,学生将有一定的这些基本技能(能回答几个问题),但我仍然有我的这种心态很大程度上这是与人如何学习好这些非常怀疑在某些C或C++中没有弄脏自己的技能.也许我需要消除这种刻板印象.我只是不公平吗?
无论如何,你将"Java School"程序员变成C或C++程序员的经历是什么?
好吧,如果他们不了解数据结构和算法的复杂性,他们就不会在严肃的Java编程方面做得好,所以我不认为这里的语言是个问题.
他们不会理解指针,但优秀的C++编程通常不会以复杂的方式使用指针.(也有例外,但由于我不知道你的公司做了什么,我无法判断它们是否适用.)毕竟,你可能不希望你的开发人员编写他们自己的链表而不是使用std ::名单.
他们不会理解手动内存管理,但这在C++中比以前容易多了.在现代C++中,由于异常的可能性,做自己的内存管理变得更加困难,所以你想要用几乎所有东西来练习RAII(使用auto_ptr,boost :: shared_ptr,等等).
如果我在办事,我会雇佣他们,如果他们看起来很好.我知道可能存在问题(毕竟C++是比Java更苛刻的语言),并且有一些想法如何处理它们.
因为他们没有你想要的确切技能,所以没有理由避免雇用大学毕业的人.聪明的人会学习,你可能不想雇用那些不聪明的人.
纯粹从C++程序员的角度讲,我认为想要学习C++的Java开发人员将面临相当陡峭的学习曲线.是的,在某种程度上,开发代码在所有语言中都是类似的.我曾被要求用Excel的宏语言(VBA之前)编写代码.我设法但是就像用五年级的词汇来写" 战争与和平"一样.
C++存在其他问题(指针,内存管理,运算符重载),据我所知,这些问题在Java中并不存在,它们也不是小问题.特别是如果你正在寻找某人来帮助处理遗留的C++代码,这些可能会带来很大障碍.而且我想我最初会开始任何新员工至少进行一些维护工作.
程序员编程.实际上知道如何编程的人可以学习任何语言.当然,有一个学习曲线,但一个好的编码器可以相对快速地加速.如果你期待有高级知识的人,你不会想要雇用新鲜的毕业生,对吧?所以无论如何都会有学习曲线.
与我使用的其他语言(如Java,C,Python,Fortan,Javascript,ASP和Perl)相比,我已经编写了许多语言并且发现C++很难找到并且很有效率.我几乎会说它属于自己的一类.我不相信我刚刚列出的一种语言(包括Java)的能力是一个人可能有多好的C++程序员的一个很好的预测器.我认为C++几乎需要一种不同的思维方式,当然还有在编码时能够掌握大量信息的能力,而不是主要关注业务需求.
尽管从不需要在工作中使用它(即在我自己的时间学习),但我多年来一直努力精通C++.这是非常艰难的,毕竟这一次我不确定我作为一名C++程序员是否会成功和富有成效.我认为我在其他语言方面总体上相当称职.
因此,基于我一个人的小而明显偏见的样本(我!),我建议倾向于那些已经展示了大量过去C++经验的开发人员,如果这是他们将在日常工作中做的事情.你需要花更多的时间找到那些候选人,但我认为从长远来看你将有更好的成功机会.
我的经验法则是,我宁愿让一个C/C++程序员编写Java而不是Java程序员来编写C/C++.我不知道哪些Java程序员可以处理内存管理和指针,直到他们尝试它.
如果我不得不选择的是Java学校的孩子,我会告诉他们一些关于汇编和C的恐怖故事,然后尝试将它们分为三类.
霍元甲.他们没有注意.
害怕和恐慌,因为他们知道他们无法处理这种复杂性.
由于他们明白,即使是比他们更聪明的人也会因为奇怪的内存和硬件问题而陷入直觉,但是他们很害怕和渴望,但是,这听起来确实是一个很好的挑战.
我从第3组雇用.
"你不能教高." - 一些着名的篮球教练.
招聘时,你正在寻找能够快速学习新概念并迅速忘却习惯的人.后者可以偷偷摸摸你.在Java-> C++转换的情况下,您可能面临"忘掉"诸如重度IDE依赖,"一切都是对象",对象和程序的心理模型过于高级等等.
我建议你寻找灵活性的东西 - 让他们在IDE和纯文本编辑器中编写一个小程序,向他们展示一个简单的C++函数,它传递一个指针并修改底层值,看看他们是否绊倒了等