Содержание

5 языков программирования, которые надо учить первыми | GeekBrains

Основа востребованности современного программиста.

https://d2xzmw6cctk25h.cloudfront.net/post/1666/og_cover_image/af4a28a7853d17625124ffebf3b28891

Сегодня каждый, кто стремится попасть в IT, задается вопросом — какой язык программирования изучить? Все ищут универсальный ответ, который предопределит головокружительную карьеру. Да, до изобретения интернета и появления мобильных платформ можно было освоить один язык, написать на нем программу и быть востребованным разработчиком. Сегодня реалии таковы, что даже джуниорам предъявляется огромный список требований, среди которых — знание нескольких языков.

Судите сами: для веб-разработки неплохо бы владеть PHP, JavaScript, Python, Ruby, а еще HTML и CSS; в мобильной сфере — Swift, Objective-C, Java, C#. Перечень языков для создания десктопных приложений можно даже не начинать — по сути, все будут полезны. Именно поэтому мы взяли на себя ответственность назвать 5 языков программирования, которые надо изучить хотя бы шапочно, чтобы сегодня называться программистом.

Python

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

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


def fib_recursion(i):
	if i > 1:
   	 return fib_recursion(i-1) + fib_recursion(i-2)
	return i
            	
for i in range(10):
	print i, fib_recursion(i)

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

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

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

JavaScript

Следующий must have среди языков — JavaScript, для работы с ним хватит браузера. Синтаксис здесь на порядок сложнее: появляются служебные символы и конструкции с разношерстными скобками, названия функций далеко не всегда раскрывают суть действия, и даже простейший код имеет структурированный вид. Взглянем на переписанный код с функцией Фибоначчи:


function fib_recursion(n) {
   return n < 1 ? 0
    	: n <= 2 ? 1
    	: fib_recursion(n - 1) + fib_recursion(n - 2);
}
 
console.log(fib_recursion(10));

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

Кроме того, экосистема JavaScript богаче, чем Python. Она предлагает обилие сред разработки, редакторов кода, фреймворков, библиотек. Это еще один шаг к пониманию, как работает «взрослое» программирование.

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

C#

Если вы не определились с языком, значит еще не решили, что вас привлекает: веб, мобильные или десктопные приложения. Тогда ваше решение — C#, универсальный инструмент для всех направлений разработки. Чтобы создавать десктопные приложения, понадобится Visual Studio (версия Community — бесплатная). Для мира мобильных устройств установите Xamarian, а для веба пригодится ASP.NET.

Взглянем на наш код на языке C#:


static void Main(string[] args)
{
	int number = 10;
	fib_recursion(number);
}
 
static void fib_recursion(int n, int a = 0, int b = 1)
{
	if (n == 0) return;
	Console.WriteLine(a);
	fib_recursion(--n, b, b+a);
}

Код вновь незначительно усложнился — это связано с использованием ключевого слова static.

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

Подробней о языке C# вы можете узнать в нашей ознакомительной статье.

Swift

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

Четвертая версия Swift вышла в 2017 году: она содержит множество улучшений для работы со строками, коллекциями; возросла надежность и многое другое. Это уже не «сырой» язык, а классический представитель верхушки рейтинга TIOBE с планомерным развитием. С помощью Swift вы можете создавать приложения для всех продуктов Apple: macOS, watchOS, iOS и любой новой системы, если она появится.

Посмотрим на код последовательности Фибоначчи:


func fib_recursion(num1: Int, num2: Int, steps: Int) {
 
	if steps > 0 {
    	let newNum = num1 + num2
    	fib_recursion(num2, num2: newNum, steps: steps-1)
	}
	else {
    	print("result = \(num2)")
	}
}
fib_recursion(0, num2: 1, steps: 10)

Java

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

Сегодня он в основном ассоциируется с разработкой приложений для Android — но это лишь малая часть его возможностей. При помощи Java вы можете создавать графические виджеты для веба или писать десктопные приложения — принцип независимости от платформы и устройства в Java живет и процветает.

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

А вот так выглядит Java-код нашей последовательности в простейшем императивном случае:


public class MainClass {
 
  public static long fib_recursion(long number) {
	if ((number == 0) || (number == 1))
  	return number;
	else
  	return fib_recursion(number - 1) + fib_recursion(number - 2);
  }
 
  public static void main(String[] args) {
	for (int counter = 0; counter <= 10; counter++)
  	System.out. printf("Fibonacci of %d is: %d\n", counter, fib_recursion(counter));
  }
}

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

Для тех, кто хочет начать быстрое освоение Java, наш педагог Сергей Ирюпин подготовил цикл вводных статей, которые мы постепенно публикуем в блоге:

Заключение

К списку можно было бы добавить ряд полезных языков вроде PHP, C++ или Ruby. Или несколько функциональных для общего развития: Lisp, Haskell, Clojure. Впрочем, до этого вы обязательно дойдете. Но сперва выбирайте специализацию, записывайтесь на курсы GeekBrains и осваивайте пять описанных must know языков.

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

Лучшие курсы по направлению Языки программирования 2021

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

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

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

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

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

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

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

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

Другие варианты в этой области знаний: 

18 бесплатных курсов для изучения популярных языков

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


#1. Java

Базовый курс для начинающих свой путь в программировании. Изучите азы: компиляция и запуск Java-программ, синтаксис языка, система типов, основы объектно-ориентированного программирования.

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


#2. С

Курс научит: писать код, запускать и отладижить программу + поможет глубже понять программирование на С. Программа разработана преподавателями университета Дьюка! Заодно подтянете технический английский.


#3. C++

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


Еще один курс , где лекторы рассказывают об основных возможностях программирования на языке С++ и обсуждают распространенные ошибки, в том числе, и стилистические. Будет много тестов 🙂 


#4 . Python

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


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


#5. C#

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

Курс, где описываются концепции и приемы программирования, помогающие создавать большие программные проекты на С#. Напрвлен на практическую часть – будете решать много задачек.


#6. JavaScript

Здесь сможете попрактиковаться с функциями JavaScript в онлайн режиме. Есть подсказки и немного теории!

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


#7. Visual Basic.NET

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

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



#8. R

На  курсе учат писать функции, работать с данными и анализировать их при помощи R + применять основные методы статистического анализа. Продвинетесь на ступень выше всего за 22 часа обучения!

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

#9

. PHP

Целый  сборник видеолекций об языке PHP. Есть уроки на самый разный уровень владения языком — от установки PHP до создания баз данных.

Курс Мичиганского университета, где доцент по информатике расскажет о фишках PHP. А еще помогут создать первое приложение!


#10. Perl

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

Какой язык программирования учить в 2020-м? / Блог компании JUG Ru Group / Хабр

Статей с подобными заголовками существует уже множество. Но в них постоянно какая-то дичь! Смотрите, Google ещё до основных результатов советует такое:

HCL, Карл! Язык, который не просто очень далёк от «Самых Популярных», но ещё и создан для конфигурации, так что его вообще странно ставить в один ряд с языками общего назначения. Страшно представить приключения новичка, который решит строить карьеру по таким советам. Начнём с того, что по запросу «как выучить HCL» вместо туториалов по языку вылезают тексты о соляной кислоте.

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


Оглавление




В чём проблемы

Тексты «какие языки учить» зачастую такие слабые, что опытные разработчики разнесли бы их в пух и прах, но опытные разработчики их просто не открывают. Их открывают новички, у которых нет компетенции, чтобы заметить подвох. В результате новички доверяют всякой ерунде, а проблемы в текстах остаются незамеченными и процветают. Что именно это за проблемы?

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

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

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

Проблема вторая: закидывание читателя мелочами без объяснения главного.

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

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

Пример: «Go использовался для создания Ethereum». Что, серьёзно, вот это самая важная информация про язык (когда речь идёт не о Solidity)? Вот она поможет сделать правильный выбор?

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

Пример: «Недостатки Python: нет таких модификаторов доступа, как protected, private и public».

Так и представляется картина маслом. Школьница Василиса Пупкина, ещё почти ничего не понимающая в программировании, пытается выбрать себе первый язык. Читает такое описание и говорит: «а, ну раз нет модификатора protected, конечно, я предпочту C#». Ну камон, неужели не ясно, что подобная информация даст Василисе только ощущение «всё это программирование непонятная хрень, лучше послушаю песню «Валенки»»?

Проблема четвёртая: бездумное следование рейтингам популярности языков. «А-а-а, Go поднялся в индексе TIOBE на несколько строчек, срочно учим его!» Ну слушайте, а ещё по TIOBE получается, что обучающий язык Scratch обошёл Dart — и что теперь, дартовикам надо срочно перейти на детский язык, что ли?

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

Пример: «В некоторых списках Python фигурирует на 5-ом месте, в других его ставят на 2-ое».

Проблема пятая: за всем перечисленным порой забывают про области применения, а для новичков это может быть важнее всего. Представим, что школьница Василиса, которая каждый день пользуется кучей мобильных приложений, захотела сделать своё собственное. Какая ей тогда разница, какие модификаторы доступа у Python, кто кого обошёл в рейтингах и на чём написан Ethereum? Всё, что ей надо знать — на чём пишут для iOS и для Android.

Поэтому вот текст, который пробует от всего этого уйти:



Вступление

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

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

Если хочется заниматься чем-то определённым — тогда важнее не теоретические сравнения языков, а то, какие используются конкретно в этой области. Часть информации об этом можно получить из текста ниже, но есть смысл и погуглить «what languages are used for %интересующая_область%».

Если важно как можно скорее пройти путь до получения работы, тогда тоже важнее текстов-сравнений может оказаться другая вещь. Стоит посмотреть на сайте вроде HeadHunter вакансии Junior-разработчиков своего города: какие языки чаще всего упоминаются в них?

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

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

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


C (1972) и C++ (1985)


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

Сейчас они выглядят не точно так, как в момент появления (у C++ каждые три года принимают новый стандарт, недавно был принят C++20), и с годами всё сильнее различаются. Но идеи, заложенные ещё в начале, продолжают накладывать свой отпечаток. Когда создавался C, компьютеры были куда менее производительными, так что их ресурсы приходилось экономить куда старательнее. И тогда всё было «ближе к железу»: программирование в большей степени, чем сейчас, требовало понимать, как физически работает компьютер.

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

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


Python (1991)


В каком-то смысле Python — противоположность C: если там «сложно, зато производительно», то здесь «просто, зато к производительности есть вопросы».

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

Что же до производительности, то Python действительно проигрывает и C++, и многим другим языкам. Но порой его называют «медленным» презрительно, а вот это уже зря. Вспомним слова о том, что языки хороши или плохи не сами по себе, а применительно к задачам. Да, есть задачи, для которых Python не подойдёт — но есть и такие, где разница в скорости между ним и другим языком вообще не будет заметна. У Python есть свои области применения, для которых он достаточно хорош.

Что это за области? Ещё давно Python полюбили учёные — и теперь с его помощью занимаются такими околонаучными вещами, как машинное обучение и data science. В бэкенде веб-сервисов его тоже используют. Про образование уже сказано. А помимо разработки, его любят в системном администрировании — там он отлично подходит для мелких утилит.

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


JavaScript (1995)


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

JS считается относительно простым языком для обучения. Но стоит учесть, что во фронтенде сейчас почти никто не использует «просто JavaScript», нужно будет ещё освоить один из популярных фреймворков (а также научиться пользоваться инфраструктурой). И вот к ним нареканий о сложности заметно больше — так что по пути к карьере фронтендера боль может возникнуть на этом этапе.

При популярности JavaScript и у него, и у всей современной фронтенд-разработки хватает ненавистников. Кто-то говорит, что во фронтенде всё постоянно меняется и надо постоянно переучиваться вместо спокойной работы (правда, в 2020-м таких жалоб уже заметно меньше, пик остался в прошлом). Кто-то жалуется на странности в логике JS. Во многом такие оценки субъективные, их не назвать «правильными» или «неправильными» (одно и то же кого-то злит, а кого-то радует) — так что неизвестно, что будете ощущать лично вы.

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


Java (1995)


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

Java используется в первую очередь в бэкенде, и хотя не царит там безраздельно, как JS во фронтенде, позиции очень хорошие. Порой можно услышать пренебрежительное «да она уже устарела и вот-вот умрёт». Ну, во-первых, скажу так: эти слова звучат уже лет дцать, а она что-то никуда не делась. Мы в JUG Ru Group проводим конференции по разным языкам, и по Java получаются самые посещаемые, в прошлом году собралось больше 2000 участников — это никак не выглядит смертью.


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

Другая популярная претензия к Java — мол, она «скучная и многословная», и используют её скучные компании вроде банков, а какие-то другие языки позволяют реализовать то же выразительнее и лаконичнее, и их ценят в весёлых стартапах. Ну, тут всё тоже субъективно, как с JS: знаю многих людей, которые говорят о Java с огнём в глазах и видят в банковской разработке множество интересных задач, но если для кого-то скучно, с этим не поспоришь.


C# (2000)


Когда компания Microsoft представила C#, многие назвали это «ответом Microsoft на Java». Разумеется, между этими языками хватает различий (и за прошедшие 20 лет их число лишь увеличилось), но некоторая перекличка действительно есть, и знание любого из этих языков помогает быстрее освоить другой.

Изначально самая заметная разница была не в самих языках (в синтаксисе или рантайме), а в сферах их применения. Microsoft создал C# как часть своей платформы .NET, связанной с Windows. И если нужно было сделать программу для Windows, то напрашивающимся вариантом выглядел .NET. А вот если такую программу, чтобы запускалась и на Windows, и на Linux, и на Mac — тут могла помочь Java.

Но с годами ситуация изменилась: у .NET появилась новая версия .NET Core, уже не привязанная к конкретной операционной системе, а люди стали реже устанавливать программы на компьютер и больше делать в браузере. Это отчасти сблизило сферу применения языков: если посмотреть сейчас вакансии с названием C#, там, как и у Java, часто будет написано что-то вроде «Построение бэкенда для веб-приложений».

Впрочем, это не единственный вариант. В играх на движке Unity тоже используют C#, а это самый популярный движок в мире — так что в геймдеве язык тоже активно представлен (в отличие от Java).


Kotlin (2011)


Этот язык создала в Санкт-Петербурге компания JetBrains. Он совместим с Java, поэтому Java-проекты можно постепенно переводить на Kotlin: не переписывая всё разом, а постепенно добавляя туда Kotlin-код. И многие попробовавшие его Java-разработчики захотели к нему перейти, ощутив, что тут нет «скуки и многословности», всё выразительнее и современнее.

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

JetBrains совершенно не хотят останавливаться на Android и метят с Kotlin в самые разные ниши, даже те, где не представлена Java. Каких-то успехов в этом компания добивается, с каждым годом язык становится популярнее, но от других вроде той же Java пока что сильно отстаёт, и насколько ещё ему получится вырасти — открытый вопрос. Так что, если учить Kotlin, в Android-разработке это точно очень пригодится, а в других областях — как повезёт.


Swift (2014)


Наконец, самый молодой язык из перечисленных — он был представлен меньше шести лет назад. Обычно за такое время языки не успевают стать достаточно популярными для попадания в такие списки. Но здесь ситуация особая: компания Apple, создавшая его, ясно дала понять, что теперь iOS-приложения надо писать на нём. А тут как Apple скажет — так и будет, свою платформу компания контролирует.

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

И в итоге выбор получается совсем простой. Хотите писать приложения для айфонов (ну или для Mac, Apple TV, Apple Watch) — учите Swift. Не хотите их писать — не учите Swift. Ну, если хотите делать приложения «для iOS и Android сразу», существуют ещё кроссплатформенные решения вроде Flutter, но они куда менее популярны.


Прочие языки

Молодые: Go, Dart, Rust и так далее

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

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

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

Высокооплачиваемые: Scala, F#, Haskell и так далее

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

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

Узкоспецифичные языки: SQL, HTML, Bash и так далее

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

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


Заключение

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

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

Что если я заявляю «надо объяснять главные различия», то надо было обязательно рассказать про типизацию.

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

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


А напоследок хочу обратиться к опытным разработчикам с минуткой рекламы. Несмотря на личные предпочтения, я старался в этом тексте не ставить никакой язык выше другого. Тот же подход у компании JUG Ru Group, где я работаю: мы проводим конференции по самым разным языкам и темам (от JS и .NET до тестирования и devops).

И этим летом в наших онлайн-конференциях поучаствуют такие люди, как создатель C++ Бьярне Страуструп и создатель Java Джеймс Гослинг. А ещё будет создатель Stack Overflow Джоэл Спольски — поскольку на SO задают вопросы о самых разных языках, то и ему самому наверняка захотят задать вопрос самые разные разработчики. В общем, на каком бы языке вы ни писали, вероятно, среди этих конференций есть интересные для вас — рекомендую сходить на сайт и проверить лично.

Обучение языку программирования: методы и советы

Советы по выбору языка программирования

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

  1. «Я хочу уяснить как пишутся компьютерные программы, поскольку моя деятельность косвенно связана с программированием». Этот подход может быть свойственен для специалистов, занимающихся продажами или поддержкой программных продуктов, но непосредственно в их создании не участвующих. Знакомство с программированием в этом случае может быть ограничено несколькими беседами с экспертами, выполнением простых учебных задач, просмотром популярных тематических видеороликов.
  2. «Я хочу самостоятельно писать программы, которые помогут мне решать профессиональные задачи без привлечения профессиональных программистов». Современные языки программирования вполне рассчитаны на такую деятельность. Специалист, не являющийся профессиональным программистом, в состоянии создать компьютерное приложение или утилиту, веб-сервис средней сложности без привлечения специалистов. Это позволяет сэкономить как время, которое могло бы быть затрачено на постановку задачи, так и финансовые средства. При таком подходе следует выбирать языки программирования с низким порогом вхождения, не требующие организации сложной среды разработки (Python, JavaScript и т.п.).
  3. «Я хочу связать свою профессиональную деятельность с программированием и стать в этой отрасли высококлассным и высокооплачиваемым специалистом». В этом случае следует сразу ориентироваться на относительно сложные, эффективные и востребованные языки программирования, такие, как C++, C#, Java, Go, Swift, Rust. Их изучение потребует дополнительных усилий и времени, но преодолевший эти препятствия специалист сможет в итоге рассчитывать на высокий доход.

Рисунок 1. Примерные ставки оплаты труда программистов. Автор24 — интернет-биржа студенческих работ

Советы по организации среды разработки

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

  1. редактор кода; редакторы для написания компьютерных программ существенно отличаются от используемых для создания обычных текстов: они оснащены функциями нумерации строк, подсветки синтаксиса, автодополнения и другими возможностями, ускоряющими написание программ; можно рекомендовать начинающим такие редакторы, как Notepad++, Sublime, VisualCode;
  2. средства сборки; мало написать текст программы на языке программирования, нужно еще превратить его в работающую программу, безошибочно исполняемую компьютером; для этого применяются компиляторы, линковщики, упаковщики и прочие утилиты, превращающие исходный код в работающее приложение, утилиту или сервис;
  3. система управления версиями; в процессе коллективной работы программист обменивается фрагментами исходного кода с коллегами; при этом важно сохранять не только актуальные, но и предыдущие состояния программного кода, чтобы можно было вернуться к ошибочно отвергнутым решениям; кроме того, в процессе разработки часто возникает потребность провести эксперимент, выбрать лучший из вариантов, не повредив при этом основной продукт; для решения всех этих задач предназначены системы управления версиями, наиболее популярной из которых является git.

Рисунок 2. Редактор кода Notepad++. Автор24 — интернет-биржа студенческих работ

Советы по поиску информации о выбранном ЯП

Замечание 1

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

Рисунок 3. Devdocs — ресурс, содержащий коллекцию документации по наиболее востребованным языкам программирования, фреймворкам, протоколам. Автор24 — интернет-биржа студенческих работ

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

  1. необходимо уделять время изучению стандартов, касающихся выбранного ЯП, а также базовой документации по нему; начинающие программисты часто осваивают профессию методом «копипастинга»: находят в чужих исходниках работающие фрагменты кода и вставляют в свои программы; такой эмпирический подход допустим, но чреват потерей эффективности; автор, у которого скопирован фрагмент, может не обладать достаточной степенью профессионализма, поэтому рекомендуется сначала найти подходящие решения в документации, и лишь потом, если возникли трудности, искать готовые варианты их применения; так, например, для изучающих JavaScript хорошей отправной точкой для изучения возможностей языка может стать ресурс Mozilla Development Network;
  2. следует прочитать хотя бы одно полное руководство по выбранному языку, причем желательно наиболее свежее; при этом хорошим подспорьем будет знание английского языка, поскольку русскоязычных авторов, пишущих учебники по программированию, мало и качество их работ уступает уровню западных авторов; во-вторых, переводная литература появляется на рынке хоть и довольно оперативно, но, все-таки, с некоторой задержкой; в-третьих, русскоязычные учебники продаются, в основном, в бумажном виде и стоят довольно дорого, тогда как англоязычные можно легко найти в электронном виде в Сети;
  3. при поиске ответов на возникающие вопросы следует прибегать к информации, накопленной в рамках крупных сообществ программистов; за каждым популярным языком программирования стоит, как правило, мощное коммюнити, члены которого могут давать полезные советы новичкам в случае затруднений; здесь вновь следует отметить, что в основном такие ресурсы (форумы, социальные сети, базы знаний) англоязычны;
  4. хорошим тоном считается практика самостоятельного поиска информации, предшествующего обращению с вопросами к опытным участникам сообщества; как правило, с проблемой, с которой столкнулся начинающий программист, уже кто-то сталкивался до него, и она уже хорошо раскрыта на таких ресурсах, как stackoverflow.com, Goggle Groups, GitHub и т.д.

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

Дата публикации 2014-05-10

Вопрос, который мне часто задают:

Какой язык программирования лучше всего подходит для машинного обучения?

Я отвечал на этот вопрос много раз, и теперь пришло время подробнее об этом поговорить в блоге.

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

Никто не может осмысленно решить эти проблемы для вас.

Какие языки используются

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

KDnuggets всегда проводил языковые опросы. Недавний опрос под названием «Какие языки программирования / статистики вы использовали для аналитики / интеллектуального анализа данных / работы с данными в 2013 году«. Тенденции практически идентичны предыдущему году. Результаты показывают интенсивное использование R и Python и SQL для доступа к данным. SAS и MATLAB стоят выше, чем я ожидал. Я ожидаю, что SAS учитывает более крупный корпоративный (Fortune 500) анализ данных и MATLAB для разработки, исследований и использования студентами.

Kaggle предлагает соревнования по машинному обучению и опрашивает свою пользовательскую базу в отношении инструментов и языков программирования, используемых участниками соревнований. Они опубликовали результаты в 2011 году под названиемЛюбимые инструменты Kagglers(также см.обсуждение на форуме). Результаты предполагают обильное использование R. Результаты также показывают хорошее использование MATLAB и SAS с гораздо более низким представлением Python. Я могу засвидетельствовать, что я предпочитаю R над Python для конкурсной работы. Он просто чувствует, что у него есть больше предложений с точки зрения анализа данных и выбора алгоритма.

Бен Хамнер, администратор Kaggle и автор вышеприведенного поста в блоге Kaggle, более подробно расскажет об опциях, касающихся языков программирования для машинного обучения, в сообщении на форуме под названием «Какие инструменты люди обычно используют для решения проблем«.

Бен отмечает, что MATLAB / Octave является хорошим языком для матричных операций и может быть полезен при работе с четко определенной матрицей объектов. Python разбит на части и может быть очень медленным, если вы не перейдете в C. Он предпочитает Python, когда не работает с четко определенной матрицей функций, и использует Pandas и NLTK. Бен комментирует, что «как правило, если это показалось интересным для статистиков, оно было реализовано в R» (хорошо сказано). Он также жалуется на то, что сам язык уродлив и болезнен для работы. Наконец, Бен комментирует Джулию, которая не может многое предложить библиотеке, но является его новым любимым языком. Он комментирует, что он обладает лаконичностью таких языков, как MATLAB и Python со скоростью C.

Энтони Голдблум, генеральный директор Kaggle, представил в 2011 году группе пользователей Bay Area R популярность R в соревнованиях Kaggle под названиемКонкурсы прогнозного моделирования: превращение науки о данных в спорт(см.слайды PowerPoint). Слайды презентации дают более подробную информацию об использовании языков программирования и предлагают другую категорию, которая столь же велика, как и использование R. Было бы хорошо иметь необработанные данные, которые были собраны (почему они этого не сделали выпустить это для своего собственного сообщества данных, серьезно !?).

Джон Лэнгфорд в своем блоге. У Hunch есть отличная статья о свойствах языка программирования, которую следует учитывать при работе с алгоритмами машинного обучения, под названием «Языки программирования для машинного обучения«. Он делит свойства на проблемы скорости и возможности программирования (простота программирования). Он указывает на мощные стандартные реализации алгоритмов, все на C, и комментирует, что он не использовал R или MATLAB (пост был написан 8 лет назад). Потратьте некоторое время и прочитайте некоторые комментарии ученых и специалистов отрасли. Это глубокая и нюансированная проблема, которая действительно сводится к особенностям проблемы, которую вы решаете, и к среде, в которой вы ее решаете.

Языки машинного обучения

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

MATLAB / Octave

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

р

R — рабочая лошадка для статистического анализа и машинного обучения расширением. Много разговоров дается на кривой обучения, я действительно не видел проблему Это платформа для понимания и изучения ваших данных с использованием статистических методов и графиков. У него огромное количество алгоритмов машинного обучения, а также усовершенствованные реализации, написанные разработчиками алгоритма.

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

питон

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

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

Java-семья / C-семья

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

Есть надежные библиотеки, например, Java имеетWekaи Mahout. Также обратите внимание, что более глубокие реализации основных алгоритмов, таких как регрессия (LIBLINEAR) и SVM (LIBSVM) написаны на C и используются Python и другими инструментами. Я думаю, что вы серьезно, вы можете создать прототип на R или Python, но вы будете внедрять более тяжелый язык по таким причинам, как скорость выполнения и надежность системы. Например, бэкэндBigML реализован в Clojure,

Другие проблемы

  • Не программист: Если тыне программист(или не уверенный программист) Я рекомендую играть в машинное обучение через графический интерфейс, напримерWeka,
  • Один язык для исследований и операцийВозможно, вы захотите использовать один и тот же язык для создания прототипов и для производства, чтобы снизить риск неэффективной передачи результатов.
  • Любимый язык: У вас может быть любимый язык любимого языка и вы хотите придерживаться этого. Вы можете реализовать алгоритмы самостоятельно или использовать библиотеки. Большинство языков имеют некоторую форму пакета машинного обучения, хотя и примитивную.

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

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

Я хотел бы услышать ваши мысли, оставить комментарий.

Оригинальная статья

Заказать обучение языкам программирования — ФРИЛАНС.ру

Репетитор немецкого языка от 1 — 9 класса

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

Обучение JavaScript

Обучу основам JavaScript посредством создания космической аркады-шутера.
Всего за 30-40 дней, в зависимости от Ваших успехов, на живых и наглядных примерах, Вы создадите свою первую компьютерную игру и обучитесь основам программирования в стиле ООП на J…

Переводы по итальянскому языку

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

Перевожу текст турецкого языка на русский язык и наооборот

Перевожу текст с турецкого на русский с обьемом 2500 символов

Совершу перевод с английского или китайского языка

Совершу перевод как с английского или китайского языков, так и наоборот. Опыт переводческой деятельности более 3 лет. Имеется высшее педагогическое образование по направлению инострынне языки. Пишите, буду рада сотрудничеству с Вами

Репетиторство

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

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

Один из наиболее частых вопросов, которые я получаю от учителей и родителей: какой язык программирования мы должны использовать, чтобы научить детей программировать? Важно ли всегда начинать с блочных языков, таких как Scratch? В каком возрасте им следует перейти на текстовые языки? И как мне выбрать между Python, Java или JavaScript?

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

Итак, есть ли один «правильный» язык программирования для начала?

Язык кодирования не важен.Понятия программирования есть!

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

Языки программирования приходят и уходят, и вы будете адаптироваться.

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

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

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

Языки программирования приходят и уходят, и вы будете адаптироваться.

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

С годами я научился использовать разные языки на разных машинах, некоторые из которых слишком малопонятны, чтобы упоминать их. За последние 10 лет в качестве преподавателя я выучил достаточно Logo, Scratch, Processing, JavaScript, Arduino и Python, чтобы использовать его в качестве учебного языка в своих классах.

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

Часто возникает еще один вопрос: нужно ли начинать всех детей с блочных языков вместо текстовых?

Блок или текст?

Я начал использовать Scratch, пожалуй, самый популярный и удобный для детей язык, основанный на блоках, в классе цифрового дизайна для шестиклассников почти 10 лет назад, и мне по-прежнему нравится использовать его на всех уровнях обучения.Я очень рад использовать только что выпущенные новые функции Scratch 3.0, особенно расширения для поддержки преобразования текста в речь и языкового перевода.

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

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

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

Мои ученики средней школы готовы приложить дополнительные усилия, чтобы изучить текстовое кодирование; часто они замедляются, чтобы быть осторожными с орфографией и синтаксисом, когда решают задачу программирования на Python, JavaScript, Arduino и Processing. Но как только учащиеся могут пройти начальную часть «Я должен действительно смотреть, что я печатаю», они часто ценят гибкость и мощь текстового кодирования, особенно когда они обнаруживают, насколько проще копировать, вставлять, изменять и сотрудничать. по текстовому коду для создания проектов.

На ускоренном курсе по информатике KCI Foothill College, который я преподаю каждое лето, я предлагаю учителям как Scratch, так и Python, и показываю один и тот же проект на обоих языках. Им нравится видеть параллели между двумя типами языков, и даже больше, если мы сначала начнем с «псевдокода» или блок-схемы — способа записать алгоритм перед написанием любого кода. Вот как выглядит небольшой проект, связанный с проверкой пароля, в виде блок-схемы в Scratch и Python.

Блок-схема средства проверки паролей Та же программа проверки паролей в Scratch Та же программа проверки паролей в Python

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

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

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

Имеется ли сильное сообщество преподавателей?

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

… обучение хорошему программированию важнее преподавания популярного языка.

Легко ли забрать?

Есть много текстовых языков на выбор — некоторые более популярны сегодня в технической индустрии, чем другие, некоторые с особыми функциями, которые делают их удобными для создания конкретного проекта. Хотя многим старшеклассникам, возможно, придется в конечном итоге изучить Java для курса AP Computer Science, это не обязательно самый простой язык для начала.Python намного проще и набирает популярность в образовании, потому что он настолько прост. После трех лет использования Python в факультативных занятиях по информатике я постоянно удивляюсь, как мало нужно сделать что-то и как быстро мои ученики средней школы учатся программировать на Python. Вдохновленный тем, насколько хорошо Python работает в обучении детей программированию, я потратил время на то, чтобы написать об этом книгу.

В чем заключается философия дизайна? Был ли он разработан для этой возрастной группы?

Важно предлагать инструменты, соответствующие возрасту, а языки программирования могут скрывать или демонстрировать функции в зависимости от целевой возрастной группы.Scratch, основанный на философии использования кода для творческого выражения, намеренно упрощает некоторые конструкции, которые можно ожидать от языка программирования. Scratch Jr. разработан для детей, которые все еще учатся читать, и не имеет переменных или условных выражений, которые могут быть слишком запутанными в их возрасте. Python предлагает расширения для поддержки многих типов проектов, но они доступны в виде модулей, которые необходимо явно добавлять, поэтому вам не нужно их видеть, пока они не понадобятся. Языки для старшеклассников, работающих над сложными программами, должны поддерживать отладку, что является основным навыком.Если обучение «объектно-ориентированному» программированию имеет решающее значение, то использование Java — неплохой выбор.

Насколько легко его установить и работает ли он на разных платформах?

Об этом следует помнить, особенно если важно, чтобы учащиеся продолжали программировать дома. Некоторые из них работают только в определенных средах, например в языке программирования Apple Swift. Если учащиеся работают с Chromebook, то наличие стабильного инструмента на основе браузера имеет решающее значение. Еще одна вещь, которую следует учитывать: действительно ли язык доступен бесплатно, чтобы каждый учащийся мог использовать его дома, или есть скрытые расширения, доступные только за плату?

Насколько легко делиться проектами с сообществом?

Одной из фундаментальных идей, лежащих в основе Scratch, было создание сообщества и предоставление детям возможности учиться друг у друга.Это сообщество полезно и для учителей. Тем не менее, совместное использование также требует планирования: когда и в какой степени вы хотите, чтобы учащиеся делились, комментировали, повторно использовали и перенаправляли проекты других. Хотя JavaScript может быть осужден как первый текстовый язык для изучения и не так прост, как Python, у него есть то преимущество, что он просто запускается в Интернете. Продемонстрировать проекты так же просто, как опубликовать их на школьном веб-сервере.


При выборе языка необходимо учитывать множество других факторов.Какие проекты возможны? У разных языков есть поддержка и расширения для разных типов проектов; например, Processing и P5.js упрощают работу с медиапроектами, а также искусство и анимацию. Python позволяет писать сложные проекты анализа данных и даже машинного обучения. Учителям также могут потребоваться мощные классные инструменты для управления заданиями и выставлением оценок, особенно для групповых проектов.

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

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

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

Количество результатов поиска Google по фразе «выбор первого языка программирования» на момент написания — 15 800. Это показывает, насколько обсуждалась проблема выбора первого язык программирования есть. В этом сообщении в блоге я на самом деле не буду пытаться отвечать на поставленный вопрос. в заголовке сообщения. Я не буду обсуждать, какой язык мы должны преподавать в первую очередь. Вместо этого я рассмотрю более интересный вопрос.

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

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

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

1. Почему язык программирования имеет значение

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

1.1 Сразу полезные навыки

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

1.2 Объектив для дальнейшего обучения

Программирование часто представляется как инструмент для поддержки мышления [2], и утверждалось, что «изучение и использование определенных компьютерных языков может влиять на то, как люди решают проблемы» [3], проводя параллель с гипотезой Сепира – Уорфа о разговорной речи. языков. Выбор первого языка программирования важен, поскольку он помогает студентам задуматься и понять дальнейшие предметы, преподаваемые в рамках учебной программы. Например, обучение математически ориентированному языку программирования может способствовать пониманию других математических предметов.

1.3 Дополнительные инструменты программирования

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

Рисунок 1. Самые распространенные первые языки программирования в Великобритании, адаптированные из [5] и Австралия / Новая Зеландия адаптировали из [18].

2. Примеры первых языков программирования

Наиболее распространенные вводные языки программирования в Великобритании и Австралии / Новой Зеландии были количественно изучены в других местах [5, 18], и результаты показаны на Рисунке 1. Я подробно обсуждаю четыре примера вариантов. Два из моих примеров представляют два наиболее широко используемых языка в Великобритании, а один обсуждает необычный выбор.В моем последнем примере обсуждается учебная программа, использовавшаяся в Массачусетском технологическом институте до 2009 года, которая часто критически упоминается в литературе, посвященной выбору языка программирования, и поэтому ее стоит обсудить, несмотря на то, что она больше не используется.

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

Java — самый популярный первый язык программирования в университетах Великобритании (изучается на 61% курсов). Согласно индексу TIOBE, Java также является самым популярным языком программирования в целом, так что это ожидаемый выбор.Обучение Java сразу дает студентам полезные навыки программирования. Курс в Кентском университете учит парадигме объектно-ориентированного программирования основного потока с использованием Java. Он использует образовательную среду программирования BlueJ [6], которая скрывает многие сложности профессиональных инструментов для Java. Являясь широко используемым языком программирования, Java также позволяет вести ряд последующих курсов, используя язык, который студенты уже знают.

Вторым по распространенности первым языком в университетах Великобритании является Python (17% курсов), который используется, например, Лондонским университетом королевы Марии.Интересно, что он так же популярен, как Java, в Австралии и Новой Зеландии [5] и наиболее часто встречается в ведущих университетах США [7]. Мотивы для выбора Python аналогичны мотивам использования Java, хотя Python более часто используется в недавно популярных областях, таких как искусственный интеллект.

2.2 Необычный выбор языков программирования

Примером учебной программы, в которой нечасто выбирается первый язык программирования, является курс Кембриджского университета.В первый год Кембридж преподает ML (который поддерживает функциональную парадигму), а затем Java. ML не используется в промышленности и не поддерживается широко используемыми вторичными инструментами. Публичная информация о выборе языка приуменьшает значение выбора и фокусируется на том факте, что он используется для обучения мышлению в компьютерных науках. Процитируем часто задаваемые вопросы о приеме на факультет компьютерных наук и технологий [16] : «Мы стремимся научить вас основным принципам, чтобы вы могли быстро усвоить любой новый язык, который появляется.»

Еще одним необычным выбором был язык Scheme, который преподавался в Массачусетском технологическом институте до 2009 года с использованием учебника «Структура и интерпретация компьютерных программ» (SICP) [8]. SICP считается сложным, но глубоким чтением ( «он резко поднял планку интеллектуального содержания вводной информатики» [12]). Он основан на идее обработки кода как данных, которая является фундаментальной концепцией в Scheme, но не присутствует — в той же форме — во многих других языках.По этой причине SICP одинаково интересен и полезен для опытных профессиональных программистов. Этим аспектом SICP часто восхищаются, но, как я расскажу позже, преподаватели также критикуют его.

3 Аргументы в пользу выбора первого языка

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

3.1 Обсуждаемые (и не обсуждаемые) языковые аспекты

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

  • Использование в промышленности и вспомогательной оснастке. Два аспекта, которые обсуждались ранее и часто упоминаются в литературе, — это то, используется ли язык в промышленности и какие вторичные инструменты он предоставляет.Авторы в пользу языков, которые не получили широкого распространения в отрасли, часто предлагают [1, 9], что второй язык может быть введен во второй половине первого года. Это дает им необходимые практические знания, когда они знакомятся с основными концепциями программирования.

  • Парадигма языка программирования. Многие авторы спорят в пользу определенного языка, основываясь на его парадигме программирования. Это может быть как объектно-ориентированное [4], так и функциональное [10]. Авторы часто пишут для своих собственных подсообществ, которые уже рассматривают одну парадигму как высшую.Такие аргументы также могут быть косвенными аргументами в пользу определенной линзы для дальнейшего обучения, что является еще одним важным аспектом выбора языка программирования.

  • Синтаксическая простота или знакомство. Синтаксис — это аспект языка программирования, не имеющий общепринятого лучшего решения. Он используется в аргументах в пользу языков программирования, которые в некотором смысле занимают более крайнюю позицию — либо минималистичный синтаксис Scheme (используемый SICP), либо математическая нотация [11], либо отсутствие синтаксического шума в таких языках, как Python.Такие аргументы часто приводятся без попытки убедить читателя, что такая крайняя позиция более желательна.

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

  • Элегантность идей информатики. Одним из ключевых аргументов в пользу учебника SICP является то, что он учит элегантным идеям информатики.В отличие от дискуссий о синтаксисе, в компьютерном сообществе, по-видимому, существует широкое согласие относительно элегантности некоторых идей (например, представленных в SICP). Одно из возможных объяснений того, почему «элегантность» не проявляется явно в аргументации, состоит в том, что она рассматривается как неформальный или даже художественный аргумент по сравнению с аргументами, которые можно сформулировать более формально.

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

3.2 Аргументация в пользу популярных языков

Теперь я рассмотрю ряд аргументов в пользу следования определенной учебной программе во вводном курсе программирования. Они взяты из опубликованных академических статей либо в исследовательских центрах образования, либо в информатике, за одним исключением — комментарий, объясняющий решение MIT о переходе с SICP и языка Scheme на Python, доступен только как стенограмма комментария. Я начинаю с рассмотрения аргументов в пользу популярных языков программирования, а именно Python и Java.

Программирование тыками

Учитывая культовый статус учебника SICP, решение о переходе от Scheme к основному потоку Python в Массачусетском технологическом институте привлекло большое внимание. По словам Джерри Сассмана, соавтора SICP [13]:

[SICP] больше не готовит инженеров к тому, что такое инженерное дело сегодня. (…) В 80-х и 90-х инженеры создавали сложные системы, комбинируя простые и понятные части. (…) Сегодня это уже не так. (…) Инженеры теперь обычно пишут код, [который] они не полностью понимают.(…) Сегодняшнее программирование больше похоже на науку. Вы берете этот кусок библиотеки и тыкаете в него. Вы пишете программы, которые тыкают в него и смотрят, что он делает. И вы говорите: «Могу я настроить его так, чтобы он делал то, что хочу?»

Этот аргумент основан на глубоком наблюдении за тем, как программирование осуществляется в наши дни. Хотя в нем не говорится о конкретных языках программирования, для обучения «программированию путем тыкания» требуется язык, который широко используется (так что в нем есть множество библиотек, которые студенты могут использовать), а также, вероятно, тот, который стал более популярным в последние годы и полностью поддерживает этот стиль работы, такой как Python или JavaScript.

Образовательные среды программирования

Другой подход к вводной программе программирования — использование образовательной среды, такой как BlueJ [6], которая «позволяет студентам сосредоточиться на решении задач программирования, не отвлекаясь на механику компиляции и выполнения программ Java» [14]. Такие среды существуют для множества языков, но они особенно популярны при обучении Java, который в остальном полагается на очень сложные вторичные инструменты.Образовательная среда также может принимать форму микромиров — простых в использовании проблемных областей (таких как робот, перемещающийся по двумерной сетке), которые позволяют преподавателям «вводить материал таким образом, чтобы ограничить сложность [таких языков, как Java]» . В противном случае «детали могут легко сбить с толку студентов-новичков». [4]

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

3.3 Аргументация в пользу необычных языков

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

Фундаментальные концепции информатики

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

Одним из конкретных примеров является учебник How to Design Programs (HTDP) [17], в котором подчеркиваются «основные понятия модульности, спецификации и абстракции данных» и утверждается, что эти «не следует заменять более сложными темами, такими как шаблоны проектирования. «[9]. Он использует серию обучающих языков на основе схемы (также используемой SICP) с возрастающей сложностью. Таким образом, этот подход сродни использованию образовательной среды. Другая критика SCIP [11] приводит доводы в пользу языка с синтаксисом, близким к математической нотации, который позволяет студентам легко доказывать уравнения о программах.В документе, однако, не обсуждается, почему студенты должны уметь это делать — он был написан для подсообщества, где признается важность подтверждения программ.

Эквалайзер между студентами

Интересный аргумент в пользу необычного языка состоит в том, что он «работает как уравнитель между студентами, которые немного знают программирование, и теми, кто этого не делает» [10]. Авторы подкрепляют свое наблюдение эмпирическим исследованием — студенты без предыдущего опыта программирования (которые непропорционально чаще являются студентками) проходят курс так же хорошо, как и студенты с предыдущим опытом программирования на других языках.Часто задаваемые вопросы о приеме в Кембридж [16] также рекомендуют будущим студентам, которые хотят начать программировать самостоятельно, что «может быть хорошей идеей выучить [язык программирования], который явно не преподается в Tripos».

4. Оценка аргументов для первого языка программирования

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

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

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

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

5. Выводы

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

Выбор первого языка — это то, что социологи называют сложной проблемой.Понятие появилось в контексте социальной политики и выявляет проблемы, которые невозможно однозначно описать. Решения злых проблем «не могут быть осмысленно правильными или ложными; и нет смысла говорить об« оптимальных решениях »[злых] проблем, если сначала не будут наложены строгие оговорки» [15].

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

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

  1. Тобин-Хохштадт, Сэм и Дэвид Ван Хорн. «От принципов к практике с классом в первый год». In Proceedings of Trends in Functional Programming in Education, TFPIE 2013.
  2. Аллен Дауни. «Программирование как способ мышления». Scientific American, 2017. Доступно в Интернете по адресу https: // blogs.Scientificamerican.com/guest-blog/programming-as-a-way-of-thinking/ (получено 12 мая 2019 г.)
  3. Роб Митчам. «Языки компьютерного программирования могут влиять на науку и мышление». Доступно в Интернете по адресу https://news.uchicago.edu/story/computer-programming-languages-can-impact-science-and-oughtt (по состоянию на 12 мая 2019 г.)
  4. Листер, Раймонд. «Сначала учим Java: эксперименты со свиньей — ранняя педагогика». Труды Шестой Австралазийской конференции по компьютерному образованию — Том 30. Австралийское компьютерное общество, Inc., 2004.
  5. Мерфи, Эллен, Том Крик и Джеймс Х. Давенпорт. «Анализ вводных курсов программирования в университетах Великобритании». Искусство, наука и инженерия программирования, 2017, Vol. 1, выпуск 2, статья 18
  6. Кёллинг, Михаэль. «Использование BlueJ для ознакомления с программированием». Размышления о преподавании программирования. Springer, Берлин, Гейдельберг, 2008. 98–115.
  7. Филип Го. «Python — теперь самый популярный язык вводного обучения в ведущих университетах США».Доступно в Интернете по адресу: https://cacm.acm.org/blogs/blog-cacm/176450/fulltext (получено 12 мая 2019 г.)
  8. Абельсон, Гарольд, Джеральд Джей Сассман и Джули Сассман. «Структура и интерпретация компьютерных программ». MIT Press, 1985.
  9. Felleisen, Matthias, et al. «Структура и интерпретация учебной программы по информатике». Журнал функционального программирования 14.4 (2004): 365-378.
  10. Чакраварти, Мануэль М.Т. и Габриэле Келлер. «Риски и преимущества обучения чисто функциональному программированию на первом курсе.»Журнал функционального программирования 14.1 (2004): 113-123.
  11. Вадлер, Филипп. «Критика Абельсона и Сассмана или почему расчет лучше, чем интриги». ACM SIGPLAN Notices 22.3 (1987): 83-94.
  12. Брайан Харви. «Почему структура и интерпретация компьютерных программ имеют значение». Бостон Глоуб (2011). Доступно в Интернете по адресу: https://people.eecs.berkeley.edu/~bh/sicp.html (по состоянию на 12 мая 2019 г.)
  13. Yarden Katz. «Программирование тыканием: почему Массачусетский технологический институт перестал обучать SICP». Архивировано в Интернете по адресу: http: // web.archive.org/web/20180609142559/http://www.posteriorscience.net/?p=206 (12 мая 2019 г.)
  14. Хэган, Дайанна и Селби Маркхэм. «Обучение Java в среде BlueJ». Материалы конференции ASCILITE Австралазийского общества компьютеров в обучении в высшем образовании. 2000.
  15. Риттель, Хорст У. Дж. И Мелвин М. Уэббер. «Дилеммы в общей теории планирования». Науки о политике, 4.2 (1973): 155-169.
  16. Департамент компьютерных наук и технологий Кембриджского университета.»Часто задаваемые вопросы о приеме». Доступно в Интернете по адресу https://www.cst.cam.ac.uk/admissions/undergraduate/faqs (последнее посещение — 30 мая 2019 г.)
  17. Felleisen, Matthias, et al. Как разрабатывать программы: введение в программирование и вычисления. MIT Press, 2018.
  18. Мейсон, Райна и Грэм Купер. «Вводные курсы программирования в Австралии и Новой Зеландии в 2013 году — тенденции и причины». Труды Шестнадцатой Австралазийской конференции по компьютерному образованию, том 148. Австралийское компьютерное общество, Inc., 2014.

7 лучших языков программирования для детей 2020 года (все, что вам нужно знать)

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

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

В отличие от моей эпохи (когда я научился программировать на собственном опыте), базовое программирование теперь довольно просто освоить, и есть много бесплатных ресурсов, которые могут помочь вам начать работу. За несколько часов любой может овладеть основами, а в течение недели или двух использовать эти знания для создания работающих приложений, игр и веб-сайтов.Это может быть что угодно, от физических подписок до таких сервисов, как Bitsbox или цифровых игр, таких как Osmo, Codemonkey или Code.org.

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

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

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

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

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

1. Scratch 3.0

Scratch — это бесплатный образовательный язык программирования, разработанный в первую очередь для детей в возрасте от 8 до 16 лет, разработанный Митчем Резником и запатентованный группой Lifelong Kindergarten Group Массачусетского технологического института (MIT). ). Обучить детей программированию с помощью Scratch легко, поскольку платформа предоставляет интуитивно понятный, простой в использовании интерфейс визуальных блоков, который избавляет от разочарований, связанных с набором текста, для маленьких учащихся. Это отличная отправная точка для программирования для детей.

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

Scratch также имеет большое онлайн-сообщество с более чем 15 миллионами зарегистрированных пользователей со всех уголков мира. Стать участником может любой желающий, если он соблюдает дружественные и уважительные правила, установленные командой MIT Scratch Team.

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

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

2.Blockly

Blockly — это язык программирования визуальных блоков для детей, который широко рассматривается как ответ Google на Scratch. Образно говоря, он использует те же строительные блоки, чтобы помочь детям освоить код.Единственное реальное отличие заключается в следующем: Blockly на самом деле является языком программирования, созданным из нескольких ранее существовавших языков программирования.

Разработанный под лицензией Apache 2.0, Blockly часто описывается как клиентская библиотека JavaScript для создания редакторов блоков визуального программирования. Это означает, что он в первую очередь создан для детей от 8 лет, которые хотят научиться программировать дома или в школе в своих собственных браузерах.

Blockly поставляется с «библиотекой JavaScript», которая в основном служит централизованным местом, где предварительно написанные языки (например, JavaScript, Python, PHP, Lua и Dark) могут быть легко найдены и доступны.

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

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

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

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

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

3. Python

В отличие от первых двух записей в списке, Python — это мощный текстовый язык компьютерного программирования, который дети в возрасте 8 лет могут легко использовать для самовыражения.Этот конкретный тип кода действует как отправная точка для освоения других языков, так и достаточно мощный инструмент для серьезной разработки игр / веб-приложений и программирования для детей.

В Интернете есть множество игровых и самостоятельных курсов, которые делают изучение Python (особенно Python 3) уникальным, увлекательным и очень увлекательным занятием для детей. Фактически, наша компания CodaKid недавно представила трек «Разработка игр с помощью Python», который учит детей создавать популярные игровые жанры с нуля, используя код Python.С тех пор мы последовали за Python 2 Attack of the RoboZombies и представим Python 3: CodaKid Smash в конце 2018 года.

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

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

Они также преодолеют сложность, связанную с управлением различными структурами в Python. Рисование фигур и узоров с помощью модуля Python turtle поможет вашим детям преодолеть первые препятствия с помощью анимации и игрового дизайна. В кратчайшие сроки они смогут создавать собственные приложения для Mac, ПК или Linux.

4.JavaScript

JavaScript — отличный выбор для детей, потому что теперь почти все работает на этом языке программирования. Google Chrome, Mozilla Firefox, Internet Explorer — все эти браузеры используют JavaScript. Если ваши дети овладеют именно этим языком, они научатся превращать простые веб-документы в потрясающие интерактивные приложения и игры.

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

JavaScript обычно является навыком повышения уровня для детей, которые уже имеют некоторый опыт программирования на Scratch или Python. Обычно это рекомендуется для детей старше 10 лет, но мы видели, что дети в возрасте от 8 лет занимаются нашей разработкой игр с помощью JavaScript.

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

Java Script — это, по сути, язык Интернета, и это отличный детский язык программирования для студентов, которые готовы к текстовому кодированию.

5. Lua (Roblox)

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

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

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

Благодаря своей скорости и легкости Lua идеально подходит для программирования встраиваемых устройств.Многие люди используют его сегодня для разработки игр и приложений для iOS и Android. Если вы не знали — популярная игра Angry Birds основана на Lua. В дополнение к этому, одна из наших любимых платформ для программирования детей всех времен использует Lua — Roblox Studio. Курс CodaKid «Разработка игр с использованием Roblox» — один из наших самых популярных онлайн-курсов, который позволяет детям создавать увлекательные игры с использованием кода Lua.

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

Как и Scratch, Lua имеет большое и активное онлайн-сообщество, полное членов, которые всегда готовы помочь и направить новичков в правильном направлении.

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

6. Java (Minecraft)

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

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

И это как раз на этапе базового пользователя. Как только ваши дети начнут действительно выходить за рамки начальных операций, для них станет очевидным, что Minecraft — это высокоадаптивная игровая площадка, открытая для настройки. Когда детям действительно понравится игра, вы можете познакомить их с «модами». Сокращение от модификаций, модов — это в основном все изменения, которые дети могут внести в игру. Они могут изменить все — объекты персонажей, пейзажи, особенности и т. Д.Возможности безграничны.

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

7. C # (Unity)

Unity — популярный игровой движок, который может научить детей программировать при создании игр профессионального качества. Это кроссплатформенное приложение для разработчиков игр с закрытым исходным кодом, в котором пользователи могут играть с объектами в 3D и добавлять к ним различные элементы. Сценарии могут быть написаны на C #, который очень похож на Java.

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

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

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

Материал разделен на две группы:

  • Уроки для изучения двигателя;
  • Уроки для изучения услуг и производства.

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

8. Go (Golang)

https://www.youtube.com/watch?v=cQ7STILAS0M&feature=youtu.be

Язык программирования Go — статически типизированный и компилируемый язык. один из новейших языков, набирающий все большую популярность. Фактически, он настолько новый, что ему всего чуть больше 10 лет (изобретен в 2009 году). Этот многообещающий рост делает его отличным языком для изучения, поэтому его следует добавить в любую учебную программу, посвященную программированию для детей.

Всего через несколько лет после того, как Go был впервые внедрен, он уже распространился на множество различных отраслей. Также растет список компаний и мегакорпораций из списка Fortune 500, которые подчеркивают его важность и перспективность. Uber, Netflix и даже American Express — это лишь некоторые из известных пользователей Go.

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

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

9. Swift (Swift Playgrounds)

Apple Swift Playgrounds была впервые представлена ​​в 2016 году как инструмент для обучения детей программированию. Swift Playgrounds включает в себя ряд базовых уроков кодирования и игровых задач, а также плотный интерфейс с графически приятным фоном. В качестве приложения для iPad Swift Playground подходит для школ, в которых iPad используется в классе.

Наша говядина со Swift Playgrounds связана не столько с языком, сколько с ее чрезмерно ограниченными уроками, которые, как и многие другие обычные ресурсы по программированию для детей, не дают студентам никакой свободы выражения, например, предоставляемого платформой Scratch.Студенты вынуждены проходить уровни по жесткому пути, определенному разработчиками курса. Мы выяснили, что творческие дети быстро устают от этого «на рельсах».

В связи с недавними новостями о том, что Apple планирует научить молодое поколение разработчиков iOS тому, как создавать приложения с поддержкой AR с помощью Swift Playgrounds, наше мнение может измениться. Мы обновим этот пост, как только углубимся в проект Swift Playgrounds AR.

Детские языки программирования: резюме

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

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

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

Как вы думаете, мы что-то упустили? У вас есть вопросы, комментарии или предложения? Если да, мы будем рады получить от вас известие! Пожалуйста, оставьте их в комментариях ниже!

Поделиться постом «9 лучших языков программирования для детей 2021 года»

5 лучших языков программирования для детей

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

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

1. Python

Python — это язык программирования, который читается как обычная речь. Добавлять комментарии к коду приходится редко, потому что код Python, который написан достаточно хорошо, читается так, как будто комментарии уже включены в код. Если ваши дети или ученики собираются изучать что-то вроде программирования, вам нужно, чтобы они получили базовое представление о том, как думать как программист.С Python у студентов будет очень мало препятствий для обучения программированию. Они смогут научиться конструировать идеи программирования в своих головах, а затем сосредоточиться на преобразовании этих идей в инструкции, которые машина может интерпретировать. У Python также есть философия «включенных батарей», которая относится к огромному количеству, которое можно сделать, просто изучив и используя базовые библиотеки Python. Многие общие функции, которые нужны программистам, уже встроены в язык программирования, что делает его отличным языком для изучения детьми.

2. Рубин

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

Студенты учатся программировать с помощью CoderZ

3. Java

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

4. C ++

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

5. Царапина

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

Резюме

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

Как преподавателю или наставнику, изучающему различные варианты, важно знать, что у каждого языка есть свои преимущества и недостатки.Важно, чтобы ваши ученики изучали концепции, лежащие в основе программирования, такие как логика написания кода, как использовать конструкции и приемы торговли. CoderZ — это среда онлайн-обучения, предназначенная для обучения детей в возрасте 10–18 лет программированию виртуальных и реальных роботов. Узнайте больше о CoderZ от Intelitek .

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

Как научить программированию | Codementor

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

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

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

Что значит «научить кого-то программировать»?

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

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

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

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

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

Настройка среды обучения

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

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

Лицом к лицу. Одна из самых больших ошибок, которую делают наставники по программированию, — это побуждение начинающих программистов использовать незнакомые инструменты, такие как Vim, которые добавляют ненужную когнитивную нагрузку для учащихся.Они могут пробиться, но будут идти вдвое медленнее. Вместо этого начните их со среды разработки, которая позволяет им использовать мышь, устанавливать курсор и перемещаться с помощью клавиш со стрелками. Этот вид редактора кода будет больше всего похож на инструменты, с которыми они уже знакомы, например Microsoft Word или браузер. Это освободит познавательные ресурсы учащегося, чтобы полностью сосредоточиться на изучении программирования. Они будут развиваться быстрее, и вы всегда сможете познакомить их со своим любимым редактором, как только они овладеют основами.

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

Работайте в обратном направлении от целей ученика

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

Создайте проект, связанный с целью учащегося

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

  • Если студент хочет устроиться на работу разработчиком, попросите его создать одностраничный веб-сайт-портфолио. Для первого прохода используйте только HTML, затем добавьте CSS. Затем добавьте JavaScript. И, наконец, вы можете ввести фреймворк, когда это имеет смысл.
  • Если ученик хочет создать оригинальную трехмерную мобильную игру, попросите его начать с создания клона 2D-тетриса.
  • Если студент хочет стать специалистом по обработке данных, попросите его поработать с одним набором данных, например с этим списком пассажиров Титаника.

Учащимся необходимо выполнять домашнее задание

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

Учащиеся должны

выполнить домашнее задание

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

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

Определите стиль учащегося

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

  1. Аналоги. Этим ученикам нравятся аналогии, которые связывают концепции программирования с концепциями реального мира, с которыми они уже знакомы. Когда я впервые изучал программирование, было полезно думать о переменной как о коробке с написанным на ней именем. Точно так же мне было полезно думать о методах / функциях как о рецептах.Некоторым учащимся удачно подобранная аналогия поможет концепции сразу же задействовать. Другие учащиеся найдут разговоры о «коробках» и «рецептах» невероятно запутанными! Эти ученики относятся к одному из двух других стилей.
    Как определять аналогистов: они будут использовать свои собственные аналогии для объяснения вещей.
  2. Deep Divers. У некоторых учащихся есть ненасытная потребность заглянуть за слои абстракции и по-настоящему понять, как все работает. Когда они знакомятся с концепцией переменных, их первым вопросом часто будет: как и где хранится значение переменной? Объяснения, которые машут руками, просто не подходят для этих учеников.Вы обнаружите, что они регулярно проверяют ваши собственные знания в области информатики. Если вы не знаете ответа на один из их вопросов, найдите время, чтобы изучить его. Это сделает вас лучшим программистом.
    Как определить глубоководных дайверов: они задают множество сложных вопросов.
    3. Экспериментаторы. Некоторые учащиеся хотят, чтобы вы перестали говорить, и пусть они попробуют это сами! Они узнают о переменных, проверяя их в командной строке, назначая и переназначая переменные, давая им странные имена и проверяя ограничения системы, пока они не выйдут из строя.Для этих учащихся сообщение об ошибке является приятным знаком того, что они узнали одну из границ системы. Эти студенты процветают, когда вы даете им инструменты для экспериментов и не мешаете им.
    Как идентифицировать экспериментаторов: они начинают экспериментировать с новой концепцией, прежде чем вы даже закончите ей объяснять.

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

Начните с максимально возможной разборки. Если кто-то пытается изучить науку о данных, попросите его научиться перемещаться по командной строке и выполнять базовые команды Python в REPL, прежде чем пытаться написать свой первый скрипт Python. Если кто-то пытается создать веб-сайт, попросите его создать первую версию, используя только HTML, прежде чем вводить CSS.

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

Ставьте цели, выходящие за рамки текущего уровня навыков учащегося

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

Разработка через тестирование (TDD) кажется здесь полезной. Однако, хотя я являюсь большим сторонником TDD, я считаю, что его следует вводить только после того, как студент освоится с основами программирования. Для меня просить ученика на ранних стадиях выполнить TDD — все равно что просить человека, который только что научился произносить «Конничива» по-японски, написать сонет на этом языке. Возможно, это удастся сделать, но результаты будут плохими.

Для людей, только начинающих свой путь в программировании, «Разработка, управляемая ошибками» — отличный способ познакомить учащихся с некоторыми концепциями, лежащими в основе TDD.Rails с его относительно дружелюбными и легко анализируемыми сообщениями об ошибках — хороший кандидат на это. Посещение маршрута, который не был создан (например, / people), приводит к ошибке: неинициализированная константа PeopleController. Это говорит ученику, что он должен делать дальше: создать PeopleController. После того, как они это сделают, посещение маршрута вызовет еще одну ошибку: контроллер не выполняет никаких действий. Следующий шаг ученика — создание действия для контроллера. Эта цепочка «увидеть ошибку, исправить ошибку» направляет учащегося к реализации функции, очень похожей на последовательность TDD «написать тест, сделать его неудачным, а затем пройти успешно».


Пример ошибки Rails.

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

Научите их находить решения самостоятельно как можно скорее

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

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

Размышляйте со своим учеником

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

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

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

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

Дайте им последний шанс

Толкните

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

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

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

языков программирования для образовательных ресурсов |

Языки программирования для образовательных учреждений варьируются от графического программного обеспечения перетаскивания, такого как Scratch, до Small Basic и Python. На этой странице перечислено программное обеспечение для программирования, предназначенное для учеников, начиная с детского сада (Искусство черепахи).Многие из них представляют собой среды визуального программирования, в которых дети могут комбинировать блоки для создания программного обеспечения. Другие, такие как Codea, позволяют вам писать код, в данном случае с Lua. Другие языки, такие как Code Spell, Run Marco !, The Foos и World of Codecraft, обучают навыкам программирования, пока дети играют в онлайн-игру.

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

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

Алиса

Алиса обучает программированию, пока дети создают анимационные фильмы с помощью дружественного интерфейса и повествования.
http://www.alice.org

All Can Code (Беги, Марко!)

Обучает программированию в веселой приключенческой игре. Оригинальный рассказ с красивым оформлением, рассчитанный на 6-12 лет. kids командой экспертов в области компьютерного программирования, игрового дизайна и технологий обучения в школах.Переведено на 13 языков. Работает на планшете, телефоне, в сети.
http://www.allcancode.com/
http://marco.allcancode.com/
https://itunes.apple.com/us/app/run-marco!/id919554969
https: // play. google.com/store/apps/details?id=com.allcancode.runmarco

Изобретатель приложений

Это программный язык программирования для образования, позволяющий создавать приложения для Android с визуальной средой перетаскивания.
http://www.appinventor.org/

Бета Робот

http: // www.betathegame.com/

Блоклы

http://code.google.com/p/blockly/

CargoBot

Сделано с помощью приложения Codea для iPad, игры для обучения концепциям программирования.
http://twolivesleft.com/CargoBot/
https://itunes.apple.com/us/app/cargo-bot/id5196

?ls=1&mt=8

Codea (iPad)

http://twolivesleft.com/Codea/
https://itunes.apple.com/us/app/codea/id439571171?mt=8

Код Комбат

http: // codecombat.com /

Codeletics Новый

http://www.codeletics.com/
http://www.codeletics.com/resources/teachersguide.pdf

Код

с болтом

Bolt — это законченный язык, который полностью (и безопасно) работает в браузере. Это язык, специально разработанный для детей, и в нем есть наработанные примеры, которые соответствуют учебной программе Великобритании для KS 2/3 и выше.
http://www.codewithbolt.com/

Динозавр Дейзи

Приложение для iPad от людей, которые приносят вам классики.
https://itunes.apple.com/us/app/daisy-the-dinosaur/id4

278

Удалить всех котят (E.A.K.)

Забавная история позволяет детям легко узнать о HTML и процессе кодирования.
http://www.eraseallkittens.com

Gamemaker Studio

Требуется немного больше усилий, но это более профессиональная система разработки игр.
https://www.yoyogames.com/studio

GameStar Mechanic

Обучает концепциям информатики, связанным с кодированием.
http://gamestarmechanic.com/

Hakitsu Elite

Это приложение для iPad обучает JavaScript с помощью игры с роботами.
http://kuatostudios.com/games/hakitzu/
https://itunes.apple.com/app/id599976903?mt=8

Классики (iPad)

http://www.gethopscotch.com/
https://itunes.apple.com/us/app/hopscotch-hd/id617098629?mt=8

Кодабл.

Обучающая игра для iPad, в которой дети от 5 лет и старше могут познакомиться с концепциями программирования и решением задач.
http://www.surfscore.com/

Коду

Этот язык визуального программирования от Microsoft работает на ПК и XBox.
http://research.microsoft.com/en-us/projects/kodu/

LearnToMod Новый

http://www.learntomod.com/

Light Bot

Light-bot — это увлекательная игра-головоломка, которая позволяет игрокам получить практическое представление об основных концепциях потока управления, таких как процедуры, циклы и условные выражения, просто направляя робота с помощью команд, чтобы подсвечивать плитки и решать уровни.
http://light-bot.com/

ЛОГОТИП

С 1960-х годов язык, ориентированный на детей и серьезные вычисления для взрослых. Идеи включены в Scratch, Move the Turtle и другие языки.
http://el.media.mit.edu/logo-foundation/products/software.html

Майнкрафт

Edu

Небольшая команда преподавателей и программистов в США и Финляндии помогает детям создавать и учиться с помощью Minecraft.
http://minecraftedu.com/

Перемещение черепахи

Это приложение для iPad обучает концепциям программирования и кодированию в очень наглядной форме.
http://movetheturtle.com/
https://itunes.apple.com/us/app/move-turtle.-programming-for/id5078?ls=1&mt=8

Карманный код

Создавайте свои собственные игры, приложения и музыкальные клипы с помощью этого приложения для Android.
https://pocketcode.org/
https://play.google.com/store/apps/details?id=org.catrobat.catroid

Project Spark!

В Microsoft Windows и XBox дети могут играть и творить, используя инструменты Project Spark. Активное сообщество и множество руководств и учебных пособий.
http://www.projectspark.com
https://www.youtube.com/watch?v=fIJKBHhdifE#t=18

РАПТОР

RAPTOR — это среда программирования на основе блок-схем, разработанная специально, чтобы помочь студентам визуализировать свои алгоритмы.
http://raptor.martincarlisle.com/

Робо-логика

Это приложение для iPad использует логические блоки, позволяющие детям управлять роботом.
http://www.digitalsirup.com/apps/app_robologic.html
https://itunes.apple.com/app/robo-logic/id300025550?mt=8

РобоМинд

Дети изучают логику, информатику и робототехнику, создавая робота.
http://www.robomind.net

Царапины

http://scratch.mit.edu/
http://en.wikipedia.org/wiki/Scratch_%28programming_language%29

Малый базовый

От Microsoft, урезанная версия Basic для обучения программированию детей и взрослых. Включает в себя множество руководств. Для компьютеров под управлением Windows.
http://smallbasic.com/
http://visualstudiomagazine.com/articles/2011/12/01/get-em- while-theyre-young.aspx

Snap

Порт Скретча из Калифорнийского университета в Беркли.
http://snap.berkeley.edu/snapsource/snap.html

Spherly

Язык программирования для роботов Sphero, которые тоже доставляют удовольствие.
http://outreach.cs.ua.edu/spherly/

Стенцил

Использует язык визуального программирования для создания кроссплатформенных приложений практически для любой платформы. Программное обеспечение Stencyl работает на Mac, Windows и Ubuntu / Linux.
http://stencyl.com/

The Foos

Дети могут играть и получать удовольствие, изучая основы программирования, а также навыки решения проблем, критического мышления и других навыков.
http://thefoos.com/
http://thefoos.com/play/
https://itunes.apple.com/us/app/foos-code-for-hour-edition/id923441570?mt=8&uo = 4
https://play.google.com/store/apps/details?id=org.codespark.thefoos
http://www.amazon.com/gp/product/B00P8G5DDU/ref=mas_pm_the_foos_code_hour

Попробуйте Ruby

http://www.tryruby.org

Toon Talk

http://www.toontalk.com/

TouchDevelop

Действительно простое в освоении и использовании программное обеспечение Microsoft для обучения детей программированию и созданию программного обеспечения.Отлично подходит для хакатонов и программирования в больших группах.
https://www.touchdevelop.com/

Черепаха Арт

Направлен на самых маленьких, маленьких детей, которые могут создавать действительно изящные произведения искусства и другие забавные вещи.
http://turtleart.org/

Академия черепах

http://www.turtleacademy.com/

Tynker

Этот язык программирования для образования представляет собой размещаемое программирование с перетаскиванием, адаптированное для обучения программированию и информатике в классе.Также есть версия учебной программы для iPad.
http://www.tynker.com/
https://itunes.apple.com/us/app/tynker-learn-programming-visual/id805869467

Водяной медведь

Waterbear — это набор инструментов, позволяющий сделать программирование более доступным и увлекательным.
http://waterbearlang.com/

Мир Codecraft

Скоро будет выпущен Wired для этого проекта из Университета штата Северная Каролина в Роли.
http://www.wired.com/wiredenterprise/2013/07/programming-game-engagement/

Верхнее изображение взято с сайта Hopscotch.

Преподавание двух языков программирования в рамках первого курса CS | блог @ CACM

Марк Гуздиал
22 мая, 2018
Комментарии (2)

Коллега недавно спросил меня: «Что мы знаем об обучении двух языков программирования в рамках первого курса информатики? Помогает ли использование более одного языка студентам в изучении концепций, а не языка?»

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

Группа Джона Андерсона в CMU провела наиболее цитируемую работу по передаче между текстовыми языками программирования. Они изучали передачу между Lisp, Prolog и Pascal. Андерсон написал сводный отчет, который доступен здесь. Вот краткое содержание всего отчета:

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

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

У моего коллеги, Ашока Гоэля, есть модель знаний о дизайне под названием Структура-поведение-функция (SBF) . Студенты довольно легко получают синтаксис (структуру) и изучают, как конкретный дизайн достигает определенной цели (функции), но понимание того, как на самом деле работает код для достижения этой цели (поведения), изучается в последнюю очередь.(См. Обсуждение модели, применяемой для обучения программированию здесь.)

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

  • Знания учащихся в области программирования тесно связаны с синтаксисом их первого языка. Вы можете преподавать концепции отдельно от программирования, но это не обязательно поможет с переносом. Знания о таких понятиях, как переменные и списки, будут передаваться, но только после того, как они получат эти знания.
  • Студенты собираются успешно переходить с одного языка программирования на другой только после того, как они получат глубокое понимание первого языка программирования. Под «глубоким пониманием» я подразумеваю полностью вплоть до уровня поведения и включает в себя уровни планирования и алгоритмы. Это занимает больше времени, чем думает большинство из нас, и обычно больше, чем один семестр (см. Репликацию исследования Рабочей группы McCracken за 2013 год)
  • Если вы слишком быстро переходите между языками, учащиеся просто будут бороться с разными элементами синтаксиса, и переход может фактически задержать их развитие более глубоких уровней понимания.

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

У нас есть много доказательств того, что знание блочного программирования действительно переносится на текстовое программирование. Исследования Криса Хундхаузена, Джилл Деннер, Шучи Гровер и других указывают на легкость, с которой студенты передают знания (например,g. переменных, итерационных структур и условных выражений) от графических языков, основанных на блоках (например, Scratch), до текстовых языков (например, JavaScript, Java или Python).

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

Вот ключевой график из его диссертации:

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

Но вот что интересно — обратите внимание на разницу между начальной, среднесрочной и окончательной оценками.Группа на основе блоков фактически делает минус прогресс при переходе к тексту. (На самом деле они могут немного отступить.) Текстовая группа постоянно продвигается вперед. Могли бы группы, основанные на блоках, узнать еще больше, если бы они остались в блоках? Есть ли преимущество в постоянном прогрессе, а не в том, чтобы заставлять студентов менять язык? Я не знаю, но ясно, что переключение языков программирования связано с издержками.

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


Комментарии


Марка Лиффитон
05 июн 2018, 06:42

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

Как бы то ни было, я преподаю CS 1 на двух языках уже девять лет. Я начинаю с Python и примерно на полпути перехожу к обработке (Java). Студенты, которые учатся на Python, явно переносятся без особых проблем.Функции по-прежнему являются функциями, циклы по-прежнему являются циклами и т. Д. Мы должны представить новую концепцию объявления типов, но почти все остальное — это просто добавление различных символов к концепциям, которые они уже изучили. Когда мы начинаем обрабатывать процессинг, учащиеся не только начинают с нуля.

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


Администратор CACM
06 июн 2018 г. 10:46

Следующий комментарий / ответ был отправлен Марком Гуздиалом 6 июня 2018 г.
— Администратор CACM

Привет Марк,

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