以下是由 Lara Schenck 撰写的客座文章。 我在纽约的 CodePen 会议上听她讲了这个故事。 我看到很多点头。 事实上,这个行业确实在 职位名称、描述、面试以及整个流程方面存在一些问题。 看看 Lara 的故事,然后 关注她,因为我相信这不会是这场讨论的结束。
我过去三年一直都是自由职业者。 虽然我在大学毕业后的第一年曾在一家三人的现在已经倒闭的初创公司工作,但我从未有过典型的 9 到 5 工作制(或者现在更像是 10 到 8),老实说,我从来也不想要这种工作制。 Lara Schenck, LLC 是一家盈利的企业,我每天都在做有趣且具有挑战性的工作。 我自己安排工作时间,想休假就休假,一切都按照我的意愿进行。
虽然这一切都很棒,但你从独立工作中得不到的是团队体验。 我的工作基于向非技术设计师和内容制作人员教授技术素养,以便他们能够更好地与开发人员沟通。 理论上,如果设计师了解到为什么要求 18 种字体是个坏主意,如果内容制作人员知道为什么编辑一组相关帖子的标题并非易事,那么每个人的生活都会变得更轻松。 至少这是我的理论,也是我发展业务的假设。
然而,最近,在一次典型的 冒名顶替综合征 的发作中,我一直在想,等等,如果我从未真正在一个团队中工作过,我怎么可能告诉别人如何在团队中工作呢? 我一直都是“首席 UI/UX/视觉/网络/前端设计师”,从未在一家拥有独立产品、UX、营销、内容、前端、后端等团队的大公司工作过。
所以,我感觉有必要找一份工作,一份看似完美的职位正好落入了我的手中。 这是一家很棒的公司,在技能方面看起来很适合我。 职位名称是“UX 工程师/交互设计师”。 我通常会对“工程师”这个词感到反感(也许是出于 正当理由),但考虑到“设计师”的存在以及职位发布的性质,我并没有太在意。

FizzBuzz 问题。
当进行与首席开发人员的技术面试时,我感到非常自信。 除了 JavaScript“工程”以及与算法相关的任何内容之外,我的技术技能都很娴熟。 我们从关于样式指南、Sass、设计师/开发人员现象、原子设计、内容以及所有让我超级兴奋的那些很棒的东西开始谈话。 然后是编码部分。 我预计会问一些关于细致定位、语义、也许一些基于 UI 的 JS 东西以及开发工作流程的问题。 第一个问题是
面试官:你熟悉 FizzBuzz 吗?
我:嗯,说实话,我不太熟悉。
面试官:好的,那么你需要编写一个程序,将 3 的倍数打印为“Fizz”,而不是数字本身,将 5 的倍数打印为“Buzz”。 对于既是 3 的倍数又是 5 的倍数的数字,则打印“FizzBuzz”。 所以它看起来像“1、2、Fizz、4、Buzz、Fizz、7、8、Fizz、Buzz、11、Fizz、13、14、Fizz Buzz”
我:(我的天,数学题。 我试着解释了一下,但然后说:)
我:好的,再说一次,说实话,我的 JS 知识更多地与基于 UI/UX 的任务有关。 我真的不明白这个问题的意义。 就像,有什么用例吗? 这种情况会在这个职位中出现吗?
(直到我向朋友讲述了这段对话后,我才意识到在面试中不应该问“为什么要问这个问题?”)
面试官:嗯,这是一个关于程序化思维的练习。 不用担心,我们继续下一个问题。 编写一个函数,它接收一个时间码字符串并将其转换为秒。
我又开始解释,但当有人看着我时,我无法想出来。 我需要进行一些严肃的 Google 搜索。 他说我可以将我的解决方案通过电子邮件发回。 我考虑过打电话说,“算了吧,这工作不适合我”,但我决定坚持下去。 在花了几小时想出一个半成品解决方案后,我在 StackOverflow 上找到了解决方案,出于我的诚实,我在代码中链接了它。
不出所料,在我发送解决方案几天后,我收到了“你没有足够的经验来担任这个职位,但我们想保留你的简历”。 在我容易患上冒名顶替综合征的情况下,我觉得自己被指责为一个只擅长 Google 搜索,也许还会一些 jQuery 的开发者。 我很尴尬。
但是,是的

<吐槽>
在让这种自我怀疑消散之后,一种新的情绪涌现出来:愤怒。 FizzBuzz 是一种 过滤掉假程序员 的方法。 我完全意识到我不是一名程序员,至少从算法、数据建模等角度来说不是。
让我们看看我看到的职位描述(为了匿名,只做了一些细微的更改)。 对我来说,这个职位描述绝对不是针对这种定义上的程序员。
UX 工程师/交互设计师
(……bla bla bla,我们是一家很棒的公司,正在寻找一名很棒的人……)
职责
- 创建低保真和高保真模型,以有效地传达交互和设计理念(例如线框图、草图、“像素级”模型等)。
太棒了。 除了“像素级”部分。 但也许这可能是一个帮助他们更新流程的机会。
- 提供引人入胜的创新原型,并为我们产品的开发贡献前端代码。
没问题!
- 与团队其他成员协作并综合他们的反馈。
没问题。
- 评估新旧产品的可用性,应用用户研究结果,并提出改进的建设性建议。
我愿意。
最低资格
- 设计、计算机科学或相关技术领域的理学学士学位,或具有可比的实际经验。
小问题。 尽管随意反驳我,但我们是否可以达成共识,即不存在“设计”的理学学士学位? 而且设计和计算机科学学位截然不同? 但我决定不计较。
- 2 年或以上设计干净、有效且兼容的网站和应用程序的经验。
没问题!
- 了解 Adobe Photoshop 和 Illustrator。
当然!
- 干净优雅的视觉设计美学。
没错!
- HTML5、CSS3、JavaScript。
我对前两者很精通,但由于没有提到编程方面的知识,而且职责部分更侧重于设计和原型技能,我认为我的 jQuery 熟练程度和自学能力就足够了。
- 热衷于创建响应式且令人愉快的界面和体验。
我最喜欢的一点!
优先资格
- 熟悉面向对象 JavaScript 和现代 JavaScript 库,例如 Ember、Backbone 或 Angular。
我尝试过这些库,也了解其概念。 我不敢说自己很精通,但肯定“熟悉”。 当然,这可能是我不适合这个职位的原因,但再说一次,上面几节的措辞更倾向于设计和原型技能。
- (bla bla 关于自驱力和沟通能力的内容)
那么,FizzBuzz 在其中扮演什么角色呢? 当然,“工程师”在职位名称中,但“设计师”、“UX”和“交互”也在其中。 对我来说,这绝对不表示编程工作。 如果我知道是编程工作,我不会申请。
这是一个问题。
我想我不会是唯一经历过这种事情的人。 职位名称的难题是 一个已知问题。 但职位描述同样糟糕,甚至更糟糕。
让我们看看我见过的其他一些例子。
UI/UX 设计师
UI/UX 比我想象的要模糊得多。
除了你对 UI 和 UX 设计的经验和能力之外,如果你不小心掌握了 HTML、CSS、JavaScript、前端开发,那将是超级棒的。
还记得你有一天早上醒来的时候,就像,哇!我掌握了 JavaScript 却没有意识到吗?不。
前端开发人员
- 使用 HTML/CSS/SCSS 和 JavaScript 编写前端代码
- 偶尔使用 PHP (WordPress) 或 Ruby (on Rails) 编写前端代码
嗯,PHP 和 Ruby 不是前端语言。也许他们在谈论模板,但是... 不。另外,将 SCSS 和 CSS 列为必备技能很可疑。我闻到了有人列出了流行语。
前端开发人员:HTML5、CSS3、JavaScript
你的职责
在这个职位上,你将协作设计、构建和测试世界级的 Web 应用程序。你将与产品、营销、法律、业务发展和运营团队合作,构建和改进我们的核心产品。测试并交付满足所有要求的稳定可靠的代码。发现和尝试新技术并与团队分享。
你将是整个公司。这没什么用。
此职位所需的技能
- HTML/CSS
- JavaScript 框架
- CMS (WordPress 优先)
- Adobe Create Suite
- UI/UX
- 设计眼光
非常不具体。
现在我最喜欢的...
能力
- 创造力
- 解决问题
- 处理模糊性
- 客户关注
- 功能/技术技能
哈哈。
我去。
希望你明白我的意思。
是谁在写这些描述?我相信这些公司偶尔会找到完美的匹配。但我有一种感觉,这并不常见。更有可能的是,许多公司只是不知道他们需要什么,所以他们寻找一切。招聘人员或人力资源人员会快速写点什么,然后发布出去,看看谁会咬钩。也许他们会抓住一只独角兽!
此外,根据我(虽然很少)的求职经历,谁知道面试会发生什么?我想你会和一位真正的设计师或开发人员交谈,他们对情况有更好的了解,谁知道这与职位描述的匹配程度如何,更不用说面试者的技能集了?
</rant>
我觉得在没有提出解决方案的情况下抱怨毫无意义,所以这里有一些建议,给那些负责招聘的人
- **审计你的流程并找出差距。**要么雇佣顾问,要么内部进行,但请关注全局,与各种员工(初级和高级)交谈,并找出痛点在哪里。不要仅仅解读开发/设计负责人和经理的意见,并将他们的需求合并在一起。
- **列出与职位相关的切实可行的示例任务。**特别是如果职位中列出了 JavaScript(你能看出我对此有点生气吗?)。比如
- 实现图像滑块和平滑滚动
- 将我们的 CSS 管道迁移到 Sass
- 对交互元素(例如按钮悬停状态和表单样式)做出快速的设计决策。
- 使用 AngularJS 创建一个注册表单。
- 使用正则表达式检测文本内容中的任何日期。
- 建议改进我们的 Rails 部署工作流程。
- **天哪,在描述中放入代码示例。**为什么不呢?说真的。如果我看到需要用纯 JavaScript 对数据进行消毒,我根本不会理会。
故事时间
这就是我的故事。我称之为“非独角兽的故事”,因为在进入这个申请流程时,我有点认为自己是一只独角兽。他们能得到我真是幸运。我是设计师/开发人员,如果曾经存在的话。但是,由于错误的职位描述(和 JavaScript... 呜呜呜),我意识到我的独角兽身份是错误的。悲伤的表情。除了根本不悲伤,因为 Lara Schenck, LLC 的生意兴隆。
我认为其他人也遇到过这种情况。是吧?不?我只是在抱怨和讽刺吗?
这篇帖子对我来说意义重大,与我参加过的许多“面试”非常相似。整个 fixbuzz 事情就是一个巨大的笑话。我在使用或听说过 PHP 的模运算符之前或之后,从未见过或听说过它。
我也知道,如果你掌握了描述中列出的所有技能,那么你为什么要对他们的公司感兴趣呢?你应该在 Google 或者其他地方。
在咨询了一段时间(很多次面试)之后,我现在比以往任何时候都更加自信。这就是我,这就是我所做的事情,这就是我要去的地方。任何时候这种方法行不通,我就不想在那里,而当它行之有效时,我在公司里度过了时间。:)
模运算符的一个非常实际的用例,我确实会不时使用它,就是循环遍历一组数据,每隔 4 个项目添加一个额外的类或运行一个函数。例如,这可能对 WordPress 循环很有帮助,如果你想在每隔几篇文章之间插入一个广告。
在 :nth-child() 可靠之前,我经常在 PHP 模板中使用模运算符添加“第一个”和“最后一个”或新行类。
Fizzbuzz 不是算法谜题,算法谜题本身很有趣。它是一项测试,用来查看声称“了解 JavaScript”的人是否至少可以解决简单的乘法问题。除非问题没有得到详细解释,否则它不应该花费超过几分钟。
JavaScript 很恶心。数学不是。
我定期使用模数学。
就在上周,我用它将一个数字分成三个子组(Microsoft 决定将时间存储为一个数字,其中前两位是小时,第二位是分钟,第三位是秒)。
与 fizz-buzz 不同,但知道它可用会使解决问题更容易。
“OMG 数学”
你在那里把我弄丢了。很难产生同情。FizzBuzz 与数学有什么关系,除了加法和条件判断?(你可以使用模运算符,但它完全没有必要解决这个问题。)
也许这将有助于你在未来的工作中。
https://github.com/h5bp/Front-end-Developer-Interview-Questions
请注意,FizzBuzz 被包含在上面的问题中。祝你学习愉快!
“FizzBuzz 问题”可以在不使用 % 运算符的情况下解决。
你说得对,要有自信,你必须确定自己想在一家公司工作,如果你不喜欢他们的做事方式,你就会过得很糟糕。
Jinsib,
如果我错了,请纠正我,但我认为她并没有真正把自己定义为开发者。我认为这篇文章的要点是,对工作描述(看似以设计为主)和面试(看似以开发为主)之间缺乏一致性的沮丧。
但如果你说的是一个自称前端开发者但却不能解决类似的 JS 逻辑问题的人,我绝对同意你的观点。
这就是我为什么不把自己定义为前端开发者!我的 JS 真的很糟糕……
你并没有心怀怨恨。也许有点刻薄,但我发现刻薄是卓越的常见指标——或者至少是对牛$#!^缺乏耐心。
我认为我们需要责怪关键字嗅探简历处理软件对流行词的依赖。许多真正的独角兽都无法通过这一障碍。
至于为什么招聘经理会问 FizzBuzz??????? 无所适从。当我还是招聘经理的时候,我会让求职者解决一些常见的问题,但总是与他们预期要做的工作直接相关。
我的意思是——我会怀疑一个能脱口而出 FizzBuzz 解答的人。他们很可能
1. 有太多空闲时间
2. 接受过太多面试,被问过这个问题
3. 难以忍受地自负
4. 或以上所有。
这听起来像是弗吉尼亚州里士满所有求职申请。我见过太多公司列出类似的职位,而招聘人员根本不懂他们要招聘的技术。
FizzBuzz 有其作用,但绝对不适合普通网页开发者。如果他们想要一个从事严肃的后端工程的人,那么它是一个不错的测试方法,可以考察一个人如何逐步进行逻辑推理,但很少有网页开发工作真正需要这样的人。
在我离开上一份工作之前,我们想出了一些真实的案例设计场景(我们已经解决过的问题),并将它们提供给候选人,让他们代替我。这样我们就可以看到一个人的编码风格、解决问题的能力、注重细节和编程能力。这些才是真正重要的东西,真实的用例。
这个测试是在面试之前发送的,这样求职者就可以判断这是否适合他们。它还让我们能够提前得到一些答案,以及根据使用的解决方案提出更多新的问题。
不错,这听起来让人耳目一新。你们是怎么找到候选人的?通过职位发布,还是更多地通过你们的人脉网络?
你不适合这个角色。哇。继续前进。
前端开发是/开发/。特别是考虑到我们现在把所有垃圾都塞进了浏览器。编写代码不仅有价值,而且对于保持简洁性、效率和应用程序工作流程是必要的。如果你想做面向消费者的漂亮作品,当然可以避开 JavaScript。如果你想做任何真正/工作/的东西——学会编写代码。这与数学无关。这是解决问题。
我认为 FizzBuzz 问题在网页开发中非常适用。全栈网页开发者同时积极使用多种语言。有些人是后端开发者,有些人是前端开发者,但我们大多数人接触过大量的语言,但只精通其中几种。FizzBuzz 测试证明你对这门语言有一定的了解。恕我直言,你应该能够用你简历上的任何语言解决 FizzBuzz 问题。如果你只看过一些 Python 代码,或者可能更改了 Ruby 应用程序中的某些内容,并不意味着你“了解” Python 和 Ruby。我会说法语计数,用西班牙语点餐,但我不会把它放在简历上,因为我不精通。FizzBuff 是对编程语言熟练程度的快速测试。如果你必须查找如何解决这个问题,那也没关系,但这意味着我会付给你比能够当场解决问题的同事更低的薪水。他们已经完成了解决问题的一半,而你还在阅读第一个 Stack Overflow 答案。
点赞,Lara,我完全理解。
是的,FizzBuzz 即使对于“工程师”来说也是 BS。它应该测试逻辑思维,但它是一个奇怪而狭隘的问题。
我面试过一些人,他们可以轻松地完成类似的事情,但可以编写一个真正的系统来拯救他们的生命,反之亦然,以及介于两者之间的一切。根据我的经验,大多数编程难题与工作表现没有关系,即使是后端算法工作也是如此。
底线是,他们试图找出谁有逻辑思维能力,然而他们并没有逻辑地思考他们的测试到底测试了什么。
如果你想雇佣一个至少具备某种语言入门级知识的人,这很好,因为这非常容易,任何真正了解这门语言的人都能解决它。没有理由任何熟悉基本编程的人不能用伪代码来解决它。
“奇怪而狭隘的问题”
如果 x / 5 = 0 打印 buzz
这些评论让我做噩梦。
@John Gotti
只有 0 才会打印“buzz”。
听起来像另一家公司,他们期望一个拥有 15 年经验的网页程序员,却只愿意支付 22000 美元的年薪。
或者一家公司,其经理像一个技术知识很少甚至没有的人,试图为技术职位招聘人员,却不知道该职位真正的要求是什么。
是的,另一方面,你还有来自培训营的毕业生,他们可以勾选列表上的语言/框架,因此他们可以获得 80000 美元的职位。培训营是另一个大问题……
我最喜欢的是当他们想要 15 年的经验,而这东西只存在了 5 年。
你好。
我理解。我理解当拒绝到来并咬你的时候。这感觉并不好,但想想这样,如果你对他们在面试中问你的问题感到不舒服,那么你可能也不喜欢在那里工作。
但我们要明确一点,你会在没有看到他们画画的情况下雇佣一个画家吗?或者在没有看到他们建造的其他房子时雇佣一个房屋建造者吗?
那些必须用代码解决问题的人呢?你会在没有看到他们是否能至少用伪代码解决问题的情况下雇佣他们吗?
很长一段时间以来,我一直认为“网页开发”不是真正的开发,只是愚蠢的脚本语言。但时代变了,SPA 变得越来越普遍,随之而来的是对在比喻工具箱(或者也许是 Lara 的案例中更多钓鱼工具)中拥有更多工具的需求。
我是那些使用这类问题来筛选谁能胜任、谁不能胜任的经理之一,老实说,我不再使用 FizzBuzz 了;太多人知道它了。
几年前,当 Joel 谈到它的时候,它是一个很棒的选择。现在,我希望人们能解决更难,但仍然超级简单的问题,用伪代码或真实代码(由他们自己决定)。
但我们要明确一点,这些工具并不能说明提问者的技术知识,尽管人性会使人妖魔化任何拒绝你的人。
所以,为了结束这篇冗长的评论,就像过去许多事情一样,时代在变,你要么适应,要么灭绝。
附注:设计师工作将永远存在!只是不要认为你不必学习更多关于底层 JS/其他问题解决的知识。知道“这个问题通过使用这个 JQuery 方法来解决”是可以的,但理解原因会更好。
这篇文章说得太对了。它只需要接触到几家公司。我当时正在面试一家著名的搜索公司,该公司让我申请一个实习的技术职位,而我当时正在寻找 UX 设计职位。他们在职业博览会上找到了我。在面试之前,我从未知道我面试的职位,甚至不知道我应该参与的工作。我的面试失败了,因为我没有准备好应该谈论哪些作品集。只有当我收到拒绝邮件时,我才了解到我应该参与的产品。如果招聘是这样进行的,一个人如何展示自己的能力呢?
啊哈,我有过完全相同的经历,只是相反。职位描述是与技术/开发相关的;要求几乎没有提到设计,我觉得自己对他们要求的几乎所有东西都很熟练。即使在面试中,招聘经理也对我的背景和信心印象深刻,认为我能对他们的小团队流程做出重大改进。
但后来他们要求我提供一些设计模型。我坦诚地告诉他们,图形设计不是我最喜欢做的事情——我喜欢处理图形,但讨厌设计 UI 的来回性质,更不用说空白页综合征了。突然间,他开始紧张起来,好像那是一个无法接受的条件,尽管工作描述中从未提到设计。
我的经验是,优秀的开发者很少擅长设计,反之亦然。(我认为这是左右脑的事情……我可能错了,但这只是我的经验。)我从心理上过滤掉了所有标题中有“设计师”字样的工作。那次面试真的让我很沮丧,因为一直都进行得很好,直到他们突然抛出这个重磅炸弹。
……而且我同意你关于“PHP 和 Ruby 不是前端”的观点……如果它指的是后端模板,我无所谓,但当涉及到业务逻辑时,这显然是后端。(我也有点认为后端开发者往往会做出糟糕的前端,反之亦然,但我见过一些例外。)
哦,天哪。过去 5 年,我一直过着这样的生活,完全一样。我大部分时间已经习惯了。但我担心的是,那些每周给我打来电话提供新线索的招聘人员。我一直在告诉他们不行,因为我可以看出他们在寻找后端编程,尽管工作描述中只是略微提到了这一点。招聘人员一定对我感到厌烦了。但每次他们说服我去面试,结果都证明我是对的。
顺便说一下,你引用的那些工作描述?它们都一样。到处都是。这……太疯狂了。他们想要一个能做所有事情的人。因为他们不知道更好的方法。
很棒的帖子。上周就发生在我身上。我正在面试一个前端 HTML/CSS 的职位,他们问我一个‘八个球问题’。
我回答了这个问题,但我认为我应该采取你的方法,直接回答“你为什么要问我这个问题?”就像你描述的那样,工作描述中没有迹象表明需要算法或“工程”。事实上,正好相反。当我提到我对 JavaScript 和 Ruby 的了解,以及我在 CodeEval、HackerRank 等网站上参与并取得了高分时,他们似乎认为这些东西与这份工作无关,甚至是一种负担。
我想面试官一定读过一篇关于“如何进行面试”的文章,文章中说“问八个球问题”,他只是严格按照建议来做的。真的很烦人。
我会立即走掉,不会回头。
顺便说一下,我是一个物理/数学专业的毕业生,除非你最近学习了一些抽象代数,否则你将完全迷失。
为了 fizzbuzz?!任何上过 CS161(大学级别的第一门编程课)的人,或者在任何在线资源上学习过循环和 if/else 的人,都可以轻松解决 FizzBuzz 问题。最多一个星期就能从任何语言中学到足以解决它的知识,即使它是你的第一门语言。如果你没有技术素养,可能需要更长的时间,但如果你不知道计算机和显示器之间的区别,你就不应该申请需要 JS 的工程职位!
这绝对是错误的。(来源:我拥有数学博士学位,并在抽象代数领域进行了研究。)
一个物理/数学专业的毕业生竟然把这叫做“抽象代数”?
你最好重新考虑学习数学和物理的决定,因为如果你不能轻松地理解这里的基本概念,你以后会遇到很多麻烦。
因为物理会变得非常复杂……很快!量子物理学中的 bra-ket 符号就是一个例子。微分方程(数值和解析)、复环积分和张量微积分。这些只是涉及到的数学的一部分,物理概念就建立在这些数学基础之上。
(直到我向朋友讲述了这段对话后,我才意识到在面试中不应该问“为什么要问这个问题?”)
完全不同意。记住,你参加的任何面试都是你面试他们,问“你为什么要问我这个问题”是一个很好的工具,可以深入了解你的工作描述将实际包含什么内容。
我的经验:几年前,我面试了一个“HTML5 前端开发者”的职位。工作描述列出了所有最先进的技术,每个开发者都希望用这些技术工作。快进到面试阶段,在技术部分,他们递给我一张纸,让我用手写出基于 CSS 的下拉菜单的代码,该菜单可以在 IE 6 中运行。
“你为什么要问我这个问题?这是否意味着我将在这个职位上做这种类型的工作?”
当面试官说是的时,我礼貌地感谢他抽出时间,然后起身离开。我不想构建兼容 IE 6 的 CSS,谢谢。
能够解决巧妙的谜题是浪费时间来评估工作准备情况。对于许多雇主来说,这似乎是他们在网上阅读到的用来筛选“假”或“坏”申请人的新奇技巧。它就像面试问题“你想成为哪种动物,为什么?”一样有用。(是的,这个问题仍然被问到。)测试我对工作中要执行的任务;这对我们双方都更有帮助。
至于无所不能的神秘独角兽:我想知道这是否更多地是因为薪资限制(用一个人代替二到三个人)、对设计师/开发者如何工作缺乏了解(所有工作都在电脑上进行,都涉及网页内容!)、或者假设我们做的事情总是有趣且容易,所以我们能神奇地完成所有这些任务(计算机完成所有困难的部分)。我遇到过属于所有这些类型的客户。
如果那些公司设法找到了这样的独角兽,要么拥有这种技能的人一定超出他们的预算,要么善于伪装自己的才华。
对于开发人员职位,不可能测试你将在工作中做的事情。这些事情需要大量的上下文:最终用户想要什么以及他们为什么要它,你在哪些技术限制下运行,部署架构,你必须处理的任何遗留代码,团队其他成员为项目设定的样式和架构指南。
这是一份主要包含设计师任务的工作,并且需要一点编程。FizzBuzz 代表的编程量并不不合理,不是一个“巧妙的谜题”,要求一点其他领域的知识并不意味着在寻找独角兽。这是一些简单的逻辑(如果你仔细想想,甚至不是数学),任何具有基本编程经验的人都可以回答。以下是真实开发人员职位面试中会问的一些问题:
http://ayende.com/blog/163394/new-interview-question
http://ayende.com/blog/168066/interview-questions-large-text-viewer
http://ayende.com/blog/163361/evil-interview-questions-unique-random-c
这并不是说作者在她所做的事情上没有极高的天赋!她只是没有公司想要的东西(这再次听起来并不荒谬)。当他们礼貌地处理了这种情况(面试官没有嘲笑或让她难堪,他甚至让她通过电子邮件提交,以防只是面试紧张,而且他礼貌地告诉她他不认为她适合这个职位)她写了一篇博客文章,试图把他们描绘成坏人。
FizzBuzz 不是一个巧妙的谜题。它的存在是为了筛选出完全不会编程的人。因此,它非常有用。
它无法告诉面试官你是否比初学者更厉害,但至少可以告诉你他们具有一些初学者知识。
这是最简单的编程问题之一。如果你不能不借助谷歌就解决 FizzBuzz 问题,那你就不是一个“程序员”。
我经历过。太糟糕了。
我参加过一次面试,他们要我在两天内构建一个完整的原型。我拼命工作才完成,我利用了一个 jQuery 库来帮助布局。
在代码审查中,他们要我解释该 JavaScript 库用于创建布局的数学公式。如果我知道的话,我就不会一开始就使用库了。
重点是,即使你可以在 Stack Overflow 上找到解决方案,这些人期望你能解释代码的每一个细节,从分号到最后。
了解代码(甚至 CPU)的工作原理是一项非常棒的技能。非常有用。
有一个用例。
制作一个表格,每隔一行使用不同的颜色。
nth-child 打电话了;它希望你停止显式地使用交替类。
@Fiskie
我的公司打电话了;他们要我支持 IE8。现在怎么办?
n-th child 不是“设计的 FizzBuzz”。如果你像熟悉自己手掌一样熟悉所有 CSS 2.1 和 CSS3 选择器,那么你可能是一位优秀的 设计师——或者至少精通标记语言。
FizzBuzz 是一个基本的编程测试,所以等价物将是一个基本的 CSS 测试,例如使用简单的选择器更改常用属性、向元素添加类等等。
抱歉,Lara,我非常不同意你的观点。这篇文章中几乎所有观点都过于肯定或有偏见。我理解这篇文章是一篇长篇吐槽,但如果我尝试提供一些建设性的批评,我希望你不要感到冒犯。让我们从头开始
你提到了 JavaScript 和前端开发。如果你要进行开发,至少需要了解编程。我们都知道,开发不仅仅是这些,因为编程只是一个工具……但如果你想自己开发一些东西,你需要它(加上算法)。此外,JavaScript 是一种编程语言,它是图灵完备的。因此,如果你使用 JavaScript,你就是在编程(或者应该编程)。
我不确定你在讨论“S”部分还是“B”部分,但我可以告诉你(至少在我的国家),有几个设计学士学位(传媒设计、工业产品设计等),这些学位是在理工大学授予的。这有什么奇怪的吗?
再说一遍,JavaScript 是一种编程语言。如果一个职位描述要求你拥有汽车,他们不需要指定你应该拥有驾驶执照。要驾驶汽车,你需要知道如何驾驶。
这不是编程工作,而是一份需要你了解编程的设计工作。只要你想使用比标记语言更高级的东西,前端网页开发和设计都需要编程。
我的观点是,正如你所写,你应该拒绝申请,因为这是一份需要编程技能的工作(这一点相当明显)。招聘广告通常过于模糊,这并非借口:事实上,它们通常要求你什么都能做:编程、设计、打扫地板……:P 好吧,我现在在开玩笑,但他们通常列出许多必备技能,并非没有提到编程,而是提到了。
还有一件事……
你引用的招聘广告中确实用大写的 P 提到了 WordPress。
“S”代表科学。设计是一门科学,但不是那种科学。
@Lazza –
是的,我刚刚注意到 P 的问题,这是因为capital_P_dangit。那些狡猾的 WP 人。
欢迎批评!一些想法
当然,但这就是问题所在,对吧?一份需要你了解编程的设计工作?还是一份需要你进行设计的编程工作?我非常赞成缩小设计和开发之间的差距,但让我们现实一点。
是的,JS 肯定是一种编程语言,但使用 jQuery 等工具,完全可以不用“编程”就编写 JS。这对行业来说非常棒——它让我们这些混合型设计师/开发者能够利用这种语言。
所以,我完全理解你的观点,但鉴于我们使用 JS 的方式多种多样,因此需要更清晰的说明。
我认为更准确的比喻是,设计汽车的内饰或外观并不意味着你需要知道如何制造发动机。你应该了解发动机的工作原理,但不需要精通燃油喷射技术。
抱歉,我不得不回复我自己,因为网站只允许一层嵌套评论。:P
Zoe,如果你在理工大学学习,你不会获得硕士学位(或者用英语来说,在艺术学校获得的东西),你将获得理学学士学位。我们可以讨论是否适合在理工大学中加入设计(我认为没问题),但那是另外一个话题。
当我们编写 Jquery 代码时,大部分代码都是基于
$
,它是 JQuery 对象的一个实例。此外,它是一种面向对象的范式,鼓励方法链,这也属于编程。:)老实说,我认为你的比喻不准确,因为 JavaScript 编程是前端工作不可或缺的一部分,而发动机制造并非汽车设计的一部分。
准确地说,我并不是在争论你给出的招聘广告示例模糊不清。它们确实如此。但很明显,你需要编程一些东西。什么、如何以及为什么……这些都完全不清楚。:)
这似乎是关于一个不明确的职位要求,如果我以为自己是在面试一个纯粹的开发职位,结果却要回答有关设计的问题,我会非常惊讶。
然而,有些人似乎嘲笑 FizzBuzz 作为一种测试,我认为这是错误的。我通常反对面试中的“巧妙”谜题,比如著名的“为什么井盖是圆的”之类的问题。
但从编程的角度来看,FizzBuzz 对于开发者来说应该非常简单。它更像是把 3 种不同的流行字体放在设计师面前,让他们识别出来。我理解如果你来自不同的背景,可能会感到沮丧;但 FizzBuzz 的重点之一是它不是一个技巧,所有开发者都应该能够做到(你也不必使用取模运算符)。
如果有人口头问过我这个问题,我可能会感到迷茫和困惑。
但如果这个问题是写下来的(纸上或屏幕上),我会在 3 秒内知道答案。
我戴着工程师的眼镜:命令式编程可能会激发你提出非常不同的方法和解决方案。
我刚读完一篇来自Jakob Jenkov的文章,他是教我 SVG 编程的人,他在网上有很多优秀的教程。我认为他试图说明这一点,即如果你选择一种命令式语言,你仍然可以进行声明式编程。
也许声明式编程更适合创建很棒的外观,而命令式编程更适合实现行为(针对用户、服务器、运行时环境)。但为了做出理性的选择,你应该理解它们,即能够以两种方式提供解决方案。
我担心糟糕的职位描述反映出面试官不知道他们需要什么。
加油,Lara!
我经营着一家小型企业。有一次我决定雇人来帮助我,我不得不写一个招聘广告/职位描述。我不知道从哪里开始,所以我查阅了数十个类似职位,选出了我最喜欢的几个,然后按照同样的模式进行。结果就是一个典型的招聘广告,包含了你提到的所有缺陷。下次我会加入你的一些想法。感谢你的建议!
从另一个角度来看,我会说很多 IT 人员的简历很差。员工很容易陷入同样的陷阱,只列出他们知道的东西——“我擅长 CSS/JS/PHP”或类似内容。我个人更希望看到更多关于经验的信息——你做过的最佳项目,你单独完成的项目和团队合作的项目,你在每个项目中的角色,你完成的任务,你遇到的挑战以及你如何克服这些挑战,如果你在 web 上做过前端工作,请提供截图和 URL(这样我就可以打开这些网站并评估最终结果的设计、编码技能、逻辑、优化等,并了解你的优势和劣势,甚至在面试开始之前)。如果项目因隐私或其他原因难以列出,请省略项目标题、URL 和截图,但仍提供一些匿名信息,说明你做了什么。
此外,擅长设计、前端开发和后端开发的人确实存在……但他们非常罕见。
你说“我会使用 jQuery”,但你却无法编写一个简单的 JavaScript 程序,它只使用
for
和if/else
。我真的很怀疑你是否真的会使用 jQuery。现在,Lara,你如何找到所有 Pedro 的评论,并为它们设置不同的颜色(就像表格中的奇偶行使用不同的颜色)?
@Steven Luu 使用 css ;)
@Gijs
你无法用 CSS 做到这一点。
你无法通过内容选择项目
即使你可以,你也无法选择祖先,因此你无法为包含评论作者“Pedro”的评论设置样式
即使你可以,你也无法使用 nth-* 来只为 Pedro 的评论设置条纹,而不会为整个评论部分设置条纹
你必须在 JavaScript 或模板中使用 FizzBuzz 风格的算法。
我有限的经验表明,工作描述要求比实际所需的多,但实际面试涵盖的内容要少得多。也许只是针对技术性更强的工作,我不知道。
另外,有点无关紧要,但关于奇怪的工作描述的一个技巧是:如果你看到的只是一般的工作头衔和(拼写错误的)流行语,请查看发布该信息的“公司”;通常,它是一个第三方招聘机构,你看到的不是一份真正的工作。不要上当!
https://www.brandonsavage.net/why-recruiters-are-bad-for-your-career/
我不知道,工作描述似乎很清楚地表明他们正在寻找一名程序员。他们提到了计算机科学学位,也提到了 JavaScript。在我看来,这并不含糊。他们甚至提到他们更倾向于有面向对象设计和几个 JavaScript MVC 框架经验的候选人。我不确定如何才能对工作描述进行其他解释。很明显,他们正在寻找一名程序员。
所以他们用一些问题进行面试,以了解求职者是否了解一些基本的 JavaScript 编程,而你并不了解基本的 JavaScript 编程。因此,你不适合他们寻找的人才。在我看来,这很有道理。这就是 FizzBuzz 练习的本质。它确实很好地揭示了这个人是否是一名程序员。
不过,你可以学习所有这些东西!不要因为这个职位不适合你而感到沮丧。你不是冒名顶替者,你只是一个还没有学习 JavaScript 的设计师。我相信如果你坚持下去,你就能学习一些基本的编程技能。
说实话,你只是没有清楚地阅读工作头衔,它具备了至少需要基本编程经验的工作的所有特征,而且对于描述来说,当他们将非 CS 学位列为选项时,他们希望你拥有与 CS 主题相关的非学位经验,反之亦然,如果你的学位或工作相关的历史是 CS 相关的。
你只需要一点 JS 经验就可以解决 FizzBuzz 问题,你只需要了解基本的数学运算符以及如何进行循环即可解决,这非常简单。
你在阅读工作申请时犯了一个错误,承认错误,下次做好准备,但抱怨真的没有必要。
工作头衔写着“UX 工程师”,描述中的第三个要求是“JavaScript 框架”……最好至少准备好展示你对
mod
的理解。太懒了,不想看评论,所以有人可能已经指出过这一点,但计算机科学家会学习 UX/交互设计,它在很大程度上是该领域的一部分。
我不是合格的培训师,但我教过一群 14 岁的孩子 6 小时的 JS,并让他们自己做了一个 FizzBuzz 的变种。他们都知道怎么做。
当然,除非你说 UI 设计师不需要了解 JavaScript 中的 for 循环,这肯定会限制你的能力。
说真的,如果你不能快速轻松地解决 FizzBuzz,你最好不要申请涉及编程的职位。你会在工作中经常感到沮丧,这是肯定的。即使是网络管理也有些勉强。如果只是设计,也就是说,如果其他人负责实现,那么设计是可以的。但如果职位要求你了解 JavaScript,那就涉及一些实现。
FizzBuzz 测试存在很多问题,我个人不会使用或推荐它;但太难或涉及太多数学运算并非其中问题。它基本上只是检查你是否理解 if/then/else 原理,我不明白如何在没有这个原理的情况下编写 JavaScript 或任何其他编程语言中最简单的 UI 代码。举例来说,每次编写代码来切换 UI 元素的展开/折叠状态时,都会使用条件语句,因为你检查它当前是否展开以决定执行哪一项操作。
“前端”是那些对不同的人意味着不同的事物的词语之一。在我现在的公司,ruby 一定会被视为前端,因为我们的主机和大量的 COBOL 程序员是后端。在另一家公司,浏览器是前端,而 web 服务器是后端。在另外一家公司,浏览器和 web 服务器可能是前端,而 oracle 数据库、触发器和存储过程是后端。
两件事
这就是为什么我在一段时间前从我的头衔中删除了“前端开发人员”。基本上,如果我们不了解 JavaScript,我们就不能称自己为前端开发人员。了解 JS 在该领域是强制性的。
真实故事
我是一名网页设计师,一段时间前,有人向我推荐了一份工作描述,上面列出了
要求
精通 RWD 和移动端 – 符合!1 分
愿意自学新科目,并有很强的学习新事物的动力 – 符合!1 分
对 CSS、HTML 和 JavaScript 有很好的理解 – 伪符合!0.75 分
精通 Photoshop 或其他任何设计工具 – 符合!1 分
精通比例、色彩理论和排版 – 符合!1 分
期望的(虽然不是必需的)(注意“不是必需的”部分:])
精通项目管理和敏捷开发 – 符合!1 分
熟悉 Angularjs、Emberjs 和其他 JavaScript MVC 框架 – 不符合!0 分
具备数据可视化的良好技能 – 符合!1 分
我不是 JavaScript 程序员,但我符合 99% 的要求:5 分中的 4.75 分(还不错),这就是他们寻找的人才。并且符合 66% 的“期望”技能,3 分中的 2 分,再次强调,我不是 JavaScript 程序员。
总的来说,我符合 8 分中的 6.75 分,即 84% 以上。但是,请记住,这一切都是关于要求(我符合 99%),而不是期望列表。
然后他们问我:“你觉得你对学习 Angularjs 有兴趣吗?”
¬¬,FFS。
ROFL!
我不明白你为什么表现得很生气。是的,你阅读了工作描述,但你没有理解它。
也许“网页设计师”对“期望”的定义不同,但对我来说,很明显,“期望”并不意味着“可选”。
“期望”意味着“如果你已经了解我们公司使用的特定技术,那就太好了,但如果你不了解,我们希望你在工作中学习它们”。
很高兴你用百分比让自己感觉好一点,但说实话:你没有通过公司在广告中提到的唯一一项硬性技能要求。
兄弟,我必须再读一遍:期望的(但不是必需的)。
“不是必需的” == 可选。放下你的自尊心。
我没有通过 JavaScript 部分,但这并不是重点。重点是我几乎符合所有“必需”要求;}。另外还符合大多数“期望的(但不是必需的)”要求。
我也感到痛苦,看到一个程序员的自尊心在作祟,真是痛心!哈哈。
……问题在哪?他们没有要求你了解 AngularJS,他们只是问你是否愿意学习它。
够了。
我认为你没有理解 FizzBuzz 测试的概念和背后的原因。它超出了模运算和算法的范畴。它是一个简单的测试,旨在评估一个人在使用迭代和逻辑方面的能力。
在阅读你的抱怨后,我能给你的唯一建议是,你真的应该花时间学习一些基本的编程概念。相信我,这很值得。
例如,当使用样式表时,SCSS 是许多设计师的首选工具。与任何 CSS 预处理器一样,你越深入其中,在代码中使用的逻辑就越多。
哦,为了以后参考,这里有一个 JavaScript 和 SCSS 中的 FizzBuzz 示例。
http://jsbin.com/gojulonela/1/edit?js,console,css,output
祝你好运。
你应该学习更多编程和逻辑。你可以做到,你一直都在处理同样复杂的概念性事物。这将为你提供另一个提高报酬的理由!
Reddit 在一片自我吹嘘的狂热中对你进行了猛烈抨击,但我将逆流而行,同意这是一个不合理的工作描述。
我是一个非常熟练的 JavaScript 程序员,我不会碰那个职位。我会得到相同的印象:它主要关于设计,并带有一些 JavaScript。作为一个 JavaScript 程序员,而不是设计师,我希望每天上班时编写 NodeJS 或进行 HTML5 Canvas 游戏开发。
我不明白的是,他们到底期望找到谁?什么类型的“真正程序员”会想要那个职位?当然,你可能会找到极少数同时是优秀艺术家和非凡程序员的超人,但更有可能你会找到一个人在一个方面平庸,另一个方面平庸,或者两个方面都平庸。
如果他们的要求确实需要前端的优秀设计和优秀编程,那么他们应该雇佣两个不同的人,并有一个有效的流程让他们能够很好地协作。如果他们想要一个能做一些 JavaScript 的优秀设计师,他们应该直接雇佣你并培训你。如果你已经可以将 JQuery 调用串联起来并理解回调,那么培训你实现更多逻辑并不是一个巨大的飞跃。
我不同意说要求 CS 学位和 Angular/Ember/等方面的经验能使他们的意图明确。只要有一点编程的暗示,每个人都会要求 CS 学位。招聘信息会把各种东西都扔到墙上看看什么会粘住。这就像说你想要和一个身高 6 英尺 4 英寸、毕业于常春藤盟校、肌肉发达、银行账户充裕的人约会。当然,你希望如此,但最终你会选择一个身高 5 英尺 10 英寸、啤酒肚、幽默感很好的人。
虽然我同意这个招聘信息自相矛盾且草率,但他们特别列出了他们想要一名“工程师”和一名“开发人员”,这意味着他们想要一个程序员。这些词语的意思没有歧义。因此,除非你打算申请一份工作,希望发布招聘信息的人对工作内容的理解是错误的,否则你真的没有理由抱怨。最终,这个人尽管招聘信息很草率,并且尽管他们自己不具备招聘信息中列出的资格,但还是申请了这份工作。是谁的错导致他们面试表现不好呢?
作为一名在专业游戏开发中做 UI 的人(我是一名工程师,基本上会做所有 UI),我必须非常熟悉设计的许多方面(但不是颜色理论等),但我确实必须能够有效地使用 Photoshop、批处理作业等。我接受设计并实现它们,但我必须了解围栏另一边的某些东西。FizzBuzz 是你在面试中可能遇到的最简单的编程问题之一(我也见过写 for 循环之类的东西,但... 嗯,太简单了)。
老实说,我永远不会雇用任何人从事游戏开发中的任何工作(除非他们做纯粹的设计或艺术),除非他们能够做 FizzBuzz。我已经从一些技术美术师那里得到了足够的挫败感,他们创建了 Flash 文件,然后我将其导入我们的游戏。我需要增加工作量来弥补他们的不足。
这个职位名称/工作要求似乎没有得到妥善传达,但职位名称中确实提到了“工程师”。传统意义上的工程师是 EE/ME 专业人士,他们拥有大量的数学背景。布尔逻辑和逻辑运算符在许多游戏开发中至关重要。面向对象编程也是如此。你真的需要经常做它才能理解它,否则你总是用刚好够上吊的绳子。
感觉他们过分强调了 UX/UI 部分,只是为了用编程问题来刁难你。他们可能试图两头兼顾,找到一个同时拥有两方面技能的人,但不支付相应的薪酬。
补充一点,我认为所有“真正的编程”内容都列在了首选资格中,这一点很重要。这向我传达了他们首先想要一个优秀的设计师,如果你也是一个优秀的程序员,那么他们最疯狂的幻想就会成真。和你一样,我认为一些 JQuery 技能以及自学的能力足以成为该角色的有力候选人(假设你是一个优秀的设计师)。
在面试过程中,他们似乎忘记了需求和想要的东西之间的区别。
如果你有一个数字列表,你可以在 CSS3 中做 FizzBuzz。
http://www.boogdesign.com/b2evo/index.php/fizzbuzz-in-css3?blog=2
抱歉,但对于一个提到了你需要精通 JavaScript 和(最好是)Angular 及其他 JS 框架的招聘信息来说,一个简单的编程练习不应该完全出乎意料。
正如其他人提到的,FizzBuzz 不应该是一个“现实世界”的挑战。它是为了看看你是否能够在给定的编程或脚本语言中使用简单的算术运算符和循环。如果你至少没有这种程度的熟悉程度,你就不会知道 JavaScript(或 Python 或 PHP 或任何其他语言)。我不是一个优秀的开发人员(一些大学课程,然后转专业,以及一些自学的东西),但我可以用我使用的任何语言做 FizzBuzz。
阅读职位名称,他们正在寻找两个不同的人。
至少对我来说,他们没有明确说明他们想要一名设计师还是一名工程师。
如果他们专注于一件事会更好。
“我们正在寻找一个对工程有强烈态度的设计师。”或“我们正在寻找一个精通设计的工程师。”
多年来,我认识到“设计师”一词的误用。
设计师解决视觉传达中的问题,至少这就是我多年前学习的。(也许我们在德国使用“设计师”一词的语境不同)
它说“有经验”。我们都经历过(使用过)技术……他们在寻找比这更多的东西。末尾的“ed”有区别。
此外,你发布的另一个招聘信息清楚地要求你拥有“JavaScript 框架”的经验。这意味着 MVC、路由、语法等。
“你不知道你不知道什么”,但这篇文章让你听起来像你真的不知道自己在做什么。我怀疑会有很多开发人员同情你的观点。
我是全栈开发人员。我每天都在使用 CSS、HTML、JS 和许多其他语言。我不是设计师,但我可以应付突发情况。
我认为除了构建设计文档或 Photoshop 中的布局之外,任何 Web 开发都应该相当熟悉 JavaScript。网站的许多更具互动性的元素有时需要相当复杂的代码。尤其是在 5-10 年前,在我们拥有 CSS3 的许多更强大的功能之前。
我知道作为一名主要的程序员,我会有点偏见,但 FizzBuzz 并不是一个很难解决的问题,虽然它没有太多实际用途,但它展示了一个具有不同状态的简单难题,而构建网站会一直提供这样的难题。
顺便说一下,这篇文章今天在我 Twitter 上的动态消息中出现了,大约在我阅读这篇文章的前一两个小时;一个纯 CSS 实现的 FizzBuzz。
http://jsfiddle.net/e9y4rsue/1
抱歉,但面试官在职位描述中提到了 JavaScript 的情况下,在面试中加入一个基本的编程问题是完全正确的。
你可能拥有一套独特的技能,因此需要在你的简历/申请中以一种独特的方式突出它们。尝试简单地说明你做什么以及你如何增值,以避免未来的误解。尝试从面试官的角度考虑问题——他期望你的优秀技能加上一名程序员——你错过了让他相信,即使没有编程,你仍然是一个很棒的选择的机会!
这里有很多不同的讨论。
当然,开发人员应该知道 FizzBuzz,但这也会走得太远了。
https://blog.svpino.com/2015/05/07/five-programming-problems-every-software-engineer-should-be-able-to-solve-in-less-than-1-hour
反应
我的看法
http://codepen.io/sakri/pen/MwKyeG
这是一个团队,不知道如何做 FizzBuzz?问问团队中会做的人。
数学方面?我妻子有一个糟糕的数学老师,他明确地告诉她数学不好。她受到了创伤,相信了他,直到我慢慢地让她摆脱了这种想法。任何人都可以做数学,但不是每个人都能教数学。
招聘是一门艺术,就像数学老师一样,有好的招聘人员,也有不好的招聘人员。时间就是金钱,所以不幸的是,像 FizzBuzz 和学位要求这样的过滤器经常被使用。
抱歉,但我要不同意你的观点。请不要把它看作是对你的个人攻击。我对设计了解不多,我相信你创建了美丽且易于使用的网站。更重要的是,我认为你是一个很棒的人,因为你在公开帖子中写下了自己在面试中无法完成一个简单任务的事——大多数人甚至会对此感到尴尬而羞于启齿。这需要很大的勇气和坦诚,而一个人身上的这些品质比编程能力更重要。
FizzBuzz 不是一个“程序员”测试。它是一个测试你是否理解最基本的编程概念的测试。即使这份工作主要是关于设计的,而这个人只需要偶尔编写一些 jQuery,我仍然会使用 FizzBuzz 作为面试前的测试,以筛选出明显不合格的候选人。
FizzBuzz 测试非常简单;它的核心在于,如果你不能通过它,你就根本不应该在商业代码库中编写代码。FizzBuzz 测试的是对最基本控制结构的理解:循环、条件语句和基本数学运算符。仅此而已。如果有人无法通过 FizzBuzz 测试,这意味着他编写的代码会让代码库变得显著地**更差**。这不仅仅是生产力低下的问题;而是**负面**生产力的问题。抱歉,但你编写的 JS 代码很有可能在将来会给团队中的其他开发人员带来更多工作。
因此,对于像你这样优秀的设计师来说,最好的做法可能是直接告诉人力资源人员,你能阅读代码,但你不太习惯编写代码。
我完全理解。
问题在于,许多职位描述仍然将 CSS(SASS/LESS)和 HTML 与 JavaScript 归为一类。这在 6 或 8 年前可能还说得通,但如今,你真正需要的是一个做 UX/UI 的人(我称自己为“前端 UX 设计师”),他拥有你所具有的**恰好**的技能,以及一个 JavaScript 开发人员(程序员),他处理包括你提到的 FizzBuzz 问题在内的所有其他事项。
过去,你可以有只做 Photoshop 的“网页设计师”,以及根据静态设计创建网站的前端开发人员,该设计可以完美地像素匹配 IE 6(谢天谢地,那些日子已经过去了),现在,你当然可以有一个 UX 设计师,他使用原子设计、SASS、HTML5、响应式设计、Photoshop、网络字体等创建模板,以及一个 JS 开发人员,他负责所有编程工作。
我个人已经完全放弃了 JS,并开始专注于 UX 和 UI 设计,作为自由职业者。但如果有人可以做到所有这些,那他们就更有能力了。
简单,直接用 CSS 解决 FizzBuzz! http://codepen.io/SachaG/pen/jCpba :)
我以前也经历过 :-D,我曾经面试过一个 C++ 职位,从一开始我就告诉招聘人员,“我对这个领域一无所知”,他的回答很清楚,“没问题,这不是硬性要求”,在成功完成 3 次 Skype 面试后,我不得不去公司进行一次面试,经过 4 个小时的路程,到达了这座城市…… 面试主要集中在那项我并不了解的技术上…… 真的…… 招聘人员应该考虑他们的方法,好吧,在那之后我找到了一份更好的工作,所以,因果报应有时会起作用。
哇,这篇帖子以及很多评论真的让人很沮丧。
首先,当面试官要求你解决一个逻辑难题(FizzBuzz 就是最基本的难题)时,他们会关注两件事:
1) 他们想知道你的思维过程以及你是如何解决问题的。“她如何提出问题?她从哪里开始?她最常用的方法是什么?”
2) 他们想知道你能否清晰地**表达**你的想法。一步一步地向他们解释,让他们知道你的计划,并阐明每一步。
如果你能做到这两点,并且充满自信,同时具备一定的能力,那么即使你无法完全完成它或卡在某个难点上,他们很有可能也会对你感到满意。
也就是说,你如何期望成为一名“UX 工程师”,却不会编写代码和使用基本逻辑?我是一名前端/UI 开发人员。我不做后端工作,我永远不会把自己称为工程师或软件开发人员,我也不知道后端语言。我是一名典型的具有典型技能集的前端开发人员。我的整个工作就是获取 API 传递的对象并在我们的 Web 应用程序中显示它们,全部在前端完成。如果我不会使用递归,我一天都无法在工作中生存。你如何期望在不使用 JS 的情况下设计 UI?像获取数据集并根据两个属性进行布局这样简单的事情,需要与 FizzBuzz 相同的知识(甚至更多)。此外,你在你的回复中链接了 StackOverflow 的答案?如果你不仅不能自己完成 FizzBuzz,甚至无法通过研究以不同的方式完成它,以表明你确实认真思考过,你怎么可能认为这会得到除了“不”之外的答案呢?
我想指出,在面试中处于超出自己能力范围的情况并没有什么错。在我大学毕业后在第一份网页设计职位工作,意识到我想成为一名前端/UI 开发人员而不是设计师之后,我经历了许多次第一轮面试和面对面的面试失败,还经历了一年的自学和糟糕的个人项目,然后我才准备好在实际获得一份开发人员的工作并成功地留任。如果你不是计算机科学专业,你就必须自己学习。人们每天都在经历你所经历的事情,但他们并没有发布冗长的抱怨并推卸责任,而是回去学习导致他们遇到问题的技能。你能理解为什么人们对此不予重视吗?听着,每个人在遇到困难时都会使用 StackOverflow 或 Google 搜索,但如果你连像 FizzBuzz 这样基本的事情都无法独立完成,那么你就没有资格,你只会造成更多损害。你将感到力不从心,很不自在,而你所在的公司也会因为有你而受到伤害。面试就是为了评估你是否具备胜任工作所需的技能。
其次,如果你想成为一名设计师,那很棒。网页设计是一份很棒的工作,很多机构都需要它,而且你可以整天编写 HTML/CSS 和设计。如果你想制作原型和演示,申请 UI 设计师职位,你可以使用相同的技能和你的 UI 方面的专业知识。当我努力成为一名优秀的代码编写者以获得开发人员工作时,我就这样做了,而且这份工作很有趣,也很有成就感,即使它不是我个人想永远做的事情。
“好吧,说实话,我对 JS 的了解更多的是关于基于 UI/UX 的任务。我真的不明白这个问题的意义。比如,用例是什么?这在工作中会用到吗?”
这部分让我开始对你的同情心减少了,即使我最初对你所处的尴尬境地感同身受,因为我在一年前也处于同样的境地。FizzBuzz 的用例是什么?基于 UI/UX 的任务!不过,这几乎无关紧要,因为如果有人在我展示了自己在该领域缺乏经验的同时,还对我那样讽刺,我会毫不犹豫地直接说“不”。我能想到的是,在一个新的项目中使用我们以前从未用过的语言或框架,然后你说“为什么我应该知道如何做?这不是我的工作描述的一部分”。
第三(这更针对评论而不是文章),我在文章和一些评论中看到的“独角兽”现象,指的是那些既了解 UI/设计原理,又精通 JS 和 Ruby 等脚本语言的人,这实在是荒谬,而且说实话,有点让人悲伤。JS 和 Ruby 绝对适用于前端,特别是如果你正在处理 UI,而不仅仅是设计。
我个人并不关心你想给自己取什么职位名称,尤其是在像网页开发这样奇特的多领域行业中。如果你想,可以把自己称为“超级火箭动力不可思议的网络工程师”。问题是,所有想把自己称为开发人员的人(这很好!每个人都可以把自己称为开发人员,这没关系),都想凭借只掌握设计、标记和样式的知识来申请开发职位,然后又不愿意学习所需的技能。
总结一下,我想重复一下,我对你在一次艰难的面试中遇到你不太确定的问题表示同情。我经历过这种事情,这真的很糟糕。这让你感觉自己不够格,这在潜在的工作场所是最糟糕的感觉。这只是最糟糕的应对方式。
似曾相识!
这种“面试”和职位描述在我的国家很常见。即使你既擅长设计又擅长开发(JS),他们也会给你开很少的工资。
大多数面试官都很忙,他们忙着证明自己比候选人更优秀。
我也来自印度,如果有人让我解决像 FizzBuzz 这样的问题,我会做到的。因为:
职位要求中提到了关于 JavaScript 框架的内容。
我已经说过我对 JS 和框架有一些了解。
我不是个混蛋。
但这只是我的看法,而且我们的国家充斥着不学无术的经理。
网上有一些 FizzBuzz 解决方案需要一些数学知识,从“模运算”(基本上是“除法后的余数”)开始,一直到一些真正深奥的东西,如果你喜欢这种东西,它们会很有趣,但如果你希望其他人维护你的代码,你可能永远不会在公司中使用它们,但如果一个人无法用至少一种语言实现 FizzBuzz,那么他就不能在简历上提及这种语言,也不能申请需要这种语言的工作。
我认为这是最直接的方法。它可能不像其他解决方案那样“优雅”,但它可以完成工作,除非你在代码中发现了一个瓶颈,否则这并不重要。
希望这段极其简单的代码能够帮助你未来的工作。
注意:我没有从 StackOverflow 获取这段代码。
那么,如果你被问到这个问题而不是 FizzBuzz 会怎样:“我们有两个 CSS 类需要添加到表格 DOM 对象中的表格行元素中:一个添加到每隔 3 行,另一个添加到每隔 5 行——你如何在 JavaScript 中实现?”
我认为这是你的错误,精通 jQuery 并不等于精通 JavaScript。
我同意的是,从广告上看,这家公司似乎在寻找一个无所不能的人。在我工作过的公司,我从未见过同一个人同时做图形设计和开发,我对一家要求如此广泛知识的公司没有好感。
我被问到这个问题,我措手不及,但我把它看作是一个挑战。
我能够得到答案,但他们真正测试的是我的思维过程。我刻意大声思考,我通常不会那样做。
面试更像是“展示”,而不是实际任务。我总是推销自己,在我擅长的领域夸大其词,而在我不熟悉的领域则坦率直言。我会提到我做过的一些很棒的项目等等。
另外,这个问题不是你没有得到这个职位的原因。他们需要一个适合的人选。我认为他们对你做了件好事。最好是找到一份互惠互利的职位。
不知道为什么我的帖子回复了你,请忽略。
让我惊讶的是,几乎所有评论都忽略了更大的问题:这个行业在职位名称方面没有标准化。一家公司的“开发者”可能在另一家公司被认为是“设计师”。另一家公司可能在寻找“UX 等等”,但他们真正需要的是一名前端开发人员。还有“策略师”?别提了,没人知道这个词到底是什么意思。不信?问问他们解释一下“策略”和“战术”的区别。你很可能会得到两个本质上意思相同的定义。
哦,还有一个问题:雇主真的需要停止发布包含他们能想到的所有技能(或从其他公司的工作描述中抄袭)的工作描述。如果他们对真实的工作要求很具体,他们就能将苹果与苹果进行比较。如果他们发布要求从“杀手级文案写作技能”到“嵌入式系统工程概念精通”的工作,他们不能对收到来自截然不同的候选人的 80 亿份简历感到惊讶……或者他们什么都得不到。
谈到“开发人员”和“设计师”,职位名称并没有真正引起混淆。“开发人员”意味着你进行编程。公司很少在不指代“程序员”的情况下说“开发人员”,而当他们这样说的时候,那是因为他们根本不知道,百分之百的情况都是这样。请给我展示一个来自信誉良好的机构的职位列表,该列表中有一个“开发人员”职位,但没有其他内容表明他们正在寻找一个程序员。即使在 Lara 的职位列表中,也有几个明显与编程相关的参考资料。他们甚至列出了“OOP”!混淆不是来自雇主方或行业方,而是来自像 Lara 和你这样的人,他们不知道开发人员和设计师之间的区别,并且在他们的网站和简历上随意地使用这些词。至于“UX 等等”。“等等”才是重要的部分。“UX 设计师”不一定包含编程,但可能包含,具体取决于职位列表。“UX 开发人员”**始终意味着编程**。“UX 策略师”几乎总是指领导职位,他们期望你对 UX 设计和开发都有很好的理解,即使你的实际工作职责不包括这些职责 - 你经常会为实际进行设计和开发的人提供 UX 指导。其实并不复杂。
如果有疑问,是否应该称自己为开发人员,那就不要称。
另外,策略和战术之间差异的简单解释是:策略是一个广泛的目标,战术侧重于特定结果。UX 策略师是为公司的用户体验设计提供总体愿景和框架的人。具体的实施,或者用于实现每个项目特定最终目标的“战术”,留给执行该策略的人(设计师和开发人员)。所以 UX 策略的意思就是它所表达的意思。
这太好笑了。
招聘人员太懒,不愿意学习客户想要什么,客户太懒,不愿意编写真实的工作描述,如果团队无法制定准确的要求,他们就不知道自己在做什么,你也不想在那里工作。
参加过很多面试,我被“FizzBuzz”测试过,我完成了,但我离开了,因为这是一个毫无意义的测试,测试的是我永远不会、永远、永远用不到的任意知识。我使用 Ruby 和 Python 进行自动化,仅此而已。仅仅因为我列出了 ruby 和 python 并不意味着我是一个开发者,我也不想成为一个开发者。如果一家公司无法弄清楚我的工作角色是什么,那么他们也毫无价值。
基本抱怨是有效的,设计师不应该需要成为一个神一样的程序员。但这个问题并不难,只是一个“for”循环和两个(或者三个,如果你没有足够清晰地思考)“if”语句。
用 Python 大约花了 5 分钟完成的解决方案。
如果你不能做到,你无法制作关于你在项目 x 上花费的时数的 Excel 图表,你无法编写一个 JS 函数来检查电子邮件字段中的输入是否真的是一个电子邮件地址,你无法编写你的设计的模型。如果你不能做到这一点,被淘汰是合理的。
要求设计师用 Javascript 实现 QuickSort 太过分了,但 FizzBuzz 几乎不是最愚蠢的编程问题。唯一更简单的就是要求实现一个基本的打印 1 到 100 的程序。如果你声称自己懂 JS,那么你就应该知道如何做条件语句、循环和基本的数学运算。
但总的来说我同意这篇文章,由于缺乏 JS 技能而取消 UX 职位资格是荒谬的。
Lara,好文章,我感同身受。
我被招聘人员发来的工作广告轰炸,他们想要不可能的事情——一个能够独立完成所有前端编码的顶尖 UI/UX 设计师,并且精通最新的 JS 框架(Angular 等)。
这些人根本不存在。
例如,一个 Angular“专家”会理解响应式设计的细微差别吗?可能不会。
可访问性或 SEO 最佳实践呢?
他们的 CSS 有多“干净”?
等等...
我们需要更加现实地看待前端/UI 技能。招聘人员也应该这样做。
我可以就这些事情和“冒名顶替综合征”喋喋不休,但我还有工作要做。
:)
好的,我同意工作描述通常很糟糕。通常这是因为,需要一些专业知识才能正确地描述一个专业的工作描述。
但是,如果我在所需的资格中看到“Javascript”,在首选资格中看到“熟悉面向对象的 JavaScript 和现代 JavaScript 库,如 Ember、Backbone 或 Angular”……我不得不承认,这会让我怀疑他们正在寻找一个能够进行 FizzBuzz 式“编程思维”的人。毕竟,他们首选的资格描述的是一个与框架无关的 JavaScript 开发人员,一个编程技巧足够娴熟的人,可以像玩游戏一样切换框架。
将其放在首选技能部分而不是必需技能部分是否不公平?也许有一点……但话说回来,对于面向 Web 技术的工作,工作描述的质量参差不齐,首选和必需之间的界限非常模糊。
这个描述听起来像是要找一个理解 Javascript 基础知识的设计师。
理解基础知识就包括能够做一些像 FizzBuzz 这样的事情。
大家好!我是 Chris Coyier,这个网站的拥有者。专业设计师和开发人员,从事 10 年了。两周前才学了 FizzBuzz。
也是一个招聘网站的拥有者。我正在亲身学习求职者和招聘者之间的斗争,以及使用的语言和流程。
也是一些大型社区的经营者。坦白地说,我删除了很多评论。这就是我做的事情。从第一天起我就一直在做。这是我作为社区经理的工作。
不过,这场讨论的大部分内容都非常棒,这也是 Lara 和我所希望的。我们现在正在参加同一个网络会议。学习新知识,提升我们对所有网络事物的理解和能力。我希望你们有机会认识 Lara。她非常聪明,是一位很棒的老师。
我认为删除非建设性的评论是完全可以的。进行建设性讨论的主要规则之一是保持文明。我在这里看到很多不必要的苛刻或粗鲁的评论。粗鲁对谈话没有任何建设性的意义,所以我完全可以接受看到粗鲁、苛刻或非建设性的评论被删除。
有些人写道,如果你不会“FizzBuzz”,你就没有资格进入这个行业。这是一种苛刻的说法,而且根本不正确。对于这里每个能够编写 FizzBuzz 程序的评论者来说,他们曾经都有一段不会写的时间。他们花时间学习和/或提升自己的编程技能,现在他们可以做到了。Lara 或任何其他阅读本文和评论的人也可以做到,如果他们愿意的话。
这里似乎也有一些关于成为 Web 开发人员需要具备多少编程技能的讨论。我认为,如果你想成为一名“开发人员”,你需要学习编程的艺术。编程的艺术包括理论和编写良好代码所需的实践经验。
但是,如果你想专注于更概念性的部分,比如设计和/或 UX,扎实的编程技能可能就不那么重要了 - 至少目前是这样。
现在,对于那些*需要*使用代码的人来说,有一个棘手的问题,许多苛刻的批评者似乎忘记了:需要一定程度的编程知识才能意识到自己对编程并不了解。
这是一个许多仅仅“玩弄代码”的人尚未达到的临界点。如果你已经达到了那个点,那就恭喜你!分享你的知识,帮助其他人提高他们的技能,向着那个临界点前进并超越它。这可比告诉你的同事他们是白痴,不属于这个行业要好得多……
@Chris,也许现在是时候写一篇帖子,总结一些开始学习基础编程技能的好资源了?
再次问候!我要关闭这个话题。我们已经超出了“超过一半的恶意”水平,这对CSS-Tricks来说真是太疯狂了。这不是CSS-Tricks社区的讨论。
但我们仍然鼓励围绕这个话题进行良好的对话!如果你想和我讨论(只是网站所有者,不是作者),或者在你自己的博客上发布有关此主题的文章,请直接给我发邮件至 [email protected]。老式的博客来回互动是我最喜欢的事情之一=)。