Кодеры vs инженеры: как не остаться «кодировщиком» на всю жизнь?

В эпоху популярного тренда «войтивайти» с новой силой вспыхнула дискуссия о том, кто сегодня приходит в индустрию — «кодеры» или инженеры, кто из них на самом деле нужен компаниям и и за кем будущее в профессии. Как не остаться «кодером» на всю жизнь и совершить качественный скачок в инженеры-программисты, рассказали основатели курса cron.is Юрий Петранков, Илья Яскевич и Игорь Куценко.

— В чём разница между «кодером» и инженером-программистом?

— Инженер-программист — это инноватор, который с помощью технологий не только создаёт что-то новое, но и постоянно ищет способы, упрощающие решение однотипных задач. Закончив программировать модуль, он уже думает о том, как его ускорить, сделать оптимальнее, безопаснее и пр. Основатели Google создали поисковик, потому что знали, что смогут «заставить» его работать быстрее и лучше, чем у конкурентов (Yahoo и Lycos).  

А вот кодировщик не создаёт ничего, он пользуется готовыми решениями, день за днём выполняя одно и то же. Такие люди тоже приносят пользу, но их бич — невысокая зарплата по сравнению с первыми и отсутствие карьерного роста. Пример такого специалиста — PHP-программист, создающий только интернет-магазины. Это не значит, что PHP — плохой язык (профессионалы создают нём поразительные вещи), просто так сложилось, что это лучший пример кодера, пишущего примерно одинаковый функционал на одном и том же движке.

— Как понять, к какому «классу» разработчиков принадлежишь?

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

А вот кодировщику ближе стабильная, неспешная и предсказуемая работа. Алгоритм такой:

  • Пройти тренинг/курс по интересующей технологии (фреймворку)
  • Получить практику/стажировку
  • Пройти собеседование в компанию
  • Работать с 9.00 до 18.00 до пенсии

Взгляните на следующий код:

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

С точки зрения трёх базовых принципов ООП всё верно: код декомпозирован на объекты.

С точки зрения популярных паттернов проектирования код использует паттерн «одиночка» (singleton).

Но личный опыт, полученный на болезненных ошибках, или целенаправленное изучение шаблонов проектирования GRASP подскажут:

  • Строка 1: сразу в глаза бросаются «магические числа». Число 4, а также строка «Оплачено» вносят неясности в код, затрудняют дальнейшую отладку. Необходимо использовать константы или перечисления.
  • Строка 1: шаблон проектирования «одиночка» в данном коде выступает как антипаттерн. Он увеличивает «связность» кода (coupling), обязывает текущий класс использовать конкретный тип «Order» и его конкретную реализацию. Гораздо эффективнее было бы применить принцип инверсии зависимостей для получения коллекции order’ов.
  • Строка 1: тут же мы видим признак недостаточной зацепленности (Cohesion) класса «Order». Судя по всему, он выполняет не только роль инкапсуляции данных о конкретном order’е, но и роль хранилища всех order’ов, а то и вовсе содержит логику доступа к базе данных. Функциональность этого класса слишком «расплывчата».
  • Строка 4-6: классическое нарушение принципа «информационного эксперта»: текущий класс обязан знать и о нюансах реализации типа «OrderItem» и о нюансах типа «Product». Изменения в типе «Product» заставят переписывать текущий класс. В данном случае, расчет суммы order’а следует разместить в самом классе «Order». Более того, расчёт суммы элемента order’а («OrderItem») следует разместить в классе «OrderItem».

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

Чтобы видеть все эти проблемы в коде, вам необходимы определённые фундаментальные знания.

— Что имеется в виду под «фундаментальными знаниями»?

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

Для большинства из нас информатика ассоциируется со школой, набором текста в Microsoft Word и рисованием в Paint. Но слово «информатика» переводится на английский язык как Сomputer Science. Именно Computer Science необходимо знать для «качественного скачка» или, другими словами, превращения кодера в инженера-программиста.

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

Заметьте, что в списке перечисленных дисциплин нет популярных фреймворков ASP.NET MVC, AngularJS, Laravel и других. Все они функционируют, опираясь на фундаментальные основы информатики.

— Что конкретно, по-вашему, нужно знать, чтобы стать хорошим разработчиком?

— В ИT существует два типа знаний: узкоспециализированные (по определённому языку, технологиям или фреймворку) и фундаментальные (по разделам информатики).

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

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

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

Когда-то существовали тренинги по Windows Server 2003, Visual Studio 2003, .NET Framework 1.1 (Everett), PHP 4 и т.д. Сейчас они бесполезны, их невозможно применить ни в одном реальном проекте. Но, если вы взглянете на реализацию движка MySQL или любого другого, то увидите АВЛ или красно-чёрные деревья, которые неизменны на протяжении  десятилетий. То же самое и с алгоритмами поиска путей юнитов в играх, топологией построения сетей, call-stack архитектурой, а также архитектурой современного железа. Мало что изменилось более чем за 40 лет.

Фундаментальные знания не устаревают, а время, потраченное на их освоение, даёт дивиденды.  

— Почему многие, с вашей точки зрения, пренебрегают этими знаниями?

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

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

— К слову, один из ваших преподавателей два года проработал в Google. Какое там соотношение инженеров и кодеров?

— Стоит начать с того, о ком именно идет речь: в Google есть несколько разновидностей работников:

  • Googler
  • Vendor
  • Contractor
  • Temporary

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

Что касается трёх оставшихся групп, сказать сложно, в их наборе участвуют посредники и только финальное интервью проходит непосредственно с представителями Google. Уровень знаний у этих инженеров порой меньше, чем у «гуглеров», но всё равно — они должны быть инженерами.

Каждый работник Google — это высокомотивированный специалист, которому не сидится на месте: ему хочется разрабатывать, разбираться, учиться. Учиться без конца — это суть человека, без которой нельзя попасть в компании такого уровня. Некоторые инженеры Google сидят на работе по 10, порой 16 часов, потому что это им действительно интересно. И для этого «весёлого» времяпрепровождения компания создаёт всевозможные условия. При этом, никто не заставляет вас работать более 8 часов — люди делают это исключительно по своему желанию.

— Можно ли ожидать, что «кодеров» заменят роботы? А инженеры-программисты рискуют?

— Стоит обратиться к исследованию оксфордского университета: профессия инженер-программиста выглядит достаточно перспективной и «безопасной». В исследовании Оксфорда за 2013 год было установлено, что инженеры-программисты имеют 8-процентный шанс на автоматизацию в ближайшие 20 лет. И, конечно же, инженеры-программисты не единственные, кто рискует. В исследовании прогнозируется, что 47% всей занятости в США, скорее всего, будет автоматизировано к 2030 году. Другими словами, учиться на инженера-программиста нужно и как можно скорее.

«Мы учим не языкам программирования, мы учим программировать»

— Создавая курс, вы имели в виду, что программист не может самостоятельно «переквалифицироваться» из кодеров в инженеры? Или пытались облегчить ему задачу?

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

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

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

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

— Речь идёт о теории?

— Мы говорим не только о теории. За время обучения человек проработает несколько тысяч строк кода, оттачивая свои способности на задачах, которые спрашивают на интервью такие топовые компании мира, как Microsoft, Google, Amazon и Facebook.

— Учите ли вы конкретным языкам программирования и фреймворкам?

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

— Кто ваши преподаватели?

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

— Хватит ли на усвоение всех этих материалов двух месяцев обучения?

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

— Можно ли понять фундаментальные темы информатики без высшего образования в сфере Computer Science?

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

— Для кого всё-таки предназначен курс и кто ваши сегодняшние слушатели?

— Курс отлично подходит для студентов, программистов с опытом, кодировщиков, желающих стать инженерами-программистами, а также людям, тем или иным образом связанным с ИT.

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

У нас учатся парни и девушки от 17 до 35 лет. Студенты, люди с 6- и 10-летним опытом разработки. Среди наших клиентов, например, присутствуют сотрудники компании Wargaming — являясь специалистами одной из самых престижных компаний, они растут и совершенствуются.

За время существования курса никто из наших студентов не бросил обучение. Это говорит о том, что наш формат нравится и нужен людям, желающим развиваться.

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

— За созданием курса стоит 10-летний опыт и обобщение всех знаний, которые получил каждый из нас за время своей карьеры. Было разобрано, переработано и исправлено множество информации. В большинстве своих объяснений мы апеллируем к вещам, которые разъясняли сами их создатели.

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

На логичный вопрос, «зачем уделять столько времени рекурсии?», можно ответить так: алгоритмы сортировок, поиска, деревьев и графов в большинстве своём являются рекурсивными. То же самое касается алгоритмов парсинга (разбора) компилятором языков программирования. В конечном счёте, большинство вещей существующих в информатике, сводится к рекурсии. Также, чтобы инженер мог оценить скорость работы рекурсивной программы и потребляемую ей память, необходимо знать, как работает рекурсия на самом «низком» уровне.

Тоже самое касается деревьев, графов и других структур данных. 99% людей не напишут «с головы» удаление узла из АВЛ-дерева. В курсе эта тема даётся так, что вы никогда не забудете, как это сделать. Потому что мы рассказываем ту суть, которую вкладывали авторы в эту процедуру. А зная суть, вы всегда сможете написать данный код без «зазубривания».

— Делитесь ли вы полезными материалами бесплатно?

— На нашем сайте можно найти видеоурок с базовыми концепциями Big O.

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

Фото: Cron.is

Эта публикация подготовлена в партнёрстве с обучающим центром Cron.is.

Что такое партнёрский материал?

Источник: ИТ курсы Cronis
Новые комментарии
Адекватное восприятие критики ещё один признак профессионализма. Вместо того, что бы просто включить БанкИТ в список мероприятий, почему то удаляете вполне себе обычные комментарии, с вполне уместной критикой информации, изложенной в статье, и оценками уровня её подготовки, без каких-либо оскорблений или других непотребств, из-за которых комментарии конечно же следует удалять.Комментариев не относящихся к теме статьи, с флудом или оценкой ресурса и его редакции масса. Почему удаляете только эти? Удаляете только те, которые действительно отражают картину происходящего? А главное, что дальше? Чем после рекламы пива и золотого граммофона, удаления комментариев, вы удивите нас ещё? Блокировкой аккаунтов читателей? Да и уже б просто удаляли комментарии и всё. Так не хватает ума даже основание соответствующее придумать. В приведенных выше комментариях не обсуждались ни администрация, ни модераторы. Обсуждался профессиональный уровень автора(ов) этого материала. Если вы не видите разницы, и свое же соглашение не умеете правильно применять и трактовать, что же мне поделать? ;)
mihail_che
19.10.2017 в 13:05
dev.by рекомендует: какие ИТ-мероприятия посетить во второй половине октября

Обсуждение

Missing-male
dimonn12
– программист в EPAM

+2

"В данном случае, расчет суммы order’а следует разместить в самом классе «Order». Более того, расчёт суммы элемента order’а («OrderItem») следует разместить в классе «OrderItem»."

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

Missing
+2

Классический пример поверхностно-понятых и криво-используемых терминов и принципов. Если вы завели речь про доменную ентити, то она ДОЛЖНА содержать бизнес-логику приложения. А "приходить из базы исключительно с полями и без какой-либо иной логики" это, товарищ, обыкновенный Active Record, и вы путаете теплое с мягким.

Так собственно к чему это я... а, не дай бог в будущем исправлять код за таким "специалистом" )

Missing-male
dimonn12
– программист в EPAM

+1

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

Missing
+2

Завтра фирма решила считать сумму ордера о скидкой. Логика расчета сумм - в ордере. Ваши действия? меняете сигнатуру, добавляя в параметры процент скидки? Добавляете новый метод? не меняете ничего, учитывая скидку в методе расчета? Добавляете в иерархию ордеров новый узел? Прекрасно. Через месяц решаем, отдельно получать скидку, отдельно сумму со скидкой, отдельно без скидки. Ваши действия? еще через месяц выясняется, надо учитывать налог. Что нужно куда дописать? Через неделю решаем, заказы на машину -всегда со скидкой, а на вино-без. Что делаете? Иерархию расширяете? Еще подумали и решили отечественных производителей поддерживать. Жигули со скидкой, Мерседес без. Причем, жигули без налога, мерседес-с налогом?А жигули представительского класса-как-раз, с налогом на роскошь. То же самое и с вином.Какие методы, какие классы в иерархии? Что, будете дедушке Фаулеру писать, чтобы он помог классы в иерархию организовать?. На самом деле, любой, кто с таким сталкивался, придет к тому, что в случае вариативности алгоритмов их нельзя объединять с данными, просто, никогда. Даже если Гради Буч против. Не ему эти проблемы потом решать. В данном случае, алгоритмы расчета должны быть определены, как отдельные случаи, обращаться к ним надо как-нить через фектори. Причем, слгоритмы должны быть разработаны, как stateless классы.Это позволит дописывать новые, без изменения сигнатур в классах данных. Вообще, все, что считывается из базы в виде объектов для использования в программе должно иметь минимум методов, кроме сет-гет. Иначе будет либо бардак в иерархии, либо куча методов на все случаи жизни, либо куча условных операторов в каждом методе. А скорее, и то и другое. и третье. И никакой ООП вам не поможет. Все примеры там-вырожденные случаи сферического коня в вакууме. вообще, ООП пригоден исключительно для написания фреймворков, где можно однозначную декомпозицию произвести и требования не подвержены кардинальным изменениям. Так что, как говорят китайцы - не обманывайте простолюдинов, карма портится:)

Missing-male
dimonn12
– программист в EPAM

+1

Именно такую мысль я и пытался донести чуть выше:)

Missing-male
+1

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

Missing
+1

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

Missing

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

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

Missing

Декоратор (англ. Decorator) — структурный шаблон проектирования, предназначенный для динамического подключения дополнительного поведения к объекту

Стратегия (англ. Strategy) — поведенческий шаблон проектирования, предназначенный для определения семейства алгоритмов, инкапсуляции каждого из них и обеспечения их взаимозаменяемости

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

B993ebcd20d5803b01e1810b59038c5b?1508349073

доменная энтитя, которая приходит из базы исключительно с полями - это DTO инфраструктуры или на крайняк - анемичная доменная модель (анти-паттерн по Фаулеру https://martinfowler.com/bliki/AnemicDomainModel.html). Бизнес-логике как раз самое место в домене и сущностях.

Missing-male
+2

Хотелось бы увидеть чуть более подробную самопрезентацию преподавателей, хотя бы ссылки на профиля linkedin/github, мой круг на худой конец.

Missing
+2

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

Скажите это сертифицированному magento разработчику. А лучше найдите такового за невысокую ЗП, можно даже без сертификации. Успехов.

Missing

Ага, тоже удивил пример...

Picture_54?1356409795
faketail
– программист в BELHARD

+6

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

2467f521ec448242444fb883e247f3ae?1507109482
+5

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

Missing
+7

> 99% людей не напишут «с головы» удаление узла из АВЛ-дерева.

> В курсе эта тема даётся так, что вы никогда не забудете, как это сделать.

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

B993ebcd20d5803b01e1810b59038c5b?1508349073
+7

> 99% людей не напишут «с головы» удаление узла из АВЛ-дерева.

Оставшиеся 1% людей которые напишут - в данный момент готовятся к собеседованиям и примкнут к 99 после получения работы.

A263bfa4250b786dab20d7140ecc3bee?1505897879

> Оставшиеся 1% людей которые напишут - в данный момент готовятся к собеседованиям и примкнут к 99 после получения работы.

вот я б так не обобщал, всё же остаётся 0,5% людей, которые будут работать не формашлёпом, а именно инженером. А вот остальные да, вероятно пойдут к тем 99%.

B993ebcd20d5803b01e1810b59038c5b?1508349073
+7

Зазубрил шпаргалку по алгоритмам и струткурам данных и БДЫЩЬ! Ты инженер! Серьезно?

Вот программист, к примеру, проектирует архитектуру огромного тырпрайз решения и затем реализовывает прототип не написав никаких деревьев и алгоритмов удаления узлов из них - он формашлёпер?

A263bfa4250b786dab20d7140ecc3bee?1505897879

> Зазубрил шпаргалку по алгоритмам и струткурам данных и БДЫЩЬ! Ты инженер! Серьезно?

я имел ввиду инженеров с серьёзной подготовкой, вроде того что написано ниже

> Вот программист, к примеру, проектирует архитектуру огромного тырпрайз решения и затем реализовывает прототип не написав никаких деревьев и алгоритмов удаления узлов из них - он формашлёпер?

не думаю, под формошлёпом я подразумеваю людей, которые по каким-то причинам заняты в основном вещами вроде изменения цвета кнопки.

* да, признаю что не прав, назвав всех людей кто не напишет АВЛ дерево с головы формашлёперами, выше немного уточнил это понятие

Missing

> я имел ввиду инженеров с серьёзной подготовкой, вроде того что написано ниже

"Серьёзная подготовка" это университетский курс алгоритмов и структур данных?

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

Иначе я не понимаю, почему человек, который по памяти пишет те самые операции на авл-дереве лучше, того, кто внятно расскажет что есть lock-free и напишет пример оптимизированной структуры данных или расскажет как работает deflate.

Missing
+1

>> не думаю, под формошлёпом я подразумеваю людей, которые по каким-то причинам заняты в основном вещами вроде изменения цвета кнопки.

Что за пафос, вы, к примеру, отказываетесь от таска менять цвет кнопок, как от недостойного высокого звания инженера? Кому нужен такой программист?

63637f4ec5ea136f9d17ce151501368e?1401052531
+1

Инженеры которые по памяти пишут алгоритмы удаления узлов АВЛ дерева... Ранжирование так себе.

Missing
+6

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

Picture_3860?1356409918

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

Missing-male
+6

Пошли продажники с чесом по лохам...

Missing-male
+1

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

7df30b74d305843fa914ee4b84813649?1508058659
-1

А зачем в примере для числа 4 константу вводить?

Missing

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

7df30b74d305843fa914ee4b84813649?1508058659

А что означает число 4 в приведенном примере?

7df30b74d305843fa914ee4b84813649?1508058659
+3

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

Во-первых этот кусок кода - это может быть одноразовый запрос клиента на тему "выведите ка мне заказики за 4 дня". Константа нужна?

Во-вторых, первый параметр (который равен 4) может быть вообще не связан с количеством заказов. И прежде всего это и нужно выяснить: что это за параметр, кто его добавил, что происходит. Дальше, когда мы выяснили семантику этого параметра, нам нужно пройтись по коду и посмотреть где еще используется это значение в таком же контексте. Или производные от него значения.

Дальше нам нужно посмотреть не заведена ли уже такая константа. Если нет завести новую, при этом выбрав правильное имя (в соответствии с правилами именования у нас на проекте).

И только после этого мы тащим эту константу в релевантный ей модуль (или что там у вас). А не просто пихаем абы куда.

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

Но как тогда ввернуть в такую статью "типа Computer Science"? Этого я не знаю.

Missing

в 96.78% случаев константа нужна, может быть даже в 98,72%. Пусть лучше она будет называться не совсем верно, или находится не совсем там где могла бы, или дублировать уже существующую, это проще исправить чем искать потом все четверки в коде и думать что они значат.

Missing-male
+3

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

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

Возьмите тот же cs50. Он имеет бешеную популярность и так неплохо заходит даже людям вполне себе далеким от ИТ и с не совсем математическим складом ума разве потому что Дэвид чемпион мира по спортивному программированию, 10-летним опытом разработки в реальных проектах или два года работы в гугл?

Поэтому вот так вот всё грустно с белорусским ИТ-образованием и всякими курсами в частности.

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

Missing

вы не находите, что если бы это была константа с внятным именем, то ответить на ваш вопрос было бы проще?

Missing

Меня вообще смущает не 4(это число наверняка зудумывалось как var paidOrders = OrderManager.Instance.PaidOrders.Count (типа такого)), а именование метода. GetAllOrders. В моем понятии методы с таким именем не должны вообще принимать никаких параметров, потому что All.

Missing

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

7df30b74d305843fa914ee4b84813649?1508058659

А, я понял. Здесь "0" тоже надо выносить? https://github.com/torvalds/linux/blob/master/kernel/power/console.c#L135

Я просто не разбираюсь.

7df30b74d305843fa914ee4b84813649?1508058659

Ладно, с нулем плохой пример - можно соскочить типа "это такая специальная константа, с ней не считается".

А здесь? https://github.com/torvalds/linux/blob/master/net/dns_resolver/dns_key.c#L121 : "if (derrno < 1 || derrno > 511)"

Или это я вам исходники магазина на пэхэпэ скидываю? Или это не инженеры пишут?

Missing-male
dimonn12
– программист в EPAM

Кто Вам это сказал? Очередная good practice? Вы сами можете доказать, что любые числа нужно выносить в константы? Вот пример (получаем сегодняшний день в 0 часов 0 минут 0 секунд) - LocalDate.now().atTime(0, 0, 0); Вы действительно хотите сказать, что я должен вынести 0 в константы здесь? Поверьте, в любой нормальной IDE (которая лучше npp) мне будут выведены названия параметров в методе, который их принимает. И если значение используется всего 1 раз, то через IDE я с такой же легкостью найду все вызовы этих "магических чисел", с какой я найду использование вынесенных констант. Я не против вынесения используемых значений в константы. Я против навязывания такой практики во все мыслимые и немыслимые места.

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

Missing
+1

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

Missing-male
dimonn12
– программист в EPAM

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

Missing

"Магические числа" - это такие числа на которые смотришь и не понимаешь что это за числа. 0, 1, -1, 2 , 3.14 и т.д обычно не являются магическими.

Missing
+2

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

Missing

на последней картинке с эплом и часами я так понимаю сидит уже инженер, выпускник курсов? и почему на рекламной фотке сидят с тетрадками, а на первой фотке, с занятий - без тетрадок? ох люблю я эти курсы программистов

Missing
+3

Такие смЕшныя эти пионэры - "кодировщики", "инженеры", "работа не 8 часов, а за идею", "деревья в голове"....

Ога..., учатся у них разработчики с 10илетним стажем, как же. Убежден, что опытный девелопер работает за деньги, а не за беджик и "спасибо, что остаетесь внеурочно"; Работает как считает нужным, 5-8-12 часов при соответствующей денежной мотивации, которую далее расходует на свои прихоти, семью и тп.

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

Missing

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

Составители курса таки разрывались между аудиторией представленной "студентом" с одной стороны и программистом с "10 летним стажем" с другой

С сожалению не в пользу последнего . Почему то приходит на ум фраза про "мух" и "котлеты"

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

Missing-male

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

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

Если программисту с 10-летним стажем надо узнать, что такое рекурсия, сложность алгоритма, битовые операции или как выглядит SQL-запрос, то тут два варианта. Если он все 10 лет прожил без этого, и это ему никак не мешало, то пусть и дальше так же спокойно себе живет и работает, в чем проблема!? Если всё таки по какой то причине он захотел это узнать или же он всё это знал, но за 10 лет что то подзабыл и вот возникла необходимость освежить, кто мешает ему просто открыть книгу, статью в интернете и т.п. Если по какой то причине он этого не может, то см. пункт 1 про студента. Здесь всё тоже самое остается справедливо и для программиста хоть с 10-летним опытом.

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

0970adbfe0d28e0f0382e616e446dea5?1499980841

Рассмотренный пример с куском кода наводит на мысль о том, что у авторов "ООП" головного мозга.

> также уметь писать «ифы» и циклы

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

Missing
+3

Ща будет мясо!)

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

А теперь о том что вызывает у меня возмущение.

В конце лекции показали план курса, и у меня возникло то самое чувство, когда "поют они, а стыдно мне" - набор странно подобранных тем запихнули в 32(тридцать два, карл!) часа учебного времени при этом размазали их на два месяца и обозвали это модным словом "интенсив". По-моему, 2 раза в неделю по 2 часа - это противоположно значению слова "интенсивный".

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

1.Обучение по всем темам (подборка тем явно заточена под вопросы собеседований, а не computer science)

2.Сертификат об успешном окончании курсов (бесполезен, но должен согревать душу человеку заплатившему 400$ за прослушивание открытой информации)

3.Доступ к методическим пособиям (бесценно, если вы забанены в гугле)

4.Выезд на офис Вашей компании (Очаровательный пункт! Не могу воспринимать его всерьёз)

5.Никаких дополнительных плат (Ну... просто напомню что обучение длится два месяца, а цена указана за 1 месяц).

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

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

В заключение скажу для тех кто ищетпутивойтивайти - в сети полно ресурсов, которые помогут определиться с выбором начать обучение. А уж дорогу осилит идущий. С погружением придёт и понимание какие курсы выбрать и какие книги прочитать. Мне, например, понравился сайт Hexlet, который как раз учит программированию и даёт план. А все мои инвестиции за год в учёбу - это 100$ за подписку на онлайн курсы и еще 100$ на книги.

Как то так.

026392b725c67bfe934b7bbb7e9c0487?1506460812
Maкcим Maркаров
– Заместитель директора в ATT

Очень круто все рассказали!

Указывать цену за месяц - это нечто! Может лучше указывать за час? Оплатил час занятия посидел послушал. После перерыва оплатил еще за часок... :)

Missing
+1

Какая необычайная придуркаватая хуйня оторванная от жизни...

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

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

F5ade970ca77a94dcd0dd428ebe5c24b?1508335673

Хотелось бы прояснить некоторые моменты:

Цель статьи – обратить внимание на то, что помимо языков программирования и прикладных фрэймворков, есть существенный дополнительный объем знаний. Скорее даже иной подход к обучению. Не только изучить «как делать интернет-магазины», а сформировать себя, как всесторонне развитого инженера-программиста. И да, о ужас, в статье есть реклама :)

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

Касательно комментариев о том, что человек забывает неиспользуемые им знания:

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

И да, есть люди, которые зная суть алгоритма удаления узла из АВЛ-дерева или алгоритма Дейкстры могут восстановить их, не занимаясь «зазубриванием».

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

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

Мы не говорим, что только лишь нам известна истина. Мы говорим: если человек, изучив С# и ASP.NET MVC, считает, что можно расслабиться, так как все основное ему уже известно, то это, увы, далеко не так.

Отвечая на комментарий Firstprime:

1. Не совсем понятно, что Вы подразумевали под словом «мясо».

2. Если Вы считаете, что преподавательские навыки «крайне низкие» хотелось бы услышать конкретную критику.

3. Касательно доступа к методическим пособиям: речь идет не о «книгах и материалах» которые есть в Интернете, речь идет только о наших материалах, которые преподаются на лекциях.

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

С Уважением,

Команда Cronis

Missing

>Помните ли Вы как работает сортировка пузырьком или вставкой? Если да, то ответьте себе на вопрос «зазубривали» ли Вы ее?

Так себе аргументик. Ещё люди могут if и while помнить. Что не делает истинным ваше высказывание про то, что вы даёте информацию так, что её забыть невозможно. Да и далось вам это авл дерево. Других деревьев нет, что ли :)

> Мы говорим: если человек, изучив С# и ASP.NET MVC, считает, что можно расслабиться, так как все основное ему уже известно, то это, увы, далеко не так.

Это довольно жалкий приём рекламных статей и споров: приписать кому-то глупость, а потом с умным видом сказать, что "на самом деле это не так". :)

Ребята, у вас не самая хреновая реклама. Наговорили названий разных компаний (microsoft, amazon, wargaming). И сказали, что вы не такие, как другие курсы. Но блин 32 (или сколько там) часа чтобы сформировать всесторонне развитого программиста? Вы разберитесь, у вас там камеди клаб или солидные курсы :)


Авторизуйтесь, чтобы оставлять комментарии

Использование материалов, размещенных на сайте, разрешается при условии прямой гиперссылки на dev.by. Ссылка должна быть размещена в подзаголовке или в первом абзаце публикации.
datahata — хостинг в Беларуси