Pull to refresh

Comments 46

Мило. Зачитался. Но как-то такое я был бы рад видеть на IT happens, а не тут.
Как-то я даже и не знал про IT Happens. Спасибо, в следующий раз напишу туда.
Мне кажется, что вечером в субботу пойдет и сюда.

А вообще, было бы интересно добавить особое поведение компилятору, чтобы он ругался на быдлокод.

MyClass.cpp:354:5: error: What the fuck? Why method count() contains 9 variables with one letter names?
pmd, checkstyle, sonar этим и занимаются.
Насколько я понимаю, эти решения исключительно под Java?
Удивительно, но про сонар на русском не нашел практически ничего. Даже удивился, встретив этот комментарий.

Но опять же не совсем корректно его упоминание. Sonar только собирает данные от конкретных инструментов, которые можно использовать и без него.
Вы не одиноки. Я практически ничего не нашел и на английском, а что нашел, относилось только к Java, поэтому и задал вопрос.
Сонар может быть своеобразным «агрегатором» выхлопа из pmd, checkstyle, e.t.c. Помимо них, к Сонару можно прикручивать его же плагины. Сонар активно используется здесь: www.cloudbees.com/platform-service-sonarsource.cb
Сам я про сонар узнал из рассылки вышеупомянутоого сервиса.
google, для Java очень много всего, под cpp и др. популярные языки тоже можно найти.
Мы используем: pmd, checkstyle, cobertura (test coverage) + встроенный анализатор кода в Идее.
Я вас ненавижу за упоминание sonar.
Через 3 часа вставать на работу, еле настроил всю кухню для проверки php кода в sonar, проверил пару опенсорцных библиотек и сильно опечалился результатом :(
Это ок. Я пишу всякие Хадуп приложения, иногда приходится патчить либы Хадупа, написанные на Джава. Ситуация та же — в общем и целом качество кода посредственное.
Боюсь, что если бы Вася писал программу, которую было бы удобно компилировать, Андрею она бы тоже не очень понравилась. Такая программа была бы чересчур привязана к конкретным типам данных, конкретной архитектуре железа и т.п. Действительно, зачем здесь писать виртуальные функции, если мы знаем, что реализация интерфейса сегодня только одна? Ведь компилятору придётся отрабатывать наследование классов, проверять его корректность, генерировать код для каждого вызова (возможно, с кучей проверок)… Нет уж, оставим пока невиртуальный метод — с кодом будет разбираться проще. А то, что его труднее будет развивать и переносить, то это проблемы не компилятора, а программистов…
Он хоть и стал компилятором, но остался человеком, в том смысле, что ему легче компилировать человекочитаемый код.
Сюжет про компилирование, а мораль и все примеры про читаемость кода. Разные вещи, вообще-то.

Функционально программирование VS Объектно-Ориентированное программирование.
Программирование «на один раз» VS LTS-программирование
Самокомментирующийся код VS Полезные комментарии
Я думаю, в рассказе было Процедурное программирование VS Объектно-ориентрованное. И по поводу самокомментирующегося кода с названиями переменных из трех букв (хе-хе), тут что-то не вяжется.
Если названия переменных следуют соглашениям венгерской нотации, то и трех букв будет более чем достаточно. =)
На все эти темы у меня сформировалось одно мнение. Звучит так: во всём нужно искать «золотую середину». Нельзя впадать в крайность, становиться только на одну сторону. Для каждого конкретного случая использовать наиболее подходящую парадигму (функциональную, ОО или др.). В этом плане мне нравится C# с его гибридными возможностями, да и многие современные языки позволяют программировать в разных стилях. Код комментировать только при необходимости, если нужна документация — использовать комментарии для её последующего автоматического создания.

Стоит заметить, что такого рода «спец. олимпиады» чаще всего несут в себе может и небольшую, но положительную, ценность.
Здорово. Правда, низкое качество кода не обязательно свзязано с какими-то дополнительными напрягами для компиляторов. Да и оптимизация, так скажем, вовсе не обязательно улучшает читабельность кода. Хотя, с другой стороны, когда-то давно я столкнулся с одной довольно занятной ситуацией. Товарищ в институте написал некислую расчётную программу, которая думала примерно полтора часа (на пне-120). Пока она считалась, он обычно ходил обедать в столовую. Штука была написана под линух, и, как-то взглянув на это творчество, я его спросил — а ты не хочешь добавить -O2 к CFLAGS в Makefile? Ну, добавил… Время работы упало с полутора часов до считанных секунд. Вот так вот испортил человеку обеденный перерыв, а всего-то дело было в том, что в программе было с десяток уровней вложенности циклов, и на самом внутреннем считался набор значений, который можно было бы посчитать заранее, о чём gcc в режиме оптимизации без труда догадался.

А из программерских баек меня больше всего за душу берёт сказка про программиста и эльфов.
«транслятор с С на Фортран» это хорошо :)
Мне вот интересно, почему Андрей просто не развернулся, и не ушел(ну, в более вежливой форме, конечно)? Зачем было так стараться, переучивать Васю? Нравится ему говнокод писать? Нравится его директору такой результат, — ну так и дай Б-г. Пусть работают, раз всех все устраивает. Странная история, в общем.
Поддерживаю, можно было и более преближенную к действительности историю придумать. А то — десятки увольнений и безграничная любовь начальника к Васе, дар гипноза по щелчку пальцев, слёзы программиста при виде говнокода… Не продумано, ИМХО.
А я был в роли Васи, когда занимался реверс-инжинирингом обфусцированного кода на smali. Целую стопку бумаги изрисовал диаграммами последовательностей вызовов. В конце-концов нашёл весьма элегантное решение, только оценить его некому.
только оценить его некому
Ошибаетесь :)
Занимался в почти тем же самым (декомпиляцией кода приложения на Андроиде). Тоже рисовал схемы логических веток и поиска способа записать ветвистое дерево вызовов в линейный код :)
Я вот что сделал. Написал простой скрипт, который 1) в начале каждого метода smali добавляет вызов статичного метода нашего класса, в духе MyClass.doN(), где N от 0 до количества методов ко всех классах 2) генерит названный класс со всем статичными методами, каждый метод пишет в лог число N. Замет я это снова собрал, подписал и залил на девайс. Итого — лог посыпалась куча чисел, означающих последовательность вызова. Найти нужный кусок в коде уже не представлялось проблемой.
Не хватает женщины в сюжете. Видимо, забыли. Дело было так. Андрей пришел в офис и увидел прекрасную секретаршу Наташу. Влюбился. Сначала хотел уходить из конторы, но потом передумал и решил переучить Василия, раз уж работать вместе придется. Василий был уже тайно влюблен в секретаршу Наташу, но она не отвечала ему взаимностью. Наташа любила шефа, но он тоже не отвечал ей взаимностью. Вот такая Санта-Барбара. В итоге Андрей и шеф подрались на дуэли. Андрей смертельно ранил шефа. Шеф умер. Андрей занял место директора и фирма переквалифицировалась в аутсорсинговую компанию. А Наташа вышла замуж за Андрея и родила ему троих детей.
Одним из этих детей был Альберт Эйнштейн.
Замечательно. Единственное но, компилятору абсолютно все равно какой код компилировать :) это нам какое-то подобие структуры подавай, да еще и с комментариями и документацией, а компилятору до фени. Но написано увлекательно, хотя и не понятно что именно Андрей пытался сделать с Васей, в смысле горбатого могила исправит.
А потом добить выжившего.
Я вот что не понял. Если «Вася… работал в конторе уже третий год. Программист по образованию, он был на хорошем счету у директора Александра Ивановича, тот нисколько не сомневался в его профессиональных навыках и готов был доверить ему любую важную задачу.» — то в чем проблема-то?
Какая разница как форматирует код Вася и какие паттерны он применяет/не применяет, если все довольны?
Андрей с двумя годами после универа, которого через 7 месяцев работы попёрли из Яндекса — это гуру программирования чтоль?
Читайте дальше, «Когда дверь за директором захлопнулась, Вася указал новенькому на компьютер и подкинул ему парочку «простеньких задач», над которыми, если честно, трудился уже не один месяц.» Вася не умел (не хотел) нормально программировать и постоянно нуждался в помощниках. Хорошее отношение директора позволяло Васе спихивать все его недостатки на этих вот помощников.
Тогда кто лучше владеет искусством гипноза? Андрей, который щелкает пальцами перед носом у Васи, или Вася, который умудряется безо всяких ухищрений три года водить за нос директора Александра Ивановича?
Не совсем верная аналогия, компиляторам как раз все равно что компилировать, лишь бы оно не нарушало формальных правил. Например, браузер легко разбирает даже сильно обфусцированный JS.
Существует очень распространенная ошибка в анализе работы систем (которая нам косвенно навязывается) этим рассказом. Это «одушевление неодушевленного».
Изначально компьютер как раз и является исполнителем, который:
1) не устает
2) не ошибается (если ему поданы корректные исходные данные и правильные инструкции по их обработке).
Т.е. компьютеру как раз неважно, рутина это или не рутина, интересно заниматься этим процессом, или нет.

А этот рассказик пытается нам пропихнуть в подсознание мысль, что «некрасивый исходный код компьютеру _трудно_ компилировать».
а я понял что это был не компьютер, а андрюха всё это ему под гипнозом пояснял.
и поэтому некрасивый исходный код по мнению андрюхи надо было переделать, а причина для этого самая логичная для данной ситуации — что бы компилировалось нормально (косвенная отсылка к читаемости кода)
Вопрос не в том, что Андрюха говорил Васе, т.к. оба вымышленные, а в том, что рассказ говорит нам, т.к. примерно половина нас все-таки реальные.
Уже выше писали, что компилировалось оно и так нормально. Т.е. вообще компилировалось.
Взглянув на название, ожидал увидеть какой-нибудь дельный совет по рефакторингу, или хотя бы пониманию такого вот некрасивого кода. А вместо этого увидел какую-то сказочку про белого бычка.
Так был же вполне себе адекватный совет! Розги — новое слово в управлении проектами!
Идите нафиг со своим графоманством.

Как было выше (1, 2) замечено, компилятор обработает любые данные, удовлетворяющие грамматике. А комментарии пропускаются на уровне лексического анализа.
Избиение розгами в целях стимулирования мозговой деятельности. Очень интересный подход к увеличению продуктивности.
Only those users with full accounts are able to leave comments. Log in, please.