http://habrahabr.ru/company/stepic/blog/243393/
Предлагаю вашему вниманию перевод статьи
«Should Everybody Learn to Code?», которая показалась мне интересной.
Чтобы проверить, смогут ли профессиональные графические дизайнеры написать простейшую компьютерную программу, Брайан Дорн, в то время студент магистратуры в Технологическом институте Джорджии (Georgia Tech), попросил их прочесть и изменить фрагмент программного кода. Дорн хотел понять, смогут ли они сами разобраться – как автоматизировать работу в Adobe Photoshop. Дизайнеры стали искать информацию в Интернете и, к сожалению, во многих случаях вводили неверные поисковые запросы: например, пытались разобраться с Java, когда на самом деле им был нужен JavaScript для этого конкретного проекта.
Это могло быть связано с «отсутствием общего базового понимания компьютерных и программных структур», писал Дорн в журнале Communications в мае 2011 года.
По мнению его научного руководителя, профессора и директора программы Контекстуализированной поддержки в обучении в Школе интерактивной обработки данных Georgia Tech Марка Гуздайла, результаты этого эксперимента показывают, что «есть много людей, которым нужны знания в компьютерных науках… и которые будут использовать их в жизни, но они никогда не изучали эту дисциплину, и их самообучение проходит неэффективно, что приводит к потере времени и мотивации».
Все специалисты, имеющие дело с анализом и обработкой информации, или «занимающиеся работой, для которой необходимо высшее образование», должны знать, как читать код, который может им пригодиться, и уметь его адаптировать.
Многие уважаемые деятели от бывшего президента США Билла Клинтона до создателя Facebook Марка Цукерберга и физика и космолога Стивена Хокинга публично заявляли о том, что базовые навыки программирования необходимы всем в современном мире. «Умение программировать стало четвертой составляющей грамотности. Каждый должен знать, как наш цифровой мир работает, не только инженеры» – считает Марк Серман, исполнительный директор Mozilla Foundation. Его цитаты, отстаивающие эту позицию, как и похожие цитаты многих других знаменитостей, есть на сайте инициативы
code.org.
Согласно прогнозам Бюро трудовой статистики США, рост спроса на ИТ-специалистов и профессионалов с техническим образованием составит 34% к 2019 году. Многие специалисты уже в той или иной степени связаны с программированием. Гуздайл приводит данные исследования Университета Карнеги-Меллон 2005 года, которое предсказывало, что в 2012 году из 90 млн. работающего населения в США более 55 млн. будут использовать электронные таблицы и базы данных, что можно считать элементарным программированием.
Исследование Университета Карнеги-Меллон также показывает, что многие люди занимаются программированием, не осознавая того: например, создавая макросы в электронных таблицах или делая запросы в базах данных c использованием SQL. «Итак, многие специалисты будут иметь дело с программированием» — говорит Гуздайл, — «и данные наших исследований о том, как люди учатся программировать, и об их типичных ошибках, показывают, что базовые знания компьютерных наук были бы им очень полезны для дальнейшего самообразования».
Многие из тех, кто избегал курсов по естественнонаучным дисциплинам и математике в колледже сейчас испытывают большие трудности при самостоятельном изучении программирования, говорит он. «На сколько больше людей использовали бы программирование в своей работе, если бы мы им немного помогли? Вот интересный вопрос».
Что вам надо изучить
Каждый должен освоить «computational thinking»
(1) – так считает Жанетт Винг, корпоративный вице-президент Microsoft Research и в прошлом – профессор компьютерных наук в Университете Карнеги-Меллон. «Computational thinking» помогает людям мыслить абстрактно и разделять задачу на небольшие части. Программирование – это один из способов научиться этому навыку, считает Винг.
«Это не значит, что каждый должен освоить какой-то язык программирования, как Python или C++, хотя многие ставят знак равенства между программированием и набором кода,» – говорит Винг. Напротив, стоит сконцентрироваться на изучении навыка решения задач в компьютерных науках, аналогично тому, как мы учимся решать математические и инженерные задачи. Написание программы – это способ явно выразить действия, которые человек или машина могут выполнить. «Более фундаментальный навык, связанный с критическим мышлением, – это computational thinking, необходимый для того, чтобы понять, какой код требуется написать».
Другая точка зрения
Совсем иначе смотрит на вопрос изучения программирования разработчик ПО Чейз Фелкер, автор статьи в журнале Slate «Возможно, не все должны учиться программировать». «Если честно, одна мысль о том, что можно научиться программировать за год вызывает у меня содрогание: я был бы в ужасе, если бы для меня писал программы кто-то, кто закончил всего несколько классов. Не потому что он (к сожалению, большинство программистов – мужчины) изучил что-то не так, но потому что слишком многого он еще не знает».
Признавая, что некоторые его коллеги успешно изучили программирование самостоятельно, и что для изучения программирования необязательно учиться в университете, Фелкер считает, что людям требуется нечто большее, чем просто запоминание основ, им необходимо развить определенный тип мышления.
«Если вы не мечтаете стать программистом – и значит не готовы посвятить много времени его изучению, не важно самостоятельному или в учебном заведении – я не понимаю, зачем вам учиться писать код». – пишет Фелкер. «Да, это интересное занятие, в основе которого лежит умение решать задачи, и элегантные решения этих задач, которые со временем начинают у вас рождаться, принесут вам много удовольствия». Тем не менее, Фелкер считает, что все, кто изучают программирование поверхностно, вряд ли смогут применять эти знания в жизни.
В ответ на заявление мэра Нью-Йорка Майкла Блумберга в 2012 году, что он начнет изучать программирование, программист Джефф Этвуд, автор блога Code Horror, задает вопрос: "… можете ли вы мне объяснить, почему Майкл Блумберг стал бы более эффективен в своей повседневной работе по управлению самым большим городом в США, если бы он проснулся однажды утром первоклассным Java-разработчиком?". Программирование важно, соглашается Этвуд, однако и многие другие навыки важны. «Я бы не советовал всем изучать программирование больше, чем, например, слесарное или водопроводное дело».
Движение «каждый должен учиться программировать» неверно по нескольким причинам, по мнению Этвуда. Оно базируется на предположении о том, что «чем больше кода в нашей жизни, тем лучше». Код становится самоцелью, таким образом метод ставится выше задачи.
«Общество и правительство получили бы больше пользы от базового понимания того, как работают компьютеры и Интернет… Умение пользоваться Интернетом становится основополагающим навыком, и мы сначала должны позаботиться о таких элементарных вещах, прежде чем придем к гораздо более сложному программированию».
Гуздайл ожидает, что со стороны программистов может быть сопротивление его идеям. «Я не предлагаю всем писать код профессионально. Я бы хотел, чтобы каждый заканчивал университет, будучи способным написать 10 строчек кода, которые нужны именно им». Смысл обучения программированию в высшем образовании – научить студентов определенному уровню компьютерной грамотности, включая способность мыслить в терминах кода и понимать, чем код может быть полезен.
Компьютерные науки в образовании
Специалисты в сфере компьютерных наук считают, что США уже слишком долго откладывают ввод базового образования по дисциплине в среднем образовании. «Многие страны разработали и внедрили национальные программы по обучению компьютерным наукам в школах, чтобы лучше подготовить учеников к новой глобальной экономике. Однако децентрализованная система принятия решений в образовании США сильно сдерживает попытки ввода стандартов программы по компьютерным наукам». – говорится в докладе 2010 года «Addressing Core Equities in K–12 Computer Science Education».
По мнению Гуздайла, самая большая проблема в обучении компьютерным наукам в США – это недостаток учителей. По его оценкам, в стране около 30 000 старших школ, однако только около 2000 учителей, обладающих достаточным уровнем квалификации.
Дети уже в 5 лет могут учиться программированию. Вопрос в том, стоит ли им на это тратить время в таком возрасте. Сомнения вызваны тем, что когнитивные способности, необходимые для обучению программирования, такие как способность к абстрактному мышлению, обычно развиваются у детей к 12 годам.
Гуздайл считает, что компьютерные науки должны преподаваться в школе, но не в возрасте 5-6 лет, учитывая современную ситуацию: только 12% старших школ в США предлагают классы по компьютерным наукам, и гораздо меньше средних и начальных школ, что создает большой временной разрыв. «Дети скорее всего не столкнутся с программированием еще долго после 5летнего возраста, зачем тогда давать им эту информацию в таком раннем возрасте?»
Винг также считает, что изучение программирования в возрасте 5ти лет может быть неуместным, однако дети уже в 5-6 лет могут изучить базовые концепции, точно также как они изучают арифметику. Подрастая, они узнают и другие концепции – что такое алгоритм, как представлять данные, различные подходы к анализу, считает она.
Перспективы
Наряду с чтением, письмом, основами математики и естественнонаучных дисциплин, компьютерные науки могут стать стандартной составляющей школьной программы. По мнению многих экспертов, это будет большой шаг вперед. Сложность проблем в мире возрастает с каждым годом, и системы, которые нам придется создать для их решения, потребуют развитых навыков «computational thinking», таких как абстрактное мышление, декомпозиция и композиция, считает Винг.
«Я бы ввел немного программирования в каждый класс по естественным наукам, математике и искусству, может быть, даже по английскому языку» – говорит Гуздайл. «Изучение компьютерных наук в старшей школе должно быть доступно всем, так же как наука и математика».
(1): Термин
computational thinking появился относительно недавно, в 1996 году. В русском языке на данный момент нет его устоявшегося перевода (как правило, для перевода используется более широкое понятие «математическое мышление»). Далее в этом тексте мы будем использовать английский термин.
От переводчика
Лично мне близка мысль, что в современном мире для всех будет полезно учиться программированию. И даже если в будущем программирование не будет вашей основной деятельностью, это позволит сформировать навык computational thinking, который будет полезен для совершенно различных профессий.
Я обучаю программированию и алгоритмам студентов-биологов в Институте биоинформатики. Опыт показывает, что для освоения программирования совершенно необязательно иметь какой-то серьезный математический или технический бэкграунд, главное – начать, и всё постепенно придёт.
В связи с этим, рад анонсировать, что мы с
Институтом биоинформатики запустили
онлайн-курс на платформе Stepic для обучения программированию «с нуля» на языке Python. Первый дедлайн по задачам будет на следующей неделе, 24 ноября, поэтому записаться на курс еще не поздно! Упор в курсе сделан не столько на конструкции языка Python, сколько на формирование алгоритмического мышления через решение задач на программирование.