LINUX.ORG.RU

ЛОР, помоги выбрать ЯП для обучения

 , , , ,


1

3

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

Вот к каким мыслям я пришёл:

Язык должен наиболее чисто демонстрировать самые основы написания кода.

Не Си и не современные коммерческие языки (Java, C#, Go). Си, хотя примитивный в основе, усложнён из-за окружения, в котором используется. Современные коммерческие языки были созданы для решения проблем индустрии. Проблема общая: я хочу преподавать материал по мере нарастания сложности. Если в языке неизбежно приходится использовать классы или printf, то это затруднит объяснение (не хотелось бы слишком часто говорить «потом узнаешь для чего это нужно»), напугает студента (ему придётся писать код, используя возможности, которые он плохо понимает), создаст неправильное восприятие основ (как будто printf — это какая-то важная часть компьютера или ОС).

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

Языки, между которыми я выбираю: Pascal и Python.

Pascal устарел и денег не принесёт (обидно), но это и не является основной целью. Целью является программирование, а не современное окружение.

В частности, я не собираюсь задрачивать студента на Delphi или любой «продвинутый» диалект языка. Это противоречит цели. Я рассчитываю на то, что после должной тренировки “bare bones” нужно перейти на современный язык и это будет легко.

Важно упомянуть, что спека языка Oberon (Виртовский язык, тот же Паскаль, только упрощённый и доработанный) составляет 17 страниц.

Питон мне сложнее оценить, потому что я избегал работы с ним.

Если ограничиться императивным подмножеством, без ассоциативных массивов, классов и мета-классов, list comprehensions, HOF, исключений, то выглядит как альтернатива Паскалю. Хотя меня беспокоит динамическая типизация. Типы — очень важная вещь, хотелось бы чтобы язык помог это донести, а не быть типа «ну да, это важно, но ты забей».

Это все мои мысли.

Что касается практики, то я имел несчастье наблюдать как человек впервые знакомился с программированием, изучая Java на javarush. На это было больно смотреть.

Edit: дальнейшие пояснения по теме:

  • Подробнее про то, почему я считаю, что изучение основ и Паскаль хорошо сочетаются: 1
  • Почему не Си и не ассемблер: 1 2
  • Почему Паскаль: 1 2
  • Почему не Питон: 1
  • Целевая аудитория: 1
  • Почему такая размытая аудитория: 1 2
  • Про важность иерархии: 1


Последнее исправление: kaldeon (всего исправлений: 10)
Ответ на: комментарий от Nervous

TypeScript ужасный язык для обучения. Каждый раз когда я с ним сталкиваюсь (где-то после полугодичного перерыва обычно) прихожу в ужас от инфраструктуры вокруг него. Создание, настройка, подключение к проекту требует чрезмерных усилий. В этом смысле турбопаскаль идеален. Далее, система типов у TypeScript своеобразная. Что будет делать ученик при виде сообщения тип "путь/к/модулю/тип1 не подходят для типа другой/путь/к/тому/же/модулю/я/не/знаю/как/так/вышло/тип1? Плакать и звать бабушку?

При этом для промышленного программирования — отличный язык. В условиях заданных ограничений нашли прекрасный компромисс. Создателям — моё уважение.

ugoday ★★★★★
()
Ответ на: комментарий от ugoday

Тогда бы у меня могло быть

Вот от такой фигни типизация помогает. Можно сразу указать, что яиц неотрицательное число не более 255.

monk ★★★★★
()
Ответ на: комментарий от watchcat382

Если параметр «in» то он только передается в функцию.

В смысле, копируется, если это структура или массив? Или считается постоянным и запрещено менять его содержимое?

monk ★★★★★
()
Ответ на: комментарий от watchcat382

Типизация - это лишь инструмент,помогающий программисту вылавливать ошибки.

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

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

$ cat > t.py
a = 5
a = "ok"
$ mypy t.py
t.py:2: error: Incompatible types in assignment (expression has type "str", variable has type "int")  [assignment]
Found 1 error in 1 file (checked 1 source file)
monk ★★★★★
()
Ответ на: комментарий от alysnix

упростим пример. если функция названная Pi возвращает ноль, это лишь говорит о тем, что есть некая Pi, возвращающая ноль.

Даже предложу обоснование откуда взялось имя Pi - например функция,возвращающая элемент массива P с индексом i,вычисляемым каким-то сложным образом внутри нее в зависимости от переданных параметров. Аналогично,увидев в незнакомом исходнике переменную «с» - не стоит сразу делать предположение что это скорость света. Может это счетчик какой-нибудь от слова counter,но автору было лень набирать столько букв. Так что гадать по одно-двухбуквенным именам функций и переменных - дело неблагодарное. И именно поэтому надо не лениться писать «многословные» исходники - их потом читать намного легче.

watchcat382
()
Ответ на: комментарий от watchcat382

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

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

monk ★★★★★
()
Ответ на: комментарий от Nervous

Но понимать свой код самому и сделать его понятным для тайпчекера — это таки да две большие разницы в плане когнитивной нагрузки.

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

watchcat382
()
Ответ на: комментарий от watchcat382

Было бы так, были бы намного популярнее бесскобочные синтаксисы лиспа. Типа:

define fac(n acc)
  if {n <= 1} acc
    fac {n - 1} {n * acc}

Однако, используют их не более 1% лисперов.

monk ★★★★★
()
Последнее исправление: monk (всего исправлений: 1)
Ответ на: комментарий от Nervous

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

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

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

watchcat382
()
Ответ на: комментарий от ugoday

Может быть на одноядерном процессоре. А может на тысячеядерном суперкомпьютере.

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

прогрессивная технология STM.

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

watchcat382
()
Ответ на: комментарий от ugoday

инструкция должна выйти короткая.

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

нас есть объект — факториал, у него есть состояние

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

watchcat382
()
Ответ на: комментарий от watchcat382

чем это хорошо/плохо и чем это лучше/хуже пары самоочевидных строчек на Си - уже нет

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

monk ★★★★★
()
Ответ на: комментарий от alysnix

а вот код проверенный статически на корректность с позитивным вердиктом

Вы ж за С++ обычно топите с его убогой системой типов, которую нужно подпирать классами, стоит только выйти за примитивные учебные примеры. Что-то изменилось?

ugoday ★★★★★
()
Ответ на: комментарий от ugoday

Если человек может в уме шестизначные числа перемножать, но при этом до цирка, где он работает, его мама за ручку водит, потому как иначе он потеряется, то тут всё печально очень.

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

Отличное оправдание для неудачников.

У разных людей удачливость определяется в разных системах координат. И далеко не всегда единственной и главной метрикой является размер банковского счета. Тот питерский математик,которого выперли из математического института,а он взял и решил задачу с которой много-много лет не могли справиться все математические институты мира - он неудачник? Вот только теперь мир запомнит его,а не чиновников от математики,теми институтами рулящих. И задачу эту он решал вовсе не из-за денежной мотивации. Даже когда ему было нечего кушать - он всё равно занимался математикой,а не «шел в бизнес» как нам Медведев советовал.

Если у юноши нет девушки, то перед нами либо монах, либо человек с проблемами.

Либо асексуал,либо человек,чем-то сильно увлеченный настолько что ему не до общения с глупыми курицами,коими является абсолютное большинство молодых девушек за очень редким исключением. Посмотрите на число девушек-программистов,настоящих,а не «по диплому» и поймёте почему у юноши-программиста нет девушки.

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

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

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

А монахи есть и святые люди-бессеребрянники. Только, говоря о социальном слое инженеры-технари, это всё не имеет никакого значения.

Фанатичный верующий мало чем отличается от человека,столь же фанатично увлеченного техникой. И тому и другому не до каких-то там социальных заморочек. Они просто не входят в круг его интересов. У монахов(настоящих) нет женщин не потому что им «нельзя»,а потому что им это просто не интересно.

watchcat382
()
Ответ на: комментарий от Nervous

Но ты ведь согласен, что написание кода и автоматическая проверка его на корректность — это разные задачи?

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

ugoday ★★★★★
()
Ответ на: комментарий от ugoday

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

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

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

watchcat382
()
Ответ на: комментарий от ugoday

Для одних людей очевидно, что это так, а для других столь же очевидно, что нет.

Резак Шири. :-)

monk ★★★★★
()
Ответ на: комментарий от watchcat382

Варваров теперь и помнят наравне с Римской империей, только за то, что они эту империю разрушили, это и есть их достижение.

jpegqs
()
Ответ на: комментарий от alysnix

снаружи функции я ничего не могу «доказать»

Так это у вас система типов невыразительная. Как минимум, снаружи можно сказать, что значения синуса лежат в пределах [-1, 1]. Но у вас нет такого типа. Ошибку sin(42) → true вы отловите, а sin(42) → 2.8 пропустите.

ugoday ★★★★★
()
Ответ на: комментарий от monk

1Сники проекты на миллионы строк пишут с динамической типизацией.

Что,настолько динамической,что одной и той же переменной можно присваивать то числа то строки? Тогда не удивительна столь низкая эффективность их писания и количество глюков.

Я с Паскаля на Си переходил и тоже сначала было неудобно.

Я не про то что неудобно,а про той что тогда некому было показать как писать правильно. Даже институтские преподы нередко знали тот же Паскаль и Си хуже некоторых продвинутых студентов которых сильно интересовало программирование. А человека, более-менее знающего Аду, я нашел через телеконференцию usenet и обитал он в Рыбинске. Некоторое время позадавал ему вопросы,он же и книги посоветовал какие искать.

watchcat382
()
Ответ на: комментарий от ugoday

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

Вот именно что программисту всё равно придется изучать не только язык но и инфраструктуру вокруг него. И если турбопаскаль идеален для начального обучения так как там компиляция и запуск одной кнопкой,а какой-либо инфраструктуры и вовсе нет - то потом всё-таки придется использовать какой-то другой язык,на примере которого можно научить именно что пользоваться инфраструктурой. Там где отдельно компилятор,линкер,библиотеки,make.

watchcat382
()
Ответ на: комментарий от watchcat382

Что, настолько динамической, что одной и той же переменной можно присваивать то числа то строки?

Иногда это даже нужно. Например, НДС может быть 18, 9, 20, 10, 0, «БезНДС».

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

Тогда не удивительна столь низкая эффективность их писания и количество глюков.

Гм… Есть хоть одна бухгалтерская программа более эффективная и менее глючная?

monk ★★★★★
()
Ответ на: комментарий от monk

В смысле, копируется, если это структура или массив?

Как напишете так и будет. Язык позволяет оба варианта. Вот тут можно почитать (на русском!) раздел 6.2 https://www.ada-ru.org/V-0.4w/part_1/ch_06.html Я писал на Ada83,там еще небыло ссылочного типа(access),его в Ada95 добавили.

Также замечу,что передача массива в ассемблерном коде который генерировался компилятором Meridian ADA,действие весьма хитрое. Там передается некая сущность(сейчас бы наверно сказали «объект»),в котором кроме собственно массива есть и информация о границах допустимых индексов для этого массива.

watchcat382
()
Ответ на: комментарий от monk

Incompatible types in assignment

У меня в Дебиане Питон вызывается командой python3 и ваш пример с присваиванием проглатывает без предупреждений. Этим я и возмущён.

А на mypy говорит что нет такого,видимо вместе с самим питоном не ставится.

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

Таки действительно плохие. Отлаживаться одной только отладочной печатью весьма утомительно. Для Си в линуксе я использую nemiver. По удобству интерфейса это конечно не TurboDebuger от Borland,в котором много сидел в 90е годы,но тоже более-менее приемлимо.

watchcat382
()
Ответ на: комментарий от watchcat382

Стандарт специфицирует, что любые другие типы могут быть переданы по copy-in/copy-out, или по ссылке.

Зашибись. То есть в зависимости от компилятора

procedure TestArr(X : in Integer range 0..20_000) is
begin
  X(5) := 42;
end TestArr;

при вызове или поменяет значение пятого элемента переданного массива (если передали по ссылке) или не поменяет (если передали через copy-in)?

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

Так это везде так, где массив не синоним указателя.

monk ★★★★★
()
Ответ на: комментарий от monk

это бухгалтер обязан продемонстрировать правильность начисления.

Так он и продемонстрирует. Но чтобы понять в чем бухгалтер не прав - надо самому быть немного бухгалтером. О чем я и говорил.

watchcat382
()
Ответ на: комментарий от watchcat382

У меня в Дебиане Питон вызывается командой python3 и ваш пример с присваиванием проглатывает без предупреждений. Этим я и возмущён.

А зачем проверять типы при каждом выполнении? Для проверки типов есть специальная программа.

monk ★★★★★
()
Ответ на: комментарий от watchcat382

Для Си в линуксе я использую nemiver.

Он умеет перекомпилировать функцию или изменить данные из точки останова без прерывания программы?

monk ★★★★★
()
Ответ на: комментарий от watchcat382

Так он и продемонстрирует.

Если результат программы соответствует тому расчёту, который бухгалтер продемонстрировал на листочке или в Excel, то он обычно прав.

А контекст у нас был про то, что мой собеседник утверждал, что любой результат функции верен, если он правильного типа.

monk ★★★★★
()
Ответ на: комментарий от qulinxao3

а для хоть какой то адекватности нужны комплексные

Отчего же. Возьмём многомерную систему оценок [деньги, внешность, известность, статус], выраженных числами, а потом добавим разрешающую функцию, которая эти числа перемножает. И если в одной из граф ноль, то и искомый результат тоже ноль.

ugoday ★★★★★
()
Ответ на: комментарий от qulinxao3

замятни 1914(если оно вообще было)

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

ugoday ★★★★★
()
Ответ на: комментарий от monk

НДС может быть 18, 9, 20, 10, 0, «БезНДС».

Чем НДС равный 0 отличается от «БезНДС»?

И самое главное - а как сравнивать с чем-то переменную которая может содержать и числа и строку?

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

Мешает вообще-то. Так как способствет появлению ошибок. Число 0 и строка «0» - это разные значения. И при сравнении это придется учитывать. Писать

если (a==0) или (a=="0") тогда //что-то делаем

И это в предположении что язык позволяет так просто сравнивать строковые переменные. А то еще какой-нибудь strcmp писать.

Есть хоть одна бухгалтерская программа более эффективная и менее глючная?

Я последний раз имел дело с околобухгалтерским софтом еще в 90е. Тогда - были. Вообще «бухгалтерский софт» это тема довольно обширная,в ней много подразделов.

Сам лично видел и расчет зарплаты для коллектива из примерно трех сотен человек и учет движения товаров на комплексе из тринадцати оптовых складов по 2-3тыс наименований на каждом,и учет основных средств - и это работало на 80286 с одним мегабайтом памяти. И даже видел учет товаров для небольшого спортивного магазина,работавший на IBM PC XT - ну что было под то и заказали написать.

watchcat382
()
Ответ на: комментарий от watchcat382

Чем НДС равный 0 отличается от «БезНДС»?

НДС равный 0: операция проведена по нулевой ставке НДС (ст. 164 НК РФ).

Без НДС: операция или исполнитель операции освобождён от уплаты НДС (ст. 145 и 149 НК РФ).

И самое главное - а как сравнивать с чем-то переменную которая может содержать и числа и строку?

А какая разница? Если тип разный, то значения тоже разные. Число ведь не может быть равно строке.

если (a==0) или (a==«0»)

А не надо строковое представление чисел смешивать в одной переменной с числами.

Если Ставка = "БезНДС" Тогда
   НДС = 0;
   Льгота = Истина;
Иначе
   НДС = Ставка * Сумма;
   Льгота = Ложь;
КонецЕсли;
monk ★★★★★
()
Ответ на: комментарий от watchcat382

если (a==0) или (a==«0»)

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

Если Число(А) = 0 Тогда
monk ★★★★★
()
Ответ на: комментарий от ugoday

ага

при этом краха империй вероятность была меньше чем случилось

ибо «англичанка обгадилась» что стало очевидно многим в середине 20ых и всем в ~1948

ваще Великая Война(wwI теперь) намного странее и сильнее повлияла на цивилизацию чем завершение периода ребалансировки(теперь wwII)

слава замедлению прогресса с 1970 (если в клуб то римский) начавшаяся с 1991 www ( 3 ага) - более спокойная штоль

но сам факт что NAUS смогли начать присовывать старушке европе начиная с лета 1917 года пихоту достигнув лям юнитов к концу банкета - это совсем не то о чём мечтале все Гогенцолерны - всех провинций

qulinxao3 ★★
()
Ответ на: комментарий от monk

при вызове или поменяет значение пятого элемента переданного массива (если передали по ссылке) или не поменяет (если передали через copy-in)?

Если написано «in» то не должно менять. А как оно там внутри передает - это детали реализации. Она там сильно «дальше» от исходного кода чем например в Си.

То есть в зависимости от компилятора

Я имел дело только с Meridian ADA и немного с gnat (у него был сильно кривой дос-экстендер и поэтому работал под досом он плохо). Однако оба вели себя предсказуемо и логично. В отличие от зоопарка компиляторов Си тех же времен,где свои особенности были,но в документации о них умалчивалось(в отличие от Ады). Как gnat работает сейчас - сказать не могу,внутренности не копал так как и мотивация уже не та и отладчики в линуксе не такие удобные как TurboDebuger под досом был.

watchcat382
()
Ответ на: комментарий от watchcat382

Тогда - были.

Вот именно потому и были, что все перешли на лучшее решение — 1С.

это работало на 80286 с одним мегабайтом памяти

Сейчас проблема учётных систем не столько учёт, сколько интеграция с Честным знаком, СФР и налоговой. С цифровыми подписями, XML, JSON и прочим.

Учёт и сейчас некоторые в Excel ведут.

monk ★★★★★
()
Ответ на: комментарий от monk

типизация помогает. Можно сразу указать, что яиц неотрицательное число не более 255.

Большинство из языков попадает в одну из двух корзинок: а) число от 0 до 255 я указать-то могу, но надо от одного до трёх при использовании маленькой и от одного до шести для большой сковородки; б) ехала монада через монаду смотрит на монаду, а там морфист морфинисту зигует. И они мне обе не нравятся.

ugoday ★★★★★
()
Ответ на: комментарий от monk

А зачем проверять типы при каждом выполнении?

Отчасти вы правы. Но бывают случаи когда и надо. Например если в программе на Аде для какого-то типа задан допустимый диапазон значений то это будет проверяться каждый раз при выполнении - не вылезло ли за пределы при присваивании.

watchcat382
()
Ответ на: комментарий от monk

Он умеет перекомпилировать функцию

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

изменить данные из точки останова без прерывания программы?

А это как? Если это точка останова то программа остановилась. Можно данные поменять,потом продолжить исполнение.

watchcat382
()
Ответ на: комментарий от ugoday

Так это у вас система типов невыразительная. Как минимум, снаружи можно сказать, что значения синуса лежат в пределах [-1, 1].

а если синус просто возвращает 0? а если возвращает косинус? проверки на вшивость типа единичного интервала - работают только в крайних случаях, к тому же соглашения о том, что некий sin и есть обычный функция синус - у вас нет.

если вам нужно почти полное текстирование именно синуса вы долны написать тестовый код что будет вызывать синус, и сравнивать с другим «синусом», работу которого вы гарантируете… но это казуистика, поскольку для произвольной функции вам еще надо много кумекать, как проверить ее работу. например если это простой random, то придется вам строить распределение результата и смотреть насколько он случаен.

alysnix ★★★
()
Ответ на: комментарий от watchcat382

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

Э, что? У вас есть некий диспетчер, который берёт спецификацию, строит дерево задач, подбирает для каждой задачи исполнителя, шлёт её исполнителю и получает от него отчёт о выполнении. В случае обсуждаемой декларативной спецификации у него будет понимание как всё это проделать эффективным образом. В случае императивной: делай раз, делай два, …

ugoday ★★★★★
()
Ответ на: комментарий от watchcat382

Да не будет она короткая. И читать эту портянку тут никому не будет интересно.

Странно. А вот инструкция по вождению (также именуемая ПДД) — довольно тонкая книжица. И позволяет водить любую машину по любому маршруту.

Извиняюсь,но пример на лиспоподобном языке для меня сложен в понимании.

Прошу простить меня тоже, но я не понимаю чего тут можно не понимать.

ugoday ★★★★★
()
Ответ на: комментарий от watchcat382

Тем не менее среди гениальных людей

К этому и остальным вашим возражениям. Гениев мало. Ничтожное число. Обсуждая тезис «советские технари — бытовые идиоты и дети малые» их можно не учитывать. Совсем. БСЭ сообщает нам:

В СССР насчитывается более 1,2 млн. (1975) научных работников. Общая численность занятых в сфере науки и научного обслуживания достигла 4 млн., а в области просвещения и культуры — 9,1 млн. чел. Количество дипломированных инженеров, занятых в народном хозяйстве, составило 3,7 млн. чел. 121,5 млн. чел. имели высшее и среднее (полное и неполное) образование (58,7 млн. чел. в 1959). В народном хозяйстве было занято 22,8 млн. специалистов с высшим и средним специальным образованием …

Сколько среди них было гениев? Сколько то было. Как они влияли на поведение социального слоя, насчитывающего миллионы людей? Никак.

ugoday ★★★★★
()
Ответ на: комментарий от watchcat382

Много вы видели подростков которые умеют и могут создавать атомные реакторы, космические ракеты, и много другой уникальной техники?

Много вы видели взрослых, которые на память могут назвать шестнадцать видов динозавров?

ugoday ★★★★★
()
Ответ на: комментарий от ugoday

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

alysnix ★★★
()
Ответ на: комментарий от monk

Если результат программы соответствует тому расчёту, который бухгалтер продемонстрировал на листочке или в Excel, то он обычно прав.

Вообще не факт. В бухгалтерии легко могут забыть учесть выслугу лет,или коэффициент какой-нибудь индивидуальный типа «надбавки за классность»,о которой отдел кадров знает,а бухам сообщить забыли. Любые так сказать «индивидуальные особенности» начисления. И чтобы убедить бухов пересчитать - придется знать как это должно считаться и какие законы ткнуть их носом. Сейчас вот возникает много вопросов у военных за участие в том что нельзя называть.

собеседник утверждал, что любой результат функции верен, если он правильного типа.

С точки зрения программы - да,верен. Потому что для нее результат функции это просто биты в регистрах. Если сочетание этих битов корректно приводится к указанному типу то оно верное. На всякий случай напомню что может и не приводиться - например всякие там NaN или взведенный бит знака там где число предполагается положительным. А вот что будет означать полученное число - это уже забота человека-программиста. Например в Аде он может задать допустимый диапазон -1..1 для синуса и по выходе из функции он будет проверен. Хотя конечно если вместо синуса там будет косинус то это не поможет. Это уже ошибка более высокого уровня,алгоритмическая,которую может выловить только ИИ,а хороший ИИ пока что далеко не бесплатный и из России труднодоступный.

watchcat382
()
Последнее исправление: watchcat382 (всего исправлений: 1)
Ответ на: комментарий от ugoday

Возьмём многомерную систему оценок [деньги, внешность, известность, статус]

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

И если в одной из граф ноль, то и искомый результат тоже ноль.

Абсолютно некорретное вычисление. Взять например внешность Стивена Хокинга,мягко говоря своеобразную. Но она ни разу не обнуляет его достижения.

watchcat382
()
Ответ на: комментарий от ugoday

Не думаю, что ПМВ можно было бы избежать.

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

watchcat382
()
Ограничение на отправку комментариев: