HarmonyOS开发者限时福利来啦!最高10w+现金激励等你拿~ 了解详情
写点什么

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:192277

评论 1 条评论

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

建筑行业全周期区块链产融平台

CECBC

建筑行业

入门到精通!阿里码农熬了2晚整理的Java工具,真香

飞飞JAva

Java java工具类

打破思维定式(二)

Changing Lin

5月日更

NumPy之:结构化数组详解

程序那些事

Python 数据分析 Numpy 程序那些事

MySQL数据迁移那些事儿

Simon

MySQL 数据迁移

牛仔底色保护浆(喷砂工艺)

C13713145387

牛仔底色保护浆

进击的速溶咖啡:当中国AI开始玩工业化

脑极体

融云亮相 CDEC2021 上海站 全场景通信能力赋能企业数字升级

融云 RongCloud

采取有效云网络安全策略的5个基本步骤

云计算

Java中用户线程和守护线程区别这么大?

王磊

Java 并发编程 多线程 5月日更

架构实战营 模块二 作业

Pitt

架构实战营

区块链与物联网融合发展都会有哪些机遇与挑战

CECBC

区块链

算法训练营 - 学习笔记 - 第五周

心在飞

4.2 Go语言从入门到精通:延迟函数 defer

xcbeyond

defer Go 语言 5月日更

Spring-技术专题-设计模式和研究分析

洛神灬殇

spring 设计模式 原理分析 5月日更

postgresql数据库 timescaledb 时序库 超级表 块的压缩(compress_chunk()的应用)

Yang

数据库 postgresql

爽面弹力胶浆、哑面弹力胶浆

C13713145387

爽面弹力胶浆

网络攻防学习笔记 Day5

穿过生命散发芬芳

5月日更 网络攻防

自研消息队列架构设计文档

菠萝吹雪—Code

架构实战营

OAuth 2.0 与 OIDC

Zhang

OAuth 2.0 OIDC

哑面防水尼龙胶浆Nylon printing paste

C13713145387

哑面防水尼龙胶浆

数字资产的发行是全球都无法阻挡的大趋势!

CECBC

数字资产

模块三作业:消息队列详细设计文档

薛定谔的指南针

架构实战营

展开说说,Spring Bean IOC、AOP 循环依赖

小傅哥

Java spring 小傅哥 ioc 循环依赖

夏季不塞网胶浆、夏季不堵网胶浆

C13713145387

夏季不塞网胶浆

Google官方关闭binary后,Android工程师怎么办?

Changing Lin

5月日更

Golang实现文件复制的技巧

liuzhen007

Go 语言 5月日更

超级全面的测试用例设计,你确定不来看一看?

程序员阿沐

软件测试 测试用例 测试工程师

太简单了!这套Java异常处理的总结,80%的人都没看过

牛哄哄的java大师

Java

一次过透气浆、印一次透气浆

C13713145387

透气胶浆 一次过透气浆

哑面爽滑肤感胶浆

C13713145387

哑面爽滑肤感胶浆

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