Комментарии 82
Около пяти лет занимался программированием станков ЧПУ. И скажу что при ошибке в программе станка велика вероятность повредить оборудование, или нанести ущерб работающим людям.
Человек который считает, что достаточно прочесть книгу видимо никогда не делал ничего серьезного. Или является непризнаным гением.
Только вот в чем беда: после этой статьи человек станет хирургом? Тогда к чему вы ведете?
Может у вас есть более полезные советы и своя стратегия изучения нового или книги достаточно?
То есть если хирургу напишут: "нужно что бы при операции руки не треслись", у него перестанут треслись руки? Это опыт и знания, полученные годами. Вся статья — компиляция из общих советов, которые архитипом откладываются в головах программистов, которые приходят со знаниями и и опытом. Я не вижу как она может помочь людям, которых действительно хотят программировать. А те, кто захотел перебраться из /вставьте нужную профессию/ во что то более хайповое и прибыльное нечего не вынесут из нее.
Ах да, если человека нет мотивации внутри, то никакие цитаты не помогут.
Может вы считаете, что патерны это тоже архитипы, и не стоит их изучать? Только практика из 1000 строк валидного кода запиханых в один класс или в одну функцию.
Я знаю и ведущих специалистов которые на практике за пять и более лет не научились декомпозировать методы и классы, и думаю для них данная инфа тоже была бы полезной.
Может вы считаете, что патерны это тоже архитипы, и не стоит их изучать?Да, это на 100% верно, изучать их не стоит. Начинающим так вообще вредно.
Умение проектировать приходит с опытом и пониманием процесса. Люди, которые вместо этого заучивают паттерны, теряют возможность самостоятельно думать в вопросах проектирования, и начинают думтать в рамках шаблонов. И просто подбирают паттерны под нужный случай, многим из них уже даже не приходит в голову, что можно как-то по-своему сделать.
Только практика из 1000 строк валидного кода запиханых в один класс или в одну функцию.Если вас во время такой практики не посещает мысль, что 1000 строк в одном месте это так себе идея, вам выше кодера не подняться
Я знаю и ведущих специалистов которые на практике за пять и более лет не научились декомпозировать методы и классыЭтим людям не место в профессии, заучивание паттернов ситуацию не улучшит.
многим из них уже даже не приходит в голову, что можно как-то по-своему сделать.видел я «сделанные по своему» модули… креативность, совмещенная с безмозглостью — адская смесь. ну и «сделал по своему» — заставляет вспомнить фразу из анекдота «Штирлиц любил стоять на своём...»
Люди, которые вместо этого заучивают паттерны
Заучивание и изучение это немного разные вещи. Естественно не стоит зубрить все наизусть. Но читать и пытаться понять всегда полезно. Даже для джунов.
теряют возможность самостоятельно думать в вопросах проектирования, и начинают думтать в рамках шаблонов.
В любой технической отрасли есть основы, которые должен знать каждый хотя бы частично. В математике никто не говорит, что использование таблицы умножение это мышление в рамках шаблонов. Или в физике закон Ньютона.
Если вас во время такой практики не посещает мысль, что 1000 строк в одном месте это так себе идея, вам выше кодера не подняться
Из моей практики. Разговоры про «креативный подход и мышление вне шаблонов» начинают обычно как раз те кто пишет такой код, и считает его уже идеальным.
P.S. А вы вышли за рамки шаблонов или потеряли возможность самостоятельно думать?
Заучивание и изучение это немного разные вещиДа, но паттерны можно только заучить. Это же список примеров, как вы их хотите изучать?
Даже для джунов.Ты вот откуда эти покалеченные джуны берутся.
В любой технической отрасли есть основы, которые должен знать каждый хотя бы частично. В математике никто не говорит, что использование таблицы умножение это мышление в рамках шаблонов. Или в физике закон Ньютона.Вы предлагаете изучать таблицу умножение вместо того чтобы изучать само умножение
Из моей практики. Разговоры про «креативный подход и мышление вне шаблонов» начинают обычно как раз те кто пишет такой код, и считает его уже идеальным.Я на своей практике, еще не видел человека который бы любил паттерны и при этом мог грамотно что-то спроективровать
P.S. А вы вышли за рамки шаблонов или потеряли возможность самостоятельно думать?По вашему вопросу видно, что вы уже не понимаете, как можно думать и проектировать не используя паттерны. Об этом разрушительном влиянии я и говорил.
Я учился программированию в те времена, когда паттерны за знания не считались
Да, но паттерны можно только заучить. Это же список примеров, как вы их хотите изучать?
Можно поинтересоваться а основные парадигмы ООП тоже не нужны?
Вы предлагаете изучать таблицу умножение вместо того чтобы изучать само умножение
Вы предлагаете умножать не зная таблицу умножения?
Я учился программированию в те времена, когда паттерны за знания не считались
На перфокартах что-ли? Но и тогда были фундаментальные основы.
Вы предлагаете изучать таблицу умножение вместо того чтобы изучать само умножениенекоторые вещи надо знать. это не отменяет необходимость знания «как они получились такими», но избавляет от необходимости повторного изобретения велосипеда.
Программирование в первую очередь это борьба: поиск нужной информации, поиск решения нестандартных проблем и постоянная война с пк. Статьи вида «научим думать как программист», «обучим основам кодинга» в себе кроме как популизма не несут.
На счет обучения: я жил в местности, где не было интернета и ни одного человека, умеющего программировать. И это мне не помешало в 10том классе сверстать свой первый сайт и написать простенькие скрипты к нему.
Я это к чему: тому человеку, кто рвется вверх и хочет прогрессировать нужны лишь знания и практика. А тот, кому нужна мотивация и готовые ответы и с этой статьей далеко не уедут.
PS: почему я категорически настроен против: в статье нет ничего нового, а годной компиляцией назвать ее язык не поворачивается. По большому счету она ничем не отличается от бизнес-тренингов на которых тоже говорят общие вещи типа «экономьте»,«продумывайте» и прочее. Хорошо что хоть тут за прочтение копейку не взяли, и на том спасибо.
Я не против книг. Как раз за них, но во многих случаях полезнее (особенно для начинающих) краткая инструкция и наставничество. Чтоб человек понимал основные алгоритмы и узкие места своей работы.
То есть если хочешь стать хирургом, то достаточно купить справочник и тесак? И можно прочесть и идти практиковаться?
Да. Только сначала на мышах и лягуша́х. В общем-то, когда хирургия была примерно на той стадии развития, на которой сейчас программирование, оно ведь как-то так и было. А если бы анатомия и физиология не стояли на месте, а изменялись так же, как компьютеры — то, подозреваю, как-то так было бы и до сих пор. Собственно, и со станками ЧПУ тоже можно, просто не надо начинать свою практику сразу с фрезы 30 м/мин.
Большинство работодателей считает более важным навык решения задачРешение задач на собеседованиях — одна из худших практик в найме. Просто потому что собеседование это стрессовая ситуация, где требуется дать ответ отсносительно быстро. В реальной жизни для решения задачи нужно время, и спокойная обстановка, желательно без окружающих требующих от тебя ответа как можно скорее.
Дать ответ на задачу быстро в условиях стресса, может только человек, который эту задачу уже решал или знает ответ. Т.е. мы не проверяем то, как человек решает мыслит и рассуждает, а просто отбираем тех, кто такие типовые задачки задрачивает, посути это отрицательный отбор.
Дать ответ на задачу быстро в условиях стресса, может только человек, который эту задачу уже решал или знает ответ.
Допустим, что нужно срочно сделать какую-то задачу на работе. Её дают вам, а вы говорите: «Извините не могу работать в условиях стресса. Только если я эту задачу раньше решал.» Так получается?
Особенно, если оказывается, что задача нужна менеджеру для решения сиюминутной задачи, а потом отправляется в корзину.
Факторы стресса и стрессоустойчивости имеют место быть и должны учитываться обеими сторонами.
а вообще, вся жизнь — стресс. все мы когда-то что-то делаем впервые, все ошибаемся.
Имеется в виду, что разработчик должен комплексно подходить к поставленной задаче, и думать головойА что, без этого как то можно разработчиком работать? Хотя если смотреть на нынешнее поколение девелоперлов…
Допустим, что нужно срочно сделать какую-то задачу на работе.Есть разница между решением практической задачи в течении нескольких часов сидя в своем уютном кресле, и решением абстрактной задачи в течении двух минут под взором нескольких экзаменаторов. Это совсем разные вещи, на работе нужно первое, а на собесах проверяют второе.
Дать ответ на задачу быстро в условиях стресса, может только человек, который эту задачу уже решал или знает ответЕсли вы говорите про алгоритмические задачи на собеседованиях, то это не так. Подавляющее их большинство без проблем решается за отведенное на интервью время без предзнания.
А на собеседовании их обычно задают для проверки уровня кандидата, а не для самолюбия.
По моему опыту примерно 50% собеседуемых не могут ответить на элементарные вопросы, при этом хотят зп 100к +
Т.е. я правильно понимаю, что задачи, по типу олимпиадного программирования или нахождения производной в собеседовании на работу в обычную контору(банк, веб-приложение и т.п.), а не какой-нибудь рокет сайнс/блокчейн/ML/криптография/аналогичное, это нормально, а знание инструментов и фреймворков, с которыми придется работать, а также культура написания кода вовсе не важны на начальном этапе?
фреймворки, стиль написания кода, именование переменных/методов/классов, понимание того, какой жизненный цикл задачи, начиная от постановки аналитиком и заканчивая взаимодействием с QA
Вы уже который раз повторяете это. Какая-то личная травма?Это спрашивают в одном из банков, к примеру. я там не был, травма не моя, но мне рассказали
Это где такое справшивают?Это просто пример. К такому же примеру я отношу вопросы про сортировки, графы, матрицы и другой матан. Повторюсь, я не про вакансии, где
рокет сайнс/блокчейн/ML/криптография/геймдев/социалки/аналогичное
Так именно это и спрашиваютЕсли бы только об этом спрашивали, я не стал бы приводить примеры
И кстати да, это совсем не технический бекграунд
А на собеседовании их обычно задают для проверки уровня кандидата, а не для самолюбия.Только таким образом проверяют умение решать типовые алгоритмические задачки на время, а не уровень кандидата
значит, лучше ничего не придумали для отсева
Ха! Люди настолько ленивы, что им проще делать как все, чем подумать над тем, кто им конкретно нужен.
Ну и вполне есть места, где можно применять знания алгоритмов
А я и не говорю о таких местах, они безусловно есть и спрашивать там логично и правильно, но это меньшинство, а большинство спрашивает то, что у меньшинства, потом огребая тонны говнокода, багов и тратят время на обучение, после которого их успешно покидают в те самые места, которые меньшинство
Даже если вам кажется, что это школьная программа, так что, это должны все помнить до самой старости? По себе людей не судите, оглянитесь вокруг
Люди настолько ленивы, что им проще делать как все, чем подумать над тем, кто им конкретно нужен.Кому лень, те постепенно разоряются, в бизнесе каждый день головой думать надо. А вот тех, кто собеседует по алгоритмам, с каждым годом все больше.
Даже если вам кажется, что это школьная программа, так что, это должны все помнить до самой старости?Давайте вспомним, с чего началась ветка. Я спорю с конкретным утверждением:
Дать ответ на задачу быстро в условиях стресса, может только человек, который эту задачу уже решал или знает ответОно не верно. Человек, прошедший подготовку, которую без проблем может пройти даже школьник, может решить задачу без предзнания. Это все, что я изначально хотел сказать.
Подавляющее их большинство без проблем решается за отведенное на интервью время без предзнания.Не совсем. Если вы в свободное время, занимаетесь дрочерством таких задачек, то да, вы сможете быстро их решать. Но, как ниже отметили, к реальной практике это отношения не имеет.
участвовать в школьных олимпиадахМожет еще надо было на пятерки учиться и не прогуливать?
Не всем это интересно. Разработчики занимаются практической деятельностью на работе, и в своих проектах. А на собеседовании их спрашивают не это, а олимпиадные задачки. Логики не прослеживается.
Если эти задачи задают, значит, лучше ничего не придумали для отсеваСкорее это значит что интервьюер просто исптытывает интерес к таким задачам. На своей практике сталкивался с такими людьми, которые решение задачи на собесе ставили в приоритет остальным знаниям. Из десятка разрабов, нанятых таким способом, испыталку прошел один. И это не единственный пример
Может еще надо было на пятерки учиться и не прогуливать?Школьные олимпиады — это достаточное условие, но ни в коем случае не необходимое. Просто для иллюстрации того факта, что нет ничего сложного в решении задач с собеседования за время собеседования. Поскольку это доступно даже школьнику.
Логики не прослеживается.Логика очень проста: есть компании, которые спрашивают на собеседованиях олимпиадные задачи, а есть те, которые спрашивают что-нибудь другое. По моим субъективным наблюдениям, первых постепенно становится больше, чем вторых, и условия работы в них, как правило, лучше. Из чего я делаю вывод, что это более эффективный метод подбора персонала.
Из десятка разрабов, нанятых таким способом, испыталку прошел одинДавайте я тоже субъективный опыт приведу. Два этапа собеседования: онлайн-тест и очное собеседование в офисе. Пока тест был на реализацию «условно реальной» фичи, большинство участников очного собеседования были никакие. Когда тест был заменен на список «олимпиадных» задач, все до единого участники очного собеседования стали как минимум «нормальные», а многие и «хорошие».
Просто для иллюстрации того факта, что нет ничего сложного в решении задач с собеседования за время собеседованияСложного ничего нет, но почему соискатель должен тратить свободное время на откровенную ерунду, непонятно
Из чего я делаю вывод, что это более эффективный метод подбора персонала.Причина намного проще — это банальная мода. Все хотят быть как гугл или фейсбук и тащаят оттуда модные штуки для собесов. Но на качество продуктов этих гигантов они не смотрят.
Давайте я вам другой пример приведу: за последние десять лет уровень среднего разраба сильно просел. И сейчас разработчиков низкой квалификации становится изрядно больше, чем средней и высокой, многие уже пролезли на лидовые должности. Выводы из этого делайте сами.
Давайте я тоже субъективный опыт приведуЯ вам объективный критерий в своем примере привел. А никакие, нормальные и хорошие это оценочные суждения. Расшифруйте что это значит.
почему соискатель должен тратить свободное время на откровенную ерунду, непонятноНе должен. Если не хочет, может не тратить, его никто не заставляет.
Причина намного проще — это банальная мода.Почему вы так считаете? Я, по опыту общения с владельцами бизнесов, могу сказать, что им постоянно нужно думать об эффективности, и неверное решение очень быстро может привести к краху. А еще я вижу в мире вокруг себя эксперименты — некоторые вон разработчиков нанимают даже по логам поисковых запросов. То есть, люди явно заинтересованы в повышении эффективности, ищут варианты, но, в основном, используют алгоритмические задачи. Неужели все дело только в моде?
за последние десять лет уровень среднего разраба сильно проселЭто противоречит моим наблюдениям.
никакие, нормальные и хорошие это оценочные суждения. Расшифруйте что это значит.Объективно — конверсия на очном собеседовании выросла более, чем на порядок, без изменения его формата или критериев оценки.
Почему вы так считаете?По опыту общения с теми, кто нанимает людей и дает задачки на собесах. Многие из них чуть ли не в прямую об этом говорят.
Это противоречит моим наблюдениям.Это объективный факт. При росте количества новых разработчиков и уменьшении порога входа, средняя квалификация расти не может.
Объективно — конверсия на очном собеседовании выросла более, чем на порядок, без изменения его формата или критериев оценки.Расшифруйте что такое никакие, нормальные и хорошие, про конверсию и так понятно. Какие именно у вас критерии оценки? Может вы их по решению задач оцениваете, ясное дело конверсия вырастет. В моем примере конверсия на собесах тоже была неплохая, только кандидаты работать не умели в итоге
По опыту общения с теми, кто нанимает людей и дает задачки на собесахЯ делаю противоположный вывод тоже по опыту общения с теми, кто собеседует и нанимает людей.
При росте количества новых разработчиков и уменьшении порога входа, средняя квалификация расти не может.Появление новых, более простых, направлений, не означает, что снижаются требования в уже существующих.
Какие именно у вас критерии оценки? Может вы их по решению задач оцениваете, ясное дело конверсия вырастет.Оценивались по знанию алгоритмов, знанию инструментов, умению мыслить (оцениваемому посредством прокси «умение рассуждать вслух»), умению построения архитектуры.
За время испытательного срока не отсеился никто, как до изменения формата теста, так и после.
В мире есть программисты, которые способны решать "такие задачки" не занимаясь "дрочерством", а вот просто читать задачу, включать мозг и придумывать решение.
Если ВЫ не можете в условиях ограниченного времени с холодной головой проанализировать проблему и найти решение, а другой может, то нойте сколько угодно о несовершенстве мира, но это его конкурентное преимущество и у работодателя могут возникнуть ситуации, когда оно окажется решающим.
“Если вы не можете объяснить что-то простым языком, то вы не понимаете этого.”
— Richard Feynman
Это был Эйнштейн.
В оригинале:
If you can't explain it simply, you don't understand it well enough.
"Этим Фейнманом был Альберт Эйнштейн" :)))
— Папа, а как звали Бетховена?
Папа, пожилой интеллигентный еврей, начинает на Мишу брызгать слюной:
— Миша, да как ты можешь! Ты же интеллигентный человек! Ты учишься в школе! Мы тебя воспитывали! Просто позор в таком возрасте этого не знать! Каждый должен впитать это с молоком матери!..
Ну и так далее. Потом, выговорившись, назидательным тоном:
— Запомни, Миша, Бетховена звали Иоганн… Себастьян… (Садится на стул, делает паузу секунд на 10...)… Бах.
©
«Каждый должен учиться программированию, потому что оно учит думать.»
Сказал человек который к программированию не имел никакого отношения, а хотя какая разница, его же ведь все боготворят.
3. Декомпозиция
В этом направлении есть отличные лекции по динамическому программированию. Можно поискать «Игорь Клейнер» на Ютубе.
Жизнь такая .) Потому что собратья из СНГ воспитаны поколением, которому ничего нельзя было купить. Кто-то развивал коммуникативные навыки для добычи "того что нельзя достать", а кто-то искал альтернативные варианты решения задачи. Отсюда образ мышления, передавшийся с поколением. Первая мысль не "где я могу это купить", а "как я могу это сделать из говна и "
Не уверен, мои наблюдения этого не подтверждают. В принципе есть, грубо говоря, две традиции изучения: западная, которая идет через понимание, и восточная, которая идет через повторение/заучивание. Постсоветское пространство традиционно болтается где-то посередине с заметным креном в восточную. Соответственно все, что требует понимания и охвата на высоком уровне, часто вызывает сложности.
русскоязычники/люди-из-СНГ в среднем лучше кодят/соображают
А кроме ваших слов, это как-то еще подтверждается?
та же ежегодная олимпиада по программированиюЕсли вы про IOI, то там Россия, конечно, среди лидеров, но не на первом месте: таблица медалей, таблица выдающихся участников. А если вы про ACM ICPC, то там хорошо видно, что у нас есть лишь некоторые яркие школы, а средний уровень не так уж и высок: таблица лучших ВУЗов, там же чуть ниже — таблица числа чемпионств по странам.
Э… А где здесь урок?
Лекцию мотивировочную вижу. А примеры, упражнения, разбор конкретных задач?
Большинство работодателей считает более важным навык решения задач.
…
— Hacker Rank (2018 Developer Skills Report)
Как неожиданно. Сайт с задачками утверждает, что главное в карьере — задачки…
Думай как программист. Урок по решению задач