Когда я начал играть на барабанах в детстве, все, что я хотел делать, это сидеть перед барабанной установкой и начинать играть. Как оказалось, требуется много практики, чтобы научиться играть множество разных песен и стилей. В частности, потребовалась работа по трем конкретным направлениям:

  • Во-первых, рудименты: это простые удары и паттерны, которые вы повторяете снова и снова, чтобы улучшить скорость и контроль палки. Это может показаться немного скучным для ребенка, который просто хочет бить по барабанам, но важно укрепить уверенность в своей установке.
  • Во-вторых, вам необходимо развивать свою ритмическую культуру, прислушиваясь к множеству разных стилей, чтобы у вас была обширная коллекция ритмов, из которых можно было бы заимствовать, чтобы построить свой собственный стиль.
  • И, наконец, приходит скоординированная независимость, которая в основном заключается в том, чтобы противостоять импульсу ударить правой рукой по барабану или тарелке, когда правая нога нажимает на педаль. Вы стремитесь к большей независимости между конечностями, чтобы получить больше свободы во время игры.

Итак, какое отношение практика игры к барабанам имеет к программированию в целом и, в частности, к Android? Возможно, немного, но это дает интересную аналогию для молодого программиста, пытающегося стать лучше в том, что он делает.

Как и 12-летний мальчик, которым я был раньше, каждый новый программист просто хочет сесть перед компьютером и сложить несколько строк кода, чтобы получить работающее приложение. Видимый результат, с которым вы можете играть, приносит такое же удовольствие, как и джемовать под ваши любимые мелодии. Но если вы не хотите тратить часы на практику, ваши навыки игры на барабанах останутся очень ограниченными.

Точно так же программирование - это больше, чем просто один навык, и вам нужно будет поработать над несколькими различными аспектами, чтобы стать всесторонне развитым и опытным программистом. Итак, над какими навыками вам нужно работать?

Рудименты

Любой ритм на барабанах можно разбить на более мелкие части, маленькие строительные блоки, которые образуют необычайно замысловатые паттерны, когда вы собираете их вместе. Но если вы хотите начать со сложных бросков и набивок, вы скоро разочаруетесь в сложности. Что вам нужно, так это начать с малого и работать над каждым из этих крошечных элементов один за другим, прежде чем вы сможете объединить их и разработать несколько фанк-битов. Вы не строите башню за один присест: вы строите ее кирпич за кирпичиком.

Точно так же программирование - это искусство (или это наука?), Которое пытается решить определенные проблемы с помощью алгоритмов. Для разных проблем требуются разные решения, но элементарные строительные блоки, которые вы будете использовать, существуют уже несколько десятилетий. Это классические структуры данных и алгоритмы, о которых вы узнаете - это ваш класс CS 101.

Массивы, списки, деревья или графики - это те объекты, с которыми вы должны привыкнуть. Если вы хотите улучшить свою игру, вам нужно узнать об этих структурах и о том, как эффективно ими управлять. Вам также нужно будет изучить наиболее распространенные алгоритмы: сортировка списка, обход графика, обработка очереди с приоритетами ... Просто поэкспериментируйте с ними, чтобы развить тот инстинкт, который помогает вам распознавать закономерности в проблемах, которые вы пытаетесь решить, и направляет вас к решению самые эффективные и проверенные временем решения.

Чтение классических книг по алгоритмам, таких как The Algorithm Design Manual от Steven Skiena, поможет вам в этом аспекте, но практика важна. Такие веб-сайты, как Codingame, могут предоставить отличный практический материал в виде забавных упражнений, которые вы можете решить на любом языке программирования, который вам удобен.

Ритмическая культура

Хороший барабанщик должен уметь играть более чем в одном стиле. Но даже если вы хотите специализироваться на определенном жанре, вам нужно будет слушать бесчисленное количество часов музыки, чтобы получить широкий выбор битов, из которых вы можете рисовать, чтобы создать свою собственную подпись. Точно так же программист должен знать свою платформу программирования и язык как изнутри, так и снаружи, чтобы справиться с любой возникающей проблемой.

Уделите время чтению документации, публикаций в блогах, просмотру конференций, погружению в код других людей, чтобы изучить инструменты торговли и наполнить свою сумку все новыми и новыми приемами. Изучите хорошо известные библиотеки и фреймворки, чтобы убедиться, что вам не придется каждый день изобретать велосипед, а вместо этого вы сможете использовать то, что уже доступно для вас.

Если вы хотите быть разработчиком Android, существуют бесчисленные списки библиотек, которые стоит знать, включая, среди прочего, Dagger, OkHttp, Retrofit, RxJava, ButterKnife, Timber, Lottie…

Скоординированная независимость

Наконец, одна из самых больших проблем, с которой сталкивается барабанщик, - это координация и независимость. По сути, ваше тело устроено таким образом, что ваши конечности, как правило, работают вместе естественно, что ограничивает то, во что вы можете играть. Ваши руки плотно связаны с ногами, и ваши первые уроки игры на барабанах очень часто сводятся к тому, чтобы научиться ослаблять эти отношения. Возможность играть одновременно разные паттерны каждой конечностью дает больше свободы и творчества в игре на барабанах.

Тесная связь - это тоже проблема, которая может ограничить ваши возможности программирования. Принципы чистой архитектуры и шаблоны проектирования - вот что поможет вам предотвратить зависимости там, где они не нужны. Любая программа может очень быстро превратиться в непослушную тарелку спагетти-кода. Сохранение чистоты и разделение проблем - ключ к долгосрочной программе, которая может свободно развиваться для поддержки новых вариантов использования и требований.

Важным принципом здесь является то, что ваши бизнес-правила являются центральной и наиболее ценной частью вашей программы, и этот код должен быть максимально защищен от загрязнения деталями, такими как реализации баз данных, зависимости фреймворка или особенности платформы. Способность координировать все эти кирпичики и заставлять их работать вместе, сохраняя при этом достаточно независимый основной бизнес-код, - вот что действительно отличает хорошего программиста.

Так что загляните в сообщества разработчиков программного обеспечения, принципы дизайна или книги по архитектуре, чтобы понять основы хорошего дизайна. По этим вопросам существует множество замечательных книг, написанных такими людьми, как Мартин Фаулер, Кент Бек или Дядя Боб Мартин (Чистая архитектура Роберта К. Мартина - это то, что нужно прочитать).

И последнее: меньше значит больше

Когда мы завершаем эту аналогию с барабанами, на ум приходит еще один совет. Большинство молодых барабанщиков думают, что могут показать, насколько они хороши, играя чрезвычайно сложные ритмы и стараясь как можно быстрее комбинировать столько ударов. Но по мере взросления они начинают понимать, что часто предпочтительнее играть меньше нот. Тот же принцип применим и к программированию: вы не докажете, насколько вы талантливы, кодируя чрезвычайно сложные алгоритмы, а всегда находя простейшее решение данной проблемы. Недавно я прочитал, что хороших программистов следует замечать по тому, насколько простым выглядит код, который они создают. Или, как говорил Сент-Экзюпери:

«Совершенство достигается не тогда, когда больше нечего добавить, а когда нечего убирать»