Как и многие из моего возраста и поколения, я начал учиться программировать на Бейсике. Это были дни, когда вы покупали журналы, полные страниц и страниц кода для игр или базовых приложений. Вы потратили часы с друзьями, кропотливо набирая эти программы на компьютере, чтобы найти опечатку, или игра не работала, а затем сдавались. Это было больше о тусоваться с друзьями, пока ваши родители чувствовали, что вы чему-то учитесь.
У BASIC были недостатки, но мне понравилось то, что код был ясным и многословным. Вот почему программы взяли страницы, чтобы сделать что-нибудь. Существует мало шансов, что любой выпущенный сейчас язык имеет такой «замечательный» синтаксис, как (включая обязательные номера строк):
5 LET S = 0
10 MAT INPUT V
20 LET N = NUM
30 IF N = 0 THEN 99
40 FOR I = 1 TO N
45 LET S = S + V(I)
50 NEXT I
60 PRINT S/N
70 GO TO 5
99 END
(Спасибо Википедии )
Но вы должны признать, что для новичка понятно, что происходит.
Спустя годы я изучил «современное» программирование с помощью ряда языков, включая PHP, Lingo, C ++, Visual Basic и Java. Я уверен, что мы рассмотрели объектно-ориентированное программирование, но в основном я помню, что оно было процедурным. Этому не помогли мои годы работы с Drupal, у которой не было основательных концепций ООП до версии 8.
Перенесемся в настоящее и некоторые из моих мотивов для этого поста. В течение последних месяцев я преподавал программирование для недавних сирийских беженцев в Берлине, и наш язык был Ruby (и Rails).
Является ли Ruby правильным языком для обучения начинающих?
Оставляя в стороне недавний растущий исход программистов от использования Ruby (это совсем другая история), мы (учителя) не уверены, был ли это хороший выбор. Сообщество Ruby удивительно благосклонно и гостеприимно, и это позволяет многим студентам преуспеть в обучении программированию благодаря настойчивости и поддержке сообщества.
Однако мы заметили, что некоторые характеристики Ruby, которые привлекали опытных программистов, на самом деле запутывают и сбивают с толку. Я не хочу превращать этот пост в «Ruby Bash», потому что это не то, чем он должен быть. Мне нравится Ruby, и это не единственный язык, который имеет эти проблемы. Мой недавний опыт преподавания его абсолютным новичкам означает, что у меня есть практические примеры, чтобы проиллюстрировать мою точку зрения. Я также признаю, что некоторые из этих уроков могут быть связаны с обучением неправильным темам в неправильном порядке или с отучением от некоторых общих задач, которые выполняют опытные программисты, по крайней мере, в краткосрочной перспективе.
Инструменты быстрого доступа
Программисты немного ленивы — или, если быть более точным, нам нравится находить способы уменьшить количество повторений ввода одного и того же шаблона и вместо этого сосредоточиться на важных и уникальных частях проекта. С Rails, леса делают именно это; с помощью нескольких команд вы можете получить основу приложения MVC.
Но эти инструменты могут полностью запутать новичков. Они не понимают, что только что было создано, и почему, где и как оно совмещается.
Синтаксис ярлыков
Для опытного программиста, пишущего это …
(0..100).each {
print i
}
… вместо этого …
var i;
for (i=0;i<100;i++) {
print i;
}
… это удивительный и чувственный ярлык. Фактически, это эффективно: нет необходимости инициализировать переменную или писать весь этот ужасный синтаксис, разделенный точкой с запятой. Но подумайте об этом с точки зрения начинающего. В примере Ruby единственные слова, которые действительно имеют смысл, — это each
print
Что на самом деле делают остальные? Нельзя сказать, что студент не может выучить эти понятия, но в некоторых отношениях, во время обучения, второй пример более ясен и фактически показывает студенту, что происходит.
«Делай что хочешь» языки
Когда-то существовала тенденция к языкам, позволяющим писать небрежно — не нужно беспокоиться о типах переменных и так далее. Эта популярность, кажется, уменьшается — или, по крайней мере, все больше дополняется гораздо более строгими языками. Они обладают преимуществами скорости и эффективности, но мне интересно, если это также случай изменения тенденций. Языки, которые вынуждают вас делать определенные лингвистические шаги, могут занимать больше времени для изучения, но вокруг того, что есть, а что нет, меньше «серая зона».
Реальный мир труда и «Возьми дома»
Часто мы стремимся как можно быстрее познакомить студентов с наиболее полезными и «реальными словами» концепциями и практиками. Многие современные программы «учимся кодировать» сильно ориентированы на то, чтобы подготовить участников к работе и устроиться на работу. Я мог (и могу сделать) написать целый пост о некоторых проблемах с этими программами, но вкратце, они могут познакомить студентов с понятиями, к которым они могут быть не готовы. Основываясь на моем недавнем опыте, некоторые из наиболее заметных из них приведены ниже.
Объектно-ориентированное программирование (ООП)
ООП является фундаментальной концепцией для многих современных языков программирования, но часто преподается сразу после изучения полных основ, таких как переменные, логика и циклы. Студенты с трудом разбираются в том, как выглядит программа, а затем бросают огромный шарик.
ООП — одна из тех концепций, которая имеет больше смысла в продвинутых приложениях. При написании базовых программ это кажется ненужным и посторонним осложнением. Учителя могут использовать термины и примеры, основанные на точных сравнениях, таких как животные и транспортные средства, но практическую потребность и применение по-прежнему трудно понять.
Контроль версий
Контроль версий аналогичен. Если вы работаете с командой над большим проектом с регулярно перемещающимися и меняющимися деталями, то это имеет смысл. Когда вы работаете в одиночку или в небольшой команде, это может быть слишком сложным. Git — это замечательно, но вспоминать его рабочий процесс — это боль — когда пропущенный шаг может привести к беспорядку, а объединение в течение первых дюжин раз — запутанный процесс.
Отлично, Крис, но что вы предлагаете делать?
Хороший вопрос. Критиковать легко, а кто скажет, что я прав? Во-первых, я хочу упомянуть пару советов, которые я нашел полезными при обучении кодированию, а затем постараться получить отзывы от краудсорсинга о том, какие языки люди считают полезными для начинающих и почему.
Ничего не предполагать
Я уверен, что вы уже слышали это раньше, но я хочу, чтобы вы попробовали продвинуться дальше. Вот небольшой саундбайт для вас:
Если вы ничего не предполагаете, терять нечего.
Ну, вы можете потерять время, но не так много. На практике это означает, что вы не должны предполагать, что кто-то слышал о вашей любимой сборочной системе / языке / IDE / редакторе, или предполагать, что кто-то имеет такой же опыт, как и вы. Только то, что вы думаете, что они должны иметь, не означает, что они имеют. Конечно, если вы спросите сначала, а затем идти вперед — но проверить.
Люди обычно в порядке с небольшим повторением, если это необходимо. Если они уже что-то понимают и вынуждены прислушиваться к объяснению еще раз, они, вероятно, не будут возражать и могут даже поймать то, чего не знали ранее.
контекст
Это большой для меня. Кодеры часто прекрасно объясняют, что что-то круто, но не очень хорошо объясняют, почему. Обучая людей, не просто упоминайте, что он может делать быстрее, лучше и масштабнее, чем раньше, но и почему это хорошо для них или для вас. Они будут слушать, учиться и запоминать намного лучше.
сообщество
Риск звучит противоречиво, в некоторых языках (особенно в Ruby и Python) есть удивительные сообщества, которые стараются воспитать начинающих. Эти сообщества могут не облегчить понимание языков, но тем, кто их выберет, будет легче расширять и поддерживать свои знания. Что наиболее важно, более поддерживающие сообщества помогают уменьшить воздействие вредных влияний, которые могут оказать новички.
Лучшие языки программирования для изучения
Вот куда вы заходите, дорогой читатель! Мне бы хотелось услышать от вас, какие языки вы считаете самыми легкими для изучения и понимания. Я также хочу услышать, почему у вас такое мнение. И если у вас есть какой-то опыт их обучения, что вы нашли?
Через пару недель я соберу эти истории и напишу последующую статью, в которой будет представлен сбалансированный анализ (с помощью начинающих) истинной доступности этих языков и того, как их лучше всего преподавать.
Я уверен, что у вас также есть мнения по поводу того, что я здесь написал, и это здорово. Пожалуйста, когда вы делитесь своими взглядами, постарайтесь быть конструктивными и смотреть на вещи с точки зрения новичка. Благодарность!
Если вам понравилась эта статья, вам также может понравиться « Какой язык программирования выучить в 2016 году»?