Теория по программированию [Станислав Лезвиев] (pdf) читать онлайн

Книга в формате pdf! Изображения и текст могут не отображаться!


 [Настройки текста]  [Cбросить фильтры]

Данный материал рассказывает о теории программировании, я попытался изложить сюда
знания основывая их на своём личном опыте.

Содержание
• Глава 0. Введение в программирование.
• Глава 1. Теория в программировании.
• Глава 1.1. Алгоритмы.
• Глава 1.2. Типы данных.
• Глава 1.3. Функции.
• Глава 1.4. Арифметические и логические операции.
• Глава 1.5. Условия.
• Глава 1.6. Циклы.
• Глава 1.7. Баги.
• Глава 2. Что нужно для программирования?
• Глава 2.1. Интегрированная среда разработки (IDE)
• Глава 2.2. Компилятор.
• Глава 2.3. Интерпретатор.
• Глава 2.4. Транслятор.
• Глава 2.5. Парсер.
• Глава 2.6. Другие механизмы преобразования кода.
• Глава 3. Направления в программировании.
• Глава 3.1. Фронтенд.
• Глава 3.2. Бекенд.
• Глава 3.3. Программное обеспечение.
• Глава 3.4. Разработка баз данных.
• Глава 3.5. Нейронные сети.
• Глава 3.6. Какое направление выбрать?
• Глава 4. Языки программирования.
• Глава 4.1. Компилируемые языки.
• Глава 4.2. Интерпретируемые языки.
• Глава 4.3. Низкоуровневые языки.
• Глава 4.4. Высокоуровневые языки.
• Глава 4.5. Языки общего назначения и специализированные.
• Глава 4.6. Динамические и статические языки.
• Глава 4.7. Мультипарадигма!

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

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

Глава 1.1. Теория в программировании. Алгоритмы.
Логика играет очень важную роль в программировании.
В программировании используется логика для решения проблем и создания алгоритмов.
Алгоритм - это последовательность действий, необходимых для выполнения
определенной задачи. Алгоритмы могут быть написаны на разных языках
программирования и могут быть использованы для решения различных задач.
Существует несколько видов алгоритмов:
Последовательные алгоритмы - это алгоритмы, в которых каждое действие выполняется
по очереди, одно за другим.
Ветвящиеся алгоритмы - это алгоритмы, которые содержат ветвления, т.е. различные
направления выполнения в зависимости от условий.
Циклические алгоритмы - это алгоритмы, которые выполняются многократно
до достижения определенного условия.
Знание логики и разных видов алгоритмов позволяет программистам создавать
эффективные и точные программы, которые могут решать самые разнообразные задачи.
Но что же такое Логика?
Логика - это наука о правильном мышлении и выводах на основе рациональных
аргументов. В программировании логика используется для разработки алгоритмов и
создания логических конструкций, которые могут принимать решения на основе
определенных условий.
Примером логической конструкции может быть оператор "if-else" (если-иначе), который
проверяет определенное условие и выполняет соответствующий блок кода в
зависимости от результата проверки. В программировании также используется
символика логических операций, таких как "и", "или" и "не", которые позволяют создавать
сложные логические выражения для принятия решений.
Знание логики помогает программистам создавать правильные и эффективные
алгоритмы, которые могут решать разнообразные задачи. Кроме того, логическое
мышление помогает программистам анализировать и улучшать существующий код и
создавать новые идеи для развития программных продуктов.

Рассмотрим пример из реальной жизни, с использованием логики и алгоритмов.
Один из примеров использования начальных алгоритмов и логики в жизни - это процесс
приготовления кофе. Для того чтобы приготовить вкусный кофе, необходимо выполнить
определенную последовательность действий:
1) Налить воду в кофеварку.
2) Поместить кофейные зерна в фильтр.
3) Установить фильтр с кофейными зернами в кофеварку.
4) Включить кофеварку.
5) Дождаться, пока кофе сварится.
6) Выключить кофеварку.
7) Налить кофе в чашку.
В данном примере, мы использовали логику, чтобы определить правильную
последовательность действий, необходимых для приготовления кофе. Мы также учли
условия, такие как необходимость наличия воды и кофейных зерен, а также
необходимость включения и выключения кофеварки. Кроме того, если в процессе
приготовления кофе что-то пошло не так, например, закончилась вода или кофейные
зерна, мы можем использовать логику, чтобы определить, что нужно сделать в этой
ситуации, например, долить воду или добавить кофейных зерен.
Таким образом, использование логики и начальных алгоритмов помогает нам выполнить
определенную последовательность действий, чтобы достичь желаемого результата.
Рассмотрим еще один пример, как программирование и реальная жизнь тесно связаны
между собой, можно найти в процессе обучения человека. Представим, что мы хотим
научиться игре на музыкальном инструменте. Для этого необходимо выполнить ряд
действий:
1) Изучить теорию музыки.
2) Научиться играть базовые ноты и аккорды.
3) Практиковаться в игре на инструменте, повторяя изученные ноты и аккорды.
4) Улучшать свои навыки и изучать более сложные музыкальные композиции.
Эти шаги очень похожи на процесс программирования, где мы начинаем с изучения
базовых концепций и терминологии, а затем применяем эти знания в создании
программного кода. Как и в музыке, мы можем создавать новые алгоритмы и развивать
свои навыки программирования, изучая новые технологии и языки программирования.
Также, как и в музыке, процесс обучения программированию и разработке программ
постоянно изменяется и развивается. Новые технологии и инструменты позволяют
разработчикам создавать более эффективный и мощный код, который может решать
более сложные задачи. Цикл обучения и развития в программировании похож на
бесконечную гонку за совершенством, которая постоянно поддерживает связь между
программированием и реальной жизнью.

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

Глава 1.2. Теория в программировании. Типы данных.
В программировании данные, с которыми мы работаем, имеют определенный тип.
Это означает, что у каждого значения есть свой формат, который определяет, как мы
можем использовать это значение в нашей программе.
Например, тип данных "число" может быть использован для хранения числовых
значений, таких как 5, 10.5, -3 и т.д. Мы можем производить арифметические операции с
числами, такие как сложение, вычитание, умножение и деление.
Другой тип данных, "строка", может быть использован для хранения текстовых
значений, таких как "Привет, мир!". Мы можем использовать строки для вывода
текстовой информации на экран, работы с текстом и т.д.
Также в программировании есть тип данных "логическое значение", который может быть
либо "истина" (true), либо "ложь" (false). Этот тип данных используется в условных
операторах, циклах и других конструкциях, чтобы определять, какой код должен быть
выполнен.
Есть и другие типы данных, такие как "массив", "объект", "символ" и т.д. Каждый
тип данных имеет свои особенности и методы работы с ними.
Различные языки программирования имеют различные типы данных, но существуют
некоторые общие типы данных, которые используются в большинстве языков
программирования. Они включают в себя:
Числовые типы данных - это типы данных, которые представляют числа. Например,
целочисленные типы данных (int), числа с плавающей запятой (float, double), и
комплексные числа (complex).
Символьные типы данных - это типы данных, которые представляют символы или
буквы. Например, тип char, который используется для представления одного символа.
Строковые типы данных - это типы данных, которые представляют последовательность
символов или строк. Например, тип string, который используется для представления
текстовых строк.
Логические типы данных - это типы данных, которые представляют логические значения
истинности или ложности. Например, тип bool, который может иметь только два
значения - true или false.
Списочные типы данных - это типы данных, которые представляют упорядоченные
списки значений. Например, массивы, списки, стеки, очереди и т.д.
Файловые типы данных - это типы данных, которые представляют данные, хранящиеся
в файлах. Например, типы данных FILE в С и C++, которые используются для работы с
файлами на диске.

Тип данных int (от английского integer, что означает "целое число") используется в
программировании для хранения целочисленных значений. Он может содержать любое
целое число, положительное, отрицательное или ноль.
Тип данных char в программировании используется для хранения символов, таких как бук
вы, цифры, знаки пунктуации и другие символы. Он представляет собой однобайтовую п
еременную, то есть переменную, которая занимает один байт памяти.
Символы могут быть заданы как в виде символьной константы в одинарных кавычках, так
и в виде переменной типа char.
Тип данных "строка" (string) в программировании используется для хранения текстовой
информации. В языках программирования, таких как Python, Java, C++, PHP и
многих других, строки представлены последовательностью символов, которые могут
быть буквами, цифрами, знаками препинания и другими символами.
Строки в программировании могут быть созданы с помощью двойных кавычек.
Тип данных "bool" - это тип данных, который может иметь только два значения:
"true" (истина) или "false" (ложь). Этот тип данных используется для представления
логических значений в программировании.
В языках программирования, тип данных "bool" используется в условных операторах,
циклах и других конструкциях, которые требуют логических выражений. Например,
мы можем использовать тип данных "bool" для определения, является ли число больше
или меньше определенного значения, или для проверки соответствия условиям,
заданным в программе.
Массив (array) - это тип данных в программировании, который позволяет хранить набор э
лементов одного типа под одним именем переменной. Это означает, что мы можем хран
ить множество значений в одной переменной и обращаться к каждому из них по отдельно
сти.
Массивы очень полезны для работы с большим количеством данных, таких как список им
ен, чисел, букв и т.д. Они могут использоваться для хранения данных, сортировки, фильт
рации, обработки и многого другого.
Кроме массивов, существуют и другие типы данных, которые позволяют хранить наборы
значений, такие как список (list), кортеж (tuple), словарь (dictionary) и множество (set). Каж
дый из этих типов имеет свои особенности и применение в программировании. Например
, список позволяет хранить наборы значений любого типа, а словарь - наборы значений в
формате "ключ-значение", где каждому ключу соответствует свое значение.

Мы рассмотрели типы данных, которыми мы можем пользоваться в программировании.
Но как же нам пользоваться типами данных и ими манипулировать?
В этом нам помогут переменные.
Переменная - это именованное хранилище данных в программировании, которое
позволяет сохранять и обрабатывать значения в течение выполнения программы.
В простых словах, переменная - это контейнер, в котором мы можем хранить значения,
которые могут изменяться в течение выполнения программы.
Переменная имеет тип данных, который определяет, какой тип данных можно сохранять
в эту переменную, например, целые числа, числа с плавающей точкой, символы, строки
и т.д. Также переменная имеет имя, которое мы можем использовать для обращения
к ней в программе.
Мы можем использовать переменную в программе, чтобы хранить значения, которые
могут изменяться, например, результаты вычислений или введенные
пользователем данные. Также переменные могут использоваться для передачи
значений между различными участками программы и для удобства чтения и написания
кода. Важно понимать, что переменная может быть изменена в любой точке программы,
поэтому ее значение может изменяться в зависимости от логики программы и
введенных данных.
Другими словами, переменная - это хранилище данных в программе, которое имеет имя
и тип данных. Она может хранить значение, которое может изменяться в зависимости от
логики программы и введенных данных. Переменная используется для удобства чтения
и написания кода, а также для передачи значений между различными участками
программы. При объявлении переменной, мы задаем ей тип данных и значение
переменной. На пример:
var value:int = 10
С помощью ключевого слова var, мы объявляем переменную и даем ей название value,
после чего присваиваем значение переменной число 10.
В программировании существуют определенные правила именования переменных.
Нельзя называть переменную:
• Названия, начинающиеся с цифры
• Специальные символы в названии, кроме знака подчеркивания "_"
• Зарезервированные слова языка программирования,
такие как "if", "while", "for", "return" и т.д.
Можно называть переменную:
• Любой комбинацией латинских букв (верхнего или нижнего регистра),
цифр и знака подчеркивания "_"
• Название должно быть понятным и отражать смысл значения,
которое будет храниться в переменной
• Разделять слова в названии переменной с помощью знака подчеркивания "_", или
использовать camelCase - запись слов чередующихся в верхнем и нижнем регистрах.

Глава 1.3. Теория в программировании. Функции.
Функция в программировании - это фрагмент кода, который выполняет определенную
задачу и может быть многократно использован в программе. Функция может принимать
входные параметры (аргументы), обрабатывать их и возвращать результат выполнения.
Другими словами, функция в программировании - это инструмент, который помогает
разбить сложную задачу на маленькие части и решать их отдельно.
Основная идея функций заключается в том, чтобы разделить программу на небольшие
логические блоки, каждый из которых решает свою задачу. Это позволяет упростить код,
увеличить его читаемость и повторно использовать функции в различных
участках программы.
Также функции могут быть встроенными в язык программирования, например,
функции для работы со строками или числами, или же написанными программистом
самостоятельно. В обоих случаях использование функций позволяет улучшить качество
кода и сократить время разработки программ.
Создание функции в программировании начинается с определения ее имени и списка
аргументов, которые она будет принимать. Имя функции должно быть уникальным и
описывать ее назначение. Список аргументов определяет, какие значения
функция должна принимать для обработки.
Затем следует определить тело функции, которое содержит инструкции, выполняемые
при вызове функции. Тело функции может содержать объявления переменных, условные
операторы, циклы и другие инструкции, которые нужны для выполнения нужной задачи.
Кроме того, функции могут возвращать значение. Если функция должна вернуть
результат, определите тип значения, которое она возвращает, и используйте
оператор return для передачи этого значения обратно в программу.
Пример создания функции:
func post(a:int):int =
return a * 9
Мы объявляем функцию post, с помощью ключевого слова func, аргументом служит
переменная a, с числовым типом данных. После скобок, мы объявляем возвращаемый
функцией тип данных.
Если мы вызовем функцию, post(9) то мы получим результат в виде числа 81.

Пример из реальной жизни, в котором используются функции, может быть связан с
обработкой фотографий. Например, функция "обрезать фото" может принимать в
качестве аргументов изображение и размеры, до которых необходимо обрезать фото,
а возвращать обрезанное изображение.
Еще один пример - функция "рассчитать расстояние между двумя точками". Она может
принимать в качестве аргументов координаты двух точек на плоскости и возвращать
расстояние между ними.
Функции также используются для работы с базами данных, например, функция
"получить список пользователей" может принимать некоторые параметры
(например, фильтры) и возвращать список пользователей, соответствующих
заданным критериям.
Таким образом, функции могут использоваться в разных областях, где требуется
повторное использование определенных операций, чтобы сделать программу более
эффективной и удобной в использовании.
Хорошим примером использования функций в реальной жизни может быть
приготовление пищи. Например, мы можем создать функцию "приготовить пасту",
которая принимает на вход тип пасты, количество порций и время готовки. Функция
может выполнять различные операции, такие как нарезка ингредиентов, запуск
кипячения воды, добавление соли и масла, перемешивание и т.д.
Также, мы можем использовать функцию "приготовить суп", которая может использовать
функцию "приготовить бульон", чтобы сначала приготовить основу для супа.
Таким образом, создание функций может помочь нам сократить повторяющийся код и
упростить процесс создания пищи. Кроме того, использование функций позволяет
создавать более читаемый и понятный код, который легко поддерживать и
модифицировать в будущем.

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

Глава 1.4. Арифметические и логические операции

В программировании, арифметические и логические операции позволяют выполнять раз
личные вычисления.
Операторы - это символы или ключевые слова, которые используются в арифметических
и логических выражениях для выполнения операций. Например, оператор "+"
используется для выполнения операции сложения в арифметических выражениях, а
оператор "==" используется для сравнения значений в логических выражениях.
Операции - это действия, которые выполняются с помощью операторов. Например, в
арифметических выражениях операция сложения выполняется с помощью оператора "+".
В логических выражениях операция сравнения выполняется с помощью оператора "==",
который проверяет, равны ли два значения.
Арифметические операции выполняются над числами и включают в себя
сложение (+), вычитание (-), умножение (*), деление (/) и остаток от деления (%).
Например, если у нас есть два числа, 5 и 2, то мы можем использовать арифметические
операции, чтобы выполнить различные вычисления, например:
5+2=7
5-2=3
5 * 2 = 10
5 / 2 = 2.5
5 % 2 = 1 (остаток от деления 5 на 2)
Другими словами, все законы математики властны в программировании.
В языке программирования обычно используются следующие арифметические операции:
Сложение (+) - операция, которая позволяет складывать два или более числа.
Вычитание (-) - операция, которая позволяет вычитать одно число из другого.
Умножение (*) - операция, которая позволяет умножать два или более числа.
Деление (/) - операция, которая позволяет делить одно число на другое.
Взятие остатка (%) - операция, которая возвращает остаток от деления двух чисел.
Инкремент (++) - операция, которая увеличивает значение переменной на единицу.
Декремент (--) - операция, которая уменьшает значение переменной на единицу.
Арифметические операции могут быть выполнены над различными типами данных,
такими как целые числа (int), числа с плавающей точкой (float), длинные
целые числа (long) и др.

Логические операции выполняются над булевыми значениями (true или false) и включают
в себя операции И (&&), ИЛИ (||) и НЕ (!). Например, если у нас есть два булевых
значения, true и false, то мы можем использовать логические операции, чтобы выполнить
различные проверки, например:
true && false = false
(логическое И - результат будет true только если оба операнда тоже true)
true || false = true
(логическое ИЛИ - результат будет false только если оба операнда тоже false)
!true = false
(логическое НЕ - инвертирует значение операнда, то есть true становится false,
а false становится true)
Операторы в программировании - это символы или ключевые слова, которые
используются для выполнения операций. Например, оператор присваивания (=)
используется для присваивания значения переменной, операторы сравнения (>, b) {
// Выполняется, если a > b
cout