Как стать автором
Обновить

Комментарии 53

Моим первым языком был машинный код, но чтобы его запускать приходилось писать блоки с data на бейсике :)

Потом уже подвезли cp/m с компилятором Pascal и С.

Ох, красота)

Здравствуйте, спасибо за интересную статью! Действительно, когда я еще начинал изучать программирование, язык Python помогал мне быстро пробовать что-то новое и не скучать во время обучения (всё благодаря тому, что инструкции интерпретировались на лету).
На мой взгляд, выбор первого языка определяет мышление начинающего программиста, потому что он пытается выразить все свои мысли только конструкциями полюбившегося(возможно) первого языка. Я сам не раз сталкивался с таким.
Например, некоторым так полюбился JS, что они везде пытаются использовать формат json(это ещё только студенты). Ещё один мой излюбленный и простой пример — взятие последней цифры числа. Если человек изучал язык Python, он, скорее всего, переведёт число в строку и возьмёт последний символ:
a = 123 # Наше число
print(str(a)[-1])

Начинающий разработчик, который начал своё изучение с языка программирования С++, к примеру, напишет так:
int a = 123; 
std::cout << a%10 << std::endl;

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

Действительно интересное наблюдение. Спасибо за пищу для размышлений)

Формат JSON удачный формат. Язык JS - такое себе... Применяют формат JSON вовсе не за любовь к JS.

Сам я не сильно углублялся в изучение JS. Знаю лишь только, что JSON удобно использовать для передачи данных между фронтом и бэком. У нас в то время была задача хранить карту игрового поля в игре. Программист решил использовать для этого JSON, хотя, на мой взгляд, можно было бы использовать и простую сериализацию средствами языка C++.

JSON удобно использовать, поскольку это своего рода "стандарт" вне зависимости от используемого ЯП, при этом он остаётся человекочитаемым

JSON это хорошо, когда в ЯП есть ассоциативные массивы. Когда нет таких управляющих структур. Самый проверенный формат csv

Это где остались тьюринг полные языки без ассоциативных массивов?

C, например :D

Не совсем понял, что мешает питонисту сделать
a = 123 # Наше число
print(a % 10)
Это самое простое решение(приведённое мной), что приходит в голову. Лично я подробно познакомился с операцией взятия остатка, когда начал разбираться с Си. В Python она без надобности, имхо.
Это самое простое решение(приведённое мной), что приходит в голову.
Вот за это питонистов и не любят.
А за что не любят php-стов? А тех кто на JS пишет за что не любят? 1С-ников, кстати, тоже за что-то не любят.
Наверное, легче перечислить тех, кого любят?

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

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

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

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

Вторая проблема языков с динамической типизацией в том, что эти языки не позволяют оценить вычислительную сложность найденного решения: обучающийся не знает, какой реальный объём вычислений производится при выполнении элементарных — с точки зрения языка — операций. Например, какова вычислительная сложность добавления элемента в ассоциативный массив (словарь в Python, объект в JS)?

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

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

P.S. ИМХО, лучший современный язык для начального обучения — Oberon-07 (в качестве дополнения к учебнику Вирта). Если же брать популярные C-style языки, то лучшим выбором будет Go.

Лучший комментарий! Моя мысли абсолютно такие же, когда вижу советы об обучении программированию на js, питоне и тд

НЛО прилетело и опубликовало эту надпись здесь
Отличается тем, что std::unordered_map — внешняя по отношению к самому языку библиотека (даже если это std). А dict и set — это часть языка Python.

Когда я пишу a[b] на Pascal (классическом виртовском), Modula или Oberon, я знаю, что эта операция всегда будет выполнена за O(1). Когда я пишу a[b] на Python или JS, я не знаю реальную вычислительную сложность этой операции.

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

P.S. Если ученику понадобится ассоциативный массив, то в Oberon он будет реализовывать его сам — с нуля. И будет понимать, как он устроен и какую цену придётся платить за его использование. А в Python он просто воспользуется встроенным в язык словарём, не задумываясь об эффективности его использования. В результате обучения на Python мы получаем не программиста, способного оценить эффективность своего кода для заданных условий, а бездумного сборщика как-то работающего кода из готовых библиотек.
В результате обучения на Python мы получаем не программиста, способного оценить эффективность своего кода для заданных условий, а бездумного сборщика как-то работающего кода из готовых библиотек.

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

А так получим людей, которые "тупо" используют массивы, а паяльника с транзистором в руках не держали. Тут вопрос, кого мы хотим получить в итоге. В идеале выходит супергерой, который сможет разрабатывать свой СУБД. Но, боюсь, получится наоборот: Страница циклов с квадратичной сложностью, зарытой ошибкой "+1" и Го-шными "if err!=nil", вместо пары строк с готовым словарем и groupBy.

НЛО прилетело и опубликовало эту надпись здесь

Сам давно работаю на го. Но лишь частично соглашусь с вашим комментарием. Без хорошего наставника го в руках новичка превращается в кошмар из interface {}, reflect, unsafe плюсом к этому неуправляемыми горутинами и гонками.

Строгая типизация убивается interface {}, корректность кода убивается гонками.

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

Начало — это базовые представления о свойствах алгоритмов и основы структурного программирования. И не нужны на начальном этапе обучения ни unsafe, ни рефлексия, ни пустые интерфейсы, ни go-процедуры. Всё это — уже следующие этапы обучения. А для написания Змейки или Жизни, а тем более — учебных заданий по основам программирования, эти возможности Go не требуются.

Я выбрал Go не потому, что он так хорош для обучения, а потому, что в других C-style языках ситуация ещё хуже.

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

На хабре на днях была статья о том, что обновление Chrome OS сломало авторизацию потому, что случайно вместо && написали &. В C / C++ / Java / JavaScript / PHP и т.д. компилятор спокойно пропустит такую замену. Но в Go это вызовет ошибку компиляции.

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

Именно направленность на выявление максимально возможного кол-ва ошибок как на этапе компиляции, так и на этапе выполнения делает Go далеко не лучшим, но наиболее подходящим для начального обучения из C-style языков.

P.S. Наличие наставника — наилучший вариант обучения. Независимо от используемых языков.

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

Кстати о птичках, а как вы собираетесь писать Змейку или Жизнь на Го? Когда я его последний раз смотрел, у меня сложилось впечатление, что он пригоден для двух вещей - веб-сервисы и консольные утилиты. GUI-биндингов, достаточно простых в использовании для новичков, вроде бы нет в природе (да и вообще эта тема у Го скорее мертва, чем жива, как я понял), для продвинутой консоли только биндинги к ncurses, которые, скорее всего, в винде нормально работать не будут.

Да, столь простой графики, как в Turbo Pascal или qBasic, в Go, похоже, нет. Но зачем графика на этапе начального обучения? Я ведь специально упомянул те игры, которые прекрасно реализуются и работают в текстовой консоли. Без ncurses.

Крайне переусложнённый и достаточно слабо типизированный C++ — один из худших выборов для начального обучения.

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

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

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

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

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

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

Python плох ещё и тем, что при использовании встроенных list, dict, set и т.д. невозможно предсказать вычислительную сложность решения. Внешне оно может быть O(n), а при прогоне на наборах данных разного размера получим, например, O(n^2). Да даже целые числа неограниченной длины уже создают проблемы с определением вычислительной сложности.

И я писал не только про алгоритмы, но и про дисциплину написания кода.

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

Проблема C/C++ в том, что они чуть менее, чем полностью построены на побочных эффектах. Классическое C'шное копирование строки
while(*out++ = *inp++);
в одной строчке кода содержит три побочных эффекта. И это никак не может научить хорошему стилю программирования.

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

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

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

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

Для плавающего в терминологии ученика, которому показали переменные, циклы и базовые арифметические/логические операции, сообщение компилятора (возьмем простейшее) "behind a '&' reference" скажет ровно ни о чем. При этом чисто алгоритмически код может быть верным. По мне так уж лучше увидеть спецэффекты различных ошибок на практике. Это я и имел в вижу под "пощупать память". В общем, тут много субъективного с моей стороны.

Если же брать популярные C-style языки, то лучшим выбором будет Go.

Почему не C в таком случае? Для обучения, на мой взгляд, стоит использовать то, что имеет наименьшее количество абстракций. В таком случае язык помогает отображать намерения, которые хочет выразить человек, в исполняемый код практически 1 к 1. Как говорится, "Less is more". Чем ближе к железу, тем меньше вопросов к тому, что происходит между вашим кодом и конечным результатом. Даже UB, на самом деле, довольно понятно почему происходят, во многих случаях.


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


У Go есть опасные упрощения, которые могут сыграть злую шутку в будущем. Инициализация памяти нулями, GC и прочие штуки, которые удобны для написания программ, но плохи для того, чтобы объяснять их работу.

Для обучения, на мой взгляд, стоит использовать то, что имеет наименьшее количество абстракций
Именно потому на первом месте в моём списке Oberon-07.

Проблема в том, то ученик будет ошибаться — всегда. Он будет забывать ставить {} после if или for, будет выходить за пределы массива, будет разыменовывать неинициализированные указатели… И как на это отреагирует компилятор / рантайм C? Никак…

Из всех C-style языков Go имеет один из самых упорядоченных (да, не без недостатков, но всё же никаких необязательных служебных слов и никакого произвольного порядка служебных слов) и простых синтаксисов и один из самых «строгих» компиляторов (чему способствует и предельно сильная типизация). И это безусловное достоинство для начального обучения.

Другая проблема C — вседозволенность и провоцирование использования сложно понимаемого кода с побочными эффектами на грани UB. В плане семантики инструкций "=" (и всех прочих присваиваний), "++", "--" Go следует не трюкачеству C, а принципам написания надёжного кода. И это тоже хорошо для обучения.

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

Инициализация выделяемой памяти и сборка мусора (присутствующая в большинстве современных языков) — это не упущения, а вполне сознательное решение, направленное на увеличение надёжности кода. И нет, объяснить работу счётчика ссылок или трёхцветного алгоритма — это совсем не сложно. Собственно, отсутствие надёжных механизмов управления/контроля памяти на уровне языка — не достоинство, а одна из основных проблем C.

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

Python и JS в одной куче вызывают, мягко говоря, недоумение: первый, несмотря на динамическую натуру, обладает строгой типизацией. JS да, может проглотить глупые ошибки вроде пропущенных аргументов функции из-за скобки или запятой не в том месте. Ничего подобного JS-ной дичи в Python нет. Хороший, продуманный язык с богатой библиотекой, позволяет очень кратко и точно формулировать мысли без лишнего синтаксического или семантического мусора (тут привет Джаве). Медленный только, из-за чего не годится для олимпиад (кроме совсем уж базовых).

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

Полностью согласен с идеей, но Oberon-07, имхо, слишком мертв на данный момент. На мой взгляд, один из лучших учебников программированию - "Программирование - введение в профессию" за авторством Столярова. Автор, конечно, довольно едко проходится по Windows и различным GUIшным штукам, но сама идея паскаля как первого языка и линукса/макоси (точнее, их эмулятора терминала) как первой ОС, на мой взгляд, безусловно верна и даст лучший результат именно в обучении программированию как концепции

Просмотрел по диагонали первый том Столярова. Радует то, что автор правильно использует в коде точки с запятой (что не умеют делать некоторые авторы школьных учебников). Не радует, что используется сильно расширенный диалект Pascal. Но я не увидел (возможно, пропустил) в книге сравнительный анализ разных алгоритмов решения одной и той же задачи — а ведь это основа обучения программированию.

Oberon-07 — один из языков в семействе языков Oberon — самый простой и предназначенный исключительно для обучения. Он не должен быть «живым», так как не предназначен для написания больших проектов (для таких задач есть Component Pascal — тоже один из Oberon'ов), а среда разработки и компилятор для него есть.

Проблема Pascal в том, что экспериментальный язык, прежде всего предназначенный для реализации концепции типов данных, придуманной Хоаром и грамматик предшествования, придуманных самим Виртом. В результате язык имеет несколько существенных изъянов в своём дизайне, которые Вирт исправил в следующем языке — Modula-2 (более простом и мощном, чем Pascal). В свою очередь, выявленные в результате использования Modula-2 недостатки Вирт исправил в языке Oberon (более простом и мощном, чем Modula-2) из которого выросло семейство языков разного назначения.

Потому более простой, логичный и при этом более мощный Oberon подходит для начального обучения лучше, чем местами нелогичный и более сложный Pascal.

Хм... )
Моим первым был чего скрывать Basic, еще в школе. Тогда же изучил Turbo Pascal. И в старших классах Assembler.

Далее по жизни работал с Delphi, 1C и VBA.

Зависит от возраста (и от целеполагания). Маленьким детям лучше всего будет scratch. Детям постарше лучшим первым яп будет pascal. А взрослым людям наверное действительно лучшим первым яп будет python ибо их все равно уже не исправить.

А С++ как первый язык во всех случаях это дичь. Уберпереусложненный язык! Причем сложность эта существует не ради объективной необходимости (как в хаскеле, например, где сложность вместе с собой привносит кучу полезных вещей), а просто потому что исторически так сложилось.

Первым был Фортран-4, потом Паскаль, Бейсик, ассемблер (pdp/11)., потом сбился со счета:)

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

У меня ребенок вникал в DrRacket. Там совершенно бомбическое интро, объясняющее циклы, условия, функции и прочие базовые концепции на примере графических объектов. https://docs.racket-lang.org/quick/index.html . Во взрослом возрасте надо, конечно, выбирать что-то более приближенное к реальности. Тут выше рекомендовали Go или Lua, имхо отличный выбор.

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

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

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

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

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

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

Нужно быстро начать зарабатывать деньги. ... Кто бы что ни шутил и ни говорил, такими языками являются: PHP, Java, JavaScript и 1С (если ты некрещёный)

Если быстро зарабатывать много денег, то COBOL

Мне суперинтересно об этом почитать. У меня, как и у многих, первым был Pascal :)

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

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

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

Я начал учить программирование в школе(лицее). У нас было что-то вроде информатического класса, так что и программирование отличалось от типично школьного(ну или того типично школьного, с которым встречался я, а я сменил не так мало школ). По крайней мере, в отличие от других моих школ, мы там занимались программированием на двух языках, что качественно отличалось от уроков по лазарусу или вижуал бейсику в других школах. Языком номер 0 у меня был паскаль, и, если честно, кроме смутных воспоминаний об интересностях его синтаксиса или синем экране мудрости турбо паскаля я мало что помню, хотя было это и не так давно(сейчас я студент 3го курса). Дело даже не в самом языке, а скорее в тогдашнем отсутствии моего интереса к нему и к проге вообще. Но вот когда у нас начался си с плюсами, я взялся за дело серьезнее. Так что именно он, наверное, мой первый язык. Я сейчас, конечно, не важная птица и 300 кк/наносек не зарабатываю, ведь я пока только учусь, но и сказать, что я жалею о таком первом языке, я совсем не могу. Не совсем пониманию комментариев о том, что с++ сложный титан одиночества. Как по мне, для изучения азов он подходит очень даже. Как раз его честность и строгость мне кажется основным плюсом, ведь за ширмой скрыто не так много, как в том же питоне, и, например, изучение ООП в нем мне кажется несколько более осмысленным занятием, хотя опять же я тот ещё спец. Но я согласен с автором статьи, человеку неподготовленному выдавать в руки с++ несколько рискованно. Он может скорее отпугнуть, а вот тот же питон, с которым и мне в последнее время часто приходится поработать, приятен и прост и дает возможность больше думать о задаче, а не о собственно коде, что, как мне кажется, может быть ценно, например, для начинающих учёных. А в целом, конечно, лучше учить хоть что-то, чем столетиями выбирать и потерять интерес, или даже учить что-то хайповое и крутое, но к чему не лежит сердце.

Первым были машинные коды М20, Автокод инженера (это уже М222), Алгол, Ассемблер, Фортран, а еще такой странный зверь - Алмир. Это разновидность Алгола с ключевыми словами на русском языке. Существовал на советской ЭВМ "Мир". Потом Pascal, C(сначала без ++, потом с плюсами, потом с #), а дальше уже разного понемножку случалось

И как мне кажется, для первоначального обучения лучше всего подходит Object Pascal. Строгая типизация, простой синтаксис, классическая объектная модель. Для понимания общих принципов, знакомства с алгоритмами, основами ОП и т.д. подходит и детям, и совсем девственным взрослым. А уж потом можно переходить на C++, например. Или C#. Собственно, второй язык уже может быть любым. Даже - Python )). 

Первый язык - чуть Паскаля в универе, потом Си, потом С++. На них и стою. 10 лет продакт опыта разработки (+ биндинг в питон и написание прослоек на нем же). Изучал так же java/sharp, но плюсы не отпускают.

Кто начинает изучение языка Rust, может будет полезен курс на ютуб-канале d-web.

А начинала с С#, после него Rust пока плавно идёт ​

Второй сценарий – это Программирование интересно само по себе и человек хочет развиваться как разработчик и инженер. Здесь однозначным решением будет C++.

Как первый язык? Я бы тогда советовал си, а с него легко перейти на плюсы. Си достаточно прост для первого языка, по нему много литературы.

Для меня, как для офисного работника, первым языком стал VBA, который помог упростить многие рабочие процессы. Дальше уже пошли SQL (сначала в связке с EXCEL), VB.NET с WinForm. На этом этапе запустил несколько приложений, которые очень помогли в работе отдела. Следующим этапом стали C# и WPF.

Но, всё-таки для меня, самым простым и логичным остаётся VB.NET.

Зарегистрируйтесь на Хабре, чтобы оставить комментарий

Публикации

Изменить настройки темы

Истории