Конференция "Прочее" » Студенческая задачка
 
  • Игорь Шевченко © (09.04.17 16:41) [100]
    kilkennycat ©   (09.04.17 15:09) [99]

    Займись командной разработкой, придешь к моей точке зрения.
  • TohaNik © (09.04.17 17:19) [101]
    Удалено модератором
  • TohaNik © (09.04.17 17:27) [102]
    Удалено модератором
  • Юрий Зотов © (09.04.17 17:57) [103]
    Kerk ©   (09.04.17 13:27) [96]
    > снижают сложность заданий, чтобы каждому дать шанс получить
    > диплом


    Возможно, какой-то смысл в этом все же есть. Только дипломы должны быть разными. Например, может присваиваться разная специальность, а не "инженер-программист" огулом для всех.

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

    Так вот - если даже человек хорошо знал всего лишь одну область, но в данный момент именно такой человек нам и был нужен, то он проходил (по крайней мере, на испытательный срок). Остальному научим - но уже в процессе.
  • Юрий Зотов © (09.04.17 18:12) [104]
    > kilkennycat ©   (09.04.17 15:09) [99]

    > А меня - рабочий, безглючный, удовлетворяющий условиям ТЗ.
    > Как и чем и кем он написан - пофиг.


    Костя, а давай сыграем в ролевую игру?
    :o)

    Ты тестируешь соискателя и даешь ему такую задачу: если целочисленная переменная X равна 1, то присвоить ей значение 0, а если она равна 0, то присвоить ей значение 1.

    Соискатель пишет:
    X := 1 - X;

    Твои условия выполнены: код рабочий, безглючный и удовлетворяет ТЗ.

    Что скажешь?
  • Kerk © (09.04.17 19:02) [105]

    > kilkennycat ©   (09.04.17 15:09) [99]
    >
    > Игорь Шевченко ©   (09.04.17 14:12) [97]
    > > Меня в реальной работе волнует наиболее понятный код,
    >
    > А меня - рабочий, безглючный, удовлетворяющий условиям ТЗ.
    >  Как и чем и кем он написан - пофиг.

    Завтра тебя попросят новую фичу добавить или старую переделать и сразу станет не пофиг, кем и как написан код :)

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

    Не раз меня спасало это вот интуитивное чувство. Если делаешь что-то сложное, что-то здесь не так, стоит еще раз подумать.
  • Kerk © (09.04.17 19:13) [106]

    >  Юрий Зотов ©   (09.04.17 17:57) [103]

    Отбор соискателей - это все-таки другое. Очевидно, что на работе могут требоваться люди разной квалификации. Но образование все-таки должно задавать некие стандарты.
  • Юрий Зотов © (09.04.17 19:17) [107]
    > Kerk ©   (09.04.17 19:02) [105]

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


    Согласен, но добавлю свои 5 копеек: "А также в том, чтобы эти решения предусматривали простое изменение и/или расширение функционала без серьезного перепахивания кода и без риска поломать функционал в другом месте кода".
  • kilkennycat © (09.04.17 19:52) [108]

    > Игорь Шевченко ©   (09.04.17 16:41) [100]
    > Займись командной разработкой

    уже и в разных ролях.


    > Юрий Зотов ©   (09.04.17 18:12) [104]
    > X := 1 - X;
    > Твои условия выполнены: код рабочий, безглючный и удовлетворяет ТЗ.
    > Что скажешь?

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


    > Kerk ©   (09.04.17 19:02) [105]
    > Завтра тебя попросят новую фичу добавить или старую переделать
    > и сразу станет не пофиг, кем и как написан код :)

    Естественно, код должен комментироваться. Это хоть и немного не вписывается в "пофиг", но это ж совсем базовые вещи.
    Кроме того, новая фича - это новое ТЗ. Это другая задача, другая оплата.

    Вы как-то упускаете при рассуждении бизнес-сторону.
    Да, здорово, конечно, быть офигенным программистом, находящим моментально самые идеальные решения, да еще легко изменяемые в будущем при требовании каких-то фич.
    Но не все такие. Я точно не такой, идеальное решение найти могу, но моментально - нет. И от меня заказчик требует программу (вот, пока писал это - в очередной раз напомнили о сроках) вовремя и работающую. И что там внутри, да хоть if (x == 1) then x = 0 else x = 1 написано - это ему пофиг.
  • Юрий Зотов © (09.04.17 20:25) [109]
    > kilkennycat ©   (09.04.17 19:52) [108]

    Увы, Костя, проблемы предвидятся. Через полгода безукоризненной (якобы) эксплуатации программы клиент вдруг присылает тебе скрытую и случайно обнаруженную им ошибку: некая величина Z должна быть равна 100, а программа молча пишет 200 и не выдает никаких ошибок. Причем выясняется, что программа глючила все эти полгода (только этого никто на замечал) и из-за этого клиент потерял кучу бабла.

    Ты начинаешь разбираться и через несколько бессонных суток находишь, что X := 1 - X иногда работает неверно. Потому что X, оказывается, иногда бывает равен и не 0, и не 1. Через неделю упорных поисков выясняется, что кто-то когда-то что-то неверно забил в БД и концов уже не сыскать. Заказчик матерится, ты нервничаешь, дальнейшее сотрудничество под вопросом.

    А между тем, по-настоящему грамотный разработчик, получив такое ТЗ должен был либо его уточнить (что делать, если X не 0 и не 1 ?), либо вместо X := 1 - X написать что-то типа этого:

    if X = 0 then
     X := 1
    else
     if X = 1 then
       X := 0
     else
       raise MyException.Create('Внятное сообщение об ошибке');

    Как минимум, ошибка всплыла бы при первом же своем проявлении, заказчик сохранил бы кучу бабла, а ты сохранил бы кучу нервов и времени.
  • ухты © (09.04.17 20:32) [110]
    это правильно, сначала подсказать решение, потом добавить условия, базы притянуть, кривые руки и т.п. а в итоге с умным видом осудить
  • Kilkennycat © (09.04.17 20:54) [111]

    > Юрий Зотов ©   (09.04.17 20:25) [109]

    нечестно. ты сказал, "если целочисленная переменная X равна 1, то присвоить ей значение 0, а если она равна 0, то присвоить ей значение 1"
    Здесь не указано третье состояние, не указаны возможные значения входных данных, зато сказано, что это решение работает безглючно. а теперь вдруг глючно.
    Так что, глючное тз = глючный результат.
  • Sha © (09.04.17 21:11) [112]
    истина где-то в районе 100500-го поста
  • Kerk © (09.04.17 21:32) [113]

    > ухты ©   (09.04.17 20:32) [110]
    >
    > это правильно, сначала подсказать решение, потом добавить
    > условия, базы притянуть, кривые руки и т.п. а в итоге с
    > умным видом осудить

    Ну это был предсказуемый ход со стороны ЮЗ. Но ведь в жизни так и бывает.

    Вообще, если бы я был преподом, я бы именно так студентов и мучил. В одном семестре давал курсовик, а в следующем семестре просил бы изменить некоторые функции программы и добавить новые. Пусть переделывают.

    Можно даже усложнить, перемешав результаты первого семестра. Чтобы переделывать пришлось не свою программу, а чужую. Но это совсем жестко :)

    Студенты во время учебы пишут всё с нуля. Лабораторные, курсовики, диплом. А потом приходят на работу и проваливаются по уши в миллионы строк чужого кода 15летней давности. Но откуда навыку работы с чужим старым кодом взяться? Набивают шишки в процессе работы уже.
  • Юрий Зотов © (09.04.17 21:38) [114]
    > Kilkennycat ©   (09.04.17 20:54) [111]

    Костя, пример, конечно, несколько притянут за уши, но все же показывает, что не все равно, кто и как пишет код. Опытный зубр, сразу предвидя ситуацию и, закладываясь на возможные ошибки в ТЗ и в данных напишет не "элегантный" короткий вариант, а "тупой" трехэтажный  IF с выдачей сообщения.
  • Sha © (09.04.17 21:44) [115]
    > Юрий Зотов ©   (09.04.17 21:38) [114]

    даже страшно представить, что творится внутри OC, написанной опытными зубрами... )
  • Kilkennycat © (09.04.17 22:02) [116]

    > Юрий Зотов ©   (09.04.17 21:38) [114]

    Опытный зубр уточнил бы ТЗ. вплоть до "а точно ли нужна целочисленная, если у нее именно такие состояния".
    А если опытный зубр напишет с MyException.Create('Внятное сообщение об ошибке');, то во-первых, он частично нарушил тз, так как там не требовалось этого, во-вторых, возможно сделал лишнюю работу (ведь вполне возможно, что х никогда не примет значения иные, чем 0 и 1), в-третьих, о этой лишней работы проделает офигенно много, поскольку начнет писать на каждый чих.
    Ну и мне кажется, что опытный зубр, которого уже достало глючное, непонятное, неполное и фантастическое тз, написал бы что-то вроде x = x > 0?0:1;
  • Юрий Зотов © (09.04.17 22:03) [117]
    > Sha ©   (09.04.17 21:44) [115]

    > даже страшно представить, что творится внутри OC, написанной
    > опытными зубрами... )


    Внутри OC, написанной опытными зубрами творится ожидание 100500-го сервиспака. И это еще хорошо.
    :o)
  • Sha © (09.04.17 22:09) [118]
    > Kilkennycat ©   (09.04.17 22:02) [116]
    > написал бы что-то вроде x = x > 0?0:1;

    x:=ord(x=0);
  • ухты © (09.04.17 22:11) [119]

    > x = x > 0?0:1;
    x = x != 0?0:1; ))
 
Конференция "Прочее" » Студенческая задачка
Есть новые Нет новых   [134431   +10][b:0.001][p:0.001]