Pull to refresh

Comments 166

Странно что Оберон сюда не попал. Для педагогических целей очень неплох. Можно детям даже программирование «железяк» на нем показывать
Зачем учить заведомо мертвому языку? Python и Javascript обладают простотой о очень богатыми возможностями, если копнуть поглубже. Для JS вообще достаточно браузера.
он настолько прост что быть «мертвым» ему не грозит никак. Когда делали Go — то многое из него взяли — но прежде всего простоту. Можете тоже его онлайн попробовать — https://online.oberon.org
Возможно звучит грубовато. Независимо от качеств ЯП есть еще фактор применимости полученных знаний. В этом плане он примерно как бейсик. Много вакансий для специалистов по оберону?

Так о том и речь, что учить нужно не язык, а то, как программировать. И умение программировать отлично применимо потом на практике. А новый язык выучить не так сложно.

хм… пока дети вырастут и окончат универ, то мейнстрим будет совсем другой. И зачем забивать им голову каким-нибудь тяжелым языком (тем более js слепленным за очень короткий срок), если есть языки, спецификация которых занимает несколько страниц, в котором весь текст кода компилятора и операционной системы влазит в одну книжку, да и то в приложении, с «горячей» заменой модулей. Ну не знаю…
Зачем учить заведомо мертвому языку? Python и Javascript обладают простотой о очень богатыми возможностями, если копнуть поглубже. Для JS вообще достаточно браузера.


Язык легко учится.
Сложно учатся принципы программирования.

Мёртвый не мёртвый — не важно.
Важно — удобный или не удобный для обучения.

Начинать с JS идея плохая. Его доделывают и переделывают не зря.

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

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

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


Если мы сравним то, как происходит прогресс в других «доделываемых» языках — Java, Go, Python, C++, C#, Pascal, то увидим, что, за исключением монстроидального С++, это именно «доделки», а не «переделки» как с JS, что изначально был разработан с плохим дизайном.

А что вы называете "переделками" в JS, что несравнимо с, например, разницей между python 2 и 3? Кстати, а PHP куда отнесёте?

что несравнимо с, например, разницей между python 2 и 3?

Рассматривайте это как 2 отдельных языка.
С ним как раз все проще для целей изучения — Гвидо разделил ветки явно. Это и плюс (для обучения, все отличия сразу видно) и минус (переход на 3 затянулся).
Рассматривайте это как 2 отдельных языка.

Типа никаких переделок, просто закопали один язык и создали новый?

"Переделки" в JS — это только добавление модулей.


Кроме этого добавлены два типа данных, несколько новых встроенных объектов, и пачка синтаксического сахара. Называть это "переделками"… как-то странно.

ну, strict ломает обратную совместимость

Ммм. Как? Разве если в браузере реализован стрикт, то старый код не будет поддерживаться?

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

Ага. Если кто-то в старом коде в браузере, который не поддерживает "use strict" напишет это, то в новых браузерах, которые поддерживают стрикт такой код работать не будет. Ну, в целом, да.

Если кто-то пишет "use strict" для красоты, фактически не соблюдая, то он сам себе злобный буратино.

Мне, как пользователю какого-то сайта, всё равно кто там сам себе кто, если после обновления браузера сайт перестал работать.

Но проблемы-то это не ваши, а разработчика сайта.
Если сайт написан идиотом, который "use strict" просто так ставит, то вряд ли это ценный сайт.

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

Учить нужно не языку программирования, а программированию. При таком подходе дальнейший переход от старых языков к новым происходит сравнительно безболезненно.
На гитхаб выложили обучающий материал по Cobol'y, даже с лабами и ссылкой на бесплатный mainframe для выполнения лаб… среда разработки VSCode с плагинами IBM Z Open Editor, Zowe Explorer, можно попробовать как первый, хотя Дейкстра был против:-) На мой взгляд первым языком лучше выглядит Java, он полегче для новичка чем C, язык как то на мой взгляд выглядит логичным и понятным, у нас в школе как то пробовали желающим факультативно преподавать, начинали правда со скратча, потом переходили к Java.

Правда вначале надо будет сказать изучающему: забей на всю эту мишуру вокруг, чтоб написать HelloWorld. Нет, Java слишком "шумная" для абсолютного новичка и ничего полезного этот шум не прививает. Для начала неплохо бы базовый ООП изучить, чтобы переходить к языкам уровня Java/C#

хоть сам на java пишу, но в качестве первого языка категорически не рекомендую. Язык должен быть максимально простым — в том числе «внутри».
у меня первым языком был JavaScript, сейчас тоже пишу на Java, он мне кажется очень понятным в отличие от JS, и я наоборот советую этот язык как подходящий для первого языка.
Как по мне первый язык должен быть в детском возрасте еще. Честно не могу себе представить себя за джавой как первым языком. Я вот только после Оберона понял насколько много всего лишнего на самом деле в мире ИТ и насколько наш код раздут. Теперь есть, с чем сравнивать. Никита Липский говорил так: «Короче, суть этой басни такова, что в промышленном мире программирования пока не найдено «золотое сечение». B Оберон система — это просто маленький пример, стоящий с обратной стороны, показывающий, что все может быть по другому, чем вы привыкли.»
испорченные Фортраном;
пострадавшие от BASIC;
раздавленные C++;
задушенные Java.

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

По последней схеме: из практических соображений стоит выбрать Python, а если потом идти на JavaScript, то особого смысла идти на PHP/Ruby уже нет, если нет цели именно на них писать. А если есть, то с них можно и начать. Или начать с JavaScript сразу

Или начать с JavaScript сразу

Автор доклада про об этом прямо предупреждает:

«Но если начать сразу с JavaScript, то получится Фортран-программист на новый лад, который потом везде будет писать как на JS, и это будет ужасно. А если это будет второй язык, то такой деформации не произойдет.»
Произойдет другая деформация. Да и вообще, автор утрирует.
UFO just landed and posted this here

А вот кассета из комплекта твоей "ПЭВМ" не читается и твой первый язык становится Ассемблер, потому что в документации таблица машкодов есть.

Со Спектрумом было наоборот: Бейсик был в ПЗУ. Для Ассемблера нужно было приложить какие-то усилия.
БК0010\БК0011М — программирование в кодах в мониторе.

Ну, прямо в кодах я не программировал почти, сначала в тетрадке на асме напишешь, потом "билдишь" в той же тетрадке по таблице, и вводишь в мониторе. Пока асм от Радио-86РК не портировал, сначала его дизаасемблировав в той же тетрадке.

Архитектура PDP-11 в этом отношении была более оптимизирована под легкую читаемость маш-кодов.

Совсем немного с ней сталкивался и очень давно. Там же общепринято восьмеричное написание и номера регистров легко читаются поэтому?

Да (так-же как и методы адресации, плюс признак слова\байта шел в старшем бите), и еще ортогональная система команд (все по одному слову).
10. «Когда я был в первом классе, ко мне подошел старшеклассник и предложил писать с ним программу на Бейсике. Я стал отказываться, но он меня заставил. С тех пор я пишу программы только на Бейсике. Иногда, когда родители уходят, мы собираемся группой по 6-8 ребят и пишем программы на Бейсике вместе.
Год назад я познакомился с девушкой, и она предложила мне писать программу на Паскале. У меня ничего не вышло: меня стошнило и потом долго болела голова.
Зовут меня Валерий Павлович, в сентябре мне исполнится 47 лет. Моя жизнь сломана».

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

Copyright © 1995 Норвежский Лесной Все права сохранены
ИМХО, первым языком должен быть язык, на котором легко в обозримые сроки сделать полезную для кого-то (включая себя) программу. Желательно, чтобы первый язык имел перспективу нарастить число пользователей своих программ, или позволял легко перейти на другой такой язык.
Таким образом, даже Турбо Паскаль будет приемлемым вариантом, если волею судьбы его преподают в вашем образовательном учреждении, т.к. можно какое-то время писать проги для друзей (домашки, зачеты, курсовые).
Т.е. обучать детей скретчам, питонам, бейсикам можно, только если обучение не исчерпывается малополезной для окружающих черепашьей графикой и сортировкой массива.
Предположительно годные варианты: примитивная игра, которой можно похвастать перед друзьями (тут хоть скретч, хоть си шарп+юнити (по возрасту)), простенький сайт для себя или друзей (чтобы при создании был элемент программирования), программы а ля «учет расходов» (для своей семьи. Можно юзать всякие бейски для приложений и т.п.).

Тут скорее должен быть критерий не «сделать полезную для кого-то программу» — а «найти немедленное практическое применение полученных навыков для целей обучаемого».
Т.е. вещи вроде «написать скрипт для любимой карты в DOTA», «автоматизировать рутинную обработку лабораторной в Fytik» или «сделать красивый скрипт с анимацией для своей странички втентакле».
Соответственно, это должно быть что-нибудь вроде Python, Lua или Javascript.

А если "написать утилиту под виндовс, которая переименует файлы по вот такому алгоритму с параметрами введёнными в формочке, и exe-шник весил не как скайп" — то что-нибудь типа VB :))

Всё-таки «в формочке» и «не весил как скайп» — совершенно не входит в список требований обычного обучаемого. Так что это python, а не VB.

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

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

Вносить же изменения или дополнения в уже имеющийся работающий продукт программистам приходится постоянно.
Это как умения читать и писать — надо учить с первого, а второе уже добавлять потом.
Внезапно, именно поэтому у меня в примерах упоминаются бейсики для приложений, которые отлично дополняют штатный функционал тех же екселей. Я знаю где-то обучают базам данных на ms access, и думаю что это тоже прекрасный инструмент с которого можно начать обучать программированию (по крайней мере раньше так было). Т.е. без разницы полноценная программа, плагин, скрипт или еще что-то, главное, чтобы пригодилось и содержало элемент программирования )
FreePascal — полностью заменяет ТурбоПаскаль. Вполне удобно писать автономные консольные утилиты, не требующие себе доп-фрейморков и сред исполнений.
Если где-то первым языком требуют результат на FreePascal — учим FreePascal, где требуют с++ — осваиваем с++. Суть в том, что если уже где-то требуют конкретный язык у бедолаг одноклассников/однокурсников, то стоит этот язык освоить, благо спрос на твои программы обеспечен учебной программой. Т.е. не стоит кочевряжиться и осваивать школьный/вузовский язык программирования вполсилы, потому что он не достаточно хорош в качестве первого. )

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

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

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

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

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

Да, и этому учат в школе. Представьте, раньше люди этого не знали. А ещё не знали что существуют бактерии и прочее. Хотите быть таким же?

почему я не считаю ассемблер самым простым и понятным языком

Вы не написали. Так почему?

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

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

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

Т.е. возразить кроме как в стиле «сам-дурак» вам нечем? :)

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

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

там есть ответ на ваш вопрос

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

Я понимаю ваше желание ввести курс ядерной физики в первый класс, но, боюсь, дети из такой школы разбегутся и до ассемблера «не доживут»

В моё время дети 10-12 лет спокойненько осваливали асм.
Я же начинал довольно поздно. Где-то в 13-14. Не припомню чтобы были какие-то проблемы понимания. Писал программы на бумажке. Читал хекс-дампы из журналов. У меня не было компьютера.
Т.е. возразить кроме как в стиле «сам-дурак» вам нечем? :)
Ну почему же, возразить есть чем, просто стараюсь следовать заветам одного писателя и не… позиционировать себя на один с уровень с вами, где вы меня с легкостью задавите своим опытом. Собственно, уже начали давить популярными в околокомпьютерных спорах выписками из автобиографии. Я с удовольствием такие читаю, но лишь как лирические отступления, но не как аргументы. )
Ну почему же, возразить есть чем

У нас есть уот такие агрументы, но мы вам их не покажем©

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

Собственно, уже начали давить

Господь с вами, я ещё и не начинал ^_^
Завязанные на платформу промышленные языки Objective-C и C#/Visual Basic.

Что еще нужно сделать мелкософту чтобы C# не считали завязанным на платформу… эхх
Меня тоже немного зацепило, но, справедливости ради, надо отметить, что .NET Core стал популярным сравнительно недавно, а в статье упомянута большая инерционность программ обучения.
Что еще нужно сделать мелкософту чтобы C# не считали завязанным на платформу… эхх

Если вот это: github.com/dotnet/wpf/issues/48 сделают — сразу начну считать его лучшим кроссплатформенным языком для десктоп-приложений :)
Надо изучать параллельно два языка — высокоуровневый и низкоуровневый. С (не С++) и Питон например. Они имеют похожую конструкцию, но сразу будут видны сильные и слабые стороны.
Ну и надо сразу делить контингент на желающих учиться и планктон. Второму дать в пределах программы чтобы прикрыться перед проверяющими и всё.
Надо изучать параллельно два языка — высокоуровневый и низкоуровневый. С (не С++) и Питон например

И вам тут же захочется бросить C и заниматься Питоном:-)

Тогда C для микроконтроллеров и JS.
Чтобы области применения не пересекались.

Как привыкнет — так и отвыкнет. Ну, если, конечно, не имеет умственных отклонений.

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

Слабоватый разброс. Предлагаю Idris и VHDL.

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

С надо изучать для того, чтобы обучающийся узнал что HelloWorld не требует i7 с 32Гб памяти и SSD диском.
Всё про меня! Но… наоборот. После Бейсика (в школе), Фортрана, Си, Ассемблера (в институте), понять зачем нужны все эти ООП и ФП было очень трудно.
понять зачем нужны все эти ООП и ФП

я до сих пор не понимаю ;)

Ну, не знаю.После Ассемблера, Бэйсика, Паскаля, Си (первые два дома на клоне Радио-86РК, вторые в школе на MSX-2), C++ очень хорошо зашёл по книге Страуструпа. Переписывал её в тетради в читальном зале библиотеки, в других тетрадях писал свои программы, а потом набивал их и отлаживал в редкие (и по сути нелегальные) часы посещения ВЦ с IBM PC/AT. На Си, при почти неограничееном доступе к Ямахам, было гораздо скучнее, даже скучнее чем дома на Ассемблере.

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

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

Некоторым наоборот: высокоуровневые абстракции воспринимаются хуже, чем структурное программирование.

Пока выучишься — он устареет.

если тянуть резину с обучением, то может версия новее будет. Никуда востребованный язык за 2-5 лет не денется.
Обучение программированию это 7-8 класс. Вместо института на работу кодером?
с каким языком собираешься работать, тот и учи.

Это можно сказать про второй. Там — уже осознанный выбор.

Когда учат первый — вообще не знают что языки бывают вполне определенные для определенных целей.
Знаю нескольких, кто начал обучаться программированию в 6 лет. Когда пришло время работать, их первые языки почему-то устарели… ¯\_(ツ)_/¯

Я тут уже писал, повторюсь (хотя кому интересны эти холивары?) — для всех инженеров, которые связаны с цифровым хардвером, обязателен Си. Это простой язык, но при этом на нем можно сделать ВСЕ, даже если это будет сложно (но вряд ли обучение — это про большую сложность). Плюс может быть нужен какой-то DSL, это зависит. Преподавание JS скорее полезно на курсах веб-программирования (я без сарказма и неуважения), а Питон актуален условно говоря на общефизе.

Как мило. В опросе университетов в области CS на третьем месте стоит Matlab. После чего авторы делают вид, что ничего не было, и это слово до конца текста больше не появляется. Прелестно. :)
Лучше усваивается то, что используется. Если студент одержим своим проектом, то он будет осваивать то, что важно для его проекта (C для самодельного робота, JS для своего web-проекта, Python для своего распознавателя картинок, и т.п.). Если же студент не одержим, а это доминирующее большинство, то он будет осваивать то, что используется и лучше подходит для лабораторных и рассчетных работ в его учёбе, как по основным, так и по смежным инжинерным дисциплинам. И часто это Matlab.

Учился у того самого Михалковича С.С., с "первым" языком PascalABC.NET(нет, лично у меня, не первым, я таки Бейсика с турбопаскакалем насмотрелся, а впоследствии Delphi перед универом, но таких было человека три на группу).


Нам целый год (два семестра) читали различные концепции и ООП сугубо на PABC.NET. Все дружно (и я вместе с ними) ворчали "зачем мы на этот мертвый в индустрии кусок кода время тратим, оно ж потом не пригодится".


В третьем семестре нам в контексте одного курса рассказали Java, C#, и в контексте соседнего — С++. На первых двух это выглядело примерно так: "помните, как в Паскале было? а тут вот так, только синтаксис другой". Через две-три недели даже самые отбитые прогульщики вполне сносно на этих языках писали (для студента, конечно). С С++ — то же самое, только немного больше времени потребовалось.


ИМХО, как первый язык, PABC.NET себе равных не знает, как минимум, в объеме реализации (и простоты синтаксиса) фич, имеющихся в современных ЯП самого разного уровня. И Станислав Станиславович, как преподаватель основ программирования. Рад и горд, что на мехмате ЮФУ есть такой замечательный преподаватель.


Дело было в 2010-2011. До сих пор вспоминаю это время с улыбкой.

Pascal был разработан именно для обучения, да.
Кое-какие мелочи я в нем подправил бы, но в целом — годный для обучения.

Имхо если человек любит программирование, то все равно на каком языке начинать, главное чтобы было просто разобраться. Моим первым языком был BASIC, и ничего, когда потом перешел на С++, без проблем отошел от использования номеров строк и прочих атавизмов.

Имхо «учебный» язык программирования должен быть:
— достаточно простым, чтобы можно было разобраться по книжке самостоятельно
— работающим везде, чтобы результатом можно было поделиться с друзьями, запустить на другом ПК и пр
— имеющим реальную практическую применимость, чтобы у ученика не было ощущения изучения чего-то бесполезно-абстрактного

Правда, есть исключение: для маленьких, лет до 7-8, лучше Scratch наверно не придумали ничего, просто, наглядно, интерактивно, и шанс сделать ошибку крайне мал.

Если учебный язык будет иметь реально практическую применимость, то через некоторое время вся индустрия будет писать на этом учебном языке. Так было с Паскалем. Вирт потом долго оправдывался, что он не хотел, что это был учебный язык, что он сейчас спроектирует хороший, годный, промышленный язык (и спроектировал, Модулу2, а потом Оберон).
Нет уж…
Простые искусственные языки с разными парадигмами, вот что нужно. И искусственный ассемблер.

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

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

Не стоит приравнивать компьютерные языки и человеческие.

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

При изучении программирования мы учим языка совсем минимум.
Основная часть — концепции программирования.

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

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

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

Ну почему, с базой латыни и греческого английский или немецкий учить было бы действиельно легче :)
При изучении программирования мы учим языка совсем минимум. Основная часть — концепции программирования.

Лично мне не нравятся сугубо абстрактные концепции, если уж тратить время на обучение, так на то, что в реале пригодится. Учить искуственно выдуманный ассемблер или псевдо-паскаль, который нигде кроме класса и специальной IDE не работает, ну нафиг.

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

Знающие люди говорят, что изучение латыни и греческого в гимназиях здорово ставило мозги на место… опа… А мы чего добиваемся?
Поэтому нужен учебный структурный, объектно-ориентированный, функциональный, предикатный языки.
И ассемблеров парочку. Да чтобы на учебном компьютере или эмуляторе было 64к памяти, не больше.

Если учебный язык будет иметь реально практическую применимость, то через некоторое время вся индустрия будет писать на этом учебном языке. Так было с Паскалем

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

Я бы предложил в качестве первых языков:
— Скратч для ООП
— и Лого для ФП
искусственный ассемблер

Какую-нибудь игру с таким ассемблером?
А как вам семейство B4X (основанное все на том же общеизвестном языке), но в котором можно писать и для iOS, и для Android, и для любых Java-driven x86-систем, и для Atmel-микроконтроллеров (Arduino)? Всё, кроме «яблока» — бесплатно. И на 80% кроссплатформенно.
но в котором можно писать и для iOS, и для Android, и для любых Java-driven x86-систем, и для Atmel-микроконтроллеров (Arduino)? Всё, кроме «яблока» — бесплатно. И на 80% кроссплатформенно.


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

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

Go далеко не такой очевидный, когда дело доходит до горутин и каналов. Возможно их просто не нужно давать, но подозреваю без этого будет сложно, т.к. там весь Go ими пропитан. Плюс специфика result, err. В большинстве промышленных языков вместо этого используют исключения, а panic в Go сделан прямо скажем, по остаточному принципу.
В статье ещё указывается важный момент для начинающих — интерактивность, возможность увидеть результат, т.е. наличие тех же графических примитивов (да хоть те же окошки в дельфи или egavga.bgi) или работы с html (сейчас уже не катит, потому что всю интерактивность делают на js) в стандартной библиотеке, а в Go этого нет. Go — это всё же чисто индустриальный язык, который создан в гугле для нужд написания http-сервисов, который json или другие байтики туда-сюда гоняют.

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


Для школы можно и обойтись без них.
Да и не сложные они.

Плюс специфика result, err. В большинстве промышленных языков вместо этого используют исключения, а panic в Go сделан прямо скажем, по остаточному принципу.

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

Полагаю, что причина в интертности мышления системы образования.

В статье ещё указывается важный момент для начинающих — интерактивность, возможность увидеть результат, т.е. наличие тех же графических примитивов (да хоть те же окошки в дельфи или egavga.bgi) или работы с html (сейчас уже не катит, потому что всю интерактивность делают на js) в стандартной библиотеке, а в Go этого нет.


Если для совсем мелких — то есть языки типа Черепашки или Скрэтча со встроенными средствами визуализации.

Инструменты для написания визуального интерфейса для Go есть. Они не лучше и не хуже, чем для Python, Java, C/C++ и пр.
Выделяется здесь разве что C#

Только вот большинство задач начальном этапе — это вообще голая консоль.

Если изучать графику — то ты уже не язык учишь, а конкретную библиотеку. Например, SDL.

Да и не сложные они.

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


Обучать можно прекрасно и без исключений

Студентов — нельзя. Им потом с ними жить в других языках.


Если для совсем мелких — то есть языки типа Черепашки или Скрэтча со встроенными средствами визуализации.

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


Инструменты для написания визуального интерфейса для Go есть. Они не лучше и не хуже, чем для Python, Java, C/C++ и пр.

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


Только вот большинство задач начальном этапе — это вообще голая консоль.

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

Обучать можно прекрасно и без исключений

Студентов — нельзя. Им потом с ними жить в других языках.

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

В противном случае учить их нужно языку в котором есть вообще всё, типа PL/I. Только вот незадача — там столько всего есть в языке, что даже нет компилятора, который все его фишки реализует. Если компилятор под все концепции сделать не удосужились, то что же говорить про изучение вообще всех-всех-всех концепций.
Но все они хуже, чем старые-добрые дельфовые формочки, просто потому что их нет в коробке и как правило требуют приседаний, прежде чем начать ими пользоваться =)

Библиотеки GUI ничуть не лучше и не хуже по функционалу, чем JS в браузере. Хотя писать, разумеется не так удобно как на формах.

Если рассматривать концепцию с формами — то тогда только C# или Pascal (с Lazarus, та же Delphi, но бесплатная).

>ThreadPoolExecutor, Task и так далее.
>Студентов — нельзя. Им потом с ними жить в других языках.
>первокурсников, которые пришли учиться на CS-факультеты.


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

Так вот, в обучение программированию никак не входят, например, кишки тредпула, или асинхронного рантайма, или вообще эти самые тредпул и рантайм. Это вообще не то, что нужно для обучения программированию. И исключение, и ООП, и еще много чего.

Студентов — нельзя. Им потом с ними жить в других языках.

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

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

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


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

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


Так вот, в обучение программированию никак не входят, например, кишки тредпула, или асинхронного рантайма

Окей, а что входит? Базовые алгоритмы и структуры данных? Перевод задачи с языка хз в тз, а потом подбор алгоритмов под тз? В идеале списком.
Мне просто кажется, что обучение программированию в вышке — это обучение понятиям. Итерация, рекурсия, оптимизация хвостового вызова, коллбеки, асинхронность, промисы, ивент луп, потоки, тредпул, модели памяти, модели вычислений, типы, структуры данных, объекты, итд — это всё примеры таких понятий. В идеале учебный язык должен хорошо иллюстрировать максимум таких концепций с минимумом шелухи вокруг. При этом желательно иметь встроенные средства визуализации, и, например, REPL, чтоб можно было чуть ли не на лекциях/практиках интерактивно иллюстрировать материал или график например вывести по-быстрому. Очень удобно те же сортировки иллюстрировать прямо на ходу, или то, как задачки в ивент лупе обрабатываются по очереди.
Чтоб не надо было как в java писать кучу лишних строчек, тащить развесистые библиотеки и IDE, просто чтоб студенты по выходу из вуза писали на знакомом индустриальном языке. Ничего против java не имею, но язык проектировали явно не для обучения, а чтоб можно было человека после недельных курсов посадить промышленный код фигачить.


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

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

Современные не то что дети, а уже двадцатилетние молодые люди никогда не видели терминалов с зелеными буквами. Поэтому объяснить им, что такое консоль в принципе и что такое «перевод строки» практически невозможно.

Поэтому я бы с голой консоли вообще не начинал.

Если изучать графику — то ты уже не язык учишь, а конкретную библиотеку.


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


Ничего не изменилось.
Не программеры и 20 лет назад не понимали что это.

Консоль удобна для работы с простенькими программами на начальном этапе обучения.

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

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


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

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

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

Да, язык очень прост, местами красив, местами забавен, местами уродлив. И разрабатывался он с учетом того, чтобы можно было в сжатые сроки получить N недорогих программистов, могущих в писать-на-Го (нет, N мало, лучше K). Но прост он ровно в том случае, когда ты переходишь на него с другого языка. Не случайно есть оф-гайды «Го для Java-программистов» и «Го для JS-кодеров».

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


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

Ну, например, обобщенные алгоритмы (дженерики) — их в Го нет. Показать ООП — его в Го нет.

Это уже где-то ко второму году обучения имеет смысл. А к тому времени можно уже и еще 3 других языка начинать учить.

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

Работу с указателями, управление памятью — этого в Го нет, по большому счету

Вопросы освобождения памяти нельзя дать, ага. Трудно будет объяснить «память течет» что такое.
Но распределение памяти, указатели — вполне себе полноценно в Go.

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

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


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


А в вузе — если там у человека первый — то вуз это, похоже, гуманитарный.


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

ИМХО, для обучающего языка важны прежде всего две вещи:
1) Популярность в разных сферах.
Во-первых, она мотивирует ученика интересоваться изучаемым, так как он реально видит где он это сможет использовать, а не учит «для галочки».
Во-вторых, популярность приводит к наличию огромного количества доступных материалов — примеров кода, вопросов/ответов, обучающих руководств разного уровня. Все это помогает легче изучать язык, в том числе самостоятельно, даже если преподаватель так-себе или на курс выделено недостаточно времени.

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

ИМХО, Python сейчас лучший язык для начала обучения, и, насколько знаю, многие зарубежные ВУЗы на него перешли или переходят.

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

C# осилить не могут абсолютно

После — не значит в следствие. Я уверен, что если бы эти люди НЕ изучали питон, то это никак не улучшило бы их способность освоить C#.

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

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


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

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


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


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

Я уверен, что если бы эти люди НЕ изучали питон, то это никак не улучшило бы их способность освоить C#.


«Приверженцы статической и динамической типизаций никогда не поймут друг друга. И TypeScript им не поможет»
habr.com/en/post/431250

Если лень читать статью, то главная мысль оттуда
Я начал учить плюсы и C#, он — JavaScript…

Собравшись уже матерыми разрабами, мы решили, наконец, сделать свой проект — двумерную видеоигру. Так как друг был чистый фронт, а я фулстек, очевидной платформой для нас стал браузер. Раньше я разрабатывал фронт только на TypeScript, и мы подумали, никаких проблем, TS — всего-лишь надмножество JavaScript. Возьмем его и все пройдет гладко. Как бы не так. Когда мы начали обсуждать работу, столкнулись с невероятной бездной непонимания друг друга.



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

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



Потому что выбор типизации — путь без возврата. Все компромиссные решения дают только иллюзию компромисса. Ты либо ставишь во главе угла типы, либо нет. Не знаю, как бы все сложилось, начни я учить C# и JavaScript одновременно и параллельно друг другу. Но сейчас я так крепко прибит к своему мышлению, что не вижу и не хочу видеть плюсов динамической типизации. Они есть, но вне поля моего зрения, и все что мне остается — закрывать на них глаза, как на любые чуждые мне проявления мира, с которыми приходится жить. Понимаю, что не прав, но работать мне надо здесь и сейчас, и метаться между полюсами бюджета нет.

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

потому что даже если тот же С/C++ позволяет вертеть байтами и указателями как хочется, всегда надо понимать что делается иначе это выстрел в ногу и ужас. но с другой стороны если понимать всё на низком уровне то там море возможностей для оптимизаций, но это уже не относится к первому языку…

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

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

по моему мнению именно для того чтобы сам человек-программист понимал какой тип с каким типом взаимодействует. именно чтобы воспитать самого человека пишущего программу. чтобы человек понимал, что нельзя стоить конструкции типа
uint8_t = uint8_t * uint8_t
потому что результат непредсказуем, хотя типы вроде одинаковые…
да может я вас не правильно понял…
у учеников возникает вопрос да почему надо объяснять компьютеру, что это символ, а не число если это очевидно…
да именно потому что компьютер оперирует числами он не знает строка это или набор байт…
вот именно это и надо объяснить ученикам, — компьютер это железяка, которая умеет только числа и делает только то что вы её прикажете…
В наших школах (РФ) ситуация другая. Потому что есть ЕГЭ. А в нем только 5 языков программирования C++, Pascal, Бейсик, Python, Алгоритмический. Все непонятно каких версий, даже для питона нет уточнения 2 или 3 версия. Изучать что-то другое никто не будет. И все оценивается в контексте ЕГЭ, есть в ЕГЭ изучаем, нет в ЕГЭ не изучаем. Вообще школы сейчас на пути деградации до курсов по подготовке ЕГЭ.
Дальше по качеству учителей. Любой человек нормально понявший ИТ идет в ИТ, школам достаются отбросы ИТ индустрии, учителя по информатике часто нет и рады любому.
Ладно накипело. Из этих 5 языков я лучшим считаю Паскаль. Потому что явная типизация, язык не делает ничего неявно. Нет указателей, которые учить школьнику боль и учитель обычно тоже непонимает что это.

А когда из Паскаля указатели выпилили?

В паскале не нужно в явном виде пользоваться указателями для вызова функций.
В паскале не нужно в явном виде пользоваться указателями для вызова функций.

Разве?
А где нужно в явном виде? Приведите пример, а то непонятно что вы имеете ввиду.
scanf ("%d", &х);

Можно тот же пример на Pascal?
readln(x); или read(x);
В С++ возможно решить все задачи ЕГЭ, не прибегая к указателям. Обычно так и делают, не показывая указатели. Но в С все равно приходим к указателям.
readln(x); или read(x);

Там там var в параметрах.
Для обучения, не знаю — хорошо ли это, что по ссылке передается неявно.
Там переменные в параметрах функций можно передавать через var\const, а не указатель. И обработку делать как с простой переменной, а не указателем на нее.
как это нет в паскале указателей?!
p1: ^integer;
p: pointer;
Дальше по качеству учителей. Любой человек нормально понявший ИТ идет в ИТ, школам достаются отбросы ИТ индустрии, учителя по информатике часто нет и рады любому.

Так было и до ЕГЭ. В 90-е было это же. И не только по информатике. От качества отдельного учителя зависело буквально всё. Повезло с учителем — будешь знать предмет. Не повезло — механически заучишь учебник а сконвертировать эту информацию в полезные знания не сможешь.


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

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

Начинающему хоть с чего-то начать надо. Я вот помню мне только запись «x=x+1» мозг сломала: ну не может x быть равен самому себе +1.

Тогда паскаль и гоу :)

Или R, в котором можно написать x <- 1 или 1 -> x.

Вот поэтому Паскалевская записть x := x+1 лучше. Сразу видно, что это не равенство, а присвоение справа налево.

По-моему, это вопрос привычки, и это явно не самый важный критерий при выборе языка. Да и для новичка сразу неочевидно, справа налево или наоборот. Запись в R ещё очевиднее, кстати, там можно написать x <- x + 1 или x + 1 -> x.

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

я учил ВАСИК в 10 лет на спектруме.
в 6-ом классе я сдал turbo pascal и получил сертификат в ВКИ НГУ.
в 10-ом классе был С на информатике.
а на втором курсе на удивление Модула-2 и вполне себе академический язык. в ИЯФ СО РАН нам читали курс тогда.

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

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

это конечно все зависит от возраста обучаемого, и на самом деле это всё индивидуально. (я основываюсь на своем опыте преподавания детям от 6 по 10 классы). многие питон вполне тянут. многие ардуино Си. был у меня даже случай когда мальчик 6класс, заткнул за пояс 10-11 классников и удивил даже меня начав строчить с++ с классами в ардуино-ИДЕ…

Я в 1984-1988 изучал бейсик, и ничего, что тот бейсик уже мёртв, зато сейчас любой язык читаю и понимаю.
Сейчас мой родной C#, но владею и несколькими иностранными: javascript, python, (о, боже — php), ну и академический assembler иногда юзаю по книжке, для удовольствия ради.

ну и академический assembler

zanuda-mode:
Ассемблер вовсе не язык программирования.
Ассемблер — мнемоническое представление машинных кодов, которые разные для различных процессоров.
Правильнее говорить «читаю ассемблер такой-то конкретный»

super-zanuda-mode:


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

а значит можжно считать полноценным ЯП


zanuda-mode:

Это не я придумал.

«Язык программирования» это сокращенное называние. Изначально называлось — «язык программирования высокого уровня» (каковыми являются Паскаль, С, Java, C# и пр.).

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

Я про то, что вы не можете знать «ассемблер» в том смысле, что вы знаете C# или PHP.

Ибо знание ассеблера под ARM дает вам довольно мало по сравнению со знанием ассемблера под x86, и это не считая еще что они разные бывают, из известных переносимых FASM, NASM. Не считая еще кучу непереносимых и устаревших. И это всё разные ассемблеры, местами они сильно разные.

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

Ибо это практически как говорить «умею программировать» без уточнения конкретного языка программирования.

Ибо это практически как говорить «умею программировать» без уточнения конкретного языка программирования.

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

Это да.
Я не зря приплёл к ассемблеру академию — сад философских размышлений.

Да! Читаю по прежнему один конкретный ассемблер. Вы правы
Leo J. Scanlon, 1989 год

PascalABC.net хорош для обучения. Однако к сожалению к нему нет курсов типа Яндекс-практикума на Питоне. Во многих книгах по нему на мой взгляд даётся много теории, а надо сразу давать код.

Да кому впёрлись эти практикумы? Для изучения языка необходима и достаточна справка по языку.
Я в своё время QBASIC изучил по одной только встроенной справке.
По современным языкам такую качественную справку найти трудно — везде одни "практикумы"...

Я вот лет 30 тоже так считал, но вот сдался и теперь прохожу "практикум" по Java

Ну QBASIC довольно простой язык и в своё время был хорошим первым языком. У меня первая программа была именно на QBASIC.
Программирование и языки программирования — это все таки разные области знаний.

ИМХО:
1. По-хорошему, начинать изучать программирование следует с теории вычислений и вычислительных машин. На этом этапе можно вообще без ЯП. Из инструментов достаточно, например, палочек, счёт или камешков с ячейками.
2. Потом, наверно, можно углубляться в теорию алгоритмов.
3. Начинать изучать языки программирования неплохо бы с общего обзора различных языковых парадигм, их предназначений и отличий.

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

Вообще, я не уверен, что надо изучать практически столько (2+) языков в чисто академических целях. Я бы сразу концентрировался на прикладной специализации, ибо — зачем? Ведь если ты уже изучил пункты 1 — 3, то к чему тратить время? А если нет — то все равно хорошим программистом тебе не стать и надо делать безусловный переход на пункт 1.

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

Я бы сразу концентрировался на прикладной специализации

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

Какой ЯП изучать надо первым зависит от будущей судьбы. Чем он проще, тем легче.
Не все становятся программистами.
C точки зрения ученого, который пишет программу раз в год, язык программирования должен быть простым, знания которого легко восстановить, иметь достаточно примеров и низкий уровень вхождения.
Мое оценочное мнение ЯП с которыми я сталкивался ab ovo:
Fortran — уровень вхождения низок, прост, но перфокарты…
Напрямую к ячейкам памяти (Д3-28) — нетрудно и эффективно.Из экзотики, была версия, когда данными можно было спокойно забить ячейки памяти, отведенные под программу.
BASIC — уровень вхождения низок, прост и уже на персоналке. Удобен.
Pascal — не изучал, но за 1 день смог добавить графику+некие свои хотелки в программу, написанную студентом. Низкий уровень вхождения
Oberon — средний уровень вхождения, элегантен, писал программы, но не мое, как и Modula-2.
Си — несколько попыток с нулевым выхлопом, высокий уровень вхождения. Чуть позже с тем же эффектом — Haskel.
Visual Basic поздних версий — явно не Basic, умучался при написании как прочесть файл с таблицей с числами, разделенный на колонки.
Справился с написанием простых программ на Perl и Python. Тоже не мое.
Julia — уровень вхождения низок, пишу на нем сейчас.
Sign up to leave a comment.