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)
Ответ на: комментарий от vM

1C развивается с 1991 года

А в 1991 году у 1С был свой язык? В начале 90х видел старинный 1С - оно было совсем не такое как мы привыкли видеть сейчас,глубоко я его не копал но языка там не наблюдал. Википедия утверждает что язык 1С появился в 1996 году. А Lua - в 93.

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

Таки что такое размерность «землекоп» и размерность «лопата»?

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

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

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

В Аде это не разные типы,а подтипы одного типа integer с разным диапазоном.

А в 1С это разные подтипы одного типа «Произвольный». Как и в лиспе, например.

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

Ну вот

Согласен,пример именно числодробильный.

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

watchcat382
()
Ответ на: комментарий от monk
  1. Наличие готовых бизнес-объектов позволяющих как из кубиков собирать конфигурации под конкретные бизнес-процессы (учета, аудит, производство).

аналога &НаСервере и &НаКлиенте

Из того что помню, подобное еще есть в:

  1. Event, onServer Event - UnrealEngine (C++)
  2. isServer, isDedicated, hasInterface - VBS | BISim (SQF)
Obezyan
()
Ответ на: комментарий от Obezyan
Event, onServer Event - UnrealEngine (C++)
isServer, isDedicated, hasInterface - VBS | BISim (SQF)

А как там будет такой модуль выглядеть?

&НаКлиенте
Процедура ПриНажатии() // привязана к кнопке интерфейса
  Сообщить("Время на сервере: " + ВремяНаСервере());
  Сообщить("Время на клиенте: " + ТекущаяДата());
КонецПроцедуры

&НаСервере
Процедура ВремяНаСервере()
  Сообщить("Выполняется на сервере");
  Возврат ТекущаяДата();
КонецПроцедуры

При выполнении на клиенте выведет три строки

Выполняется на сервере
Время на сервере: 09.12.2024 13:54
Время на клиенте: 09.12.2024 16:56
monk ★★★★★
()
Ответ на: комментарий от mister_VA

привязкой к российскому законодательству и русскому языку. И российскому бизнесу.

Мне приходилось видеть программу на PL/1 для ЕС 1046 (8мб ОЗУ,проц по числодробильной скорости примерно как 386DX40) которая считала зарплату для строительных организаций,всяких там СМУ и стройтрестов,на несколько тысяч,если не первых десятков тысяч, человек. Другая программа на той же машине - считала выработку и амортизацию всяких там бульдозеров и экскаваторов,про нее меньше знаю,в смысле что именно считала. Там и еще что-то из той же области считали,но что именно я не особо интересовался.

Это я всё к тому,что программа на обычном общеупотребительном языке как-то вполне подходила даже к таким масштабам российско-советского бизнеса. Было это на ВЦ Ленстройкомитета в Питере в начале 90х.

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

Наличие готовых бизнес-объектов

Вот это как раз где угодно. От SAP до Ledger. В языке 1С, конечно, есть удобные кирпичи типа плана счетов и регистра бухгалтерского учёта, но они есть и в других местах.

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

В 1С плохо не это, а то, что СУБД 1С неполноценна

Вы сейчас преимущество в недостаток записываете.

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

Кому нужно больше людей подключить к системе (производство, манагеров, операторов, кладовщиков и тд) выбирают серверные Postgresql/MSSQL.

Зато могу свидетельствовать, что не настроенная конкретно под нужды пользователя 1С тот ещё невнятный кошмар и костыльные методы работы оператора.

Это все равно что заявить:

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

Да, все так, как и с любой не настроенной сложной системой.

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

Простота и интеграция

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

ни в одном языке нет аналога Системы Компоновки Данных

Так ее нет потому что не написали на Lua или Питоне,а не потому что на этих языках ее написать невозможно. Также как НаСервере и НаКлиенте тоже ничто не мешало реализовать на общеупотребительном языке,а не изобретать свой.

Переводить на английский и обратно оборотно-сальдовые ведомости, статьи ДДС и прочие внеоборотные активы никому не улыбалось.

Опять же - совсем не сложно подправить исходники Lua или Питон чтобы они позволяли называть идентификаторы переменных на русском языке если это действительно так уж необходимо. В 90х всякого учетного софта попадалось на глаза немало,в том числе на довольно странных языках типа например Clipper,но там как-то русские называния переменных не использовались и писатели на это не жаловались.

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

У 1С сначала была идея, что бухгалтера сами будут писать себе алгоритмы проводок. В 1С 6 и 1С 7 была такая мегаштука, как типовые операции: https://samoychiteli.ru/document35658.html

И язык 1С в 7.7 считался эдаким аналогом Бейсика в MS Office.

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

Пользователи, однако, выбирают её.

Фирма 1C имеет богатые традиции выкручивания рук пользователям,так что не удивительно что они «выбирают».

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

Позволяет и Си: struct meters { double value; }.

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

не заставляет и Ада

Так у него там embedded программа,которая работает на одном и том же железе с одним и тем же датчиком. Датчик не начнет внезапно выдавать метры вместо футов или наоборот. А вот против перепутывания температуры с давлением меры частично приняты,как и против «мусорных» значений,выходящих за разумный диапазон. Хотя я бы предпочел объявлять полностью отдельный типы,а не subtype. Но тогда нужен вышеупомянутый мной пакет определений числовых функций если надо будет с этими типами вычисления производить. А так встроенные определения функций для float подойдут.

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

Наличие готовых бизнес-объектов

Их написали - вот они и есть. Если бы встроили Питон и написали бы на нем - они бы тоже были.

Из того что помню, подобное еще есть

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

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

Файловая DBF

Этот тихий ужас был актуален разве что в начале 90х,когда с альтернативами (под ДОС!) было очень не очень. Ну то есть они были,но денег стоили немалых. MDBS III и MDBS IV например. Даже не уверен что их можно было официально купить в Россию. Но сам я работал и с тем и с другим,пиратским конечно. Была еще dbVista,тоже несвободная,но в исходниках(!) Ну очень приятные базоданные. Они в отличие от DBF хранят не только сами данные но и связи между ними.

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

А как там будет такой модуль выглядеть?

Могу ошибиться немного в синтаксисе, давно не писал на них:

В UE объявление вот такое примерно

UFUNCTION(Server, unreliable, WithValidation)
FText GetServerTime_Interact();

UFUNCTION(Client, unreliable)
FText GetClientTime();

Реализация такая

FText ACharacter::GetServerTime_Implementation()
{
    FDateTime CurrentDateTime = FDateTime::Now();
    FText TimeStamp = FText::AsDateTime(CurrentDateTime, EDateTimeStyle::Short, EDateTimeStyle::Medium);

    return TimeStamp;
}

bool ACharacter::GetServerTime_Validate()
{
    return true;
}

FText ACharacter::GetClientTime()
{
    FDateTime CurrentDateTime = FDateTime::Now();
    FText TimeStamp = FText::AsDateTime(CurrentDateTime, EDateTimeStyle::Short, EDateTimeStyle::Medium);

    return TimeStamp;
}

Вызов уже банальный

void ACharacter::OnButtonPressed() {
    FText serverTime = GetServerTime();
    FText clientTime = GetClientTime();

    UE_LOG(LogTemp, Warning, TEXT("Время на сервере: %s"), *serverTime);
    UE_LOG(LogTemp, Warning, TEXT("Время на клиенте: %s"), *clientTime);
}

На SQF это это будет:

Get_Time = {
    if (isServer) {
        SERVERDATE = format ["%1 %2 %3", (date select 0), (date select 1), (date select 2)];
        publicVariableClient "SERVERDATE";
    };

    if (isClient && hasInterface) {
        _clientDate = format ["%1 %2 %3", (date select 0), (date select 1), (date select 2)];
        hint _clientDate;
        hint SERVERDATE;
    };
};

remoteExec ["Get_Time", 0];  // 0 - вызов и на сервере и на клиенте, 2 - вызов на сервере, 3,4,5 итд вызов на подключенных клиентах в том числе безголовых
Obezyan
()
Последнее исправление: Obezyan (всего исправлений: 2)
Ответ на: комментарий от watchcat382

Их написали - вот они и есть. Если бы встроили Питон и написали бы на нем - они бы тоже были.

Так с этим никто не спорит, это и есть преимущество 1С в данной сфере. Там это есть написанное уже. В Питоне не написано, потому он не имеет преимущества перед 1С в сфере комплексной автоматизации предприятий.

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

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

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

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

У 1С сначала была идея, что бухгалтера сами будут писать себе алгоритмы проводок

Идея о том что рядовые пользователи сами что-то себе будут писать - куда более старая чем 1С,и уже в начале 90х было понятно что не жизнеспособная. Странно что такая вся из себя продвинутая фирма 1С наступила на эти грабли.

Бейсика в MS Office.

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

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

наличие удобных кирпичиков.

Как это с изобретением собственного языка связано? Что, при использовании Lua или Питона невозможно удобные кирпичики сделать?

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

Как это с изобретением собственного языка связано?

Этот язык - язык настройки конфигурации (конфигурирования платформы), тот идеал к которому стремится NixOS :)

Сама платформа 1С написана на С++

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

GetServerTime()

Нет «Сообщить» с сервера на клиент. И какая-то магия из GetServerTime_Interact и GetServerTime_Implementation создаёт GetServerTime.

На SQF

А тут клиентом может браузер быть?

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

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

Эх, если бы… Тогда бы импортозамещение было на порядок проще. Но в OpenOffice макросы MS Office не переносятся, а написано их очень много.

А что немногое полезное и было - то писали его НЕ рядовые пользователи.

Также, как и в 1С.

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

в js, питонах, лиспах и проч. все переменные ваще указатели … эффективности полезных калькуляций на единицу времени

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

unsigned short int port;
port = "80";

потому что «80» на беззнаковое целое не похоже, а ошибку

unsigned short int port;
port = 0;

уже нет. Хотя то, что ноль — это число совсем не означает, что ноль — это допустимый номер порта. Всё что вы можете в данном случае, написать класс и прописать проверку на диапазон в его конструкторе. Это будет работать. Тут никакого подвоха, уж если вставить port >= 1, то оно проверит. Но кроме этой проверки вы ничего не сделаете. А хотелось бы большего, хотя бы композицию проверок, чтобы сократить писанину (и ошибки). А ещё, зная ограничения на допустимые данные мы можем делать разные интересные штуки.

Вот, например. Что мы можем сказать о сетевых портах? Они находятся в диапазоне от 1 до 65536:

(s/def ::net-port
  (s/and nat-int?
         #(and (>= % 1) (< % 65536))))

при этом можно разбить на три группы: системные, пользовательские и динамические:

(s/def ::system-port
  (s/and ::net-port
         #(< % 1024)))

(s/def ::user-port
  (s/and ::net-port
         #(and (>= % 1024) (< % 49151))))

(s/def ::dyn-port
  (s/and ::net-port
         #(>= % 49151)))

и любой допустимый порт относится к одному из этих вариантов:

(s/def ::valid-port
  (s/or :system ::system-port :user ::user-port :dynamic ::dyn-port))

Теперь, поскольку система знает нужные ограничения (к слову о пользе декларативного описания), она может самостоятельно нам подготовить корректные данные:

> (gen/sample (s/gen ::user-port))
(3445 1236 7962 14920 7376 1688 8056 1067 5436 21481)
> (gen/sample (s/gen ::valid-port))
(1 1 1 1629 59686 59878 1840 61131 248 2384)

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

Далее добавим ещё одно описание, раз уж мы знаем, что у нас есть три типа портов и более не предвидится:

(s/def ::kind #{:system :user :dynamic})

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

(defn new-port [kind]
  (case kind
    :system (rand-int 1024)
    :user (+ 1024 (rand-int 49151))
    :dynamic (+ 49141 (rand-int 65536))))

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

(s/fdef new-port
  :args (s/cat :kind ::kind)
  :ret ::valid-port)

т.е. принимаемые значения должны удовлетворять описанию ::kind, а возвращаемые — ::valid-port. Тут ещё можно задать известную информацию о связях между аргументами и возвращаемым значением. Здесь я не стал усложнять, а вот в обсуждаемой выше функции для синуса, тут можно было бы задать ограничения: sin α = -sin -α, sin 0 = 0, sin ½π = 1, sin α = sin (α ± 2kπ), sin²α + cos²α = 1 и что там ещё придёт в голову. И система бы сгенерировала бы нам кучу корректных углов (не факт, что 360°, может тут тоже есть ограничения) и проверила бы ответы на математическую правильность.

Если забыли, можно спросить документацию:

(clojure.repl/doc new-port)
-------------------------
adventofcode2024.specs/new-port
([kind])
Spec
  args: (cat :kind :adventofcode2024.specs/kind)
  ret: (or :system :adventofcode2024.specs/system-port :user :adventofcode2024.specs/user-port :dynamic :adventofcode2024.specs/dyn-port)

она напомнит какие ограничения мы тут придумали.

Что ж. Давайте, наконец, посмотрим как работает наша фукнция

> (new-port :systsem)
Execution error - invalid arguments to adventofcode2024.specs/new-port at (REPL:4511).
:systsem - failed: #{:system :dynamic :user} at: [:kind] spec: :adventofcode2024.specs/kind

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

И, к слову, я что-то сомневаюсь, а не накосячил ли я где ещё, раз я так много отвлекаюсь. Что там я говорил выше об автоматических проверках? Давайте заставим компьютер работать!

> (stest/check `new-port)
({:spec
  #object[clojure.spec.alpha$fspec_impl$reify__2518 0xbc954ae "clojure.spec.alpha$fspec_impl$reify__2518@bc954ae"],
  :clojure.spec.test.check/ret
…

Хрена се repl разнесло. Но корень-то проблемы нам показали

 :cause "Specification-based check failed"
 :data {:clojure.spec.alpha/problems ({:path [:ret :system], :pred (clojure.core/fn [%] (clojure.core/and (clojure.core/>= % 1) (clojure.core/< % 65536))), :val 94966, 

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

> (defn new-port [kind]
  (case kind
    :system (rand-int 1024)
    :user (+ 1024 (rand-int (- 49151 1024)))
    :dynamic (+ 49141 (rand-int (- 65536 49141)))))
> (stest/check `new-port)
({:spec
  #object[clojure.spec.alpha$fspec_impl$reify__2518 0xbc954ae "clojure.spec.alpha$fspec_impl$reify__2518@bc954ae"],
  :clojure.spec.test.check/ret
  {:result true,
   :pass? true,
   :num-tests 1000,
   :time-elapsed-ms 17,
   :seed 1733750179704},
  :sym adventofcode2024.specs/new-port})

Вот, другое дело. Хотя знаете что? Рандом штука очень рандомная, давайте увеличим количество проверяемых значений:

> (stest/check `new-port #:clojure.spec.test.check{:opts {:num-tests 10000}})
({:spec
  #object[clojure.spec.alpha$fspec_impl$reify__2518 0xbc954ae "clojure.spec.alpha$fspec_impl$reify__2518@bc954ae"],
  :clojure.spec.test.check/ret
  {:shrunk
   {:total-nodes-visited 0, :depth 0, :pass? false, :result #error {
 :cause "Specification-based check failed"
 :data {:clojure.spec.alpha/problems ({:path [:ret :system], :pred (clojure.core/fn [%] (clojure.core/and (clojure.core/>= % 1) (clojure.core/< % 65536))), :val 0, …

Интуиция меня не подвела. Мы вернулись к началу. Коварный :val 0 коварно пробрался в номера портов. Внести финальное исправление я предоставляю вам в качестве домашнего упражнения.

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

Нет «Сообщить» с сервера на клиент. И какая-то магия из GetServerTime_Interact и GetServerTime_Implementation создаёт GetServerTime.

Да, эта магия назыается соглашения о именовании. Если не указать _Implementation то чуда не произойдет. Если в GetServerTime_Validate() не вернуть true то чуда тоже не произойдет тк мы явно указали WithValidation в UFUNCTION.

А тут клиентом может браузер быть?

Нет, это игровой движок от BIS на котором сделана VBS и Arma 3. Там клиенты это игроки и безголовые (headless) клиенты без интерфейса которые берут на себя часть расчетов. Этому движку лет двадцать и в нем до сих пор самая гибкая сетевая подсистема которую я встречал. Можно передавать переменные и вызывать функции, не просто между client/server/headless но и одному конкретному клиенту/там и самая дичь - можно менять владельца объекта (owner) на лету между всеми. Владелец отвечает за все что происходит с этим объектом те фактически становится сервером для этого объекта.

Те например, в игре стоит пустая машина. Ее владелец - сервер. Игрок подбегает садиться в машину, владельцем становится игрок, дальше он рулит тормозит и тд и отправляет эти данные на сервер тк для этой машины сервером является клиент (комп игрока). Когда он выходит из машины - пустая машина передается обратно на сервер и обсчитывается там, а в случае если игроков в машине несколько - то перейдет к тому кто сядет за руль. И все это с синхронизацией на сотню игроков. Там сетевое взаимодействие такое что все наши сетевые rest-api, gRPC и тд это детский сад потому что на все про все у вас 16мс.

Там много интересного, та же концепция scheduled/unscheduled code execution о которой вообще мало кто слышал.

Чет меня понесло, вы нащупали у Обезъяна кнопку и активировали воспоминания о молодости.

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

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

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

В GTA V так машины тоже сделаны, из за задержки между игроками, столкновения обрабатываются просто отвратительно.

Где хорошо сделано? В классических играх, особенно киберспортивных таких как CS2, вот где нужно учиться. Как обработать сотни игроков вопрос отдельный, но подход с сервером на клиенте не работает точно.

MOPKOBKA ★★★★★
()
Последнее исправление: MOPKOBKA (всего исправлений: 2)

Раньше в институтах начинали учить на Pascal, сейчас учат на Python.

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

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

Этот язык создавался для симулятора общевойскового боя и тренировки combined arms operation для US Army. Arma 3 это обрезок который стали продавать в виде игры чтобы заработать тк подряды от армии стали усыхать.

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

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

можно менять владельца объекта (owner) на лету между всеми

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

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

До 2003 года. Нынче там везде нормальный MS SQL (на оффтопике) или PostgreSQL (на линуксе). И полнотекстовый поиск.

Исчто раз: можно не значит, что все покупают MS SQL, лично я пару лет назад несколько лет работал на 1С без всяких sql-серверов и нет, никакого поиска по регулярным выражением не было.

в виде базовой 1С

А потом покупатель заказывает услуги интегратора или это сами интеграторы закупают «голую» и допиливают. Возможно, у покупателей есть свои 1с-конфигураторы на балансе. Некой «базовой» 1с пользоваться невозможно, это пустой движок. Есть базовые «Склад», «Магазин», «Бухгалтерия», «Персонал», «Торговля», пр.

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

Никакого поиска по регулярным выражением не было.

Эм, я делал полнотекстовый поиск с регулярками еще на 1С v7.7 c DBF базой. Для таких вещей в 1С есть механизм использования внешних компонент, такой же как в… VBS (SQF) о котором я писал выше.

Пишется dll-ka на С++ которая реализует интерфейс требуемый платформой и там уже делается то чего не хватает в стандартных средствах. Вот для 1Cv8, лежит там 8 лет.

Таким же образом делал дрова под сканеры штрихкодов товаров и RFID чипов браслетов (аквапарки и прочие места с СКД) и подключал к 1С.

А потом покупатель заказывает услуги интегратора или это сами интеграторы закупают «голую» и допиливают. Возможно, у покупателей есть свои 1с-конфигураторы на балансе. Некой «базовой» 1с пользоваться невозможно, это пустой движок. Есть базовые «Склад», «Магазин», «Бухгалтерия», «Персонал», «Торговля», пр.

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

В этом мощь 1С, она позволяет и то и другое быстрее чем на любом другом языке и платформе. Можно ли воссоздать это на другом языке? Кончено можно, но чет пока никому не надо, слишком большие затраты сил, времени и денег чтобы приблизиться к уровню 1С.

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

В простейшем случае размерность у обоих одинаковая - штуки.

Нет, штуки – это размерность величины «количество», а чтобы нельзя было сложить, размерность должна быть «штук землекопов» и «штук лопат».

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

Это уже надо в БД или тип «запись», для которой в Паскале, например, никакие арифметические операции невозможны в принципе.

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

Не так и бессмысленно, вообще-то. Но крайне редко когда надо. Например, для маляров и рукоятки валика для сравнения с высотой стен.

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

Эм, я делал полнотекстовый поиск с регулярками еще на 1С v7.7 c DBF базой. Для таких вещей в 1С есть механизм использования внешних компонент,

Вот кто позволит какому-то левому человеку, пусть и сотруднику, лезть в потроха СУБД фирмы?!!

Вы не правы, базовая полностью подходит под малый бизнес

В малом я и работал и ни одна 1С (подаренная, унаследованная и спираченная) не подходила. Для того, чтобы подходила, её необходимо настроить под хотелки пользователя/оператора. Даже «1С Торговля» не подходит для магазина, тем паче «Склад», хотя в «Складе» есть интеграция с ккм и возможность торговать в розницу.

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

Это вы оп «1С Бухгалтерия», у 1С очень большая линейка ГОТОВЫХ базовых конфигураций, в том числе и под «наши» нужды, но стоило 1 рабочее место тогда ровно в стоимость нового компа, помощнее офисной печатной машинки. Плюс услуги по переносу БД. Генеральная побегала годик с этой идеей, но так всё и заглохло до закрытия фирмы.

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

Что, при использовании Lua или Питона невозможно удобные кирпичики сделать?

(а) Возможно, что и нет и удобнее создать свой встроенный язык, нежели встраивать поддержку другого, на котором надо создать удобные «кирпичики». (б) возможно в те далёкие годы погромисты 1С не знали ни Луа, ни вообще про существование Луа или Питона. или знали о них… нехорошее.

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

Да, все так, как и с любой не настроенной сложной системой.

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

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

Вот кто позволит какому-то левому человеку, пусть и сотруднику, лезть в потроха СУБД фирмы?!!

Причем тут потроха? Это официальный способ расширения функционала 1С. и лезут не в потроха БД, а используют Native API на более низком уровне, те с бд по-прежнему взаимодействуют через клиента подключения к бд, а не что-то там поторошат внутри.

Это вы оп «1С Бухгалтерия», у 1С очень большая линейка ГОТОВЫХ базовых конфигураций

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

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

В малом я и работал и ни одна 1С (подаренная, унаследованная и спираченная) не подходила. Для того, чтобы подходила, её необходимо настроить под хотелки пользователя/оператора. Даже «1С Торговля» не подходит для магазина, тем паче «Склад», хотя в «Складе» есть интеграция с ккм и возможность торговать в розницу.

Проделаем опыт, пишите чего не хватало с учетом требованием законодательства РФ и того что было описано в справочнике по настройке и использованию 1С для ПОЛЬЗОВАТЕЛЯ. Поехали :)

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

нет, никакого поиска по регулярным выражением не было

Его там и при наличии SQl сервера нет. Если не считать конструкцию ПОДОБНО.

Некой «базовой» 1с пользоваться невозможно, это пустой движок.

Есть 1С: Бухгалтерия Предприятия 8 базовая, 1С: Управление Торговлей 8 базовая, 1С: Зарплата и Управление Персоналом 8 базовая. Базовая = пользователь конфигурацию может только смотреть, но не редактировать.

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

ни вообще про существование Луа или Питона. или знали о них… нехорошее.

Самый старый дистрибутив для Windows на python.org от 2001 года. А нынешний питон даже на Windows 7 уже не работает (1С даже на WinXP работает).

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

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

Я понимаю вашу боль, у меня память о ней еще свежа, хоть и 10 лет прошло. Про ошибку экономии на 1С даже и спорить нечего, все так.

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

Профпригодный программист долже знать например о существовании мэйкфайлов

С чего бы это? Makefile’ы — это инструмент. Кому нужно, тем нужно. Остальным нет. Ауф.

Изучавший Питон знать о них не будет.

У питона тоже есть флаги. Сюрприз.

➜  ~ python3 -h| wc -l
99

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

В реальной жизни рано или поздно придётся. Но тут не то что с языка на язык, с проекта на проект знания плохо переносятся. Ваши навыки с Makefile’ами будут абсолютно бесполезны при работе с Github Actions. Хотя по сути — одно и то же.

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

Нет,не по прихоти короля,а по наличию среди населения значительного числа желающих идти воевать

Ну, раз люди вот так устроены, то чем вы недовольны. Господу Богу свои претензии выставлять глупо. Безличным силам природы, которые через эволюцию сотворили вот такое — тоже.

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

Вы употребляете какое-то свое значение слова «криминал».

Люди, чьи моральные принципы противоречат общечеловеческой морали,

Определять неизвестное через неизвестное — так себе идея.

да хотябы той что в Библии изложена (не убий,не укради).

Горбачёв никого не убивал и ничего не крал (пока не указано обратное).

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

Вы блатных романов начитались что ли?

Они хотели построить общество,где человек человку друг,товарищ и брат.

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

В моем представлении о нормальном обществе ни горшечник ни математик не должны быть рабами.

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

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

или пять землекопов равны пяти лопатам, это было бы очень плохо.

Бывает и не плохо. Иногда «два солдата из стройбата заменяют экскаватор».

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

Лично я считаю что Джава - всё таки лучший вариант для новичков.

Вы работаете кадровиком на заводе и пытаетесь отвратить людей от IT?

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

Переносит отсев на первый курс. Чтобы сбегали не тогда, когда после HelloWorld’а дадут задание написать фабрику фабрик сервисов, а сразу. После Джавы все остальные языки будут восприниматься как более удобные. И это не Си++, где у неофита возникает ощущение, что надо заучить правильные заклинания и ни на шаг от них не отходить, иначе дописывание cout << a[0] в конец программы может привести к тому, что она начнёт падать где-то в середине.

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

Написали язык под себя, что-бы удобнее было работать. Плюсы 1с перед тем же java, python мне довольно очевидны.

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

Это официальный способ расширения функционала 1С

И шо?

ну если фирма закрылась через год

17 лет.

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