OberonCore
https://forum.oberoncore.ru/

Подскажите какой язык программирования выбрать?
https://forum.oberoncore.ru/viewtopic.php?f=35&t=1391
Страница 4 из 5

Автор:  Евгений Темиргалеев [ Среда, 01 Апрель, 2009 14:00 ]
Заголовок сообщения:  Re: Подскажите какой язык программирования выбрать?

Уважаемый Валерий Лаптев сообщил главный принцип экстремальнго программирования: "сначала тесты, потом код." Уважаемый Madzi сообщил, что он с таким подходом не согласен, его принцип "сначала алгоритм, потом код, а потом уж тесты (если очень хочется).".

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

Автор:  Илья Ермаков [ Среда, 01 Апрель, 2009 15:52 ]
Заголовок сообщения:  Re: Подскажите какой язык программирования выбрать?

Madzi писал(а):
Вообще-то, правильно сначала алгоритм, потом код, а потом уж тесты (если очень хочется).

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

Автор:  Vlad [ Среда, 01 Апрель, 2009 16:41 ]
Заголовок сообщения:  Re: Подскажите какой язык программирования выбрать?

Madzi писал(а):
Vlad писал(а):
Блин, да поймите вы, программирование - это не только математика. Если бы все так было просто...

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


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

Madzi писал(а):
Но математике всё-таки больше, в том числе дискретной и мат.логики, просто "программисты" считают достаточным знание языка программирования, и не хотят загружать себя "лишними" знаниями.


Про нежелание загружать себя лишними "знаниями" - это скорее к некоторым оберонщикам, которые ведутся на пропаганду простоты и отказ от всего "лишнего", и думают, что оберон поможет им не учиться всяким сложным вещам типа юнит-тестирования :)

Madzi писал(а):
У меня понятия о тестировании самые разнообразные, поскольку я участвовал в разных проектах от академических до индустриальных


Не верю (с) :) При все уважении. Можно писать без тестов (и пишут, и даже на C), но это неэффективно. Каменный век. И чем сложнее система - тем большее значение имеют автоматические тесты.

Madzi писал(а):
, но лично я предпочитаю тестировать программу на бумаге, до того как она будет реализована в языке на машине, а затем, следует проверка правильности набивки. При этом программа в 99% работает правильно с первого раза, сразу после набивки. и лишь 1% когда требуется некотороая переработка (было когда оказались ошибки в спецификациях в документации).


И вы говорите, что участвовали в каких-то реальных проектах? :) Ошибки/недодумки/недосказки в спецификациях - это и есть те самые 99% багов. Или вы действительно думаете, что в юнит тестах на C++ я тестирую выход за границы массивов, нарушение типизации, обращение по невалидному указателю, циклы с break и прочие ужасы С++, от которых (якобы) избавлен оберон? :)
Вот смотрите. У вас есть замечательная функция: parent_directory(path), которая как и следует из названия возращает директорию одного уровня выше для пути. Замечательна эта функция тем, что она математически доказана на бумажке, закодирована в лучших традициях Дейкстры и даже снабжена комментарием. Такая идиллия продолжается пару лет, пока ваш коллега (который работает совсем над другим проектом, но с которым у вас общая библиотека) не обнаруживает, что функция неправильно работает для случая вот такого пути: "c:\dir1\dir2\". А именно - она возвращает "c:\dir1\dir2". В комментарии такой случай (слэш на конце) не описан, в математическом доказательстве на бумажке (это конечно из области фантастики, но допустим, что ваш коллега эту бумажку умудрился откопать) - такой случай тоже никак не фигурирует. Исполненный уверенности, что он исправляет "багу", ваш коллега исправляет функцию (и прикладывает новую бумажку с новым доказательством) так, что она начинает возвращать "c:\dir1". Через полгода вам звонит клиент и говорит, что ваша !@#$% программа удалила ему папку "Мои документы" с очень важными документами. Вы начинаете разбираться и находите этот "фикс" вашего коллеги (это при условии, что вы пользуетесь какой-нибудь CVS, хотя тут некоторые утверждали, что при использовании оберона она им нафиг не нужна). Вы приходите к коллеге и начинаете ругаться, на что он вам выкатывает "железный" аргумент в пользу своей невиновности: безупречное математическое доказательство на бумажке :)

Автор:  Vlad [ Среда, 01 Апрель, 2009 16:53 ]
Заголовок сообщения:  Re: Подскажите какой язык программирования выбрать?

Info21 писал(а):
Конечно, test-driven development -- очередное открытие старого инженерного колеса программерами. Подаваемое, как обычно, как сугубое откровение. А как же.


Да никто его не подает как откровение. Просто оберонщики склонны преувеличивать роль языка в разработке. Юнит-тестирование им стало уже не нужно, блин...

Автор:  Vlad [ Среда, 01 Апрель, 2009 16:59 ]
Заголовок сообщения:  Re: Подскажите какой язык программирования выбрать?

Madzi писал(а):
Вообще-то, правильно сначала алгоритм, потом код, а потом уж тесты (если очень хочется).


Почитайте про BDD. В смысле я не предлагаю какой-нибудь труд на эту тему изучить, а просто, посмотреть что это такое. Для расширения кругозора.

Madzi писал(а):
Это называется несоответствие ТЗ. И доказвать что-либо в данном случае глупо.


Заказчику не нужно соответствие ТЗ (которое скорее всего вы сами и составите). Ему нужна программа для решения его задач.

Madzi писал(а):
А ещё представте себе кошмар, существуют языки в которых нет поддержки исключений. И на них даже программы пишут, и сложные. И даже операционные системы :)


C.

Автор:  Евгений Темиргалеев [ Среда, 01 Апрель, 2009 17:17 ]
Заголовок сообщения:  Re: Подскажите какой язык программирования выбрать?

Вот пришёл наш Фома
Vlad писал(а):
Не верю (с)
и клеветник
Vlad писал(а):
...Просто оберонщики склонны преувеличивать роль языка в разработке. Юнит-тестирование им стало уже не нужно, блин...
Он сначала решает за "обернщиков" что им нужно или не нужно. И, на основе собственных выводов, начинает строить критику.

Автор:  Vlad [ Среда, 01 Апрель, 2009 17:22 ]
Заголовок сообщения:  Re: Подскажите какой язык программирования выбрать?

Евгений Темиргалеев писал(а):
клеветник


Поздравляю со вступлением в ряды верующих под флаг info21 :)

Автор:  Madzi [ Среда, 01 Апрель, 2009 17:26 ]
Заголовок сообщения:  Re: Подскажите какой язык программирования выбрать?

Можете не верить. Я вас прекрасно понимаю, потому что работал в команде с такими людьми. Для вас мир уже состоялся и пытаться вас переубедить глупо. Тем более, что в коллективной работе, когда работают программисты разного уровня и язык (С++) не способен "утирать сопли" каждому новичку ничего кроме тестирования не остаётся. Как бы профессионалы не исхищрались над своими кусками. Но есть другой мир и другие подходы.
Когда каждую ночь идёт сборка проекта и не дай бог туда кто-то положил не протестированный модуль, который не даст проекту собраться, - это маразм. Я против такого программирования, хотя и вынужден иногда в нём участвовать. Именно по этому поводу я и пишу: ТЕСТИРОВАНИЕ - ФИГНЯ. И ничего более.

Автор:  Vlad [ Среда, 01 Апрель, 2009 17:39 ]
Заголовок сообщения:  Re: Подскажите какой язык программирования выбрать?

Madzi писал(а):
Можете не верить. Я вас прекрасно понимаю, потому что работал в команде с такими людьми. Для вас мир уже состоялся и пытаться вас переубедить глупо. Тем более, что в коллективной работе, когда работают программисты разного уровня и язык (С++) не способен "утирать сопли" каждому новичку ничего кроме тестирования не остаётся.


Гхм. Новички - это конечно серьезный фактор (особенно для C++). Но не в моем случае. В моей команде все имеют инженерный уровень выше среднего. Все понимают важность тестирования, в том числе и юнит.

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


Гхм. Это вы к чему? Каким боком сборка проекта к юнит-тестированию?

Madzi писал(а):
Я против такого программирования, хотя и вынужден иногда в нём участвовать. Именно по этому поводу я и пишу: ТЕСТИРОВАНИЕ - ФИГНЯ. И ничего более.


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

Автор:  Сергей Губанов [ Среда, 01 Апрель, 2009 17:54 ]
Заголовок сообщения:  Re: Подскажите какой язык программирования выбрать?

Vlad писал(а):
Евгений Темиргалеев писал(а):
клеветник
Поздравляю со вступлением в ряды верующих под флаг info21 :)
В то же самое время:
Info21 писал(а):
Любое формальное доказательство очень даже чревато ошибками в силу своей занудности. Живой организм как ни старается, но всё-таки не терпит занудности. Тестирование как дополнение к систематическим методам программироваия -- поэтому необходимо.
Бессовестный клеветник!

Автор:  Vlad [ Среда, 01 Апрель, 2009 18:15 ]
Заголовок сообщения:  Re: Подскажите какой язык программирования выбрать?

Сергей Губанов писал(а):
Info21 писал(а):
Тестирование как дополнение к систематическим методам программироваия -- поэтому необходимо.
Бессовестный клеветник!


Ну что ж поделаешь, и info21 может сказать правильную вещь.

Автор:  Валерий Лаптев [ Среда, 01 Апрель, 2009 18:21 ]
Заголовок сообщения:  Re: Подскажите какой язык программирования выбрать?

Info21 писал(а):
Все правы :)

Конечно, test-driven development -- очередное открытие старого инженерного колеса программерами. Подаваемое, как обычно, как сугубое откровение. А как же.

Или воспринимаемое как откровение -- и тут странная параллель между массами молодых программеров и массами революционных курсисток-энтуазисток. (Это к социологии сферы ИТ.)

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

Но еще необходимее -- подвергать молодые организмы жестокому обучению систематическим методам -- желательно до того, как они корень "bug" в любом варианте услышат.

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

1. Да, про ХР - верно. Западники подали это как некое откровение в технологии разработки. Хотя мы аналогично работали еще в начале 80-х. И парами, и маленькие шажки, и одновременно с реальным кодом сразу и тестовый код клепали. По другому было не выкрутиться при написании оси восьмеричными кодами.
2. Категорически согласен с последней фразой: "жестокое обучение систематическим методам".
К сожалению в наш век "демократии", которая как ржа пролезла в образование, "жестоко" обучать достаточно сложно. Воплей много о "жестоком" обращении с детьми и даже с 20-тилетними дылдами-студентами... :( Разве что автоматизировать эту "жестокость" :).

Автор:  Валерий Лаптев [ Среда, 01 Апрель, 2009 18:29 ]
Заголовок сообщения:  Re: Подскажите какой язык программирования выбрать?

Vlad писал(а):
Сергей Губанов писал(а):
Info21 писал(а):
Тестирование как дополнение к систематическим методам программироваия -- поэтому необходимо.
Бессовестный клеветник!


Ну что ж поделаешь, и info21 может сказать правильную вещь.

Он обычно всегда говорит правильные вещи... :)

Автор:  Vlad [ Среда, 01 Апрель, 2009 20:05 ]
Заголовок сообщения:  Re: Подскажите какой язык программирования выбрать?

Валерий Лаптев писал(а):
Он обычно всегда говорит правильные вещи... :)


Да? А я несколько удивился, не услышав привычного: "читайте Дейкстру и тестирование вам будет не нужно".

Автор:  Илья Ермаков [ Среда, 01 Апрель, 2009 20:21 ]
Заголовок сообщения:  Re: Подскажите какой язык программирования выбрать?

Роль разная у тестирования.

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

Другое дело - пытаться убрать ошибки из ляп-тяп построенных алгоритмов. Т.е. тестированием довести до кондиции систему, которая гнилая в "материале" - т.е. в каждом компоненте.
Разница принципиальна.
В первом случае тестирование убирает неожиданные ошибки. Во втором его пытаются применить, чтобы убрать вполне предсказуемые (при неумении программировать) ошибки.

Человека, не умеющего обсчитать профиль самолёта, никто даже не подпустит к изготовлению макета и обдувке в трубе :) А в ИТ многие считают, что труба заменяет расчёты.

Автор:  Валерий Лаптев [ Четверг, 02 Апрель, 2009 09:27 ]
Заголовок сообщения:  Re: Подскажите какой язык программирования выбрать?

Vlad писал(а):
Валерий Лаптев писал(а):
Он обычно всегда говорит правильные вещи... :)


Да? А я несколько удивился, не услышав привычного: "читайте Дейкстру и тестирование вам будет не нужно".

Дейкстру по любому читать нужно. Помнится, я при прочтении его книжки испытал шок. Но от Дейкстры до тогдашнего реального программирования на PL-1 это было так же далеко, как до Солнца.
Тем не менее, стремиться к этому нужно.
Хотя в больших проектах без тестирования, естественно, не обойтись.

Автор:  Валерий Лаптев [ Четверг, 02 Апрель, 2009 09:29 ]
Заголовок сообщения:  Re: Подскажите какой язык программирования выбрать?

Илья Ермаков писал(а):
Роль разная у тестирования.

Человека, не умеющего обсчитать профиль самолёта, никто даже не подпустит к изготовлению макета и обдувке в трубе :) А в ИТ многие считают, что труба заменяет расчёты.

Какое ТОЧНОЕ сравнение!

Автор:  Alexey_Donskoy [ Четверг, 02 Апрель, 2009 11:09 ]
Заголовок сообщения:  Re: Подскажите какой язык программирования выбрать?

Хотел тут ответить, но уже сильно не по теме получается.
В общем, кому интересно про проектирование, тестирование и иже с ними, прошу вот сюда: viewtopic.php?p=26835 !

Автор:  Trurl [ Четверг, 02 Апрель, 2009 16:43 ]
Заголовок сообщения:  Re: Подскажите какой язык программирования выбрать?

Vlad писал(а):
Вот смотрите. У вас есть замечательная функция: parent_directory(path), которая как и следует из названия возращает директорию одного уровня выше для пути.
...
Вы приходите к коллеге и начинаете ругаться, на что он вам выкатывает "железный" аргумент в пользу своей невиновности: безупречное математическое доказательство на бумажке :)


И что изменится если вместо "безупречного математического доказательства" будет длинный список пройденных тестов?

Автор:  Валерий Лаптев [ Четверг, 02 Апрель, 2009 16:47 ]
Заголовок сообщения:  Re: Подскажите какой язык программирования выбрать?

Trurl писал(а):
Vlad писал(а):
Вот смотрите. У вас есть замечательная функция: parent_directory(path), которая как и следует из названия возращает директорию одного уровня выше для пути.
...
Вы приходите к коллеге и начинаете ругаться, на что он вам выкатывает "железный" аргумент в пользу своей невиновности: безупречное математическое доказательство на бумажке :)


И что изменится если вместо "безупречного математического доказательства" будет длинный список пройденных тестов?

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

Страница 4 из 5 Часовой пояс: UTC + 3 часа
Powered by phpBB® Forum Software © phpBB Group
https://www.phpbb.com/