编程到底难在哪里?

我的看法:程序员的核心技能是短期记忆力 (short term memory [wikipedia] - Short-term memory is the capacity for holding a small amount of information in mind in an active, readily available state for a short period of time.),这也是区别一个优秀程序员和普通程序员的重要指标。

程序员需要学习很多新东西:程序语言的原理、语法、基本库和框架的了解,以及领域知识等等;还要在工作中积累包括程序架构上、工程上、工作方法上的各种经验。但是我觉得这些都不是核心,如果把一个程序员比作一台计算机,上面提到的东西都是数据,都是可以录入的(或许录入速度有快慢之分);而衡量一台计算机的优劣,真正关键的是处理能力的参数,例如处理器的主频和内存的大小等等,这些硬件指标映射到程序员身上代表着什么呢?对于程序员来说,一定有一些核心的思维能力起到决定性作用,换句话说,如果把智商看作一个多维向量,其中一定有某一个或一些维度是对程序员是至关重要的。

程序员在编写代码的时候,要在头脑中构建好一个程序的模型,包括数据结构和算法,再把这个模型转化成代码。在此过程中,这个模型一直存于头脑的短期记忆中,并且可能需要不时地刷新。一旦受到外界干扰,这个模型就可能消失,必须花很大力气重新加载,有人把这个模型比作纸牌屋,因为它实在太容易坍塌。所以程序员编程的时候都很怕干扰,因为一旦受到中断,再次恢复原来的工作效率需要一段预热的时间。更加困难的地方在于,这个模型并不是静态的,它是会随时间演变的,程序员要经常思考程序执行的过程(用自己的大脑扮演CPU的角色),根据不同的条件对模型作出变更。编程序这个脑力劳动,其实就是在大脑的易失存储中,维护和完善一个具有时间和空间维度的模型的过程。

所以我猜想,一个合格的程序员和其他脑力劳动者的一个主要区别可能就在短期记忆这一块:或者程序员的短期记忆空间较大(一般人是 7+2/-2样东西,但程序员有时需要把一个庞大的系统放在脑子里),或者短期记忆维持时间较长(写代码常常是连续多个小时的工作,在这样长的时间里在脑中维持一个模型是很耗费能量的),或者这块记忆体的读写速率高(优秀的程序员想到一个问题时,能很快定位到程序模型中的具体位置)。当然,这些纯属猜测,需要心理学的实验来证明。

我最近读了Coders At Work,这是一本国际上最顶尖的15位程序员(或者叫大师)的访谈录,看完以后,我发现这些人有一个特点,就是都对软件工程的某些方法(比如设计模式等)嗤之以鼻。我觉得这不是巧合,软件工程的一些方法就是为了让各种水平参差不齐的的程序员都能理解复杂的代码,以便他们能在一个软件项目中合作。我们采用各种抽象方法(面向对象、设计模式等等)来降低每个代码单位的复杂性,就是为了让每一个这样的单位(类,对象等)都能装载到我们的短期记忆中而不溢出。而对于那些大师,这些抽象毫无必要,他们能把一大块程序载入大脑,理解得清清楚楚,摆弄地游刃有余。在我看来,他们和普通人的差异就在这里。

当然,也有人说过脑子笨的程序员才能成为好程序员,因为他们短期记忆小,所以不会写那种上百行的函数(spaggetti code),代码的模块性自然都比较好。这里的“好程序员”,应该指的是软件项目里的模范代码工人,而不是Coders At Work中那些天赋异秉的大神们,而软件业要发展,可能还是要靠这些有着超强存储能力的大脑吧。

时间: 2024-08-19 17:41:31

编程到底难在哪里?的相关文章

自学java到底难不难?做好这几步,少走3年弯路

自学java到底难不难?其实学习java说难不难,说简单也不简单.如今互联网十分发达,各种学习资料,视频,文档都可以在网上找到.可以说如今是一个全民自学的时代,你要你有决心和时间,足不出户便能学习很多知识.特别是java资料,基础视频教程等在网上几乎一抓一大把.首先来说一下自学java需要哪些东西:1.要有充足的时间和学习能力学java不是一蹴而就的,是一个不断打基础然后学习新知识的过程.在自学过程中,刚接触java的时候是很乏味并且痛苦的,因为万事开头难,在前期毫无基础的时候,需要花费很多时间

编程真难啊

编程真难啊 上周,在Sun的Java论坛上出现了一个这样的帖子,这个贴子的链接如下:http://forums.sun.com/thread.jspa?threadID=5404590&start=0&tstart=0 LZ的贴子翻译如下: 大家好,我是一个Java的新手,我有一个简单的问题:请问我怎么才能反转一个整数的符号啊.比如把-12转成+12.是的,毫无疑问这是个简单的问题,但我弄了一整天我也找不到什么好的方法.非常感谢如果你能告诉我Java有什么方法可以做到这个事,或者告诉我一个

软考软件设计师到底难不难?

软考全称计算机技术与软件专业技术资格水平考试,是由国家人力资源和社会保障部(原人事部).工业和信息化部(原信息产业部)领导的国家级考试,其目的是,科学.公正地对全国计算机与软件专业技术人员进行职业资格.专业技术资格认定和专业技术水平测试.该考试分为 5 个专业类别,并在各专业类别中分设了高.中.初级专业资格考试,囊括了共 28 个资格的考核.通过考试获得证书的人员,表明其已具备从事相应专业岗位工作的水平和能力,用人单位可根据工作需要从获得证书的人员中择优聘任相应专业技术职务. 先介绍下我自己,我

为什么很多大学生都会觉得编程很难?

现在大学常见的情况就是进入计算机专业就读的学生,最初至少有一大半对真实的软件开发完全不了解,是"一张白纸".不幸的是,学了四年之后,许多张"白纸"又变成了许多罐"浆糊",带着对软件开发可能是畏惧,也可能是无所谓,但绝对不是喜欢的感触离开校园. 编程真的那么没劲?那么难和枯燥?其实编程的看法可总结为两句:何以解忧,唯有编程!编程其实是很有趣很好玩很实用并很有成就感的一件事,为什么会有这么多的学生觉得编程很难?问题在于学习过程中的"正向&q

三个问题告诉你,开发一个App到底难不难?

App软件开发是一件非常专业的技术性的工作,所以大众总是有一些常见的困惑,比如"为什么开发App要花这么多钱?",或"为什么开发App要花这么长时间?"或"app开发的难点到底在哪里?".自APICloud定制平台上线,我们就接到了无数个客户类似的询问.因此,小编在这里,用非常通俗的话去解释一下这些问题. 首先,我们先理解一下客户的这些问题的本质: App开发到底是什么? 一句话来解释,开发一款App就是从构思到实现的过程.这个过程具体包括什么呢

编程问题难解决,学会提问是关键!

引言:自学编程是个困难的事情,因为你可能找不到人来帮你解决编程问题.幸运的是,我们有互联网,所以尽管你个人并不认识任何程序员,你还是可以向真人提问编程问题,并且得到真实的(好)答案.不过获得问题答案的关键在于在什么地方.什么时间,以及如何问问题.本文选自<一路编程>. 什么地方 找到正确的地方问编程问题可能和问对问题一样重要.如果你跟错误的人问了正确的问题,也许得到了答案,但你不会得到一个好答案.因为你想要一个好答案,就需要知道在哪里问问题. 1. 打电话给朋友 如果你是因为没人教你.指导你或

零基础转行学Java到底难不难?

74%的人认为不难 有人曾经做过统计,询问500多已经参加工作的 Java开发者,"学习java是否困难?"有74%的人认为不难,说难学的仅占26%,那么这74%全部都是聪明人,智商比普通人高吗?显然不是的. 说到底Java,它只是一种语言,仅此而已.跟我们平时学习母语,英语并无不同,只是他的适用对象是计算机,手机等非生物,但基本的控制结构什么的,所有的语言都差不多. Java前途光明 Java是一种可以撰写跨平台应用程序的面向对象的程序设计语言.具有卓越的通用性.高效性.和安全性.广

少儿编程到底学什么?

作者:肖雪峰            微信公众号:编程摇篮         QQ群:805737577 培养计算机思维,是少儿编程的核心. 当前,AI(人工智能)如日中天,机器人炙手可热. ·       2017年,国务院印发<新一代人工智能发展规划>中要求推广编程教育: ·       同年,浙江宣布把编程加入高考的选考科目: ·       2018年1月,教育部将编程语言.算法等划入高中新课程标准: ·       紧接着,教育部<教育信息化2.0行动计划>中提出高中小学生和

微信春晚红包的10亿个红包,到底难在哪儿?

4800倍的挑战 今年微信红包方式与去年用户与用户之间互发红包相比,摇红包的方式对业务量来说是一个极大的爆发,光是除夕10:30送出的一波红包就达到了1.2亿个,已经是2014年除夕夜峰值的4800倍之巨(2014年峰值每分钟被拆开红包数量仅2.5W个)!发10亿红包,难在哪里? 微信团队总结下来有三大难点:快——如何保证用户快速摇到红包?准——如何保证摇到的红包能成功拆开?稳——如何保证拆开的红包能分享出去? 大量用户在同一时间摇红包,瞬间产生每秒千万级的请求,这个量级的请求如果不加以疏导处理