Эрик Пепке, CTO Kipple, рассуждает о том, как стать профессиональным разработчиком. Techrocks.ru приводит адаптированный перевод материала.
Сразу хочу сказать, что никогда не встречал никого, кто знал бы С++ в совершенстве. Я сомневаюсь, что даже Бьёрн Страуструп разбирается в C++ на 100%. Ведутся серьезные дискуссии о том, возможно ли вообще формализовать семантику C++, то есть, реально ли это с математической точки зрения.
Во любом случае, существует пять вещей, на которые следует обратить внимание, чтобы стать экспертом в области компьютерного программирования. Я не хочу вводить вас в заблуждение, поэтому не собираюсь предлагать что-либо, чего я не пробовал делать сам.
Во-первых, нужно программировать много, очень много. Старайтесь работать над разными проектами. Из всех ключевых и самых полезных моментов, на который стоит обращать внимание, важнейшим является так называемый «design pattern». Это искусство придумывания имен для вещей, которые вы уже знаете. Это принесет вам много хороших идей. Но самое главное то, что таким образом вы станете экспертом в том, чем занимаетесь. Работайте над бесплатными проектами с открытым исходным кодом. Создавайте свои собственные проекты ради удовольствия. Снова и снова.
Вторым важнейшим аспектом является глубокое понимание алгоритмизации и программирования в целом. Программирование -весьма необычная смесь математики и логики. Изучите алгебру логики, но не только основы, а всю систему. Поймите, как логика может применяться в алгебре. Изучите алгоритмы и структуры данных, графы и теорию множеств. Изучайте сложность и оптимизацию алгоритмов, а также дискретную математику. Освоение систем счисления тоже не будет лишним. Это все не просто способы научиться программировать, это способы понять, как работают ваши программы.
Третье – понимание того, как работает компьютерная техника. Это та часть, которой большинство программистов пренебрегают; и, из-за этого, многое теряют. Попробуйте поработать на «Arduino» (платформа с открытым исходным кодом, созданная для быстрой и легкой разработки разнообразных электронных устройств). Напишите что-нибудь под эту платформу.
Понимание людей является четвертым аспектом. Это все выходит далеко за пределы «UI» и «UX» или как бы это ни называлось на этой неделе 🙂 Каждой программой, которую вы создадите, будут пользоваться люди, даже если вы единственный, кто ее пишет. Изучайте социологию, психологию и когнитивную науку. Изучайте литературу и поэзию, иностранные языки и культуры.
Пятый аспект, как ни странно, понимание различной технической фигни, потому что вы будете встречаться с ней очень много раз. Вы услышите много слов, которые используют в профессиональном жаргоне, а также много методологий разработок. Вы поймете, что в действительности вы знаете все то, что, как вам казалось, вы не понимаете. Просто это все называли другими словами.
Если вы сделаете все вышеперечисленное, то узнаете то, чему вас никто не научит. В этом и лежит разница между экспертом и просто компетентным рабочим в области компьютерного программирования. Вы поймете основополагающие принципы. А главное, вы увидите возможности, которые другие не видят.
Выполнение того, что я перечислил, сделает из вас эксперта. Но сразу оговорюсь, становиться экспертом совершенно не обязательно, даже если вы собираетесь строить карьеру. Большинство людей, которые нанимают других, сами не являются экспертами, именно поэтому и нанимают экспертов.
Но если вы твердо решили дойти до конца, тогда вот вам еще немного информации.
Когда вы занимаетесь чем-то, усложняйте себе задачу. Различные фреймворки и библиотеки решают много задач и инкапсулируют большое количество логики внутри методов. Но вы не сможете по-настоящему оценить функцию, не зная, как она работает внутри и что значит работать без нее. Работайте над проектами, используя ограниченное количество ресурсов. Создайте двоичный сумматор, используя домино. Сделайте функциональные цифровые часы с неоновой лампой, резисторами, конденсаторами, диодами, проводами и настенной вилкой. Создайте машину Тьюринга из блоков LEGO.
Вот несколько проектов, которые я рекомендую вас сделать:
- Рекурсивное решение головоломки «Ханойская башня»
- Текстовая приключенческая игра.
- Настольная игра, как «Tic-Tac-Toe» или «Reversi».
- Интерактивная анимированная видеоигра, такая, как «Space Invaders»
Я выбрал эти проекты отчасти потому, что они интересные, с другой стороны, они могут многому вас научить.