音乐和绘画如何教我如何编程



译者的话:来自纽约的程序员杨锡江(Yijiang Yang) 谈到艺术如何帮助他练习编码。

编程类似于艺术。 同时,其他形式的艺术,尤其是音乐和绘画,可以教给程序员很多东西。 我希望他们能像他们在适当时候为我提供帮助的方式一样为您提供帮助。

Skillbox建议:两年实践课程“我是PRO Web开发人员”

我们提醒您: 对于所有“ Habr”读者来说,使用“ Habr”促销代码注册任何Skillbox课程时均可享受10,000卢布的折扣。

专注于基础


我们教什么?

如果您喜欢算法,我的意思是说,真的很喜欢,就像您在清晨立即开始递归并分割树,祝贺您这样的事实。 您是一个纯粹的程序员。 但是我们,其余的是普通百姓,有时我们问自己一个问题:为什么解决这些难题? 只是为了顺利通过面试?

实际上,当您练习某事时,您需要了解为什么要这样做。 想获得某些技能? 还是加强弱点?

我相信,程序员的所有这些困惑不仅可以让您获得特定的知识,而且可以更好地理解创建,编写代码的过程的基本要素。 获得或提高基本技能。

至于难题,它们不是解决问题所必需的,而是研究寻找解决方案的过程。 这些是不同的东西。

您如何处理该问题-分成小组件? 什么可以帮助您提高水平? 一些数据库结构与其他数据库结构有什么区别? 基本技能类似于奏鸣曲所基于的主要谐波。

有经验的专业人士知道什么?


我想说一位经验丰富的艺术家不知道秋天如何绘制纽约中央公园。 但是他知道创建图片所需的基本知识。 使用它们,他绘制了风景,结果得到了惊人的美丽画面。

一个有经验的艺术家不知道如何在树上画树叶。 不,他精通各种颜色及其组合。 他知道颜色在画布上的表现。

因此,经验丰富的程序员不必知道React,Vue,Ember或其他框架的所有细微差别。 经验丰富的程序员知道JavaScript如何工作以及浏览器如何工作。 经验丰富的程序员了解函数式编程的好处;他知道为什么在特定情况下React至关重要。

学习基础知识,以上所有内容将一目了然。

生活速写


复制粘贴与来源

我的朋友们,对工艺很认真的艺术家,总是从生活中素描。 这是什么意思? 他们画出他们所看到的一切,并使他们感兴趣的一切。

他们不画照片或模型,而是画自己看到的东西。

当某人从某人的图片绘制风景时,他不是发明而是复制。 在编程中,此行为的等效项是具有Stack Overflow的复制粘贴代码段。

复制粘贴代码将永远不会提供获得基础知识的机会。 复制别人的代码具有相似的含义:您将获得解决方案,但没有经验。 赢得战斗,但输掉战争。

普世知识


基本知识可以称为普遍知识。 如果您尝试自己解决问题,那么您就错了,最后找到了解决方案,那么您就会获得这样的知识。 您研究可以在将来的项目中使用的工作原理。

当“一种尺寸适合所有人”时,很少有常见的决策。 为了获得不同锁的钥匙,您必须工作。 有时候,在没有别人决定的情况下自行完成工作会很有用。

练习


有针对性的重复

当音乐家学习作品时,他不仅尝试从头至尾一次又一次地演奏数千次。 他在工作中寻找弱点并消除它们。

否则,性能将不理想,包含错误的注释(在编程的情况下-错误)。

尽管盲目重复并不是学习某些东西的最佳方法,但集中重复可以使您获得正确的体验。 您可以在自己的弱点上工作并变得更好。

对于初学者来说,盲目重复很有用。 这会发展出肌肉记忆力,在编程的情况下可以认为是认知能力。 之后,您可以继续进行复杂的工作。

高层次的工作


如果您不熟悉任何框架,请练习。 学习它的基本元素,创建一些基本的东西。

选择端口,创建路由,发送请求并响应。 然后重复这个。

当音乐家完成了对乐曲部分的研究后,他不会握手也不对自己说:是的,这已经结束了。 不,他重复此步骤是为了排除错误的可能性。

程序员也是如此:如果您编写一个复杂的程序来解决问题,则可以跳过最简单的语法错误,然后整个机制将无法正常工作。 必须寻找问题。 如果您将语法自动化,则可以减少出现问题的可能性。

然后,您不必担心。 熟练掌握自动技巧的音乐家不必担心演奏音乐会的个人音符。 他专注于整个旋律,而不是旋律的各个元素。

培训和大纲


达芬奇的例子

如果您曾经研究过真正伟大的艺术家(例如莱昂纳多·达·芬奇)的作品,那么您可能知道他们制作了多少草图,草图和培训用画布。 莱昂纳多(Leonardo)以对细节的关注而闻名-他绘制了身体部位,植物,动物,人及其群体的草图。

初学者也经常练习,例如,他们不断画静物。 但是为什么呢,因为他们不是书呆子? 不,这都是针对性的培训。 初学者在处理颜色,光和阴影方面获得了经验和知识。

一些程序员以类似的方式工作,将一个大问题分解为几个小问题,然后对所有问题进行处理。

程序员速写本

在什么情况下使用该功能,我怎么会记得呢? 我是否需要在每个React组件中调用super(),还是值得研究一下ES6类? 如何集成异步HTTP请求?

您可以通过打开Repl或JSBin了解所有这些信息。 小型研究可以加深对更一般事物的理解,学习如何处理大型项目。

当艺术家画苹果或树时,这并不意味着他喜欢某个特定的对象。 他只是简单地计算出小样本,然后使用大样本的经验。

看一下蒙娜丽莎的手-它们在技术方面非常理想。

肖像和依赖树


组成

我认为,许多目的(包括程序员)的主要任务是组合。 这是关于如何以一种获得杰作的方式将商合并为一个整体。

有几种方法可以实现此目的。 其中之一是从具有最小依赖性的层开始。 并且已经从该基础层开始。

如果您与艺术家进行类比,那么他就不会从睫毛开始。 他从入门开始。 相同的睫毛,其位置取决于眼睑的形状和大小。 它取决于眼球的大小和位置,而眼球的大小和位置又与头骨的结构特征有关。 如果我们谈论肖像,整个肖像有很多依赖性。

如果一个元素放置不正确,和谐和正直的印象就会消失。 与软件项目相同。 犯了一个错误之后,您就开始产生破坏所有工作的实体。

一层又一层

创建全栈应用程序时,请注意数据层。 运行测试。 检查所有项目。 只有在这种情况下,您才能确定整个项目的可靠性。 但是起初,有必要了解其本质并了解整体情况。 如果有了解,您可以进行详细处理。

编码器-编码


给每个人自己。 音乐家-音乐,艺术家-绘画。 对于程序员-一个代码。 在本文开头,程序员的工作也是一门艺术。 确实是。 值得记住的是,技能可以而且必须通过实践,学习和探索得到提高。 在实践的帮助下,新手程序员将能够专注于基础知识,改进其创作并最终创建一个与创建者的野心一样大的酷项目。

Source: https://habr.com/ru/post/zh-CN432016/


All Articles