能,也不能。
一、能

  1. OI 和 ICPC 竞赛需要的知识和思维方式,是一个有效的智商、问题分析等逻辑能力筛选器,也是成本最低的一种选拔方式。具备非常强的解题能力,但是实际工作中交付能力差,解决问题差的概率非常低,在我有限的工作经验中,还没有碰到过。OIer或者 ACMer 背景的小伙伴理解和逻辑能力一流,交流非常愉快,你几乎不用担心你的问题太复杂对方听不懂。
    1. 竞赛中分析问题的能力也是非常有价值的。比如如何把一个问题归约到另外一个问题来简化设计,比如一个分支非常多的业务流可以设计为一个DFA(有限状态机)。另外竞赛者往往对问题的边界、特例更加敏感,因为这也是竞赛需要的一项基本能力,而这些边界特例处理不当,可能导致系统崩溃。还有 debug 能力,比如如何排除影响验证定位问题,这些也是竞赛中需要的基本能力。3. 优秀的竞赛者数据结构和算法基础更扎实,coding 实现能力更强。关于数据结构和算法是否有用,我这里不讨论了,知乎有太多相关的帖子了。我只说一句,「不是数据结构和算法无用,而是你没用」。这里讲 coding 能力,我碰到过不少大学生,给一个算法描述,他能用笔模拟出运转的过程,但是一用代码(包括伪代码)描述,就漏洞百出。而对于 ACMer 来说,如果有清晰的解决方案,实现往往都不是问题。许多人认为,大多数人通过训练,就能获得这种能力,我对此持否定意见。一次性写出bug-free的代码,除了熟能生巧,还和人的思维、习惯等等有非常紧密的关系。4. 其实这点和1相似,就是快速学习的能力。多数情况下,由于优秀的竞赛者具备更扎实的知识储备,更强的逻辑和分析能力,学习新知识的能力更强。归纳或者归约分析的能力更强,他们更容易从新旧技术(知识)中找到共同点把知识体系统一起来。二、不能1. 仅仅ACM/ICPC涉及的知识体系,还不够完善,和实际工作需要的知识栈还有差距。现在分工非常细,实际工作中设计的知识栈也差异巨大。以后台开发为例,操作系统、TCP/IP 网络、数据库也是非常重要的知识。实际工作可能更关注的是系统的设计,多线程多进程还是单线程的模型,如何处理高并发、如何应对由此带来的数据一致性挑战,如何提高系统的可用性,如何优化 cache 命中率等等。应用开发中,除了围观层面的写好每一个函数每一行代码以外,设计是非常重要的,抽象逻辑并选择好的设计,这些都和实战经验关系非常大,而不是 uva/spoj 多刷200道题能解决的。另外这里扯一下,经验也分很多种,有很多纯粹是量的积累,并没有太多价值。我们在学校随便开发的 app 或者网站,你根本不用去考虑设计和优化,一则是你没有足够的数据反馈来优化产品,二则是用户规模达不到需要改进设计和优化的层次,怎么写都行。经常有些小公司的朋友问我,他们应该选 mongodb 还是 mysql, 或者是选择 PHP 还是 GO,哪个性能会更好, 我就觉得奇怪他为什么有这样的困惑,因为以他们的产品的水平,选哪个都能解决问题,肯定是哪个简单哪个好招人用哪个,而且等这个成为瓶颈时,你们已经不是一家小公司了。没有成长和迭代的开发,这种经验也没有多少价值。否则那些在校在猪八戒和淘宝上借外包的人就是最牛的了,他们一个月能做8个网站外加2个看起来和 微信一样的 app。2. 同时存在其它选拔方式,也可以选拔出在竞赛中不突出或者没参加过竞赛的优秀学生,所以 ACM 竞赛不能代表编程能力。有很多学生在学生时代,就是开源社区的佼佼者,或参与过一流的开源项目,或自己有较好的开源作品。还有些优秀的学生,在校写过很不错的 app,可能技术并不复杂,但是设计非常精美或者体验非常棒。这些都能代表编程能力,有这样的人群加入,丰富一个技术团队,团队发展会更好。3. 竞赛涉及的算法只是算法世界里最基本的逻辑和方法论,而比如机器学习、密码学、分布式计算等分支涉及的算法能力或者编程能力又有所不同(但是优秀的竞赛者在这些领域深造成为优秀工程师的概率还是更高)。我认识一些机器学习领域的工程师,编程一流,Tensorflow 等框架出来前各种复杂的模型能自己人肉用 C++写,各种机器学习竞赛排名刷的飞起,但是好多数据结构和算法设计的基本方法论都不懂。三、说下其它的1. 竞赛者也分很多个层次,刷题者亦然。大多数人的能力也就是掌握基本算法设计的基本定式,而无法理解其背后的本质问题,他们并没有比没参加过竞赛没刷过题的优秀学生高明。比如有不少人能解典型的动态规划问题,滚动数组用得非常溜,但是问题一变化,需要从一个看起来毫不相关的问题规约到另外一个经典问题,就完全不只从何做起。有些人刷了几百道动态规划的题目,对贪心和动态规划的理解,依旧模棱两可。有些人你让他写 KMP,他能几分钟给你背出来,但是却不知道这个算法和 自动机之间的关联,不知道next 函数的本质是什么,甚至无法把他和 ac 自动机关联起来。2. 在大学能坚持做好一件事情的人很少。大多人,不止平庸而且非常懒,他们可能毕业设计都得花一个月生活费买,能拿网上的改改调通的都不能算特别差。ACMer起码需要坚持经过几百上千道题的训练(虽然也有不少如我,喜欢刷水题凑数…),这种精神力量就代表了一种能力,在工作中就是一种交付能力。当然,能坚持学习写好一个app或好好写一个网站的学生或把一门课程学到极致的学霸也有这种特质。其它想起来再写吧。2. 竞赛中分析问题的能力也是非常有价值的。比如如何把一个问题归约到另外一个问题来简化设计,比如一个分支非常多的业务流可以设计为一个DFA(有限状态机)。另外竞赛者往往对问题的边界、特例更加敏感,因为这也是竞赛需要的一项基本能力,而这些边界特例处理不当,可能导致系统崩溃。还有 debug 能力,比如如何排除影响验证定位问题,这些也是竞赛中需要的基本能力。3. 优秀的竞赛者数据结构和算法基础更扎实,coding 实现能力更强。关于数据结构和算法是否有用,我这里不讨论了,知乎有太多相关的帖子了。我只说一句,「不是数据结构和算法无用,而是你没用」。这里讲 coding 能力,我碰到过不少大学生,给一个算法描述,他能用笔模拟出运转的过程,但是一用代码(包括伪代码)描述,就漏洞百出。而对于 ACMer 来说,如果有清晰的解决方案,实现往往都不是问题。许多人认为,大多数人通过训练,就能获得这种能力,我对此持否定意见。一次性写出bug-free的代码,除了熟能生巧,还和人的思维、习惯等等有非常紧密的关系。4. 其实这点和1相似,就是快速学习的能力。多数情况下,由于优秀的竞赛者具备更扎实的知识储备,更强的逻辑和分析能力,学习新知识的能力更强。归纳或者归约分析的能力更强,他们更容易从新旧技术(知识)中找到共同点把知识体系统一起来。二、不能1. 仅仅ACM/ICPC涉及的知识体系,还不够完善,和实际工作需要的知识栈还有差距。现在分工非常细,实际工作中设计的知识栈也差异巨大。以后台开发为例,操作系统、TCP/IP 网络、数据库也是非常重要的知识。实际工作可能更关注的是系统的设计,多线程多进程还是单线程的模型,如何处理高并发、如何应对由此带来的数据一致性挑战,如何提高系统的可用性,如何优化 cache 命中率等等。应用开发中,除了围观层面的写好每一个函数每一行代码以外,设计是非常重要的,抽象逻辑并选择好的设计,这些都和实战经验关系非常大,而不是 uva/spoj 多刷200道题能解决的。另外这里扯一下,经验也分很多种,有很多纯粹是量的积累,并没有太多价值。我们在学校随便开发的 app 或者网站,你根本不用去考虑设计和优化,一则是你没有足够的数据反馈来优化产品,二则是用户规模达不到需要改进设计和优化的层次,怎么写都行。经常有些小公司的朋友问我,他们应该选 mongodb 还是 mysql, 或者是选择 PHP 还是 GO,哪个性能会更好, 我就觉得奇怪他为什么有这样的困惑,因为以他们的产品的水平,选哪个都能解决问题,肯定是哪个简单哪个好招人用哪个,而且等这个成为瓶颈时,你们已经不是一家小公司了。没有成长和迭代的开发,这种经验也没有多少价值。否则那些在校在猪八戒和淘宝上借外包的人就是最牛的了,他们一个月能做8个网站外加2个看起来和 微信一样的 app。2. 同时存在其它选拔方式,也可以选拔出在竞赛中不突出或者没参加过竞赛的优秀学生,所以 ACM 竞赛不能代表编程能力。有很多学生在学生时代,就是开源社区的佼佼者,或参与过一流的开源项目,或自己有较好的开源作品。还有些优秀的学生,在校写过很不错的 app,可能技术并不复杂,但是设计非常精美或者体验非常棒。这些都能代表编程能力,有这样的人群加入,丰富一个技术团队,团队发展会更好。3. 竞赛涉及的算法只是算法世界里最基本的逻辑和方法论,而比如机器学习、密码学、分布式计算等分支涉及的算法能力或者编程能力又有所不同(但是优秀的竞赛者在这些领域深造成为优秀工程师的概率还是更高)。我认识一些机器学习领域的工程师,编程一流,Tensorflow 等框架出来前各种复杂的模型能自己人肉用 C++写,各种机器学习竞赛排名刷的飞起,但是好多数据结构和算法设计的基本方法论都不懂。三、说下其它的1. 竞赛者也分很多个层次,刷题者亦然。大多数人的能力也就是掌握基本算法设计的基本定式,而无法理解其背后的本质问题,他们并没有比没参加过竞赛没刷过题的优秀学生高明。比如有不少人能解典型的动态规划问题,滚动数组用得非常溜,但是问题一变化,需要从一个看起来毫不相关的问题规约到另外一个经典问题,就完全不只从何做起。有些人刷了几百道动态规划的题目,对贪心和动态规划的理解,依旧模棱两可。有些人你让他写 KMP,他能几分钟给你背出来,但是却不知道这个算法和 自动机之间的关联,不知道next 函数的本质是什么,甚至无法把他和 ac 自动机关联起来。2. 在大学能坚持做好一件事情的人很少。大多人,不止平庸而且非常懒,他们可能毕业设计都得花一个月生活费买,能拿网上的改改调通的都不能算特别差。ACMer起码需要坚持经过几百上千道题的训练(虽然也有不少如我,喜欢刷水题凑数…),这种精神力量就代表了一种能力,在工作中就是一种交付能力。当然,能坚持学习写好一个app或好好写一个网站的学生或把一门课程学到极致的学霸也有这种特质。其它想起来再写吧。
      作者:靖难
      链接:https://www.zhihu.com/question/45323673/answer/99016073
      来源:知乎
      著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

解 ACM 题的能力真的代表编程能力吗?相关推荐

  1. python解acm题_2020年常熟理工学院第一届线上ACM选拔赛题解(Python版)

    这个题目是4140: Trojke的一个扩展,在这个题目里由于可以匹配的棋子很多,我们应该想的是去遍历这个棋盘的所有线.这就是格点问题:从(0,0)到(x,y)的线段,经过的格点数目是gcd(x,y) ...

  2. python解acm题_python ACM ,持续更新中。。。。。。。。。。。。

    python中用print总是会出现回车空格,非常讨厌,然而,Python 3.0下print已经从语句变为函数了,我用的使python2.7.4,所以呢,还不行.....但是我们可以用其他方法: i ...

  3. 总结-软件工程师 ( 编程能力 )

    总结-软件工程师 ( 编程能力 ) 软件工程师编程能力前言 /* 编码现状 */ 程序猿现状: 现项目不是白做的,的确知道怎么写代码,怎么做出一个界面,怎么发起一个网络请求... 仅此而已了.不知道如 ...

  4. python记忆口诀-学妹问我: 如何提高编程能力

    聊天截图 聊天截图 前言 开局两张图,剩下全靠吹了. 上面这两张图便是写这篇文章的原由. 对话框的另一边,是一位大二计算机科班在读的小姐姐,看似平静的文字背后透露着迷茫与困惑,还对未来的焦虑. 透过屏 ...

  5. python记忆口诀-学妹问我:如何提高编程能力

    聊天截图 聊天截图前言 开局两张图,剩下全靠吹了. 上面这两张图便是写这篇文章的原由. 对话框的另一边,是一位大二计算机科班在读的小姐姐,看似平静的文字背后透露着迷茫与困惑,还对未来的焦虑. 透过屏幕 ...

  6. LeetCode《编程能力入门》刷题笔记(34 题全)

    LeetCode<编程能力入门>刷题笔记 基本数据类型 1. 在区间范围内统计奇数数目 _解法1:暴力迭代 _解法2:数学(找规律) 2. 去掉最低工资和最高工资后的工资平均值 _解法1: ...

  7. 《编程能力基础》刷题笔记(41 题)

    <编程能力基础>刷题笔记 1. 单调数列 题解:递归.模拟.API 2. 实现 strStr() 题解:API.暴力.滑动窗口 3. 平衡二叉树 题解:迭代 4. 重复的子字符串 题解:模 ...

  8. “青少年编程能力等级”第一、第二部分:图形化编程 Python编程 含测试样题

    标准由全国高校计算机教育研究会.全国高等院校计算机基础教育研究会.中国软件行业协会.中国青少年宫协会4个团体联合发布.清华大学.北京理工大学牵头的标准研制团队,通过调研.研讨.专家咨询等,广泛征求意见 ...

  9. 青少年编程python一级真题_青少年编程能力等级测评试卷二及答案 Python编程(一级)...

    青少年编程能力等级测评试卷 Python编程(一级) (考试时间90分钟,满分100分) 一.单项选择题(共20题,每题2.5分,共50分) 1. 运行下方代码段,输出是6,则输入的可能是( C ). ...

最新文章

  1. 8 - 9 template两大功能 : simple_tag、模板继承
  2. 百度前端fex-team团队面试指南
  3. 关于mobile中datagrid的使用
  4. python如何强制转换数据类型_python数据类型强制转换实例详解
  5. Delphi下物理删除dBase数据库的*.dbf文件
  6. mysql 解压缩安装_[mysql] MySQL解压缩安装步骤
  7. 每日一则----算法----二分查找法
  8. 染整色差技术分析大全
  9. java mediatype属性_SpringMVC 及常用MediaType
  10. 参赛邀请 | 第二届古汉语自动分析国际评测EvaHan(古汉语机器翻译)开始报名...
  11. 知网等数据库文献快速直接导入EndNote的方法
  12. Notebook for Integer Programming (Laurence A. Wolsey) - Well-Solved Problems
  13. 物联网卡传感器赋能零售商品感应机制 开启智能零售新风尚
  14. coreldraw怎么画猴子_用CorelDraw制作一个可爱的调皮猴子
  15. ArrayList类线程不安全的解决方法
  16. 小学数学典型应用题解题思路及方法(一)
  17. gogs 服务开机自启动
  18. 偶然遇见斗鱼的小姐姐
  19. 如何让电脑微信双开呢,两行代码解决问题
  20. VUE获取上月、当月、前几月等等问题

热门文章

  1. 无缝大世界之无缝连接Terrain转mesh
  2. threejs知识点:1.模型分析
  3. 用perl做ProjectEuler练习题01
  4. P1425 小鱼的游泳时间(C语言)
  5. 努比亚红魔5G救砖线刷教程
  6. 番茄工作法-百度百科
  7. HTML5期末大作业:重庆火锅网站设计——代码质量好-重庆火锅(5页) HTML+CSS+JavaScript 大学生网页制作期末作业
  8. 深度学习的开放数据集
  9. RTC使用野火例程,LSE复位可用,HSE和LSI不可用问题。
  10. 做人做事的艺术html,人生三会:会做人、会说话、会做事