是的,编程软件可以 部分提高你的智商, 因为它直接有利于逻辑数学和创造性智力,这些智力在 IQ 测试中得到评估。
然而,重要的是要记住,开发软件将有利于我们的认知能力 只要他们在这样的环境中成长 良好做法和持续学习.
当我们已经有一些开发软件项目的经验时, 我们已经建立了一个理想软件项目的心智模型。 但, 正确开发软件项目应该走哪条路?
它可能看起来并不复杂,因为今天我们可以在互联网上找到大量有关方法论的信息 用于开发项目,例如 SCRUM 或极限编程。 两者都为我们提供了在项目开发周期中必须遵循的指导方针,以保证组织、 观察、时间估计和/或团队合作。
从我们的角度来看:
组织起来(以提高生产力)可能比学习编程困难得多 (对于那些刚刚开始的人),或者掌握一项新技术,因为真正困难的是在结构化的情况下开发项目, 精确,最重要的是,易于阅读。
阿尔伯特·爱因斯坦曾经说过:
如果你不能简单地解释它,你就没有很好地理解它。 Albert Einstein
这适用于任何学习领域,例如,特别是软件开发, 如果我们不能简化我们的代码,并以第三方可以理解我们项目的方式组织它, 我们做得不好。
从这个意义上说,我们必须通过实践来实现 塑造我们的思维方式和做事方式. 此外,考虑到不同框架提供的指南和指南, 应用于我们项目的方法论和/或专家建议。 然而,一刀切地遵循这些指导方针既不明智也不有效,因为 我们必须灵活而不是严格.
接下来,我将描述 2 良好的软件开发实践 你必须考虑 在执行您的项目时,我相信最终会改变您的思维方式。
使您的代码尽可能简单!
说那不是新闻这不是新闻 计算中最大的问题之一是复杂性. 所以, 简单也许是软件世界中最重要和最有价值的品质.
随着时间的推移,计算机已经成为我们生活中不可或缺的一部分,并给社会带来了非常重要的变化。 简而言之,计算机之所以有用,是因为它们使我们能够以更少的资源做更多的事情,也就是说,使用更少的人力资源完成许多任务。
让我们想象一个人想要完成计算机在一年中所做的所有操作。 或许,这将是他生命中剩余的岁月,那就是计算机的真正价值在于它的速度和准确性。 这太棒了!
然而,它不可能如此完美,因为计算机有一个重大缺陷:它们总是有缺陷。 也许我们还没有意识到他们通常存在软件缺陷的次数。 如果经常使用的任何东西都像计算机一样出问题,我相信我们现在早就摆脱了它。
大多数(如果不是全部)我认识的人每周至少会受到 1 次伤害,甚至更多。 我可以说每周至少有一次我遭受了某种失败,或者我发现一个朋友或 同事经历了同样的事情,大约 10 年。
如果我们算一下,根据我的经验,有 480 种不同形式的故障。这并不酷。
谈到软件,只有一个原因:糟糕的程序员。
大约 5 年前,我怀疑原因是糟糕的程序员;然而,我不是很确定。 现在,在 IT 领域多了几年的经验,并通过他们的出版物咨询了许多专家,我不再怀疑。
我完全可以说,无数的计算机故障都应该归咎于糟糕的程序员。
责怪软件程序员似乎有点不公平, 当我认识的绝大多数致力于高级软件开发的人时更是如此 是具有相当发展逻辑思维的专业人士。
如果绝大多数程序员都是相当有逻辑的人,为什么会有这么多错误的软件? 电脑出错的主要原因是 复杂.
建造一台计算机可能是我所知道的最复杂的过程,因为每一秒过去, 可以执行数百万个任务。 此外,它有数千个必须同步工作的部件。 计算机单独使用的操作系统由数千万行代码组成。 只有 Windows 10 拥有超过 400 万个文件和超过 50 万个文件夹。下面的捕获证明了这一点:
为了给你一个更完整的想法,下面我详细介绍 每个操作系统的代码行数:
Operating system | 代码行 |
---|---|
Linux 3.1 Kernel | 15 百万 |
Windows XP | 40 百万 |
Windows 7 | 40 百万 |
Windows Vista | 50 百万 |
Debian 5.0 (基本代码) | 67 百万 |
Mac OS X «Lion» | 85 百万 |
我给你留下了一个额外的信息:
Facebook 大约有 6100 万行代码,Google 大约有 20 亿行代码. 当然,谷歌提供的大量服务证明了这一点。
计算机运行的软件是如此复杂,以至于可能没有人能够完整地理解代码。
因此,编程必须存在于寻求降低复杂性从而实现简单性的环境中。 通过这种方式,我们确保任何没有非凡才能的程序员都有能力继续开发应用程序。 否则,代码可能会达到如此高的复杂度,以至于几乎不可能对其进行处理。
简而言之,这就是编程的意义所在:“将复杂性降低到简单性”。
一个好的程序员会创造出易于理解、维护和易于发现错误的东西。 但是,不要将简单性与更少的代码行或不再使用现代技术混淆。 有时简化您的代码会增加您的代码行数,只需确保始终对其进行记录即可。
一般来说,更先进或现代的技术自然倾向于简单。 您只需要学习如何正确使用它们,这通常是一个挑战。
总的来说,我们认为以简化的方式编程比快速完成需要更多的时间。 例如,当我们必须完成工作中的某些任务时,我们通常会尝试快速完成,而不会停下来思考和计划。 我们大错特错了!
花更多时间思考问题以寻求最大程度的理解更有效率 并且通过这种方式能够提出一个简化的解决方案,而不是快速开始编写解决方案然后停下来 意识到实施变得不必要地复杂。
你只需要环顾四周,就会意识到复杂性已经成为软件程序中的一个大问题。
有许多应用程序在尝试向可怕的、 他们变成了巨大而复杂的代码怪物。
如果您想了解更多关于简化编程的基础知识和方法,我建议您阅读以下书籍。 我爱它!
始终运行测试。它们不是可选的!
实际上,它们不应该是一种选择,但是,许多程序员仍然在不使用任何类型的软件测试的情况下开发应用程序, 因为代码错误是由最终客户报告的。这通常是普通自由职业者的情况。
没有测试的编程就像没有安全带开车或在没有安全网的情况下进行空中飞人特技。 目前,始终测试软件的良好做法仍有待采用。
让我们回顾一下由于没有或不正确使用软件测试而发生的一些前因 这造成了数百万美元的经济损失,在某些情况下还夺去了数十人的生命。
我相信下面提到的事件会让你反思并更加重视软件测试。
事情发生在1983年,当时苏联的导弹探测警报系统报告说,美国已经发射了5枚导弹,并且正在进行中。
幸运的是,负责人凭直觉和/或标准没有下令立即攻击作为回应, 因为他们认为这次袭击很奇怪,因为它脱离了背景,也因为导弹的数量, 因为它们不是通常用于突然袭击的那些。
几小时后,确认一切都是由导弹雷达系统错误引起的。 当时有点难以检测的错误,因为系统混淆了云层中的太阳反射 在某个位置用导弹。 一小会儿,最终引发了第三次世界大战。 但是,在彻底完成以下工作后可能会避免这种情况:
两者都是作为软件测试一部分的实践。
发生在 1962 年,造成大约 1850 万美元的损失, 水手 I 是水手计划中第一个尝试飞越金星的任务,遗憾的是没有成功。
起飞后 293 秒, 软件错误 被找到。这个错误改变了它的轨迹。 几秒钟后,必须发送命令摧毁它,从而防止它的坠落造成进一步的损坏。
后来确定了错误:代码中的一个公式被错误地编程。
你会问自己, 什么是放射治疗直线加速器? 直线加速器是从不同角度发射针对肿瘤的 X 射线束的机器。 最棒的是,这些设备能够定制 X 射线以适应肿瘤的形状,而不会影响周围区域。
1985 年 6 月至 1987 年 1 月期间,AECL(加拿大原子能有限公司)生产的 Therac-25 是至少 6 起事故和 3 人因接受过量辐射而死亡的参与者。
经过调查,得出的结论是 Therac-25 事故的主要原因如下:
如果这还不够,Therac-25 运行的软件的开发方式几乎无法识别 并自动修复错误或错误。
发现的其他原因:
信不信由你,约克城舰,一艘因其卓越的战斗能力,尤其是其技术装备而获得无数奖项的战舰, 由于软件错误,最终被拖走。
1997 年 9 月,一名机组人员在数据库字段中输入了一个零,导致系统在内部执行除以零, 这导致了错误,最终导致缓冲区溢出,最终导致船舶推进系统出现故障。
1993年,英特尔发布了一款计算失误的新处理器。 尽管它们很难被注意到,因为为了能够看到错误,您必须执行需要相当精确结果的操作。
尽管如此,英特尔还是损失了大约 3.5 亿美元,这还不算对其形象造成的难以量化的损害。
我刚刚向您提到的 5 个案例只是不幸发生的无数计算机错误中的一部分 付出了生命的代价,并且清楚地证明了需要编写正确的软件。
软件工程师,以及结构工程师或土木工程师,应该能够通过一种方法来证明, 所需功能的可靠性和实现。
您可能已经注意到,测试是任何项目的基本组成部分。它们不是可选的!
根据艾琳·伯恩斯坦 (Ilene Burnstein) 在她的书中所说: “实用软件测试”, 软件测试有3个主要过程:
如果您不花时间构建您的测试用例,那么您就做得不对。 构建具有各种场景的测试用例以模拟尽可能多的用例非常重要。 不幸的是,不可能模拟 100% 的场景。
Edsger Dijkstra 说得好:
该测试可以显示程序中存在错误,但不能显示它们不存在 Edsger Dijkstra (1972年图灵奖)
但正如由于测试执行不正确导致计算机错误的案例很多一样,也有一些成功案例值得奖励。
今天,开发与任何其他产品一样可靠的软件是可能的,随着自动化能力的提高,更是如此。
巴黎地铁的 14 号线是全自动的。火车是无人驾驶的,由软件运行。这条铁路线于1998年投入运营。
虽然是真的,但不能保证完美,几十年过去了,没有发现任何故障, 感谢详尽的测试工作,最终在测试过程中执行了大约 86,000 条指令。
一般而言,在某些国家/地区,仅对可能造成人员损失的系统才需要严格的测试流程,以保证软件完美无缺。
由于成本高昂,绝大多数软件公司拒绝实施如此严格的测试流程 这意味着,也因为很难找到经过足够培训和经验的专门从事测试的专业人员来完成这项任务, 因为软件测试过程的实施可能与软件本身的开发成本相同或更多。
当然,“轮到你才学会”,就像INTEL一样, 由于其处理器软件的计算错误,该公司不得不损失约 3.5 亿美元。 错误导致它成为软件测试研究预算最高的 IT 公司之一。
开发软件项目的路径包括 3 个明确定义的阶段:
在验证阶段,负责工程师确保软件符合规范中的计划, 他们这样做的方式是“测试”。
一旦软件通过验证,就假定它满足所有规范,并重复验证周期最后一次 以验证正确的验证。
上面描述的有很大的不一致问题,下面我给大家解释一下:
当前验证方法“测试”的最重要问题是它不能确保软件符合 规格中注明。 这是因为规范的起草是用自然语言完成的,术语总是倾向于个人解释, 这会产生歧义,这些歧义肯定会在项目结束时被注意到。
第二个问题是 你永远无法测试所有可能的情况. 假设我们有一个小软件:
由于输入数据是无限的,因此不可能测试所有可能的情况。 这就是为什么软件测试仅在选定案例的样本上运行的原因,这些样本有时是非常小的样本。 这些不良做法的原因是财务和时间限制。 总之,我们不能在完成测试阶段后就说软件是正确的,因为没有足够的证据支持这种说法。
如果我们试图做到合乎逻辑(如果我们致力于计算领域,我们应该这样做),通过确认软件是正确的 在完成测试阶段并且没有发现任何错误后,我们会产生所谓的: “呼吁无知谬误”.
在逻辑中,argument ad ignorantiam,或argumentum ad ignorantiam,也称为无知的召唤, 是一种谬误,在于维持一个声称没有相反证据的命题的真(或假), 或声称对方无法或拒绝提供令人信服的相反证据。 这种对模棱两可的不耐烦经常受到以下短语的批评: “没有证明不是没有证明”,即犯了这个谬论 当一个命题的真假是根据对它的现有无知推断出来的。 呼吁无知谬误
您可能已经注意到,在以传统方式应用软件测试时,我们会犯很多错误,而且很多次 我们不知道这会产生什么成本。
只是给你一个想法:
正如我们已经看到的,主要问题之一是规范的模糊性,当用自然语言表达时, 缺乏准确性和逻辑数学意识。一种解决方案是使用形式语言,没有歧义的余地。
通过使用正式的方法开发我们的软件项目, 软件的属性和/或功能的确定性是通过演绎来保证的,换句话说,通过数学(p -> q)。
这种形式化方法需要更多的时间和预算来准备,因为在详细说明规范时需要更高的精度,反过来必须清除歧义,以便在创建代码时可以根据其规范证明其可靠性。
达到这一需求极限以创建优质软件似乎与现实相去甚远。 然而,目前有一些公司将他们的系统建立在正式开发的基础上,通常这些公司专注于关键领域,在这些领域,一个小错误可能意味着立即丧生。
但是,在小范围内,这样的需求水平是不赚钱的;我们至少必须遵守常规测试。
下面我分享了一系列良好实践的出版物,如果您正在寻求开发高质量的项目,则不应错过这些出版物。
学习就像是我们大脑的燃料。
在大学或大学里,我们一直在牺牲学习,但这还不够, 因为无论您从事何种职业,传递新信息的每一分钟都会出现。
总会有新的东西需要学习。
需要记住的是,当我们学习时,我们的大脑会受到神经结构变化的影响。
现代研究表明, 大脑具有永久改变和变形的能力 (可塑性), 不仅在儿童中,而且在成人中。
大脑的这些变化可能是由 持续学习的良好做法, 重组突触连接,有时还会创建新的连接。
以前人们认为一个人的大脑越大或越重,它就越聪明。 然而,最近的研究表明,智商较高的人的神经网络密度较小,但同时也更有条理。
对于这项研究,智商是根据以下因素计算的:
以下是有关该研究的更多信息:
Erhan Genç 领导的团队分析了 259 名年龄在 18 至 40 岁之间、身体健康的男性和女性的大脑, 为了测量大脑皮层中的树突,即细胞在智力表现中用来相互交流的神经细胞的延伸部分。
在研究之前,所有参与者都接受了智商测试。在研究了树突之后, 确定智商越高,大脑皮层中的树突越少。
换句话说,得出的结论是,更聪明的人不仅拥有更多的神经元,而且神经元之间的树突连接也更少。 在认知的时候。这意味着它们的神经网络密度较低。
这些研究通过 500 人的样本进行了验证,并得出了相同的结论。
该研究的主要作者 Erhan Genç 总结道:
智能大脑的特点是一个薄而高效的神经网络。 这有助于在最大限度地减少神经活动的同时实现高水平的思考。 Erhan Genç
正如我在前面的段落中已经提到的, 编程会影响实践者的思维方式, 从这个意义上说,它直接影响我们的 心理能力.
但它是通过什么方式做到的呢?让我们来看看。
程序员的想法与其他人非常不同, 因为总的来说,他们往往比平均水平更合乎逻辑、更理性,尽管不一定。
既然我们决定学习编程,我们就必须选择从哪种语言开始。 虽然这样的选择并不完全正确,因为一般来说,绝大多数 那些致力于软件开发世界的人在没有任何经验的情况下选择了我们的第一语言,或者已经受制于并实际上被迫从强加的编程语言开始。由大学和/或大学的老师进行。
然而,由于我们可以在互联网上找到的信息量,这种限制越来越少 以及对自学学习的高度激励和促进。
编程语言的范式已经塑造了很多人的思想, 在某些情况下比其他情况有更多的限制,这取决于它开始时使用的语言。我的意思并不是说你的母语定义了你的成功或失败,但我的意思是 在我们的思维中插入模式的编程世界开始的范式.
如果您学习使用 COBOL、FORTRAN 或 PASCAL 进行编程,并不意味着您注定要失败。 但是,与现代技术的不兼容以及库或函数的缺乏限制了您的学习和扩展。
我也不是暗示 50 岁以上的编程语言不好。
许多为银行、养老基金经理和保险公司的运营和交易而设计的系统继续使用 COBOL。 看起来他们将在未来很多年继续使用它。
我提到了一些事实,尽管它们看起来令人难以置信,但它们都是真实的。
75% 的业务数据是在 COBOL 中处理的(来源:Gartner)。
全球有 1800 亿到 2000 亿条 COBOL 线在使用(Gartner)。
15% 的新应用程序是用 COBOL (Gartner) 编写的。
Gartner Group
那么从 COBOL 迁移到现代技术系统的成本有多高?
COBOL 系统的更换成本估计为每条线路 25 美元,高达数千亿美元 战术战略组
比尔柯蒂斯说得好:
银行应该坚持使用旧的 COBOL 应用程序,因为它们不存在 Java 等新语言出现的安全和开发问题。 Bill Curtis, CAST COO
我会在下面提到你 编程影响大脑的 3 种方式:
我们开始使用的编程语言只不过是一种工具,它伴随着直接影响您的思维方式的范式和习语。不是一无是处,埃兹格
建立分布式编程的先驱之一 Dijkstra 说:
我们使用的工具对我们的 思维习惯 和, 因此,在我们 思维能力. Edsger Dijkstra
既然您知道我们开始使用的编程语言有多重要,以及我们在编程时使用的所有工具集,我建议您在选择第一种编程语言时首先考虑的是您的舒适度。
如果你刚刚开始,不要被金钱所迷惑。的确,有些编程语言的报酬比其他语言好,但钱不应该是你的目标。如果是这样,我可以建议您开始使用 COBOL、PASCAL、FORTRAN 语言进行编程,这些语言的文档很少,而且目前很少有人实践它,这就是为什么他们在需要的地方获得很高的报酬。
实际上,致力于软件开发不仅会给您的思维习惯和认知能力带来好处,还可以确保未来的经济稳定,因为这是一个目前正在增长的高薪行业。
今天是开始的最佳时机。让我们看看为什么:
据拉丁美洲和加勒比经济委员会(ECLAC)称,拉丁美洲国家将在 2020 年经济衰退后开始增长。
预计 2021 年将增长 3.7%,其中 主要主角将是那些致力于数字世界的人.
正如我们已经提到的,学习对大脑有积极的影响。 从这个意义上说,编程算作一种直接有利于大脑的心理锻炼。
让我们回顾一些背景,这些背景证实了编程对大脑健康的好处:
1991 年的一项调查研究了计算机编程对认知结果的影响,并确定 编程相关领域的学生在智商测试中的得分比平均水平高 16 个百分点.
1999 年的另一项更大规模的研究最终证实,智力活动有助于缓冲个人的认知能力下降。
2009 年晚些时候,一项研究发现,晚年从事大脑刺激活动的人可以降低风险,甚至可以延缓阿尔茨海默氏症和其他类型痴呆症的发作。
2014 年一项名为 “使用功能磁共振成像了解源代码” 当程序员试图工作和理解代码位时,使用功能性磁共振成像扫描来观察大脑活动。
得出的结论是,涉及大脑的 5 个区域:
我们必须记住,参与者要接受 20 行代码片段的审查,这不是一个很大的挑战。这就是为什么在与数学计算相关的大脑区域中没有检测到活动的原因。
可以注意到的是通常与语言处理、记忆和注意力相关的大脑部分的高度干预。
编程是最接近拥有超能力的东西。 Drew Houston, Dropbox 首席执行官
在线智力测验
你的智商是多少?