Pull to refresh
143
0
Александр Прохоров@Athari

Программист C#

Send message
Проблема всех метрик, применяемых к программистам, в том, что программирование всегда можно превратить в максимизацию значения метрики. Хотят строчек кода — получат переносы через строчку, хотят байт — получат переменные с названиями в сотню символов, хотят операторов — получат алгоритмы с переподвыподвертами и индусский код, хотят меньшее число багов на строчку кода — программисты будут выполнять работу тестировщиков. И хрен менеджер сможет придраться, если все в офисе внезапно начнут писать говнокод ради метрики. Потому что делать так будут все. А если метрики скрывать и рандомно тайно выдавать бонус за них в конвертике — народ вообще пошлёт менеджера на хутор бабочек ловить, и будет он один сидеть в офисе.

Метрики обречены на провал.

Да что измерение «хорошести» программиста, если «хорошесть» кода измерить не могут — сколько ни меряй, количество багов надёжно коррелирует только с размером проекта…
Осторожно! СПОЙЛЕРЫ!

У вас управление проектами происходит так?

Шеф: — Ну как там парни?
Менеджер: — Раздавлены, просто убиты. Это тяжело пережить.
— Программировали-то прекрасно.
— Они оставили в офисе все силы. Правда программировали потрясающе, нам просто не повезло.
— Со следующим проектом повезёт.
— Следующий проект завалим.
— Почему?
— Потому что нас выпотрошили. Ваня ушёл в Майкрософт, Костя — в Гугл, Диму перекупил Фейсбук.
— Найдёшь новых.
— Мне нужно больше денег. Как можно с ними конкурировать? Мне нужно ещё 50 миллионов баксов.
— Мы не будем с ними конкурировать.
— Ради чего мы здесь собрались?
— Билли, ты знаешь.
— Если не ради того, чтобы завершить проект…
— …я хочу завершить проект так же, как и ты…
— …вот моя планка. Моя планка — привести команду к завершению проекта.
— Билли, мы мелкая непримечательная контора, а ты — обычный генеральный менеджер. Не выпендривайся. Денег всё равно нет.

Воспоминания:
— Ты исключительный программист, Билли. Ты можешь программировать на плюсах, ты можешь поставить линукс, ты можешь админить циску, ты можешь объяснить секретарше назначение пробела. Ты можешь рисовать диаграммы в паверпойнте! Это встречается не так часто. Давно я не видел специалиста, который может делать практически всё.

HR: — Налицо какое-то масовое непонимание того, что на самом деле происходит при реализации проекта. И это приводит менеджеров проектов к неправильной оценке программистов. Я прошу прощения.
Менеджер: — Продолжай.
— Хорошо. Шефы мыслят через призму покупки программистов. Мы должны стремиться не к покупке, надо стремиться к завершению проекта. Чтобы завершить проект, нужно писать код. Вы пытаетесь заменить Ваню. Майкрософт видит в нём звезду, которая стоит 8 миллионов. Когда я вижу Ваню, то мне не кажется, что он… я не понимаю, как с этим программистом добиться успеха. Он отлично рисует кнопочки во флэше, он неплохо пишет скрипты на баше… но стоит ли он 8 миллионов? Нет. Нет. В разработке ПО средневековое мышление.
— Где учился?
— В ПТУ.
— Что изучал?
— Бухгалтерию. Я бухгалтер.
— ПТУ, бухгалтерия и разработка софта. Ты забавный, Пит.

Воспоминания:
Помощники менеджера: — Мы считаем, что Билли — потенциальная суперзвезда. Ему сейчас самое время начать программировать у нас. Мы надеемся, что он станет нашим тимлидом. В этом чеке указана определённая сумма.
Мама: — Вы знаете, Билли только что окончил школу, и его уже приняли в МГУ, на Мехмат, на бесплатное обучение.
— Мы знаем.
— И он сможет совмещать?
— К сожалению, нужно сделать выбор: или кодишь на похапэ, или учишься в универе. Нужно понять, что для него — главное занятие в жизни, в его карьере. Такой шанс бывает один раз в жизни.

(!!!)
HR: — Я хочу показать оценки программистов, что ты просил меня сделать.
Менеджер: — Я просил троих.
— Я сделал 51, извини.
— Объясни, что тут к чему.
— Используя это уравнение, я предполагаю, нам нужно не менее 100 000 строк кода, чтобы завершить первую итерацию. Нам нужно сделать как минимум 1814 коммитов, чтобы завершить итерацию, и сделать не больше 513 багов.
— А это что?
— Это программа на 1С, которую я написал для наших рассчётов по каждому месяцу. Весь смысл в том, чтобы свести всё к одной цифре. Используя статистику по нашему методу, мы увидим ценность программистов, которую больше никто не видит. Люди необъективно смотрят на различные доводы и очевидные недостатки: возраст, длину небритости, асоциальность. Билл Джеймс и математика уже давно всё просчитали. Я верю, есть приличные программисты, которые нам по карману, потому что остальные недооценивают их.
    Это — Джон, он программист на бейсике. Он — один из самых недооценённых программистов. Его дефект в том, что его код вызывает смех. Никому из софтверных гигантов до него нет дела. Но он может стать самым эффективным кодером.
    Берём количество строк кода в час, вычитаем количество багов в неделю, умножаем на среднее количество часов, проведённых в офисе, умножаем на логарифм квадрата средней длины строчки кода...

Всё, утомился. Дальше про кофемашину и печенье в офисе можно писать, про обмен-продажу программистов между Майкрософтом и Фейсбуком, про формулы, которые изменят представление о мире разработки программного обеспечения…

У вас серьёзно — всё вот так и происходит?
Я определяю, куда тыкнуть, не только по форме и положению иконки, но и по цвету. Теперь же нужно ломать глаза и разглядывать, какой уголок где загнут, или вообще забить на иконки и читать текст. Бред.

Скины поддерживаться будут? Это же модно в конце концов.
«Расширение языка» происходит и про объектно-ориентированном, и при процедурном программировании.

if (запрос_картинки(взять_запрос()))
    упаковать_картинку_в_ответ(достать_из_статики(вынуть_имя_файла(взять_запрос())))
else
    упаковать_строку_в_ответ("Отдаём только картинки")

if (запрос.взять().запрос_картинки)
    ответ.упаковать_картинку(статика.достать(запрос.взять().имя_файла))
else
    ответ.упаковать_строку("Отдаём только картинки")

Что из этого более приближено к естественным языкам — вопрос открытый. Пока у функций ровно один аргумент, польская нотация выглядит приятно, но как только аргументов несколько — лично у меня мозг начинает с трудом справляться с логикой (хотя, может, дело привычки). If задом-наперёд точно читаемости не способствует. Читаешь огромный блок кода, а в конце высняется, что он выполняется только при каком-то условии.

У объектного и процедурного стиля вызов методов цепочкой выглядит не так опрятно, как в стековом для одноаргументных функций, но зато сразу, с высоты птичьего полёта (по началу строк), видна общая логика:

если (что-то там с запросом)
    упаковать картинку каким-то там способом
иначе
    упаковать строку каким-то там способом

Когда код нужно читать и анализировать, это очень сильно помогает.
264 = 100000000000000000000000000000000000000000000000000000000000000002 :)
Есть такая вещь, как MUCK/MUD — многопользовательские текстовые ролевые игры, предки всех этих ваших WoW’ов. Есть для них популярный движок TinyMUCK. И есть в нём язык MUF — Multi-User Forth. Кто и зачем выбрал стековый язык, остаётся для меня загадкой (икал он, думаю, постоянно), потому что мне, как простому смертному объектно-процедурному программисту, совершенно непонятно, как можно на этом писать код. Шут с ней с польской нотацией, но бесконечное «а стек внезапно кончился»…

Хорошо ещё, что MUF нужен был только для сложных вещей, а для простых хватает MPI — write-only лиспо-подобного языка.

Собственно, возникает вопрос: а в каких случаях, собственно, оправдано написание кода на стековых языках? Когда это нужно? Когда это лучше и, если такое может быть, удобнее?
Эта ситуация перестала быть нестандартной с тех пор, как идиотские вопросы не в тему стали модными и стали появляться у каждого второго работодателя.
Представьте себе, не на каждом месте работы при трудоустройстве спрашивают про люки. И не каждый в курсе, что такие вопросы вообще бывают. И вот приходит такой человек — и ему вопрос про люк задают. Большинство — офигеет.

Если человек ответил, значит, или он смелый, или просто морально готов к идиотским вопросам. И вы не узнаете, что из этого верно на самом деле. Что же этот вопрос тогда тестирует?
За три опоздания? Кошмар. Я бы проработал в ней три дня. Ну, может, четыре…
Совсем без собеседования не получится. На стадии резюме отсеешь бОльшую часть, а как доходит дело до собеседования — оказывается, что человек азов языка, системы или чего бы то ни было — не знает. И мучаешься вопросом: «Как на прошлом месте он умудрился так долго проработать, если ни черта не умеет?» Таких нужно отсеивать заранее, до укороченного «испытательного срока», который предлагается в статье. Иначе только и будешь делать, что лицезреть написание кривого кода для опен-сорс проектов.

Ещё один момент — если ты можешь позволить себе принимать студентов, а потом их учить (или вообще с ВУЗом сотрудничаешь). Что студент напишет тебе за неделю? Может выдать более-менее качественный код, может только успеть книжку по технологии проштудировать. И совсем-совсем не факт, что первый окажется лучшим специалистом через месяц-другой. Правда студентов как раз можно чуть дольше помучать смотреть в деле.

Так-то да, идея хорошая. Но применять её можно не всегда, не везде, с кучей оговорок и условий.
Для пущей оптимизации тогда уж можно сразу updateByPk — тогда и beforeSave/afterSave пропустятся. :)
Если в save() передавать список сохраняемых атрибутов, то код SQL ведь будет генерироваться такой же, как при помощи saveCounters()? Выглядит как синтаксический сахар, а не серьёзная оптимизация.
Хабрахабр пополнился двумя новыми тегами: «прозрачное общество» и «реконизм», а также три тега из использованных один раз стали использованными аж два раза: «облачная демократия», «викиномика» и «электронная демократия».

Воистину уникальный материал.
На фрилансе новичкам и так было непросто: даже если купил ПРО, всё равно заказы достаются другим, у кого рейтингов/отзывов больше, ответов на проекты по 50 штук, серьёзные заказчики на тебя не смотрят… остаётся только выполнять маловменяемые проекты за гроши, от которых все отказываются.

А последние нововведения вообще убивают новичкам возможность что-то получить на корню. Три ответа в месяц? 10% за отзыв? Лолшто?

Всё вернётся в каменный век, и снова у себя на сайте личном будут писать: «Вася Папкин: мне это программист такой офигительнейший проект написал, умереть не встать! Рекомендую!»
Как я понял из описания Эклипса, браузер встраивается в IDE на вкладке «PHP Browser». Правда не нашёл информации — какой именно: IE, FF?

Я разрабатываю в PhpStorm, и там встроенного браузера нет. «Внутри» отлаживать удобно консольные скрипты, но сайты JetBrains предлагает отлаживать именно таким способом, «удалённо».
Привкус лицемерия чувствуется, да. Но всё-таки если к кому-то лично обращаешься — писать «Вы», к сожалению, по правилам до сих пор дозволяется.
Есть разница. На разных сайтах разные традиции, подстраиваешься. (При разговоре с матерщинниками я начинаю материться, но это уже другая история...) На каком-нибудь фан-сайте обстановка свободная, непринуждённая, все друг к другу на «ты», только парочка сильно воспитанных попадается, кто ко всем на «вы». А тут — усё сурьёзно. Серьёзные дяди и тёти обсуждают серьёзные ИТ-проблемы, большинство друг к другу на «вы».
Насколько я понимаю, в список «что пошло не так» включается ещё и убитая скорость. PHP в силу своей архитектуры весь завязан на строках (кто не использует «магические» __get?), и добавление юникода в каждую строковую операцию ой как отрицательно сказывалось на производительности. Кто ж обновляться на PHP 6 будет, если мощностей нужно в два раза больше. (Слышал, схожая история приключилась с юникодом в Delphi.)
У боязни педофилов есть название? Если нет, пора бы придумать.

Будущий историк с удивлением отметит, что, судя по сообщениям современников, в России начала 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 можно удалить.

Information

Rating
Does not participate
Location
Казань, Татарстан, Россия
Date of birth
Registered
Activity