Конференция "Прочее" » Впервые в команде. Думал, прикалываетесь.
 
  • Vlad Oshin © (14.05.08 18:24) [0]
    Про стили написания кода: думал придираетесь
    Одному то все понятно было, а тут вот, когда толпа..
    Вот такое встретилось:
     Summa:=0;
     SummaNds:=0;
     chislo2:=16;
    вот нахрен оно равно 16? Что это такое? Смотрим: chislo,chislo2,n:Integer;
    никаких коментов нигде, нихрена..
  • Palladin © (14.05.08 18:27) [1]
    может день месяца? :)
  • БарЛог © (14.05.08 18:30) [2]
    16=4^2=2^4 :)
  • ^-k2-^ © (14.05.08 18:32) [3]
    ставка НДС, это же очевидно :) поменяй на 18 :)
  • TIF © (14.05.08 18:34) [4]
    Замени на const ;)
  • Renegat (14.05.08 18:34) [5]
    16d = 10h = 10000b. Хм. Там где-нить shl/shr/and/or есть?
    А вообще интересное программное решение :)
    Можно посмотреть код?
  • Romkin © (14.05.08 18:40) [6]
    Ведущего программера с канделябром не было :D
  • ^-k2-^ © (14.05.08 18:42) [7]
    может как раз их ведущий и написал :)
  • Ega23 © (14.05.08 18:43) [8]

    >  chislo2:=16;


    жесть.
  • @!!ex © (14.05.08 18:43) [9]
    > [6] Romkin ©   (14.05.08 18:40)

    Как показала практика ведущими программистами вполне могут работать ребята не далеко ушедшие от простого батонокидательства.
  • Юрий Зотов © (14.05.08 18:58) [10]
    > @!!ex ©   (14.05.08 18:43) [9]

    Но не очень долго. Либо подрастают, либо возвращаются в кодеры.
  • Поп Гапон (14.05.08 19:07) [11]

    > Romkin ©   (14.05.08 18:40) [6]
    >
    > Ведущего программера с канделябром не было :D


    Вот часто и ведущие так пишут, когда "думать некогда, тут прыгать надо". И сдать проект нужно было ещё месяц назад...
  • Юрий Зотов © (14.05.08 19:21) [12]
    > Поп Гапон   (14.05.08 19:07) [11]

    Те, кто уже созрел для ведущего, хороший код и плохой код пишут за одинаковое время. Точнее, хороший они пишут не задумываясь, на автопилоте, а плохой не пишут вообще. Просто не умеют его писать.

    Зато на отладку хорошего кода времени уходит меньше (по сравнению с плохим). В итоге получается, что хороший код экономит время, а вовсе не расходует лишнее. Проверено много-много раз.
  • Поп Гапон (14.05.08 19:33) [13]

    > Юрий Зотов ©   (14.05.08 19:21) [12]
    >
    > > Поп Гапон   (14.05.08 19:07) [11]
    >
    > Те, кто уже созрел для ведущего, хороший код и плохой код
    > пишут за одинаковое время. Точнее, хороший они пишут не
    > задумываясь, на автопилоте, а плохой не пишут вообще. Просто
    > не умеют его писать.


    Часто бывает уже готовый "студенческий код" и нужно его заставить как-то работать(не переделывая). Глючит после этого оно по прежнему, но уже даже почти работает(можно впарить заказчику).

    А студент стоит в три раза дешевле ведущего. А ведущий в режиме подтирания соплей из кода может прибрать за пятью студентами.

    Хоть продукт будет говно, но он будет дешевле чем у конкурентов. Пример - Vista и MacOS.
  • Юрий Зотов © (14.05.08 19:49) [14]
    > Поп Гапон   (14.05.08 19:33) [13]

    Увы... знакомая картина...
    :-(

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

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

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

    Жаль, что лишь редкие манагеры это понимают. "Скупой платит дважды" или "Мы недостаточно богаты, чтобы покупать дешевые вещи" - золотые поговорки. Они ведь и к найму работников тоже относятся.

    Вспоминается стих Маршака про семь шапок из овцы. "Больше" не всегда значит "лучше".
  • Поп Гапон (14.05.08 20:21) [15]

    > Юрий Зотов ©   (14.05.08 19:49) [14]
    >
    > > Поп Гапон   (14.05.08 19:33) [13]
    >
    > Увы... знакомая картина...
    > :-(
    >
    > Жаль, что лишь редкие манагеры это понимают. "Скупой платит
    > дважды" или "Мы недостаточно богаты, чтобы покупать дешевые
    > вещи"
    - золотые поговорки. Они ведь и к найму работников
    > тоже относятся.


    Здесь вы не правы. Студент стоит допустим 1 единицу денег, ведущий 3 единицы.

    Заказчику при определённых ухищрениях можно представить студента как девелопера ~ ведущему.

    Студент может писать код со скоростью той же что и ведущий(пусть и будет этот код особо глюкавым). Если ведущий только "подтирает"(работа у него в фиксе багов) то он может справится за 5 студентами.

    Итого стоимость хорошего продукта 3*6 = 18 денег.

    Стоимость плохого 1*5 + 3 = 8 денег.(тоесть почти в два раза дешевле).

    И пусть это будет калл, но "ано палюбому дешевле чем у конкурентов".

    Ну ещё сюда нужно приплюсовать зарплату впаривателя(менеджера продажника) в две деньги. Итого плохой продукт стоит 10 денег.

    Ну а переделки за дополнительные деньги.

    А вот для заказчиков пока особо долго доходит, что совокупная стоимость владения плохим продуктом обойдётся в три раза дороже, хоть заплатил он с самого начала дешевле.

    В общем это бизнес, цель которого, не посеять хорошее, доброе и вечное, а найти лоха и обуть его.
  • antonn © (14.05.08 20:31) [16]

    > никаких коментов нигде, нихрена..

    а ниже по коду?
  • Сергей М. © (14.05.08 20:34) [17]
    Поп, ты бы все же похмелился бы, а ?)
  • Loginov Dmitry © (14.05.08 22:49) [18]
    > вот нахрен оно равно 16? Что это такое? Смотрим: chislo,
    > chislo2,n:Integer;


    Какая разница, что это? Главное, чтобы работало!

    Это что, самое плохое, что удалось откапать? :)
  • ketmar © (14.05.08 22:53) [19]
    >[18] Loginov Dmitry © (2008-05-14 22:49:00)
    откАпать? чего капаем? накапайте мне 1024 капли.

    ---
    Understanding is not required. Only obedience.
  • Eraser © (14.05.08 22:56) [20]
    > [9] @!!ex ©   (14.05.08 18:43)

    ведущий не ведущий, а РП почти все не в зуб ногой. не с проста в России нету адобе, корелов и т.п. микрософтов.
  • Германн © (15.05.08 01:15) [21]

    > ketmar ©   (14.05.08 22:53) [19]
    >
    > >[18] Loginov Dmitry © (2008-05-14 22:49:00)
    > откАпать? чего капаем? накапайте мне 1024 капли.
    >

    Сразу видно отличие "программиста" от персонажа "художественного" романа.
  • antonn © (15.05.08 01:24) [22]

    > не с проста в России нету адобе, корелов и т.п. микрософтов.

    есть Компасы, 1Cы...
  • wicked © (15.05.08 01:31) [23]
    > Поп Гапон   (14.05.08 20:21) [15]
    одна поправочка - продажник нужен всегда - хороший это продукт или плохой... просто навыки у него должны быть в разных случаях слегка разные

    и в том, что этот момент многие упускают, и есть большая беда "хороших программеров", которые сами пытаются продать свой продукт
  • ketmar © (15.05.08 02:09) [24]
    >[23] wicked © (2008-05-15 01:31:00)
    «впариватель» это называется.

    ---
    Understanding is not required. Only obedience.
  • wicked © (15.05.08 02:11) [25]
    > ketmar ©   (15.05.08 02:09) [24]
    как хошь называй, хоть трутнем
    он должен быть в команде, если команда хочет самостоятельно успешно что-то продать
  • Palladin © (15.05.08 02:33) [26]

    >Поп Гапон (14.05.08 20:21) [15]

    и в результате мы имеем такое понятие как "пилка деньгов"... ни кого не интересует будущее продукта, его сопровождение и работа как таковая... тошно, от этого уже уходят...
  • ketmar © (15.05.08 02:37) [27]
    >[25] wicked © (2008-05-15 02:11:00)
    если команда хочет самостоятельно, то она впаривателей на порог не пустит. со впаривателем — это как раз когда продавать не хочет, только писать.

    ---
    Understanding is not required. Only obedience.
  • VirEx © (15.05.08 09:34) [28]
    Я бы удивился если бы было записано chislo16:=16;
  • Vlad Oshin © (15.05.08 09:45) [29]
    нашел что это было
     chislo2:=16; // vlad 14.05.2008 это оказывается место в шаблоне Excel, куда выводить.
    итого:
    Const
    NumStrFromTOP=16;
    наверное, так будет

    PS
    комментария ниодного вообще на весь модуль

    .FieldByName('Izdelie').AsString;
    .FieldByName('SAP').Asstring;
    .FieldByName('Brand').AsString;
    .FieldByName('Specification').AsString;
    .FieldByName('PcCount').AsString;
    - такое хоть как-то понятно
  • Vlad Oshin © (15.05.08 09:45) [30]
    Удалено модератором
    Примечание: Чини прокси
  • Vlad Oshin © (15.05.08 09:45) [31]
    Удалено модератором
  • TUser © (15.05.08 10:11) [32]
    Радуйся, что не китайцы тот код писАли, а то было бы так

    整数整數2

    или в крайнем случае

    zhěngshùèr

    http://slovari.h15.ru/chi-1.php
  • KSergey © (15.05.08 10:20) [33]
    Удалено модератором
    Примечание: Выражения выбираем
  • KSergey © (15.05.08 10:21) [34]
    > KSergey ©   (15.05.08 10:20) [33]
    > Удалено модератором
    > Примечание: Выражения выбираем

    А вот это зря. Я не знаю ка ксказать это иначе. Извините. Тем более, что никого лично здесь это не касалось. Просто типичные термины, я других не знаю. Еще раз извините.
  • Rouse_ © (15.05.08 11:03) [35]

    > Студент может писать код со скоростью той же что и ведущий

    Угу... пишу со скоростью миллион строк в час... такая фигня получается. Нафих-нафих. Плавали - знаем.
  • SPeller (15.05.08 11:08) [36]
    одного грамотного именования переменных/методов/классов/таблиц/полей достаточно чтобы разобраться в основах чужого алгоритма, даже без комментариев. Себя в свое время к этому приучил, поэтому в свои старые исходники вникаю быстро )
  • Style © (15.05.08 11:14) [37]
    Ну обычно когда не знаешь что такое chislo2 проще поискать поиском в файлах проекта и посмотреть, зачем же оно действительно нужно. Я не думаю что это такая проблема. Гораздо хуже когда переменная называется, "правильно" - NumStrFromTOP, но предназначена она совсем для другого )
    так что в данном коде думаю ничего страшного нет, меня больше смущает отсутствие пробелов между переменной и ее значением, это нечитабельно!
  • Игорь Шевченко © (15.05.08 11:19) [38]
    SPeller   (15.05.08 11:08) [36]


    > одного грамотного именования переменных/методов/классов/таблиц/полей
    > достаточно чтобы разобраться в основах чужого алгоритма,
    >  даже без комментариев


    недостаточно
  • Style © (15.05.08 11:23) [39]

    > одного грамотного именования переменных/методов/классов/таблиц/полей
    > достаточно чтобы разобраться в основах чужого алгоритма,
    > даже без комментариев


    чтобы разобраться в основах чужого алгоритма - даже комментариев не достаточно )))
  • Romkin © (15.05.08 11:34) [40]
    Глубокое заблуждение, что начинающий пишет с той же скоростью, что и опытный. Сколько раз уже измеряли, скорость иногда на порядок отличается.
    А если работа ведущего убирать мусор за подчиненными - то и ведущего быстро не станет, и студенты ничему не научатся.
    Есть, конечно, такие фирмы, с жуткой текучкой кадров, по этому признаку их и распознать можно. Но сейчас они уходят: написать-то продукт таким стилем можно, а вот сопровождение сделает его золотым.
  • Игорь Шевченко © (15.05.08 11:37) [41]
    Romkin ©   (15.05.08 11:34) [40]


    > Глубокое заблуждение, что начинающий пишет с той же скоростью,
    >  что и опытный.


    Начинающий даже быстрее может писать. Вот только исправлять за ним потом дольше
  • Юрий Зотов © (15.05.08 11:38) [42]
    > Поп Гапон   (14.05.08 20:21) [15]

    Принимаем, что зарплата ведущего равна 3-м студенческим. Получаем вот что.

    1. Вариант: 3 студента плюс ведущий.

     3*1 - зарплата 3 студентов за месяц;
     0.5*3 - зарплата ведущего за консультации студентов и правку их кода в том же месяце;
     0.5*3 - зарплата ведущего за следующий месяц, в котором он писал тот код, который недописал в предыдущем месяце  из-за того, что потратил время на студентов и правку их кода.

    Итого на суммарный код потрачено 1.5 месяца, 6 зарплат, отчисления конторы за 4-х человек, стоимость аренды площади 4-х рабочих мест и амортизация 4-х компов. Плюс время и зарплата, потраченные потом на ловлю оставшихся студенческих багов. Плюс недовольство заказчика (программа глючит, срок ее сдачи затягивается). Из-за этого - возможная потеря престижа конторы (а оно в немалые деньги обойтись может).

    2. Вариант: два ведущих.

    Итого на суммарный код потрачено 1 месяц, 6 зарплат, отчисления конторы за 2-х человек, стоимость аренды площади 2-х рабочих мест и амортизация 2-х компов.

    Вот такая арифметика. Два ведущих по срокам - быстрее, по деньгам - дешевле, по качеству - лучше.
  • Romkin © (15.05.08 11:42) [43]
    Впрочем, не так страшен код с непонятными названиями и без комментариев, как код с большой связностью. Это когда покрутил что-то в одном месте - и гадость лезет в куче других, совершенно неожиданно :)
    Вещи эти в какой-то мере взаимосвязаны: если код написан как курица лапой, то скорее всего и вся программа будет единым куском в стиле "не трогать!!!!!!!". Но иногда бывают программы "переходного периода", комментарии есть - а трогать нельзя.
    Так вот, о чем я: программу такую часто легче переписать, чем привести в нормальный вид. К сожалению, такой опыт уже был :(
  • TUser © (15.05.08 12:04) [44]
    А откуда возьмутся ведущие, если везде кроме трех студентов посадить одного опытного?
  • MsGuns © (15.05.08 12:05) [45]
    Проблема программистов - "художников" решается достаточно просто.
    Во-первых, следует не полениться и написать "Стандарты" - на программный код, на код сервера, на оформление документации, на требования к интерфейсу и т.д.
    Во-вторых, каждому вновь пришедшему дать эти все стандарты и приказать иметь их на столе в печатном формате.
    В-третьих, с первых же проектов контролировать соблюдение этих стандартов.

    За 2 года, что я работаю с молодежью, у меня был только один момент, когда молодому надо было не просто объяснить, но и слегка придавить "авторитетом", чтобы соблюдал.

    Сейчас у нас несколько десятков проектов, написанных разными программистами. Любой из них легко въезжает" в любой проект. Правда, необходимо заметить, что очень много реализовано в библиотечных юнитах "системного" назначения.
  • Style © (15.05.08 12:05) [46]

    > Впрочем, не так страшен код с непонятными названиями и без
    > комментариев, как код с большой связностью. Это когда покрутил
    > что-то в одном месте - и гадость лезет в куче других, совершенно
    > неожиданно :)
    > Вещи эти в какой-то мере взаимосвязаны: если код написан
    > как курица лапой, то скорее всего и вся программа будет
    > единым куском в стиле "не трогать!!!!!!!". Но иногда бывают
    > программы "переходного периода", комментарии есть - а трогать
    > нельзя.


    Все это от лукавого! Сначала пишут программы, а потом пытаются менять архитектуру ) Вместо того чтобы переписать большую часть, начинают мудрить и делать заплатки - лишь бы работало. В итоге абсолютно не понятная и порой даже не логичная структура проекта.
    А дело то в том, что на этапе проектирования надо было учесть все возможное и даже не возможное, что может происходить с программой или базой, какие могут потребоваться доработки и как сделать так чтобы в дальнейшем можно было бы без труда внести изменения или доработать проект.
  • keymaster © (15.05.08 12:10) [47]

    >  Во-вторых, каждому вновь пришедшему дать эти все стандарты
    > и приказать иметь их на столе в печатном формате.

    Необязательно.
    Когда я работал в известной компании, у нас все стандарты лежали на сервере в общем доступе.
  • MsGuns © (15.05.08 12:16) [48]
    Практика показывает, что печатный материал лучше "инсталлится" в мозги, чем экранный. К тому же можно карандашом пометить для Пети одни разделы, а для Тани - другие для первоочередного "усвояевания" ;)
  • Style © (15.05.08 12:21) [49]

    > Практика показывает, что печатный материал лучше "инсталлится"
    > в мозги, чем экранный.


    Это от типа мозга, зависит. Современный универсальный мозг, способен воспринимать информацию на разных носителях )
  • KSergey © (15.05.08 12:23) [50]
    > MsGuns ©   (15.05.08 12:05) [45]
    >  но и слегка придавить "авторитетом", чтобы соблюдал.

    А почему авторитетом, а не з/п? Или авторитетом - более тонкое искуство при тех же (или лучших?) результатах, а з/п - это грубо?
  • Игорь Шевченко © (15.05.08 12:24) [51]

    > Современный универсальный мозг, способен воспринимать информацию
    > на разных носителях


    Главное, чтобы он ее потом не вываливал на разные носители :)

    MsGuns прав, бумажный вариант всяко лучше.
  • Style © (15.05.08 12:29) [52]

    > MsGuns прав, бумажный вариант всяко лучше.


    ну с кпк книжки читать тоже вполне удобно )
  • Romkin © (15.05.08 12:31) [53]

    > Все это от лукавого! Сначала пишут программы, а потом пытаются
    > менять архитектуру ) Вместо того чтобы переписать большую
    > часть, начинают мудрить и делать заплатки - лишь бы работало.

    Да не обязательно. Реальная история: надо было написать небольшое простое приложение, а точнее, просто переписать то, что было под ДОС на win, ну и немного расширить возможности. Наняли "вчера студент", я ему примерную структуру БД нарисовал, фигня, десяток таблиц всего там. К сожалению, я был загружен, и не проконтролировал код. Мдя. Получился уродец, но кое-как работающий :)
    Через пару месяцев посадил опытного программиста чуть доделать (не менять), убрать иногда появляющийся AV, ну и пару кнопок приделать. Мелочи. Через месяц с ним случилась истерика :)
  • Romkin © (15.05.08 12:34) [54]
    Код был примерно такой (выдрал отрывок, весь метод не поместится точно!)
        Panel1.Height := h div 3;
        dbreQuestionText.Width := w - h div 3;

        AnswerCount := 0;
        if ((Info.AnswerPicture1.Height <> 0) or (Info.AnswerText1DataSource.DataSet.FieldByName(Info.AnswerText1DataField).AsStr ing <> '')) then
         AnswerCount := AnswerCount + 1;
        if ((Info.AnswerPicture2.Height <> 0) or (Info.AnswerText2DataSource.DataSet.FieldByName(Info.AnswerText2DataField).AsStr ing <> '')) then
         AnswerCount := AnswerCount + 1;
        if ((Info.AnswerPicture3.Height <> 0) or (Info.AnswerText3DataSource.DataSet.FieldByName(Info.AnswerText3DataField).AsStr ing <> '')) then
         AnswerCount := AnswerCount + 1;
        if ((Info.AnswerPicture4.Height <> 0) or (Info.AnswerText4DataSource.DataSet.FieldByName(Info.AnswerText4DataField).AsStr ing <> '')) then
         AnswerCount := AnswerCount + 1;
        if (AnswerCount = 0) then
         AnswerCount := 1;
        Panel4.Width := w div AnswerCount;
        Panel5.Width := w div AnswerCount;
        Panel6.Width := w div AnswerCount;
        Panel7.Width := w div AnswerCount;

        if (Info.QuestionDataSource.DataSet.FieldByName(Info.QuestionDataField).AsString = '') then
         dbreQuestionText.Visible := False;
        if (Info.QuestionPicture.Height = 0) then
         begin
         Panel2.Visible := False;
         dbreQuestionText.Align := alClient;
         Panel1.Height := h div 4;
         end;

        temp := h - (stQuestion.Height + Panel1.Height + stAnswers.Height);
        if (Info.AnswerText1DataSource.DataSet.FieldByName(Info.AnswerText1DataField).AsStr ing <> '') then
         if (Info.AnswerPicture1.Height = 0) then
          begin
          dbreAnswer1.Height := temp - bbAnswer1.Height;
          iAnswer1.Visible := False;
          end
         else
          begin
          dbreAnswer1.Height := temp - min(w div AnswerCount, temp div 2) - bbAnswer1.Height;
          iAnswer1.Height := min(w div AnswerCount, temp div 2);
          end
        else
         if (Info.AnswerPicture1.Height = 0) then
          Panel4.Visible := False
         else
          begin
          dbreAnswer1.Visible := False;
          iAnswer1.Height := temp - bbAnswer1.Height;
          end;


    Так практически везде. И это еще цветочки :))) Стоило чуть поменять где-либо - все сыпалось непредсказуемым образом... Типа один метод что-то делает с таблицей, за ним запускается другой (вообще из другого модуля), который рассчитывает, что первый метод точно все сделал и спозиционировал таблицу именно так, как надо. Ну и тд..
  • Style © (15.05.08 12:42) [55]
    Ну не самый страшный код )
    Но как минимум студента заставить именовать грамотно объекты - надо было!
  • Игорь Шевченко © (15.05.08 12:58) [56]
    Romkin ©   (15.05.08 12:34) [54]

    Ночной кошмар программиста
  • Style © (15.05.08 13:03) [57]

    > Ночной кошмар программиста


    ну-ну проснувшись от такого кошмара, рекомендуется пойти на кухню выпить стакан водки с перцем, покурить, вздохнуть, залезть под  одеяло и долго думать об троекратном росте свой заработной платы, до тех пор пока не уснешь!
  • Slym © (15.05.08 13:37) [58]
    Style ©   (15.05.08 12:42) [55]
    Ночной кошмар программиста

    Ц графика - нистрашно... Вот када такая "программа" на непрерывном производстве железкой рулит автоматически, а эта железка высотой в 3 этажа - вот это страшно!
  • Юрий Зотов © (15.05.08 13:48) [59]
    > TUser ©   (15.05.08 12:04) [44]

    > А откуда возьмутся ведущие, если везде кроме трех студентов
    > посадить одного опытного?

    Проблема подготовки кадров - отдельный вопрос. Готовить их нужно, в том числе и на реальных проектах - но при этом не нужно говорить что проект стал дешевле.

    Конечно же, он стал дороже - ровно на стоимость ресурсов, потраченных на обучение. И на соответствующее время длительнее.
  • Юрий Зотов © (15.05.08 13:55) [60]
    В [42] небольшая погрешность в расчетах по первому варианту. Отчисления конторы за 4-х человек, стоимость аренды площади 4-х рабочих мест и амортизация 4-х компов - все это нужно еще и умножить на 1.5, потому что на суммарный код было потрачено 1.5 месяца, а не 1.

    Итого разница между двумя вариантами становится не просто немалой, а ОЧЕНЬ немалой.
  • Palladin © (15.05.08 13:58) [61]

    > а эта железка высотой в 3 этажа - вот это страшно!

    Судный День грядет! :)
  • Slym © (15.05.08 13:59) [62]
    Юрий Зотов ©   (15.05.08 13:55) [60]
    ОЧЕНЬ немалой

    кроме амортизации компов еще совт нужен... скока лиц на дельфи стоит? :)
  • Юрий Зотов © (15.05.08 14:01) [63]
    > Slym ©   (15.05.08 13:59) [62]

    Точно! Разница увеличилась еще на 2 лицензии (притом, не только на Delphi, а и на систему, да и вообще на ВЕСЬ используемый софт).
  • Alkid © (15.05.08 14:22) [64]

    > Ночной кошмар программиста

    Эх, не видели вы чего тут народ творит на С++... :(
    Причём творил дядька грамотный, головастый, который отреверсинджинирил кучу чужого, вскрыл разные структуры данных, интерфейсы и протоколы. Это талант.
    Но какой он писал код, мама родная!
  • Игорь Шевченко © (15.05.08 14:27) [65]
    Alkid ©   (15.05.08 14:22) [64]

    Чего я только не видел на своем веку :)
    "Кривое не может сделаться прямым". (Еккл.)
  • Style © (15.05.08 14:35) [66]

    > Эх, не видели вы чего тут народ творит на С++... :(


    Есть такая должность программист-обфускатор! )))))
  • MsGuns © (15.05.08 14:39) [67]
    >KSergey ©   (15.05.08 12:23) [50]

    >А почему авторитетом, а не з/п? Или авторитетом - более тонкое искуство при тех же >(или лучших?) результатах, а з/п - это грубо?

    Я не сторонник подобные вопросы, связанные с обучением молодых специалистов, регулировать денежкой. Надо дать человеку понять, что деньги - это стимул или розги, не более. Но никак не средство форсирования обучения или поддержки дисциплины. Если чел не хочет или не может (такое тоже бывает), то бесполезно его "воспитывать" рублем. Скорее всего, ошибся сам руководитель, который неверно выбрал для него тему или даже предметную область. Либо человек просто не на своем месте,- в этом случае с ним проще сразу расстаться, хотя я лично считаю такие случаи (благо у меня их было совсем немного) собственными промахами.

    А вообще полностью согласен с Юрием, утверждающим, что кадры - это отдельная песня. Я бы даже назвал это не песней, а целой "фонотекой" ;)
  • Поп Гапон (15.05.08 17:05) [68]

    > Игорь Шевченко ©   (15.05.08 12:58) [56]
    >
    > Romkin ©   (15.05.08 12:34) [54]
    >
    > Ночной кошмар программиста


    Ну вот это мой код первого "коммерческого" проекта. Просто в НИИ куда я пришел после института про стандарты, похоже, никто не подозревал и каждый писал как думал.


    unit Unit4;

    interface

    uses
     Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
     Buttons, StdCtrls, ExtCtrls, registry, Spin, VasMessageBox;

    type
     TForm4 = class(TForm)
       RadioGroup1: TRadioGroup;
       RadioButton1: TRadioButton;
       RadioButton2: TRadioButton;
       CheckBox2: TCheckBox;
       GroupBox1: TGroupBox;
       SpinEdit4: TSpinEdit;
       SpinEdit5: TSpinEdit;
       SpinEdit1: TSpinEdit;
       GroupBox2: TGroupBox;
       Label1: TLabel;
       SpinEdit2: TSpinEdit;
       CheckBox3: TCheckBox;
       Label2: TLabel;
       SpinEdit3: TSpinEdit;
       Label3: TLabel;
       Label4: TLabel;
       Label8: TLabel;
       Label9: TLabel;
       Label10: TLabel;
       VasMessageBox1: TVasMessageBox;
       Label5: TLabel;
       Label6: TLabel;
       Label7: TLabel;
       SpeedButton1: TButton;
       SpeedButton2: TButton;
       ComboBox1: TComboBox;
       Label11: TLabel;
       Label12: TLabel;
       procedure SpeedButton1Click(Sender: TObject);
       procedure OnCreate(Sender: TObject);
       procedure OnClose(Sender: TObject; var Action: TCloseAction);
       procedure SpeedButton2Click(Sender: TObject);
       procedure FormKeyDown(Sender: TObject; var Key: Word;
         Shift: TShiftState);
     private
       { Private declarations }
     public
       { Public declarations }
     end;

    var
     Form4: TForm4;

    implementation
    uses unit1;
    {$R *.DFM}

    procedure TForm4.SpeedButton1Click(Sender: TObject);
    var Registry: TRegistry;
    begin
    if (SpinEdit5.Value>SpinEdit4.Value) and
    (SpinEdit1.Value>SpinEdit5.Value) then
    begin
    Registry:=TRegistry.Create;
    Registry.RootKey:=HKEY_LOCAL_MACHINE;
    Registry.OpenKey('SOFTWARE\GART\CS',False);

    if CheckBox2.checked=true then
    Registry.WriteInteger('Default Minization',1)
    else
    Registry.WriteInteger('Default Minization',0);

    if RadioButton1.Checked=True then
    Registry.WriteInteger('Default Status',1);

    if RadioButton2.Checked=True then
    Registry.WriteInteger('Default Status',2);

    Registry.WriteInteger('Time Good',SpinEdit4.Value);
    Registry.WriteInteger('Time Normal',SpinEdit5.Value);
    Registry.WriteInteger('Time Answer',SpinEdit1.Value);

    Registry.WriteInteger('Packet Item',ComboBox1.ItemIndex);
    Registry.WriteInteger('Packet Size',StrToInt(ComboBox1.Text));

    Form1.NMPing1.PacketSize:=Registry.ReadInteger('Packet Size');

    if CheckBox3.checked=true then
    Registry.WriteInteger('Corupted Message',1)
    else
    Registry.WriteInteger('Corupted Message',0);

    Registry.WriteInteger('Time Automatic',SpinEdit2.Value);
    Registry.WriteInteger('Time Corupted',SpinEdit3.Value);

    timealarm:=Registry.ReadInteger('Time Corupted');
    CorrMess:=Registry.ReadInteger('Corupted Message');

    //качество прохождения запроса
    mainbedtime:=Registry.ReadInteger('Time Answer');
    maingoodtime:=Registry.ReadInteger('Time Good');
    mainnormaltime:=Registry.ReadInteger('Time Normal');

    Registry.Free;
    ///автоматический режим опроса
    Form1.AutoTimer.Interval:=SpinEdit2.Value*60*1000;

    if RadioButton1.Checked=True then
    begin
    Form1.SpeedButton4.Enabled:=true;
    Form1.AutoTimer.Enabled:=False;
    automode:=1;
    end;

    if RadioButton2.Checked=True then
    begin
    Form1.SpeedButton4.Enabled:=false;
    Form1.AutoTimer.Enabled:=True;
    automode:=2;
    end;

    Form1.Showstatus('Настройки змінені');
    Form4.Close;
    end

    else
    VasMessageBox1.Execute;

    end;

    procedure TForm4.OnCreate(Sender: TObject);
    var Registry: TRegistry;
    begin

    Registry:=TRegistry.Create;
    Registry.RootKey:=HKEY_LOCAL_MACHINE;
    Registry.OpenKey('SOFTWARE\GART\CS',False);

    if Registry.ReadInteger('Default Minization')<>0 then
    CheckBox2.checked:=true;

    if Registry.ReadInteger('Default Status')=1 then
    RadioButton1.Checked:=True;
    if Registry.ReadInteger('Default Status')=2 then
    RadioButton2.Checked:=True;

    SpinEdit4.Value:=Registry.ReadInteger('Time Good');
    SpinEdit5.Value:=Registry.ReadInteger('Time Normal');
    SpinEdit1.Value:=Registry.ReadInteger('Time Answer');
    ComboBox1.ItemIndex:=Registry.ReadInteger('Packet Item');

    if Registry.ReadInteger('Corupted Message')<>0 then
    CheckBox3.checked:=true;

    SpinEdit2.Value:=Registry.ReadInteger('Time Automatic');
    SpinEdit3.Value:=Registry.ReadInteger('Time Corupted');

    Registry.Free;

    Form4.ShowModal;
    end;

    procedure TForm4.OnClose(Sender: TObject; var Action: TCloseAction);
    begin
    systemloc:=0;
    Action:=caFree;
    end;

    procedure TForm4.SpeedButton2Click(Sender: TObject);
    begin
    Form4.Close;
    end;

    procedure TForm4.FormKeyDown(Sender: TObject; var Key: Word;
     Shift: TShiftState);
    begin
    if key=VK_ESCAPE then
    SpeedButton2Click(nil);
    end;

    end.

  • clickmaker © (15.05.08 17:07) [69]
    на днях очень долго медитировал на такой код:

    switch(forumAttribute)
    {
     case 18:
       iSrc = imgSrc[0];
       break;
     case 530:
       goto case 18;
  • Юрий © (15.05.08 17:26) [70]
    > [69] clickmaker ©   (15.05.08 17:07)

    Исправили бы, и не думали.

    switch(forumAttribute)
    {
    case 18:
    case 530:
      iSrc = imgSrc[0];
      break;
    ...

  • Юрий Зотов © (15.05.08 17:37) [71]
    case forumAttribute of
     18, 530:
        iSrc := imgSrc[0];
    end;

    Несколько элегантнее, не так ли?
    :о)
  • ketmar © (15.05.08 18:54) [72]
    >[64] Alkid © (2008-05-15 14:22:00)
    а, кстати. помнится, почитывал код хороших реверсверов для Z80. screaming fear. хотя и работал. это совсем другое мышление.

    >[71] Юрий Зотов © (2008-05-15 17:37:00)
    >Несколько элегантнее, не так ли?
    да. только в php/c всё-таки лучше.
    switch (ch) {
     case 'A': wasA = true;
     case 'B': printf("A or B\n"); break;
     default: printf("wtf?\n");
    }

    if (wasA) printf("AAAAAA!\n");


    пример безмозглый, конечно.

    ---
    Understanding is not required. Only obedience.
  • Kenny © (16.05.08 14:57) [73]
    У нас на днях был найден отжиг:

          if (ModularOrder.MANYTOONE_STATE == UnicmDefines.CATALOG_ORDER_STATE_FINISHED)



    Обе константы. Причем обе _текстовые_ константы! (Java)
  • TUser © (16.05.08 15:11) [74]

    > Kenny ©   (16.05.08 14:57) [73]
    >
    >

    А что такого? Завтра я поменяю константы и ок.
  • Kenny © (16.05.08 15:16) [75]
    > TUser ©

    Еще один :D
  • DiamondShark © (16.05.08 15:43) [76]

    > switch (ch) {
    >  case 'A': wasA = true;
    >  case 'B': printf("A or B\n"); break;
    >  default: printf("wtf?\n");
    > }

    Сквозное выполнение веток -- это, конечно, прикольный трик, но и источник глупых багов тоже.

    Глядя на чужой код не всегда (чит.: практически никогда) можно определить, является ли отсутствие бряка между ветками случайной забывчивостью или фишкой. Приходится въезжать во весь код детально.
  • TUser © (16.05.08 15:49) [77]

    > Еще один :D
    >

    А зачем еще делают константы в программах?
  • han_malign © (16.05.08 16:04) [78]

    >> Еще один :D
    > А зачем еще делают константы в программах?

    - да уж всяко не для условной компиляции... Другое дело, что в Java это единственный доступный способ http://www.javapractices.com/topic/TopicAction.do?Id=64
  • Юрий Зотов © (16.05.08 16:08) [79]
    > TUser ©   (16.05.08 15:11) [74]

    Это Java. Там строка - это объект, а переменнаяи типа "строка" - это ссылка на объект. Поэтому условие
    if (строка1==строка2) ...


    проверяет равенство ссылок, а не тел строк. Ясно, что если обе строки - константы, то это условие не выполнится никогда.
  • han_malign © (16.05.08 17:08) [80]

    > if (строка1==строка2) ...
    > проверяет равенство ссылок, а не тел строк.

    - сдается мне, что
    String str1 = "Str";
    String str2 = "Str";
    - обе переменные будут указывать на один объект - "Str"...
    http://www.javabeginner.com/java-string-comparison.htm
  • DiamondShark © (16.05.08 17:15) [81]

    > han_malign ©   (16.05.08 17:08) [80]

    Если объявления и присваивания в разных пакетах, то стопудово не будут.
    А иначе -- как звёзды сложатся.
  • TUser © (16.05.08 18:16) [82]
    А, про жавности не знал. Теперь буду.
  • Petr V. Abramov © (17.05.08 19:41) [83]

    > Palladin ©   (15.05.08 13:58) [61]


    > Судный День грядет! :)

    http://lleo.aha.ru/arhive/no_humor/t-config.shtml

    :)
  • БарЛог © (17.05.08 21:40) [84]
 
Конференция "Прочее" » Впервые в команде. Думал, прикалываетесь.
Есть новые Нет новых   [134435   +9][b:0.001][p:0.005]