inlanger
@inlanger
Django программист

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

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

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

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

Смысл этого вопроса - собрать как можно больше вариантов и попробовать создать идеальный пошаговый алгоритм решения практически любой задачи и услышать как можно больше мнений по этому вопросу. Спасибо!
  • Вопрос задан
  • 1637 просмотров
Пригласить эксперта
Ответы на вопрос 10
Denormalization
@Denormalization
Часто сталкиваюсь с такими людьми. Это "программисты поневоле", как я их называю.
Этим людям не интересно программирование как таковое, им интересна их зарплата.

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

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

Когда вы рассказываете им решение задачи - они ничему не учатся. Они тупо заучивают очередное решение, возможно даже не вникая в его суть.

Заставляйте таких людей ДУМАТЬ. Задавайте наводящие вопросы.
Пусть лучше они сделают кривое решение, которые вы потом заставите их переделывать, но у них в голове останутся хоть какие-то знания.
Ответ написан
@dmitryKovalskiy
программист средней руки
Вот вы вроде опытный программист, Senior. Но хотите найти "идеальный" алгоритм для решения любой задачи. Я думаю что если бы имелось решение - задача про P/NP давно была бы разобрана, а миллион долларов пропит. К сожалению ИТ-индустрия, за счет зарплат выше среднего по всему рынку труда, привлекает к себе людей, не знакомых даже с самим понятием алгоритма. Умные специалисты рассказывают что "математика не нужна", а "высшее образование только мешается". Как итог мы имеем определенный пласт людей, прочитавших пару книг по синтаксису, решивших задачу обхода конем и уже считающих себя программистами. Я вот с завидной регулярностью на данном ресурсе нахожу вопросы вроде "мне 16 лет, как заработать фрилансом программиста". Да возможно человек - Билл Гейтс или другой гений отрасли, но тогда вряд ли бы он задавал здесь вопрос. Да, может быть разная финансовая ситуация и людей вынужденно толкают за заработком. Но итог - практически полное отсутствие подготовки в области алгоритмов, архитектуры, паттернов проектирования и прочее, а зряплату уже хочется хорошую. Я сам не без грешен в этом отношении. Желаю вам терпения и талантливых junior-ов. Но их будет меньшинство.
Ответ написан
Foolleren
@Foolleren
Компас есть, копать не люблю...
Давайте поразмышляем в отрыве от программирования.
1) чтобы человек делал что-то его надо заставить, неважно чем и как, голодом, квартплатой, желанием выпендриться(психологи называют это самореализацией) или надраться вечером в пятницу
2) чтобы человек делал это качественно ему должно это нравиться, вот второй пункт самый проблемный если человеку не нравится то чем он занят он думает над этим только в процессе работы над этим,( а то и совсем не думает), естественно это вызывает ступор в нестандартной ситуации когда надо включить весь мозг в работу, а не думать о своём, а руки что-то там клепают

но давайте я вам расскажу как я решаю свои задачи которые мне приходится решать даже если они мне не нравятся
1) надо определиться с тем что должно быть на выходе ( если я не понимаю что я должен получить я не могу этого сделать) по этому, чем точнее описание результата работы, тем она будет быстрее и качественнее выполнена.
2)Надо определиться с тем что на входе( инструменты и материалы- в случае программирования данные)
2,1)Вуаля! мы уже имеем чёрный ящик. У нас есть вход и выход, но нет наполнения.
2,2)Проще всего когда это типовая задача - всё решено до нас и не один раз - можно загуглить, а иногда даже и скопипастить.-> конец
3)После некоторого времени вопрашаний гугла выясняется что задача не такая и простая. Вот тут начинается самое весёлое - процесс творчества который сложно описать, но я попробую.
3.1)Для начала, раз уж не получилось сразу заполнить наш чёрный ящик одной фигурой, разбиваем его на два поменьше, в результате мы имеем уже два чёрных ящика с неизвестным входом и известным выходом и на оборот.
3.2)Пытаемся их состыковать поисками аналогичных решений в голове или интернэтах, ну... грубо говоря может кто-то уже делал что либо подобное, но с другими материалами или инструментами, и что можно сделать с имеющимися инструментами и материалами. (копать можно с любого конца или с двух сразу) находим кучу чёрных ящиков.
4)Проверяем как стыкуются наши наборы чёрных ящиков поменьше, сошлось?-> конец,
4,1)не складываются? Берём наиболее подходящий набор чёрных ящиков смотрим их содержимое
4,2)находим причину нестыковки , пытаемся убрать лишнее или ищём ещё один чёрный ящик который позволит первые два достыковать, переходим к пункту 4

резюмируя
Нужна прежде всего мотивация надо заинтересовать человека, показать ему такой путь в котором его качественная работа это хорошее средство достижения его цели, если это получится он сам всё начнёт делать. Дальше ему понадобится только подсказывать направление, что бы он не сильно сбивался с курса.
Ответ написан
Комментировать
@vilgeforce
Раздолбай и программист
Универсальный алгоритм решения любой задачи... Чудес не бывает.
Ответ написан
Комментировать
trevoga_su
@trevoga_su
может просто надо нормальное ТЗ ставить? вот люди и тупят, не понимая что в итоге от них хотите получить.
Ответ написан
Комментировать
saboteur_kiev
@saboteur_kiev Куратор тега Python
software engineer
Обычная ситуация. 90% людей - тупые.
Программирование - такая же профессия как и все остальные, и чтобы программировать не обязательно быть умным или пройти IQ тест на 100+. Можно просто зазубрить ключевые слова и синтаксис, и получается джун, который способен решать только то, чему его научили.
Просто раньше в ИТ таких встречалось меньше, теперь больше.
Почитайте статью про "функциональная безграмотность" - там неплохо описано что происходит. А возникает это, потому что очень мало людей занимаются своими детьми. Их воспитывают, что в основном выглядит как помыли-накормили-иди-играйся. А надо развивать. Чтобы мозг с детства учился решать задачи.
Ответ написан
@MonkAlex
C#, SQL, Delphi, C++ etc
Не силён в питоне, но мне в большинстве случаев нужен опыт решения похожих задач.
В том плане, что мне нужно какое то ядро, на основе которого я начну строить всё остальное.

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

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

Дело в опыте и ничем ином. Конечно, гугл поможет с простыми вопросами типа "как сформировать и передать DTO c клиента на сервер", но гугл редко помогает нормально с вопросами типа "как написать сервер-приложение для %название на %ОС".

А без опыта и гугла остаются только наставники.

UPD: если я неправильно понял вопрос, то приведите примеры, на чем они могут зависнуть. Потому как зависнуть на том, что можно сделать за час, можно только при очень расплывчатой формулировке.
Ответ написан
Комментировать
@kstyle
Надо учить включать мозги без шпаргалок (похожая задача фактически содержит в себе подсказку). А вы предлагаете создать идеальную шпаргалку вместо того, чтобы искать идеальную методику обучению, гарантирующую включение мозгов через полгода. Заменить работу учителя на инструкцию не получится.
Ответ написан
Комментировать
@mamkaololosha
Универсальный алгоритм решения любой задачи - опыт. Чем больше задач решал - тем больше сможешь решить. У ваших людей нету опыта. Когда будет - смогут решать. А сейчас терпите.
Ответ написан
Комментировать
VoidVolker
@VoidVolker
Это очень простой алгоритм на самом деле. Этим людям явно не хватает мотивации, чтобы включить мозг и решить новую для них задачу. Дело не в том, что они не могут найти решение, а в том что для этого нужно включить мозг и подумать. Если человек ленив или не способен к мышлению, особенно к творческому (а поиск решения и разработка нового для себя алгоритма - это таки творческий процесс) — то ему уже ничего не поможет, кроме кнута и палки.
В данном случае надо этих джуниоров загнать в тупик и под давлением стресса заставить работать. Например, дать вот такую новую задачу, запереть в кабинете и дать час-два: все то время, которое он потратит на поиск решения более часа-двух - вычесть из зарплаты. Или, например, уменьшить премию. И пускай решает хоть целый месяц, но решит. Уверен, большинство быстро сообразят, что лучше таки включить мозг и ненмого напрячься, чем потом сосать лапу или искать новую работу. Ну а те, кто не таки не смог решить такую новую задачу, даже когда их в жопу клюнул жареных петух... Думаю ответ очевиден — пускай ищут профессию по умениям и навыкам. Ибо IT и программирование — это ежедневная учеба и усвоение новых знаний. Без этих навыков человеку в IT делать нечего. Кстати, программирвоание по тяжести труда тяжелее добычи ископаемых в шахтах.
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы