编程不难,一个遗毒无穷的错误观点

中科获平安医院殊荣 http://www.txbyjgh.com/axhd/m/2081.html

编者按:编程的资源、课程很容易免费获得,这是其他学科无法比拟的。但很容易接触,并不意味着学起来就很容易。编程是创造力和科技的组合,而创造力从来不容易获得。本文来自编译。

大多数编程的初学者,都看到过这样的信息:“编程很容易,每个人都可以学会”,并附带一些威胁性的信息,表示编程不应该有守门人。我在这里要告诉你,这不是真的。编程是很难的,编程不是每个人都能做的,就目前而言,每个人也许都能做,但大多数人绝对不应该做。大多数反驳都不假思索却又空洞、浅薄,他们认为编程就不应该有门槛。但现在,我成了守门人。

编程是无障碍的

愚蠢的人说,编程很容易,每个人都可以做,实际上说的是编程领域的可及性。如果能连上互联网,那么获取资源、学习编程就相当容易。没有其他科学像计算机科学有那么多资源,而且大部分都是公开的——计算机科学在互联网上蓬勃发展,虽然一些地方有门槛,但大部分内容都可以免费获得,计算机科学也在这种可及性上茁壮成长。你可以下载编译器、编辑器、集成开发环境,甚至你可以访问文档,与人讨论问题等等。这是一个大社区,它的受欢迎和开放程度是人类历史上任何其他科学都无法比拟的。

确实,你不需要知道很多,一些东西在你接触编程领域的前0分钟就能了解。编程的可及性是其他科学无法比拟的。

但是,仅仅因为一个人可以很容易地获得一些东西,并不意味着它就很容易。仅仅因为我可以在煎蛋中加入三种东西,并不意味着我就是顶级厨师。我可以做几道菜,但我从未说过烹饪很容易——烹饪是艰苦的工作,需要对细节的耐心,需要大量的知识和经验。

编程是创造力和硬科学的奇特结合;没有人说过创造力是“容易的”。有些事情对有些人来说很容易,另外一些事情则不然。

有些编程很容易

毫无疑问:有一些事情是容易的。有些事情你可以做,例如可能只需要花一天时间,你就能做一个博客应用程序的骨架。在学习HTML的前几个小时里,人们可以(在指导下)做出一个专业的网页。在StackOverflow上提出问题并找到解决方案很容易,人们还可以很容易地将解决方案复制并粘贴到他们的网页中。

有一大堆针对初学者的教程——甚至是针对完全零基础的初学者,其中的一些就是由初学者创建的。对于初学者来说,编程是一个非常受欢迎的地方,初学者走在非常肥沃的土地上。

然而,“容易”是因人而异的。我觉得非常困难的事情,别人却可能觉得非常容易。我觉得很容易的事情,别人却感到不知所措。对一个人来说,什么是容易的没有共识,但对每个人来说,都有容易的事情,这取决于他们遵循的学习路径。

大多数编程都很难

事实是这样的:如果一个人开始做任何比简单的网页或简单的demo程序更复杂的事情,就会变得很困难,而且碎片越多,任务就越复杂,越令人难以承受。而这正是每个“编程很容易”的鼓吹者没有说明的情况。解决编程难题是很难的。

事实上,如果处理得当,大多数编程的事情都很难,即使是那些可能看起来很简单的事情。这是因为有复杂的部件,你必须把它们放在一起并使它们能正常运作。而最难的部分是一个人必须从头开始写这些复杂的部分。事情看起来很容易,有5年、10年、20年经验的人做的事情对他们自己来说很容易,因为他们以前做过很多次,因为他们犯过所有可能的错误,或者思考过这些问题,并确保他们不会落入这些陷阱中。

但是,每一个程序员都曾经花一整天的时间来解决一个bug,而这个bug往往只需要一些很简单的东西来修复,比如添加一个“;”字符,或者把改成=。作为一个初学者,没有人告诉你这些情况,没有人告诉你你遇到的是一个库bug,还是一个限制性的硬件错误。

冒名顶替和积极的鸡汤

你是否听说过冒名顶替综合症?如果你听到的是“编程很容易”的言论,你可能听到的就是冒名顶替综合症,理论上讲,冒名顶替者综合症是指当一个人觉得自己能力不足,无法胜任自己所从事的工作,他们的成功是受之有愧的;但当人们真正遇到那些看似影响生产力的瓶颈时,当他们不得不修复或打磨自己的编程工作时,或者他们无法在StackOverflow上快速搜到答案时,你就明白什么是冒名顶替综合症了。

积极的、“这很容易”的鸡汤并没有告诉你,当事情发展到极端困难时,当需要勤奋的工作和持续的努力时是什么情况。当别人无法给你答案,在这些时候,你不得不重新考虑整个架构,因为你写的有些代码就是有问题。

我说过,编程领域是初学者的沃土,确实如此。但是对谷物来说是肥沃的土地,对杂草来说也是肥沃的,甚至更适合杂草。我们需要讨论利用这块肥沃土地的人。有大量初学者的地方,也有大量的人在利用这些初学者。

这种情况有很多表现形式,有些人甚至不知道自己在做什么,他们只是本能地骗人,夸大自己的技能。通常你会看到他们是这样的:在软件开发方面有两年的经验,写书和提供建议,有时价格不菲。你会在会议上看到他们,或用文章宣传,或用其他类型的媒体,他们有时打多元化牌,有时打初学者牌,推波助澜,利用轻易上当的大批初学者。

而且,一个人不需要是一个彻头彻尾的骗子,就可以呈现出一个欺骗性的领域专家的形象,他所需要做的就是玩弄人们的感情。例如,你告诉一些人们想听的但错误的话。必须找到最能奉承你的受众的关键词——“编程”是其中之一,因为编程是一个相当模糊的东西,但“程序员”这个标签是一个相当受追捧的标签,就像“资深”这个标签被那些想在20岁出人头地的人所追捧一样。因此,你需要找到能让受众满意的标签,并以一种明确无误的方式应用于你的受众。这就是为什么作为受众的你总是会遇到“编程很容易”(并不是),或“HTML是一种编程语言”(并不是),或“编程主要是关于善用谷歌/StackOverflow搜索”这类观点。

利用初学者的这些人往往会为了强调自己的观点,而先树立一个敌人。“不要相信任何人说的相反的观点”是一个简单而有效的方法,可让受众接受你的思维模式。守门人也是一个很好的词,凸显了特权的论述总是很吸引人,守门人在压制你,他们不公正,他们在欺骗你,告诉你这一切很困难,他们让你做艰苦、无聊的工作。这个技巧不仅仅适用于编程,它是操纵民意的一个简单技巧,只要有敌人,就树立一个简单的东西来召集受众反对,比如反对编程门槛。但不管这种技巧如何,主要的一点是在沟通的内容上要模糊,这样要反驳这种沟通就很棘手。

来看看我的例子。关于“编程很容易”到目前为止我写了几千字,而且还没有写完。“HTML是一种编程语言”就有点复杂了,因为“编程”的含义在不断变化。关于HTML的纯技术真相是,它不是真正意义上的编程,而是一种标记表现语言。它是对一个网页的外观和内容的不完整描述。在任何与网络有关的项目中,HTML都是一个必要的工具,但HTML不是孤立使用的,它不是你进行编程的地方。但是,如果有人告诉你HTML是一种编程语言,他们的辩解通常是关于你对“编程”的定义,但他们很少有兴趣潜心研究自己话语的真正含义。正如我所说的,“编程”是一个标签,就像任何荣耀的标签一样,这个标签让人们,尤其是无能的人,表现得非常有自我防卫意识。

“任何人都可以编码”//“编码并不难”的对话让我觉得蠢得要命。

当人们不得不对自己的编程进行审查,并对其进行修复、改进,使其在现实世界的场景中发挥作用时,他们会感到自己很傻,而这些场景有时是你在第一次写代码时没有料想到的。当你真正需要帮助的时候,积极乐观并不能帮助你。它唯一能做的就是为你提供勇气,但只靠勇气能做什么呢?积极乐观和未经证实的说法会以很快的速度屈服于编程工作的严峻现实。

这条推文所回应的原发帖人说,“人们认为我很聪明,因为我是一个程序员”,“编程主要是关于善用谷歌和修复bug”。但编程真的不是这样的,这种夸张的、局限的观点告诉我,她在软件开发方面的经验相当少。最可怕的是什么?她正在建立一个名为“thecodinginterview.


转载请注明:http://www.aierlanlan.com/rzgz/7863.html

  • 上一篇文章:
  •   
  • 下一篇文章: 没有了