Проблема всех метрик, применяемых к программистам, в том, что программирование всегда можно превратить в максимизацию значения метрики. Хотят строчек кода — получат переносы через строчку, хотят байт — получат переменные с названиями в сотню символов, хотят операторов — получат алгоритмы с переподвыподвертами и индусский код, хотят меньшее число багов на строчку кода — программисты будут выполнять работу тестировщиков. И хрен менеджер сможет придраться, если все в офисе внезапно начнут писать говнокод ради метрики. Потому что делать так будут все. А если метрики скрывать и рандомно тайно выдавать бонус за них в конвертике — народ вообще пошлёт менеджера на хутор бабочек ловить, и будет он один сидеть в офисе.
Метрики обречены на провал.
Да что измерение «хорошести» программиста, если «хорошесть» кода измерить не могут — сколько ни меряй, количество багов надёжно коррелирует только с размером проекта…
Шеф: — Ну как там парни?
Менеджер: — Раздавлены, просто убиты. Это тяжело пережить.
— Программировали-то прекрасно.
— Они оставили в офисе все силы. Правда программировали потрясающе, нам просто не повезло.
— Со следующим проектом повезёт.
— Следующий проект завалим.
— Почему?
— Потому что нас выпотрошили. Ваня ушёл в Майкрософт, Костя — в Гугл, Диму перекупил Фейсбук.
— Найдёшь новых.
— Мне нужно больше денег. Как можно с ними конкурировать? Мне нужно ещё 50 миллионов баксов.
— Мы не будем с ними конкурировать.
— Ради чего мы здесь собрались?
— Билли, ты знаешь.
— Если не ради того, чтобы завершить проект…
— …я хочу завершить проект так же, как и ты…
— …вот моя планка. Моя планка — привести команду к завершению проекта.
— Билли, мы мелкая непримечательная контора, а ты — обычный генеральный менеджер. Не выпендривайся. Денег всё равно нет.
Воспоминания:
— Ты исключительный программист, Билли. Ты можешь программировать на плюсах, ты можешь поставить линукс, ты можешь админить циску, ты можешь объяснить секретарше назначение пробела. Ты можешь рисовать диаграммы в паверпойнте! Это встречается не так часто. Давно я не видел специалиста, который может делать практически всё.
HR: — Налицо какое-то масовое непонимание того, что на самом деле происходит при реализации проекта. И это приводит менеджеров проектов к неправильной оценке программистов. Я прошу прощения.
Менеджер: — Продолжай.
— Хорошо. Шефы мыслят через призму покупки программистов. Мы должны стремиться не к покупке, надо стремиться к завершению проекта. Чтобы завершить проект, нужно писать код. Вы пытаетесь заменить Ваню. Майкрософт видит в нём звезду, которая стоит 8 миллионов. Когда я вижу Ваню, то мне не кажется, что он… я не понимаю, как с этим программистом добиться успеха. Он отлично рисует кнопочки во флэше, он неплохо пишет скрипты на баше… но стоит ли он 8 миллионов? Нет. Нет. В разработке ПО средневековое мышление.
— Где учился?
— В ПТУ.
— Что изучал?
— Бухгалтерию. Я бухгалтер.
— ПТУ, бухгалтерия и разработка софта. Ты забавный, Пит.
Воспоминания:
Помощники менеджера: — Мы считаем, что Билли — потенциальная суперзвезда. Ему сейчас самое время начать программировать у нас. Мы надеемся, что он станет нашим тимлидом. В этом чеке указана определённая сумма.
Мама: — Вы знаете, Билли только что окончил школу, и его уже приняли в МГУ, на Мехмат, на бесплатное обучение.
— Мы знаем.
— И он сможет совмещать?
— К сожалению, нужно сделать выбор: или кодишь на похапэ, или учишься в универе. Нужно понять, что для него — главное занятие в жизни, в его карьере. Такой шанс бывает один раз в жизни.
(!!!)
HR: — Я хочу показать оценки программистов, что ты просил меня сделать.
Менеджер: — Я просил троих.
— Я сделал 51, извини.
— Объясни, что тут к чему.
— Используя это уравнение, я предполагаю, нам нужно не менее 100 000 строк кода, чтобы завершить первую итерацию. Нам нужно сделать как минимум 1814 коммитов, чтобы завершить итерацию, и сделать не больше 513 багов.
— А это что?
— Это программа на 1С, которую я написал для наших рассчётов по каждому месяцу. Весь смысл в том, чтобы свести всё к одной цифре. Используя статистику по нашему методу, мы увидим ценность программистов, которую больше никто не видит. Люди необъективно смотрят на различные доводы и очевидные недостатки: возраст, длину небритости, асоциальность. Билл Джеймс и математика уже давно всё просчитали. Я верю, есть приличные программисты, которые нам по карману, потому что остальные недооценивают их.
Это — Джон, он программист на бейсике. Он — один из самых недооценённых программистов. Его дефект в том, что его код вызывает смех. Никому из софтверных гигантов до него нет дела. Но он может стать самым эффективным кодером. Берём количество строк кода в час, вычитаем количество багов в неделю, умножаем на среднее количество часов, проведённых в офисе, умножаем на логарифм квадрата средней длины строчки кода...
Всё, утомился. Дальше про кофемашину и печенье в офисе можно писать, про обмен-продажу программистов между Майкрософтом и Фейсбуком, про формулы, которые изменят представление о мире разработки программного обеспечения…
Я определяю, куда тыкнуть, не только по форме и положению иконки, но и по цвету. Теперь же нужно ломать глаза и разглядывать, какой уголок где загнут, или вообще забить на иконки и читать текст. Бред.
Скины поддерживаться будут? Это же модно в конце концов.
«Расширение языка» происходит и про объектно-ориентированном, и при процедурном программировании.
if (запрос_картинки(взять_запрос()))
упаковать_картинку_в_ответ(достать_из_статики(вынуть_имя_файла(взять_запрос())))
else
упаковать_строку_в_ответ("Отдаём только картинки")
if (запрос.взять().запрос_картинки)
ответ.упаковать_картинку(статика.достать(запрос.взять().имя_файла))
else
ответ.упаковать_строку("Отдаём только картинки")
Что из этого более приближено к естественным языкам — вопрос открытый. Пока у функций ровно один аргумент, польская нотация выглядит приятно, но как только аргументов несколько — лично у меня мозг начинает с трудом справляться с логикой (хотя, может, дело привычки). If задом-наперёд точно читаемости не способствует. Читаешь огромный блок кода, а в конце высняется, что он выполняется только при каком-то условии.
У объектного и процедурного стиля вызов методов цепочкой выглядит не так опрятно, как в стековом для одноаргументных функций, но зато сразу, с высоты птичьего полёта (по началу строк), видна общая логика:
если (что-то там с запросом)
упаковать картинку каким-то там способом
иначе
упаковать строку каким-то там способом
Когда код нужно читать и анализировать, это очень сильно помогает.
Есть такая вещь, как MUCK/MUD — многопользовательские текстовые ролевые игры, предки всех этих ваших WoW’ов. Есть для них популярный движок TinyMUCK. И есть в нём язык MUF — Multi-User Forth. Кто и зачем выбрал стековый язык, остаётся для меня загадкой (икал он, думаю, постоянно), потому что мне, как простому смертному объектно-процедурному программисту, совершенно непонятно, как можно на этом писать код. Шут с ней с польской нотацией, но бесконечное «а стек внезапно кончился»…
Хорошо ещё, что MUF нужен был только для сложных вещей, а для простых хватает MPI — write-only лиспо-подобного языка.
Собственно, возникает вопрос: а в каких случаях, собственно, оправдано написание кода на стековых языках? Когда это нужно? Когда это лучше и, если такое может быть, удобнее?
Представьте себе, не на каждом месте работы при трудоустройстве спрашивают про люки. И не каждый в курсе, что такие вопросы вообще бывают. И вот приходит такой человек — и ему вопрос про люк задают. Большинство — офигеет.
Если человек ответил, значит, или он смелый, или просто морально готов к идиотским вопросам. И вы не узнаете, что из этого верно на самом деле. Что же этот вопрос тогда тестирует?
Совсем без собеседования не получится. На стадии резюме отсеешь бОльшую часть, а как доходит дело до собеседования — оказывается, что человек азов языка, системы или чего бы то ни было — не знает. И мучаешься вопросом: «Как на прошлом месте он умудрился так долго проработать, если ни черта не умеет?» Таких нужно отсеивать заранее, до укороченного «испытательного срока», который предлагается в статье. Иначе только и будешь делать, что лицезреть написание кривого кода для опен-сорс проектов.
Ещё один момент — если ты можешь позволить себе принимать студентов, а потом их учить (или вообще с ВУЗом сотрудничаешь). Что студент напишет тебе за неделю? Может выдать более-менее качественный код, может только успеть книжку по технологии проштудировать. И совсем-совсем не факт, что первый окажется лучшим специалистом через месяц-другой. Правда студентов как раз можно чуть дольше помучать смотреть в деле.
Так-то да, идея хорошая. Но применять её можно не всегда, не везде, с кучей оговорок и условий.
Если в save() передавать список сохраняемых атрибутов, то код SQL ведь будет генерироваться такой же, как при помощи saveCounters()? Выглядит как синтаксический сахар, а не серьёзная оптимизация.
Хабрахабр пополнился двумя новыми тегами: «прозрачное общество» и «реконизм», а также три тега из использованных один раз стали использованными аж два раза: «облачная демократия», «викиномика» и «электронная демократия».
На фрилансе новичкам и так было непросто: даже если купил ПРО, всё равно заказы достаются другим, у кого рейтингов/отзывов больше, ответов на проекты по 50 штук, серьёзные заказчики на тебя не смотрят… остаётся только выполнять маловменяемые проекты за гроши, от которых все отказываются.
А последние нововведения вообще убивают новичкам возможность что-то получить на корню. Три ответа в месяц? 10% за отзыв? Лолшто?
Всё вернётся в каменный век, и снова у себя на сайте личном будут писать: «Вася Папкин: мне это программист такой офигительнейший проект написал, умереть не встать! Рекомендую!»
Как я понял из описания Эклипса, браузер встраивается в IDE на вкладке «PHP Browser». Правда не нашёл информации — какой именно: IE, FF?
Я разрабатываю в PhpStorm, и там встроенного браузера нет. «Внутри» отлаживать удобно консольные скрипты, но сайты JetBrains предлагает отлаживать именно таким способом, «удалённо».
Есть разница. На разных сайтах разные традиции, подстраиваешься. (При разговоре с матерщинниками я начинаю материться, но это уже другая история...) На каком-нибудь фан-сайте обстановка свободная, непринуждённая, все друг к другу на «ты», только парочка сильно воспитанных попадается, кто ко всем на «вы». А тут — усё сурьёзно. Серьёзные дяди и тёти обсуждают серьёзные ИТ-проблемы, большинство друг к другу на «вы».
Насколько я понимаю, в список «что пошло не так» включается ещё и убитая скорость. PHP в силу своей архитектуры весь завязан на строках (кто не использует «магические» __get?), и добавление юникода в каждую строковую операцию ой как отрицательно сказывалось на производительности. Кто ж обновляться на PHP 6 будет, если мощностей нужно в два раза больше. (Слышал, схожая история приключилась с юникодом в Delphi.)
У формы логина надписи вроде «минимальная длина пароля — 5 символов» — излишни.
Если указать год рождения 1901, то возраст неправильно считается (говорит, что 42 года).
При ошибках в форме добавления малыша не сохраняются уже введённые данные — раздражает. Что «Уменьшительно-ласкательно :)» — обязательное поле, и в ошибках называется «ник» — неочевидно. Логин родителя не валидируется. <script> интересно порезался, ну да ладно. В форме редактирования рост и вес без подписей и единиц измерения (вдруг я ценитель Си и предпочитаю м и кг вместо см и гр).
Уязвимость XSS: добавление малыша в ленту возможно через GET-запрос. Ставим урл добавления в <img src=""> — и все прочитавшие добавляют, сами того не замечая. Кроме того, добавить можно несколько раз (это может произойти и из-за проблем со связью, кстати).
HTML фильтруется через что-то вроде strip_tags? Допустим, в именах такое допустимо, но в заголовках записей и т.п. лучше бы просто экранировать. А то написал «10 месяцев < 11 месяцев» — получил «10 месяцев».
Не понимаю моды на «бесконечные» списки вместо паджинации. Иногда это удобно, иногда — нет. Например, если я посмотрел пять страниц, перезапустил браузер, то не могу начать с шестой страницы. Неплохо бы опцию. А в режиме бесконечного списка подгрузку лучше начинать не когда надпись «Загрузить ещё» уже видна, а когда полоса прокрутки только приближается к концу — не будет лишних ожиданий.
Страничку «Новые малыши» (скриншот в статье) вообще не нашёл.
Метрики обречены на провал.
Да что измерение «хорошести» программиста, если «хорошесть» кода измерить не могут — сколько ни меряй, количество багов надёжно коррелирует только с размером проекта…
У вас управление проектами происходит так?
Шеф: — Ну как там парни?
Менеджер: — Раздавлены, просто убиты. Это тяжело пережить.
— Программировали-то прекрасно.
— Они оставили в офисе все силы. Правда программировали потрясающе, нам просто не повезло.
— Со следующим проектом повезёт.
— Следующий проект завалим.
— Почему?
— Потому что нас выпотрошили. Ваня ушёл в Майкрософт, Костя — в Гугл, Диму перекупил Фейсбук.
— Найдёшь новых.
— Мне нужно больше денег. Как можно с ними конкурировать? Мне нужно ещё 50 миллионов баксов.
— Мы не будем с ними конкурировать.
— Ради чего мы здесь собрались?
— Билли, ты знаешь.
— Если не ради того, чтобы завершить проект…
— …я хочу завершить проект так же, как и ты…
— …вот моя планка. Моя планка — привести команду к завершению проекта.
— Билли, мы мелкая непримечательная контора, а ты — обычный генеральный менеджер. Не выпендривайся. Денег всё равно нет.
Воспоминания:
— Ты исключительный программист, Билли. Ты можешь программировать на плюсах, ты можешь поставить линукс, ты можешь админить циску, ты можешь объяснить секретарше назначение пробела. Ты можешь рисовать диаграммы в паверпойнте! Это встречается не так часто. Давно я не видел специалиста, который может делать практически всё.
HR: — Налицо какое-то масовое непонимание того, что на самом деле происходит при реализации проекта. И это приводит менеджеров проектов к неправильной оценке программистов. Я прошу прощения.
Менеджер: — Продолжай.
— Хорошо. Шефы мыслят через призму покупки программистов. Мы должны стремиться не к покупке, надо стремиться к завершению проекта. Чтобы завершить проект, нужно писать код. Вы пытаетесь заменить Ваню. Майкрософт видит в нём звезду, которая стоит 8 миллионов. Когда я вижу Ваню, то мне не кажется, что он… я не понимаю, как с этим программистом добиться успеха. Он отлично рисует кнопочки во флэше, он неплохо пишет скрипты на баше… но стоит ли он 8 миллионов? Нет. Нет. В разработке ПО средневековое мышление.
— Где учился?
— В ПТУ.
— Что изучал?
— Бухгалтерию. Я бухгалтер.
— ПТУ, бухгалтерия и разработка софта. Ты забавный, Пит.
Воспоминания:
Помощники менеджера: — Мы считаем, что Билли — потенциальная суперзвезда. Ему сейчас самое время начать программировать у нас. Мы надеемся, что он станет нашим тимлидом. В этом чеке указана определённая сумма.
Мама: — Вы знаете, Билли только что окончил школу, и его уже приняли в МГУ, на Мехмат, на бесплатное обучение.
— Мы знаем.
— И он сможет совмещать?
— К сожалению, нужно сделать выбор: или кодишь на похапэ, или учишься в универе. Нужно понять, что для него — главное занятие в жизни, в его карьере. Такой шанс бывает один раз в жизни.
(!!!)
HR: — Я хочу показать оценки программистов, что ты просил меня сделать.
Менеджер: — Я просил троих.
— Я сделал 51, извини.
— Объясни, что тут к чему.
— Используя это уравнение, я предполагаю, нам нужно не менее 100 000 строк кода, чтобы завершить первую итерацию. Нам нужно сделать как минимум 1814 коммитов, чтобы завершить итерацию, и сделать не больше 513 багов.
— А это что?
— Это программа на 1С, которую я написал для наших рассчётов по каждому месяцу. Весь смысл в том, чтобы свести всё к одной цифре. Используя статистику по нашему методу, мы увидим ценность программистов, которую больше никто не видит. Люди необъективно смотрят на различные доводы и очевидные недостатки: возраст, длину небритости, асоциальность. Билл Джеймс и математика уже давно всё просчитали. Я верю, есть приличные программисты, которые нам по карману, потому что остальные недооценивают их.
Это — Джон, он программист на бейсике. Он — один из самых недооценённых программистов. Его дефект в том, что его код вызывает смех. Никому из софтверных гигантов до него нет дела. Но он может стать самым эффективным кодером.
Берём количество строк кода в час, вычитаем количество багов в неделю, умножаем на среднее количество часов, проведённых в офисе, умножаем на логарифм квадрата средней длины строчки кода...
Всё, утомился. Дальше про кофемашину и печенье в офисе можно писать, про обмен-продажу программистов между Майкрософтом и Фейсбуком, про формулы, которые изменят представление о мире разработки программного обеспечения…
У вас серьёзно — всё вот так и происходит?
Скины поддерживаться будут? Это же модно в конце концов.
Что из этого более приближено к естественным языкам — вопрос открытый. Пока у функций ровно один аргумент, польская нотация выглядит приятно, но как только аргументов несколько — лично у меня мозг начинает с трудом справляться с логикой (хотя, может, дело привычки). If задом-наперёд точно читаемости не способствует. Читаешь огромный блок кода, а в конце высняется, что он выполняется только при каком-то условии.
У объектного и процедурного стиля вызов методов цепочкой выглядит не так опрятно, как в стековом для одноаргументных функций, но зато сразу, с высоты птичьего полёта (по началу строк), видна общая логика:
Когда код нужно читать и анализировать, это очень сильно помогает.
Хорошо ещё, что MUF нужен был только для сложных вещей, а для простых хватает MPI — write-only лиспо-подобного языка.
Собственно, возникает вопрос: а в каких случаях, собственно, оправдано написание кода на стековых языках? Когда это нужно? Когда это лучше и, если такое может быть, удобнее?
Если человек ответил, значит, или он смелый, или просто морально готов к идиотским вопросам. И вы не узнаете, что из этого верно на самом деле. Что же этот вопрос тогда тестирует?
Ещё один момент — если ты можешь позволить себе принимать студентов, а потом их учить (или вообще с ВУЗом сотрудничаешь). Что студент напишет тебе за неделю? Может выдать более-менее качественный код, может только успеть книжку по технологии проштудировать. И совсем-совсем не факт, что первый окажется лучшим специалистом через месяц-другой. Правда студентов как раз можно чуть дольше
помучатьсмотреть в деле.Так-то да, идея хорошая. Но применять её можно не всегда, не везде, с кучей оговорок и условий.
Воистину уникальный материал.
А последние нововведения вообще убивают новичкам возможность что-то получить на корню. Три ответа в месяц? 10% за отзыв? Лолшто?
Всё вернётся в каменный век, и снова у себя на сайте личном будут писать: «Вася Папкин: мне это программист такой офигительнейший проект написал, умереть не встать! Рекомендую!»
Я разрабатываю в PhpStorm, и там встроенного браузера нет. «Внутри» отлаживать удобно консольные скрипты, но сайты JetBrains предлагает отлаживать именно таким способом, «удалённо».
Будущий историк с удивлением отметит, что, судя по сообщениям современников, в России начала XXI века доля педофилов в населении примерно равнялась доле ведьм в населении южногерманских земель конца XVI века.
© vz.ru/columns/2011/10/26/533341.html
Так, к мелочам всяким придерусь.
У формы логина надписи вроде «минимальная длина пароля — 5 символов» — излишни.
Если указать год рождения 1901, то возраст неправильно считается (говорит, что 42 года).
При ошибках в форме добавления малыша не сохраняются уже введённые данные — раздражает. Что «Уменьшительно-ласкательно :)» — обязательное поле, и в ошибках называется «ник» — неочевидно. Логин родителя не валидируется. <script> интересно порезался, ну да ладно. В форме редактирования рост и вес без подписей и единиц измерения (вдруг я ценитель Си и предпочитаю м и кг вместо см и гр).
Уязвимость XSS: добавление малыша в ленту возможно через GET-запрос. Ставим урл добавления в <img src=""> — и все прочитавшие добавляют, сами того не замечая. Кроме того, добавить можно несколько раз (это может произойти и из-за проблем со связью, кстати).
HTML фильтруется через что-то вроде strip_tags? Допустим, в именах такое допустимо, но в заголовках записей и т.п. лучше бы просто экранировать. А то написал «10 месяцев < 11 месяцев» — получил «10 месяцев».
Не понимаю моды на «бесконечные» списки вместо паджинации. Иногда это удобно, иногда — нет. Например, если я посмотрел пять страниц, перезапустил браузер, то не могу начать с шестой страницы. Неплохо бы опцию. А в режиме бесконечного списка подгрузку лучше начинать не когда надпись «Загрузить ещё» уже видна, а когда полоса прокрутки только приближается к концу — не будет лишних ожиданий.
Страничку «Новые малыши» (скриншот в статье) вообще не нашёл.
Удачи с вашим проектом.
P.S. Пользователя 251 можно удалить.