Обращение к будущим программистам
Текст адресован студетам, которые собираются обучаться программированию в университете. Авторство текста не моё, поэтому я не согласен дословно со всем, что здесь написано.
Чему нужно учиться
И они говорят, что у них веселей -
В доме, в котором не гасят огней...
Но, чтобы стоять, я должен держаться корней.
«Аквариум», 1982
Информационные технологии – самая быстроразвивающаяся область знаний нашего времени. Хотя в ней уже заняты миллионы людей, потребность в специалистах в области программирования и администрирования информационных систем сохраняется на высоком уровне.
Многие из действующих специалистов придумывают новые языки и методы программирования, чтобы облегчить решение отдельных задач. В результате программист оказывается перед сложным выбором: какие технологии и языки программирования изучать и использовать, как не потеряться в этом море информации?
Можно пытаться изучать самые злободневные, модные технологии и инструменты. Но здесь надо понимать, что через некоторый, скорее всего очень небольшой, период времени, появятся более новые, более актуальные технологии, и тогда Ваше преимущество, как узкого специалиста в определённой области, станет недостатком. Также надо понимать, что Вы, скорее всего, не угадаете: среди большого многообразия Вы выберете для изучения одни инструменты, а потенциальный работодатель или заказчик для разработки своей системы - другую.
Более правильно посвятить время обучения в Университете изучению общих принципов программирования, технологий и алгоритмов, которые помогут быстро разобраться в любой вновь появившейся системе. Здесь надо понимать, что эти системы не рождаются на пустом месте, а базируются на общих принципах, проверенным способом знакомства с которыми является изучение традиционных языков программирования.
Задача Университета – подготовка специалистов, владеющих фундаментальными знаниями из широкого круга областей наук, способных решать, как текущие проблемы, так и перспективные задачи с ориентацией на теоретические базовые технологии, методы и модели.
На каких языках учиться программировать
Студентов, ранее изучавших Бейсик, практически невозможно обучить хорошему программированию. Как потенциальные программисты они подверглись необратимой умственной деградации
Программирование на КОБОЛе калечит мозг, поэтому обучение ему должно трактоваться как преступление.
Эдсгер Вибе Дейкстра
Приведённые высказывания одного из немногих программистов, признанных великими, показывают, что не все языки программирования одинаково полезны для первичного обучения программированию. Честно будет сказать, что сам Дейкстра предлагал использовать для первичного обучения функциональные языки, но здесь я попробую обосновать несколько иную точку зрения.
Давайте посмотрим на актуальный рейтинг современных языков программирования:
Июль 2016 | Июнь 2015 | Язык программирования | Рейтинг |
---|---|---|---|
1 | 1 | Java | 19.804% |
2 | 2 | C | 12.238% |
3 | 3 | C++ | 6.311% |
4 | 5 | Python | 4.166% |
5 | 4 | C# | 3.920% |
6 | 7 | PHP | 3.272% |
7 | 9 | JavaScript | 2.643% |
8 | 8 | Visual Basic .NET | 2.517% |
9 | 11 | Perl | 2.428% |
10 | 12 | Assembly language | 2.281% |
11 | 15 | Ruby | 2.122% |
12 | 13 | Delphi/Object Pascal | 2.045% |
13 | 10 | Visual Basic | 2.012% |
Предположим, что мы начнём обучение программированию с языка Java. Тогда программист не будет знать: о передаче параметров по адресу; об указателях и процедурных типах данных; о принципах работы с динамической памятью в отсутствии сборщика мусора; о том, что могут существовать подпрограммы, не являющиеся методами; о вложенных подпрограммах; о свойствах классов (property); о том, как, вообще, загружается и выполняется исполняемый файл; и т.д. Если человек начнёт думать в терминах такого языка программирования, то ему будет очень сложно перестроиться для полноценного использования языка программирования, в котором упомянутые возможности есть.
В качестве аналогии вспомним, что сейчас многие легковые автомобили (а м.б. уже и большинство) оснащены автоматической коробкой передач и даже можно получить водительские права, разрешающие водить только машины с АКПП. Через несколько лет такое же распространение могут получить автомобили с автопилотом и тогда, наверное, появятся права для людей, умеющих только правильно указать пункт назначения, и вынужденных довольствоваться автоматически выбранным маршрутом и скоростью движения. Но можно ли считать таких «специалистов» профессиональными водителями? Кто получит работу в транспортной компании: профессиональный водитель или «профессиональный пассажир»?
Познакомиться со всеми наиболее важными понятиями, встречающимися в современных языках программирования, можно при изучении универсальных компилируемых языков, предназначенных для создания настоящих исполняемых файлов. Основными представителями таких языков программирования являются C/C++ и Object Pascal.
На C/C++ написано большинство системного и значительная часть прикладного программного обеспечения, но этот язык имеет ряд недостатков с точки зрения первоначального обучения программированию. Так, в нём используются подходы, от которых отказались во всех остальных языках, даже тех, которые основаны на синтаксисе C++: препроцессор (из-за применения которого текст программы может оказаться совсем не тем, чем он кажется), множественное наследование, реализация модульности через включение в текст заголовочных файлов (существенно замедляющая компиляцию и способная вызвать труднообъяснимые ошибки). Также достаточно сложной задачей является реализация графического интерфейса на С++.
Чтобы не начинать обучение с борьбы со всеми этими трудностями, наш выбор – использовать для обучения программированию язык Object Pascal. Этот язык применяется в среде программирования Delphi. Кроме того, существует свободное программное обеспечение, использующее язык Object Pascal: компилятор Free Pascal, позволяющий писать программы для различных платформ, и система Lazarus, использующая компилятор FreePascal и воспроизводящая основные возможности Delphi. Основные преимущества Object Pascal: он основан на языке Паскаль, изначально предназначенном для обучения программированию; в нём эффективно реализована модульность; он позволяет изучить основные понятия, как связанные с объектно-ориентированным программированием, так и c программирования без использования классов и объектов. Отдельно стоит упомянуть визуальное программирование в Delphi и Lazarus, которое существенно облегчает создание пользовательских интерфейсов и некоторых других частей программы. Даже если впоследствии Вам придётся писать на каком-то другом языке программирования, знакомство с теми понятиями, которые необходимо знать для применения Object Pascal, поможет в этом языке разобраться, будь то C++, Java, C#, JavaScript, PL SQL, PHP, Python или что-то ещё.
Заведующий кафедрой
Информационных технологий ИМЭИ
Алексей Евгеньевич Хмельнов