Snap! от UC Berkeley: язык программирования, который стирает границу между детской игрой и серьёзной CS
Λ Snap – An inviting programming language for kids and adults for CS study

Snap! — визуальный язык программирования от UC Berkeley и SAP, который подходит и детям, и взрослым. Его ключевая идея — «низкий порог, широкие стены, отсутствие потолка»: можно начать с простых блоков, а затем перейти к серьёзному изучению computer science. Платформа поддерживает сообщество: тысячи проектов, включая игры, симуляции и даже нейросети, а также конференцию Snap! Con.
Snap! — это широко доступный язык программирования для детей и взрослых, который также является платформой для серьёзного изучения computer science.
- aspizu
Scratch — это то, с чего я начал изучать программирование. Я строил в нём всё более амбициозные проекты, и в какой-то момент сам редактор стал главным, с чем я боролся. Когда проект разрастался примерно до 10 000 блоков, он мог стать мучительно тормозным, и в итоге я тратил кучу времени на то, чтобы обходить ограничения Scratch.
Именно это в конечном счёте привело меня к созданию goboscript: https://github.com/aspizu/goboscript
Я один из тех программистов, кто обязан своей карьерой Scratch; в этом году я присоединился к https://ente.com в качестве software engineer. Scratch научил меня программировать и, возможно, косвенно дал немного реального инженерного опыта.
- sinuhe69
Snap задуман как более выразительный и мощный, чем Scratch. Но отлаживать их, по-моему, очень больно. Например, переименование переменной или блока может создать «дыры» в местах вызова, а система может сообщить об ошибке, а может и нет — и молча сломаться. Snap, на мой взгляд, более ненадёжен, и команда, похоже, больше стремится добавлять новые возможности, чем отшлифовывать существующие или делать систему более надёжной и стабильной.
- andrewla
Мне не очень нравятся такие графические среды программирования, как эта и Scratch, и я не могу точно сформулировать, почему они кажутся мне настолько непривлекательными.
Во многом потому, что в какой-то степени по ним можно научиться программированию. Но по ним абсолютно нельзя научиться software engineering.
- Dwedit
Любое имя, которое нельзя набрать, станет проблемой.
- brian_harvey
Замечание тем комментаторам, кто жалуется, что визуальное программирование не помогает освоить software engineering:
Да, вы не наша целевая аудитория. Мы нацелены на людей, которые не пойдут в колледже на computer science, но которым любопытно, из-за чего весь шум. Они прошли школьную алгебру, так что знают, что такое переменная и что такое функция. (Им не обязательно знать о функциях как о данных, но мы надеемся их этому научить.) Сегодня они, вероятно, использовали Scratch в начальной школе, так что нам не нужно учить их синтаксису блоков, тому, что такое спрайт, и т. д.
Никто не выйдет прямо из нашего курса на работу в области software engineering. У них будет масса возможностей выучить это позже — если (а так случается приятно часто) они изменят своё мнение о том, что изучать в колледже, из-за нашего курса.
Они не (или, по крайней мере, пока не) хакеры в том смысле, что при встрече с машиной их инстинкт — разобрать её на части.
Ах да, P.S.: есть один смысл, в котором блочные языки лучше для software engineering: у вас могут быть сколь угодно длинные имена сущностей (включая пробелы между словами), потому что имя нужно набрать всего один раз, так что вы можете давать своим процедурам самодокументируемые имена вроде «convert upper case to lower case letters» вместо уродливого «convUcLc».
- thrtythreeforty
Мне кажется, HN не должен автоматически капитализировать «λ» в этом случае. Анонимная функция — это λ, а не Λ.
- pamelafox
Я в целом не большой поклонник блочного программирования, но я работала с ребятами из Snap, пока была в UC Berkeley, и они приводят очень убедительные доводы как в пользу блочного программирования, так и в пользу своего подхода «сначала функции».
Пока я там была, я помогла разработать эту программу для средней школы по Snap:
https://bjc.berkeley.edu/bjc-r/course/sparks.html
Было действительно интересно попробовать подход «сначала функции», который при этом оставался бы увлекательным — в итоге я переделала похожие проекты и для курса Python, построенного по принципу «сначала функции».
- stymaar
Для тех, кто задаётся вопросом, в чём разница со Scratch, — это есть на странице about:
> About Snap!
> Snap! (ранее BYOB) — это визуальный язык программирования с drag-and-drop. Это расширенная переработка Scratch (проекта Lifelong Kindergarten Group в MIT Media Lab), которая позволяет вам Build Your Own Blocks. Он также поддерживает first class[1] списки, first class процедуры и first class продолжения[2]. Эти добавленные возможности делают его подходящим для серьёзного введения в computer science для школьников старших классов или студентов колледжей.