Если вы интересуетесь программированием, то возможно слышали фразу:
«Каждый должен учиться программированию, потому что оно учит думать.»
— Стив Джобс
Наверное вы тоже задавались вопросом, что значит думать как программист?
По сути, речь идет о более эффективном способе решения задач.
Данный пост ставит целью научить вас этому.
Прочтя его, вы более точно поймете, что нужно делать, чтоб находить лучшие решения.
Почему это важно?
Решение задач — это базовый навык.
Мы постоянно решаем задачи. Большие и маленькие. Как мы это делаем? Иногда хорошо… если повезет.
Если у вас нет системного подхода, то, вероятно, вы решаете задачи следующим образом (я так делал, когда только начинал кодить):
- пробуете решение,
- если оно не подходит, то пробуете другое,
- если не получилось, то повторяете пункт 2 до победы.
Вам может везти, но это худший способ! И он может отнять очень много времени.
Лучший способ:
- иметь системный подход,
- применять его на практике.
«Большинство работодателей считает более важным навык решения задач.
Умение решать задачи практически единогласно является самой важной способностью, которую ищут работодатели… Более важной, чем знание языков программирования, отладки и дизайна системы.
Демонстрация комплексного мышления и способность решать большие сложные задачи столь же ценны (если не больше), чем базовые технические навыки, необходимые для работы.»
— ?Hacker Rank (2018 Developer Skills Report)
Системный подход
Чтобы найти правильный подход, я последовал советам из книги Тима Феррисса об обучении "The 4-Hour Chef".
Это привело меня к интервью с двумя действительно впечатляющими людьми: C. Jordan Ball (занимает 1-е или 2-е место из 65 000 пользователей Coderbyte) и V. Anton Spraul (автор книги "Думай как программист. Креативный подход к созданию кода.").
Я задал им одинаковые вопросы, и угадайте что? Их ответы были очень похожими!
Скоро вы тоже их узнаете.
Примечание: это не значит, что они все делают одинаково. Они разные люди, и вы отличаетесь от них. Но если начинать с правильных базовых принципов, то результат получится намного лучше и намного быстрее.
«Самая серьезная ошибка, которую я вижу у молодых программистов — это сосредоточеность на изучении синтаксиса, вместо изучения того, как решать задачи.»
— V. Anton Spraul
Итак, что делать, когда вы сталкнетесь с новой задачей?
Разберем по шагам:
1. Понимание
Поймите, что конкретно нужно сделать. Большинство задач сложны, потому что вы их не понимаете (вот почему это первый шаг).
Как узнать, что вы поняли суть задачи? Попытайтесь объяснить её простым языком.
Вспомните случай, когда вы зациклились на задаче и начали объяснять её себе. В этот момент проявляются логические ошибки, которые вы не видели раньше.
Большинству программистов знакомо это чувство.
Вот почему вы должны описать свою задачу, нарисовать диаграмму или рассказать кому-то об этом (некоторые используют резиновую уточку).
“Если вы не можете объяснить что-то простым языком, то вы не понимаете этого.”
— ?Richard Feynman
2. Планирование
Не начинайте решать задачу без плана, надеясь не запутаться в ней. Планируйте свое решение!
В программировании не надо «идти напролом». Дайте вашему мозгу время для анализа и обработки информации.
Чтобы получить хороший план, ответьте себе на простой вопрос:
«Подав на вход X, какие шаги нужно сделать, чтоб получить Y на выходе?»
Примечание: у программистов для этого есть отличный инструмент. Комментарии!
3. Декомпозиция
Это самый важный шаг. Будьте внимательны!
Не пытайтесь решить одну большую задачу.
Вместо этого разделите её на подзадачи. Решить их будет гораздо проще.
Затем решайте подзадачи, начиная с самых простых. Когда задача кажется простой, это значит, что вы знаете ответ (или близки к нему).
Решайте каждую подзадачу независимо от других и после решения объедините результаты.
Соединение всех маленьких задач даст вам решение исходной.
Поздравляем!
Этот метод является краеугольным камнем решения задач. Запомните это (перечитайте этот шаг, если нужно).
Если я мог бы научить каждого молодого программиста навыкам решения задач, это уменьшило бы колличество технического долга.
Предположим, что необходимо написать программу, которая берет 10 цифр и возвращает третье по величине. Для новичка это может стать сложной задачей, хотя требует только знаний базового синтаксиса.
Если вы застряли, то надо упрощать. Вместо третьего по величине числа, как насчет нахождения самого большого? Все еще слишком сложно? Как найти самое большое из трех чисел? Или больше из двух?
Уменьшайте задачу пока не поймете как её решить. Запишите решение. Затем разворачивайте задачу до момента, пока не вернетесь к начальному вопросу.
— ?V. Anton Spraul
4. Застряли?
Сейчас вы вероятно сидите и думаете: «Эй, это все круто, но что если я не смогу решить эту задачу?».
Прежде всего сделайте глубокий вдох. Не волнуйтесь. Это происходит со всеми!
Разница лишь в том, что лучшие программисты фиксили баги и решали задачи с интересом, а не с раздражением.
На самом деле, вот три вещи, которые нужно попробовать сделать, когда сталкиваетесь со сложностями:
- Отладка. Проверяйте шаг за шагом, где вы могли ошибиться в своем решении. Программисты называют это дебаггингом.
«Искуство отладки заключается в выяснении разницы того, что вы написали в программе, и того, что вы хотели написать»
— Andrew Singer
- Смена подхода. Вернитесь на шаг назад. Посмотрите на задачу под другим углом. Можно ли абстрагироваться от реализации и применить более общий подход?
«Иногда мы так сильно углубляемся в детали, что не учитываем общие принципы, с помощью которых можно решить задачу на более высоком уровне. [...]
Классическим примером этого, конечно же, является суммирование длинного списка последовательных целых чисел 1 + 2 + 3 +… + n, который молодой Гаусс легко посчитал по формуле n (n + 1) / 2, избежав проблем, связанных с увеличением количества элементов»
— C. Jordan Ball
Примечание: Иногда лучше удалить все и начать сначала с новыми силами. Я серьезно. Вы будете удивлены тем, насколько это может быть эффективно. - Исследование. Эх, старый добрый Google. Независимо от того, какая у вас задача, скорее всего кто-то уже решал её до вас. Найдите этого человека или решение. Сделайте это даже если разобрались сами. Можно многому научиться у других людей.
Предостережение: Не ищите решение большой задачи. Ищите решения только для маленьких подзадач. Почему? Если вы не будете напрягаться (хотя-бы немного), то не узнаете ничего нового. Если вы ничего не узнали, то зря потратили время.
Практика
Не надейтесь стать профессионалом через неделю. Для того, чтоб хорошо решать задачи, нужно решить много задач!
Практика. Практика. И еще раз практика. Только со временем вы сможете сказать: «Эта задача может быть легко решена с помощью <подставьте свое решение сюда>».
Как тренироваться? Есть интеренсые варианты!
Шахматные головоломки, математические задачи, судоку, го, монополия, видео игры и т.д.
На самом деле, общая практика среди успешных людей — это их привычка «решать микрозадачи». Например, Питер Тиль играет в шахматы, а Илон Маск играет в видеоигры.
Байрон Ривз сказал: «Если вы хотите посмотреть, как могут выглядить руководители бизнеса через три-пять лет, посмотрите в онлайн-играх».
Быстрая перемотка вперед. Илон Маск, Рид Хоффман, Марк Цукерберг и многие другие говорят, что игры были основополагающими для их успеха в создании своих компаний.
— Mary Meeker (2017 internet trends report)
Значит ли это, что вы должны только играть в игры? Конечно нет.
Но в чем суть большинства игр? Правильно, в решении задач!
Так что же должно быть в практических занятиях. Что-то, что позволит вам решать много микрозадач (и в идеале это вам нравится).
Например, мне нравятся задачи по программированию. И каждый день я пытаюсь решить хотя бы одну (в основном на Coderbyte).
Как я уже сказал, все задачи имеют сходные модели решения.
Вывод
Это все!
Теперь вы знаете, что значит «думать как программист».
Вы также знаете, что решение задач — невероятный (базовый) навык, который надо развивать.
Обратите внимание, теперь вы также знаете, как практиковать свои навыки решения задач!
Наконец, я хочу, чтобы вы столкнулись с множеством задач.
«Когда вы думаете, что успешно преодолели одно препятствие, появляется другое. Но именно это делает жизнь интересной. [...]
Жизнь — это процесс преодоления препятствий — укреплений, через которые мы должны прорваться.
С каждым разом вы узнаете что-то новое.
С каждым разом вы будете развивать силу, мудрость и перспективы.
С каждым разом будет все меньше конкуренов. И в конце останется только ваша улучшеная версия.»
— Ryan Holiday (The Obstacle is the Way)
Теперь идите решать задачи!
И пусть вам сопутствует удача!
Особая благодарность C. Jordan Ball и V. Anton Spraul. За полезные совет которые они дали.
Кроме того, я не мог бы преобрести своих знаний в области программирования так быстро без Lambda School. Не могу не поблагодарить и не рекомендовать их.
Комментарии (81)
ilitaexperta
02.10.2018 13:29Большинство работодателей считает более важным навык решения задач
Решение задач на собеседованиях — одна из худших практик в найме. Просто потому что собеседование это стрессовая ситуация, где требуется дать ответ отсносительно быстро. В реальной жизни для решения задачи нужно время, и спокойная обстановка, желательно без окружающих требующих от тебя ответа как можно скорее.
Дать ответ на задачу быстро в условиях стресса, может только человек, который эту задачу уже решал или знает ответ. Т.е. мы не проверяем то, как человек решает мыслит и рассуждает, а просто отбираем тех, кто такие типовые задачки задрачивает, посути это отрицательный отбор.anfield343
02.10.2018 13:39+13 месяца назад, когда я искал новую работу, в основном просили решать задачи, кто-то на листике, кто-то на компе. Кое что решал, а что-то нет. Практически всем работадателям было абсолютно все равно какой я человек, они это никак и не проверяли. Как я понял, большинству нужна машина для написания кода, просто ресурс.
Когда пришел на собес в компанию, где сейчас работаю, мне не задали абсолютно ни одной задачи, лишь спросили некоторые вещи по JS на понимание, в основном вопросы были на умения работать в команде, не дурачок ли я какой-нибудь и т.д… Как понятно из текста, мы согласились сотрудничать и мне нравится мое место работы. Есть моменты, в которых я не разбираюсь, но ведь есть время и люди у которых можно посоветоваться и в итоге решить таск. Это я к чему, лично для меня очень важно, когда работадатель смотрит на тебя как на полноценного человека, с уважением и т.д., а не на как винтик в системе.
klimentRu Автор
02.10.2018 13:44Про собеседования нигде не написано. Имеется в виду, что разработчик должен комплексно подходить к поставленной задаче, и думать головой, а не просто уметь нажимать на кнопки.
Дать ответ на задачу быстро в условиях стресса, может только человек, который эту задачу уже решал или знает ответ.
Допустим, что нужно срочно сделать какую-то задачу на работе. Её дают вам, а вы говорите: «Извините не могу работать в условиях стресса. Только если я эту задачу раньше решал.» Так получается?nicholas_k
02.10.2018 13:51Нередко бывает, когда после серии «срочно сделать задачу» люди действительно увольняются.
Особенно, если оказывается, что задача нужна менеджеру для решения сиюминутной задачи, а потом отправляется в корзину.
Факторы стресса и стрессоустойчивости имеют место быть и должны учитываться обеими сторонами.Mike_soft
02.10.2018 16:35я иногда уточняю — «это задача разовая, редкая, или регулярная?» и не вижу ничего страшного в решении сиюминутных задач (иногда — просто отдаю слегка облагороженый результат запроса для разовых задач). и никаких проблем.
а вообще, вся жизнь — стресс. все мы когда-то что-то делаем впервые, все ошибаемся.
ilitaexperta
02.10.2018 15:16Имеется в виду, что разработчик должен комплексно подходить к поставленной задаче, и думать головой
А что, без этого как то можно разработчиком работать? Хотя если смотреть на нынешнее поколение девелоперлов…
Допустим, что нужно срочно сделать какую-то задачу на работе.
Есть разница между решением практической задачи в течении нескольких часов сидя в своем уютном кресле, и решением абстрактной задачи в течении двух минут под взором нескольких экзаменаторов. Это совсем разные вещи, на работе нужно первое, а на собесах проверяют второе.
alexeykuzmin0
02.10.2018 16:58Дать ответ на задачу быстро в условиях стресса, может только человек, который эту задачу уже решал или знает ответ
Если вы говорите про алгоритмические задачи на собеседованиях, то это не так. Подавляющее их большинство без проблем решается за отведенное на интервью время без предзнания.werklop
02.10.2018 17:59Ага, только они потом нафиг не требуются, опять же, в большинстве компаний, однако они упорно их задают, теша свое самолюбие
klimentRu Автор
02.10.2018 19:27Любое задание которое вы выполняете на работе это и есть задачи которые перед вами ставят. Только это задачи из реальной жизни. Суть статьи именно о них.
А на собеседовании их обычно задают для проверки уровня кандидата, а не для самолюбия.
По моему опыту примерно 50% собеседуемых не могут ответить на элементарные вопросы, при этом хотят зп 100к +werklop
02.10.2018 20:12Что вы понимаете под «элементарные вопросы»? Приведите пример.
Т.е. я правильно понимаю, что задачи, по типу олимпиадного программирования или нахождения производной в собеседовании на работу в обычную контору(банк, веб-приложение и т.п.), а не какой-нибудь рокет сайнс/блокчейн/ML/криптография/аналогичное, это нормально, а знание инструментов и фреймворков, с которыми придется работать, а также культура написания кода вовсе не важны на начальном этапе?balexa
03.10.2018 13:28Например когда senior full stack developer не способен объяснить на пальцах как происходит загрузка данных по http и что такое keep alive.
Или человек не знает самой концепции переменных, в прошлой теме кто-то рассказывал. А кидал тучу скрытых editBox на дельфи-форму. И делал достаточно сложные проекты. Тоже наверное сидит и рассказывает, что «это все нафиг не требуется, столько лет работал без них, переменные только в рокетсаенсе и нужны»werklop
03.10.2018 13:33Как я уже написал, не путайте знание инструментов и фреймворков для практической работы с алгоритмическими задачами про коня в вакууме там, где они точно не потребуются
balexa
03.10.2018 14:46Я не понимаю, что значит «алгоритмический конь в вакууме». Вам никогда структуры данных не были нужны? Вы не приходилось задачу на подпункты разбивать? Или что?
werklop
03.10.2018 14:58«алгоритмический конь в вакууме» — это когда ты приходишь на собеседование на условный проект по созданию приложения для складского учета, а тебя спрашивают про «как посчитать площадь стен домов в городе, чтобы рассчитать количество требуемой краски в литрах» или например про какую-нибудь производную… Вместо того, чтобы сделать акцент на структуры данных ЯП, который используется в проекте,
фреймворки, стиль написания кода, именование переменных/методов/классов, понимание того, какой жизненный цикл задачи, начиная от постановки аналитиком и заканчивая взаимодействием с QAbalexa
03.10.2018 15:05или например про какую-нибудь производную
Вы уже который раз повторяете это. Какая-то личная травма?
Да, если в приложении есть хотя бы чуть-чуть математики, это неплохой фильтр. Как считать производную сложно забыть.
как посчитать площадь стен домов в городе
Это где такое справшивают? Уже давно вроде как перестали узнавать почему люки круглые.
Вместо того, чтобы сделать акцент на структуры данных ЯП, который используется в проекте,
фреймворки, стиль написания кода, именование переменных/методов/классов, понимание того, какой жизненный цикл задачи, начиная от постановки аналитиком и заканчивая взаимодействием с QA
Так именно это и спрашивают. Я думал вы из тех кто вообще отрицает что программиста надо спрашивать вопросы по структурам данных, что надо попросить написать простенький код и так далее.werklop
03.10.2018 16:04Вы уже который раз повторяете это. Какая-то личная травма?
Это спрашивают в одном из банков, к примеру. я там не был, травма не моя, но мне рассказали
Это где такое справшивают?
Это просто пример. К такому же примеру я отношу вопросы про сортировки, графы, матрицы и другой матан. Повторюсь, я не про вакансии, где
рокет сайнс/блокчейн/ML/криптография/геймдев/социалки/аналогичное
Так именно это и спрашивают
Если бы только об этом спрашивали, я не стал бы приводить примерыbalexa
03.10.2018 16:56Возможно этот тот банк где я работаю. А возможно и нет, этот вопрос часто на собеседованиях задают в банках, где пишут свой софт, а не внедряют готовые коробочные решения.
Да, для чего нужно знать производную.
0. Проверка технического бакграунда. Если вы не помните что такое производная, значит скорее всего не знаете высшую математику вообще. А это значит вам будет тяжело читать спецификации с трейдинговыми алгоритмами и общаться с людьми которые говорят на языке формул.
Опять же тервер, какие-то алгоритмы на графах, и прочие вещи из дискретки. Они не то что постоянно кодятся, но они есть.
А непосредственно сами производные — первое что лезет в голову
1. Есть куча вещей в прикладной области. Например нарисовать другим цветом кусок графика если он быстро растет.
2. Интерполяция данных опять же. Ну невозможно интерполировать данные не зная что такое производная и какой ее смысл.
Это все еще чисто прикладные области.werklop
03.10.2018 17:07Т.е. вы считаете, что я должен помнить всю вышку из универа? А если я все это время работал в обычном ынтырпрайзе и нигде это не было нужно, от слова совсем, а тут такое… Да, вы можете сказать, что описание вакансии как бы предполагает знание предметной области и поэтому мне сначала придется изучить все, что связано с трейдингом. Вы еще скажите, чтобы у меня было высшее образование по экономике, тогда точно я смогу общаться без проблем с людьми. Ну извините, не все обладают такой памятью и интересом к высшей математике
И кстати да, это совсем не технический бекграундbalexa
03.10.2018 17:20Т.е. вы считаете, что я должен помнить всю вышку из универа?
Да я вообще не считаю что вы что-то должны, или что вам что-то нужно. Не вспоминайте, не учите, вас кто-то заставляет что ли?
Более того, незнание всех этих вещей совсем не помешает вам работать в энтерпрайзе. Причем возможно в том же банке, там тоже есть разные команды, которые делают разные вещи.
Ну извините, не все обладают такой памятью и интересом к высшей математике
Ну да. Именно поэтому и берут не всех, а вначале проводят собеседования. Я не понимаю ваших претензий.
Neikist
03.10.2018 17:31Ммм… Ну, у нас производные в школе давались, никак не в вузе.
werklop
03.10.2018 18:07Хрен редьки не слаще. В школе много чего давалось, однако это не означает, что мы обязаны все помнить на все случаи жизни.
Neikist
03.10.2018 18:14+1Ну, программирование все же считается технической профессией, что подразумевает знания/способности/интерес к точным наукам обычно. Хотя как по мне спрашивать производную действительно смысла мало. Объяснить ее любому чайнику на простом уровне можно очень быстро, а более углубленные знания таким способом вообще не проверяются. К слову лично у меня этих углубленных особо и нет))
ilitaexperta
02.10.2018 20:16А на собеседовании их обычно задают для проверки уровня кандидата, а не для самолюбия.
Только таким образом проверяют умение решать типовые алгоритмические задачки на время, а не уровень кандидата
alexeykuzmin0
02.10.2018 20:18Если эти задачи задают, значит, лучше ничего не придумали для отсева. Ну и вполне есть места, где можно применять знания алгоритмов, не считая даже ежедневных решений типа «что мне здесь использовать, TreeMap или HashMap?»
werklop
02.10.2018 21:29значит, лучше ничего не придумали для отсева
Ха! Люди настолько ленивы, что им проще делать как все, чем подумать над тем, кто им конкретно нужен.
Ну и вполне есть места, где можно применять знания алгоритмов
А я и не говорю о таких местах, они безусловно есть и спрашивать там логично и правильно, но это меньшинство, а большинство спрашивает то, что у меньшинства, потом огребая тонны говнокода, багов и тратят время на обучение, после которого их успешно покидают в те самые места, которые меньшинство
Даже если вам кажется, что это школьная программа, так что, это должны все помнить до самой старости? По себе людей не судите, оглянитесь вокругalexeykuzmin0
02.10.2018 21:35+1Люди настолько ленивы, что им проще делать как все, чем подумать над тем, кто им конкретно нужен.
Кому лень, те постепенно разоряются, в бизнесе каждый день головой думать надо. А вот тех, кто собеседует по алгоритмам, с каждым годом все больше.Даже если вам кажется, что это школьная программа, так что, это должны все помнить до самой старости?
Давайте вспомним, с чего началась ветка. Я спорю с конкретным утверждением:Дать ответ на задачу быстро в условиях стресса, может только человек, который эту задачу уже решал или знает ответ
Оно не верно. Человек, прошедший подготовку, которую без проблем может пройти даже школьник, может решить задачу без предзнания. Это все, что я изначально хотел сказать.
ilitaexperta
02.10.2018 19:06Подавляющее их большинство без проблем решается за отведенное на интервью время без предзнания.
Не совсем. Если вы в свободное время, занимаетесь дрочерством таких задачек, то да, вы сможете быстро их решать. Но, как ниже отметили, к реальной практике это отношения не имеет.alexeykuzmin0
02.10.2018 20:20Достаточно когда-то давно в школьном возрасте немного ими интересоваться и участвовать в школьных олимпиадах (по моему опыту). Несколько удивляет, когда люди называют крайне сложным то, что по плечу школьнику, при должной подготовке.
ilitaexperta
02.10.2018 20:27участвовать в школьных олимпиадах
Может еще надо было на пятерки учиться и не прогуливать?
В качестве бредаУ меня даже проскочила мысль, что это подсознательная месть ботанов из зависти, что более смышленые сверстники не тратили школьные годы на ерундуalexeykuzmin0
02.10.2018 20:51Может еще надо было на пятерки учиться и не прогуливать?
Школьные олимпиады — это достаточное условие, но ни в коем случае не необходимое. Просто для иллюстрации того факта, что нет ничего сложного в решении задач с собеседования за время собеседования. Поскольку это доступно даже школьнику.Логики не прослеживается.
Логика очень проста: есть компании, которые спрашивают на собеседованиях олимпиадные задачи, а есть те, которые спрашивают что-нибудь другое. По моим субъективным наблюдениям, первых постепенно становится больше, чем вторых, и условия работы в них, как правило, лучше. Из чего я делаю вывод, что это более эффективный метод подбора персонала.Из десятка разрабов, нанятых таким способом, испыталку прошел один
Давайте я тоже субъективный опыт приведу. Два этапа собеседования: онлайн-тест и очное собеседование в офисе. Пока тест был на реализацию «условно реальной» фичи, большинство участников очного собеседования были никакие. Когда тест был заменен на список «олимпиадных» задач, все до единого участники очного собеседования стали как минимум «нормальные», а многие и «хорошие».ilitaexperta
02.10.2018 21:05-1Просто для иллюстрации того факта, что нет ничего сложного в решении задач с собеседования за время собеседования
Сложного ничего нет, но почему соискатель должен тратить свободное время на откровенную ерунду, непонятно
Из чего я делаю вывод, что это более эффективный метод подбора персонала.
Причина намного проще — это банальная мода. Все хотят быть как гугл или фейсбук и тащаят оттуда модные штуки для собесов. Но на качество продуктов этих гигантов они не смотрят.СпойлерКачество — говноalexeykuzmin0
02.10.2018 21:39почему соискатель должен тратить свободное время на откровенную ерунду, непонятно
Не должен. Если не хочет, может не тратить, его никто не заставляет.Причина намного проще — это банальная мода.
Почему вы так считаете? Я, по опыту общения с владельцами бизнесов, могу сказать, что им постоянно нужно думать об эффективности, и неверное решение очень быстро может привести к краху. А еще я вижу в мире вокруг себя эксперименты — некоторые вон разработчиков нанимают даже по логам поисковых запросов. То есть, люди явно заинтересованы в повышении эффективности, ищут варианты, но, в основном, используют алгоритмические задачи. Неужели все дело только в моде?за последние десять лет уровень среднего разраба сильно просел
Это противоречит моим наблюдениям.никакие, нормальные и хорошие это оценочные суждения. Расшифруйте что это значит.
Объективно — конверсия на очном собеседовании выросла более, чем на порядок, без изменения его формата или критериев оценки.ilitaexperta
02.10.2018 22:11Почему вы так считаете?
По опыту общения с теми, кто нанимает людей и дает задачки на собесах. Многие из них чуть ли не в прямую об этом говорят.
Это противоречит моим наблюдениям.
Это объективный факт. При росте количества новых разработчиков и уменьшении порога входа, средняя квалификация расти не может.
Объективно — конверсия на очном собеседовании выросла более, чем на порядок, без изменения его формата или критериев оценки.
Расшифруйте что такое никакие, нормальные и хорошие, про конверсию и так понятно. Какие именно у вас критерии оценки? Может вы их по решению задач оцениваете, ясное дело конверсия вырастет. В моем примере конверсия на собесах тоже была неплохая, только кандидаты работать не умели в итогеalexeykuzmin0
04.10.2018 15:17По опыту общения с теми, кто нанимает людей и дает задачки на собесах
Я делаю противоположный вывод тоже по опыту общения с теми, кто собеседует и нанимает людей.При росте количества новых разработчиков и уменьшении порога входа, средняя квалификация расти не может.
Появление новых, более простых, направлений, не означает, что снижаются требования в уже существующих.Какие именно у вас критерии оценки? Может вы их по решению задач оцениваете, ясное дело конверсия вырастет.
Оценивались по знанию алгоритмов, знанию инструментов, умению мыслить (оцениваемому посредством прокси «умение рассуждать вслух»), умению построения архитектуры.
За время испытательного срока не отсеился никто, как до изменения формата теста, так и после.
slonopotamus
02.10.2018 20:43+2В мире есть программисты, которые способны решать "такие задачки" не занимаясь "дрочерством", а вот просто читать задачу, включать мозг и придумывать решение.
ilitaexperta
02.10.2018 20:46Ну есть и есть. Какое это отношение к рабочим задачам имеет? Можем так же проверять умение рисовать на собесе. Поверьте, есть программисты которые умеют красиво рисовать не ходя в художественную школу, а просто брать в руку карандаш, включать воображение и придумывать картины.
slonopotamus
02.10.2018 21:06+1Такое отношение что решение задачи требует составление алгоритма, который суть и есть программа.
Вообще, если у вас есть какие-то доказательства что отказ от задачек или из замена на что-то другое увеличит КПД процесса найма программистов, назовите их уже.
sentyaev
02.10.2018 17:32Т.е. мы не проверяем то, как человек решает мыслит и рассуждает, а просто отбираем тех, кто такие типовые задачки задрачивает, посути это отрицательный отбор.
Так это же хорошо, если вы пришли на собеседование в такую компанию, вы будете точно уверены, что идти туда работать не стоит.
Зачем вообще расстраиваться, что компании проводят плохие собеседования? Там же скорее всего работаь еще хуже. Если компания не может организовать процесс найма сотрудников, то в работе там такой же бардак. Радуйтесь, вы потратили пару часов и точно знаете, что вам туда не нужно.
Однажды я отработал в компании всего несколько дней и уволился. Процесс найма был отличным, я с удовольствием прошел 4 тура собеседований, и с HR, и дважды с технарями, и с руководителем. Мы обсуждали мой предыдущий опыт, решали довольно интересные задачи, не типовые. Я много расспрашивал про рабочий процесс, проект в котором я буду работать, в общем выглядело все очень хорошо. Когда я вышел на работу, оказалось, что я буду работать в совершенно в другом продукте, с другими людьми, и с другими технологиями, да и процессы там свои. А тратить свое время на то болото мне не хотелось, т.к. проектов поинтересней было предостаточно.
slonopotamus
02.10.2018 19:57Если ВЫ не можете в условиях ограниченного времени с холодной головой проанализировать проблему и найти решение, а другой может, то нойте сколько угодно о несовершенстве мира, но это его конкурентное преимущество и у работодателя могут возникнуть ситуации, когда оно окажется решающим.
andyudol
02.10.2018 16:32-1Видимо, у автора нет опыта применения своих советов. Иначе он показал бы хоть один конкретный пример.
andyudol
02.10.2018 17:44-1Господин минусёр, а вы можете поделиться опытом применения этих советов?
Defersa
02.10.2018 18:00Не берите близко к сердцу, когда автор статьи может максимум выразить свое несогласие «минусом» и сказать ему особо нечего, это очень красноречиво говорит о его уровне и качестве статьи.
Neikist
02.10.2018 18:03А причем здесь автор? Это же перевод. Или автор свою статью на русский перевел?
WeltRogg
02.10.2018 17:15«Каждый должен учиться программированию, потому что оно учит думать.» сказал дизайнер Стив Джобс
nickolaym
03.10.2018 15:02Потому что дизайнеру Джобсу нужны были подчинённые-программисты.
Вот он и учил их думать, что учит их думать. (А на самом деле, он учил их программировать на Джобса).
an_v
02.10.2018 17:59“Если вы не можете объяснить что-то простым языком, то вы не понимаете этого.”
— ?Richard Feynman
Это был Эйнштейн.
В оригинале:
If you can't explain it simply, you don't understand it well enough.
nickolaym
03.10.2018 15:03"Этим Фейнманом был Альберт Эйнштейн" :)))
Mike_soft
03.10.2018 15:12Папа, как звали Бетховена?©Был у меня приятель — Миша. Как-то в уже не очень сопливом возрасте, лет так в 16-17, подходит он к папе и спрашивает:
— Папа, а как звали Бетховена?
Папа, пожилой интеллигентный еврей, начинает на Мишу брызгать слюной:
— Миша, да как ты можешь! Ты же интеллигентный человек! Ты учишься в школе! Мы тебя воспитывали! Просто позор в таком возрасте этого не знать! Каждый должен впитать это с молоком матери!..
Ну и так далее. Потом, выговорившись, назидательным тоном:
— Запомни, Миша, Бетховена звали Иоганн… Себастьян… (Садится на стул, делает паузу секунд на 10...)… Бах.
©
vba
02.10.2018 18:37«Каждый должен учиться программированию, потому что оно учит думать.»
Сказал человек который к программированию не имел никакого отношения, а хотя какая разница, его же ведь все боготворят.
didkovskyi
02.10.2018 19:293. Декомпозиция
В этом направлении есть отличные лекции по динамическому программированию. Можно поискать «Игорь Клейнер» на Ютубе.
xState_level80
02.10.2018 23:03У меня как уже иностранца в голове засел встречный вопрос — почему русскоязычники/люди-из-СНГ в среднем лучше кодят/соображают чем их собратья по цеху?
FilimoniC
02.10.2018 23:46Жизнь такая .) Потому что собратья из СНГ воспитаны поколением, которому ничего нельзя было купить. Кто-то развивал коммуникативные навыки для добычи "того что нельзя достать", а кто-то искал альтернативные варианты решения задачи. Отсюда образ мышления, передавшийся с поколением. Первая мысль не "где я могу это купить", а "как я могу это сделать из говна и "
Stiver
03.10.2018 09:35Так «кодят» или «соображают»? Это несколько разные вещи :)
Не уверен, мои наблюдения этого не подтверждают. В принципе есть, грубо говоря, две традиции изучения: западная, которая идет через понимание, и восточная, которая идет через повторение/заучивание. Постсоветское пространство традиционно болтается где-то посередине с заметным креном в восточную. Соответственно все, что требует понимания и охвата на высоком уровне, часто вызывает сложности.
didkovskyi
03.10.2018 13:13русскоязычники/люди-из-СНГ в среднем лучше кодят/соображают
А кроме ваших слов, это как-то еще подтверждается?xState_level80
03.10.2018 20:49Мои умозаключения основаны на моем опыте — слышал от других, читал, замечал(живу в Европе). А по факту — единственное, что на ум ещё приходит это та же ежегодная олимпиада по программированию, где Россия занимает 7 лет подряд первые места
alexeykuzmin0
04.10.2018 15:24та же ежегодная олимпиада по программированию
Если вы про IOI, то там Россия, конечно, среди лидеров, но не на первом месте: таблица медалей, таблица выдающихся участников. А если вы про ACM ICPC, то там хорошо видно, что у нас есть лишь некоторые яркие школы, а средний уровень не так уж и высок: таблица лучших ВУЗов, там же чуть ниже — таблица числа чемпионств по странам.xState_level80
04.10.2018 21:17Про ACM ICPC. Спасибо за обзор) А что про русских хакеров тогда? Они хотя бы в топе?
agarus
04.10.2018 00:28Может 70 лет тирании, диктатуры и идиотизма, а потом и последовавшие 15 лет нищеты, повысили шизоидность народа?
nickolaym
03.10.2018 15:05Э… А где здесь урок?
Лекцию мотивировочную вижу. А примеры, упражнения, разбор конкретных задач?
tretyakovmax
03.10.2018 15:13Играя в шахматы можно хорошо научится только играть в шахматы. Ни шахматы ни видеоигры ни кроссворды никак не помогут научится решать программерские задачи.
Mike_soft
03.10.2018 15:44но тем не менее, эти занятия улучшают «общую мозговую деятельность». что-то типа «ОФП для мозгов»
agarus
03.10.2018 22:23Большинство работодателей считает более важным навык решения задач.
…
— ?Hacker Rank (2018 Developer Skills Report)
Как неожиданно. Сайт с задачками утверждает, что главное в карьере — задачки…klimentRu Автор
04.10.2018 08:57То что мы каждый день делаем на работе это тоже задачи. И смысл в том, что надо понимать их суть в том числе со стороны бизнеса, и уметь разобраться и декомпозировать. А сайты с задачками как раз и помогают улучшать эти навыки.
Defersa
Ох уж эти статьи, на 1/3 содержащие только мотивирующие цитатки Стетхема. По факту для любой области, где ты хочешь преуспеть нужно лишь 3 вещи: книга, практика и желание, все остальное это тренинги прямиком с лужников.
klimentRu Автор
То есть если хочешь стать хирургом, то достаточно купить справочник и тесак? И можно прочесть и идти практиковаться?
Около пяти лет занимался программированием станков ЧПУ. И скажу что при ошибке в программе станка велика вероятность повредить оборудование, или нанести ущерб работающим людям.
Человек который считает, что достаточно прочесть книгу видимо никогда не делал ничего серьезного. Или является непризнаным гением.
Defersa
Под книгой я подразумевал знания. Под практикой я подразумевал (как не странно) практику. Раньше хирургии по книгам некоторые обучались. Не беда. То что после специализированного учебного заведения выходят отменные специалисты я и не спорил.
Только вот в чем беда: после этой статьи человек станет хирургом? Тогда к чему вы ведете?
klimentRu Автор
Веду к тому, что выше и написано, что надо практиковаться, но при этом систематически имея определенный подход и не сдаваться в случае затруднений.
Может у вас есть более полезные советы и своя стратегия изучения нового или книги достаточно?
Defersa
То есть если хирургу напишут: "нужно что бы при операции руки не треслись", у него перестанут треслись руки? Это опыт и знания, полученные годами. Вся статья — компиляция из общих советов, которые архитипом откладываются в головах программистов, которые приходят со знаниями и и опытом. Я не вижу как она может помочь людям, которых действительно хотят программировать. А те, кто захотел перебраться из /вставьте нужную профессию/ во что то более хайповое и прибыльное нечего не вынесут из нее.
Ах да, если человека нет мотивации внутри, то никакие цитаты не помогут.
klimentRu Автор
С таким подходом можно любую книгу. Например «Совершенный код» можно назвать сборником общих советов. Т.к. некоторые описаные там вещи довольно очевидны.
Может вы считаете, что патерны это тоже архитипы, и не стоит их изучать? Только практика из 1000 строк валидного кода запиханых в один класс или в одну функцию.
Я знаю и ведущих специалистов которые на практике за пять и более лет не научились декомпозировать методы и классы, и думаю для них данная инфа тоже была бы полезной.
ilitaexperta
Умение проектировать приходит с опытом и пониманием процесса. Люди, которые вместо этого заучивают паттерны, теряют возможность самостоятельно думать в вопросах проектирования, и начинают думтать в рамках шаблонов. И просто подбирают паттерны под нужный случай, многим из них уже даже не приходит в голову, что можно как-то по-своему сделать.
Если вас во время такой практики не посещает мысль, что 1000 строк в одном месте это так себе идея, вам выше кодера не подняться
Этим людям не место в профессии, заучивание паттернов ситуацию не улучшит.
Mike_soft
Иногда данный вовремя совет или пинок в нужном направлении экономит месяцы «нахождения опыта и прихождения понимания». Так, в свое время книга ВанТассела изрядно изменила стиль написания программ (причем почти у всей нашей компашки юных самодеятельных программистов). Книга Вирта дала много знаний о том, что «кроме пузырька есть и другие методы сортировки». а подсунутые инженерами кафедры задачки — увели от бессмысленного играния в самописные (гы, на фортране) игрульки…
видел я «сделанные по своему» модули… креативность, совмещенная с безмозглостью — адская смесь. ну и «сделал по своему» — заставляет вспомнить фразу из анекдота «Штирлиц любил стоять на своём...»klimentRu Автор
Заучивание и изучение это немного разные вещи. Естественно не стоит зубрить все наизусть. Но читать и пытаться понять всегда полезно. Даже для джунов.
В любой технической отрасли есть основы, которые должен знать каждый хотя бы частично. В математике никто не говорит, что использование таблицы умножение это мышление в рамках шаблонов. Или в физике закон Ньютона.
Из моей практики. Разговоры про «креативный подход и мышление вне шаблонов» начинают обычно как раз те кто пишет такой код, и считает его уже идеальным.
P.S. А вы вышли за рамки шаблонов или потеряли возможность самостоятельно думать?
ilitaexperta
Ты вот откуда эти покалеченные джуны берутся.
Вы предлагаете изучать таблицу умножение вместо того чтобы изучать само умножение
Я на своей практике, еще не видел человека который бы любил паттерны и при этом мог грамотно что-то спроективровать
По вашему вопросу видно, что вы уже не понимаете, как можно думать и проектировать не используя паттерны. Об этом разрушительном влиянии я и говорил.
Я учился программированию в те времена, когда паттерны за знания не считались
klimentRu Автор
Можно поинтересоваться а основные парадигмы ООП тоже не нужны?
Вы предлагаете умножать не зная таблицу умножения?
На перфокартах что-ли? Но и тогда были фундаментальные основы.
Mike_soft
Defersa
Эта статья — просто популистическая компиляция общих советов, прочтение которых ничего не даст никому. Я вообще не вижу в ней смысла, кроме «скромного» пиара очередной конторы по обучению программистов.
Программирование в первую очередь это борьба: поиск нужной информации, поиск решения нестандартных проблем и постоянная война с пк. Статьи вида «научим думать как программист», «обучим основам кодинга» в себе кроме как популизма не несут.
На счет обучения: я жил в местности, где не было интернета и ни одного человека, умеющего программировать. И это мне не помешало в 10том классе сверстать свой первый сайт и написать простенькие скрипты к нему.
Я это к чему: тому человеку, кто рвется вверх и хочет прогрессировать нужны лишь знания и практика. А тот, кому нужна мотивация и готовые ответы и с этой статьей далеко не уедут.
PS: почему я категорически настроен против: в статье нет ничего нового, а годной компиляцией назвать ее язык не поворачивается. По большому счету она ничем не отличается от бизнес-тренингов на которых тоже говорят общие вещи типа «экономьте»,«продумывайте» и прочее. Хорошо что хоть тут за прочтение копейку не взяли, и на том спасибо.
bopoh13
У вас реклама головного мозга. Эта ссылка является частью перевода. klimentRu спасибо за перевод. Эта статья является руководством по принципу «Разделяй и властвуй». Всё таки менеджеры не зря бутерброды кушают.
nafgne
В чём проблема освоить ЧПУ по книгам? От меня в двух метрах уже полгода фрезер стоит, пальцы на месте, брат не умер.
klimentRu Автор
Одно дело станок для хобби в гараже, другое промышленное оборудование со скоростью перемещения на ускоренном ходу до 30 м/мин. Пролетит перед глазами даже кнопку аварийного останова нажать не успеешь. Стоимостью одной фрезы 5 — 10 к рублей поломка которой уже является существенным косяком. И учитывая особенности обработки от аллюминия до титановых и жаропрочных сплавов. И точности обработки до пяти микрон. Технологического цикла в котором может быть задействовандо 5-10 человек и прочего.
Я не против книг. Как раз за них, но во многих случаях полезнее (особенно для начинающих) краткая инструкция и наставничество. Чтоб человек понимал основные алгоритмы и узкие места своей работы.
3aicheg
Да. Только сначала на мышах и лягуша?х. В общем-то, когда хирургия была примерно на той стадии развития, на которой сейчас программирование, оно ведь как-то так и было. А если бы анатомия и физиология не стояли на месте, а изменялись так же, как компьютеры — то, подозреваю, как-то так было бы и до сих пор. Собственно, и со станками ЧПУ тоже можно, просто не надо начинать свою практику сразу с фрезы 30 м/мин.