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

    +1006

    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
    17. 17
    18. 18
    19. 19
    20. 20
    21. 21
    22. 22
    23. 23
    24. 24
    25. 25
    26. 26
    27. 27
    28. 28
    29. 29
    30. 30
    31. 31
    32. 32
    33. 33
    34. 34
    35. 35
    36. 36
    37. 37
    38. 38
    39. 39
    40. 40
    class Worker
    {
        private:
            char name[15];
            double salary;
            ...
            
        public:
        
            Worker(char* n, double s)
            {
                ...
                
                if (s < 0)
                    salary = verSal(s);
                else
                    salary = s;
                
                ...
            }
        
            char* getName()
            {
                char* t = new char[15];
                strcpy(t, name);
                return t;
            }
            
        private:
            double verSal(double s)
            {
                do
                {
                    cout << "Ошибка при вводе зарплаты. Введите зарплату: ";
                    cin >> s;
                }
                while (s < 0);
                return s;
            }
    }

    Вот ещё один пример из конспекта (это уже от другого преподавателя). Он, заявил, что в getName() о t "позаботится сборщик мусора". Просто он Java тоже читает...

    Запостил: vovams, 01 Февраля 2012

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

    • Почему не std::string?
      Ответить
    • Язык можно выучить лишь прочитав не одну полезную книгу, потратив на практику не один трудомесяц, и решая крупные реальные задачи под надзором более опытных коллег.
      А посещая лекции одну пару в неделю и решая говнозадачи "проинвертируйте массив из 10 элементов" можно лишь получить отдаленное представление о теме - да и вообще нереально, что в качестве преподавателя попадется программист с реальным опытом, зачастую это бывший неинициативный выпускник-хорошист, который пошел в аспирантуру, потому что мама настояла, защитил кандидатскую по теме "методы усовершенствования методики преподавания технологии собирания огурцов в условиях крайнего севера" и в итоге оставшийся при кафедре 5-10-20 лет, потому что было лениво работать на нормальной работе с 9 до 18 (а программисту зачастую так еще и с переработками).
      Расценивай обучение в институте только как "мне тут дают отдаленное представление о <название каждого предмета>", и насколько это представление будет качественным/фундаментальным и пригодится в жизни - зависит только от твоего дополнительного самообразования в процессе обучения.
      Что за ВУЗ, кстати?
      Ответить
      • Да, согласен. Примерно так я к этому и отношусь.

        У меня были некоторые знания на момент поступления, поэтому, когда преподаватель пишет такое, я понимаю что оно неправильно / не работает / не скомпилируется. А другие? А потом ко мне подходят и просят помочь с лабораторной, и в коде одногрупников я вижу все ошибки преподавателя и его "стиль кодирования". Возможно, пройдёт время и уже их код попадёт на сайт вроде этого. Мне порой тяжело смотреть, как такой преподаватель учит других.

        Что касается самообучения, я не знаю что делать. Что учить? Как учить? Как практиковаться? Уже давно хотел спросить у кого-то, кто прошел через всё это.
        Ответить
        • я учился так: была довольно большая практическая задача, интересная мне. Из материала - хелпы и примеры. Интернет даже диалапный был тогда редкостью. В результате тонны говнокода и индусятины, но свою задачу выполняет. Со временем появляется понимание того, что наговнокодил и... так несколько раз :)
          Ответить
        • 1) С чего начать: Г.Шилд, С.Прата.
          2) Метода: скачал информацию → прочитал и осмыслил тему → пробуешь самостоятельно → осмысляешь всё содеянное → повторяешь с начала до полного просветления.
          3) >>Как практиковаться?
          Тянешь с github, койнить проект и форкаешь его под свои нужды. Когда решишь что всё зашибцом, отдашь своим тестерам(вот для чего программистам нужны знакомые, приятели и т. п.). Узнаёшь о себе и своём детище много нового и интересного, получаешь пожелания, фиксишь баги, добавляешь фичи и выпускаешь 0.0.1 версию. Принимаешь поздравления от коллег по цеху и чувствуешь себя немного программистом. При необходимости повторяешь.
          Ответить
        • > что учить?
          - если конкретно С++, и намерения серьезные, то читаешь Страуструпа как первую фундаментальную книгу по языку (по желанию там даже задания есть к каждой главе) - получаешь представления о возможностях языка как он был задуман автором, ну и о стандартной библиотеке
          - если нужно отшлифовать понимание ООП с использованием С++ - есть книжка Гради Буч
          - нужно отшлифовать тонкие моменты - Мейерс
          - сломать себе мозг шаблонами (точнее приведенным в книге стилем метапрограммирования) - Александреску

          > как практиковаться?
          Практиковаться можно и нужно на работе - и опыта получишь на порядок больше, и спросить есть у кого, и денюшку заплатят. Оценивай свою загруженность ВУЗом и смотри сможешь ли ты потратить 20+ трудочасов в неделю на работу. Зная стандарт С++ и STL, уже можно найти работу, честно рассказав на собеседовании, что опыта нет - будут оценивать адекватность в целом.
          Затем уже на работе будет ближе к делу понятно, куда конкретно копать дальше - например, boost для универсальных и консольно-серверных приложений, Qt/MFC/другое для UI, может OpenGL/DX для игростроя и т.д.
          Качать какие-либо проекты с гитхаба, 95% которых писали такие же начинающие, но очень амбициозные "программисты", не самый лучший путь, как мне кажется.
          Ответить
          • А если нет возможности работать или найти работу?
            Ответить
            • если нет возможности работать, тогда какой смысл делать из себя специалиста-программиста
              надо делать из себя специалиста, который найдет работу и возможность работать
              Ответить
              • ну, пиздец, придется предпринимательством заниматься
                Ответить
                • строительные специальности (инженеры, архитекторы) найдут работу при любом правительстве, кризисе и общественном строе
                  добейся пробуй
                  Ответить
                • да, этот тредик катится в манагерский семёнар как преуспеть у бузинессе
                  Ответить
            • Найти работу легко - приходишь в понравившуюся фирму и говоришь - можно я практикантом за чай и печеньки? Я в свое время со своим художественным образованием пошла работать за копейки и ничего, вполне себе вуз заменило)
              Вообще на работе намного быстрее обучение идет за счет волшебных пиздюлей.
              defecate-plusplus - хороший список, ушла читать Александреску)
              Ответить
          • >>то читаешь Страуструпа
            Его книгу читать после 5-6 месяцев работа с конкретными реализациями стандартов С++. Работать будешь с конкретным компилятором, а не с абстрактным стандартом.
            >> как практиковаться?
            Наверно очень даже не плохо, когда во время собеседования, на вопрос «А что вы собственно умеете на С++?», претендент на должность, вместо «Да в общем то, пока что ни хера...», предъявит хотя бы свои джастфорфановские РАБОЧИЕ подделки, блеать.
            Иначе с тем же успехом, «с нуля за печеньки с кофем» можно начинать в общаге/на квартире/дома.

            Со всем остальным согласен.
            Ответить
            • > Его книгу читать после 5-6 месяцев работа с конкретными реализациями стандартов С++
              Вот уж с этим не согласен, т.к. на С++ одновременно работаю, пожалуй, в двух самых распространенных компиляторах (студия и гцц), которые на двоих имеют явно 70+% рынка.
              Да, есть нюансы которые их отличают, но эти нюансы слишком мелки, и ни в коей мере не отменяют необходимость знания стандарта, идеологии языка и уверенности, что в С++ в любом случае можно сделать те или иные действия - я сейчас говорю о стандарте 2003 года. Стандарт 2011 года полностью сейчас вообще ни один продукт не поддерживает и ничего нельзя считать стабильным.
              > очень даже неплохо, когда во время собеседования... - претендент различает std::vector, std::list и std::map, может на бумажке проинвертировать порядок бит в аргументе типа Т, знает чем отличается класс от структуры, про передачу аргументов по значению, указателю и ссылке, знает про наследование и хорошо если про множественное наследование и еще лучше если про виртуальное, приходит на собеседование помытый, в нормальной одежде и расчесанный.
              Покажется смешным, но собеседоваться приходили люди с претензией к оплате труда 70-80к, которые не могли ответить на эти простые вопросы, зато в резюме была описано все что можно, и опыт работы ага. А в итоге взяли зеленого выпускника, который до этого работал при своей кафедре и рассказывал, что STL им применять не разрешали, т.к. это недостаточно хардкорно, и оказался очень даже ничего, испытательный срок думаю пройдет.
              Ответить
              • Стандарт конечно да, знать нужно, но пользоваться будешь документацией к конкретному компилятору.
                >>может на бумажке, может и устно, может и в воображении
                Беседа беседой, это обязательно для любого собеседования, с другой стороны «Болтовня ничего не стоит. Покажите мне код.» (Linus Torvalds).
                Ответить
                • для "покажите мне код" после первого собеседования, если с кандидатом всё еще есть обоюдный интерес, ему присылается небольшое задание, объемом где-то на вечер кодинга, с расчетом, что через неделю-две он соизволит прислать решение, как раз нормальное время, чтобы посмотреть и других канидатов, и код оценить
                  "покажите мне код, который вы делали на прошлой работе" - не очень осмысленная просьба

                  тебе уже, думаю, бессмысленно об этом всем рассказывать, а вот молодёжь пусть почитает
                  если есть в голове адекватность + готовность учиться, быстро и качественно - то работу можно найти и без опыта работы, адекватность - это как минимум твердое знание базовых вещей, незнание которых и тем более неспособность догадаться о них после N подсказок - это уже печально
                  Ответить
                  • Кстати адекватность для собеседующего это в первую очередь умение вести связный разговор.
                    Ответить
                  • Бывает так,что помимо основной работы, программисты пишут ещё что-то для себя или других(общее пользование). Очень предполагаю, что все осиливавшие работу сокетов писали свой, если не огнестен то портощуп. Вот это и можно продемонстрировать.
                    На одном из собеседований так и гоняли: показывай что да как, почему это так реализовал, а это этак, поясните мысль(с). Вот тогда и понял: «Иногда код программиста, говорит куда больше о программисте чем он сам о себе».
                    И да, согласен, скорее всего, мои требования уже не к джунику.
                    Ответить
            • Хмм, а у меня в уме не укладывается что может быть начинающий программист без хучь каких нить программок.
              Ту же жизнь я думаю писал каждый второй...
              Ответить
              • Хелловердятины намолотить можно много — в сухом остатке низкий КПД.
                Сделать свой форк, ну к примеру той же дс++, распространить среди знакомых и сопровождать — реальный опыт.
                Ответить
                • А можно спустится с небес и понять что джунику никто сложной работы не даст. И делать ему прийдеться именно хелловордятину.
                  Ответить
                • А начинающим прогерам с реально большой головой эта дисскуссия вообще не нужна.
                  Ответить
        • Когда я учился в ВУЗе, то поступал так:
          Все возможные задания сводил к программированию (так были решены все задачи по мат.анализу, дискретке, выч. мату, инф. безопасности, и многим другим). Где-то с разрешения преподавателей, где-то самостоятельно. Очень много было индивидуальных заданий от преподавателей программированием не занимающихся, но желающих получить что-нибудь эдакое. Все делал на С++. Постепенно преподы меня заметили и сами стали просить что-то сделать. А потом и работу на кафедре предложили. Это был очень серьезный ресурс опыта, который не появился бы, если бы я просто следовал общепринятой программе обучения. Потом это все реально пригодилось при устройстве на нормальную работу. А программирование у нас давали даже хуже чем у вас, судя по коду :)
          Ответить
          • Как-то лень мне простые вещи усложнять.
            Ответить
            • Почему усложнять? Например благодаря скиллу в программировании на 5м курсе было написано 12 небольших программ к каждо лабе по криптографии, которые остальным предлагалось считать вручную (в тетрадке) в течении нескольких месяцев. Я сделал семестровый набор за пару часов. Я не усложнять предлагаю, а не искать себе заданий искуственно, а использовать готовую почву, которой полно в любом вузе.
              Ответить
              • >а не искать себе заданий искусcтвенно
                нескладуха
                Ответить
                • В чем? Задачи ставятся вузом так или иначе, я предлагал их решать таким путем, чтобы еще параллельно практику программирования нарабатывать. В случае, когда ты сам себе поставил задачу от и до, возможны проблемы с мотивацией и легко все забросить.
                  Ответить
      • надо понимать, что задача любого технического ВУЗа, а уж тем более по IT, состоит в выпуске специалистов, которые самостоятельно могут научиться новым технологиям. И именно поэтому так много времени уделяется теории и лишь малая часть - языкам.
        Во время моей учебы наиболее предпочтительным языком был delphi. И где он сейчас?
        Ответить
        • > предпочтительным языком был delphi. И где он сейчас?
          Oh, shi~
          скоро в треде появится Тарас и покажет, где delphi
          Ответить
          • Недавно в одном комментарии говорили про человека с высшим образованием, пользующимся ПХП, и пишущим на Дельфи7 до сих пор.
            Ответить
            • это не про меня.
              но я Дельфи 7 тоже пользуюсь - для системы, которая написана давно, перепродаем и хотелки делаем - смысла нет куда-то переходить (как технически - 90% уже оттестировано и работает, так и экономически - тут и так все ясно).
              но это все крайности - нетипичный случай.
              Ответить
        • Ну, нас так и учат. Дают базу и учат учиться) Знакомят с Pascal, Object Pascal, C++, PHP, JS, Prolog
          Ответить
    • Говнопреподаватель.
      "Ложное знание опаснее невежества" (Шоу Джордж Бернард).
      Лучше уж самому осиливать, чем такое переосмыслять...
      Ответить
    • class Janitor extends Worker
      Ответить
    • while (s < 0);

      А если опять ввели отрицательное значение, то уходим в бесконечный цикл. Ибо нефиг... Ой, нет, там же do. Я просто привык к
      } while (s < 0);
      Ответить
    • GCC garbrage collector
      Ответить
    • std::shared_ptr<char> getName()
              {
                  char* t = new char[15];
                  strcpy(t, name);
                  return t;
              }
      Ответить
      • А если strcpy бросит исключение?
        Ответить
        • std::shared_ptr<char> getName()
          {
              char* t = new char[15];
              try
              {
                  strcpy(t, name);
              }
              catch(std::exception const&)
              {
                  delete t;
                  t = nullptr;
              }
              return t;
          }


          починил
          Ответить
          • А если он бросит не потомка std::exception, а что-то ещё?

            Олсо, шаред птр позовёт delete вместо delete []...
            Ответить
            • Окей, босс

              std::shared_ptr<char> getName()
              {
                  char* t = new char[strlen(name) + 1];
                  try
                  {
                      strcpy(t, name);
                  }
                  catch(std::exception const&)
                  {
                      delete[] t;
                      t = nullptr;
                  }
                  catch(...)
                  {
                      delete[] t;
                      t = nullptr;
                      std::cout << "Something happened!" << std::cout;
                  }
                  return t;
              }
              Ответить
          • > починил
            
            {
                    using std::strcpy;
                    strcpy(t, name);
            }
            obvious fix
            Ответить
    • > Он, заявил, что в getName() о t "позаботится сборщик мусора".
      Говорят PChar в Delphi перед строкой число ссылок хранил на него и на уровне языка поддерживалась актуальность этого счетчика. Это правда?
      Ответить
    • показать все, что скрытоvanished
      Ответить

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