Валерий Сибиряков Дебютант

С чего начать учиться программированию?

Как познать искусство программирования на ЭВМ? А программирование — это именно искусство! Как заставить сложную машину выполнять ваши команды? Как разобраться во всем множестве языков программирования?

Andrey Smirnov, Shutterstock.com

С чего начать? На что обратить особое внимание? От обилия информации по этому вопросу кружится голова. Не отчаивайтесь, я помогу вам.

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

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

Советую начать с языка BASIC, и не с визуализированных версий этого продукта, а с простейшего интерпретатора под DOS.

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

Давайте попробуем разобраться в терминах. BASIC (кроме того, что это аббревиатура Beginner’s All-purpose Symbolic Instruction Code — универсальный код символических инструкций для начинающих) в переводе с английского означает «Основной». Это означает, что в языке присутствуют только основополагающие конструкции. Оператор — специальная конструкция языка, позволяющая выполнить то или иное действие. В языке также представлены переменные и константы. Константы бывают числовые и строковые. Числовые константы — это просто числа: 1; 5.34; -0.99 и так далее. Строковые константы — это какие-нибудь слова, заключенные в кавычки, например: «BASIC — простой язык!» или «Мне нравится программировать».

Переменные языка — это ячейки памяти, в которых хранятся константы. Рассмотрим простейший из операторов, оператор присваивания: A = 0. Здесь A — это переменная, = — оператор присваивания, он помещает число 0 в ячейку A. Или Pi = 3.14, сейчас мы назначили переменной Pi значение 3.14. Аналогично поступаем со строковыми переменными: B$ = «Привет». B$ — строковая переменная, об этом говорит знак $.

Рассмотрим оператор цикла:

FOR I = 1 TO 10
[набор операторов]
NEXT

Эта конструкция позволяет выполнить набор операторов, заключенных между словами FOR и NEXT, 10 раз, причем в каждом цикле переменная I будет равна номеру цикла, а именно от 1 до 10. Границы цикла могут быть произвольными.

Условный оператор выглядит следующим образом:

IF A > 0 THEN [оператор-1]
ELSE [оператор-2]

То есть если условие, заключенное между IF и THEN, — истинно, то выполняется оператор 1, иначе — оператор 2.

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

[метка]
[Набор операторов]
RETURN

Это описание подпрограммы, оператор RETURN говорит о том, что подпрограмма закончена, и компьютер должен вернуться в точку вызова. Вызов осуществляется так:

GOSUB [метка]

После того как компьютер встретит оператор GOSUB, он перейдет к исполнению набора операторов, заключенных между [метка] и RETURN.

Есть еще один случай, когда операторы выполняются не в том порядке, в каком написаны: оператор GOTO [метка] сообщает компьютеру, к какому помеченному оператору нужно перейти.

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

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

Обновлено 12.01.2012
Статья размещена на сайте 9.01.2012

Комментарии (84):

Чтобы оставить комментарий зарегистрируйтесь или войдите на сайт

Войти через социальные сети:

  • Начинать советую с языка SCRATCH лет в 6-8!

  • Лучше начинать все ж с Паскаля (не сложный, но все же более приближенный к реальности язык) или в современных видовских реалях с Делфи (вообще можно не программировать знай только компоненты собирай )
    Кстати если мне не изменяет мой склероз Паскаль и создавался для обучения студентов.
    А для серьезного уровня надо будет ещё осваивать Си/Java и ООП
    С таким багажом можно уже двигаться в любую сторону
    Да и лучше начинать изучать программирование ещё в школе так будет проще

  • Дмитрий Елисеев Мастер 15 января 2012 в 13:10 отредактирован 15 января 2012 в 13:10

    Чтобы читатели не мучались с поиском Бейсика, решил написать другую статью

    https://shkolazhizni.ru/school/articles/51699/

    Надеюсь, получилось более-менее понятно.

  • Привет, я тут новенькая!
    А что значит "запустить программу?" Я написала в ворде то что вы написали тут. И что мне делать?

    • Марианна Власова Марианна Власова Бывший главный редактор 12 января 2012 в 18:25

      Сергей Смирнов или та, кто пишет из-под его аккаунта, на компьютере должен быть BASIC - "программная среда, позволяющая создавать, отлаживать и запускать свои программы".

      • Марианна Власова, это был саркастичный иллюстративный комментарий. Новичку эта статья напомнит картинку. Ее вы можете найти в гугле по запросу "как нарисовать сову".

        То есть "берем и программируем - видите как просто!". Хотя на деле это действительно просто, новичок не допрет куда писать волшебные буквы и что с ними делать и как запускать. Это я вам точно говорю. Я сам объяснял неглупому человеку что такое html-файл и как эти волшебные значки связаны с тем что отображается в браузере примерно 40 минут. С примерами! А вы говорите "открываем бейсик, пишем, компилируем - вуаля." да все сразу развернутся и убегут от такой "простоты".

        • Марианна Власова Марианна Власова Бывший главный редактор 13 января 2012 в 15:13

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

  • Ну, все мои юзерские предположения подтверждены компетентными лицами, можно спокойно ставить заслуженную 2-йку.

    Оценка статьи: 2

  • Олег Антонов Аксакал 12 января 2012 в 11:37 отредактирован 12 января 2012 в 12:00

    Валерий Сибиряков, отличная статья! Идеальная выдержка из книги "Что такое ЭВМ?". В 1975 году это зачитали бы до дыр. А сейчас для обучения - структурный объектно-ориентированный событийный язык и никак иначе.
    Какой GOTO? К тому же вас кто-то обманул, GOTO не применяется для вызова подпрограмм, это безусловный переход. Для вызова подпрограмм используется GOSUB. А в вашем примере попав через GOTO [метка] на:
    [метка]
    [Набор операторов]
    RETURN

    компилятор выдаст ошибку "RETURN без GOSUB", потому что нет адреса возврата.

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

    Оценка статьи: 3

    • Олег Антонов, что значит "ориентированных первоначально на Бейсик", профессиональный программист знает кучу языков, именно такой подход формирует программное мышление!

  • Какой basic, какой ДОС? Это позавчерашний день, в том числе и по удобству отладки, ну а учить новичков goto, это вообще дурной тон.

    В С и С++ также можно писать консольные приложения, в которых не будет ничего лишнего, а код прост и понятен. Как бонус - синтаксис С++ явился основой для других популярных языков (Java, C#), так что его изучение в любом случае будет полезно.

    Впрочем есть и альтернативный вариант - сразу привыкать к объектно-ориентированному мышлению, и делать красивые программы сразу для Windows, на C# или том же Visual Basic. По большому счету это даже проще, наверно.

    Ассемблер же по большому счету новичкам вообще нафиг не сдался, только тем кто захочет изучить углубленно как оно работает.

    • Дмитрий Елисеев, с ДОСа стартовать всё равно проще. Ибо чем больше окошечек и кнопочек, тем больше обучаемый отвлекается от сути.

      • Линда Кайе, где ж его сейчас взять-то, этот ДОС Тогда уж хотя бы GCC из консоли использовать.

        Хотя по сути конечно согласен, проще Бейсика для начинающих ничего не было придумано. Хочешь текст, хочешь графику, все в 1 строчку писалось и никаких контекстов устройства знать не надо. Сейчас на winapi надо написать пару страниц кода, чтобы вывести окружность в окне, в Бейсике написал "CIRCLE (100, 100), 50" и все дела.

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

        • Дмитрий Елисеев, QuickBasic прекрасно работает в консоли NT.

          Насчёт пары страниц кода - это малость перебор OO

          Знания нужно получать постепенно, а не сразу "Здравствуйте, дети, это WPF!"

    • Дмитрий Елисеев, представьте себе человека, который первый раз увидел компьютер, какой С++ ?

      • Дмитрий Елисеев Мастер 12 января 2012 в 14:10 отредактирован 12 января 2012 в 14:12

        Валерий, можно писать на С++, используя его как обычный С.

        Чем такой код непонятнее бейсика?
        #include stdio.h(скобки тут движком не поддерживаются)
        void main()
        {
        printf("Hello world");
        }

        Зато современно, и работает везде, от Windows до Linux или MacOS, а компилятор basic-a еще поискать надо.

      • Прим Палвер Прим Палвер Дебютант 12 января 2012 в 12:51 отредактирован 12 января 2012 в 12:52

        Валерий Сибиряков, для таких есть программа "кенгурёнок". Или современные аналоги для детей.
        А для тех, кто освоил "если-иначе", "повторить n раз" и функцию, такое г не нужно.
        Если я начинал с Турбо Паскаля 5 - это вовсе не означает, что всем следует с этого начинать.
        Вначале следует озаботиться сферой применения - никто ведь не станет программировать ради программирования. Выбрать язык. Купить книжицу по нужному языку, пусть даже "для чайников", и освоить по ней азы. Понравилось - купить потолще.

        Оценка статьи: 4

    • Олег Антонов Аксакал 12 января 2012 в 11:53 отредактирован 16 января 2012 в 15:28

      Дмитрий Елисеев, Ассемблер же по большому счету новичкам вообще нафиг не сдался, только тем кто захочет изучить углубленно как оно работает.
      Ну не скажите. У меня, правда, предмет немного специфический, программирование микроконтроллеров. И студенты приходят уже со знанием ЯВУ, у нас их учат на С. Так я на первых занятиях сначала слушаю остроумные (на их взгляд) мнения о мощности контроллеров (а там тактовая частота 1 МГц и память на сотню килобайт максимум), а потом отвечаю на вопросы типа "А почему тут нет long double?" или "Почему компилятор ругается на двумерный строковый массив?".
      Поэтому теперь сначала идут 3 лабораторных на эмуляторе КР580 - старом советском процессоре, аналоге Z80. Там простейший ассмблер, мизерные ресурсы процессора, но смоделирована богатая периферия. Один так увлекся, что чуть шашки не написал. После этого вопросов и шуток не возникает.

      Оценка статьи: 3

      • Олег Антонов, КР580 - аналог - Intel 8080. Полностью совместим по командам, но со встроенным арбитром шины был выпущен 8021 (его очень любили венгры в своих разработках).

      • Олег Антонов, я писал и под контроллеры AVR, все прекрасно работает на С. Для популярных PIC тоже есть и С и даже вроде Basic, про более сложные ARM уже не говорю даже. А чем тратить время на КР580 имхо, лучше уж макетную плату с ATTiny за 10$ собрать.

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

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

        • В дополнение - чем тратить время на древний КР580, лучше сделать например цифровой термометр с ЖК-экраном на микроконтроллере (ATTiny + DS1820 + Winstar16x1), по затратам времени столько же, зато на порядок интереснее да и в быту полезно.

          Далее, проект можно развить, добавив например передачу данных на комп по COM-порту, для особо продвинутых AVR-USB и свой драйвер

          • Дмитрий Елисеев, а чего учить алфавит? Он уже черт его знает сколько лет всем известен! Лучше сразу в первом классе забабахать поэму в стихах о десяти главах, куда как интереснее! А потом еще развить, в акростих переделать.

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

            Оценка статьи: 3

  • По мне так нужно начать с простых языков(basic,java,delphi), чтобы понять основы. Затем изучить C++ и assembler чтобы понять как именно выполняются программы. Изучить булеву логику и основы электроники. Затем в совершенстве изучить какой либо промышленный язык, библиотеки, расширения, технологии, разрабатывая реальные программы. Попутно перечитать гору книг и документации по computer science. Ну и изучить ряд прочих популярных языков (в том числе и функциональных) чтобы понять их в сравнении.
    Конечно это минимум, требуемый чтобы не быть индусом-быдлокодером. Помимо этого придётся изучить тьму прочей всячины, в зависимости от специализации. Обучение никогда не закончится.

    • Тимур Шакиров, Это не простые языки, а языки высокогоуровня, assembler- язык низкого уровня
      Простой язык- машинный код. Но для людей- он самый трудный.

      Оценка статьи: 3

      • Владимир Иванович Пресняков, "ассемблер...Но для людей- он самый трудный" - как сказать, даже - не согласен. Ассемблеры - однозначны. Для разных (микро)процессоров они очень одинаковы по сути, ну, может, в синтаксисе небольшие различия. А ЯВУ придумывают чуть ли не под конкретные задачи, плюс - дальнейшее накручивание/расширения всевозможными библиотеками, без которых языка, на практике, не знаешь. Ну, на вскидку, по плюсам - переход на STL, потом на Вoost, не забывая прикладные библиотеки, для винды - те же WTL, MFC. По работе с базами тоже и ODB, и ADO и др.
        В результате каждые полгода нужно переучиваться, чтоб что-то коммерческое делать.
        И вопрос вопросов - а что мы собираемся делать? Для чего?

        • Юрий Лях, однозначность Ассемблера - миф. Один только цикл там можно организовать грудой способов, в то время как в ЯВУ обычно бывают For, While и (чтобы сразить читающего код) - If-GoTo.

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

          • Линда Кайе, "однозначность Ассемблера - миф." не понял, что имеете в виду. На асме циклы реализованы однозначно только при пересылке/сканировании (автоинкремент/автодикремент, в зависимости от флага D, адреса источника[результата] индексных регистров ESI/EDI и счетчика на СХ, как помню). К вашему примеру For(...) loop. Где же тут горка? Остальное - программные конструкции.

            "прикладные библиотеки созданы для решения сложных задач, для облегчения, ибо на Асме это будет писаться оооочень долго." - обобщим - без библиотек все на всем будет писаться оooooчень долго .

            • Юрий Лях, я имею в виду, что обилие атомарных "функций" позволяет реализовать цикл разными способами, в то время как в ЯВУ еть оператор цикла и никаких альтернатив кроме костылей.

              Без библиотек на Асме гораздо дольше ^^' ЯВУ появились как раз для соращения времени разработки программ.

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

        • Тимур Шакиров, "Не нужно знать что такое куча, стек, деструкторы, адресация, ссылки." - самое интересное, что люди сами для себя создают сложности понимания, придумывая на своем человеческом языке новые термины, часто означающие одно и тоже.

  • Статья явно переписана из учебника 20-летней давности, судя по аббревиатуре "ЭВМ", сто лет её не видела.

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

    • Елена Кузьмина, мне еще хотелось бы посмотреть за сколько часов/дней Вы 1С изучите!

      • Валерий Сибиряков, думаю, что "с листа". Потому что с точки зрения программиста встроенный язык 1С ничуть не сложнее Visual Basic. А вот предметная область 1С, завязанная на российский бухучет - это тихий ужас. Но разбираться в этом - дело проектировщика, который напишет ТЗ для Елены Кузьминой.

        Оценка статьи: 3

        • Олег Антонов, в 1С масштабна программная платформа в целом, а сам язык, и правда, немудрящий. Только при помощи одного языка как такового ничего не сделать.

          • Олег Антонов Аксакал 12 января 2012 в 14:00 отредактирован 12 января 2012 в 14:06

            Mike Mike, почему не сделать? Вот так мы развлекались в свое время.

            Оценка статьи: 3

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

        • Олег Антонов, Вы никогда не писали на 1С, потому-что задание Вам даст бухгалтер, и никакой проектировщик Вам не поможет!
          А по поводу точки зрения программиста, я и хотел сказать об основных концепциях всех языков на примере Бейсика.

          • Валерий Сибиряков, я вам говорю как должно быть. Бухгалтер общается с системным аналитиком-проектировщиком, который пишет техническое задание. А по нему уже работает программист, который бухгалтера и в глаза не видит. Обычно в "1С-программировании" эти роли совмещает один человек, но это не правильно. А совсем в запущенных случаях и ТЗ не пишется. И получается - "Ой, мы вот эту мелочь забыли!". А мелочь требует изменения всей структуры данных.
            А так, да, вы правы, ведь я всего лишь семь лет отработал в 1С-франчайзи и аттестован всего лишь по двум компонентам семерки.

            Оценка статьи: 3

            • Наталья Дюжинская Наталья Дюжинская Читатель 13 января 2012 в 11:37 отредактирован 13 января 2012 в 11:39

              Олег Антонов, как бухгалтер предпочитаю работать напрямую с программистом и обходиться без сисаналитиков-проектировщиков. Может быть на больших предприятиях и необходим проектировщик, а особо крупные предприятия и холдинги работают на своих или иностранных программах (Р3, Скала) -никак не на 1С. Кстати, а когда 1С 7 перестанут поддерживать?

    • Елена Кузьмина, статья написана для того, кто не имеет специфического, программного (системного) мышления. Я вот например программирую на Borland C++ Builder 6.0, однако начинал с BASIC.

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

    Оценка статьи: 3

  • А вот интересно, что нужно, чтобы самому создать новый язык, какие знания нужны для этого?

    Оценка статьи: 4

    • Григорий Петрик, "чтобы самому создать новый язык, какие знания нужны для этого" - прежде всего нужно иметь здравый смысл, чтоб понять - а для чего это нужно делать? Дальше - аналитические, чтоб проанализировать существующие и вывести все их "+" и "-". Дальше- манагерские - нанять исполнителя и найти инвестора.

      • Юрий Лях, инвесторов в общем-то и не надо

        "Теория компиляторов" - уже давно развитая область, есть и формальные описания грамматик, и синтаксические анализаторы. Есть и интерпретаторы, встраиваемые в программы на С/С++ (Lua, Питон).
        Так что технически вполне реально, другой вопрос "зачем" - языков сейчас десятки, на любой вкус и задачи.

  • Прим Палвер Прим Палвер Дебютант 12 января 2012 в 01:32 отредактирован 12 января 2012 в 01:39

    Помнится, ещё 20 лет назад от goto морщили носы учителя информатики. Не думал, что ещё его увижу.

    А так, в качестве азов, пойдёт. if, for... ещё бы функцию/процедуру добавить. Есть оно в бейсике? Не довелось. В школе информатик был фанатом турбо паскаля.

    И я бы посоветовал учить то, с чем будет дальше работаться. C++ или C# для настольных программ, php - если есть планы на создание сайтов. Просто бейсик - это язык для обучения и больше ни для чего. Не хочется быть ханжой, но как-то так...

    Оценка статьи: 4

  • Да уж...