软件工程师 算法工程师
重点 (Top highlight)
This awkward and stressful thing between emerging a hero after completing the 12 labors of Hercules and the pointless successive hula hoops jumps of a circus trained animal, which we lightly call job interviews. We all hate them, yet they are an unavoidable fact of our professional lives.
在完成大力神的12次工作后出现英雄与马戏团训练过的动物的无意义的连续呼啦圈跳跃之间的这种尴尬而紧张的事情,我们称之为工作面试。 我们都讨厌他们,但是它们是我们职业生涯中不可避免的事实。
When for the first time I ventured naively into the uncomfortable and inhospitable world of software engineering technical interviews, it didn’t take long for me to feel that judging a software engineer’s ability in 2 or 3 hours is as accurate as cruentation.
当我第一次天真地冒险进入软件工程技术面试的不舒适和荒凉的世界时,我花了很短的时间就觉得在2到3个小时内判断软件工程师的能力就和审验一样准确了。
However, I always wondered how it was to be like the one sitting on the other side, what it takes to understand if an engineer is a good fit for the role. For the last couple of years, I conducted over 100+ software engineering technical interviews, and although each company has its unique process, there are common pitfalls people tend to fall. Here is my honest advice on how to avoid them.
但是,我一直想知道坐在另一边的感觉如何,如何理解工程师是否适合这个职位。 在过去的两年中,我进行了100多次软件工程技术面试,尽管每个公司都有其独特的流程,但是人们容易陷入普遍的陷阱。 这是我关于如何避免它们的诚实建议。
优秀的软件工程师 (The good software engineer)
“The road to success and the road to failure are almost exactly the same.” – Colin R. Davis
“成功之路和失败之路几乎完全相同。” –柯林·戴维斯(Colin R. Davis)
There isn’t a unique definition for a good software engineer. It relates to the needs of the role and the diversity and maturity of the company. A recent startup would undoubtedly need a short time to market, while a more mature company that grew to a large customer base would probably be facing some scaling and architectural challenges. Building product while understanding what makes sense to the business is different than solving complex technical challenges. A detailed perfectionist engineer is different from a fast iterating one. You need to understand what the company is looking for and frame your behavior and discourse into that mindset. Don’t do a one fits all CV, instead adapt it to that reality. If you have to do a pitch (in a way, you always do one formally or otherwise), frame it in a way that you show how you will be an asset to that specific company. You should understand the necessity the role is trying to fill and ask yourself if that motivates you if it does then embrace it. You should figure what the “good” definition looks like for the company’s context and show how your knowledge, experience, and attitude fits in that definition.
对于优秀的软件工程师而言,没有一个唯一的定义。 它关系到公司的角色需求以及多样性和成熟度。 一家新成立的初创公司无疑将需要很短的上市时间,而一家成长为庞大客户群的更成熟的公司可能会面临一些扩展和架构方面的挑战。 在了解对业务有意义的同时构建产品与解决复杂的技术挑战不同。 详细的完美主义者工程师与快速迭代的工程师不同。 您需要了解公司正在寻找什么,并以这种思维方式来构筑您的行为和话语。 不要只适合所有简历,而要适应现实。 如果您必须进行推销(从某种意义上说,您总是要正式地进行推销),则可以通过框架来表明您将如何成为该特定公司的资产。 您应该了解角色正在尝试填补职位的必要性,并问自己是否激发了您的角色,然后才开始接受它。 您应该确定公司背景下“好”定义的外观,并说明您的知识,经验和态度如何适合该定义。
做你的作业 (Do your homework)
“By failing to prepare, you are preparing to fail.”- Benjamin Franklin
“如果没有做好准备,您就准备失败。”-本杰明·富兰克林
Going on an interview without having a clue about the company it’s like going on a date and talking only about yourself, doesn’t mean there won’t be a second date but doesn’t give a good impression. Put in the effort to learn about the business, its objectives, it’s mission, strategy, and results. I would never fail someone for not knowing anything about it, but it is a hint of the candidate’s motivation. Also, it is a standard criterion HR tends to evaluate. Besides business goals, be sure to check the company’s tech blog if they have one and know their tech stack. Not very often candidates show legitimate interest for the company, but when they do, it is an excellent way to stand out.
在不了解公司的情况下进行面试就像是约会,只谈论自己,这并不意味着不会再约会,但不会给人留下很好的印象。 努力学习业务,目标,任务,策略和结果。 我永远不会让一个人对它一无所知而失败,但这暗示了候选人的动机。 而且,这是HR倾向于评估的标准标准。 除了业务目标外,请确保检查公司的技术博客,如果他们有一个并了解其技术栈。 候选人通常不会对公司表现出合法的兴趣,但是当候选人这样做时,这是一种脱颖而出的绝妙方法。
有批判性 (Have a critical sense)
“It is the mark of an educated mind to be able to entertain a thought without accepting it.”- Aristotle
“能够接受思想而不接受思想是受过良好教育的头脑的标志。”-亚里斯多德
I’ve met exceptional technical experts throughout my career and they were all kinds of different people. Still, all of them had at least one thing in common; they were the ones who defied the status quo and made the processes and technologies improve. So many candidates, when asked if they have questions, have nothing to add. Avoiding asking questions is a wasted opportunity, grab that moment to ask about the technical decisions the company made and the challenges they are facing and discuss the tradeoffs of each technology.
我在整个职业生涯中都遇到了杰出的技术专家,他们是各种各样的人。 尽管如此,他们所有人至少有一个共同点。 他们是违抗现状并改善流程和技术的人。 如此多的候选人,当被问到是否有问题时,没有任何补充。 避免提出问题是一个浪费的机会,抓住这一刻,询问公司做出的技术决策以及他们面临的挑战,并讨论每种技术的权衡。
Examples:
例子:
Are they considering moving to HTTP/3 yet?Are they moving to an event-driven microservice architecture? What kind of message broker are they using? Why not use Kafka instead of RabbitMQ?What kind of database technology are they using? What was the use case? Would ElasticSearch be a good alternative to SQL in that use case?
他们是否正在考虑迁移到HTTP / 3?是否正在迁移到事件驱动的微服务体系结构? 他们使用哪种消息代理? 为什么不使用Kafka代替RabbitMQ?他们使用的是哪种数据库技术? 用例是什么? 在这种用例中,ElasticSearch是否可以替代SQL?
And so on. Questioning the technical decisions will show that not only you know these technologies and can argue when they should be used but also that you can think critically and ultimately care about improving whatever applications you work with.
等等。 对技术决策提出质疑,将表明您不仅知道这些技术并可以争论何时应使用它们,而且还可以进行批判性思考并最终关心改善与您一起使用的任何应用程序。
技术挑战 (Technical challenges)
No amount of experimentation can ever prove me right; a single experiment can prove me wrong.- Albert Einstein
大量的实验都无法证明我是对的。 一个实验就能证明我错了。-爱因斯坦
The ungratefulness and straight-up unfairness of the current technical interview state is appalling. Most processes involve solving some kind of algorithmic problem related to computer science fundamentals like a graph search or sorting algorithm. I find anecdotal that a candidate has to implement a tree transversal algorithm with a minimal resource footprint so that when he gets the job, the first thing to do is to debug a ten-year-old monolith. As both a candidate and interviewer, I find this pretentious attempt to glorify the complexity of our work disheartening. These types of challenges are very likely to dismiss senior developers who don’t have these concepts fresh on their minds, even though they might have paramount experience in the role.
当前技术面试状态的忘恩负义和直截了当的不公平令人震惊。 大多数过程都涉及解决某种与计算机科学基础相关的算法问题,例如图形搜索或排序算法。 我发现一个轶事,即候选人必须以最小的资源占用量实现树横向算法,以便在他获得这份工作时,要做的第一件事就是调试一个已有十年历史的独石。 作为候选人和面试官,我发现这种自夸的企图夸大我们工作的复杂性令人沮丧。 这些类型的挑战很可能会使高级开发人员被解雇,即使他们在角色扮演中具有最重要的经验,他们也不会想到这些新概念。
I agree these types of exercises aren’t entirely useless; the ability to solve small problems fast relates to the ability to solve complex problems that sprawl over several days, but they are fundamentally different. The interview process should reflect the best it possible can the reality of day to day work. Some processes include finding and patching bugs on a real application, pair to pair programming, or implement automated tests that I find much more adequate than an esoteric algorithmic problem. For these types of situations, be sure to feel comfortable with the company’s language of choice, and don’t be afraid to ask questions to understand the full picture of the challenge.
我同意这些类型的练习并非完全没有用; 快速解决小问题的能力与解决持续数天的复杂问题的能力有关,但根本不同。 面试过程应尽可能反映日常工作的现实情况。 一些过程包括发现和修补实际应用程序中的错误,成对编程或实施自动化测试,而我发现这些测试比深奥的算法问题要合适得多。 对于此类情况,请确保对公司选择的语言感到满意,并且不要害怕提出问题以了解挑战的全部内容。
For most processes though, you will be faced with some kind of algorithmic or data structures problem, no way around it unless to have a sound knowledge of computer science fundamentals. Resources like the book Cracking the coding interview, Leetcode, or Pramp can be good references.
但是对于大多数过程,您将面临某种算法或数据结构问题,除非您对计算机科学的基础知识有充分的了解,否则就无法解决。 像《破解编码面试》,《 Leetcode》或《 Pramp》这样的资源可能是很好的参考。
Either way, be sure to explain your reasoning out loud. Usually, problems build atop of each other, it doesn’t matter if you fail in a subject as long as you can ace the rest of the problem. The interviewer will help you if you get stuck, it is crucial to see a candidate recover from a less-known subject and do well on the rest. Also, an experienced interviewer might change from questioning to teaching when you struggle, don’t interpret this change as a failure; the changing of context helps unblock most people.
无论哪种方式,请务必大声解释您的推理。 通常,问题是相互叠加的,只要您能解决其余问题就不会在科目上失败。 如果您遇到困难,面试官会为您提供帮助。至关重要的是,确保候选人从一个鲜为人知的主题中康复,并在其余方面表现出色。 同样,经验丰富的面试官在您挣扎时可能会从提问转变为教学,不要将这种转变理解为失败。 上下文的变化有助于解除大多数人的阻碍。
The interviewer is there to help you as well as to evaluate you, not to judge you. See him as an old colleague that is mentoring you on a problem. Make sure to discuss the various solutions and tradeoffs; it will show how knowledgeable you are with the subject.
面试官在那里可以帮助您以及评估您,而不是对您进行判断。 认为他是一位老同事,正在指导您解决问题。 确保讨论各种解决方案和权衡; 它将显示您对该学科的了解程度。
不要灰心 (Don’t get demotivated)
Success consists of getting up just one more time than you fall.- Oliver Goldsmith
成功包括起床比摔倒多一倍。-奥利弗·戈德史密斯
I once had a candidate who was very shaky and unsure during the interview. Despite being insecure and second-guessing himself, he did well so he still got hired. However, after settling, on the day to day job, he was extremely confident, able to lead discussions, and guide the team on technical subjects. Later I asked him how come he had such a diffident attitude during the interview. He then explained to me that he had a string of disastrous interviews and at the time wasn’t coping too well with the rejection. Rejection is a part of the process and you can’t let it get to you.
我曾经有一个候选人,在面试中非常不稳定和不确定。 尽管他没有安全感并且会second不休,但他做得很好,因此仍被录用。 但是,在安顿下来之后,在日常工作中,他非常有信心,能够领导讨论并指导团队处理技术主题。 后来我问他在面试中他为什么有如此不同的态度。 然后,他向我解释说,他接受了一系列灾难性的采访,而当时对这种拒绝的态度还不够好。 拒绝是该过程的一部分,您不能让它得到您。
It simply isn’t possible to evaluate every single ability relevant to a software engineer in a few hours. Each process chooses the relevant ones for the company and tries to evaluate them the best way possible. Which can be the ones you excel at or not.
根本无法在几个小时内评估与软件工程师相关的每一项能力。 每个过程都为公司选择相关的过程,并尝试以最佳方式对其进行评估。 可以成为您擅长或不擅长的。
Bad hires are tough for the company, especially the team they join in terms of morale. They also have a significant cost. Add that to many companies not having a standardized process (the point is comparing candidates, so every interviewer should tackle the same subjects, and there should be a defined process, equal for every interviewer) and you are left with a significant percentage of false negatives. Doing bad on an interview doesn’t mean you’re bad. It means that the abilities you showed weren’t the best for that process at that given time.
糟糕的招聘对于公司来说尤其是艰难,尤其是从士气方面来说,他们加入的团队。 它们也有很大的成本。 再加上许多没有标准化流程的公司(重点是比较候选人,因此每个面试官都应对相同的主题,并且应该有一个定义的流程,每个面试官都应平等),并且您会留下相当大比例的误报。 在面试中表现不好并不意味着你很糟糕。 这意味着在特定的时间里 ,你展示的能力并不是最好的。
I know, when I fail and read or listen to something like this, I always think it’s bullshit. All my life I’ve always tried to be a fighter. However, there were times that I lost too many fights. A fighter that is always losing is nothing more than a punching bag. But sometimes you have to find that inner strength to drag yourself out of the wreckage where you have given in. To get up, raise your hands and fight one more time and not let the failure get to you.
我知道,当我失败并阅读或聆听类似内容时,我总是认为这是胡扯。 我一生都想成为一名战士。 但是,有些时候我输了太多战斗。 永远失败的战斗人员不过是一个出气筒。 但是有时候,您必须找到内在的力量才能将自己拖出自己所屈服的残骸。要站起来,举手并再战斗一次,不要让失败落到您身上。
一切都与激情有关 (It’s all about passion)
“Your work is going to fill a large part of your life, and the only way to be truly satisfied is to do what you believe is great work. And the only way to do great work is to love what you do. If you haven’t found it yet, keep looking. Don’t settle. As with all matters of the heart, you’ll know when you find it.”- Steve Jobs
“您的工作将占据您一生的大部分时间,要真正满足,唯一的方法就是去做您认为很棒的工作。 做伟大工作的唯一方法就是热爱自己所做的事情。 如果尚未找到它,请继续寻找。 别解决 与内心的所有事情一样,当您找到它时就会知道。”-史蒂夫·乔布斯(Steve Jobs)
As we make our way through the confusion and chaos of our daily lives, we thirst for those moments of clarity, where time bends and reality fades as we lose ourselves in a challenge or a task. In those moments of transcendence, a whole lifetime can pass you by without you even noticing. That’s what programming is to me and so many of us, that everlasting and unwavering passion that is chiseled in our core. And that same passion is the secret ingredient to success.
当我们走过日常生活的混乱和混乱时,我们渴望那些清晰的时刻,当我们在挑战或任务中迷失自我时,时间弯曲而现实逐渐消逝。 在那些超越的时刻,一生都可以忘却你。 对我和我们中的许多人而言,这就是编程的本质,而这种永恒而坚定的激情则根植于我们的核心。 同样的热情是成功的秘诀。
I saw candidates ace our interview process to only be average on the role they were hired for. They weren’t bad, they were talented and knowledgeable, but they just performed averagely. Sometimes you are good at things you don’t really care for, but it’s that passion that will drive you to succeed. It’s not easy to rate a software engineer’s passion. But if I asked you what kind of side projects you have or what was the best project you ever worked on, you would probably be able to eagerly discuss a handful of projects for a whole afternoon. It doesn’t matter if it was a platform with millions of users or a side project that barely works. A passionate programmer would enthusiastically describe every pattern he applied, every challenge he conquered, even every hack and failure, with joy and nostalgia. Then any interviewer would know, the guy across the table is just like him, a fellow programmer hopelessly passionate about coding.
我看到应聘者在我们的面试过程中只能平均被录用。 他们还不错,他们很有才华和知识渊博,但他们的表现平均。 有时候,您擅长做一些您并不真正关心的事情,但是正是这种激情驱使您成功。 评估软件工程师的热情并不容易。 但是,如果我问你有什么样的辅助项目,或者有史以来最好的项目是什么,那么你可能就可以整个下午热切地讨论一些项目。 不管它是一个拥有数百万用户的平台还是一个几乎行不通的辅助项目。 一个充满热情的程序员会热情洋溢地描述他所应用的每种模式,他所征服的每一个挑战,甚至是破解和失败。 然后,任何面试官都会知道,桌子对面的人就像他一样,一位程序员程序员对编码充满了无望的热情。
It is a very authentic reaction; you almost can see it on their eyes and body language. Either you are passionate about it, or you aren’t. If you are, be sure to talk about those projects that move you, that can be the difference between an average interview or an excellent one.
这是一个非常真实的React。 您几乎可以通过他们的眼睛和肢体语言看到它。 您要么对此充满热情,要么就没有。 如果是的话,一定要谈论那些让您感动的项目,这可能是一次普通采访还是一次出色采访之间的区别。
结语 (Wrapping up)
I always felt that the stressful part of being a candidate was knowing I needed to get the job and to prove myself I was good enough. The role of the interviewer isn’t completely deprived of stress, the interviewer needs to be sure to have strong reasons to either approve or fail someone so the decision can be audited, in my case, it always is, especially by my conscience.
我一直感到,成为候选人的压力在于知道我需要获得这份工作并证明自己我足够优秀。 面试官的角色并没有完全摆脱压力,面试官需要确保有充分的理由批准或失败某人,以便可以对决定进行审核,就我而言,这总是可以接受的,尤其是凭我的良心。
Most interviewers had to be interviewed at some point so odds are they are sympathetic. I hope I helped to shed some light on the view from the other side, and I honestly hope my advice will help you get the job you really want.
大多数采访者必须在某个时候接受采访,因此他们很同情。 我希望我能从另一角度帮助您阐明看法,并且真诚地希望我的建议能帮助您获得真正想要的工作。
翻译自: https://medium.com/swlh/my-advice-after-interviewing-100-software-engineers-e34bc3cbc669
软件工程师 算法工程师