2 черты отличных программистов



Книга 2 черты отличных программистов

Что отличает отличных программистов от хороших? Это вопрос, который занимает меня с тех самых пор, как я только начал учиться программировать.


Рассмотрим основные черты, которые присущи отличным программистам. Они не похожи на остальных, и результаты говорят в их пользу.


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


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


Программирование — это не то, чем отличные программисты занимаются изредка, лишь время от времени. И это не то, что они делают с девяти до пяти с понедельника по пятницу.


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


Один мой знакомый программист первые два часа дня (шесть дней в неделю) посвящает проектам или проблемам, работа над которыми помогает ему самосовершенствоваться. В это время он занимается изучением интересных для него тем или оттачиванием своих навыков и умений. Он умудряется втиснуть это «программирование для себя» в свой рабочий график — обычно до начала работы, пока повседневная рутина не поглотила его.


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


Каков ваш пробег программиста?


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


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


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


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


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


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


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


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

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


План программиста


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


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


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


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


В конце дня я открываю Evernote на своём компьютере и составляю расписание на следующий день. Так во вторник вечером я составляю расписание на среду.


Вот вам пример:


С 6:30 до 8:30 — программа.


  • Просмотр карточек Anki для Python в течение 20 минут.
  • Решение проблемы “Word Cloud Data”.

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


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


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


Кроме того, ежемесячный план наполняет смыслом мои ежедневные планы. Задаёт определённое направление с конкретными целями, к достижению которых надо стремиться. «Так, сегодня я изучаю JavaScript. Он нужен мне для достижения цели этого месяца: завершить проект Х».


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


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


Гораздо легче проявлять настойчивость и упорство, работая над чем-то поддающимся решению.


Система решения проблем


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


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


Теперь у меня есть система решения проблем, которая помогает разбивать проблему на составляющие, вскрывая все её слои.


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


Разобравшись с постановкой задачи, сосредоточиваемся на следующем выполнимом этапе, и только на нём.


  • Понимание вводных данных и ожидаемых результатов выполнимо.
  • Выявление пограничных случаев выполнимо.
  • Написание псевдокода выполнимо.
  • Решение упрощённой версии проблемы выполнимо.

Думаю, вы уловили идею. Этапы могут быть непростыми, но они выполнимы.


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


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


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


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


Но его ответ поразил меня. «Ух ты, отличная проблема!» — сказал он. По мере того как он вникал в делали, интерес его только увеличивался.


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


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


477   0  

Comments

    Ничего не найдено.