#IT
#Programming

Программирование для начинающих

25.11.2024

Forth post preview image

Quote

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

Евгений Никонов

Вступление

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

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

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

Цель — постараться объяснить, как начать программировать; на что обратить внимание, а от чего абстрагироваться (по крайней мере, на начале); как развиваться.

Что такое программирование

Чтобы начать программирование, необходимо понять, что это такое. Если просто, программирование означает создание и изменение компьютерных программ.

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

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

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

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

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

Мои записи

Выбор инструмента

Если взгляднуть на сферу программирования невооруженным глазом — сложно. Столько направлений, столько инструментов. Однако всё куда проще.

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

Первый язык программирования может быть любым, восстребован он на рынке или нет — не так важно (я начинал с Pascal). Почему? — каждый язык имеет схожие принципы в своей основе, отличаться может только в синтаксисе и специфике применения. Т.е. переход с одного языка программирования на другой — не такая большая проблема.

Big keyboard

Есть одно но. Это самое но — моя личная рекомендация. Я рекомендую начать со строго типизированного языка программирования. Это означает, что язык заставляет пользователя строго придерживается к типам данных, которыми оперирует компьютер.

Для данного материала я выберу язык программирования, с которым развиваюсь профессионально — Golang.

Погружение

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

Something in the way

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

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

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

Первые шаги

Конечно, перед решением задач необходимо установить необходимое окружение для выбранного вами языка на ваш компьютер. Однако для того же Golang имеются ресурсы, позволяющие писать небольшие программы онлайн (например, play.golang.com или go.dev).

Сразу в бой? — именно так. Начнем с небольшой задачи:

Дана общая стоимость товара.

Необходимо написать программу вычисления суммы к оплате с учетом скидки. Скидка 10% от стоимости товара предоставляется, если общая стоимость превышает 500 единиц.

При предоставлении скидки выводится сумма скидки и сумма к оплате с учетом скидки. Иначе выводится сумма к оплате и сообщение о том, что скидка не предоставляется.

Пример решения в виде графического алгоритма:

Да

Нет

Начало

Определение оплаты

Оплата больше 500 единиц?

Вывод скидки и оплаты с учетом скидки

Вывод оплаты и сообщения о том, что скидка не предоставляется

Конец

Как видно, алгоритм имеет начало и конец.

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

Переменная? — некая коробочка, которая хранит в себе какие-то данные (в нашем случае — сумма оплаты). Возможно класть и извлекать данные из коробочки. Возможно перемещение данных между коробочками. И, конечно, возможно изменение данных, хранящихся в коробочках. Переменные могут быть разных типов: число, строка или что-то более сложное.

Также в алгоритме присутствует условный оператор. Именно там, где задается вопрос: “Оплата больше 500 единиц?”. Если ответ “Да”, выполняется условие истины, иначе выполняется условие лжи.

Написание программы

Пример программы:


package main // Определяем пакет нашей программы -> не уделяем сейчас этому повышенного внимания

import ( // Определяем, какие сторонние пакеты будем использовать -> также не уделяем сейчас этому повышенного внимания
  "fmt" // Пакет fmt, который позволяет выводить переменные (данные в коробочках) и не только
)

func main() { // Начало
  check := 600 // Определяем сумму к оплате. В переменную check (коробочка) было помещено (:=) значение 600 (число)
  discount := 10 // Определяем скидку. В переменную discount (коробочка) было помещено (:=) значение 10 (число)
  if check > 500 { // Условие "Оплата больше 500 единиц?"
    // Да
    newCheck := check - (check * 10)/100 // Определяем новую сумму к оплате. Сумму с учетом скидки
    fmt.Println("Check: ", newCheck) // Выводим новую сумму к оплате
                                    // Конструкция fmt.Println() выводит всё, что задано внутри скобок "()"
                                    // Через запятую внутри скобок мы перечислили то, что хотим вывести
    fmt.Println("Discount: ", discount, "%") // Аналогично выводим скидку
  } else { 
    // Нет
    fmt.Println("Check: ", check) // Выводим сумму к оплате
    fmt.Println("There is no discount for you") // Выводим информацию о том, что скидка не предоставляется
  }
} // Конец

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

Постарайтесь понять то, что написано в программе. Почитайте комментарии к программе — слова после ”//”. Не заостряйте внимание на моментах, где особенно написано этого не делать: “не уделяем сейчас этому повышенного внимания” — это отдельные темы.

В конечном итоге постарайтесь скопировать код программы, зайти на один из ресурсов, которые я упоминал выше, и запустить:

Program execution

Если у вас всё получилось — поздравляю, вы написали свою первую программу. Вообще первой программой для многих является простой вывод Hello world, но я не стал этим ограничиваться.

Дальнейшее развитие

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

Каков план?

Есть определенные темы для изучения. Изучение конкретной темы необходимо закреплять решением задач. Где искать темы? Темы обычно есть в том же справочнике выбранному языку программирования.

Например, для начала:

  • Структура программы.
  • Переменные.
  • Типы данных.
  • Условные выражения.
  • Вывод и ввод данных.
  • Циклы.
  • Массивы.
  • Функции и методы.
  • И т.д.

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

Где искать задачи? Это могут быть задачники, в которых вы увидите примерные темы. Например, вы можете попробовать найти задачник по языку программирования Pascal (там можно найти довольно неплохой список задач, я считаю).

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

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

Некоторые задачи

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

Задача на переменные, типы данных и условный оператор:

Определение прямой -> любое.

Определение окружности -> любое.

Определение квадрата -> любое.

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

Подсказка: используй уравнение прямой, квадрата и окружности.

Задачи на массивы, слайсы и ввод данных:

Необходимо поменять местами максимальный и первый элементы массива/слайса.

Ввод: ввод каждого значения массива/слайса.

Вывод: вывод результирующего массива/слайса.

Необходимо вставить число перед нечетными элементами массива/слайса.

Ввод: ввод числа, ввод каждого значения массива/слайса.

Вывод: вывод результирующего массива/слайса.

Необходимо сдвинуть элементы массива на 1.

Ввод: ввод каждого значения массива/слайса.

Вывод: вывод результирующего массива/слайса.

Разделение отрицательных и положительных чисел с сохранением порядка.

Ввод: ввод каждого значения массива/слайса.

Вывод: 2 массива/слайся (с положительными и отрицательными значениями).

Сумма элементов. Если сумма всех элементов массива чётная, нужно вывести количество нечётных (по значению) элементов массива, если нечётная – количество чётных.

Элементы массива/слайса заполняются рандомно, каждый элемент массива/слайса может принимать значение от 0 - 10. Используй rand в стандартной библиотеке golang (https://pkg.go.dev/math/rand).

Вывод: количество нечетных или четных элементов массива.

Количество пар элементов массива, в которых десятичная запись хотя бы одного числа оканчивается на 5.

Ввод: ввод каждого значения массива/слайса.

Вывод: количество пар.

Заключение

Eugene At Work

Читатель, если я заинтересовал тебя, если публикация принесла тебе пользу, буду рад твоей компании в своих дальнейших материалах. Я считаю, что мне точно есть, чем с тобой поделиться.

У меня нет системы оповещения, есть простой канал в Telegram, в котором ты можешь отслеживать мою активность по данному проекту и помимо.

Если ты заметил какую-либо ошибку или неточность, можешь оставить об этом комментарий в канале, который я описал выше.

Также немного информации вот тут.

J4stEuJust EugeneПросто Евгений

Stay tuned

Связанные публикации: