На что способно программирование

Как программирование влияет на мозг и мышление

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

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

1. Программирование влияет на ваши когнитивные модели

Важно ли, с какого языка программирования вы начали свой путь в этой профессии? Да!
Звучит нечестно, правда? Как ни крути, а большинство из нас познакомились с программированием ещё в школе, и первый язык нам навязывали. Я начал с языка С. Те, кто постарше меня, начинали с FORTRAN, COBOL или BASIC. А те, кто младше? Вы наверняка начинали с Java или Python.

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

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

COBOL уродует разум; его преподавание нужно расценивать как уголовное преступление.

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

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

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

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

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

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

Так что выбирайте язык программирования с умом!

2. Программирование помогает укрепить здоровье мозга

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

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

В ходе более крупного исследования 1999 года подтвердилось, что «интеллектуальная деятельность препятствует снижению [когнитивных] способностей». Но также авторы отметили, что, возможно, снижение когнитивных способностей может привести уменьшению вовлечённости в интеллектуальную деятельность.

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

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

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

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

3. Программирование — это не одни лишь математика с логикой

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

Конечно, исследование не было всеобъемлющим, и его авторы указывают:

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

Источник

Чем же занимаются программисты, и как объяснить это остальным?


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

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

— Чем занимаются программисты? Это не так-то просто рассказать… Ответьте мне для начала: как в двух словах можно описать, например, суть профессии хирурга?
— Хирург проводит операции.
— Да, отличное описание! Ну а, скажем, футболиста?
— Играет в футбол!
— Угу, а хирург «занимается хирургией». А если без однокоренных слов?
— Пинает мяч?
— Вот это точно. А что же делает программист, кроме как «разрабатывает программы»?
— …
— Программист пишет код. Исходный код своей программы, составленный на каком-то специальном языке программирования. Точнее говоря, сначала он продумывает структуры своих данных, потом составляет алгоритмы для работы с этими структурами — ну а затем уже представляет это в виде кода.
— Что ещё за «структуры данных»? Разве он не управляет компьютером, не нажимает кнопки?
— Эх.

Миф №1: программист работает с компьютерами

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

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

Миф №2: машина умеет думать

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

— В общем, код любой программы представляет собой набор команд, а компьютер их тупо исполняет.
— То есть, он не понимает сути самих команд? Но как он воспринимает текст, который я ввожу на экране?
— Когда ты крутишь педали на велосипеде — понимает ли он, что ему сейчас нужно поехать вперёд?
— Нет, но ведь едет. Поскольку его цепь преобразует вращение педалей во вращение колёса.
— Именно! Также и компьютер преобразует введённый тобой текст в набор чисел.
— Каким образом?
— У каждого символа текста есть свой числовой код, который знает компьютер. Это называется кодировкой. Например, английская «a» кодируется числом 97, а знак равенства — числом 61.
— Поэтому машина и может понимать текст, который мы ей сообщаем?
— Нет, она «понимает» не смысл. А лишь то, каким образом этот текст хранить, и как к нему обращаться.
— Выходит, сначала мы вводим текст, затем компьютер разбивает его на символы, а каждый символ уже представляет в виде числа?
— Верно. Сложные структуры представляются в виде более простых, которые и «понимает» машина.

Скажите мне, из чего состоит жилой дом?
— Ну… Из этажей.
— А из чего состоят этажи? И так далее.
— Этажи — из стен. А стены — из кирпичей. А кирпичи…
— Вот числа для компьютера — это то же, что и кирпичи для дома. Символы — это стены. Отдельные предложения — этажи. А книги — целые дома! Но у программистов есть преимущество перед строителями.
— Какое?
— Строитель не может строить целыми этажами, он вынужден всегда класть кирпичи. Даже если некий сверхмощный подъёмный кран позволит ему строить готовые этажи, он не сможет строить им целые дома или жилые кварталы. А программист сможет! Раз он уже «обучил» машину понимать конечный текст — то, по сути, он «обучил» подъёмный кран строить готовый дом за одно действие.
— То есть, программист может использовать всё более и более сложные структуры данных?
— Да. Поэтому первая из составляющих его работы — представить понятные человеку данные (текст, изображение, звук) в виде объединения более простых данных, уже понятных компьютеру. Разработчик практически «с нуля» составляет структуру, которая должна полностью описывать понятную человеку вещь — причём таким образом, чтобы эта структура была легко расширяемой и изменяемой (ведь в программу часто приходится вносить какие-то новые возможности).
— Хех! Выходит, что он строит резиновые дома из съёмных панелей!
— Примерно так. Однако, ещё ему придётся не только описать, что же ему нужно построить — но и как всё это построить. То есть, придумать алгоритм. Это вторая из составляющих его работы.
— Программист придумывает алгоритм на каждое действие?
— Именно. Поэтому алгоритмов получается очень много. Но его работу облегчает то, что одни действия могут содержать в себе другие, уже описанные им ранее.
— И здесь ему на помощь приходит язык программирования?
— Не совсем.

Миф №3: язык программирования нужен для составления алгоритмов

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

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

— Правда, многие из нынешних языков программирования уже содержат «в себе» набор заранее составленных алгоритмов, которые разработчик может использовать в качестве готовых. Поэтому язык всё же немного облегчает процесс составления алгоритмов.
— То есть, если один программист составил какой-то алгоритм, то его тут же могут использовать другие?
— Да, и это происходит постоянно. Это одна из причин, почему отрасль IT так быстро развивается. Однако новые алгоритмы приходится составлять самому.
— А составь какой-нибудь прямо сейчас!
— Легко. Классический пример: у вас есть книга, в ней 1000 страниц. Вам нужно открыть в ней, к примеру, 875-ю страницу. Как бы вы стали это делать?
— Ну, просто пробежал от первой до 875-й, только и всего.
— Угу, и придётся тебе глядеть на номер каждой страницы. А представь, если все их уголки слиплись — сколько времени тогда пройдёт? А вот мне достаточно перебрать лишь 3 страницы!
— Как?
— Вначале я выберу страницу, которая находится посередине книги, то есть 500-ю. Потом посмотрю: в какую из образовавшихся половин должна попасть искомая страница?
— Во вторую. А дальше что?
— То же самое. Интервал с 500-й по 1000-ю я снова поделю надвое, открыв центральную страницу. Получится интервал от 750-й страницы до 1000-й, в нём я опять выберу центральную. Какой будет номер?
— 750 плюс 125… Так это же и есть 875!
— Вот видишь. Всего 3 действия! Даже если я буду не совсем точен при выборе центральной страницы, я всё равно найду нужную намного быстрее тебя. Этот алгоритм носит название «дихотомия». Хотя в реальности программисты используют куда более сложные алгоритмы.
— И ты можешь записать его на бумаге?
— Конечно. Где там моя ручка?

— Ну как, алгоритм ясен?
— Хм… Да, и впрямь ясен.
— Сейчас он записан в виде, уже слегка похожем на реальный программный код.
— А в чём отличия?
— В реальном коде все слова будут написаны на английском, а также будет заранее описана структура «книга» (помните, что я раньше рассказывал про структуры данных?). Плюс, для действий «ищем» и «удаляем» тоже будут составлены свои алгоритмы. Но в целом — всё то же самое.
— И ты занимаешься этим изо дня в день?
— В основном.
— И тебе не скучно?
— Ничуть!

Миф №4: программирование — это скучно

Конечно, разработка вполне может наскучить, если заниматься только рутинными и однообразными делами. Например, составлением очень простых алгоритмов, но в большом количестве. Или монотонным поиском ошибок в чужом коде. Но это же касается и любой другой работы — рутина везде убивает творческий процесс. А творчества в программировании немало, написание кода похоже на написание художественной книги. Только, в отличие от большинства писателей, программист сначала сам создаёт свой собственный мир (структуры данных) — а уже потом наполняет его сюжетом (алгоритмами).

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

— В шутку можно сказать, что в итоге получается какой-то детектив в выдуманном мире, выраженный с помощью языка программирования.
— А убийца в этом детективе — дворецкий?
— Ага, нулевой указатель. Бывает так, что весь отдел день-другой ловит особо назойливый баг, и каждый программист из отдела берёт на себя какой-то участок кода. Получается целое расследование, с наказанием виновных и награждением сопричастных…
— Хм, а это и впрямь интересно звучит!
— Вот видишь.
— А, скажем, я могу хоть немного научиться программированию?
— Да, конечно! Я знаю один сайт специально для этого.

Источник

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

Все больше споров и рассуждений по-поводу важности программирования в современной жизни. Действительно ли нужно всем уметь кодить? И пригодится ли это тем, кто не собирается связывать себя с данной профессией? По мнению знаменитого информатика Джона Маккарти (John McCarthy), писателя Стюарта Бранда (Stewart Brand) и ученой контр-адмирала Грейс Хоппер (Grace Hopper) — да, пригодится, поскольку программирование является важнейшим навыком, освоить который необходимо каждому здравомыслящему человеку.

Ниже описаны причины, на которые ссылаются эти выдающиеся личности в своем утверждении.

На протяжении тысячи лет одни люди руководили другими

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

Джон Маккарти (1927-2011 гг.) — автор термина «искусственный интеллект», изобретатель языка Лисп, основоположник функционального программирования, лауреат Премии Тьюринга за огромный вклад в область исследований искусственного интеллекта

Природа труда фундаментального изменилась и на сегодняшний день большую часть работы выполняют не люди, а машины. Ежедневно в Google отправляется более 3,5 миллиарда запросов. И поисковая система послушно ищет нужную информацию. А теперь давайте подумаем, сколько человеко-часов понадобилось бы для того, чтобы вручную обработать хоть один запрос Google. Можно представить группу докторов наук, ученых и специалистов из различных областей, которые круглосуточно звонят друг другу с вопросами и обсуждениями документов и других материалов. И потом это все выдают запрашивающему. Сделать подобную работу быстро и эффективно может только машина.

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

Как говорил Маккарти:

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

Программировать или быть запрограммированным?

После того, как новая технология прокатится по миру, если Вы не являетесь частью этого катка, то становитесь частью дороги.

Американский писатель Стюарт Бранд (1938 г.р.), создатель каталога советов и статей об окружающей среде и технологиях The Whole Earth Catalog (на его обложке первая фотография Земли), основатель одного из первых онлайн-сообществ WELL

Те, кто живо адаптируется к проходящим волнам изменений — процветают. А те, кто не обращает внимания на них — не могут даже понять, что они существуют. Они асимптотически приближаются к ненужности. Кодирование — это новая грамотность. Как было чтение в XII веке, писательство в XVI, арифметика в XVIII и управления автомобилем — в XX. И точно так же, как не всякий, кто умеет писать будет профессиональным литератором, а кто учит арифметику — великим математиком, так и не всякий изучающий код станет разработчиком программного обеспечения. Но изучение этих направлений определенно улучшит человека, научит его думать и пригодиться в жизни.

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

«Корабли предназначены для плавания»

Американская учёная и контр-адмирал флота США Грейс Хоппер (1906-1992 гг.), разработала первый компилятор для компьютерного языка программирования, развила концепцию машинно-независимых языков программирования, что привело к созданию высокоуровневого языка COBOL. Писала программы для гарвардского компьютера Марк I.

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

Среди преподавателей бытует мнение, что каждый мыслящий человек может научиться кодировать так же, как научиться читать, писать, выполнять арифметические действия или водить машину. Нужно лишь желание и терпение.

Подводя итог

Грейс Хоппер советует учится кодировать — «выходите в море и изучать новые вещи». Стюарт Бранд рекомендует адаптироваться под развитие технологий и осваивать программирование хотя бы на базовом уровне. Джон Маккарти призывает изучать язык машин.

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

Code.org — оригинальный сайт, сделанный в развлекательном игровом стиле.

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

Udacity — ресурс, представляющий из себя что-то вроде он-лайн института по программированию. На нем собрано огромное количество курсов и видеолекций по программированию.

Code Avengers поможет в изучении HTML5, CSS3 и JavaScript. В конце каждого урока предлагается на примере мини-игры закрепить полученные знания.

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

Code School предлагает более углубленные курсы по разработке и программированию. Но правда на этом ресурсе не все разделы бесплатные.

Источник

Программирование для всех: почему «нет»

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

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

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

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

Да, с этим можно согласиться, но и другие предметы справляются с этим ничуть не хуже. Алгебра, наверное, развивает абстрактное мышление и усидчивость куда эффективнее программирования, потому что не только не прощает ошибок, но и не имеет компилятора, который бы услужливо на них указывал и автоматически открывал страницу документации с примерами. Умение проектировать и планировать заранее — с этим хорошо справляются сочинения, которые школьники периодически пишут на уроках русского языка (иногда еще и на некоторых других). Почему? Потому что сочинение нельзя написать «лишь бы работало», его содержимое требует куда большего согласования, чем средняя программулька в школе. Маловероятна так же хорошая структура в программе на 300 строк, скорее всего, следует ожидать чего-то в духе «asfdyausd.Cilck()» — оценку получил и забыл.

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

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

Программирование позволяет самостоятельно решать некоторые бытовые проблемы

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

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

Какие программы нужны среднему пользователю? Браузер, «Ворд»/«Иксель», какой нибудь плеер, uTorrent… и все, не считая игрушек и сервисных программ. Тратить много времени и денег на изучение языка только ради одной небольшой программки — неразумно, проще заказать ее рублей этак за

300-1500. Но даже таким путем идут очень немногие, просто потому, что существующий софт в той или иной мере способен удовлетворить (и даже зачастую превосходит) их потребности.

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

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

Программирование позволяет работнику самостоятельно автоматизировать рабочий процесс

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

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

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

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

Пользователь должен знать, как работает система

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

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

Другой пример — наручные механические часы, широко распространены и существуют с 17 века. Многие ли знают, как работает их механизм? Многие ли могут собрать часовой механизм с нуля, пусть даже из готовых частей? Я думаю, что очень немногие. Это никому и не нужно — часы предоставляют интерфейс для подзаводки и настройки, и этого вполне достаточно для пользователя. Как оказалось, это даже слишком много, поскольку пользователю хватит только возможности настраивать время, а подзаводка представляла собой лишние хлопоты. Смешно, но еще недавно казалось, что уж время-то владелец часов всегда и на любом типе часов будет устанавливать сам. Как бы не так:

Жизнь слишком коротка даже для того, что бы безопасно извлекать флешку из USB-порта, так почему же следует рассчитывать на то, что человек после 8-часового рабочего дня и полуторачасового стояния в пробке придет домой и потратит остаток времени на напряженное сидение за компьютером в попытке запрограммировать «умный дом»? Скорее всего, он просто пойдет на сайт и купит (закажет) себе подходящую программу для своего «умного дома».

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

Повсеместное распространение компьютеров

Каждый должен уметь кодировать, потому что коммуникации человек/машина и машина/человек станут настолько же распространёнными, как человек/человек.

У этого утверждения есть очень слабая часть — «станут настолько же распространенными». Давайте посмотрим, что очень распространено сейчас:

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

Иными словами, что бы стать распространенным — нужно сначала стать простым и удобным.

Не так давно IBM 305 RAMAC занимал комнату 9х15 метров, стоил в месяц 26 тысяч современных долларов и был, надо полагать, довольно сложен в управлении и обслуживании. Сейчас его функции с легкостью может выполнять Excel, который не занимает вообще никакого места, прост в использовании, и, что самое важное, не требует никакого программирования — нужно просто клацнуть по кнопке.

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

Так чему же учить в школе тех, кому не интересно программирование?

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

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

Школьников нужно научить разбираться в основных принципах интерфейса, что бы они потом не впадали в ступор при любом его изменении. «Ой, а тут все по-другому, я ничего не могу найти, поставьте мне Офис 2003 обратно». Короче говоря, морально подготовить их к тому, что завтра Майкрософт наймет новых индусов дизайнеров, которые очень не любят плитку, а Шаттлворту разонравится Unity и он кинет все силы на разработку Plurality.

Нужно научить адекватно реагировать на некорректное поведение компьютера. Нужно научить людей спокойно и правильно описывать сложившуюся проблему и предшествующие действия, а не закатывать истерики в духе «У меня тут окошечко с крестиком, срочно почините, ничего не знаю, мне отчет через пять минут сдавать!». Если этому удастся положить конец хотя-бы на уровне субъекта федерации, то техподдержка придет в неописуемый восторг и в этом субъекте как-то сама по себе возникнет Кремниевая Долина. Не страшно, что Маша не может самостоятельно исправить ошибку, пусть она просто вызовет мастера (и кто знает, быть может она встретит в лице мастера свою любовь? Я видел в фильмах, так бывает), который сможет все быстро и качественно исправить.

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

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

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

Заключение

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

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

Источник

Понравилась статья? Поделиться с друзьями:

Не пропустите наши новые статьи:

  • На что способен планшет на windows
  • на что способен кали линукс
  • на что способен kali linux
  • на что распространяется охрана прав программ
  • На что похож язык программирования 1с

  • Операционные системы и программное обеспечение
    0 0 голоса
    Рейтинг статьи
    Подписаться
    Уведомить о
    guest
    0 комментариев
    Старые
    Новые Популярные
    Межтекстовые Отзывы
    Посмотреть все комментарии