写点什么

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

评论 1 条评论

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

GPU 降成本免运维,睿观 AI 助手选择函数计算

阿里巴巴云原生

阿里云 Serverless 云原生 函数计算

教培行业首发!腾讯云 X 咕泡科技 AI 实训 CDE 平台正式落地

咕泡科技

人工智能 腾讯云 AI 咕泡科技 实训平台

3小时成为百万富翁 | 金融科技漏洞赏金实战(第一篇)

qife122

漏洞赏金 GraphQL漏洞

ChatGPT,从规则到强化学习

江南一点雨

提升研发效能:CCode代码管理平台用自动化CI校验规范代码合并流程

嘉为蓝鲸

DevOps 代码管理 CCode

【CMDB治理】多角色驱动:精准规划CMDB数据消费场景指南

嘉为蓝鲸

AIOPS CMDB IT资产管理

OpenLLMetry 助力 LLM 应用实现可观测性

观测云

LLM

高德智能手表解决方案,助力荣耀手表5 Ultra开启智慧出行

高德开放平台

高德地图 智能穿戴 RTOS

大数据-38 Redis 分布式缓存 详细介绍 缓存、读写、旁路、穿透模式

武子康

Java redis 大数据 分布式 后端

Wikipedia Android应用构建与发布工具集

qife122

android 自动化

如何通过YashanDB实现用户行为分析

数据库砖家

如何通过YashanDB数据库进行数据审计

数据库砖家

在AI时代,如何从开源项目中发现真实需求?

qife122

开源项目 AI技术

AI 英语口语练习 App 开发

北京木奇移动技术有限公司

软件外包公司 QT外包开发 QT开发公司

“一句话秒出PPT“的荣耀YOYO,AI生产力有多强?

脑极体

AI

AI会取代漏洞赏金猎人吗?2025年技术从业者的深度分析

qife122

网络安全 AI技术

AnkiDroid - 开源记忆卡片应用

qife122

android 开源

如何通过YashanDB数据库保障数据合规性

数据库砖家

Parallels Desktop 20新特性解析,Parallels Desktop19有必要升级到Parallels Desktop 20版本吗?

阿拉灯神丁

Mac双系统 Parallels Desktop Mac虚拟机下载 虚拟机软件 pd 19

加工进化论:SPL 一键加速日志转指标

阿里巴巴云原生

阿里云 云原生 SPL sls

再获5亿元融资加持,云深处何时走向“C位”?

趣解商业

科技 人形机器人 云深处科技

如何通过YashanDB数据库分析市场趋势?

数据库砖家

优化测试执行:嘉为蓝鲸CTest测试管理平台结构化用例提升效率与缺陷追踪能力

嘉为蓝鲸

DevOps 测试用例 CTest

CIO 落地 AI 的最佳伙伴,飞书开发套件助力企业提升 AI 生产力

ToB行业头条

飞书 大模型

数字资产支付 App 的智能合约

北京木奇移动技术有限公司

区块链技术 区块链开发 软件外包公司

地平线走进武汉理工,共建智能驾驶繁荣生态

地平线开发者

自动驾驶 走进高校 地平线征程6

数据中台产品是伪需求吗?

镜舟科技

数据中台 数据处理 StarRocks 实时处理 行业场景适配性

从语义检索到精准匹配:智能运维OpsPilotV3.5问答对能力解读

嘉为蓝鲸

智能运维 weops OpsPilot 问答对

通过ETL工具,高效完成达梦数据库数据同步至数仓Oracle的具体实现

谷云科技RestCloud

oracle 数据处理 数据同步 ETL 达梦数据库

吉他小白必看:吉他初学者指法如何训练,Guitar Pro如何辅助新手理解复杂指法?

阿拉灯神丁

吉他学习 Guitar Pro 音乐制作工具 乐谱软件

吉他检查换弦准确度的方法有哪些呢?Guitar Pro如何帮助吉他新手检查换弦准确度

阿拉灯神丁

吉他学习 Guitar Pro8 音乐软件 技巧分享

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