Pull to refresh

Comments 487

Честно говоря, зря вы объединили С и С++ в одном разделе. Сейчас это две совершенно разные парадигмы программирования, и разница между ними пожалуй как между Java и JavaScript — похожие названия и в синтаксисе встречаются схожие конструкции. И на этом всё.
И если С не самый удачный выбор для лёгкого старта в программировании, но по крайней мере, вполне пригоден, то современный С++ можно рекомендовать для старта разве что тем, кто гик до мозга костей, и способен разобраться с кодом вообще на любом языке, хоть брейнфаке.
О, как быстро начались ценные дополнения, на которые я надеялся :) Спасибо за комментарий!
Elixir в некоторых обзорах тоже советуют учить.

Эликсир — это набор макросов для эрланга. Продвинутых, умных, с очень тонко продуманным обращением с AST, но в эликсир люди ходят за виртуальной машиной эрланга и OTP (сиречь, за бесплатными concrurrency и fault-tolerance). В каком-то смысле он как котлин — язык для тех, кто не осилил скалу. С точки зрения рантайма никаких плюсов по сравнению с эрлангом он не дает.


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


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

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

В каком-то смысле он как котлин — язык для тех, кто не осилил скалу.

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

В качестве первого языка… На своём опыте могу сказать, что схема в целом рабочая, но времени займёт много. Ознакомиться как минимум стоит, хотя бы на уровне работы Джо erlang.org/download/armstrong_thesis_2003.pdf
Не совсем понятно в каком

Ну, целевая платформа — одна и та же виртуальная машина. Поэтому все, что может один, может и другой.


в эрланге же нет ничего такого, чего не было бы в элике

А в джаве (или скале) прям до хрена такого, что котлином не выразить? Я немного запутался в ваших отрицаниях отрицаний, так что если имелось в виду что-то другое — поправьте :)


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

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

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

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

В целом солидарен, да.
Ну, целевая платформа — одна и та же виртуальная машина. Поэтому все, что может один, может и другой.

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

В Erlang очень все печально с метапрограммированием. И метапрограммирование на основе макросов позволило реализовать нормальный ORM (ecto) в Elixir. И при этом в Erlang до сих пор нету нормальной реализации ORM.

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

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

Это не совсем так, точнее — совсем не так.


нормальный ORM (ecto)

Ормы должны умереть, а ecto — просто pet-project Жозе, который  уже начинает мешать нормальному развитию собственно языка. У меня тоже, кстати, есть такой смешной проект https://github.com/am-kantox/lazy_for/blob/master/lib/lazy_for.ex — но в продакшн я его не тащу.


По Вашей логике [...]

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

Советовать в качестве ознакомления с ЯП для новичков докторскую на 300 страниц — это сильно

А какая собственно разница, что это именно докторская? По содержанию она мало чем отличается от любой книги по программированию, более того — там довольно много посвящено историческому контексту появления нужды в таком инструменте. 300 страниц — это не особо-то и много для книги, LYSEFGG вон 600.

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

С точки зрения рантайма никаких плюсов по сравнению с эрлангом он не дает.

да что тут сравнивать то?
В Эрланг встроены акторы в парадигму, в скалле и други языках они просто эмулируются. Если сравнить акторы эрланга и библиотеку Akka, то эрланг будет выигрывать по скорости и стабилности.
Скала сделала упор на асинхронность и бекэнд, а котлин на современные треования по кложурам, потокам и Rx/функциональному программированию.
котлин — язык для тех, кто не осилил скалу

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

ps: В gradle именно он используется.
Нет, груви не такой же котлин:) это какой-то язык для мутантов-надмозгов-из-параллельной-вселенной, имхо, я вообще не понимаю, как в здравом уме можно
добровольно его выбрать, чтобы писать что-то. Но приходится использовать для конфигов, потому что переводить с груви, на котором все конфиги в интернете на котлин-скрипт это то ещё развлечение.
Не понимаю я таких эстетов. tcl, perl, lisp вполне себе языки или тоже для мутантов? Или вы только статически типизированные языки используете из религиозных соображений. Я специально узучал этот groovy что бы разобраться с вездесущем gradle и язык показался очень удобным и продуманным если не считать то что это такая же надстройка как и kotlin которая паразитирует на java, как и swift на objective-c. Но тот же swift уже оброс инопланетянскими косьтылями в синтаксисе, а kotlin еще не успел.
Все же правильнее говорить над jvm, а не java. Впрочем у котлина еще есть вариант транспилировать его в js, а так же сырой kotlin native (на котром тоже проекты пишут в проде, ну точнее kotlin multiplatform).

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

Серьезно? Называете такими-же язык с очень слабой и динамической типизацией и с довольно строгой статической?
Хотя конечно для гредла конфиги на груви удобно писать (пока не понадобиться разобраться в деталях, там начинается чертова магия груви).
Пробовал конфиг на котлине писать — язык со строгой статической типизацией все таки в гредл файлах не очень удобен.
UFO just landed and posted this here

Тогда уж для этих целей лучше изучить машинные инструкции и архитектуру, а не только си. Парадигма си не менялась со времён PDP (который был по сути портативным ассемблером, и который хорошо адаптирован к архитектуре PDP), поэтому си такой же абстрактный язык, как и остальные. Единственный плюс — нет рантайма, и при вышеперечисленных знаниях архитектуры, компилятора, инструкций можно заранее знать, в какие машинные инструкции будет скомпилирован код (если без оптимизаций конечно). Что в общем и используют low-level разработчики и разработчики ядер.

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

Давно разошлись по идеологии и путям развития.
Так верно говорить для C и Objective-C, но С++ уже давно не в ту степь смотрит.
Куда он смотрит в данном случае не важно. Там появились новые отличия, которые влияют на совместимость? Кажется, в двадцатом что-то собирались делать, но точно не помню.
Там появились новые отличия, которые влияют на совместимость?
Да, уже лет 20 назад.
Однако, если Википедия от нас ничего не скрывает, они не настолько велики, чтобы не объединять эти языки в одну группу.

Они достаточно большие. Там, даже, сравнение указателей по разному работает. Разные объектные модели. Про type punning через union, vla, compound literals и прочие фишки C я даже говорить не буду.

C можно считать подмножеством даже для современного C++

Ну, это не совсем верно. Правила С++ более строгие, и примеров кода, который компилируется в С, но не компилируется в С++, вы найдёте немало. Да банально порядок объявления функций. В С++ функцию надо объявить перед использованием, а в С не надо.
Ну да, C — язык более анархичный. И это ещё один повод его не использовать. Я считаю, что первый язык должен быть достаточно строгим — меньше будет плохого кода.

В смысле, в C не надо?! В C тоже надо. Да, там была фича, что если функция не объявлена, то считается, что она такая int foo(...). Для printf такое подойдёт, а вот malloc уже так работать не будет.

Вы ещё предложите BASIC с FORTRAN'ом не разделять по той же причине :)
Про них я ничего сказать не могу, ибо не знаю. Я их лет тридцать назад учил, но никогда не использовал.
Это был контраргумент к рассмотрению C/C++ «в одном пакете»: BASIC был создан как «детский» вариант «взрослого» FORTRAN
Однако, он уже давно перерос «папашу» и от начального варианта с номерами строк ушёл очень далеко. С C этого не произошло.
Почему-то школота не может понять что хотя бы один язык должен оставаться неизменным.
Я бы сказал что это как с латынью: неизменными остаются только мёртвые языки :)
Чего не произошло с C?
Что в BASIC поменялось кроме исчезновения номеров строк?
C не изменился настолько сильно, как Basic. Версии, которыми сейчас активно пользуются, а не классика, конечно.
Вы Visual Basic видели? Для многих сейчас это и есть Basic. ЕМНИП сто лет назад в Turbo Basic уже было что-то подобное объектам.
Бэйсик уже минимум лет 20 ничем не уступает всяким Delphy. До сих пор бы на нем писал, если бы не линукс.
А как называется комитет по стандартизации?
Какая последняя версия стандарта?
Какие вообще есть стандарты?
Насколько я знаю, есть стандарт де-факто — вижуал бейсик. Остальные всем пофиг.
Всё так. Единственное, что VB уже закрыт.
Да Вы что! На чём же они теперь макросы для Ёкселя писать предлагают?
Всё таки есть большая разница между макросами и старой позицией, до закрытия проектов Майкрософтом, как универсального языка.
А где можно узнать про закрытие? Вроде, так и выпускается вместе со студией.
Вот тут пост был. Groramar несколько поторопился его хоронить — пока это только остановка дальнейшего развития. Какой там срок поддержки у .NET 5?
Да даже если и прекратят разработку фич, это мало что значит. Даже поддержка VB6 до сих пор сохранилась в винде, и люди продолжают писать.

Вообще считаю VB6 идеальным для новичков, которые не знают, чего хотят. Легкий и лаконичный синтаксис, трудно выстрелить в ногу, есть простая событийная модель. Потом дообучившись работать с памятью и указателями можно мигрировать на любой императивный язык.
В современных реалиях, когда «Нужно бежать со всех ног, чтобы только оставаться на месте, а чтобы куда-то попасть, надо бежать как минимум вдвое быстрее!» можно считать что это смерть языка.
Они сильно разъехались за последние 20 лет. Современный С++ — это не то, что пишут в рафинированных книжках, там все по другому.
Plain C примерно так и остался, по-ближе к железу и побольше предсказуемости и машинный код приходится отсматривать, для отлова узких мест.
То есть, сейчас текст на C++, использующий только то, что есть в Plain C (плюс аналоги complex, VAL и т.п.), выдаст машинный код, сильно отличающийся от написанного на Plain C?

Аналогов Vla на C++ нет. Даже vla расширение g++ работает абсолютно по-другому, в отличии от C. Если вы соберёте C код C++ компилятором, то, вероятнее всего, там будет неопределённое поведение, но ещё более вероятно, что он не соберётся.

Насчёт VLA согласен. Не то, чтобы мне нравилась идея размещать в стеке массивы неопределённой во время компиляции длины, но это может быть эффективно.
Понятно, что не соберётся — это всё же разные языки. Но очень близкие, по крайней мере сравнение Java/JavaScript совсем не к месту.
Vla — это тип, а не синтактический сахар вызова alloca. Vla — не обязательно размещается на стэке. Например, вот.
float (*tmp)[size] = malloc(sizeof(*tmp));
Это понятно. Но такая конструкция уже мало отличается от обычного new.
Судя по реакции, здесь много разработчиков, которые активно используют Plain C и со мной не согласны. Не могли бы вы привести пример не слишком экзотического кода на нём, который сильно выигрывает у аналога на C++ по эффективности или простоте.
Не холивара ради, а мне интересно, где я мог бы заметно выгадать от такой замены — для практического использования.
UFO just landed and posted this here
это уже тема для статьи

"Да вы, молодой человек, уже на статью наговорили. И даже не одну" :)

UFO just landed and posted this here

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

И если С не самый удачный выбор для лёгкого старта в программировании

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

C и C++ конечно зря объединили, но вот про современный C++ вы тоже зря. В качестве первого языка C++ подойдёт куда лучше Си (если правильно учить) — можно писать без возни с выделением памяти, без указателей, без ручного освобождения ресурсов, и всё будет прекрасно работать. Есть прекрасный доклад на тему обучения C++ без этого: Stop Teaching C.

Даже для написания std::cout << "Hello\n" не требуется ни детального понимания правил поиска имён, ни ADL, ни перегрузки операторов — хватит интуитивного «синтаксис почему-то такой».

Хотя мне кажется, что Python или PascalABC.NET (не классический!) подойдут для обучения ещё больше, там меньше абстракций течёт, чем в C или C++.
UFO just landed and posted this here
UFO just landed and posted this here

Так и не надо открывать учебники десятилетней давности. Некоторые вон вообще на Turbo C с <iostream.h> и запретом std::string как глючного и тормозного до сих пор учат — так, конечно, не надо.


И как отличить подобную дичь от условно "современного C++" без исходных ссылок на хорошие материалы новичку — непонятно.

и запретом std::string как глючного и тормозного до сих пор учат — так, конечно, не надо.

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

Во-первых, откуда 4 килобайта, во-вторых, у вас что, компилятор в LTO не умеет?

умеет. И версия релизная. Если убрать string и все строки заменить массивами символов, то "магическим" образом -4к

UFO just landed and posted this here
А можете пояснить, как связано занимаемый скомпилированной программой объём, и эти все constexpr? Казалось бы, класс string-то всё равно нужно включать.
UFO just landed and posted this here

С++? Для обучения? Да вы, батенька, шутник… Вот пара относительно свежих WTF:



По моим скромным наблюдениям, граблей набралось уж очень много. И скорость набора только растёт.

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


Для первого языка для изучения алгоритмизации, имхо, больше подойдёт Python, в нём и UB не так часто стреляет. Но можно и на C++, если захочется, просто надо больше аккуратности от преподавателя, чтобы предусмотреть грабли в заданиях.

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

Это гораздо сложнее.


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

Вот вы например в курсе, что by-value copy constructor запрещён? Я до недавнего времени например не знал. И таких "подковырок" слишком много. А ещё не забудьте зоопарк систем сборки и пакетных менеджеров, если они вообще применяются.

Конечно в курсе. А ему этот by-value параметр конструировать? Только этим же конструктором.


В безопасном подмножестве C++ есть ровно один способ написать copy constructor и ровно один вид move constructor, каждого ровно один вид. Есть правило пяти, которым это прекрасно запоминается.


Для обучения можно ограничиться CMake (да хоть тем, что CLion генерирует) и встроенным в систему пакетным менеджером (apt, homebrew, msys2/vcpkg). Разумеется, в реальности там зоопарк, но незачем про это сразу рассказывать.


И, да, Python и в этих местах сильно удобнее и с батарейками.

Есть правило пяти, которым это прекрасно запоминается.

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

UFO just landed and posted this here
от задач зависит. Та же книга Страуструпа хорошо описывает язык для обучения, но в основном в интернете уроки по Шилду, который приравнивает C к C++.
Ну, а если брать современные задачи, например парсинг json, http запросы, асинхронность, то есть некоторые сложности в погружении.
И если С не самый удачный выбор для лёгкого старта в программировании, но по крайней мере, вполне пригоден, то современный С++ можно рекомендовать для старта разве что тем, кто гик до мозга костей, и способен разобраться с кодом вообще на любом языке, хоть брейнфаке.

Не могу согласиться с утверждением насчёт C++. Подмножества языка, которое можно назвать "современный C++" довольно-таки просто в освоении и использовании. Как вам, например, программирование на C++ без new и простых указателей.


Проблема тут в том, что есть довольно много курсов (учебных материалом) по C++, которые совершенно неправильно подходят к процессу обучения. Я не буду вдаваться в подробности, а лучше приведу пример хороших курсов. Это курсы по C++ от Яндекса, там по-моему человек узнаёт что в языке есть указатели и new где-то к третьему курсу :) Я разумеется могу ошибаться, но как факт, людей не заваливают избыточной сложностью с самого начала.


Ну и касательно относительно пригодности C для "относительно лёгкого старта". Я бы сказал, что на C++ это будет даже легче за счёт абстракций более высокого уровня. Да хотя бы std::vector, std::string, std::*_ptr, ссылки и т.п… Это всё прячет кучу ненужной вначале сложности.


PS
Я склонен рассматривать стандартную библиотеку C++ как в некотором роде часть языка, так как она даже в стандарт входит.

Стандартная библиотека и есть часть языка, это как «core» в каких нибудь других языках. За основу надо брать Страуструпа, там хорошо всё описано.

Тут иногда находится о чём поспорить, поэтому я пояснил свою точку зрения, на всякий случай :)

Ну это как Java рассматривать отдельно от ее Collections и других «встроенных» штук.
и простых указателей

Не могли бы вы пояснить этот момент? ЕМНИП наличие поля-ссылки превращает объект в non-copyable, non-movable. Положить ссылку в optional нельзя из-за приколов стандарта. Без указателя дальше либо std::reference_wrapper, либо std::weak_ptr. Первый чертовски многословен, второй добавляет reference counting overhead.

Ссылки использовать в качестве полей объекта не призываю, равно как и optional. У этих вещей другое назначение.


Использование shared/weak указателей может добавить дополнительные расходы на подсчёт ссылок. Вопрос только в балансе между безопасностью, читабельностью и простотой сопровождения кода и попытками избежать "reference counting overhead". Если вы действительно проанализировали вашу программу и окружение различными инструментами, и пришли к выводу что вот именно использование интеллектуальных указателей приводит к критическим расходам памяти и/или критическому снижению производительности, то наверно вы можете пожертвовать безопасностью, читабельностью и простотой сопровождения. Вероятно так же, что это 0.001% всех случаев, ну или около того.

Ссылки использовать в качестве полей объекта не призываю, равно как и optional. У этих вещей другое назначение.

А это почему?

Потому что использование ссылки в качестве поля объекта — даже хуже чем использование сырого указателя. Это и на сам объект налагает ограничения и понимать жива ли ссылка довольно сложно. C++ — это не Rust, и получить тут подвисшую ссылку проще простого, отлаживать бывает неприятно.
Но опять же надо понимать, что универсальных правил нет. Если у вас какой-то короткоживущий объект, который ссылку вот прям точно не переживёт или вы можете как-то иначе гарантировать это, то наверно ссылку можно использовать. По-моему опыту опять же, это только усложняет код и архитектуру. Решать разработчику разумеется, но я бы не рекомендовал использовать.


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


PS
И да, я прекрасно понимаю, что мы живём не в идеальном мире, и что вокруг куча легаси, и разработчиков, которые не хотят учиться, и тех кто делает всё "тяп-ляп". Так что, дам идеальный и бесполезный совет: смотрите по ситуации.

Хотел было возразить, что нет, C++ нормальный первый язык. Я с него начал и продолжаю работать на нём. Но потом понял, что на брейнфаке я тоже писал немало и даже никнейм на хабре к нему отсылает. А я считал себя нормальным человеком :(((

А что не так было с выбором? Поделитесь опытом?

Много мыкался от одного языка до другого, делал критичные заявления типа java панацея, python медленный и т.п. (Сейчас в основном использую python). Статья помогает здраво взглянуть на выбор первого языка для обучения
Практически моя история, в 2015 году начинал изучать Java, потом бросал потом снова начинал, в 2017 году начал изучать C# изучив основы понимал как мало я знаю для трудоустройства, в 2018 году изучал JS (AngularJS и NodeJS) но в моем городе было две вакансии для middle+ разработчиков, в итоге в 2019 году я попробовал Python и понеслось… уже почти год работаю Python backend разработчиком, жалею что раньше не серьезно к нему относится, писал пару утилиток будучи системным администратором, но всерьез не воспринимал, а зря.
Почему-то ожидал увидеть историю про выбор слишком специфичного/узконаправленного/экзотического/нишевого языка и уход с него.

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

Что Бифф сделал с альманахом, только в меньшем масштабе)
Там был бы список наиболее популярных и наиболее перспективных.
Знал бы я про Python и Java 22 года назад… :) Тогда у меня был 486SX с DOS, без интернета, у меня из литературы — только ZX-Ревью и учебники по фортрану, паскалю и бейсику из местной библиотеки. Несколько последних лет глотаю не пережевывая новые и «новые» тренды в программировании и до сих пор не определился, в какую сторону двигаться. Java — чисто, аккуратно… Но основной спрос, как я понял, почему-то на javascript и фреймворки на нём. Python понравился лаконичностью. C++, как мне показалось, востребован в значительно меньшей степени. 10 лет назад писал простые скрипты на erlang для jabber организации, где работал. Сейчас erlang ещё актуален? В какую сторону двигаться?

Двигаться туда куда интересно, где есть мотивация изусать и разбираться

Познали бы боль миграции с Python2 на Python3 (которая у некоторых до сих пор)

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


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


Ну и ещё: после двух амбициозных big data science стартапов ушел в обычную понятную контору с php/mysql и понял, что лучше "немодная" технология в хорошей компании, чем наимоднейшая в плохой.

На вопрос с картинки Google должен был, ващето, в первых строках давать «английский» и «китайский».
В С String* arg и String *arg одно и то же?
UFO just landed and posted this here
Вот меня это всегда бесило. Кому, какого лешего пришло в голову, что надо так сделать?.. Ну это же дичь((
Именно поэтому объявлять несколько переменных в одной строке на плюсах это плохая практика.
Как написано в заключении, «Я даже намеренно упустил один популярный язык, про который недостаточно знаю, чтобы хорошо его описать — думаю, его сторонники сами придут в комментарии и восполнят пробел». И правда, уже пятым комментом!

Честно признаюсь: хотя ещё в школе баловался с PHP, довольно смутно представляю, что происходит с PHP-разработкой сейчас. Если вы знаете лучше, можете немного рассказать?
UFO just landed and posted this here
Спасибо. А вот в контексте «первого языка» — у PHP раньше была репутация языка с низким порогом входа (что для новичков может быть плюсом), это по-прежнему так, или с новыми фреймворками и версиями самого языка всё усложнилось?
И да, и нет. Язык по-прежнему прост в изучении. Можно быстро начать писать работающий код, веб-сервер встроен прямо в язык, бери и запускай. С другой стороны, научиться писать работающий код и писать код профессионально — совсем разные вещи. И вот тут уже нужны фреймворки, стандарты PSR, паттерны и хорошее понимание ООП.
На рынке множество вакансий совсем разного уровня — соответственно, можно легко найти работу в веб-студии условно «за еду» и поднабраться опыта. Однако многие почему-то так и остаются на уровне копирования кода со SO десятилетней давности и безо всякого интереса, что было добавлено в язык за последние ~10 лет.
Можно сказать, чтобы стать хорошим разработчиком, знающим PHP, придется много вкладываться в самообразование или попытаться как можно скорее попасть туда, где на нем пишут профессионально.

Ну про самообразование, это везде так.

Сейчас это место занял js и питон
Ну, очень хочет занять, но ещё никак не занял. Просто даже инфраструктурно, хостинга без РНР не найти, а с пайтоном — не так радужно.
Ну JS вообще не требует хостинга, а питон обычно разворачивают на локалке и сразу в бой, особенно для ботов и всего такого. В последнее время все чаще замечаю что новички начинают либо с фронта в виде JS, либо питона
PHP очень сильно в новых редакциях ушел в сторону Java. Один класс-один файл и т.д. (PSR), так что он стал настолько далек от phyton как java от python. А одностраничные поделки на PHP в отрасли никому не нужны уже.
Поэтому одностраничные поделки делают на всяких реактах, либо делают простенькие программы на питоне. Если не ошибаюсь, все последние курсы для новичков также в основном на питоне
UFO just landed and posted this here
Не к холивару. Давно заметил разделение рынка на 2 лагеря.
Те, кто начал с python/js уходят в js/python/ruby
Те кто начал с java/php уходят в php/java/kotlin/scala
UFO just landed and posted this here
Вот, и правильно: работать надо с тем, с чем комфортно.
UFO just landed and posted this here
А зачем его оттуда убирать? Писать на современном PHP можно как с типами (в полях классов, аргументах функций), так и без, причем без типов — не рекомендуется, в Scala есть тип Any, в Java дженерики и автоматическая конвертация типов int в long. Вот Котлин — тот да, отличается самой строгой типизацией из перечисленных.
UFO just landed and posted this here
потом чутка php (книжку в буквальном смысле на помойке нашёл)
Очень символично))

сейчас постепенно ухожу в ещё большую наркоманию
Поделитесь
UFO just landed and posted this here
Если брать современные требования к PHP разработчику, то Java(7) в освоении будет проще. Java заставляет сразу всё делать правильно, прописывать каждую строку, каждый символ, каждый неймспейс, каждую скобочку, область видимости для каждой переменной, ну и т.д. Один файл — один класс, другое запрещено законом.
в PHP же можно накидать инструкций в файл и нажать F5, но рост будет так себе как профессионала, Java в этом плане заставляет соответствовать. Похожие стандарты в PHP прикатились с PSRами (или как они там называются).
Один файл — один класс, другое запрещено законом.

Если можно, немножко позанудствую: в java нет запретов на несколько классов в одном файле. Единственное ограничение: не более одного класса верхнего уровня, видимого за пределами пакета.
inner классы это роскошь для многих языков, вот я их и не упомянул.
И на верхнем уровне можно определить больше одного класса, если они не public (к счастью никто так особо не делает).
современные IDE заколебут тебя с этим
Специально проверил: современные IDE молчат)
Современные IDE и в PHP заколебут всем, что не по PSR, а кидать все классы в один файл по PSR некошерно.
Вложенные статики по-моему заметных накладных расходов не добавляют.
Самое сложное для новичка, это чтобы всё работало так как в учебнике, а именно: установка, компиляция и запуск, подключение библиотек, устаревшие методы и функции. Буду сравнивать с Java и Python т.к. в них хоть что-то понимаю.
Для PHP очень важна актуальность материала.
1)Установка: Если документация старая, а тем более под Винду, и предлагает новичку настраивать PHP как модуль к Apache…. С актуальной документацией всё проще простого.
2) Компиляция и запуск. В PHP в отличии от Java тут всё понятно, в первых проектах ты сам прописываешь какие файлы подключаются и всё прозрачно.
3) Подключение библиотек. Тут PHP сильно выигрывает и у Java и у Python. В Java всё усложнено менеджером сборки который очень не очевиден, а Python путает двумя областями видимости зависимостей и мешаниной версий. В PHP ты просто делаешь composer require РЕПОЗИТОРИЙ_БИБЛИОТЕКИ и спокойно используешь её.
4) Во тут самый неудобный момент по сравнению с Java. За последние 10 лет PHP сильно поменялся и утерял довольно большую часть совместимостей.

По зависимостям в java, и сборке в общем то тоже все просто. Гредлом создаем проект и подключаем библиотеки прописыванием одной строки в конфиге (либо нескольких), которые почти всегда указаны в readme на гитхабе (ну или ином месте где библиотека лежит).
Вы не правы когда новичок запускает грейдл не имея понятия о репозиториях maven и что это груви. Он на всё это шаманство смотрит с лютым не пониманием и старается туда не лезть что бы всё не сломалось, более того стараясь обходить это стороной пытаясь (для начала), а затем заменить на что-то ему более понятное. Особенно когда после внезапного обновления то что вчера работало перестает собираться.
Вот в свифт в этом отношении для новых гребцов поступили более гуманно — сделали плайграунд
вот-вот, я как начал читать статью даже попкорн приготовил, думал — ну щас начнется… а его «намеренно пропустили», тьфу едрить))
5 лет назад про PHP говорили ровно то же самое. Видимо и через пять лет будут говорить то же.
С PHP как с Java — с года в год все кричат «PHP умирает», а он тем временем живее всех живых, и продолжает обрастать фреймворками, библиотеками, версиями самого языка.
Как и Delphi :) Постоянно кричат, что умирает, а я новости по компонентам, либам, фреймворкам и собственно самой среде с трудом успеваю читать.
UFO just landed and posted this here
Groramar
а я новости по компонентам, либам, фреймворкам и собственно самой среде с трудом успеваю читать

F0iL
количество открытых вакансий

Мне кажется надо живость языка не по количеству вакансий и не по скорости штамповки новых фреймворков оценивать, а по тому, как часто в 2020 году делфи выбирают как язык для разработки нового проекта.
UFO just landed and posted this here
Заходите к нам на телеграмм Delphi конференции

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

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

Ну и вообще, из названий каналов очевидно, что там сидят как минимум любители + фанаты делфи. Объективную статистику я бы там не искал.
В том числе и бэкэнды обсуждают, да :) У нас вот тоже бэк на Делфи.
Кроме гугла и яндекса существуют тысячи компаний, в которых Делфи применяется и довольно активно. Так что обсуждать есть что. В том числе и новые проекты. По Фаерманки еще конференция, для интересующихся, это кросс-платформееный GUI Дефли фреймворк:
t.me/TFMXGods
В том числе и бэкэнды обсуждают, да :) У нас вот тоже бэк на Делфи.
То есть вы на полном серьезе будете мне предлагать рассмотреть вариант разработки бэкенда на делфи? По-моему, это лишь подтверждает мою мысль о том, что в этих каналах фанатики, которые готовы всё писать на делфи.
То есть вы на полном серьезе будете мне предлагать рассмотреть вариант разработки бэкенда на делфи? По-моему, это лишь подтверждает мою мысль о том, что в этих каналах фанатики, которые готовы всё писать на делфи.
Конечно буду. В делфи бэк представлен как минимум десятком платных и бесплатных наборов компонент и хорошо проработан.
Вот, например, список бесплатных сетевых либ, часть из которых работает как бэк:
github.com/Fr0sT-Brutal/awesome-pascal#network
Платных примерно столько же, если искать.
Встроенный части бэка в RAD:
www.embarcadero.com/products/delphi/features/middle-tier
Докер:
docwiki.embarcadero.com/RADStudio/Rio/en/RAD_Server_Docker_Deployment
Какое-то у многих странное представление о языке :) На уровне двадцатилетней давности.
Прям умиляюсь. В мире 1с тот же подход. Нафиг нужны специализированные удобные инструменты, мы все будем фигачить на одном универсальном. И пофиг что библиотек и фреймворков на порядки меньше, пофиг что наработанные подходы имеют единицы, опыт чужой сложно позаимствовать и приходится постоянно свои грабли набивать…
Огромный плюс в использовании универсального инструмента то, что вместо разрозненной команды и кучи языков можно использовать 1-2, единый код и минимальную команду.
По собственному опыту ведения почти 20 лет весьма усешных проектов.
Это подходит например если бюджет есть только на одного-двух программистов которые должны и десктоп приложения делать, и бекенды, и мобилки и хз что еще. Хотя я бы сказал что js в таком случае выгоднее ибо проще найти программистов, да и больше готовых решений с практиками, пусть я этот язык и терпеть не могу.
Узко-специализированные вещи мы как раз выполняем на js: WebGL 2D/3D движок вывода. Все остальное — максимально Делфи. Людей на Делфи находим, их достаточно.
Конечно буду.

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

В живых языках тоже есть фанатики, но в умирающих кроме фанатиков никого больше и не осталось.
Мы эту 'иллюзию' создаём уже 20 лет, всё то время пока Delphi безуспешно хоронят :)
Неофитов в языке хватает, как и 'фанатиков'. Зайдите на форумы или вот в телеграмм чаты. Постоянные, ежечасные, вопросы явно новичков.
В вузах до сих пор студентов учат. Оттуда и вопросы. Ни разу не видел вакансии джунов и стажеров на делфи.
UFO just landed and posted this here
Молодая кровь — это хорошо, в любом случае.
UFO just landed and posted this here
Потом она выходила под названием eComStation, впрочем, уже тоже лет десять как померла.
UFO just landed and posted this here
На чистом PHP как и JS мало кто пишет что-то большое, надо знать плюсом фреймворк, я работал c C++(AVR), C#(Unity), JS\PHP, щупал Python и Node.js, но придерживаюсь мнения что «каждому — свое»
PHP прекрасен для веб-бекенда, за 20+ лет выдумано куча решений, он хорошо поддерживается хостингами, серверами, просто разворачивается, хочешь написать что-то простое, быстро и без зависимостей. например простой бекенд для VR магазина, пожалуйста один исполняющий файл php +nosql/sql/file, и все. Хочешь Node, ок, но будь добр доставь 100500 зависимостей, и купи vps. Сколько раз с наскоку надо было решать быстро задачу на беке — PHP выручал. Для сложного есть отличные фреймворки Laravel или Symfony, и они спроектированны так что бы меньше говнокодить и имеют отличное комьюнити.
Меня поражают возможности Python(имхо очень перспективный), но синтаксис жесть, когда ты привык к скобкам то тебе просто переключаться между подобными языками, а с ним у меня пока тяжко идет.

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

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

а где ассемблер? с него по идее все началось.

Если с него начинать, на нем можно и закончить(изучение разумеется)
хе мой путь: VB->assembler->c->c++->php->java->js->kotlin

да ладно? асм он разный, для 8080/51/86 вполне изучаем, за одно придет понимание как 0/1 бегают при различных операциях и почему.

ИМХО, у MSP430 он проще и приятнее) Хотя бы по причине ортогональности. Для старта, ИМХО, самое то.
Ассемблер же прост, как пробка. Заодно даёт понимание того, как это всё внутри работает.
Кстати, и Си после него совсем не кажется сложным.
Да, после ассемблера С кажется даром божьим. Добавляет структуру в код ассемблера.
А когда понимаешь эту идеологию перехода через getc и putc в IO операциях, то начинаешь писать свою ОСь :)
Как написано в тексте, первым логично учить язык из числа наиболее востребованных сейчас — насколько могу судить, ассемблер в их число не входит.
В embedded очень даже востребовано знание разных видов ассемблера, когда речь идет об оптимизации используемого железа в попытке сэкономить 1-50% цены микроконтроллеров в масштабе от 1000 произведенных устройств. А так же перенос кода на новые платформы без кусков кода на ассемблере не обходится. Ну и разработка собственно самих процессоров требует для первоначальной отладки/портирования компиляторов очень много работы с асмом. В общем как только заканчиваются ресурсы или нужно освоить новую железку хороший программист С превращается в программиста на АСМе.
Только в эмбеде зарплаты раза в 2 ниже, чем в JS, приличной работы — мало, развитие — только в случае смерти вышестояещего руководства, а порог вхождения — прилично выше. И надо железо любить и разбираться в нем.

Писать на ассемблере, может, часто и не надо. Но вот читать ассемблер требуется часто.

Особенно когда дело доходит до реверс-инжиниринга или хотя бы до отладки чужих бинарников. И когда знатоки ООП/ФП/разнообразных парадигм не понимают, что такое call convention и вообще смотрят на IDA, как баран на новые ворота.
Ассемблер мертв дважды, а то и трижды.
Первый раз его убили переписав Unix на Си, что было неслыхано — писать ядро ОС не на ассемблере. Но цена труда программиста оказалось выше чем производительность.

Второй раз ассемблер убили микроконтроллеры. Раньше все было просто и понятно — функционал просто не влазил в 64к памяти программ (или еще в меньший объем). Но даже AVR уже был оптимизирован под Си, а ARM уже даже не только под Си, но под операционные системы.

Ну и последний бастион для Ассемблера, что я встречал — в Скайпе была команда пишущие ассемблерные вставки кодеков. Только Скайп разогревает телефон, когда FaceTime держит айфон холодным. Все потому что ассемблер не нужен. Битовыми числодробилками должен заниматься хардвер, а не софтвер на ассемблере.

(лично я годами писал профессионально на нескольких ассемблерах. Умею но больше не хочу)
Полноценная отладка для микроконтроллеров без знания их ассемблера — не возможна.

Интересно, что там можно в ассемблере отлаживать? Разве только посмотреть, как компитлятор оптимизировал твой код с C±±. По идее, следую правильным процессам и отладка то не нужна. Даже сложные алгоритмы все равно отлаживать в Си коде, а не ассемблере. Очень редко там что то, контекст переключить, тест Алу и конвейера сделать для диагностики ядра… больше даже предположить не могу...

Из-за оптимизации компиляции не всегда можно поставить брикпоинты в нужном месте кода C (а без оптимизации может не влезть в микроконтроллер). Да и ручная оптимизация С кода иногда очень важна (например програмная реализация последовательного интерфейса с максимально возможной скоростью).

Если брейкпоинт нельзя поставить, значит этот код компилятор выкинул и смотреть там нечего… в ассемблере этого кода тоже не будет.
А если вы шагает по ассемблеру, то рядом в исходниках на Си вам показывается, где вы находитесь…
Поэтому, я все ещё не пойму, что можно отлаживать в ассемблере для программы на Си? Ну оптимизировал он все и что? Как можно на ассемблер повлиять? Ради интереса, как оптимизация получилась, согласен, но практического смысла то ноль. От вас это не зависит, и можно его не смотреть, причем разные компиляторы по разному ещё сделают.


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

Зачастую компилятор оптимизирует все лучше любого гуру ассемблера.

Этот точно не про компилятор под msp430 (сейчас пишу под него).

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

Эм… поспорю, пожалуй. Без знания архитектуры МК в целом — да.
Писал много и для AVR и для ARM без особого углубления в ассемблер. Сейчас в свободное время ковыряю ассемблер MSP430, но чисто по приколу из интереса.
Я в ARM систему команд тоже нее углублялся. Знание ассемблера x86 и pdp-11 вполне хватает чтобы разобраться, что делают схожие по мнемонике команды в отладчике.
Битовыми числодробилками

а ассемблер этим и не занимается, для этого есть всякие << или >>
тут вопрос в скорости выполнения операции. Попробуйте FullHD RTP поток на Java посохранять на диск на основе какого либо RFC. Довольно утрированный пример, но после первой попытки сразу вспомните про C++ и «что пониже», где есть ручное управление памятью. Вот и для ассемблера попадаются такие задачи о сих пор.
UFO just landed and posted this here
Интересно, у кого-нибудь удалось воспроизвести ответ Google из первой картинки? У меня первой вылезает ссылка на даннную статью :D
Результатов: примерно 5 930 000 000 (0,36 сек.)

1. Какой язык программирования учить в 2020-м? / Блог… — Habr

Но на «какой язык учить в 2020» выдаёт выделенный ответ из другой статьи.
Если хочется посмотреть на тот текст, из которого гугловский колдунщик извлёк список, то он вот.

Там что-то совсем странное: это по большей части осмысленный текст, где на Kotlin, HCL и Go обращают внимание в конце как на «самые быстрорастущие» языки (а не «самые популярные»), но при этом в начало текста вкорячена вот эта безумная конструкция про Самые Популярные Языки с теми же Kotlin, HCL и Go. В итоге текст противоречит сам себе.

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


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


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


Если научиться писать код в языковых конструкциях языка Х, пусть он и самый востребованный, это просто пустая трата времени, если не вызывает интереса. А это довольно важный момент, потому что если человек последует гайду, но выберет язык/технологию от которой его воротит, а не что-то, что вы не считаете достойным для изучения по своим субъективным критериям, то он просто бросит.

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

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


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

Новичок, строго говоря, вряд ли готов гарантировать, что вообще будет программировать. Изучить язык (до какого-то условного стартового уровня) кажется все-таки первично. Затем может последовать обучение программированию. А может не последовать.
Исходя из «Программу нужно запустить, посмотреть, повертеть в руках :) » я бы добавил, что для первого языка программирования очень важно наличие хороших инструментов отладки и сред разработки, которые бы работали с отладчиком из коробки. Близко к идеальном варианту, хоть и сильно ограниченно по удобству долгосрочного использования, всемозможноые онлайн инструменты вроде jsfiddle, onlinegdb и подобные.

P.S. Ищу подобный инструмент (с отладчиком) для Ruby.
UFO just landed and posted this here

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


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


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

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

Языки полезно изучать как минимум потому, что в каждом языке заложена своя парадигма и семантика. Это и приводит к изучению программирования на реальных примерах. Да, есть языки-комбайны вроде c++, но упор в этих языках всё равно на что-то одно, а другие парадигмы разрабатывались по принципу "чтобы было" и могут быть не столь развиты и не столь понятны для новичка, когда в другом языке парадигма X может быть в более удобной форме для понимания и программирования в целом, поскольку она является основополагающей этого языка.

А упоминаний о языке мододелов — Lua…
Вакансий на нём мало, зато можно видоизменять игры!

Ещё, некоторые на нем в AMS или AMB умудряются небольшие утилиты делать, при том довольно годные…
Хотя, имхо, это не то, что стоит изучать в 2020 году. Да и в современных играх он не шибко часто используется, разве что в каких то казуальных.

А в Löve (Love2D) можно ещё и делать игры.

Обожаю Lua за его незатейливость. У него реально крутые дизайн-решения. Версия 5.1 уже содержит почти все, что надо, и не перегружен всем остальным. Вот 5.4 пытается стать javascript-lite (const, integer и прочее).


Язык великолепен, но он должен быть не первый.

сначала C потом Lua
и только потом остальной треш и угар C++,C#,php,sql,python,bash,java,kotlin,swift,javascript,perl,erlang…

ps: согласен видимо у них поставщик травы сменился в lua 5.4 «toclose» — вообще идиотское решение с которым они еще намучаются. Самый лаконичный и в тоже время вмещающий почти все концепции синтаксис в версии 5.3.4.
Всё это фигня. Нужно знать не один язык, а общую картину. Потому как айти сейчас развивается с такой скоростью, что раз в 5-10 лет всё меняется до неузнаваемости.

Помнится, у меня в свое время была цепочка примерно такая: «pascal -> c++ -> delphi -> php -> javascript -> asm -> python, prolog, lisp, erlang, ruby, c#, haskell, perl, go». Разумеется, профессионально я использую от силы пару-тройку языков, еще пару на любительском уровне, на остальных вообще уже забыл как писать, и еще в очереди на изучение несколько штук.

Так что, я думаю, нет никакой разницы, с чего начинать. Всё равно, при должном любопытстве, года за два-три в багажнике будет не менее десятка опробованных языков. А там уже будет понимание, в какую сторону стоит углубляться. Можно начать с самых популярных, тут уже в зависимости от того, ищешь ли работу с первого дня или для души изучаешь :)
Помнится, у меня в свое время была цепочка примерно такая: «pascal -> c++ -> delphi -> php -> javascript -> asm -> python, prolog, lisp, erlang, ruby, c#, haskell, perl, go».

Честно говоря, половина из языков в этой цепочке таковы, что вы могли бы успешно сидеть на них лет 15 или 20, не меняя стека, будь у вас такое желание.
Это уже потом. А новичку следует посмотреть и пощупать всё, до чего он только может дотянуться. Это как проработать всю жизнь каким-нибудь шахтером или поваром, даже не подозревая, что есть и другие профессии. Да, будешь очень вкусно готовить, но кто знает, может есть более подходящее занятие? Которое никогда не найдешь, потому что бросил поиски в самом начале пути.

Ну и в принципе кругозор важен. Бекендеру поможет знание, что происходит на фронте. Фронтендеру — что там на беке и в бд. Им обоим будут полезны низкоуровневые знания и наоборот — железячнику не помешает знание более высоких уровней абстракций.
Честно говоря, половина из языков в этой цепочке таковы, что вы могли бы успешно сидеть на них лет 15 или 20, не меняя стека, будь у вас такое желание
Всё так. Моя цепочка Basic/Assembler/Pascal > Слегка Форт > Borland Pascal for Win > Delphi. На последней уже почти 20 лет, и как-то не исписался :) Интересные задачи, интересное применение (медицина, вот как раз в том числе с Ковидом 'воюем'), всё получается, всем доволен и буду дальше работать.
И, да, я работаю на себя, поэтому мне шашечки из букета языков не нужны вовсе, ехать нужно. Едется отлично и в своё удовольствие.
У нас уже и веб освоили. Наконец :)
Fortran — а где Фортран? Реально найти позицию в разработке, хотя и не в «айти». Разработка, но не игрушечек, смартфончиков и скриптиков, а железяк. Все большие железки от полуметра и крупнее: Машинки, танчики, самолетики, корабли, нефтеплатформы, мосты, большие дома, заводы и ракеты. Инженерные расчеты остаются в большой степени на нем. Ну не считая химии и много чего другого. В науке — астрономы и физики его все еще особенно любят. Ну и начать программировать на нем очень легко. Он почти как Бейсик или Python, хотя не очень далек и от C. Процедурное программирование естественно ОО — тоже можно. Параллельное: coarrays, OpenMP, MPI. Минимальный бойлерплэйт. Выучив Фортран легко двигаться как в сторону интерпретируемых языков, так и в сторону C.
Ну, в число наиболее популярных он явно не входит (вбил сейчас «Fortran» в поиск HeadHunter по Москве, нашлось 5 вакансий с его упоминанием против 2233 у «JavaScript»), поэтому в посте и нет. Но спасибо за комментарий, он как раз хорошо дополняет.
Это разные «Jobs» бывают. Вот в качестве (наполовину-) шутки — по количеству «jobs» Fortran сильно опережает все остальное: www.archer.ac.uk/status/codes (кластер Archer).

Ну а на linked.in, indeed.com, dice.com, куча предложений по слову Fortran. Но это конечно не в России. И это не совсем «IT»: Computation scientist, CDF engineer, Mechanical engineer, Aerodynamics engineer, Modeling and simulation engineer, Radar modeling analyst, propulsion engineer, GNC engineer, Meteocean modeler, Oceanographer и т.д. на любой вкус. Вплоть до Electronic warfare.

Как я понимаю, от всех этих engineer'ов требуется в первую очередь знание предметной области, а не фортрана
Точно! Это и есть главный вопрос — зачем, с какой целью, в какой предметной области собираетесь программировать. «Какой язык учить?» полностью определяется целью. Если «просто попрограммировать» для общего понимания на досуге, то что-то простое, хоть Python хоть Scratch, или тот же Бейсик. Если нужно считать Fortran/Matlab/PythonC/C++, Если предметная область статистика и data analysis: R, или даже SAS/Stata (если нужно). Если ML, NN: Julia/Python. Если веб, то тут лучше меня посоветуют спецы :) Я вообще сомневаюсь, что бывает просто программирование в отрыве от предметной области. Разве что чистая computer science. Но это совершенно отдельная вещь.
Я, скорее, про то, что удельный вес умения программировать в наборе скиллов mechanical engineer'а и веб-разработчика будет очень разным. Как раз потому, что у первых предметная область сильно сложнее, чем у вторых.
Ну в перечисленных сферах фортран активно вытесняется C/C++ тот же LAMMPS в предыдущие годы полностью с него соскочил, не в последнюю очередь благодаря GPU, на фортране вы имеете чистый CUDA, OpenACC, OpenMP и ноль библиотек по типу Trust, ArayFire, Kokkos, Raja и т.д. Я бы сказал, что фортран в этих сферах жив только благодаря BLAS, LAPACK. По производительности, я не видел чтобы он выигрывал у того же C или C++ в HPC, максимум на том же уровне.
Да он очень простой в изучении, но если нужно, что-то отличное от перечисленных библиотек или простых задач, готовьтесь писать все самостоятельно, boost нет, как и много другого, не говоря уже о Python, JavaScript и их количества библиотек, на все случаи жизни.

Поэтому я бы не рекомендовал фортран к изучению как первый язык, его всегда можно будет выучить прицепом за неделю максимум.
А вот отучиться писать свои велосипеды, когда этого можно (и даже нужно) не делать будет очень сложно.
Как говорил Дейкстра: «Писать на фортране можно на любом языке.» P.S.: он о нем не очень лестно отзывался.
Полностью согласен и полностью несогласен. Главный вопрос, очевидно, зачем учиться программировать. Если цель — разработка ПО, то вне всяких сомнений — учите «хорошие» языки C/C++ и т.п… Если же нужно что-то быстро посчитать в пределах своей предметной области, то часто лучший выбор это именно Фортран. Студента с нуля можно научить азам программирования на Фортране за неделю с нуля. Для многих C++ слишком сложен. В C++ даже для «профессионального разработчика» туча сложностей и неочевидностей (на Хабре была статья о множестве методов инициализации переменной, инициализации — переменной), плюс разного рода старые конструкции (которые часто гуглятся в первую очередь). Фортран же прост как огурец.

Велосипедостроение — неоспоримое зло. Но опять же, часто быстрее сделать свой велосипед, чем учить C++ и множество либ/API etc. Преимущество Фортрана — в нем есть почти все что нужно для расчетов. Я имею в виду, главным образом, работу с массивами. В C++ arrays практически нет, нужны либы. А ограниченность Фортрана — на самом деле благо, он почти никогда не позволяет выстрелить себе в ногу. Если важны элегантные «шашечки,» то однозначно не Фортран, если «просто ехать» (да, тяп-ляп и в расчеты) — то Фортран.

Да, и еще одно преимущество Фортрана — самая жуткая древность почти всегда заработает. Можно взять пыльные перфокарты 60-х годов, и оно почти всегда скомпилируется и запустится. Даже если нет (редко что было исключено из языка, например `real` индекс цикла) — флаг компилятора вернет все обратно. Как тебе такое, Python?
Так он прост как огурец именно потому, что это и не язык-то в общепринятом
смысле. Во всяком случае, изначально. Он был создан именно для того, чтобы
не думать о языке. Именно поэтому там были встроены, например, комплексные
числа. Да, их можно легко реализовать внешним образом, но это будет как раз
то, что заставит человека думать о языке, а это не должно мешать. Фортрана
давно бы не было, если бы не огромные библиотеки, написанные на нем, и
используемые во всей естественно-научной сфере. Включая такие организации,
как ЦЕРН, например. Или Дубну. Кто решится все это добро, проверенное и
используемое, с какого-то перепугу перекодировать во что-то другое? А потом 20
лет выковыривать ошибки и несостыковки. Зачем? Вот и живет. И стандарты
меняет время от времени. Я где-то видел 2018. Может, уже и новее есть?
Согласен, но сейчас для простеньких задач проще использовать python+numpy, если нужно выгрузить счёт на gpu добавляем loopy. Не знаю как в Москве и Санкт-Петербурге, но в Челябинске, например, физиков в 10-х годах учили фортрану, сейчас приходят студенты и на тех же специальностях о фортране уже не слышали, его полностью вытеснил Python, с его библиотеками, так как тут все в одном. Не нужно считать задачу на одном языке, а обработку и визуализацию производить в том же Matlab'е. Так же некоторые пакеты для специфических расчётов, тот же LAMMPS, могут собираться в виде библиотек встраиваемых в Python, что позволяет автоматизировать весь процесс.
Ну я не думаю, что python+numpy хорошо подойдет для новичка, это почти как два разных языка в одном флаконе. Для более продвинутого уровня в Фортране есть `ISO_C_BINDING`: можно линковать с C, вызывать из Python/R/Matlab и многого другого. Обработка данных и графика — в большинстве случаев отдельная работа с данными. Ее не обязательно делать там-же где данные генерируются. Новичок может делать ее хоть в GUI-пакетах вроде SPSS или Statistica, или даже в Экселе. В общем для новичка, у которого предметная область связана с вычислениями, простой Фортран вполне неплохой выбор в качестве первого языка. Julia и Python тоже.
Перечитайте своё сообщение и посчитайте сколько технологий и языков вы предлагаете изучить, чтобы иметь полноценное рабочее приложение для вычислений.
Согласен numpy, loopy, numba, это «диалекты» имеющий, в некоторых случаях, отличный от Python синтаксис, но это всё таки один язык, с одним подходом к документации и т.д.
Не, я не предлагаю новичку сразу учить все, что упомянуто в моем сообщении.
для новичка, у которого предметная область связана с вычислениями, простой Фортран вполне неплохой выбор в качестве первого языка.
Не поймите меня неправильно, я не предлагаю всем начинать с Фортрана. Можно и с Python'а и с Julia. Все зависит от цели и характера предметной области. Но я не думаю, что новичку в программировании начинать Python+numpy будет легко. Я исхожу из требований среднего студента в вакууме с нулевыми навыками написания программ, которому нужно быстро с ходу начать работать с кодом и делать свою MSc или PhD. У такого студента, не computer science, нет ни времени ни желания изучать сложные стеки и технологии. Но уже скорее всего есть минимальные навыки работы с цифрами в Экселе. На Фортране он сможет быстро начать генерировать данные, хоть на лаптопе (а чуть позже и на HPC системе) и сразу начать работать с ними в привычном Экселе (и тут же получить свои credits). Тот же студент может работать и с кусками готового (г****-)кода. И да, Фортран изучают (ок, я не в России). После Фортрана легко освоить любые другие языки (потом можно его и ненавидеть, нет проблем).

Статья-то вообще не о том, на чем лучше программировать или лучше считать, а о том, с какого языка начинать программировать с нуля. Фортран один из вариантов.
Меня (оптика) 10 лет назад в Петербурге (ИТМО) учили таки фортрану)
И сейчас студентов ему учат. У него очень низкий порог вхождения: это же просто транслятор формул. Конечно же Фортран нишевый язык. Но в высокопроизводительных вычислениях он довольно таки доминирует. Посмотрите, интереса ради, что работает на довольно типичной HPC. Fortranных задач тут на порядки больше чем всего остального, включая C и C++. Python — всего лишь малюсенькая точечка. Интересно, что тенденция с течением времени почти не меняется (может быть даже Pythonа за год стало меньше, но это мое субьективное).
Также как и 30 лет назад Фортран остается нишей научных коллективов.
Причем если у нас его постепенно вытеснил Си, то в некоторых лабораториях Англии, Германии и Испании — Фортран живее всех живых.
Ну с тобой-то как в старом анекдоте: ты можешь уже ничего не учить, «просто ходи туда-сюда, а мы смотреть будем, хлопать будем!»
1С никто не предложил. Ну и правильно.

И ABAP никто не вспомнил, странно.

Интересно, а что бы посоветовали человеку, который сейчас занимается 1С, но уже стал понимать, что хочется чего-то другого, т.к. вроде и работаешь, даже с каждым разом что-то новое узнаешь, но по факту топчешься на месте, т.к. интересных задач нет, а годы-то идут.
Многие 1с-ники идут в Java, чтобы сохранить часть имеющегося опыта. Я выбрал для изучения Swift, чтобы ничего общего с «кровавым Enterprise» больше не иметь :) Только вот вакансий Junior iOs developer совсем не видно, всем нужны Middle и выше.
После одного крупного проекта с мобильным приложением на 1с перешел на java/kotlin под андроид почти полтора года назад. Всем доволен. Как вариант можно рассмотреть dart и flutter соответственно, например один из довольно активных участников flutter коммьюнити русскоязычного — 1сник в redmadrobot.
Ну либо в бекенд энтерпрайз какой нибудь податься если есть нормальный опыт в 1с в проектировании баз, рест апи к базе, интеграций с другими системами и т.п. Я в общем то между этими двумя альтернативами и выбирал когда решился с 1с сваливать (мобилки и бек).

Едва ли можно использовать здесь эпитет "идеальный", но мне кажется максимально хороший выбор именно для первого языка прикладного (не системного) программирования сегодня — Python.
Достаточно прямой синтаксис, всякие интересные радости вроде рефлексии и декораторов, реально широкий набор библиотек: веб, графики, ML, всё на свете.
Всё это даёт шанс и научиться программировать (алгоритмы, структуры данных, вот это всё), и при этом с этими знаниями и тем же инструментом войти в отрасль, несколько сглаживая шок от того, насколько этот ваш Pascal далёк от того, за что сегодня в среднем платят деньги.
И вот с этим знанием уже можно более обоснованно выбирать, чем именно интересно заниматься дальше.

А приложения с GUI для десктопов как создавать на Питоне?

UFO just landed and posted this here
Недавно знакомый дизайнер расстроился, увидев статью «Какие языки программирования должен знать дизайнер?» (HTML и CSS, JavaScript, SQL, R, Python). Так что не только программисты сталкиваются со странностями на затронутую тему.

R? Дизайнеру? Какие там вообще были аргументы в его пользу?

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

И если это решение принять, то и выбор, какие ЯП учить, как минимум очень сильно сузится.
Это только если говорить про взрослого дядьку, который решил войти в айти и выбирает себе направление деятельности. Молодому падавану вопрос, что ему интереснее, фронтэнд, бэкэнд, эмбэд и так далее звучит примерно как вопрос «Что вам больше нравится, смузи, фалафель или манговый фреш?» для Агафьи Лыковой.
Ну на мой взгляд это даже для молодого падавана более понятно чем различия языков програмирования как таковых. То есть на мой взгляд даже молодой падаван разницу между фронтэндом и скажем эмбеддед хоть примерно, но понимает. А если он даже этого на понимает, то и языки программирования ему выбирать на мой взгляд рановато.
Я даже не про то, что он не в состоянии узнать, какие есть направления в разработке, а про то, что он не в состоянии сказать, чем ему хочется заниматься. Пока сам не попробуешь, не поймёшь. А с большой вероятностью падаван залипнет надолго на том первом направлении, которое ему подвернулось.

Ну, не знаю. Я свой первый язык (pawn) в 2011 учил, потому что хотел свой SAMP сервер сделать. Лучше учить первым тот язык, который сразу пригодится. Так, мотивации, как минимум, больше будет.

Именно новичку лучше начинать с обучения ЯП, а там будет что его заинтересует. Я сам в 2017 начинал с фронтенда (js/jquery/ajax), но через некоторое время понял, что это не мое. Следующим языком был питон, а через полгода я учил си а позже и кресты. И только тогда у меня было понимание, что я хочу работать либо на бекенде, либо на десктопе. Уже как два года я работаю десктоп-программистом на крестах, изредка используя питон.
Ну вот допустим начнёт человек обучение с плюсов. Выучит до какого-то уровня. И как он поймёт из обучения плюсам что ему хочется веб-фронтенд делать? И даже если поймёт, много ему дадут плюсы в веб-фронтенде?
Этот же человек будет практиковаться, делать какие-то проекты для практики. В это время либо его затянет, и он будет хотеть завершить проект во что бы не стало, либо на середине уже потеряет интерес, это и будет сигналом, что нужно попробовать что-то другое.

И даже если поймёт, много ему дадут плюсы в веб-фронтенде?

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

Ну так может быть тогда логичнее «делать для практики» какие-то проекты в каком-то определённом направлении, а не на каком-то конкретном языке? Ну то есть например сделать свою веб-страничку или какой-нибудь смартхоум-гаджет?

Какое-то знание плюсов уже лучше чем ничего, верно?

Но для фронтендера хуже чем какое-то понимание CSS и HTML или скажем вещей вроде MVC/MVVM. Речь то идёт о том как правильнее начать.

На веб и вообще на что-либо другое всегда можно переучиться, особенно если за плечами есть опыт, пусть даже и небольшой

Конечно можно. Но так и другой язык программирования всегда можно выучить. И это на мой взгляд часто гораздо проще чем менять «напрвление» вроде перехода с эмбеддед на веб-фронтенд.
Есть студент, который хочет войти в it. И с огромной вероятность он слабо представляет что значит:
фронтенд, бэкенд, десктоп, эмбеддед, геймдев и т.д. и т.п.
Именно ему лучше всего просто начать что-то делать и по ходу практики разбираться с направлениями и ЯП.
(дополнение)
Либо идти работать на галеры джуном и там уже сформировать своё видение мира.
Есть студент, который хочет войти в it. И с огромной вероятность он слабо представляет что значит:

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

Что это за студенты-айтишники если они даже такого не понимают? Что они тогда вообще понимают?

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

Что значит «что-то делать»? Сейчас полно элементарных туториалов о том как с нуля сделать простенькую страничку. Или простенькое десктоп-приложение. Или что-то замутить на том же raspberry. И на мой взгляд логичнее выбрать что-то из этого, к чему лежит душа, чем тупо писать «hello world» на практически рэндомно выбранном ЯП.
И на мой взгляд логичнее выбрать что-то из этого, к чему лежит душа, чем тупо писать «hello world» на практически рэндомно выбранном ЯП.
Никто не предлагает писать «хелоуворды» на 10 языках подряд, а предлагается выбрать один, попробовать и понять, нравиться ли разрабатывать на нем, и если да попробовать себя в каком-то направлении этого языка. У некоторый ЯП много направлений, и всегда можно его сменить.
И на мой взгляд логичнее выбрать что-то из этого, к чему лежит душа
Многие еще не знают к чему у них лежит душа. А когда узнают, выучат все, что необходимо.

Никто не предлагает писать «хелоуворды» на 10 языках подряд, а предлагается выбрать один, попробовать и понять, нравиться ли разрабатывать на нем, и если да попробовать себя в каком-то направлении этого языка

И по каким критериям выбирать этот самый «один язык». И самое главное если даже выбрал язык, то есть всё равно надо ещё будет выбирать и направление. Так почему сначала не выбрать направление, а потом посмотреть какие языки для него доступны?

. У некоторый ЯП много направлений, и всегда можно его сменить.

Вот только обычно важнее чтобы человек разбирался скорее в концептах своего направления, а не в ЯП. Ну то есть грубо говоря если один человек всю жизнь писал на С# бэкенд, а другой на Java десктоп-приложения, и мне нужно написать десктоп на С#, то я предпочту работать с тем кто писал десктоп на Java.

На мой взгляд сейчас гораздо важнее понимать концепты/парадигмы нужные для конкретно твоего направления, чем какие-то отдельные ЯП/фреймворки. Если знаешь концепты, то новый язык/фреймворк выучить не так и сложно.
Уже как два года я работаю десктоп-программистом на крестах
А почему в 2018 году для десктоп приложений были выбраны кресты, а не Java/C#? Я слабо в теме, хотелось бы услышать, чем оно лучше.
А почему в 2018 году для десктоп приложений были выбраны кресты, а не Java/C#?

Разработка идет под дебиан.
Ну это не совсем ответ на вопрос. Десктоп на java аккуратно превращается в полную кросплатформу, на C# тоже можно на дебиане писать.
Бывает так, что кросплатформенность не нужна, а на шарпе писать под линуксы не так просто, как на кресты + qt.
QT — вполне себе такой ответ на вопрос
кресты + qt

На QT можно писать на разных языках, насколько я знаю. Почему именно плюсы?
UFO just landed and posted this here
со статической типизацией

Так я потому сначала и спросил, почему не Java/C# для десктопа. Мне интересно, чем оно в 2018 не устроило. Я бы не спрашивал, если речь шла о 2000-2005 годах.

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

со скоростью работы, если вдруг

Вот я про этот самый «вдруг» и спрашиваю.
Ну у С#/Java есть небольшой недостаток в том что либо надо устанавливать на таргет-компах рантайм/фреймворк(что не всегда возможно/удобно), либо пытаться создать self-contained пакет(что опять же не всегда получается и даже если, то пакеты обычно получаются «толстые» ).

Плюс оперативки С#/Java программы обычно больше жрут. То есть если конечно серьёзно заняться оптимизацией, то это более-менее решаемо. Но это относительно напряжно и если такое критично, то возможно не стоит брать С#/Java.

Но если рассматривать удобство/простоту именно самой разработки, то я бы тоже сказал что C#/Java поудобнее будут.

UFO just landed and posted this here
Потому что C++ — родной язык Qt. Всё остальное — обёртки. Кроме JS, если использовать QML.
— Какой язык учить?
— Английский.
— Расскажите, какую самую сложную задачу решали на английском на последние 3 года?
— Чо???
— Расскажите, какую самую сложную задачу решали на английском на последние 3 года?
— Искал адекватных и щедрых заказчиков, и успешно нашёл несколько. Кстати, извините, но вы мне не подходите.
Кобол, по-моему, вообще все забыли
Пролог с Лиспом тоже не упомянули. И правильно сделали — как первый язык они не подходят.
Именно как первый они подходят лучше всего. Чтобы не размениваться на мелочи.
Проблема первая: водянистая вода.
Классификация странная. Т.е. вначале все же надо определиться с платформой(сейчас по сути выбор — Windows и стек Microsoft и «не Windows и другой стек»). В зав-ти от этого все как бы кардинально меняется

странно. Microsoft-only языков не осталось.

Если человек хочет научиться автоматизации в документах — VB его выбор.
Ну хотя С# и NetCore теоретически считаются «кроссплатформенными», но я бы не сказал что они на данный момент действительно такими являются.

Ещё далеко не всё там работает идеально в этом плане. И вам известно много фирм которые действительно пишут «в продакт» на С# под линукс? Я лично ни одной не знаю.

А если ещё и начать смотреть на отдельные фреймворки вроде того же WPF… Ну то есть писать кроссплатформенный десктоп на С# это на мой взгляд на данный момент что-то из области мазохизма. Даже учитывая вещи вроде авалонии.
Ещё далеко не всё там работает идеально в этом плане. И вам известно много фирм которые действительно пишут «в продакт» на С# под линукс? Я лично ни одной не знаю.

Почти все новые проекты на .NET Core пишутся так.
Мы например.

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

А основной бекендный язык это php?
Swift прекрасен на линуксовом серверсайде, и для консольных приложений тоже, и вот недавно официально и до windows наконец-то добрался в версии 5.3.
Да, GUI приложения на нем под линукс и винду пока не попишешь с легкостью, но все скоро будет возможно.
А в остальном как язык он самый лучший ИМХО, развивается бешенными темпами, работает быстро, ест мало ОЗУ. На VSCode под линукс уже наконец-то работает хорошо и подсветка кода с автокомплитом и отладка.
Конкретно по серверсайду у нас канал в телеге есть отличный SSSD.
Так что мой совет это учить Swift.
Еще стоит добавить, что Swift прекрасен для IoT. Я пару недель назад делал интересный проект умной штуковины и писал весь код на Swift для RaspberryPi4. Есть уже кучи библиотек на Swift как для просто GPIO, так и для конкретных датчиков, считывателей и прочих составляющих.
В тексте сказано, что server-side swift в мире сейчас используется очень мало, если сравнить с использованием самых популярных бэкендных языков.

Вы на это возражаете «Swift ест мало ОЗУ и подсветка кода работает хорошо».

Так нигде же и не говорилось, что он ест много ОЗУ. Говорилось только, что серверная востребованность на данный момент на порядки ниже, чем у других языков. И то, сколько он ест ОЗУ, никак этот факт не отменяет.

Возможно, когда-нибудь это всё изменится и серверный Swift станет сверхпопулярен. Но пока что, глядя на ситуации вроде «IBM поигрались и бросили», уверенно сделать такой вывод нельзя.
на самом деле проги на я.п. swift становятся очень медленными, если использовать много экземпляров классов, потому что классы в swift — это reference-типы, а для них срабатывается встроенный ARC.
Разработчики я.п. swift пытаются реализовать ownership, borrowing, lifetimes примерно как в rust, но очень сомнительно, что это нормально получится, потому что: есть очень много кода, написанного на ObjC, а с ObjC приходится поддерживать совместимость, а ещё ABI у swift уже стабилизирован.
есть сомнения, что у swift есть возможности в тех задачах, которые на python решаются: машинное обучение, обработка больших данных.
Например, есть swift4tensorflow.
Но на данный момент для swift мало библиотек, а на python очень много.
Но на данный момент для swift мало библиотек, а на python очень много.

На tcl/tk еще больше.

Совершенно не упомянуты языки выросшие из DBASE. FoxBase, FoxPro, Clipper, Harbour.
Вакансии по ним есть, предложения попадаются заманчивые, а новичку для понимания «что это?» в статье упомянуть наверное стоило.
В своё время на языках этой группы написано приличное количество АРМ, в том числе попадаются и долгожители. А кое-где их ещё и поддерживают.
Как программист на одном из подобных языков, не могу представить зачем их учить в 2020-м. Скорее наоборот, будет просто потерянным временем
А на С и С++ есть вакансии типа джун? Поскольку если вы только учите язык вы джун, а потом не можете найти работу, такие низкоуровневые языки используются в каких-то критических и высоконагруженных вещах, куда джуна не подпустят

Ну это смотря, кто такой Джун. Джуны есть везде. Но, да, за 3 месяца или даже полгода тебя в нормальную фирму, вряд ли, возьмут. У меня, вот, с порога было "на интерфейс, вот пиши обёртку под драйвер, используя SocketCAN. Вот ссылочка на наш code style, вот ссылочка на документацию SocketCan. (Все на английском, естественно)". Да и в компании, обычно, попадают, используя сарафанное радио. Там, где я сейчас тружусь, там, вроде, на сайте даже списка вакансий нет.

UFO just landed and posted this here
Да, 25 лет как умирает.
Поверьте, Java, на Ваш век хватит, уж слишком много на ней написано и пишется, и будет писаться.
есть сомнения, что java-код можно переписать на C#; конечно, это зависит от числа строк кода в проекте, но java-код с малейшими изменениями можно перенести на C#.
Причём сейчас основной упор делается на развитие NetCore, а NetCore кроссплатформенный и по free-open source лицензии MIT.
А это уже может в ближайшие годы поменять ситуацию в backend-разработке.
Плюс ещё golang активно используется в backend-разработке.
UFO just landed and posted this here
SQL, HTML, Bash — они настолько узкоспефичны, что с ними имеют дело большинство разработчиков на всех перечисленных в статье языках
Не совсем.
Хорошо баш, точнее не так
Хорошо shell (bash и другие линуксовые, powershell, cmd), знают админы и девопсы, потому что эти языки больше про работу с операционкой, чем о программировании. При этом языки вполне достаточные, чтобы на них можно было написать много, но они создавались не для этого.
Они для инсталлятор написать, бэкапы автоматизировать, администрирование автоматизировать. Сейчас появляется все больше и больше оркестраторов (chef, ansible, terraform) и др., поэтому так сказать «senior» шелл девелопер не нужен как класс. Есть те, кто немного могут, и те, кто могут с извратами.

А вот поповоду SQL это другая штука. Есть DBA и SQL developer, которые вполне востребованы как полноценные специалисты, особенно когда логику переносят в базу. Это в первую очередь для Oracle PL/SQL.
В Oracle можно не только на PL/SQL, но и на Java, и на С++ делать процедурный код, и писать прямо в нём непосредственно SQL-выражения: они там являются расширением исходного языка. Аналогично с MS SQL Server — на любом .NET-языке. SQL — это уже вообще большой класс языков, в отличие от HTML.

Перенос логики в базу — жаргон: логика в любом случае где-то должна исполняться. Чем дальше от данных и нужного потока событий — тем больше накладных расходов. А вообще, назначение программирования — передача выполнения задачи исполняющему устройству, т.к. само выполнение задачи излагается некоторой системой команд, которую не целесообразно каждый раз вводить самому. По этой причине не важна и форма языка: декларативный (HTML, CSS, SQL в DDL и DML) или процедурный. Так что не важно, с чем работают — операционкой или чем-то ещё. Например, в Windows есть JScript, задуманный, в первую очередь, как shell-язык. При этом на нём прекрасно можно решать многие задачи сложной синхронизации распределённых систем, включая и работу с базами данных, и работу с терминалами сбора данных. Главное, чтобы было COM API.
есть сомнения, что заголовок статьи ошибочный, и нужно было написать «Какие языки программирования учить в 2020-м?»
Потому что сейчас то время, когда знания одного я.п. вряд ли достаточно.
На счет JavaScript, имхо, не только библиотеки и фреймворки, но css&html. В отличие от других языков, где это опционально, в случае JS это обязательные основы.
А вообще, считаю, что статья КАК ВЫБРАТЬ, была бы полезнее КАКОЙ ВЫБРАТЬ. Причем не только в сфере программирования. Но люди сравнительно редко задают такой вопрос)
Тут надо с начала понять чем хочет заниматься новичек.
Игры — C++, C#.
Бекенд — Java, C#.
Эмбедед — С, С++.
Мобилки — Java, Kotlin, Swift.
Фронт — JavaScript, TypeScript
Десктоп — С++, C#, Java
Работа с данными и дата саенс — Python, R, Scala
А что не так с самым популярным языком бека, что вы его не включили?
UFO just landed and posted this here
Если что, вашу ссылку Гугл мне сейчас показал вот так: с Java первым пунктом и с «Django» в списке языков :)

Чёртов гугол) Мне такое выделенным ответом:
«PHP is among the most popular backend programming language. Though PHP is facing tough competition from Python and JavaScript, the market still needs a large number of PHP developers.»
Вроде так по статистике.

Вероятно правильный ответ на вопрос "какой язык учить в 2020": язык народности хань. А если по первому языку программирования, то актуален, вероятно, только для тех, кто выбирает для самостоятельного изучения, т.к. если это профильная школа или институт, то там особо не спрашивают (в МФТИ и прочих профильных вузах изучают не то 4 не то 6 языков), поэтому вопрос выбора менее актуален. Поэтому важна цель изучения, какой результат и в какие сроки должен быть получен. Советую два варианта: либо Питон, либо самый быстро-простой: html+css и добавить js и потом фреймворки js. Мой путь: питон, html+ css, ковыряю-смотрю: js, brython, pyston, rust, D, C/C++/асссемблер. Возможно: java, php. Для удовольствия: Ada.

Соглашусь с вышеприведенным комментарием, что надо начинать с области применения.
Но замечу, что со связками языков не всё так просто. Кроличья нора заметно глубже. Это же замечание и к статье.
Рассмотрим на примере Python. Упомянутые в статье ML, data science на Python, да, работают быстро, но именно потому, что написаны на c. Т.е. Python (кстати, как и многие другие языки) по сути повторил путь c++, а именно предоставил синтаксический сахар важный для прикладных задач и при не потерял быстродействие.
Итого, перед тем, как делать вывод о том, что нужно учить Python, т.к. нравится ML, нужно сначала уточнить хочется пользоваться, либо создавать, либо и то и другое вместе. Т.е. учим Python, либо с, либо с и Python, соответственно.
Аналогично выбор, что учить для Android может свестись, например, к java и c/c++, а не java, если хотим писать рендеринг для тех же мобильных игр.
Самая простая рекомендация для новичка это найти работу своей мечты на сайте вакансий, посмотреть десяток, другой вакансий, погуглить упоминаемые там языки, фреймворки, технологии и т.п., сформировать минимальный джентльменский набор и вперёд, учиться, учиться и учиться :)
UFO just landed and posted this here
Нет Perl, который вполне себе дружествен для новичков. А лама бук совсем не K&R, да и сразу позволяет делать полезные вещи.

В любом случае одного языка мало, и вы учить язык != научиться программировать.
Статья так хорошо началась и продолжалась. Читал с мыслью: «ну наконец-то! я нашёл годное руководство.» Трудно мне, новичку, разобраться с первым для изучения языком.
И… статья неожиданно закончилась без ответа. Автар, что делать-то? =)
Ну давайте пойдём по порядку, обозначенному в тексте. Пункт первый — определиться с задачами: а из-за чего изначально возникла потребность «разобраться с языком», чего вообще хочется? Когда на это ответите, смогу что-то дальше сказать.
Спасибо тебе, добрый человек.
Я учился в институте 1 курс на компьютерном, но решил сменить специальность. Теперь, когда я в другой вообще не компьютерной специальности достиг всего и стало невыносимо скучно, я решил вернуться в компьютерные науки (мне 31) и уйти с прежней работы. У меня хорошо получалось тогда вроде и всегда тянуло к ПК.
Мне интересно одновременно всё, кроме дизайна внешнего вида чего-либо: нет способностей к дизайну.
Всё звучит маняще: бэкэнд, разработка под мобильные, машинное обучение, ИИ…
Решил, что надо начать с чего-то, а потом по обстоятельствам буду развиваться.
Так вот, перечитав несколько дней споры на каком языке начинать учиться программированию (С, С++, Пайтон, С#, java) выбрал Пайтон. Говорят, что для начала пойдёт, а после освоения можно и на С++, если будет необходимость. Но до сих пор не уверен.
Ещё одни пишут: нужно начать снизу: С, ассемблер, а потом на языки высокого уровня
Другие пишут: начни с выского, а по необходимости разберёшься в низком уровне.
А ещё помимо программирования столько всего пишут надо, что не знаю за что хвататься: освой unix, linux, GIT, фреймворки, джанго, flask,AAAA!!! =) Как подступиться? один линукс чего стоит
image

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


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


Нужно программировать программируя, а не заниматься языкодрочерством.

Бросьте монетку. Орел Java, решка C#. Самые середнячки среди ЯП. Не такие сложные как C++ и не такие тормозные как Python. Можно сделать все. От слова совсем.
Извините, что отвечаю с большой задержкой.

Понял, что в посте не написал толком вот что. Помимо всякого «где применяется язык и сколько вакансий», есть ещё субъективное внутреннее ощущение «моё / не моё». И по-моему, оно тоже важно, но когда выбираешь первый язык, заранее не понять, будет ли он «твоим» — поэтому в посте об этом подробно не писал (только что Java многим кажется скучной). А теперь понимаю, что есть ещё ваша ситуация «вроде первый язык выбрал, но в выборе не уверен». И тогда появляется такой вопрос: а Python какие ощущения вызывает? Если пока всё нравится, по-моему, это аргумент в пользу «с ним и продолжать».

И, как мне лично кажется, Python как раз сочетается с запросами «параллельно нужно выучить линукс и это пугает» и «не дизайнить внешний вид». Он хорошо подходит для каких-то мелких консольных утилит, на которых можно и набивать руку с самим Python, и заодно осваиваться в линуксе, запуская их из командной строки, и при всём этом вместо сферических коней в вакууме делать что-то практически применимое для собственного использования (но при этом не требующее дизайнить внешний вид, в отличие от других пользовательских штук — мобильных приложений, GUI-программ, сайтов).
Отлично! Продолжу пока python. Спасибо
Думаю, ваш вопрос не в языке и не в его выборе. Язык — это отвёртка. Она приносит пользу только в руках тех, кто знает, что, зачем, когда и как ей крутить. А тем, кто не знает, приходится добавлять ещё нескольких человек с очевидным и неизбежным падением эффективности.

Хотите освоить программирование? Тогда для этого есть один подход и учебный материал. Это начальный уровень сложности. Хотите освоить технику и технологию по направлению информатика и вычислительная техника? Тогда это другой подход и другой учебный материал. Хотите соревноваться в решении олимпиадных задач по программированию? Тогда это третья стезя. Зачем вообще программирование? Чтобы иметь возможность многие типовые задачи передать на выполнение более простым исполняющим устройствам.

С точки зрения максимальной широты применения и разнообразия уровня сложности, следует выбрать C, C++ и ассемблер. На них вы сможете ознакомиться со всеми уровнями архитектуры вычислительных систем, увидеть, как одни вещи выражаются через другие и что нет ограничения на количество таких уровней. Освоить технологии сборки и разные подходы к этому процессу. И для вас не будет вопросом, что происходит, когда применяют JavaScript для решения задач, которым достаточен «статический» HTML, CSS и XML. Как, в конечном счёте, десятая вода на киселе из этого кода попадает на CPU и что там делает с 1000-крытными накладными расходами.

Программированию на них стоит учиться параллельно: строить решение одной и той же задачи на всех языках, начиная с понятного. Это позволит заметить одну неприглядную вещь: все языки на одно лицо и предназначены для выражения одного и того же. У одних это лучше, у других — сложнее, у третьих вообще никак, и тогда привлекают иные средства, которые можно вызывать из кода на таком языке. Можно даже с помощью HTML-страницы и кода в ней выдвинуть лоток CD/DVD/BR-привода и вывести сообщение «клади деньги».

И весь смысл в том, что и зачем выражается, а не чем и как. А ещё — заметить, что программировать можно не только языками программирования, а и другими вещами, на других уровнях и типах исполняющих устройств. Что роль языка программирования может выполнять практически что угодно: главное, чтобы исполняющее устройство соответствующим образом интерпретировало поступающий к ней поток объектов.
А, тем временем появляются очередные разработки языков программирования на базисе идей Forth (Форт) языка.
EvilVM В этом проекте — реализация на Ruby с ассемблером. :)

Начинал с go и не жалею, изначально привлекал backend, но языки с горой фреймворков для запуска банального сервера оттолкнули этими самыми фреймворками. В го совсем не так. 5 строк чистого го и сервер запущен) Из минусов для начинающих могу выделить только то что мало вакансий, но и тут зависит от города в котором живешь. Но есть и большие плюсы, за то время что работаю познакомился с многими технологиями, пришлось немного вникнуть в девопсовскую часть и вообще делал штуки с которыми знакомые .net / java джуны не сталкивались за свои 1-1.5 года опыта, при моих меньше года. По мне так го хорошо подходит для первого ЯП.
Спасибо за текст. По-моему для профессионального разработчика, критерий выбор нового языка прост — это тот язык, под который вакансий больше :) Реально-то конечно оно все непросто, да и не так уж часто новые языки появляются.

Я пишу для linux/embedded на Python (95%) и С++ (5%). Но возникает мысль, что Python совсем ушел в нишу ширпотреба, сейчас его тупо знают все, любой программист может скачать пару туториалов и начать писать на Python и это даже будет работать. Так что с поиском следующей работы есть опасения, что это может быть не так просто. Пробовал Go и Rust — в принципе работает, но каких-то конкретных задач под это пока нет, разве что pet-проект запилить. Но вот супер мотивации пока тоже нет, в плане того чтобы какие-то задачи решались красивее или эффективнее.

По остальным языкам, из того на чем писал:

Swift — чисто эппловская фича, если хочется писать под iOS, самое то. Ниша довольно востребованная в плане вакансий, но скучная и унылая (имхо) из-за кучи ограничений Apple. 4 года отработал iOS разработчиком, больше не хочу, задолбали все эти сертификаты, UI-гайдлайны, ревью в App store, изменения языка каждый год, ну и просто скучно как-то.

Kotlin — в основном Android. Зоопарк телефонов с кучей разных экранов, разрешений, dpi и особенностей железа, но в принципе разрабатывать можно, и в чем-то даже повеселее имхо чем с iOS. Но и Google тоже идет по пути закручивания гаек, то нельзя, се нельзя, то что раньше работало, уже не работает и пр.

По-моему вся движуха сейчас в вебе, а под Embedded мало что принципиально нового появляется. Хотя те же Go/Rust на Raspberry Pi вполне работают, и какие-то библиотеки под это дело даже есть.
критерий выбор нового языка прост — это тот язык, под который вакансий больше
Смелое утверждение. Получить потенциальную галеру, нелюбимую работу и как следствие — выгорание. Так себе перспективки.
Опять же, множество вакансий предполагает множество соискателей.
UFO just landed and posted this here
>Разные лучше подходят для разных задач и людей.

Вот в этом месте я бы добавил еще, что
1) нет смысла пытаться угадать на несколько лет вперед, а следует делать что то (выбирать язык например) исходя из текущей обстановки.
2) Следует стараться понять основы и дух языка, который изучаешь, тогда будет правильный применение языка
начинающему сейчас интересоваться языками программирования — ровно как в 80-е годы школьнику с энтузиазмом вникать в тонкости бухгалтерии.
Тот, кто сейчас начинает и хочет быть на острие, делать что-то по-настоящему новое и так далее — должен заниматься нейросетями. А программление рассматривать только как инструмент доступа.
Для самых продвинутых после достижения какого-то уровня понимания и умения в нейросетях — нужно уходить туда, где только и смогут работать настоящие полноценные, в квантовые компьютеры.
Выбор языков программирования становится куда более определён, не так ли?

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

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

Вы делаете типичную ошибку: вот есть занятие, в котором уже миллионы (под 20, кстати) людей. Давай тоже туда пойду, кусок хлеба будет. Вы ведь уже в программировании — и естественно защищать когда-то сделанный выбор.
Но.
Начинающему нужно идти во что-то действительно новое, чтобы через 20-30 лет (а не завтра!) быть с действительно полезным стажем и положением. А программление — уж как-нибудь, порог вхождения низкий, кому нужно для профессии — овладевает без проблем.
Уж поверьте программисту
с 40-летним стажем :-)

Ну давайте стажем меряться теперь.


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


Звучит это, в общем, как бессмертное Рудольфово «завтра не будет кино, газет, а будет одно сплошное телевидение».

Бесспорно, это — риск. И, возможно, начинающему стоит задуматься о чём-то другом. Но уж точно не о том, чтобы сделать программирование делом жизни.
Это как бухгалтер в 50-е годы. Пока ещё важный, образованный человек, но кто он будет в 70-х?
Кстати, критикуя «мою» пару выборов — можете ли предложить другие? Понятно, что много прорывного есть и в физике и в биологии и т.п., но — в как-то связанных с программированием областях?
Ну, и называть нейросети хайпом, когда уже множатся магазины без касс, но с нейросетями, когда автопилоты автомобилей без этого никак, и так далее — можно только, если сам не смог впрыгнуть в этот трамвай.
Что же касается квантовых компьютеров — другого пути сделать рывок в производительности не видно. А рывка в явном виде требуют те же нейросети. Уже сейчас, практически во младенчестве, они требуют максимума от традиционных компов.
когда автопилоты автомобилей без этого никак

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


можно только, если сам не смог впрыгнуть в этот трамвай

Нет никакого трамвая. Мы не понимаем, как устроена нейросеть внутри и почему она принимает те, или иные, с позволения сказать, решения. Ну и если я вдруг сойду с ума и захочу заниматься хренпоймичем — меня несколько раз в месяц зовут в Долину во вспыхивающие тут и там стартапы, так или иначе связанные с нейросетями.


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

См. «сепулька». Станислав Лем описал этот паттерн в дневниках Ййона Тихого, а до него — еще барон Мюнхгаузен вытаскивал себя за волосы из болота.

Автопилоты пока только убивают людей на ровном месте.
Детский сад, честное слово :-) Люди тоже убивают людей на ровном месте, и статистика показывает, что уже сейчас — чаще.
Мы не понимаем, как устроена нейросеть внутри
Ну понятно, о нейросетях Вы по газетным заметкам судите, на самом деле.
Ни в одном по-настоящему серьёзном алгоритме никто не скажет, что там происходит внутри, даже авторы. Это множество раз доказано историей. Теоретически можно, в отдельных случаях гигантскими усилиями разбираются, как в случае «истинно российской Астры» (кстати, замечу, что и результат неплох, и к тем, кто над этим работал, у меня нет ничего, кроме похвалы).
На практике — все сколько-нибудь сложные системы работают по принципу чёрного ящика.
В конце-концов, у человека тоже невозможно выяснить, что там было в голове в ходе выработки решения. Спросить-то можно, но любой следователь скажет, что это нечто заново выдуманное, а не то, что было на самом деле.
другого пути сделать рывок в производительности не видно. А рывка в явном виде требуют те же нейросети.

См. «сепулька». Станислав Лем описал этот паттерн в дневниках Ййона Тихого, а до него — еще барон Мюнхгаузен вытаскивал себя за волосы из болота.
Вы сами-то логику видите в этом Вашем пассаже? А ведь её там нет.

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

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

Эм?
Это не так. Мы отлично понимаем КАК она устроена. Люди пишут ее движок. Люди ее обучают.

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

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

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

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

В нейронных сетях ЕСТЕСТВЕННО есть алгоритм. Иначе бы их в принципе не могли бы запрограммировать.
Или про какие нейронные сети вы говорите?
Алгоритм это грубо говоряя чётко заданный набор инструкций.
Нейронный сети не программируются, то есть этот самый алгоритм, он же чётко заданный набор действий, не получают.

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

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

«Обучение» — это просто устоявшийся в отрасли термин для
Набор чисел-коэффициентов сначала меняется по конкретным известным математическим формулам

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

И проргаммист просто пишет программу с алгоритмом и потом эта программа выполняется… Кстати, а где она тогда выполняется?

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

Извините, но тогда это не алгоритм работы нейрональной сети, а скорее алгоритм её обучения.

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

Конечно — я ведь так и написал на одну строку выше того, что вы цитируете:
«Обучение» — это просто устоявшийся в отрасли термин для

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


Но это как бы всё частности и решающим то всё равно является «набор чисел-коэффициентов» по который и влияет на финальный результат.

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

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

Угу, с алгoртимом обучения мы уже разобрались, повтoрять не надо. А вот чёткого и полноценного алгоритма работы в виде «точно заданного набора инструкций» я всё ещё не вижу. Ну там " if a > b then c else d" или что-то в этом роде.

Ну так почитайте хоть немного про нейросети — тут я только совсем кратко могу описать. Если говорить о свёрточных сетях (которые для изображений часто используются, например), то там всё строится на элементарных операциях (+*) с матрицами и простых нелинейных функциях типа f(x) = max(0, x). Эти простые математические операции в явном виде программистом собираются в фиксированную последовательность, которая никак не меняется в процессе обучения и работы нейросети. Во время обучения вычисляются оптимальные коэффициенты в матрицах, и подставляются в эту (заданную программистом) последовательность вычислений.
Прочитал. И в моём понимании то, что происходит в нейросетях именно алгоритмом не является.
Ну, значит ваше определение слова «алгоритм» отличается от общепринятого «набор инструкций по решению задачи для некоторого исполнителя». Если дело просто в определении термина, то действительно нечего обсуждать тогда.
Вы похоже даже на примитивном уровне не понимаете что такое нейросеть и что такое «обучать нейросеть».

Обучение нейросети — это просто подбор определенных параметров под заранее запрограммированый алгоритм.

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

ВСЕ алгоритмы анализа и работы с данными — были запрограммированы понятными алгоритмами.
Параметры — подобраны автоматически благодаря одному алгоритму, и используются благодаря другому алгоритму.
Ок, давайте я в последний раз попытаюсь объяснить что я имею ввиду. Вот скажем вам нужно получить случайное число. Вы пишите программу, в которой какие-то алгоритмы, которые в какой-то момент запускают какую-то функцию, которая тоде внутри имеет какие-то алгоритмы и на выходе выдаёт вам какое-то случайное число.
Но при этом в моём понимании сам «случайный процесс» алгоритмом не является. Он привязан к какому то физическому явлению или ещё чему-то «неалгоритмическому».
Вы под случайностью здесь понимаете «истинную» случайность, типа специальных хардверных генераторов шума в процессорах, или псевдослучайные числа, которые обычно и генерируются функциями типа rand() в большинстве языков и библиотек? Если второе, то это вполне себе алгоритм: абсолютно детерминированная последовательность простых математических операций, на вход которым подаётся что-нибудь типа текущего времени.
А текущее время у нас разве не относится к «физическим явлениям»?
Относится, как и любые вычисления в компьютерах. Не нравится время — делайте `random.seed(123)` в начале программы и всё.
Но при этом в моём понимании сам «случайный процесс» алгоритмом не является

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

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

Просто в контексте понятия алгоритм для меня это вещи «одного порядка».

В конце-концов в головах у нас тоже нейросети и работают они не по алгоритмам.

В конце-концов в головах у нас тоже нейросети и работают они не по алгоритмам.

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

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

И одно только наличие причинно-следственных связей не делает автоматом какой-то процесс сразу алгоритмом.
В нейросетях на компьютере случайность существенной роли не играет — как я писал, можете в начале кода поставить типа random.seed(123) и будет полностью детерминированный алгоритм.
С мозгом, конечно, сложнее — много непонятного в процессах в теле человека.
UFO just landed and posted this here
Мы не понимаем, как устроена нейросеть внутри и почему она принимает те, или иные, с позволения сказать, решения.

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

Ведутся, никто не спорит.


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


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


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

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

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

Обоснования какого утверждения? Того, что нейросети не примут такого решения? Вы его сами же сразу и написали: «на сегодня основной приоритет в разработке автопилотов — вождение по ПДД». Де фвкто это означает, что автопилот разрабатывается в том же направлении, что и первый Deep Blue, который вчистую проигрывал людям. То есть, мы умеет в петафлопсы, завтра завезут (мы так думаем) ксерафлопсы, будем тупо перебирать варианты.


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


Ну и, наконец, вот мои три примера (DrPass, вам тоже). Подъезжаю к перекрестку, пустому, зимой. Навстречу едет одна машина, и вдруг ее начинает заносить строго в меня. Имя той машине — камаз. Пример номер два: те же действующий лица, только там перекрестка не было, но если бы был — ничего бы не изменилось. У лесовоза на встречке лопается крепежный трос и на дорогу с его левой стороны начинают сыпаться бревна. Я на максимуме оборотов на второй успел проскочить. И третий. Обычный перекресток, слева метрах в ста едет на скорости 140+ маладэц, за ним с мигалками гайцы. Я стою первый, у самой лицевой. Без раздумий — газу и вперед, потому что вероятность того, что он захочет попытаться уйти в поворот и не вписаться — заметно выше нуля, и таки да — он пытается и улетает в столб строго по тому месту, где секунду назад стоял я.


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

Обоснования какого утверждения? Того, что нейросети не примут такого решения? Вы его сами же сразу и написали: «на сегодня основной приоритет в разработке автопилотов — вождение по ПДД».

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

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

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

Где перебор вариантов в современных автопилотах — я не знаю, так подробно в них не разбираюсь. Но не читал нигде про наличие такого перебора. Про это у вас тоже нет никаких пруфов?
Я трижды оказывался в ситуации «чтобы избежать аварии, надо тапку в пол и под красный»

Это возможно ведь только в том случае, если вы стоите на светофоре первый, а сзади кто-то летит без тормозов. Думаю, этим можно пренебречь, учитывая крайнюю редкость такой ситуации, и что такое столкновение не так уж для вас и опасно, если машина современная, и у вас есть подголовники.
UFO just landed and posted this here
10-15, я бы сказал. В моем 2010 выпуске уже кто-то в дипломе использовал. И это провинциальный физфак.
Так технологии-то достаточно старые. Я, минуточку, в конце 1990-х в институте изучал нейросети и машинное обучение, по книгам из 1980-х. Просто в 2010-е произошёл качественный скачок в применении, потому что к нам в компьютеры пришли доступные параллельные вычислители на несколько тысяч потоков каждый.
Я больше о том, что они уже были на слуху в сравнительно далеких от IT кругах.
UFO just landed and posted this here

Как развернуть список на квантовом компьютере...

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

Какой язык учить? Тот который лучше подойдет для решения вашей задачи.

Язык это инструмент а не культ.
Я бы в начале выбирал тот язык который знает или учит мой друг. Так же как и выбирал бы дистрибутив линукса.

В самом начале обучения языку и алгоритмам важно общение и обсуждение с человеком примерно твоего уровня.
Проблема этой статьи в том, что потерялся ключевой вопрос — для какой конечной цели вообще учить язык? Потому что одно дело, когда учишь, чтобы углубиться, получить знания, совершенствоваться и в итоге мейби-мейби стать самым крутым в своей области, и совершенно другое, когда надо на бегу что-то ухватить, кое-как разобраться и быстро-быстро начать этим зарабатывать. И рекомендации тут диаметрально противоположные.
В первом варианте надо начинать не с чего полегче и попопулярнее, а с языка, который поможет настроить мозги и выработать необходимые качества для работы. И такой язык был, есть и будет в обозримой перспективе только один — Паскаль. Заменить его совершенно нечем, потому что из всех языков, обладающих необходимой строгостью и притом достаточно простых для освоения, он единственный настоящий. Есть еще два-три специальных учебных языка, но на них никто никогда не написал ни одной реальной программы.
Во втором варианте надо хватать учить, что быстрее, проще и популярнее у работодателей, не оглядываясь на качество. Поэтому надо учить даже не верстку, а бутстрап, не джаваскрипт, а джквери и реакт, не пхп, а что там у нас сейчас самое ходовое?.. ларавель, кажется… — и херачить, херачить, херачить. Хороший программист при таком обучении, разумеется, не получится никогда, — но хорошо надрючившись вполне можно стать крепким мидлом с соответствующей зарплатой и радоваться жизни, а это для многих как раз и есть конечная цель.
Можно сформулировать еще несколько вариантов — и для каждого рекомендация будет своя. Что же касается всего перечисленного в статье, то это имеет смысл рассматривать только как второй язык для тех, кто уже умеет собственно программировать и хочет превратить это умение в профессию.
UFO just landed and posted this here
Строгость во всем нужна. В оформлении — код структурирован, каждый блок имеет ясные начало и конец. Тут паскаль просто чудесен — вот begin, вот end… Правда, оператор goto… Но на фоне остального эту мелочь можно и потерпеть.
В типизации — да, это важно. Строгие типы, не обязательно статические, но тогда с явным и четким преобразованием типов. При этом систему типов лучше не усложнять, чтоб не забивать чрезмерно мозги новичку.
И очень желательно, чтобы не было никаких семантических излишеств. То есть если мы решили использовать какой то элемент, мы не должны сталкиваться с вопросом «каким из кучи равнозначных способов это нам написать?» — способ должен быть единственным. А если способов несколько, между ними должны быть достаточно четкие различия, чтобы выбор не составлял труда. А то ладно еще семантический сахар тоннами на всех местах, а в PHP вон функции и свойства объектов взаимозаменяемы…
И разумеется, никаких чудес в стиле джаваскрипта (не буду приводить примеры, слишком уж их много).
И боюсь, что я еще не все вспомнил, что важно на практике.
UFO just landed and posted this here
Не вижу причин заколачивать гвозди микроскопом, когда есть молоток. Ява — язык жестоко объектно-ориентированный, а это совершенно лишняя для начинающего сложность. Для сравнения, классический Паскаль (а я говорю именно о нем, а не о современных продвинутых версиях) имеет самый минимум объектности, и этого как раз достаточно. Если же не вгружаться в ООП, то вместо нормального обучения мы будем плодить недоучек, а это еще один способ превратить программиста в конченого говнокодера.
C# я совсем не знаю, но судя по тому, что он считается аналогом Явы, к нему это же соображение так же подходит.
Вообще, если и выбирать из всех языков си-образного семейства в учебных целях, лучше всего смотрится собственно C. Вот только слишком уж он низкоуровневый, да еще и указатели… Так что и тут Паскаль лучше.
Да и еще одна мелочь, которую я забыл упомянуть: в паскале переменные объявляются пачкой в начале блока. Это дополнительно дисциплинирует и прививает хороший стиль.

А вот что касается строгости синтаксиса, так это вы просто не поняли прикола. В Паскале нет конструкции if… Там есть только конструкция if...then, где if и then работают ограничителями — не менее надежно, чем скобки в if() в других языках.
Ну и главное мое соображение в этой части — потерять фигурную скобку довольно легко (даже интегрированные среды не всегда спасают), а вы попробуйте потерять целый begin или end…
В классическом Паскале нет ни инкапсуляции, ни наследования, соответственно для изучения ООП он непригоден. Я понимаю, что можно имитировать, как в GTK+, но это не для начинающих.
Недостатки классического Паскаля очень хорошо нивелируются тем его «достоинством», что его реализацию в живой природе найти нереально. Все равно, какой бы компилятор Паскаля вы не накопали, там будет ООП.
Виноват, надо было привести конкретную цитату:
Для сравнения, классический Паскаль (а я говорю именно о нем, а не о современных продвинутых версиях) имеет самый минимум объектности, и этого как раз достаточно.
Я считаю, что ООП для новичка — перегруз. Ему бы сперва хоть с процедурами разобраться. Вот второй язык очень неплохо учить именно объектный, а первый лучше без этого.
А чуточка объектности и в Паскале есть, для знакомства — в самый раз.
Я считаю, что ООП для новичка — перегруз

Но это же не означает, что нужно его выкорчевать из языка. Наоборот, если язык сочетает в себе процедурный и объектно-ориентированный подходы, это удобно. Сначала объяснил простую парадигму, потом перешёл к более сложной.
А никто ничего корчевать и не собирается. Просто в классическом Паскале развитого ООП нет, а в реализациях оно достаточно упрощенное, чтобы не составлять для новичка большой проблемы.
В классическом Паскале нет ничего, сложнее RECORD. Это — не ООП.
Мы, видимо, разное понимаем под классическим Паскалем. ТП6.0, насколько я помню, имел простенькую реализацию объектов.
Да, Турбо Паскаль имел. Но «классический» — это тот, который был описан автором — Никлаусом Виртом, и там ничего такого не было. Кстати, этот язык он придумал специально для обучения. Потом на его основе сделал Модулу-2, но про неё я знаю только, что там не было GOTO.
Все верно, только одна тонкость: Паскаль Вирта никогда не был реализован в чистом виде. Только вариации. Поэтому практическим стандартом во времена расцвета Паскаля (то есть в конце 80-х и начале 90-х) явочным порядком стал Турбо-Паскаль. На него я и ориентируюсь.
Всё же, «классический» — это виртовский, иначе возникает путаница. Просто «Паскаль», согласен, скорее Турбо. Как просто «Basic» — это Visual, но он тоже не «классический».
На мой вкус аналогия с бейсиком не годится. У бейсика стандартный вариант был реализован даже не один, а много раз, и турбо-бейсик не только здорово отличался от стандарта, но еще и был не самым распространенным.
С Паскалем все иначе — стандарт не реализован вообще, а среди реализаций кроме Турбо-Паскаля выбирать просто не из чего.
а среди реализаций кроме Турбо-Паскаля выбирать просто не из чего.

FreePascal, ABC Pascal, Delphi… всё это достаточно известно, бесплатно и главное — современно.
Ну вы все-таки имейте немного совести. FreePascal соотносится с Паскалем как Objective C и C. С ABC Pascal уже тоже так же. А Delphi вообще откровенно другой язык.
Это в каком смысле? Они обратно совместимы, и классический Паскаль является их подмножеством, да и Турбо-Паскаль тоже, если не считать платформенно-зависимых библиотек, вроде модуля crt, overlay или там graph.
Вот-вот — турбо-паскаль тоже является их подмножеством. То есть он заведомо ближе к оригиналу.
И, знаете ли, я уже несколько потерял вашу мысль. Вы с чем в моих словах спорите, собственно?
Я не считаю Турбо-Паскаль подходящим языком для обучения программированию в 2020-м году :)
Сам по себе Паскаль неплох, но реализация должна быть современной, что-то из вышеупомянутого.
Ну вот не знаю я ничего подходящего. Если вы сумеете найти, вам и карты в руки.
Я уже говорил — FreePascal и ABC Pascal гораздо хуже Турбо-Паскаля, а Delphi — просто другой язык.

У меня складывается впечатление, что если бы мы обсуждали, какой из современных языков больше похож на латынь, вы бы настаивали на арабском.
Я уже говорил — FreePascal и ABC Pascal гораздо хуже Турбо-Паскаля, а Delphi — просто другой язык

Почему вдруг они «гораздо хуже»? Вы там можете взять и написать простые программы, все те учебные упражнения, ради которых Паскаль и создавался, т.к. там в полной мере реализован стандартный Паскаль. Вы там можете по мере развития делать более сложные упражнения, изучить ООП, изучить современные методики и приёмы разработки. И вам для этого не понадобиться собирать багаж бесполезных знаний и учить давно мёртвые библиотеки, без которых в Турбо-Паскале и шагу ступить нельзя. Они гораздо лучше Турбо-Паскаля, по крайней мере, если ваш компьютер выпущен после этак 1999 года, когда Турбо-Паскаль без специального патча вообще перестал работать на новых машинах ввиду корявой реализации модуля Crt :)
Ну и Delphi — отнюдь не другой язык, с FreePascal он совпадает процентов на 99.
У меня складывается впечатление, что если бы мы обсуждали, какой из современных языков больше похож на латынь, вы бы настаивали на арабском.

Боюсь, в этой аналогии вы были бы человеком, который считал бы латынью итальянский 19 века ;)
Они гораздо хуже, потому что дальше от прототипа. Учебные упражнения можно писать и на РАЯ, тут же речь шла именно об полноценном изучении полноценного языка, при этом сохраняющего нужные дидактические качества. А ваша стратегия требует подхода «вот тут играем, тут не играем, а тут рыбу заворачивали». Лично я не хотел бы себе и тем, с кем мне придется работать обучения таким методом — я видел, к чему это приводит, и мне результат сильно не понравился.
Если уж вам так хочется свеженького, ну давайте возьмем ваши Дельфи. Я это тоже уже говорил. Но я их не учил, не знаю и обсуждать не могу. Поэтому, как бы вам ни хотелось, признать, что Дельфи лучше Паскаля я не могу. Ну опаньки.

И да, итальянский даже современный к латыни все же сильно ближе арабского. А 14 века — гораздо ближе, чем современный. Собственно, итальянский и испанский — наименее измененные версии «народной латыни».
тут же речь шла именно об полноценном изучении полноценного языка

Что такое «полноценное изучение полноценного языка»? Получить ачивку: «Я выучил все конструкции игрушечного, ни к чему не пригодного нынче языка программирования, разработанного, когда Брежнев ещё не был дряхлым?»
Зачем это, какая ценность?
А ваша стратегия требует подхода «вот тут играем, тут не играем, а тут рыбу заворачивали»

Нет, не требует. Вы же как-то ухитрились выучить условный оператор перед тем, как учить циклы, а циклы перед тем, как учить указатели. Вот тут то же самое. Абсолютно все языки, будь-то классический Паскаль или там Хаскель, человек изучает последовательно, раскрывая их функционал в некоем удобном для употребления порядке. Так что лучше — грубо говоря, пройти десять ступеней на одном языке, потом вынужденно забросить его (язык-то закончился, а информации для решения современных задач недостаточно) и искать какой-то другой, или пройти двадцать ступеней на одном и том же?
И еще один вопрос: а вы уверены, что Дельфи меньше отличается от Паскаля, чем Си от Си++?

От FreePascal и прочих современных реализаций? Да, естественно. Дельфи — это эталон современного Паскаля, на который ориентируются разработчики других компиляторов.
И еще один вопрос: а вы уверены, что Дельфи меньше отличается от Паскаля, чем Си от Си++?

От FreePascal и прочих современных реализаций? Да, естественно. Дельфи — это эталон современного Паскаля, на который ориентируются разработчики других компиляторов.

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

А к чему вы спрашивали про Паскаль, а не про современные его переделки, если я писал
«Ну и Delphi — отнюдь не другой язык, с FreePascal он совпадает процентов на 99»?
И можно ли вообще называть «переделками» естественную эволюцию языка, притом совместимую со стандартом?
А отвечая на ваш вопрос, меньше ли Delphi отличается от Паскаля, чем С++ от С — да, меньше. Намного меньше. Delphi — это просто развитие языка, новые удобные конструкции без смены парадигмы программирования. С++ — это полностью иная парадигма, программирование, построенное на темплейтах/макросах.
Про Паскаль я потому и спрашиваю, что с самого начала говорил о Паскале, а обсуждение Дельфи притащили сюда вы.
И вот как раз Freepascal, который похож на Дельфи на 99%, от Паскаля как раз и отличается настолько же, насколько C от C++. Причем ровно настолько же — потому что изначально плюсы как раз и означали добавление ООП к простому С. Так что все как я и сказал: Дельфи — это НЕ Паскаль.
Далее, отмечаю, что если до вас с очередного повторения не дойдет, что я вам не мешаю считать ваши Дельфи образцом всего, что вам угодно, мне придется усомниться в вашем умении читать буквы, потому что я это вам почти дословно повторил уже раза три как минимум. Ну или предположить, что вы тот самый эстонец из анекдотов.
Также в очередной раз повторяю, что я Дельфи не изучал и не планирую, поэтому и обсуждать их тоже не собираюсь. Из того, с чем я знаком, меня устраивает классический Паскаль в борландовском варианте реализации. И довольно об этом.
Хоспади, да что, я вам как-то мешаю любить ваш Паскаль? Я просто написал, что он устарел и для обучения не пригоден, объяснил, почему, рассказал, чем его можно сейчас заменить.
Если вам всё это неважно, продолжайте любить его себе на здоровье и рассказывать, чем якобы плохи современные реализации, которые вы и в глаза-то не видели (Пастернака не читал, но осуждаю (с)).
В конце-концов, это же мило — так настырно промоутировать язык, среду которого в 2020-м году банально запустить только опытный ИТшник сможет :) Самый лучший фильтр для начинающих программистов, если смог ЭТО запустить, значит, точно программером станешь.
Вы мне написали, что ПО ВАШЕМУ МНЕНИЮ он устарел и все такое. Я с вами не согласен, только и всего — а привести убедительных доводов вам не удалось.
Так что останемся при своих мнениях.

А насчет среды, которую запустить, так вы не представляете, какие залежи древнего, но вполне живого железа можно найти в закромах наших учебных заведений. Подозреваю, что даже «Искру-1030» в рабочем состоянии найти не проблема. Ну и к слову, да: угрюмый сундук без игрушек и твиттера — лучший помощник начинающего программиста.
Вы мне написали, что ПО ВАШЕМУ МНЕНИЮ он устарел и все такое.

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

Ну и к слову, да: угрюмый сундук без игрушек и твиттера — лучший помощник начинающего программиста.

И самое главное без интернета. Интернет это главное зло. А учатся пусть по книжке «Паскаль для персональных компьютеров» 1991 года.

Для запуска ЯЗЫКА программирования надо не железо искать, а писать транслятор. И устареть могут только транслятор и библиотеки, а не сам язык.

Представляю себе, как невыносимо лично вы мучились, уча азбуку, изобретенную аж тысячу лет назад…
Для запуска ЯЗЫКА программирования надо не железо искать, а писать транслятор. И устареть могут только транслятор и библиотеки, а не сам язык.

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

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

Я никогда не учил «азбуку изобретённую 1000 лет назад». Я даже алфавиты изобретённые 1000 лет назда не учил. И клинопись не учил. В том числе и потому что они устаревшие и у нас сейчас новый алфавит которому чуть больше ста лет. И честно говоря я вообще не понимаю причём здесь «азбука» и зачем вы её приплели.
Ну да, и азбуку вы не учили, и разговариваете никакой не прозой…
Азбуку изобретённую 1000 лет назад я не учил. А азбука, по которой я учил алфавит, была издана вроде бы годах в 70-х прошлого века.
Разумеется, теперь же она состоит из иероглифов.
И устареть могут только транслятор и библиотеки, а не сам язык.

А обучение программированию, это, по-вашему, изучение трех десятков зарезервированных слов и семи управляющих конструкций Паскаля? Или это как раз 0.5% язык программирования и 99.5% — именно библиотеки и инструментарий разработки?
Обучение программированию — это на 90% изучение того, как правильно пользоваться этим словами и конструкциями для решения задач и 10% всего остального, включая библиотеки и инструментарий. А по вашей методе выйдет говнокодер, который без копипасты ни на что не годен.
Обучение программированию — это на 90% изучение того, как правильно пользоваться этим словами и конструкциями для решения задач

Нет, тысячу раз нет. Если мы говорим про Паскаль, то полное изучение этих 30 слов и 7 конструкций со всеми мыслимыми нюансами их применений — это один жалкий месяц вашей жизни. Ну или полгода, если вы это делаете одну учебную пару в неделю. И это если вы ноль в программировании. А всё остальное, это как раз библиотеки, фреймворки, паттерны, вопросы архитектуры, методики ООП, ФП.
Блин, начало доходить до этого жирафа наконец, слава те господи…
Да, речь именно о том, что обучаемый — ПОЛНЫЙ НОЛЬ В ПРОГРАММИРОВАНИИ (потому что первый язык — это и есть когда ПОЛНЫЙ НОЛЬ, а не когда вы уже который год жужжите на 56К и вручную пакеты вайфая коммутируете). И именно о первом полугоде (месяц — это если у вас реально хорошие способности).
И вы с вашими рассуждениями сидите в позе «Я кандидат наук, а чойто эти дети с букварем полгода возятся и палочки считают?»
Блин, начало доходить до этого жирафа наконец

Вау, палегше. А теперь, когда адреналин у вас спадёт, попробуйте наконец включить мозг и ответить самому себе на один простой вопрос: нахрена, с какой вообще каплей здравого смысла, в первом своём полугодии обучаемый должен тыкать палкой сознания в древний ни на что сейчас не способный диалект языка в давно мёртвой IDE? Для него что, в современной среде разработки begin'ы, for'ы и while'ы будут другой вкус иметь, что ли? Или вы считаете, что преподаватель, которому не приходилось придумывать идиотскую отмазку на справедливый вопрос: «Зачем вы нам даёте этот хлам?», не прошёл инициацию, что ли?
Вы вообще, видимо, не слышали о том, что некоторые люди реально ни одного языка не знают, программировать не умеют

Мозг, не забудьте про ваш мозг, я уже писал. Пользуйтесь им, стройте логические связи. Если человек не умеет программировать, не знает ни одного языка, это никак, никоим образом не дает оснований совать ему для обучения давно забытое старье, которое, как уже говорилось, даже не работает на современных ПК.
Ну надо же, какие идиоты были все эти аристотели, каменские и макаренки, сочинявшие всякие там системы обучения. Какой баран был Вирт, когда специально сочинял учебный язык программирования. Гениальный DrPass пришел — и мигом вековую проблему решил…

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

Он его сочинял 50 лет назад. Даже если брать более традиционные предметы, то в даже в них за это время местами поменялись методики обучения. А для информатики 50 лет это целая вечность. И да, в своё время Pascal был хорошим языком. И да, в своё время он был и хорошим учебным языком.

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

Ну вот какие-такие преимущества в качестве первого языка для обучения Pascal имеет перед какими-нибудь C# или Java? Что он такого даёт что они не могут дать?
Помнится, когда я только начинал программировать, мне было намного понятнее и удобнее использовать begin/end, нежели фигурные скобки. И не только мне. Смена синтаксических конструкций после того, как были освоены базовые элементы, затруднений не вызвала.
Не могу понять, что вы там вашей личной письменностью пишете — так как кроме древней кириллицы, еще более древней латиницы и совсем уж дремучих греческой и еврейской, никаких письменностей не знаю, а вы же у нас таким старьем брезгуете.
Вы, наверное, что-то хотели умное сказать, да?
Какой баран был Вирт, когда специально сочинял учебный язык программирования. Гениальный DrPass пришел — и мигом вековую проблему решил…

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

Эээ, мне не привиделось, вы действительно написали, что вы, никому не известный, откровенно хамовитый, слегка психованный, упрямо толкающий безумную идею, хреново понимающий в программировании, зато брюзжащий, как все дескать вокруг говнокодят (нет, чтобы основы на Турбо-Паскале учить), находитесь на одной позиции с одним из основателей современного ИТ-мира? Скажите, а Дейкстра, Тьюринг и Наполеон с вами в одной палате лечатся, или в соседних?
Любезный, вы, как видно из той породы дураков, которую пока прямо дураком в лицо не назовешь, не успокаивается.
Так вот: вы именно и есть дурак, ни хера не смыслящий в обучении. И именно стараниями таких же дураков, как вы у нас из 10 человек, пишущих код, 9, как вы изъясняетесь, code monkey. Это — полностью ваша и вам подобных дураков, лезущих учить людей, ни хера не смысля в обучении, заслуга.
Воистину, если на ваше рабочее место посадить макаку и дать ей клавиатуру, результат для вашей работы выйдет точно такой же, какой результат выйдет у вас, если вас с вашими заскоками допустить обучать нормальных людей.
И ведь вам тут уже не я один в нос потыкал, что вы несете херню, — но раз до вас не доходит, вы, видимо неизлечимы. Так что предлагаю завершить наш бессмысленный и бесполезный диалог. Можете сказать еще какую-нибудь глупость (ничего умного вам сказать уж точно не удастся) мне в ответ, если вам приспичит.
Вы вообще, видимо, не слышали о том, что некоторые люди реально ни одного языка не знают, программировать не умеют, а в лучшем случае могут самостоятельно на яндекс зайти. А вот, как ни странно, такие люди не просто есть — а их еще и гораздо больше, чем тех, кто знает и умеет.
Я с вами не согласен, только и всего — а привести убедительных доводов вам не удалось

Я прошу прощения, но если указанные мной доводы
а) Для программирования на этом языке нужно учить ряд мертвых и совершенно неприменимых сейчас библиотек
б) Объектная модель в этом языке сырая и отличается от современных
в) IDE вообще не запускается в современных ОС, а скомпилированные программы даже не в каждом DOS-эмуляторе смогут работать,
то… какой довод вам вообще нужен? Молотком вас по голове стукнуть, что ли? Это единственный более убедительный довод после моих. ;)

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

Хм. Мне, как старому downgrader'y, который это самое железо коллекционирует, ремонтирует, и даже активно участвовал в разработке новых контроллеров для старых машин на zx.pk.ru, такие заявления слышатся слегка опрометчивыми :)
Огорчу вас: найти Искру 1030 — большая проблема. Подавляющее большинство из них давно попилены на драгметалл, некоторые осели в коллекциях, а цена единичных экземпляров на барахолках идет от 500 баксов. И это даже не коллекционная цена, это цена аффинажников, ибо злата и КМок с палладием там насыпано щедро.
Приобрести современный компьютер как-то дешевле. И уж точно в тысячу раз умнее, если вам нужен компьютер для обучения программированию, а не для ретро-коллекции.
Ну и к слову, да: угрюмый сундук без игрушек и твиттера — лучший помощник начинающего программиста.

А машину времени начинающему программисту тоже выдадут, чтобы он со своими крайне важными навыками нажимать ресет, когда запорол память, смог отправиться туда, где эти его навыки пригодятся? А то тут у него все работодатели будут спрашивать какую-то ересь вроде «Умеете ли вы пользоваться git?», «Знаете ли SQL?», «Работали ли в VS Code?» и так далее. Отстой, в общем.
Как бы вам сказать повежливее… Вы с тем же основанием можете выдвигать претензии к букварю — что работодатели будут требовать какую-то ересь вроде заполнения анкет и написания резюме, а в букваре этому не учат. Зато если вместо букваря заставить первоклассников учиться по твиттеру, они заполнят все, что угодно — но почему-то так, что даже пресловутое «афтар пешы исчо» будет в сравнении с их писаниной образцом грамотности и понятности.
Такая вот странность — чтоб научиться чему-то, нужна специальная среда обучения. И вот то, что Паскаль эту среду дает, полностью искупает все его недостатки. Может быть, как я уже говорил, это дают и ваши незнакомые мне Дельфи — но я этого не проверял, а вы ни о чем таком не пишете, а все больше о всякой важной на вид, но не относящейся к делу фигне.
Как бы вам сказать повежливее…

Вы лучше не повежливее, а по-разумнее скажите. Программирование — это не абстрактная наука по складыванию алгоритмов. Это прикладная профессия. Прикладная, с определёнными практиками, используемыми инструментами и так далее. Практики и инструменты имеют срок актуальности, одни устаревают, другие появляются, развиваются и так далее. И обучаясь на специалиста, который потом должен будет прийти на работу и что-то уметь делать, надо, естественно, изучать актуальные инструменты, а не старое мёртвое говно мамонта.
Букварь, если эта тема вам так близка, тоже должен быть актуальным на текущий момент. Вроде буквы как буквы, но вы нифига не станете грамотным, если возьмёте букварь 1916-го года.
Разумно я уже говорил, но до вас почему-то не доходит. Приходится пробовать другие способы.
Программирование — это не профессия. Профессия — это «системный программист», «веб-программист», «программист баз данных» и многое другое. А программирование — это навык, или даже компетенция. Соответственно и все остальное. Если вы умеете программировать, вам остается только освоить какие-то из актуальных инструментов на ваш вкус — и вперед работать. А если не умеете, вы тоже можете освоить какой-то инструмент… на каком-то уровне.
И если уж на то пошло, сейчас проект идет — «Сталинский учебник». Букварь 1952 года переиздали — и дети, которые по нему учатся, получаются грамотнее и умнее тех, кого учат по современным «методикам».
Разумно я уже говорил, но до вас почему-то не доходит.

Ну не перегибайте. Разумно вы не говорили. Бред про использование в обучении в 2020-м году системы, закончившейся в 1992-м, несли в больших количествах. Психовали. Оскорблять пытались. Вот разумно, к сожалению, нет.
Навык, компетенция, профессия — это вопрос терминологии. И то, и другое верно. Системный программист, веб-программист, это уже специализация. Не суть важно. Важно то, что программирование — это не просто складывание алгоритмов, а написание программ с использованием тех или иных инструментов. И здравый смысл (с которым у вас проблемы) говорит о том, что не надо учиться на инструментах, которыми вы никогда в жизни не будете пользоваться, если можно сразу учиться на тех инструментах, которые вам впоследствии пригодятся, или хотя бы могут пригодиться теоретически.
Ну вот, как я и сказал, разумно с вами говорить бесполезно, вас клинит на т.н. «здравом смысле» — который, увы, никогда не работает. Потому что навык и профессия — это очень разные вещи, а педагогика вообще-то наука, и ей учиться надо. А вы не учились.
Программирование — это на 99% именно складывание алгоритмов. И учить надо именно этому — а выразить алгоритм на том или ином языке человек и сам научится потом. А вот если он алгоритм не умеет сложить, получаются всякие чудеса, коих я навидался в количестве, — а потом добрые люди головы ломают, откуда кругом столько говнокода и почему сайты пухнут как на дрожжах, а компьютеры с выросшими на порядки параметрами едва справляются с расчетами, которые раньше делали на тех самых «Искрах-1030» и «ЕС-1840».
Ну и извиняйте, если попытки достучаться до вашего разума вам оскорбительны, я вообще умолкаю. Продолжайте экономить глюкозу в свое удовольствие.
Программирование — это на 99% именно складывание алгоритмов.

Да что вы несёте? Или вы вообще не программист, а ВУЗовский преподаватель программирования на полной ставке? Это, по крайней мере, объясняет и вашу страсть к Паскалю, и полное отсутствие понимания, как работает ИТ-отрасль. Откройте глаза, добро пожаловать в 21 век. Современное программирование — это на 1% составление алгоритмов, и на 99% — механическая настройка фреймворков, применение типовых паттернов, рисование форм. Хорошо это или плохо, вопрос отдельный, но это так. И если человек пришел учиться программированию, его надо учить современному программированию, а не выпускать в мир со знанием десяти алгоритмов сортировки массива и балансировки B-дерева, что ему никогда в жизни не пригодится, но без знания инструментов контроля версий, командной работы, современных IDE, ORM и так далее.
Это у Вас на выходе не программист получится, а code monkey, который составляет нечто из кубиков, слабо представляя себе, что там происходит. Тоже дело нужное, наверное.
Я же не говорю, что учиться составлять алгоритмы вообще не надо. Надо, но это в реальной работе программиста отнюдь не главное, и обучение должно делать упор на то, с чем молодой программист может встретиться на работе. И уж тем более не полностью игнорировать современные требования, как будто их не существует. А то, что девять из десяти программистов ныне работают в режиме code monkey, ну да, это факт. Но от того, что вы будете знать шейкерную сортировку, ваш массив все равно не будет сортироваться лучше, т.к. и ванильный code monkey, и вы со своими знаниями будете использовать просто array.sort(). И самое обидное, что через несколько лет вы эту самую шейкерную сортировку тоже забудете.
Вообще непонятно, нахрена детям трёхколёсные велосипеды покупают.

Это плохая аналогия. Человек без навыков поддержания равновесия не может вот так взять и поехать на двухколёсном велосипеде. Но человеку без навыков программирования не будет легче учиться, если его учебная IDE будет генерировать бинарник под DOS, а изученные библиотеки надо будет благополучно забыть и учить новые после перехода на современный язык.
Я не предлагал брать компилятор под DOS — здесь я согласен, что нужны актуальные средства. Но они должны соответствовать задаче, и в данном случае задача — изучить основы программирования. Библиотеки в будущем всё равно ещё не раз менять придётся.
а изученные библиотеки надо будет благополучно забыть и учить новые после перехода на современный язык

в случае веба учить библиотеки постоянно и всё равно не успевать. И качество даже мартышкокодирования в таком случае будет "работает? Удивительно!"

в случае веба учить библиотеки постоянно и всё равно не успевать.

Да уже ситуация стабилизируется, веб тоже приходит к зрелости.
Если вы, выходя с учебных курсов, знаете общие принципы JavaScript, CSS, HTML, вы сможете приступать к работе на должности младшего джуна, держа под рукой StackOverflow. А если вы выучили что-то из святой тройки Angular, Vue, React, а также владеете Bootstrap'ом и jQuery, уже можете и что-то реально полезное писать.
Я же сказал, мы с Виртом бараны, а вы супергений. Проходите себе. Идите изобретайте очередной БЭМ, он вам очень скоро понадобится.
добро пожаловать в 21 век. Современное программирование — это на 1% составление алгоритмов, и на 99% — механическая настройка фреймворков, применение типовых паттернов, рисование форм. Хорошо это или плохо, вопрос отдельный, но это так. И если человек пришел учиться программированию, его надо учить современному программированию,

я не обратил внимания кто выше говорил про распухание кода и говнокодеров. Так вот, DrPass предлагает выпускать только их. Ещё скажите, драйвера пишут с фреймворками или что они не нужны. Или все выпустившиеся будут писать только веб / только десктоп / только что-то иное.

DrPass выше писал, что учить программированию нужно на современных инструментах, а Турбо-Паскаль в 2020-м — бесполезное старье, и для обучения программированию совершенно не подходит. Если для вас это означает, что DrPass предлагает выпускать только говнокодеров, ну ок.
И где я не прав относительно доли составления алгоритмов в современном программировании, скажите? Может, не 1%, а 2% — это что-то меняет? Вы, когда драйверы будете писать, будете придумывать алгоритмы? Правда? Не шлюзы, логика которых состоит в «заполнить структуру, закинуть в устройство, получить ответ, раскидать по параметрам»?
Или все выпустившиеся будут писать только веб / только десктоп / только что-то иное.

Нет, не все. Почти все. Единицам из тысяч повезёт попасть в конторы, пишущие что-то наукоёмкое, какие-нибудь поисковые движки, движки СУБД и так далее. Остальные — веб, десктоп, что-то иное аналогичное.
Я пытался донести до него эту мысль, но увы, пациент неизлечим. Боюсь, что он и сам из этой же породы.
Есть такая разновидность характеров у людей, которые если в какой-то конфликт влезли, потом будут как дворняжки постоянно бегать и подгавкивать/подванивать. Со стороны выглядит омерзительно, если честно. Впрочем, это их личная проблема.
Да, эту особенность поведения я за вами тоже заметил. Ну идите уже себе с миром в какую-нибудь другую ветку комментов, пока у меня остатки вежливости не кончились.
Ню-ню, интересно, где вы это могли заметить? Я отвечал исключительно вам на ваши выпады. Здесь только вы в переписке с другими людьми ноете, как вас там задел DrPass. Позорище. И не надо говорить про остатки вежливости, что мертво, умереть не может (с).
Я просто попросил людей в этой ветке прекратить попытки достучаться до того места вашего организма, где у нормального человека расположены мозги. Единственно из-за того, что не имею желания видеть под своими комментариями очередные выплески вашего альтернативного разуму сознания, а самостоятельно остановиться вы так же не способны, как и думать. Ну извините, это я и тут наклал вам в штаны, виноват, каюсь…
Вообще непонятно, нахрена детям трёхколёсные велосипеды покупают. Да ещё и односкоростные. А некоторые к тому же педалями тормозят.
Не терзайте супергения всякой ерундой типа разума и рациональных соображений. Он выше этого.
Ну если меня попросят заполнить анкету клинописью или египетскими иероглифами…

Kлинопись ведь сама по себе не устарела, нужны только актуальные транслятор и библиотеки :)
Пока что вы отказались пользоваться кириллическим алфавитом. Так что, вероятно, вы именно клинописью и пишете.
Конечно я отказываюсь пользоваться тысячелетним кириллическим алфавитом. Это может и не клинопись, но все эти азы, буки, веди и яти это не для меня.
Вы вообще большой молодец, я уже заметил. Продолжайте, продолжайте.

в прошлом году надо было поработать очень немного в ТП7.1 — скачал, распаковал, запустил. Какие проблемы?

в прошлом году надо было поработать очень немного в ТП7.1

Это смотря на чём вам надо было поработать. Если на современном компьютере, то 64-битная Windows вам его просто не запустит, скажет, что этот тип приложений не поддерживается. Запустить — только в эмуляторе. А потом ещё ваша программа будет крашиться при добавлении модуля Crt в uses. Надо или патч искать (бывал где-то), или замедлять эмулятор до чего-то уровня Celeron 300.

Не знаю какая версия (патченная или что там было), и5-3550, вин7х64. Рассказывают, запускали на вин10х64, но это не точно, а сам я не проверял.
Мне надо было набросать страничку кода именно на тп7, я набросал, скомпилировал, задача выполнена. Мне пофиг на срачи что что-то устарело или непопулярно.
Сейчас использую C#; Делфи (7, 2009 и хе-хе3) и Лазарус (для wince) забросил примерно 11 лет назад.

И еще один вопрос: а вы уверены, что Дельфи меньше отличается от Паскаля, чем Си от Си++?
Это именно так — все, что вы перечислили, содержит множество дополнений и изменений, которых в исходном языке не было и не должно было быть.
И где-то не реализовано то, что входит в виртовский Паскаль?
Как раз наоборот, там везде реализовано то, что в виртовский Паскаль НЕ входит.
Знаете ли, в справочнике Выгодского по элементарной математике полностью реализована арифметика для первого класса. Но почему-то никто не предпринимает даже попыток учить первоклассников арифметике по справочнику Выгодского.
Из того, что везде реализовано больше, чем в виртовском Паскале, никак не следует, что именно эти расширения и являются классикой.
Есть подозрение, что способ изложения арифметики там не самый подходящий для первоклассников, иначе это был бы учебник. Однако, компилятор это другой инструмент. И арифметика остаётся арифметикой, даже если в справочнике вместе с ней описана вся алгебра, геометрия и матан.
Есть подозрение, что вы невнимательно прочли мой исходный комментарий, а то и саму статью, которую мы тут обсуждаем. Речь как раз об ПЕРВОМ, УЧЕБНОМ языке. Поэтому аналогия со справочником — самое то: он тоже инструмент, не предназначенный и не годный для обучения. И все поминаемые вами «дополненные и переработанные Паскали» — как раз такие инструменты, которые лучше работают на практике, но годиться для обучения как раз из-за этого и перестали. Ушла та разница между ними и любым другим современным языком, ради которой весь сыр-бор затевался.
Так-то вы можете хоть на питоне, хоть на джаваскрипте учить — но тогда превращение 90% обучаемых в говнокодеры вместо нормальных программистов вам обеспечено.
Поправка: сейчас немного получше познакомился с питоном — он вовсе не так плох, как я раньше думал. Если, конечно, преподаватель умеет учить программированию, а не говнокодерству, как не будем тыкать пальцами кто.
Но все же отступы как операторные скобки — это для начинающего сложнее, чем begin и end.
Да, отступы это, безусловно, хорошо, когда они несут вспомогательную нагрузку. Может быть, можно быстро привыкнуть и не забывать их поддерживать в правильном состоянии, но для новичка это по-моему перебор. Это только впечатление, не более — я в него не умею.
Отчасти из-за того, что на телефоне Nokia N900 было довольно много программ на Питоне, и у меня сформировалось ощущение, что «рождённый ползать летать не может» — это про него.
В классическом Паскале не то, что развитого, там вообще нет ООП ни в какой малой дозе. А в любой из нынешних реализаций ООП присутствует в полной мере, да ещё и обычно в двух версиях, старой для совместимости с ТурбоПаскалем и новой (если так можно говорить про языковую фичу четвертьвековой давности), которая была внедрена в Delphi.
Мы, видимо, разное понимаем под классическим Паскалем. ТП6.0, насколько я помню, имел простенькую реализацию объектов.
В моём понимании, классический Паскаль — это, кхм, буквально классический Паскаль. Это Паскаль Вирта. Турбо Паскаль уже ни разу не классический, там много всего, причем в значительной мере совершенно ненужного в 2020-м году. При этом реализация ООП в Турбо Паскале не очень удобная, и как по мне, для обучения фигово подходит, лучше уж и правда брать Delphi и учить ООП в том виде, в котором оно реализовано сейчас в большинстве языков. По крайней мере, в Delphi не выработается привычка обращаться к объектам без вызова конструктора.
Как я уже сказал в ветке выше, Турбо-Паскаль стал стандартом среди практических реализаций Паскаля, так как Паскаль Вирта никогда не был реализован в чистом виде. Поэтому под классическим я понимаю именно его.
А Дельфи я не знаю. Так что, может быть, вы и правы, и это еще более подходящий вариант. Разница не принципиальная — если по всем остальным пунктам Дельфи не сильно отличаются, пусть будут Дельфи.
UFO just landed and posted this here
Почему вообще происходит вся эта вакханалия с языками? Почему и зачем создаются новые? Почему развиваются существующие или умирают? Ответы на эти вопросы, как ни странно, лежат за границами рационального. С рациональной точки зрения, всякий язык служит для выражения на нём вещей другому участнику. Т.е. для исполнения, для обработки. Поэтому принципиальная разница языков — лишь в длине выражений, которые приходится на нём строить для исполнителя или обработчика на единицу входного значения и выходного эффекта. Всё остальное — следствия этой разницы.

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

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

Первые часто понимают смысл обозначений и выражений по ходу дела, или даже оставляют какие-то непрочитанными и без ассоциации со значением. Потому что разобрать непонятные моменты можно, когда потребуется. Для них непонятное и неопределённое не является проблемой при прочтении: управлять обработкой неизвестного для них является само-собой разумеющимся. Для них описания вещей и конструкция вообще — это пазл, в котором можно выбирать любой порядок составления. Им не важно, выводится ли частное из общего или наоборот: важно, что есть и то и другое, и отношение между ними. Для них объявления вещей, которые получат своё определение позже, является само-собой разумеющимся. А до этого этими вещами всё равно уже можно пользоваться: конструктор ведь знает их интерфейс. А если смотреть с точки зрения математики, то рекурсия в определениях и самоопределяющиеся системы определений для первых не являются проблемой. Т.е. им не требуется ациклический неориентированый граф в аксиоматике, чтобы понимать и владеть системой, которую он описывает. Им не требуются грамматики Хомского с единственной аксиомой, чтобы работать с языком. Потому что при описании пазла это можно делать в любом порядке. А весь мир — это сложный пазл, у которого нет ни начала, ни конца, ни направления. Следовательно, вынужденный порядок описания — это производная характеристика эффективности языка.

Вторые тупо топят за непрерывную и вездесущую понятность и определённость. У них тупо страх перед непонятным и неизвестным. Если копнуть глубже, то они топят за идею «не прилагать мыслительных усилий, чтобы соотнести обозначения и значение прочитанного, и чтобы сконструировать в голове образ, заложенный автором текста». Для них любая непонятка приводит к полной остановке процесса прочтения с поднятием исключительной ситуации на любой уровень, где им разрешат не разбираться и снизить нагрузку на мышление. Примеров тому масса: хотя бы история возникновения языков Basic и Pascal с их последующим переходом в промышленное применение. Вторые являются адептами идеи «код пишется для них, в первую очередь, а не для исполнителя или обработчика». Это своего рода, эгоисты, стремящиеся заставить окружающих крутиться вокруг себя, чтобы меньше думать самим, а значит — им меньше ответственности и решений.

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

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

Очевидно, из размеров этих двух групп в купе с рядом других факторов формирируется размер аудитории тех или иных языков (а значит и объём литературы на них, т.е. кодов), включая и фазу моды на язык. Ну а с модой всё происходит по её социальным канонам, которые связи с рациональностью выбора языка не имеют.
Вы хотели написать нудную статью на Хабре, но промахнулись, и вместо «опубликовать статью» нажали «добавить комментарий»?
Боюсь, что на самом деле все наоборот: думают вторые, а первые механически фигачат код — быстро-быстро, но крайне некачественно — обожают готовые решения и фреймворки, жестоко злоупотребляют копипастой, а при столкновении с действительно новой задачей, которой до них никто не занимался, немедленно пасуют. Ну и «расшифровка мыслей» тех и других у вас крайне далека от реальности.
Сейчас каждое «Войти в Айти» видео говорит о том, что идите учите HTML, CSS потом препроцессоры, компиляторы. Потом учите JS далее React и вуаля и вы программист. Говорят что это легко, но как по мне вводят людей в заблуждение. Легко говорить «легко» когда ты уже умеешь, но как человеку новому понять, что ему это понравиться и он делает правильный выбор?
Я вот начитался, насмотрелся подобного, поверстал и меня тошнит от верстки. Потратил пару месяцев на это и совсем не в восторге.
Когда стал углубляться в языки, сферы, понял что больше тянет к back-end. Но сейчас хз за какой язык взяться. На сколько сложно новичку зайти в эту профессию и найти первую работу просто не понятно.
Хочется учить стабильный востребованный язык. Python джунов сейчас различные курсы выпускают пачками соответственно конкуренция большая думаю. Смотришь вакансии по C#,Java там требуют от джунов и высшие образование.
Вот и не понятно что делать новому человеку и как не прогадать?
также не понятно какой срок нужен среднестатистическому человеку чтобы получить первую работу?
Буду очень благодарен за ответы.
если технология набирает популярность — конкуренция среди новичков будет всегда, ее бояться не надо. В отличие от языков, теряющих популярность, где конкуренция терпима сейчас, но через какое-то время будет гораздо жестче в связи с огромным спросом, но новичку ее не выиграть — в старых технологиях при огромном выборе из кандидатов решает опыт.
Идем на какой-нибудь Gartner, их пророчества работают, т.к. кроме возможностей анализа, недоступного одиночкам, часто становятся самосбывающимися, потому что читают их многие. Смотрим тренды на пару лет вперед — больше никто не предскажет, слишком быстро все меняется. Там IoT, блокчейн, автоматизация бизнес-процессов, облака, ИИ. Плюс общий тренд на инклюзивность, вовлечение в программирование людей, которые сейчас программировать не могут. Соответственно, это либо создание доступных инструментов, либо умение ими пользоваться.
Остановил свой выбор на C#, надеюсь не прогадал)

По итогу прогадал)

А что уважаемое сообщество скажет про связку Java + JavaFX для десктопа (для новичка ессно)?


Плюс: кроссплатформенность (ну ещё плюсы отдельно Java — новичку есть куда расти)
Минус: JavaFX начина я с 9 Java больше не в комплекте, её надо отдельно прикручивать (не вполне тривиально) и вообще непонятно что там дальше будет в связи с резкими движениями Оракла.


Что ещё?

У JavaFX главный минус в том, что она крайне мало где востребована. Есть ли смысл садиться учить библиотеку, которую практически никто не использует?

Насколько я успел заметить, там всего несколько видов элементов (если на виды делить по назначению и способу доступа), выучить её совсем несложно, по кр. мере на уровне, достаточном для сборки окошек для своей маленькой программки.
А что ещё есть из кроссплатформенного? Ладно, пусть даже с перекомпиляцией по каждую платформу. Dot.NET и C#? Оно, вроде, теперь кроссплатформенное, не знаю в какой степени. Чем оно лучше (это вопрос, а не утверждение)?
Или какое-то время везде форсили Qty как "наше полностью всё!". Сейчас вопли поутихли. Оно по-прежнему "наше всё"? Да и это только графика. Логику-то всё равно на чём-то писать. C++? Ну, пулемёт для отстрела себе конечностей — так говорят.


В этом ключе Java+JavaFX выглядит весьма хорошо по сочетанию возможностей и вменяемости. Но бизнес сказал "только серверы" и усё, FX отпилили как ненужное. Понятно что БИЗНЕСу нужен только вэб, понятно. Но нам-то, простым васькАм куды бечь?


Мне вообще очень нравится идея Java Script: типа, не нужна никакая особая среда исполнения, точнее — она уже есть везде где есть браузер (я со своего дивана считаю это лучшим вариантов для обучения школьников).
Класс! НО!!! По понятным причинам нет доступа к операционке, т.е. поднять ком-порт (USB, WiFi, Ethernet и т.п.) для обмена с какой-нить железкой нельзя. А очень хочется.
Я знаю что есть HTML Application, но это опять же только Микрософт, да и не развивается...


В общем, непонятно что да как в мире десктопа :)