为什么程序员不会最简单的100到1的输出?
我最近写了一本书,是关于我们作为程序员应该停止抱怨,专注于发展技能的。
我最近写了一本书,是关于我们作为程序员应该停止抱怨,专注于发展技能的。
其中一个数据要点是基于我在两个月的时间里为我的一个客户执行的 22 场程序员职位面试。
虽然这很难被认为是可取的样本数量,但它确实暴露了一些关于程序员的有趣事实。下面这两个看似完全无关的问题,是我们在面试中不同时间段提出的:
- 谈谈当前单位或管理人员的哪些事情是你不喜欢/不满意的。
- 解决一个简单的编程问题(绝对比著名的 Fizz Buzz 问题要容易得多)。
我们的目的是为了研究抱怨和编码能力之间的相关性。下面是我们收集的数据集合(当然由于我没有携带秒表,所以已经将数据四舍五入至单位秒):

尽管曲线并不是非常一致,但是总的趋势依然十分明显——抱怨和解决简单编程问题的能力之间有很强的联系。
挺有趣的,是不是。而更有趣的是,这个实际要求应聘人员解决的编程问题难倒了很多人,并且我敢保证这问题绝对比 Fizz Buzz 问题要容易得多:
- 约 14% 的人无法在 10 分钟以内解决—— 这时我们需要提下一个问题了。
- 约 40% 的人需要 5 分钟以上的时间才能解决问题,和/或不止一次的修改。
- 只有约 14% 的人能在 2 分钟及以内解决这个问题。
- 约 82% 的人在解决问题之前,至少得修改一次。 (这意味着实际上他们第一次写的代码是错的!)
那么他们要解决什么问题呢?
输出 100 到1。
这就是问题。
关键点是什么?
一开头你就需要写“for(int i = 0;”,然后再继续——在“for(int i = 0;”之前,你不能写任何东西,并且你不能使用两个循环。
按照这个方向试试。最多两分钟,最多 4 行代码,包括花括号在内——但是如果方向不对,就会衍生出很多很多行代码。
如果你能在合理的时间内,不犯错误地输出正确的结果,那么我们就认为你的答案是正确的。
但是特别让人难以理解的是,无数程序员面对这问题——抓耳挠绕,绞尽脑汁,最后甚至于不得不放弃。
不相信?那我告诉你,我曾碰到过两个程序员,在 10 分钟攻擂失败之后,居然说这个问题太复杂了,他们搞不来。
虽然这个小小的试验显示了抱怨与技能之间的相关性,但却并没有建立任何因果关系。换句话说,我们从这些数据上看不出,是因为程序员不具备完成工作的足够技能才抱怨的呢,还是因为爱抱怨从而使得他们不具备做好工作的技能,这是无法确定的。
也许程序员之所以技能不娴熟是因为喜欢怨天尤人喋喋不休地抱怨,又或许是因为他们总是在抱怨,从而降低了我们对于他们的期望值,不会对他们做过多的要求,于是他们自己也松懈了,甚至连最基本的编程技巧也荒废了。
无论是哪种原因,现在存在于 IT 行业的一个非常可悲的事实就是,你甚至都不需要使用 Fizz Buzz 这种难度的问题来考校程序员的优劣,—— 只要让他们输出 100 到 1 就够了。
本文由 TecHug 分享,英文原文及文中图片来自 www.codeceo.com。
你也许感兴趣的:
- 雷蒙德·陈 旧事新说:当愤怒的客户要求与比尔·盖茨通话时
- 微软否认使用人工智能用Rust语言重写Windows 11
- 讨论:为什么Python能胜出?
- 使用 PostgreSQL 18 实现即时数据库克隆
- 我断开IPv4整整一周,只为理解IPv6过渡机制
- 我在地铁上编程
- Debian 的 Git 迁移计划
- Debian将龙芯LoongArch列为官方支持的架构
- Android对美国外部内容链接引入2-4美元安装费及10-20%分成政策
- 软件控制等级军事标准

for(int i = 0; i < 100; i++) {
int tmp = 100-i;
system.Out.print(tmp+"\t");
}
for(int i = 0; i < 100; ++i)
{
cout << 100-i << endl;
}
for(i=0; i>-100; i–) {
System.out.print(i+100);
}
for(int i=100;i >0;i–){
System.out.println(i);
}
for(int i=0;i<100;printf("%d\n",100-i++));
这个太不可能了吧?
for(var i=100;i>=1;i–)
{document.write(i+” “);}
for(i=0; i<100; i++){
console.log(100-i)
}
int i = 100;
while (i > 0) {
System.out.println(i–);
}