Основные возможности платформы Hexlet не доступны в вашем браузере. Пожалуйста, обновитесь.

Блог Хекслета

Обучение, саморазвитие и истории успеха
,

ОбучениеПодстановочная модель вычислений

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

Здравствуйте! Сначала прошел задание, а затем у меня появился вопрос. Проверка strings.toUpperCase(char) === char сначала переводит символ в верхний регистр, а потом сравнивает с ним же? Или происходит просто проверка без перевода? По логике кода происходит второй вариант, но все же хочу уточнить, т.к. согласно учебника .toUpperCase() именно переводит в верхний регистр.

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

Читать дальше →
,

РазработкаСреды разработки. Мужики, выкатывай!

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

  1. Производство (разработка)
  2. Сборка
  3. Контроль и испытания
  4. Доставка
Читать дальше →
,

ОбучениеРазбор решения задачи "Вес Хемминга"

function hammingWeight($weight)
{
    $array = str_split(decbin($weight));
    $amount = 0;
    foreach ($array as $value) {
        $amount += $value;
    }
    return $amount;
}
  • Понятно ли с первого взгляда что делает функция (основываясь на содержимом)?
  • Попробуйте воспроизвести определение понятия "Вес Хемминга" глядя только на код
Читать дальше →
,

ОбучениеГрань между "как" и "зачем"

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

В этой заметке я хочу рассказать о проблемах, с которыми я столкнулся на данном этапе обучения и как Хекслет начинает помогать мне в их решении. Почему начинает, а не уже помог? Потому-что речь пойдет о только недавно запущенном нововведении на Хекслете, именуемом "Проекты". Если коротко, то это работа над (внезапно) небольшим проектом под руководством опытных разработчиков в течение одной-двух недель. У нас ушло две недели, а писали мы консольное приложение.

Читать дальше →
,

ВебинарыВебинар 16: Интервью с Катериной Гавриловой

Говорим с Екатериной Гавриловой из DigitalHR http://digitalhr.ru/

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

Читать дальше →
,

Истории успехаПрограммирование. У меня получилось с 3 раза

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

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

Первые два года учебы я был сильно заинтересован программированием, математикой и техническими дисциплинами за исключением, разве что, физики. Я был лучший в группе по информатике и всему, что было с ней связано, но не могу сказать, что у меня была сильная мотивация кодить днями и ночами, изобретая что-то грандиозное. То есть я соображал, но в прикладном плане абсолютно не применял ничего. Да и что можно было изобрести, зная паскаль на школьном уровне (а примерно в такой мере нам его и преподавали). А после того, как преподаватель дисциплины "Программирование" отчитал курс лекций, он выдал гениальную фразу - все, что мы сейчас изучили, устарело 15 лет назад.

Читать дальше →
,

РазвитиеКак учиться программировать: 6 вещей, которые я понял, учась на Хекслете

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

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

Неважно какой язык изучать первым.

Не нужно тратить сильно много времени на выбор и мучаться этим. Берите Ruby, Python, JavaScript, PHP, Java, Lisp, да хоть паскаль - не ошибетесь. Для начала вам все равно нужно будет освоить базовые вещи, такие как циклы, условия, переменные, функции, объекты, рекурсию и т.п. Я когда-то в школе немного программировал на всяких бейсиках и C++, но к тому времени, как решил стать программистом, все это успешно забыл. Начал изучение с Java, и не жалею, после этого было легче изучать менее строгие языки, вроде JS и PHP. Минус Java в том, что, если вы живете не в милионнике, вам будет весьма сложно найти на нем работу джуниора и получается, что обучение какое-то бесцельное, ради обучения, что сильно снижает мотивацию. В то время, как изучая PHP, например, уже очень быстро можно брать какие-то первые заказы на фрилансе, устроиться на первую работу в веб-студию и т.п., т.е. начать на своем хобби зарабатывать первые деньги, что очень сильно поднимает мотивацию.

Новички так серьезно подходят к вопросу “Какой же язык программирования выбрать”, будто им предстоит подписать договор с дьяволом, и всю жизнь писать только на этом единожды выбранном языке. Лично для меня просветлением стало, когда я увидел профили высокооплачиваемых программистов на бирже Upwork, почему-то очень во многих из них было написано примерно следующее - могу Django, могу Rails, а еще Meteor и Angular, да и Spring тоже. И Joomla само собой.

Потом я порасспрашивал некоторых знакомых (и малознакомых) программистов об их карьере, и увидел некий паттерн, которого раньше не понимал. Человек может, например, год работать с PHP, потом уйти на Java, потом плюнуть и выучить руби, стать RoR разработчиком, и в итоге заняться Node.js или Clojure. Любой нормальный программист знает несколько языков хорошо и десяток поверхностно. Поэтому не ломайте голову, не пытайтесь выбрать Самый Лучший Язык и строчить для этого тысяча первый вопрос на тостере. Просто берите любой язык и прочитайте по нему хотя бы одну книгу/пройдите курс. Попытки выбрать Самый Лучший Фреймворк из той же серии.

Про первую работу.

Очень многие программисты начинают свою работу с весьма непрестижных компаний и крошечных зп. И это нормально. Но это сложно принять, особенно тем, кто решает “пойти в айти” уже не в юном возрасте, имея семью и детей. Мифам об огромных зарплатах программистов зачастую способствуют школы программирования, которым нужно продавать свои курсы и в итоге на своих лендингах они крупным шрифтом пишут какие-то заоблачные цифры, вроде “средняя зарплата JavaScript программиста 150 000 рублей”, при этом часто забывают сказать, что такую зарплату получают люди с опытом в несколько лет (или даже десяток лет), которые могут решать реальные сложные задачи, а вам после их курсов на старте светит тысяч 30 на испытательный срок, и это в Москве. А то и вообще попросят бесплатно поработать. За опыт и еду. Не нужно бояться идти на непрестижную и малооплачиваемую работу, потому что как только вы официально начнете работать программистом, даже за 20 тысяч в месяц, ваша привлекательность в глазах других работодателей и HRов сильно вырастет. На старте работу никто не мешает менять хоть каждые 3-6 месяцев, каждый раз уходя на бОльшую зарплату и более интересные задачи.

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

Обучение не может быть простым.

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

Лично я долго (слишком долго) учился на всяких курсах из серии “посмотри на меня, делай как я”. Когда начал учиться на хекслете, у меня от некоторых заданий просто мозг кипел, да и сейчас кипит. Одно задание я пытался сделать 3 дня. Но в итоге я прокачался, и теперь могу решать более сложные задания, чем мог раньше. Мне кажется, именно в этом должна быть цель хороших курсов программирования. Не в том, чтобы натренировать вашу память на запоминание 1000 функций из какой-то библиотеки. А в том, чтобы заставить мозг напрягаться и с каждым днем решать все более сложные задачи.

Про code kata.

На определенном этапе (почти сразу после изучения основного синтаксиса одного из языков программирования), нужно набить руку в решении простых (хотя бы простых, для начала), алгоритмических задачек. Есть десятки разных сервисов, где это можно делать - codewars.com, exercism.io, hackerrank.com и т.п. Проскочить этот этап не получится. Если вы зашли на codewars и просто не понимаете, что от вас хотят и как решать даже самые простые задачи первых уровней, срочно вливайтесь в какое-то сообщество, где есть программисты и единомышленники, изучающие программирование, и где можно будет задавать вопросы и получать помощь. Одно из таких мест - слак чат Хекслета. Если вы не научитесь решать эти простые задания, вероятность резиста того, что вы сможете решать какие-то реальные рабочие задачи, крайне мала.

Не нужно зубрить названия функций.

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

К примеру, если я знаю, что обычно в языках программирования есть возможность привести строку к нижнему регистру. C этим знанием общей концепции, если я захочу например, писать на COBOL, просто загуглю - tolowercase in Cobol. И вуаля Lower-case(Item-1). Если я буду много писать на каком-то определенном языке, я загуглю основные функции по 100 раз, и на каком-то этапе уже их запомню.

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

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

Тупить - это нормально. (с) Елена Малышева.

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

То есть люди, которые занимались программированием много лет, иногда тоже не могут самостоятельно разобраться в какой-то новой фиче, и совершенно не стесняются просить совета и помощи. Однако, с вероятностью 99% предварительно они пытались сами решить эту проблему, обратились к Google и Stackoverflow, но безуспешно.

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

Читать дальше →
,

Обучение10 советов о том, как более эффективно учиться на Хекслете

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

  1. Во время просмотра урока я набираю код из видео себе в обычный .md файл, этот код и служит конспектом урока, если что-то нужно особо отметить, то пишу короткий комментарий.
  2. Бывает такое, что открываешь задание к уроку, и вообще не понятно, что от тебя требуется и как это решать. Что можно сделать, чтобы разобраться в задании:
    • Прочитать код в файле с тестами, построчно, и разобраться, что конкретно происходит в каждой строке, какой создается объект, какой метод вызывается, к какой переменной обращаются, какие условия проверяются в тестах.
    • Почитать вопросы-ответы к этому уроку, возможно у кого-то эти вопросы уже возникали.
    • Есть задания, где за вас написано уже много кода, и в нем достаточно непросто разобраться. Здесь можно на бумаге составить для себя схему классов, методов, свойств, чтобы лучше понять, как это работает.
    • Если разобраться никак не получается, добро пожаловать в слак чат Хекслета, там вам ответят и помогут выполнить задание.
  3. Советы по дебагу своего кода. Если в целом понятно, как делать упражнение, но тесты никак не проходят, вылетает какая-то непонятная ошибка ит.п.
    • Вы можете в любом месте своего кода проверять значения переменных через var_dump, print_r (PHP), console.log(JS). В код тестов тоже можно дописывать проверки, или свои тесты. Это бывает очень полезно.
    • Часто ошибки бывают из за того, что функция возвращает не то, что ожидалось. Например, строку вместо массива, ит.п. В этом случае тоже пригодится var_dump, чтобы проверить.
    • Если вылетает какая-то конкретная ошибка, загуглите ее, посмотрите, в какой строке программы она возникает, и проверьте значения переменных до ее возникновения.
  4. Если смотрите урок или делаете практику, и совершенно ничего не понятно, пора сделать перерыв. Информация в уроках не сложная, просто она новая и часто необычная, мозгу нужно время (и иногда достаточно большое), чтобы выстроить какие-то новые связи. Через это ощущение “ничего не понимаю” я проходил очень много раз, через некоторое время придет понимание, и ориентироваться в теме будет гораздо легче.
  5. Иногда, когда мне надоедает тема, я люблю перепрыгнуть на какой-то другой язык программирования, например если у вас затык в PHP стэке, можно пройти несколько уроков курса Ruby, или Java, это помогает как-то освежить восприятие и потом вернуться с новыми силами.
  6. Иногда использую hard-mode - не читаю само задание и руководствуюсь только тестами, бывает довольно интересно попробовать так пройти практику.
  7. Если вы по какой-то причине надолго забрасывали обучение, то вернуться может быть непросто, иногда смотришь на код задания, которое выполнял полгода назад и не понимаешь, что тут вообще происходит. В этом случае я просто начинаю проходить уроки так, как будто вообще не проходил этот курс, полностью смотрю все видео начиная с первого, сбрасываю прогресс упражнений, даже не читая свой старый код, и делаю заново.
  8. Параллельно с курсами хекслета можно и нужно читать книги по программированию, лично я лучше понимаю тему, когда узнаю ее из нескольких источников. Для PHP это Зандстра “Объекты, шаблоны и методики программирования”, по JavaScript читаю Н.Закас “JavaScript для профессиональных разработчиков”.
  9. Очень выручает вот этот плагин для гугл хрома, использую его для любых обучающих видео, потому что их всегда хочется ускорить: https://chrome.google.com/webstore/detail/video-speed-controller/nffaoalbilbmmfgbnbgppjihopabppdk?hl=en, им можно ускорять/замедлять практически любые видео. Хекслетовские видео смотрю примерно на скорости 1.20-1.30, больше уже сложно воспринимать.
  10. Еще юзаю плагин Block Site, у меня там собраны всякие пожиратели времени вроде новостных сайтов и соц.сетей, и стоит переадресация по умолчанию на хекслет :) https://chrome.google.com/webstore/detail/block-site/eiimnmioipafcokbfikbljfdeojpcgbh
Читать дальше →
,

ВебинарыВебинар 15: Stateful vs. stateless

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

Читать дальше →
,

ВебинарыВебинар 14: Интервью с Вадимом Макеевым (Opera)

Интервью с Вадимом Макеевым, также известным как pepelsbey. Вадим — веб-евангелист в компании «Opera Software», в прошлом — разработчик в Яндексе.

Сайт Вадима: https://pepelsbey.net

Читать дальше →