Connect with us

Обучение

8 способов стать лучшим программистом

Настало время серьезно улучшить ваши навыки программирования. Давайте сделаем это!

Анна Гуляева

Опубликовано

/

     
     

Эстер Шиндлер пишет о технологиях с 1992 года, переводя язык технарей на привычный английский. За годы работы в IT она вынесла несколько советов, которые могут стать руководством к обучению программированию. Приводим для вас перевод её статьи.

Настало время серьезно улучшить ваши навыки программирования. Давайте сделаем это!

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

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

1. Напоминайте себе, как много вам нужно выучить

Первый шаг в обучении программированию – понять, что вы ничего не знаете. Это звучит очевидно, но опытные программисты знают, как долго можно преодолевать это заблуждение. Слишком многие студенты выпускаются с высокомерной установкой “Я лучше знаю” уверенные в том, что знают всё и должны доказать это каждому новому коллеге. Другими словами, позиция “Я знаю, что делаю!”, может встать на пути изучения чего-то нового.

2. Перестаньте пытаться доказать свою правоту

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

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

3. “Код работает” – это не конец, а начало

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

Но останавливаться на этом – это сделать моментальный снимок и ожидать, что он будет предметом искусства. Отличные программисты знают, что первая версия – это первая версия. Она работает (поздравляю!), но это ещё не все. Теперь улучшайте её.

Часть этого процесса – понять, что значит “улучшить”. Нужно сделать её быстрее? Проще документируемой? Используемой повторно? Более надежной? Ответ меняется с каждым приложением, но сам процесс не меняется.

4. Напишите его три раза

Хорошие программисты создают работающие программы. Отличные – программы, которые работают безукоризненно. Это редко случается с первого раза. Лучшее программное обеспечение обычно написано три раза:

  1. В первый раз вы пишете программу, чтобы доказать себе (или клиенту), что решение возможно. Кто-то может не понимать, что это просто опытный образец, но не вы.
  2. Во второй раз вы заставляете программу работать.
  3. В третий раз вы заставляете её работать правильно.

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

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

5. Читайте код. Читайте много кода.

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

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

  • Как бы я написал этот блок? Что бы вы сделали по-другому, видите ли вы другое решение?
  • Чему я научился? Как я могу применить этот метод к коду, который я писал ранее?
  • Как я могу улучшить этот код? И если это open source источник и вы уверены, что ваше решение лучше, сделайте это.

Напишите код в стиле автора. Такая практика поможет вам попасть в голову человека, который писал программу. Это может улучшить вашу эмпатию.

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

Предупреждение: легко просто читать много кода, не становясь отличным программистом, как человек, который хочет стать писателем, читает отличную литературу, не совершенствуя собственную прозу. Многие разработчики смотрят на открытые исходники или другие источники, пытаясь “найти ответ”, или просто копируя и вставляя код, решающий такую же проблему. Это сделает вас даже хуже, как программиста, потому что вы просто принимаете чужую мудрость без её анализа. (Более того, этот код может быть полон багов, но так как вы его не разобрали, вы только что импортировали целую кучу багов).

6. Пишите код, а не выполняйте задания

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

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

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

7. Работайте один на один с другими разработчиками всегда, когда есть возможность

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

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

8. Изучайте методы, а не инструменты

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

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

Комментарии
Если вы нашли опечатку - выделите ее и нажмите Ctrl + Enter! Для связи с нами вы можете использовать info@apptractor.ru.
Advertisement
Click to comment

You must be logged in to post a comment Login

Leave a Reply

Обучение

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

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

Анна Гуляева

Опубликовано

/

2 октября 2017 я получила первую зарплату в качестве Rails-разработчика. Я получила работу в компании по веб-разработке, которая до этого использовала Rails всего полтора месяца. На собеседовании я была рада услышать об этом. Но с тех пор мое отношение изменилось и в этой статье я попытаюсь объяснить почему.

Взгляд назад

Я работала веб-разработчиком и ранее, но в начале прошлого года поняла, что недовольна своей карьерой. Я не могла понять, почему так происходит, пока не прочитала статью Three types of programmers, которая перевернула мой взгляд:

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

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

  • Если происходит сбой, его нужно исправить;
  • “Нам нужно начать промоакцию в понедельник”, поэтому работать нужно все выходные;
  • “Мы перенесли все на новый сервер, интеграция сработает, верно?” — “Дайте мне доступ, я проверю настройки.”

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

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

Когда пришло время искать работу, это заняло у меня некоторое время. Мне пришлось забыть о предыдущих проектах и более высокой зарплате. Но была уверена, что найду работу своей мечты. Мое собеседование прошло в среду вечером, и уже в четверг утром меня ждали в офисе. Мне сказали, что моих знаний “недостает совсем немного до junior-позиции”, и пригласили в проект. И тогда мои идеи начали рушиться одна за другой.

Новая работа

Оказалось, что этот проект начался ещё в 2014. В проекте использовались Rails 4.1 и Ruby 2.2.3, а также было много технических проблем, которые не были исправлены уже год. Ничего не тестировалось уже долгое время: в папке было только несколько тестов, и они явно были написаны на ранних стадиях проекта.

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

Как справиться со всем этим?

Существует два уровня проблем: проблемы на уровне компании или проекта и персональные проблемы с уровнем навыков и организацией работы.

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

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

1. Большой незнакомый проект

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

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

2. Нехватка времени на тестирование

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

3. Недостаточная спецификация задачи

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

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

4. Ревью кода в конце задачи

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

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

5. Я не вижу для себя возможности развития

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

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

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

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

Проблемы на уровне компании

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

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

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

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

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

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

 

Комментарии
Продолжить чтение

Обучение

Онлайн-курсы по криптовалютам и блокчейну

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

Анна Гуляева

Опубликовано

/

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

Введение в блокчейн-технологии на базе платформы Ethereum

Бесплатный курс поделен на несколько разделов, посвященных как работе блокчейна в общем, так и конкретным особенностям платформы Ethereum и смарт-контрактов. На русском языке.

Decentralized Applications on Ethereum platform

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

Bitcoin and Cryptocurrency Technologies

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

Digital Transformation in Financial Services

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

IBM Blockchain Foundation for Developers

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

 

Комментарии
Продолжить чтение

Дизайн и прототипирование

Дизайн-перемена: воркшопы дизайнеров Яндекса в 10 городах страны

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

Леонид Боголюбов

Опубликовано

/

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

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

В этом году компания решила попробовать новый формат — его назвали «Дизайн-перемена». Теперь не слушатели поедут к преподавателям, а преподаватели к слушателям. Этой весной ведущие дизайнеры Яндекса проведут бесплатные однодневные воркшопы в десяти городах страны: Воронеже, Екатеринбурге, Иркутске, Казани, Калининграде, Красноярске, Новосибирске, Ростове-на-Дону, Самаре и Ярославле. Воркшопы состоятся в субботние дни в апреле-мае; точное расписание можно посмотреть на сайте «Дизайн-перемены».

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

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

Комментарии
Продолжить чтение

Обучение

Как изучить Deep Learning за 6 месяцев

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

Анна Гуляева

Опубликовано

/

Требования

  • вы должны быть готовы уделять обучению от 10 до 20 часов в неделю следующие полгода;
  • у вас должны быть навыки программирования, потому то вам надо будет научиться работать с Python и облачными вычислениями (опыт самого Python и облачных вычислений не нужен);
  • базовое знание математики;
  • компьютер с доступом в интернет.

Шаг 1

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

Пройдите курс Practical Deep Learning for Coders. Он займет у вас 4–6 недель. В этом курсе надо будет запускать код в облаке. В Google Colaboratory есть бесплатный доступ к GPU. Другие варианты — Paperspace, AWS, GCP, Crestle и Floydhub. Все они достаточно хороши. И не нужно создавать собственный сервер.

Шаг 2

Пора узнать некоторые основы. Изучите математический анализ и линейную алгебру. Хороший обзор матанализа представляет из себя Big Picture of Calculus. Линейную алгебру можно изучить по курсу Гилберта Стренга на OpenCourseWare от MIT. Как только вы закончите с этими двумя курсами, прочитайте Matrix Calculus for Deep Learning.

Шаг 3

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

Шаг 4

Закончите финальный проект. Здесь вы должны выбрать библиотеку глубокого обучения (Tensorflow, PyTorch, MXNet) и создать решение любой проблемы с нуля. Первые три шага должны были дать вам понимание применения глубокого обучения и твердый фундамент для дальнейшей работы. Создание проекта с нуля позволяет лучше освоить инструменты.

Шаг 5

Пройдите вторую часть курса на fast.ai — Cutting Edge Deep Learning for Coders. Этот курс затрагивает более сложные темы, и вы сможете читать последние исследования в этой области.

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

Глубокое обучение: что дальше?

Пройдите Стэнфордские курсы CS231n и CS224d. Это отличные курсы для изучения компьютерного зрения и обработки естественного языка, соответственно. И прочитайте книгу, которая даст вам ещё большее понимание темы.

 

Комментарии
Продолжить чтение

Постеры для разработчиков

Наша рассылка

Каждому подписавшемуся - "1 час на UI аудит": бесплатный ускоренный курс для разработчиков!

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

Вакансии

Популярное

X
X

Спасибо!

Теперь редакторы в курсе.