Что отличает действительно великих программистов?

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

Но что у них общего?

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

Дело в том, что действительно талантливые программисты освоили основы. Эта основа – то, что позволяет им создавать великие вещи и предлагать прорывные идеи.

Подумай о пирамиде. Он имеет большое основание, но постепенно становится все меньше и тоньше по направлению к вершине.

Изучение основ программирования формирует эту базу. Все взлетает оттуда.

Так каковы эти основы? Основываясь на своем опыте и программистах, опыт которых я изучал, я рассматриваю основы программирования как подход, состоящий из двух частей.

Решение проблем Extraordinaire

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

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

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

Затем они разбивают каждую проблему на маленькие, управляемые части – нападая на каждую часть по очереди, а иногда и визуально, рисуя картинку, чтобы сделать ее «реальным миром».

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

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

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

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

Я адаптировал некоторые идеи Поли к программированию, например, понимание проблемы.

«Проблема должна быть понята» – пишет Поля.

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

Для каждой проблемы я вынимаю лист бумаги и пишу ответы на следующие вопросы: что я решаю или пытаюсь решить найти? (Неизвестно); что мне дали? (данные); и какие ограничения или детали мне нужно знать? (состояние).

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

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

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

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

Художник делает эскиз картины перед началом работы над самой картиной. Строитель использует чертежи и чертежи, чтобы построить дом.

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

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

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

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

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

Прежде всего, цель для меня состоит в том, чтобы войти в проблему с целью и поддерживать это чувство цели повсюду.

Несмотря на лучшие планы, проблемы все еще остаются серьезными, и я все еще застреваю. Чтобы стать отличным решателем проблем, нужно время.

Это навык, над которым я все еще работаю, и он определенно стоит усилий. Вы видите разницу.

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

Функции короткие и четкие. Каждая строка кода имеет определенное назначение; пух удаляется.

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

А как насчет вашего компьютера?

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

Я собираюсь «за кадром» узнать, что происходит, например, когда я использую встроенную функцию.

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

Знание «почему» расширяет мои контекстные знания и делает меня более информированным программистом.

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

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

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

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

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

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

Это наконец щелкнуло, как только у меня был некоторый контекст. И для рекурсии, и для уроков информатика преодолела пробелы в моих знаниях.

Слишком часто основы отталкиваются. Прогресс может быть медленным, и люди, как правило, выбирают более «забавные» вещи для работы, когда им предоставляется возможность.

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

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

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

Проще говоря, есть много, чтобы выиграть и мало, чтобы проиграть, осваивая основы.

Подписывайтесь на наш Telegram канал

Источник: Novator

Оставить комментарий

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