不是人人都适合编程 且都能把编程作为职业

  最近一部名为“学校不会教的东西”的短片甚嚣尘上,引起了大众的关注。短片的中心思想就是“人人都能编程”,而且其中还有几位知名富豪宣传这一论点。(顺便提一句,这些富豪的钱是通过雇佣别人编程而赚取的,并非靠自己编程。)

  前几天我弟弟来了,他是一个做梦都想发财的主。他对我说:“我想和你一样,我要编程”。毫无疑问,他看过了那部短片。

  我想说的是,这一切根本不靠谱。不是人人都适合编程(简单的入门除外),更重要的是,并非人人都能把编程作为职业。

  短片一开头是 Bill Gates 和 Mark Zuckerberg 等知名富豪在宣传“我还是小孩子的时候就开始编程了”,然后显示一下他们最早的启蒙作品,例如小游戏之类的。之后,Dropbox 的创始人 Drew Houston 出现了,称“编程和玩乐器、做运动差不多”,然后大学期间学过编程的 NBA 全明星 Chris Bosh 会介绍他在编程方面遇到的困难和苦恼,但实际上却并没有指出有多困难。

  他们说的这些并不假。一个有好奇心的小孩学习编程就像学习其它任何无关紧要的事情一样(例如乐器、运动、杂耍、针线等)。但后面的内容就开始误导了。

  Facebook 早期工程师 Makinde Adeagbo 出来说很多编程都是很简单的。从某种意义上说,这是对的。但我同样可以说打篮球时很多动作也是很简单的,比如横穿球场或是投球。横穿球场是打篮球中的基本要素,但并不是会横穿球场就表示篮球打得好。实际上,你可能每次都能漂亮地横穿球场,却根本打不好篮球。

  然后我最喜欢的片段来了:Bill Gates 在那说:“加,减,这就是编程”。就是这些,这些就是你学会编程所需的唯一前提。

  这话只有一半是对的。你确实无需太多数学知识就可以编程。但问题是,随着你对编程了解得越多,就会发现数学必不可少。我要说,想当一名成功的程序员,必须要有良好的代数基础,若你想达到更高的层次,你还需要学得更多。且不说这条前提,我认为他传达了一个错误的信息,那就是将最低门槛描述为成功的方法。更准确的说法是:“你只需要知道加和减。但你最好多学一点数学,因为除了《 7 天学会Java》之类的入门读物以外,当你阅读更有内容的编程书籍时,就需要用到数学。”

  短片的最后开始介绍程序员的生活。奢华的办公室、免费的食物、优美的景色,当然,还有大把的钞票。

  我被短片中的一家公司录取了:Facebook。但我代表其他的程序员说,这些看着很难受。

  这些条件确实存在,但对于程序员而言,它们是特例,并非常态。大多数办公室仅配备咖啡机和冰箱,供你存放自己的食物,通常都被别人的食物塞得满满的,且一放就是一个星期。程序员们坐在大楼的一个个灰色小隔间里,还要遵守严格的规章制度。

  我要做的就是被 Facebook 录取。他们告诉我这很简单。他们录取了成百上千的人,编程很简单。 事实并非如此。Facebook 的面试可不只是“加和减”,他们给你的问题也绝不是有趣的小游戏。其中一道面试题需要了解微积分,另一道题需要说明高度递归函数的时空复杂性,还有一道需要掌握程序员使用的抽象工具,例如正规语言和自动操作。

  我弟弟想干我这一行,他认为能比在 FedEx 当个工人赚得钱多得多,过上小奢侈的生活。短片里也是这样宣传的。但我想他并没有看清现实。

  这个周末我坐在这里,给一个我完全不了解的代码库写代码。我觉得如果不按时完成,我这份工作就危险了。我编写的不是有趣的游戏或其它具体的东西,实际上,如果一个外行问我在编写什么,我根本没法说清楚。我或许会说:“我在编写一种东西,它能够读取代码,根据代码推导出信息,其他人就可以在他们的工具里使用这些信息”。我想这不是我弟弟或其他任何人预想中要做的事情。

  我能够早上 10 点上班,晚上 7 点回家吗?不行。编程不是按时上下班的工作,它总是需要更多的时间来完成任务。而且永无休止,因为任务源源不断。总是有新功能要加,有新 bug 要除。你总是有理由再留下一两个小时。就我个人而言,我感觉时间如此不够用,我必须加班到凌晨 12 点到 1 点才能平衡我的工作和个人生活。这可不仅仅是我的状态,很多程序员都是如此。

  我并不想打击刚开始学编程的新人,它确实是一件能增强能力的事情。但对于我而言,编程不是一两个周末或 52 个周末就能搞定的事情,而是我付出了艰辛的努力,且放弃了生活中许多其它的事情才学会的。我很难告诉我弟弟或是其他任何人,学会一点编程的成果(不是名誉和财富)就能改变他们思考的方式,而且我也不认为这件简单的事情对大多数人是一种好的推动。

  简而言之,不是人人都适合编程。它不是这部短片或电影“社交网络”里所描述的有趣好玩的工作。它也不是一项令人精神爽朗的社会活动。你要花费大量的时间坐在电脑屏幕前,盯着那些五颜六色的文本文档,思考,思考,打字,生气,并奇怪自己为什么会选择这种死坐着不动的生活。

时间: 2024-11-03 22:36:13

不是人人都适合编程 且都能把编程作为职业的相关文章

虚拟主机性价比高,但不是谁都适合饥饿营销

相对于苹果.三星这一类的国际知名品牌手机,作为国内最为火热的品牌手机小米在这几年取得的傲人战绩着实让人惊讶.许多http://www.aliyun.com/zixun/aggregation/32834.html">业内人士把其成功归结为一次又一次的饥饿营销.看来"饥饿"的确是一个卓有成效的营销战术,但是对于虚拟主机市场来说,需要的却是截然相反的营销策略. 如何喂饱用户才是虚拟主机需要思考的问题,即便是小米出色的饥饿战略也会让用户感到累觉不爱.不过得承认的是小米是性价比

并不是所有企业网站都适合做SEO

中介交易 http://www.aliyun.com/zixun/aggregation/6858.html">SEO诊断 淘宝客 云主机 技术大厅 随着SEM的巨大费用支付,很多企业网站的网络营销工作开展得非常不顺,并且开始叫苦连天,于是很多企业开始转向了更为经济的SEO,认为SEO是一项一劳永逸的事情,但是以笔者多年来的SEO经验来看,并不是所有的企业网站都可以通过SEO来让网络营销走入正轨的. 就这个问题,我来做以下几点分析,希望对想进入SEO或者已经进入SEO的企业网站管理员.企业

九个大家都想做但都没有做成功的创新产品

中介交易 SEO诊断 淘宝客 云主机 技术大厅 创业公司的成功靠什么?一个超赞的点子?这远远不够.仅靠概念不能成就一家企业. 但是,一个尚未成功的理念并不意味着它始终不会成功.这在科技领域表现的尤为明显,你会看到成功者出现前会有无数"前浪"被拍死在沙滩上.以下就是国外科技媒体The Next Web总计的9个大家都想做但都没有做成功的产品类型. 1. 照片组群分享 照片组群分享类的初创企业很常见,一些值得注意的产品包括Adobe's GroupPix, Color,Yogile,Goo

java struts2-不知道为什么今天启动struts2练习项目都出错了,都是同一个错误。

问题描述 不知道为什么今天启动struts2练习项目都出错了,都是同一个错误. Unable to load configuration. - file:/D:/Program%20Files/Java/apache-tomcat-6.0.32/webapps/strutsdemo3/WEB-INF/classes/struts.xml:17:10 at org.apache.struts2.dispatcher.Dispatcher.init(Dispatcher.java:502) at o

struts2.1.8 显示的都是 uft-8 中文都是 &#26031 &#*****

问题描述 struts2.1.8显示的都是uft-8中文都是&#26031&#*****不知怎么回事 解决方案 解决方案二:到处都是乱码问题解决方案三:不是乱码页面可以正常显示解决方案四:引用2楼ccqq210的回复: 不是乱码页面可以正常显示 那是神马情况请描述清楚解决方案五:把所有编码都统一用utf-8解决方案六:你说的是查看网页源文件显示成这样子的吧?struts标签中加上escape="false"属性看看解决方案七:编码问题~解决方案八:引用5楼magiclu

Java编程那些事儿101——网络编程概述

第十三章 网络编程 网络编程对于很多的初学者来说,都是很向往的一种编程技能,但是很多的初学者却因为很长一段时间无法进入网络编程的大门而放弃了对于该部分技术的学习. 在学习网络编程以前,很多初学者可能觉得网络编程是比较复杂的系统工程,需要了解很多和网络相关的基础知识,其实这些都不是很必需的.首先来问一个问题:你会打手机吗?很多人可能说肯定会啊,不就是按按电话号码,拨打电话嘛,很简单的事情啊!其实初学者如果入门网络编程的话也可以做到这么简单! 网络编程就是在两个或两个以上的设备(例如计算机)之间传输

Java编程那些事儿9——网络编程基础

对于初学者,或者没有接触过网络编程的程序员,会觉得网络编程涉及的知识很高深,很难,其实这是一种误解,当你的语法熟悉以后,其实基本的网络编程现在已经被实现的异常简单了. 1.4.1 网络编程是什么? 网络编程的本质是两个设备之间的数据交换,当然,在计算机网络中,设备主要指计算机.数据传递本身没有多大的难度,不就是把一个设备中的数据发送给两外一个设备,然后接受另外一个设备反馈的数据. 现在的网络编程基本上都是基于请求/响应方式的,也就是一个设备发送请求数据给另外一个,然后接收另一个设备的反馈. 在网

Java编程那些事儿105——网络编程技术4

13.2.4 UDP编程 网络通讯的方式除了TCP方式以外,还有一种实现的方式就是UDP方式.UDP(User Datagram Protocol),中文意思是用户数据报协议,方式类似于发短信息,是一种物美价廉的通讯方式,使用该种方式无需建立专用的虚拟连接,由于无需建立专用的连接,所以对于服务器的压力要比TCP小很多,所以也是一种常见的网络编程方式.但是使用该种方式最大的不足是传输不可靠,当然也不是说经常丢失,就像大家发短信息一样,理论上存在收不到的可能,这种可能性可能是1%,反正比较小,但是由

树-一道编程题,用c++编程,求助

问题描述 一道编程题,用c++编程,求助 给定一颗无根树,假设它有n个节点,节点编号从1到n,求任意两点之间的距离之和,也就是求任意一点到其它点的距离之和,边长都为1.要求时间复杂度为O(n) 解决方案 先做一遍DFS求出所有节点到根节点的距离之和,然后可以发现,如果知道到一个点的距离之和,可以用O(1)求出所有节点到它相邻点的距离之和 解决方案二: /* ***********************************************Author :xdloveCreated T