ГЛАВА 1. ОСНОВЫ ОСНОВ

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

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

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

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

Языки программирования, которые приближены к машинному уровню, называют языками низкого уровня (например, язык ассемблера). Другой вид языков – языки высокого уровня (например, Python, Java, C#), еще больше приближенные к мышлению человека.

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

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

Следующий этап – появление языка Фортран, предназначавшегося для математических вычислений.

Со временем росла потребность в новых кадрах и необходимость в обучении программированию. Обучение на языках ассемблера или Фортране требовало много сил, поэтому в 60-70-ые годы появляется плеяда языков для обучения: Basic, Pascal. Язык Pascal до сих пор используется в школах в качестве основного языка обучения программированию.

В это же время ведутся исследования в области разработки операционных систем, что приводит к появлению системы UNIX. Первоначально эта операционная система была написана на языке ассемблера, что усложняло ее модификацию и изучение, тогда Д. Ритчи разработал язык С для системного программирования и совместно с Б. Керниганом переписал систему UNIX на этом языке. Впоследствии операционная система UNIX получила широкое распространение (в наши дни больше известны ее клоны GNU/Linux), а вместе с ней – появилось множество программистов, для которых язык С стал родным. Написание программ на этом языке требует хорошей квалификации от программиста, т.к. незамеченная ошибка способна привести к серьезным последствиям в работе программы. До сих пор язык С лидирует в качестве языка для системного программирования.

Следующий этап (80-ые годы) характеризуется появлением объектноориентированного программирования (ООП), которое должно было упростить создание крупных промышленных программ. Появляется ученый – Б. Страуструп, которому недостаточно было возможностей языка С, поэтому он расширяет этот язык путем добавления ООП. Новый язык получил название С++.

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

Примерно в одно время с Java появляется Python. Разработчик языка – математик Гвидо ван Россум занимался долгое время разработкой языка ABC, предназначенного для обучения программированию. В одном из интервью он так ответил на вопрос о типе программистов, для которых Python был бы интересен: «Я представлял себе профессиональных программистов в UNIX или UNIX-подобной среде. Руководства для ранних версий Python возвещали что-то вроде «Python закрывает разрыв между Си и программированием оболочки», потому что именно это интересовало меня и моих ближайших коллег. Мне и в голову не приходило, что Python может стать хорошим языком для встраивания в приложения, пока меня не стали спрашивать об этом. То, что он оказался полезен для обучения началам программирования в школе или колледже, – счастливая случайность, обусловленная многими характеристиками ABC, которые я сохранил: ABC был специально предназначен для обучения программированию непрограммистов». К Python мы еще вернемся, а пока продолжим наш исторический экскурс.

С ростом сети Интернет потребовалось создавать динамические сайты – появился серверный язык программирования PHP, который на сегодняшний день является лидером при разработке веб-сайтов.

В 2000-ые годы наблюдается тенденция объединения технологий вокруг крупных корпораций. В это время получает развитие язык С# на платформе .NET.

Так что же такое программа и какие шаги требуется выполнить для ее написания?

На первом шаге у программиста есть набор «сырых» данных. Это, к примеру, могут быть разрозненные бухгалтерские отчеты, статистика и пр. Эти сведения необходимо структурировать и поместить в компьютер. Сравним написание программы с приготовлением салата: есть «сырые» овощи, которые нужно помыть и порезать, т.е. структурировать.
Затем, если задачу можно разбить на отдельные небольшие подзадачи, то лучше так и поступить. Решить небольшие задачи, убедиться, что они работают и объединить их обратно. На научном языке это называется анализом и синтезом. С опытом приходит умение видеть и выделять подзадачи.

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

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

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


С кем примерно в одно время появился Python?

C какими двумя видами сигналов способен работать Компьютер?