1. C++ / Говнокод #12844

    +20

    1. 01
    2. 02
    3. 03
    4. 04
    5. 05
    6. 06
    7. 07
    8. 08
    9. 09
    10. 10
    11. 11
    12. 12
    13. 13
    14. 14
    15. 15
    16. 16
    #include <iostream>
    #include <string>
    #include <utility>
    #include <tuple>
    #include <array>
    #include <vector>
    #include <algorithm>
    #include <iterator>
    
    int main() {
       const std::array< const std::pair<const int, const std::string>, 3 > a {{{1,"2"}, {3,"4"}, {5,"6"}}};   
       std::vector<std::string> r;
       std::transform(std::begin(a), std::end(a), std::back_inserter(r), static_cast<std::string const& (*)(const std::tuple<const int, const std::string>&)>(std::get<1, const int, const std::string>));
       std::copy(std::begin(r), std::end(r), std::ostream_iterator<const std::string>(std::cout, " "));
       return 0;
    }

    У нас новичку на собеседовании предложили продемонстрировать работу (без конкретики) с кортежами и итераторами.
    Что вы можете сказать про его умения, характер и состояние психики? А вы бы этого взяли на работу?
    http://liveworkspace.org/code/2DW59a$0

    Запостил: LispGovno, 03 Апреля 2013

    Комментарии (109) RSS

    • Мне кажется умения и прилежность он продемонстрировал
      Ответить
    • > продемонстрировать работу (без конкретики) с кортежами и итераторами
      Не совсем удачный вопрос, имхо. Не лучше ли задать что-то более конкретное, и посмотреть как он это реализует?
      Ответить
      • Ну конкретных было много. По идеи на не конкретном вопросе можно много выводов сделать о человеке это написавшим, например о том, что он любит и что не любит, как развита фантазия и лень, что он вчера съел. и тд.
        Ответить
      • Мне тут давече на собеседовании предложили написать любой код в несколько строчек. Вообще без требований, лишь бы осмысленный.
        По итогу написанного (написал геттер/конструктор синглтона) задали ровно один вопрос "Табы или пробелы?".
        До сих пор задумываюсь, зачем это было?
        Ответить
    • >Что вы можете сказать про его умения, характер
      Да что тут говорить?
      Еще одна крестоблядь.
      Ответить
      • Ты так говоришь, как-будто это что-то плохое
        Ответить
    • >Что вы можете сказать про его умения, характер и состояние психики?
      Ничего, потому что непоказательно.

      >А вы бы этого взяли на работу?
      Если он всегда пишет такой write-only код, то нет. Но опять же непоказательно.
      Ответить
    • > А вы бы этого взяли на работу?

      Если он пытался подавить смех когда демонстрировал - то да. :)

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

      Чего я до сих пор не знаю как определять, это умеет ли человек работать под давлением и выставлять приоритеты. Эти две взаимосвязаные вещи тоже очень часто бывают нужны.
      Ответить
    • >Что вы можете сказать про его умения, характер и состояние психики?
      Слушай, а сколько сейчас времени, не знаешь? Так, примерно можешь почувствовать?
      Ответить
    • Функциональненько. А что уж он auto не использовал?
      Ответить
      • И где тут авто вставить? Или просто вставить куда-нибудь?
        Ответить
        • Ой, а ведь правда некуда. Я почему-то подумал, что он мог бы вывести тип a, ан нет, unable to deduce ‘std::initializer_list<auto>’.
          Ответить
          • Я вот недавно узнал, что auto можно даже в new() вставить:
            auto p = new auto(42);
            Ответить
            • http://liveworkspace.org/code/PvQBN$1
              Хрена....
              Ответить
              • т.е. auto i = 42 тебя не смутило, а auto(42) смутило?
                Ответить
              • а что за нечеловеческий код для вывода типа?
                Ответить
              • >а что за нечеловеческий код для вывода типа?
                TypeName Demangler из снипетов lws
                Ответить
                • интересно, а в MS такое заставить работать можно?
                  Ответить
    • http://liveworkspace.org/code/code/2DW59a$15
      кто-то побаловался и немного почистил код
      а вообще в крестах не хватает car\cdr (Lisp), fst\snd (Haskell) или std::select1st\std::select2nd (STLPort)
      а вообще этот стасик_каст и указание всех шаблонов (get<...>) вручную для выбора правильной сигнатуры убивает всю красоту кода.
      Ответить
      • [](decltype(*std::begin(a)) i) { return std::get<1>(i); }
        смотрится проще, чем выбор правильной перегрузки std::get
        вот если бы еще можно было auto засунуть в лямбду, вместо ущербного decltype...
        Ответить
        • >вот если бы еще можно было auto засунуть в лямбду, вместо ущербного decltype...
          C++14
          Даже рекурсивный вывод обещали (и без {} ):
          auto fac=[](auto i) i*fac(i-1)
          Ответить
          • Если б ещё и не надо было авто писать...
            fac := lambda i to i*fac(i-1);
            Ответить
            • типа как скриптоязыках? все новые имена автоматически должны завестись как переменные/аргументы?
              чревато
              Ответить
              • Боже упаси
                Ответить
              • Фигасе "скриптоязыки"... let / let rec для этого нужны. Ну по крайней мере с теоретической точки зрения.
                Ответить
        • Разнесите against и on подальше, в третий раз по плюсу промахиваюсь! >_<
          Ответить
          • роман же пилит 2.0
            потыкай в него веточкой, а то он только притворяется загруженным и уставшим
            Ответить
            • Пока все силы уходят на холивары с коллегами и крестовелики, но, судя по прогрессу на официальной ветке, скоро таки придётся снова взять в руки потёртые лябмды
              Ответить
              • > холивары с коллегами
                абсолютизм в итоге рулит
                Ответить
                • Да, тут сильно не хватает крестотирана вроде тебя, крестоправящего крестотвёрдой кресторукой.
                  Ответить
                  • поставить крест на проекте
                    Ответить
                    • Да нет, тут весело, гораздо веселее, чем интерпрайзно перекладывать поля из базы данных в эксемельки. Есть где размахнуться.
                      Нужно время, чтобы приучить людей работать с умом, не оправдываясь нехваткой времени.
                      Ответить
                      • Где, если не секрет?
                        Ответить
                        • С учётом того, что я представляюсь настоящим именем, это слишком легко нагуглить, чтобы оставлять эту информацию здесь.
                          Ответить
                          • А я просто хотел уточнить, место работы ли или что-то еще, свое, чужое, другое.
                            В общем не важно.
                            Ответить
                          • Да уже оставил достаточно, кмк.
                            (Вот потому я за здоровую паранойю).
                            Ответить
                            • Я просто не вижу смысла что-то скрывать. За полгода работы в компании, занимающейся различными аспектами информационной безопастости я узнал такие вещи, которые хотел бы рузузнать обратно, и желания что-то скрывать стало ещё меньше.
                              Ответить
                              • До службы в армии крепко спал, потому что знал, что охранают. В армии плохо спал, потому что сам охранял. После армии вообще не сплю, потому что знаю, как охраняют.
                                Ответить
    • Новичок он и есть новичок.
      Накодил неструктурированный код и сдал его.
      Ну что с него взять? Правильно, ничего.
      Ответить
      • Да по коду видно, что кресты знает, но не в тему применяет
        Ответить
    • Мнения 50 на 50 разделилось. Приверженцы нового стандарта поддерживают новичка. Остальные упоротые старперы не осили новый стандарт
      Ответить
      • Кстати, а какую иде лучше использовать для умеренного крестоблядства?
        Ну с поддержкой С++11 и всего такого.
        ВизуалСтудию и другую монструозную проприетарщину не предлагать.
        Ответить
        • 1 ое место: Qt
          2 oe: IDEA
          Ответить
          • IDEA для крестов?
            Ответить
            • Тоже удивило.
              А что используете вы?
              Ответить
            • внезапно
              http://www.jetbrains.com/objc/features/cpp.html
              Ответить
              • Это как раз неудивительно. Все 3 java IDE поддерживают кроме жабы (груви, скалы) большинство популярных языков: сишку, питон, кресты, пыху, жс и прочия хтмл и css.
                Удивило другое: почему крестоблядям не использовать истинно крестоблядские среды Qt, CodeLite, KDevelop, Code::Block?
                Ответить
                • У нас люди пользуются в основном Eclipse CDT (хотя по уму он врядли у кого настроен), NetBeans и VS. Кто-то ковыряет код в mcedit.
                  Я юзаю православный Emacs, мне пока больше ничего не надо.
                  Ответить
                  • >Я юзаю православный Emacs, мне пока больше ничего не надо.
                    Не-не-не. Так нечестно. Тут всё должны предлагать гипернавороченные иде, а потом пришёл бы @wvxvw и сказал бы эту фразу, с таким видом будто все пидарасы.

                    Но вопрос в другом - какие иде поддерживают больше всякого пиздеца из нового стандарта.
                    Тут-то emacs, я уверен, аутсайдер. Вообще парсинг нынешнего С++11 - нетривиальнейшая задача.
                    Ответить
                    • Я всё мечтаю о том, как кто-нибудь, наконец, догадается скрестить емакс со шлангом в один бинарник, шикарнейшая иде получилась бы.
                      Ответить
                      • IDEA как раз и скрещена со шлангом
                        Ответить
                        • показать все, что скрыто?очему
                          Ответить
                        • idea слишком прожорлива и тормозна даже для своей основной задачи - поддержка java
                          тратить гиг оперативы и смотреть на тормоза одного_из_редакторов_почти_запиливших_в_ себя_анализатор_шланга - не для слабонервных
                          Ответить
                          • Для жабы лучшего аналога нет, хотя индексатор потребляет достаточно много ресурсов. Если отключить неиспользуемые плагины, CE работает достаточно шустро. А навигация и рефакторинги там таки кошеrны.
                            Ответить
                            • ну и с какой серьезностью можно отнестись к людям, описывающим свою поддержку с++ в разделе objc, и ставящим "с++11" и "Boost" в один список
                              Ответить
                            • что такое индексатор?
                              разве это не должно быть преимуществом джавы перед заведомо монструозными крестами - упрощенный синтаксис, отсутствие инстанциирования тысяч темплейтов, нет операторов и прочих путанных adl, нет тех же инклюдов - почему анализ джавы потребляет так много?
                              студия с решением на пару М кода с ассистом, держащим в голове это все + почти весь буст жрет 150-200М
                              Ответить
                              • Думаю, в средней жабопрограмме больше кода, чем во всём (в|н)ашем бусте. Вот потребление памяти на среднего размера жабопроекте:
                                http://rghost.net/45109884/image.png
                                Вот что в top:
                                PID USER      PR  NI  VIRT  RES  SHR S  %CPU %MEM    TIME+  COMMAND           
                                14761 roman     20   0 2707m 849m  39m S   2.7 21.8   4:13.54 java
                                память процесса занята пулом памяти сборщика мусора и метоинформацией жабомашины. Реальный расход памяти не особо высокий.
                                Ответить
                                • > больше кода
                                  если считать джавопрограммой jvm и кучу библиотек для как ты правильно выразился перекладывания xml в бд, то тогда засчитай за среднюю сишкопрограмму еще рантайм, ядро и оконную среду

                                  отличие крестопроекта в том, что он из сорцов цепляет все эти мегастроки кода, а не шуршит по индексируемым бинарным пакетам, и потому потребление памяти и мощностей на обслуживание такого крестопроекта должно быть выше, что никак не согласуется с поведением лучшей среды для джавы (тм)

                                  ну и то, что ты показал - это нечто уровня project, теперь домножь на 20, чтобы получить solution, о котором я говорю
                                  Ответить
                                  • Во всяком случае, потребление памяти при работе с жабой вполне удовлетворительное, чтобы продуктивно работать даже на моём не топовом ноуте. Не профилировал, но есть ощущение, что бОльшая часть памяти отжирается убогим жабо-интерфейсом swing.

                                    Твои претензии вполне понятны, не совсем понятны выводы. Идея говно? Возможно. Но опыт жабка+идея vs. сишарпик+вижуалстудия безоговорочно в пользу первого.

                                    Я, как ты понимаешь, вполне терпимо отношусь к инструментам, которые люди используют при разработке. Каждый должен работать с тем, с чем он может быть продуктивен. Тебе удобно со студией - отлично. Я не против.
                                    Ответить
                                    • выводы?
                                      на дворе 2013 год, а нет идеальной бесплатной полнофункциональной иде
                                      где моё дешево, быстро и качественно?
                                      Ответить
                                      • На дворе 2013 год, а в C++ до сих пор используется долбанутая модель конкатенации файлов инклюдами и хедер гварды, что превращает компиляцию в обогрев помещений. И ты после этого чему-то удивляешься?
                                        Ответить
                                        • это уже не исправить, максимум запилят недомодули - суть облагороженные прекомпилированные заголовки, если запилят вообще

                                          ну и компиляция обогревает помещение в основном из-за шаблонов - инфа 100%

                                          доконкатенировать файлы, и так лежащие в быстрой памяти (кеш диска + кеш компилятора (в нем файл может быть уже разобран даже)) не очень много времени занимает
                                          Ответить
                                          • Возможно. Жабо-конпейлятор, к примеру, работает на порядки медленней, если его заставлять в сишном стиле обрабатывать по одному файлу за проход (т.е. %.class: %.java). Гораздо выгодней натравить его на каталог с сорцами "байткод мне запили".

                                            Интересно, для плюсцов возможна такая batch компиляция?..
                                            Ответить
                                            • for o in folder/*.cpp; do $CPP $CPPFLAGS -c $o...; done

                                              компиляцией всего из какой-нибудь папки должна заниматься система сборки
                                              параллелизацией этого процесса - она же (-j, /MP)
                                              Ответить
                                              • Разделение обязанностей - это очень правильно, тут я согласен. Но с жабой такая ситуация - она долго запрягает, но быстро ездит. Т.е. гораздо выгодней запустить компилятор один раз и обрабатывать им много сорцов. Выигрыш действительно очень велик, ведь это также помогает компилятору кэшировать в памяти объявления уже скомпилированных классов. Кроме того, в жабе есть неплохая фича - сервис компилятора. Прога может нагенерячить сорцов и попросить компилер пройтись заодно и по ним
                                                http://docs.oracle.com/javase/6/docs/api/javax/tools/JavaCompiler.html
                                                Это открывает много интересных возможностей...
                                                Ответить
                                                • ну запуск компилятора джавы походу значительно более накладная операция, чем запуск нативного приложения
                                                  скормить крестокомпилятору список файлов - не видел такого использования
                                                  вендорам проще оставить вопросы оптимизации параллельной работы N одинаковых исполняемых файлов операционной системе (там уже пусть горбатится и префетч, и не дублирование страниц параллельных процессов)

                                                  при скармливании devenv/msbuild файла проекта (в котором содержится список) скорее всего никак не отличается от вызова компилятора пофайлово

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

                                                  насчет удобного получения результатов компиляции - сильно зависит от конкретного компилятора, в общем случае стоит надеяться только на ручной парсинг stdout/stderr от компилятора - unix way, чо, в частном - чем компилятор современней, тем богаче его возможности - тот же clang в виде положительного примера и старое барахло cl в виде отрицательного
                                                  gcc недалеко ушел от cl, но судя по гуглу в нем есть хотя бы какой-нибудь gcc-xml (но не юзал, не знаю насколько удобно)
                                                  Ответить
                                          • Я не специалист, и С++ компилировал только чужой, но ccache не помогает от этого? Вроде ж это прямое ее нажанчение.
                                            ЗЫ. В Федоре недавно ее стали по умолчанию устанавливать, если попросить установить gcc / build tools.
                                            Ответить
                                            • не юзал, в т.ч. и потому, что у меня нет linux-only проектов
                                              судя по их описанию, они кешируют .o файлы, либо -E результат препроцессинга

                                              про .o - накой это надо, когда нормальная система сборки (да тот же gnu make) не будет пересобирать .o файл, если все, от чего он зависит, старше имеющегося результата
                                              разве что ускорить clean+build+clean+build+... - типа ничего не меняем, но постоянно чистим - молотим для красивой таблички

                                              типичная ситуация, при которой билдится лавинным эффектом - изменили хедер, даже тупо пробел, и везде где он включен - собирается вперед и с песней
                                              ну, тут -E может помочь
                                              а может и не помочь - например, добавили один метод в класс, которым должен воспользоваться один объектник из десятка - но все 10 будут пересобираться
                                              так что как обычно всё неидеально и напрямую следует из природы с++

                                              среда in-time может отслеживать радикальность изменений и сообщать об этом компилятору, но это уже совсем хардкор
                                              Ответить
                                      • >на дворе 2013 год, а нет идеальной бесплатной полнофункциональной иде

                                        Многих vi/emacs устраивает. Вообще людям всегда чего-то не хватает.

                                        Вот на дворе 2013 год, а нет удобного полнофункционального говнокода без сумасшедших школьников c единственно, абсолютно верным мнением и раскалённой серебрянной пулей в жопе.
                                        Ответить
                    • В Эмаксе есть eclim - можно просто к клипсу прикрутить. Была еще когда-то такая штука которая позволяла консольный редактор запускать поверх Вижуал Студии. Я видел как так Вим использовали, Эмакс не видел, но хз.
                      Ответить
                      • Есть неплохой проект ensime, использующий swank-протокол для общения со скала-сервисом. Проект довольно впечатляющий (для меня, по крайней мере), жаль только, чрезмерно ресурсоёмкий. Думаю, нечто подобное можно запилить и для с++: поднять для проекта clang-сервер, отвечающий за индексацию и анализ в реальном времени.
                        Ответить
                        • Я Энзим попробовал, но не разобрался. Флаймейк то работает то нет (при чем они его как-то через ж. запускают, так что обычными средствами до него не добраться). Автодополнение какое-то непонятное вообще. Куча jar'ов каких-то к которым исходников я не нашел. Да даже если бы и нашел - было бы влом разбираться. Документации - вообще никакой. Насторйки в хз. пойми каком формате. Он вроде работает с sbt - но это тоже хз пойми что делает, и докуметация такая же. (Надо заметить, что это общая тема для Скалы - документацию вообще никто и никогда не пишет, или в стиле КО просто повторяют название функции и аргументов).
                          Ответить
                          • Хз, я сразу разобрался. А sbt вообще шикарен...
                            Ответить
                            • Хз. по поводу sbt - я не понял зачем это нужно. То, что он делает, либо вообще в принципе вредно, либо делает хуже, чем любой аналог. Ну, кроме Мейвена, непосредственно. Да вобщем, такое же недоразумение, как и вся Скала - почему не взять и просто не писать на Камле, если так нравится - они ж нихрена не улучшили.
                              Это как мне недавно попалось описание языка, который изобрели Самсунг для встраиваемых систем (телевизоров), не дословно, но как-то так: "Мы взяли все самое лучшее из наших любмых языков: Сишарпа, Луа и Яваскрипта и создали наш новый язык!" - ну там как бы вообще полный пиздец. На Скале хоть со скрипом писать можно, и в принципе можно понять людей, которые бы ее выбрали вместо Явы. Но если выбирать Камл / Скала... то тут даже вопроса не должно возникнуть...
                              Ответить
                              • sbt, в частности, умеет запускать скала-консоль с настроенным classpath, а также выполнять инкрементальную рекомпиляцию при изменении сорцов, выполняя по итогам полезные команды вроде обновления контекста веб-сервера или запуска тестов. На практике это даёт динамику разработки, немного напоминающую RoR (правда, компиляция у скалы томозная, но, поскольку система реактивна, а программисту нужно переключить внимание, польза весьма ощутима). Очень полезная вещь.
                                Ответить
                                • Не разобрался в том смысле, что из коробки оно не работает / работает нестабильно, а разбираться почему желания нет. Может даже не его вина, а того же sbt, или плохой инфраструктуры у самой Скалы (очень даже может быть т.как они от дот-релиза к дот-релизу меняют название файлов настроек и пути по умолчанию). Сообщения об обшибках явно написаны китайским переводчиком, который до этого переводил инструкции по эксплуатации электротехникой.

                                  В мире есть великое множество систем билдов хороших и разных. Нафиг они изобрели еще одну работающую хуже чем всео остальные?
                                  Ответить
                            • Да, вот, только если я их не путаю с каким-то другим вендором смарт-ТВ, у них еще был язык разметки "очень похожий на ХТМЛ"... Вот Скала мне как раз это и напоминает "язык очень похожий на ОКамл" :)
                              Ответить
                          • >попробовал, но не разобрался
                            typical
                            Ответить
                  • Eclipse и NetBeans тоже можно
                    > CodeLite, KDevelop, Code::Block
                    Фу фу фу. Мне иногда кажется, что создатели этих иде хотели украсть идею у Microsoft Notepad.
                    Ответить
                    • KDevelop - монструозное говно, согласен. А вот Code::Blocks мне нравились, я в них одно время на сишке без крестов писал, отличная IDE.
                      Ответить
                      • вот я уже без различных снипетов и рефакторов, подсказок ошибок без компиляции, подсказок автодополнения и типов жить не могу (могу, но не приятно)
                        Ответить

    Добавить комментарий