главная новое лучшее написать
1

Ответ спасен из Яндекс.Кью

Очень хороший вопрос, это зависит от возраста и заинтересованности ребёнка!

Если говорить про начало-"нулевой уровень" и возраст около 7-10 лет, то подойдут любые графические редакторы с элементами блочного программирования, такие как Minecraft или Scratch.

Для подростков 5 - 9 класс можно изучать более серьёзный язык программирования. Все любят Pyton, но так упускается большой пробел по работе с память, потому я бы рекомендовал любой Си подобный язык.

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

Вообще ООП преподают и оставляют для вузов - я уверен что ученики 9-11 классов прекрасно справятся с ООП и к моменту поступления в институт будут иметь более продвинутое представление о том с чем им предстоит работать. Так же Kotlin- как up lvl Java))

2 art 21-01-2024

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

Начать рекомендую с книги Practical Common Lisp. Так же много ресурсов для изучения собрано здесь: https://awesome-cl.com/#learning-and-tutorials

ответить
1 anonymous 22-01-2024

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

ответить
2 art 23-01-2024

А ты не рассматривал вариант "выучить и использовать"? Я на нём весь свой opensource софт пишу.

ответить
1 someanonimcoder 26-01-2024

Ну,в целом понятно что можно использовать, но тогда мне непонятно почему его а не питон/c++/rust/etc? Какая у лиспа киллер-фича, что на нем удобнее делать чем на других языках?

ответить
1 art 27-01-2024

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

ответить
1 finder 31-01-2024

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

ответить
2 anonymous 05-02-2024

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

Jupyter notebook?

ответить
1 finder 05-02-2024

гм, и правда, туплю
тогда совсем поинт непонятен!

ответить
1 art 14-02-2024

Попробуй из Jupyter ноутбука подключиться к Python процессу и поменять код какой-нибудь библиотеки например чтобы пофиксить баг.

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

При ошибке поправить функцию и запустить обработку данных с того же места в Python можно как-то?

Представь что ты делаешь игру. У неё есть какой-то стейт. С лиспом ты можешь запатчить любую функцию или класс и изменения тут же скажутся на запущенной игре. Да, всякие фреймворки типа Unity тоже дают какой-то hotreload, но у Lisp это встроено в сам язык. Например есть оконный менеджер StumpWM, написанный на Lisp - я могу подключиться прям к своему оконному менджеру из Emacs и менять любую его часть как захочу.

Может Python умеет компилить в нативный код? Или может аннотации типов использует для оптимизации скомпилированного кода?

Я уж не говорю про то, что создавать новые синтаксические абстракции в Python/JS/C++ и прочем нельзя примерно никак.

А кодогенерация за счёт макросов – вообще шик. Тебе просто не нужны промежуточные шаги типа генерации кода по YAML конфигам.

Всё это делает Lisp очень удобным для быстрого прототипирования. Но порог входа конечно выше.

Такие вот поинты.

ответить
1 finder 14-02-2024

Это все хорошие замечания. Единственное, что

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

Я недавно буквально делал буквально игру, чтобы выучить JS (http://billfantasy.ru/ если интересно, только надо с десктопа смотреть, она не адаптирована для мобильных), и активно этим пользовался. Это точно не специфично для Lisp.

ответить
1 art 15-02-2024

Не специфично. В том же Erlang тоже есть неплохой хотрелоад.

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

В Common Lisp же переопределение функций и классов это first-class citizen. К примеру, там есть способ написать "миграцию" которая применится ко всем существующим объектам класса при обновлении класса и наполнит новые поля чем надо, например посчитав их как-то или подтянув из базы. Можно конкретному объекту поменять класс, сказать что это класс этого объекта больше не Foo, а Bar, и при желании написать миграцию, которая при этом ещё что-то поделает. Так же, можно налету собирать новые классы (впрочем такое например и в python можно проделывать с помощью type). Или например модули (они называются package) тоже first-class citizen – ты можешь их создавать удалять и менять как хочешь прямо на ходу.

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

Короче, если решишь попробовать – пиши, я помогу.

ответить