Я прочитал статью на Medium под названием Как в чем-то стать лучшим в мире. Статья познакомила меня со стекингом навыков. Суть статьи в том, что очень сложно попасть в 1% лучших по какому-либо одному навыку, но попасть в 10% лучших по комбинации смежных навыков относительно легко и принесет свои дивиденды.

Я возьму на пример свою цель.

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

  1. Решение проблем / логические рассуждения
  2. Системный дизайн
  3. Компьютерное программирование
  4. Интерактивный дизайн
  5. Управление
  6. Убеждение
  7. Приобретение знаний
  8. Творческое воображение
  9. Рассказывание историй / публичные выступления

1. Решение проблем / Логические рассуждения

Способность понимать стоящую перед нами проблему и находить эффективные способы ее решения.

-Невероятный кодер

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

Мы не можем решать наши проблемы, используя то же мышление, которое мы использовали при их создании.

-Альберт Эйнштейн

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

Так что это номер один в моем списке. Я твердо верю, что люди стоят выше остальных видов из-за их способности решать проблемы.

2. Дизайн системы

Это один из основных навыков построения системы. При написании алгоритмов, проектирующих структуры данных, все идет на низком уровне, и все будет бесполезно, если программист не думает о большой картине. Нет смысла разрабатывать сложный алгоритм, который не добавлял бы никакой ценности решению текущей проблемы. Этот навык, согласно моим исследованиям, может быть достигнут путем реверс-инжиниринга или чтения о том, как устроены вещи, и попыток воспроизвести это самостоятельно, например, если вы хотите знать кое-что о распределенных вычислениях, полезно изучить различные тематические исследования крупномасштабных систем, таких как Netflix, Amazon.com, Facebook, Google, Uber и т. Д., Чтобы найти компоненты или строительные блоки, из которых они созданы, и определить проблему, которую они решают, чтобы вы могли использовать их в своем собственном проекте.

Нет смысла быстро рубить деревья, если вы рубите деревья не в тех джунглях.

- 7 привычек высокоэффективных людей. Стивен Р. Кови. (не его точные слова)

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

3. Компьютерное программирование

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

  • Процедурное / структурное программирование
  • Функциональное программирование
  • Объектно-ориентированное программирование

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

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

- Роберт С. Мартин (дядя Боб) - Чистая архитектура

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

«Тестирование показывает наличие, а не отсутствие ошибок».

Эдсгер В. Дейкстра

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

4. Дизайн взаимодействия

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

Распространенное заблуждение состоит в том, что IxD ограничен пользовательским интерфейсом. Я думаю, что это должно уходить корнями в основной дизайн продуктов, поскольку в конечном итоге продукты создаются для пользователей. Например, как мы можем решить, должно ли действие быть синхронным или асинхронным? мы бы рассмотрели, как поведет себя пользователь, прежде чем принять решение о типе действия (пятое измерение IxD).

Так что это обязательный навык.

5. Управление

Это сложно усвоить, но это важный навык, даже если это домашний проект.

Судя по моим онлайн-чтениям и моему опыту работы в индустрии программного обеспечения (14 лет), вы должны быть осведомлены об управлении проектами, управлении продуктами и портфолио. Будь то в нашей личной или профессиональной жизни, это поможет нам лучше управлять своими физическими и умственными ресурсами и заставит неуклонно двигаться к цели.

Этот навык включает в себя управление временем, управление приоритетами и управление ресурсами (вашими деньгами, здоровьем).

Я хочу стать лучше в этом и убедиться, что продолжаю совершенствоваться, и предлагаю систему, которая будет работать для меня.

6. Убеждение

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

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

7. Приобретение знаний

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

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

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

8. Творческое воображение.

Это также навык, в котором мы сознательно пытаемся развить свои творческие способности и задействовать правое полушарие. Причина, по которой это занесено в мой список, заключается в том, что весь этот анализ и вещи, которые я перечислил выше, очень тяжелы для левого полушария, и иногда требуется творчество и воображение, чтобы прийти к лучшему решению или, по крайней мере, увидеть альтернативные решения проблемы. По этой теме достаточно литературы, и первое, что я услышал об этом, - это «Думай и богатей». пользователя Napolean Hill.

”Благодаря способности творческого воображения конечный разум человека имеет прямую связь с Бесконечным интеллектом. Это способность, через которую получают «догадки» и «вдохновение». Именно благодаря этой способности человеку передаются все основные или новые идеи.

- Наполеонова гора

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

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

9. Рассказывание историй

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

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

В ближайшие недели я найду инструменты и способы вооружить свой арсенал, чтобы улучшить свои навыки и держать вас в курсе, ребята.

Я новичок в написании статьи, поэтому хотел бы услышать ваши отзывы в разделе комментариев.

Ура, невероятный кодер