10 月 23 - 25 日,QCon 上海站即将召开,现在大会已开始正式报名,可以享受 8 折优惠 了解详情
写点什么

Ruby on Rails 之父自认为写不了冒泡排序

  • 2019-11-07
  • 本文字数:1637 字

    阅读完需:约 5 分钟

Ruby on Rails之父自认为写不了冒泡排序

David Hansson 是 Ruby on Rails 语言的发明者,他在一条推特信息中坦承,他无法在白板上写出冒泡排序算法。David 总是在网上搜代码:



他的几个同事也都支持他的观点:



这个话题一次又一次地出现在不同的地方,正好我自己也有类似的经历:这周以及之前的几周,我参加了几家公司的技术面试,所以怎样准备面试这个问题现在对我来说是最重要的。


面试官会经常性地问到包括算法在内的所谓编程语言基础知识(于我,那就是 JavaScript 啦),这已经不是秘密了。任何平均水平的(对“平均水平”这个词语的定义,人们经常有一些讨论,但是我坚持使用“平均水平”这个词,而不引用别人的定义)工程师都面临两大难题。但首先,我想先稍微解释一下“平均水平”这个词语:一位普通的开发者在商业开发中,应使用其领域最先进的技术方案(例如,最好的算法),这是开发者的责任所在。但是,一位普通的、平均水平的开发者是否需要记住最好算法代码上的某些实现,这仍然是个有争议的话题。


所以,两大难题出现了:


1)通常在面试中,面试官会给你一张纸,一支铅笔,或者一个白板和一只记号笔。在真实的开发环境中,我们使用大量的工具,减少一些常规的开发任务:比如,代码自动补全工具。所以,你需要考虑到面试中的压力环境,也许你并不总是能够凭空写出来精确的、语法正确的代码。


2)第二大难题是数字化时代的基本特点所带来的后果。我会用一个小例子来说明。


过去十几年,我一直在学习汉语。学习汉语最主要的难点在于记住这些汉字的象形写法。这和我们欧洲的语言不同,我们已经习惯了字母表式的语言,而汉语,即使你知道一个汉字的发音,也不一定能帮助你准确地写出这个汉字。现代化的电子助手——手机应用程序——通过输入拼音能够降低写出汉字的难度,因为它能让你快速找到你需要的汉字。


我时不时地会去想人们在过去是怎样做的。那时候,每次为了找到某个汉字的正确拼写方式,最多就只能是去翻一翻厚重的汉语字典。这对于他们记忆象形文字的能力,对于他们反复记忆学习所花费的时间等等,都提出了完全不同的挑战。


简而言之,粗略地说,我们大脑的部分功能会不由自主地被带到外部世界来,被带出来的并非记忆本身,而是,比如说对记忆构建的哈希表,从这张哈希表我们可以快速找到大量的、在加速前进的职业生涯中所获取到的知识。


而对于编程知识来说,情况一模一样。坦率的说,每个人都会承认:他迟早都会忘记一些最基本的东西。例如,每个优秀的 JavaScript 课程都会介绍 OOP 的概念,讲解继承这个主题,如何创建“类”等等。但是,在现代化项目里,特别是那些基于框架的项目,程序员并不经常直接使用 OOP 的特性,其使用频率并不像 OOP 在面试中被问到的那样频繁(面试中几乎总是会被问到)。所以自然地,你实际记住了的和你自己以为记住的(通常却被忘得一干二净),这两者之间会产生冲突。


换句话说,成功的程序员能够了解从哪里以及怎样找到应对当前话题的知识,他们每天都写很多代码,甚至能够解决很多复杂的问题(例如,创建 RoR),但却会在面试中挂掉,不能清晰明了地解答面试题目,只能对着看似“幼稚”的面试任务发呆。那么问题来了,这样的面试究竟是在定义什么?


顺便说一下,一些西方企业就这一主题(http://blog.interviewing.io/you-cant-fix-diversity-in-tech-without-fixing-the-technical-interview/)做了一些研究。


结论是:“它无法界定得那么清楚。”当然,任何平均水平的雇主首先想要在候选人身上看到的是其具备基础知识。由于我们的整个文化主要是写的文化,雇主也就有权要求候选人把他所知道的知识写在纸上。但是,对于编程(很可能在其他需要很多脑力的领域也是这样),一个简单的事实正变得显而易见:一个人不借助特别的线索和提示等,是很难使他所知道的所有知识在脑中重现。相反,让候选人解决一个实际的问题,综合评估其寻求解决方案的能力和技能,而并非只是测试他们是否记住了某些代码片段,这会让面试更有效果。


原文链接


Programmers can’t write algorithms without help: once more about the interview


2019-11-07 17:192424

评论 1 条评论

发布
用户头像
水平不够的面试官,需要问基础知识来辨别面试者
2019-11-08 15:29
回复
没有更多了
发现更多内容

我与写作平台的初次接触

Aldeo

1 周年盛典 我和写作平台的故事

又一个免费良心的下载站,答应我:别再下到流氓软件了。

彭宏豪95

ios 效率 工具 下载 4月日更

对于即将工作的IT大学生,该如何变强?

cv君

程序人生 IT 科技 问卷 有意义

高校软件IT专业大学生课外培训调查问卷

穿过生命散发芬芳

行业分析能力考核

群英荟萃 | UINO优锘科技ThingJS平台亮相华为开发者大会

ThingJS数字孪生引擎

物联网 3D可视化 数字孪生

博睿数据DataView标准化指标管理,助力企业快速制定SLO

博睿数据

数据中台 博睿数据 dataview

聪明人的训练(三十)

Changing Lin

4月日更

万字长文讲述我是怎样保送清华的|寒门学子的奋斗史(四)

程序猿石头

程序员 码农 逆袭 大学总结 读书总结

SpringCloud-技术专题-Feign组件基本使用(1)

码界西柚

Configuration Hystrix spring-cloud Fegin Ribbon

带你温习一下webpack配置

IT皮皮蟹

npm nodejs webpack

参加人气创作者的一些感悟

石云升

28天写作 4月日更 1 周年盛典

云原生除了K8S、微服务,还有...?

云计算

Serverless的定义

刘宇

音频变速变调原理及soundtouch代码分析

floer rivor

音视频

【得物技术】网络优化——域名解析原理&实践

得物技术

网络 域名解析 域名 得物技术 实践

新人小白福利来啦!精简版java知识总结,阿里P8大牛看完都说绝了

牛哄哄的java大师

Java

弱密码会毁灭物联网(IoT)吗?

龙归科技

密码管理

软件 IT专业的高校大学生是否写文调查问卷

Bob

问卷调查 行业分析能力考核 高校大学生 写文

​太厉害了,终于有人把Spring条件注解讲明白了,送你上岸!

飞飞JAva

spring

SpringCloud-技术专题-Feign组件基本使用(2)

码界西柚

springmvc SpringCloud Hystrix Fegin

什么,你管这叫“线程安全”?

Java大蜗牛

Java 程序员 编程语言 后端 线程安全

科技赋能 博睿数据引领教育行业走入“服务可达”时代

博睿数据

在线教育 博睿数据 服务可达

5月日更,InfoQ 高定T-恤,达标来领~

InfoQ写作社区官方

5月日更 热门活动

已跪!Java全能笔记爆火,Java教程/Java包/Eclipse安装指南全有

牛哄哄的java大师

Java

极光开发者周刊【No.0430】

极光GPTBots-极光推送

引入:从云计算到Serverless

刘宇

本文标题不能描述本文内容

小天同学

读书 哲学 读后感 4月日更

2.8W字Java基础学习和书籍推荐,真正意义上的从0到1学Java,才不是培训机构那种大纲文

北游学Java

面向对象 线程 集合 java基础 IO流

面试:某云面试题目整理

程序员架构进阶

Java 面试 自我提升 28天写作 4月日更

聆听极致 ——声网 Agora

cv君

算法 音视频 科技 声网 引航计划

IT 专业大学生被培训机构“渗透”情况调查

梦想橡皮擦

签约计划

Ruby on Rails之父自认为写不了冒泡排序_文化 & 方法_Maksim_InfoQ精选文章