Методика разминки для кодера
Однако, не совсем ясно где задачки брать и какого-типа они должны быть. Вроде бы должны быть не слишком сложные, чтобы основная сила на работу шла, но и от слишком простых смысла мало.
Хотелось бы узнать, применяет ли кто-то такие разминки. Если применяет, то какие задачки использует, откуда берёт.
Не в бровь, а в глаз. Вывод: кодеру разминка не нужна.
Определение может и верное, но с выводом не могу согласиться. Тот, кто вбивает код, должен быть внимательным и аккуратным хотя бы. Ещё лучше, если понимает, что вбивает.
В принципе, если упростить до такого понимания, то можно для тренировки набивать по памяти алгоритмы сортировки, например. Пальцы разомнутся, внимательность включится. Если идеи лучше не найдётся, остановлюсь на этой.
А зачем ему понимать, в лучшем случае его будут пинать те, чье ревью он не пройдет. А так, работа идет, изменения в репозиторий льются, отчеты наверх пишутся - "все счастливы".
Пожалуй, процитирую чувака, описывающего свой рабочий день:
В принципе, если упростить до такого понимания, то можно для тренировки набивать по памяти алгоритмы сортировки, например. Пальцы разомнутся, внимательность включится. Если идеи лучше не найдётся, остановлюсь на этой.
Ну раз делать больше нечего, то да, в самый раз, тратить свое время на конвейерное написание велосипедов.
Слуш, так же со скуки можно помереть. Ну вот честно.
Ну, ИМХО, кодер не надсажается => разминка ему не нужна. Хотя, если "кодер" в историческом понимании этого слова - то может размять пальцы. Размять пальцы - не значит по клавишам постучать, а "пальцы в замок, и...". Ну а еще в тему, профессиональное заболевание кодеров, программистов, наборщиков текста(и МБ кого-то забыл) - это воспаление суставов на пальцах(можно найти в интернетах сложное и длинное, но научное название). Заболевание почти не лечится. Профилактика это клавиатура с мягким ходом клавиш, а лучше вообще специальная клавиатура для профилактики. Заболевание лечится временем, но годами не сможете пользоваться компьютером. Ну а чтобы не усугублять ситуацию не стоит заниматься конвеерным изобретением велосипедов(согласен я с Рамон-ом).
Когда я говорю "кодер", то подразумеваю того, кто "код вбивает". Почему это надо делать тупо - мне не ясно.
Велосипеды тут не при чём. Если так рассуждать, то и спортсменам тренировки не нужны - пустая трата времени.
без разминки спортсмен получит травму, разминает суставы, разогревает мышцы. Кодер вряд-ли получит травму, про пальцы я выше написал.
Не совсем понимаю почему всё сводится к тупому наборщику текста. Разве программист не обладает навыками кодера? И почему всё сводится к пальцам?
Известен же случай:
Тут же дело не в пальцах, не в суставах и даже не в очиненном пёрышке.
Так же и в программировании может быть.
Я лично в обед перекладываю решения студенческих задач на Scheme и Forth.
Впрочем, я и не кодер... :)
я не жил в то время, но ходят слухи, что когда компьютеры были большими - то программистов вообще не было(не обучали по такой специальности), зато были алгоритмисты и кодеры.
Суть работы алгоритмиста заключалась в разработке оптимального алгоритма, в реализацию они не вникали(наверное, чем-то напоминает современных проектировщиков).
Суть работы кодера заключалась в том, чтобы набирать оптимальный код данного алгоритма под конкретную архитектуру, нужно это было, во многом, из-за того что производительность компьютеров была низкой, компиляторы ЯВУ генерировали не оптимальный код, поэтому если они и не писали в байткоде, то уж точно активно использовали ассемблерные вставки.
Однажды производительность компьютеров стала достаточной для того, чтобы алгоритмисты смогли обходиться без кодеров. При этом алгоритмисты превратились в программистов, а кодеры вымерли, т.к. не имели достаточных навыков/квалификации в части разработки алгоритмов чтобы тоже стать программистами.
Отсюда слово "кодер" стало нарицательным, так называют низкоквалифицированного программиста(во всяком случае, часто оно используется именно так). Видимо потому что с современной точки зрения, суть их работы сводилась к набору текста, а моменты низкоуровневой оптимизации, да и вообще, зашкаливающего количества архитектур того времени сейчас упускаются из внимания.
Повторюсь, я не жил в то время, то что описано - это картина, которая как-то у меня сложилась под воздействием всякой литературы.
Вот это хорошая идея - переводить с одного языка на другой. Заодно языки можно изучать (хотя, вероятно, это и есть основная цель :) ).
Суть работы алгоритмиста заключалась в разработке оптимального алгоритма, в реализацию они не вникали(наверное, чем-то напоминает современных проектировщиков).
Я примерно так же рассуждаю. Есть проектировщик, который хорошо понимает предметную область, который больше рисует диаграммы и т.п., чем программирует. И есть кодер. В Википедии для него такое определение:
Про тупость работы не говорится. Более того, нет намёка, что его работа не является творческой.
Чтобы не оторваться от реальности, проектировщику тоже надо представлять, что такое исходный код. Для этого нужна практика.
Кроме того, есть программисты-одиночки, которым необходимо сочетать в себе несколько навыков.
Найдите десять отличий: кодер, разработчик, инженер, архитектор.
См. выше.
Ну да, я, примерно, года полтора переводил все на пролог :) Пролог сначала показался очень необычным, переводить интересно было, всякие там выкрутасы, отсечения, откаты...логика совсем другая, но потом надоело ))
На чем сейчас пишу...не скажу ))
Наверное потому, что в теме фигурирует "разминка".
Я считаю, что мозг не получится травмировать, травмируются пальцы. Совсем забыл, еще программист может выполнить пару десятков приседаний для разминки(профилактика неизбежного геморроя). Еще есть "разминка для глаз", их программист тоже может травмировать. Не проверял, но пишут, что когда человек смотрит в монитор - то реже моргает, в результате сохнут глаза и пропадает что-то там защитное. Когда человек смотрит в монитор - то напрягает глаза(если на текст, например, смотрит), а если это продолжается долго - то что-то там происходит с глазной мышцей(из-за того что она постоянно напряжена), и она вообще перестает расслабляться - резко падает зрение.
Я вижу, что Вас чем-то раздражает термин "кодер" и поэтому Вы углубляетесь в ненужные дебри. Если за этим стоит что-то кроме непонятных комплексов, то говорите конкретнее.
Очень даже получится :)
Не то, чтобы травмировать, но расслабить память, вычислительные способности, внимательность, аккуратность можно легко. Что скажется на качестве программ.
Конечно, для программиста важно логическое, системное, абстрактное, алгоритмическое мышление, аналитический склад ума и т.п. Но это отдельная тема. Сейчас я рассматриваю конкретную простую область.
Я по крайней мере стараюсь работать по такой схеме:
1. Придумал
2. Проанализировал
3. Проверил
4. Закодил
Причем последнее выполняется быстро и просто, практически на автомате. А вот для первых трех пунктов разминка конечно нужна, но совершенно с "кодированием" не связанная. Решение логических, алгоритмических задач, разбор какого-нибудь не очень сложного алгоритма, составленного другим человеком - мне вполне хватает. Даже банально залезть на пару-тройку форумов, посмотреть на какие-нибудь вопросы от студентов, взять да помочь одному-двум - вот вам и разминка.
В чём заключается эта разминка для первых трёх пунктов?
Согласен, что это неплохой способ. Но он непредсказуемый. Например, во время каникул студентам помощь может быть вообще не нужна.
Я ж написал - решение _логических_ и _алгоритмических_ задач. Еще можно простенькие задачи проектирования брать....
Непредсказуемый только в случае упора на студентов. Это - пример. Никто не запрещает придумать какой-нибудь свой новый, с блэкджеком и ...., приближенный алгоритм решения NP-полной задачи какой-нибудь.
Язык определяет мышление. Неправильно выбранный термин неизбежно увёл бы дискуссию во флуд, как обычно. А потроллить тролля -- хорошая разминка. Перед написанием документации мозг прочищает -- сразу яснее мыслишь.
Пытался я найти подходящий задачник, содержащий задачи типа взятой отсюда: http://habrahabr.ru/blogs/code_wtf/116842/
Для тех, кто не ходит по ссылкам:
1
2-1
1-2-3
4-3-2-1
1-2-3-4-5
6-5-4-3-2-1
(Естественно, вместо 6 может быть любое число).
Однако пока не нашел. Попадаются либо совсем простые задачи (примените оператор if), либо слишком сложные, отягощённые всякой научной ерундой.
Ну ещё поиск логических задач выводит кучу книг по шахматам...
Может неправильно понимаю, но это, образно выражаясь, не разминка, а занятие со штангой большого веса.
Не хватит ли уже одного дрянного слова для трёх-то страниц? :)
Интересный ресурс. И вроде бы я его видел.
Посмотрел на задачки и понял, что идеально было бы, если на тренировочные задачи можно было бы составить очевидный тест. Например, такому условию соответствует задача 9:
Тут тест будет такой: (a + b + c == 1000) and (a*a + b*b == c*c)
Тогда бы не требовалось знать ответы.
Не совсем по делу замечу, что эту задачу я решил на листочке, глянув статью в Википедии. Уже третья примитивная тройка, умноженная на 25, подошла... То есть в идеале задание надо изменить: написать функцию, которая бы находила тройку для заданного числа, если это возможно.
В любом случае хорошо, что вырабатываются какие-то требования к тренировочным задачкам. Пусть пока ещё не очень конкретные.
А надо более корректно формулировать, чтобы палками со всех сторон не получать.
По теме: Есть задача - решаем задачу, нет задачи - отдыхаем и наслаждаемся видами.
PS: Можно, конечно, и 9 лет перед стеной просидеть "разминаясь".
...
PS: Можно, конечно, и 9 лет перед стеной просидеть "разминаясь".
Да. Разминка не должна занимать более 10 минут в среднем. Возможно, в понедельник можно чуть больше времени выделять :)
Какие цели и задачи должна решать разминка по-твоему вообще и для кодера в частности?
[QUOTE=Der Meister]Я лично в обед перекладываю решения студенческих задач на Scheme и Forth.[/QUOTE]Это больше похоже на тренировку. Другие цели.
Какие цели и задачи должна решать разминка по-твоему вообще и для кодера в частности?
1. По моему опыту, хороший код у меня создается после некоторого разгона. Обычно этот "разгон" ведётся прямо в рабочем коде, что не есть правильно, ибо ошибки вносятся. Можно, конечно, копировать проект, разгоняться в копии, а затем её удалять. Возможно, это было бы наиболее эффективно, но это противоречит человеческой жадности. Потому ищу альтернативу.
2. Обычно рабочий код сравнительно сложен. Если не из-за качества, так из-за количества. Поэтому "не разогретый" мозг трудно заставить сразу работать с таким кодом. Есть некоторое внутреннее сопротивление.
3. Если задачки дадут пищу для идей, либо закрепят какой-то навык (например, навык использования printf), то это будет тоже неплохо. Хотя это уже жадность :)
Про "вообще". Разминка должна беречь от травм и позволять добиваться лучших результатов. В случае кодера без разминки "травмы" наносятся коду. Хотя может и кодеру тоже, не знаю.
2. Обычно рабочий код сравнительно сложен. Если не из-за качества, так из-за количества. Поэтому "не разогретый" мозг трудно заставить сразу работать с таким кодом. Есть некоторое внутреннее сопротивление.
Боюсь ваши проблемы связаны лишь с одним, отсутствием этапа проектирования как такового либо недостаточным качеством оного.
Во первых, ошибки типа перепутывания параметров в стандартных функциях не устранить проектированием. А код с такими ошибками может долго жить. Тут скорее можно говорить про тестирование, но и тестирование не гарантирует того, что ошибок нет.
Во вторых, когда работаешь с унаследованным кодом, особенно рассчитанным на какой-нибудь контроллер типа 8051 (то есть, в котором не всегда можно позволить себе роскошества компьютерных программ), то бывает и проектирование недостаточного качества. И это нормально.
Цель тренировки - разучивание новых навыков, или совершенствование имеющихся. По-моему, следует их различать для лучшей результативности ;)
[QUOTE=Kogrom]1. По моему опыту, хороший код у меня создается после некоторого разгона. Обычно этот "разгон" ведётся прямо в рабочем коде, что не есть правильно, ибо ошибки вносятся. Можно, конечно, копировать проект, разгоняться в копии, а затем её удалять. Возможно, это было бы наиболее эффективно, но это противоречит человеческой жадности. Потому ищу альтернативу.
2. Обычно рабочий код сравнительно сложен. Если не из-за качества, так из-за количества. Поэтому "не разогретый" мозг трудно заставить сразу работать с таким кодом. Есть некоторое внутреннее сопротивление.[/QUOTE]Мозг все-таки не мышцы, и вряд ли требует такого "разогрева". Скорее, можно говорить о достижении некого оптимального состояния для кодирования. (Впрочем, в широком смысле подготовка мышц к работе посредством разминки на тренировке или под действием адреналина при опасности тоже является достижением оптимального состояния). Если так расставлять акценты, возможно, это натолкнет на нужные мысли ;)
Все-таки требует, хоть и не мышцы. Об этом еще Льюис Кэррол писал...
Во вторых, когда работаешь с унаследованным кодом, особенно рассчитанным на какой-нибудь контроллер типа 8051 (то есть, в котором не всегда можно позволить себе роскошества компьютерных программ), то бывает и проектирование недостаточного качества. И это нормально.
В поисках осознанности.
Еще один, ну не о разминке пальцев речь же.
Многие, я думаю, знают, что такое для программиста "войти в поток" или как еще кто называет это состояние, когда в мозгу наконец размещен контекст задачи и программист забывает обо всем и работает с максимальной эффективностью. По мне, если решение задачек или еще чего-нибудь помогает быстрее войти в поток, то почему нет? Лично я пока для себя знаю, что мне важнее быть выспавшимся, сытым, с отключенным телефоном и одетыми наушниками (чтобы коллеги не отвлекали). Других методов пока не знаю, задачки еще не пробовал.
Цель тренировки - разучивание новых навыков, или совершенствование имеющихся. По-моему, следует их различать для лучшей результативности ;)
Да. Различать следует.
Есть ещё одна цель - поддержка текущего состояния. Но к чему это больше относится - к тренировке или к разминке сказать не могу.
Якори - известная тема. Про них я у Глеба Архангельского читал. Но у него было проще: когда отдыхаешь - слушай одну музыку и пей одни напитки, когда работаешь - совсем другую музыку, другие напитки.
Что касается Льюиса Кэррола, то он всё-таки математиком был. Мозг может и не мышцы, но подозреваю, что у него тоже есть состояния, которые не мгновенно меняются. Например, сразу после сна мыслить трудно бывает - нужно время чтобы включиться. Есть конечно советы делать дыхательную гимнастику, сахар жрать и т.д. чтоб в мозг поступил кислород и он лучше заработал. Но интересно настроиться именно на программистскую деятельность.
Перепутывание параметров исправляется отладкой. В запущенных случаях -- увольнением. "Всех уволю!" © -- и сразу работать захотелось. Вот и разминка.
Отладкой исправляются ошибки, выявленные тестированием. Не выявленные ошибки отладка может исправить только случайно. Это очевидно.
Freeman, возможно ты прав в своих намёках, но это может показать только практика, да и то не сразу. Сомнения разрешат опыты - ими занимаюсь.