InCode#A0: Основы основ

Приветствую тебя, дорогой читатель. Раз ты наткнулся на эту статью, то тебе хочется познать таинственное “Программирование”, но ты не знаешь, с чего начать. Если это действительно так, то я предлагаю тебе продолжить чтение.

В этой части урока мы поговорим о том, что же такое программирование и кто такой программист.

Кто такой программист и чем он занимается?

Кто такой программист? Скорее всего, вы ответите нечто похожее на “Программист – человек, который занимается написанием программ для ЭВМ”. И этот ответ правильный, но нужно понимать, что он в себе хранит.

Задачи программиста

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

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

  • Решение математических задач
  • Решение логических задач
  • Конвертация типов

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

Начальные знания

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

Алгоритм решения задач

Мы разобрались с задачами программиста. Теперь поговорим о решении задач. Прежде, чем мы будем программировать, вам надо уметь:

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

Из этого короткого, но емкого списка вы должны понять то, что вы должны иметь базис алгоритмов, опираясь на который вы сможете в дальнейшем писать свой код и реализовывать поставленные вам задачи. Без этого базиса вы не сможете написать ничего, кроме “Hello World”. Поэтому вы должны совмещать изучение теории с практикой. После прочтения новой темы требуется практика, которая объединит пройденный материал с уже изученным. Также неплохо ставить задачи, которые превышают ваши знания, дабы вы находились в поиске возможной реализации. Это позволит более продуктивно изучать материал.

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

Пример решения задачи

Сейчас ты не знаешь логических конструкций, на базе которых можно строить серьёзные программы. Поэтому предлагаю начать рассмотрение задач с простой математической задачи. Мы прогоним её по всему “Алгоритму” который изложили выше.

Задача 1: (2 + 2) * 2;

Вы скажете — 8. Но нет. Давайте со всей совестью и порядочностью пройдем все этапы.

  • Анализ задачи: у нас простое математическое выражение, где используются две операции  ( ‘+‘ и ‘*’) и смена приоритета операций ( ‘(‘ и ‘)’).
  • Декомпозиция задачи. Её можно решить в момент. Но мы должны её разбить на части. Ниже будет схема шагов (машина не может вычислять такое моментально. У неё существуют шаги выполнения задачи).

Описание схемы: мы движемся сверху вниз. Сверху наши исходные данные, внизу результат. Стрелки обозначают перенос данных. Блоки — это операции (в скобках дается сама операция, запись в понятном виде и результат).

Схема показывает также третий и четвертый этапы.

  • Решение простых задач. В результате декомпозиции мы получили две простые задачи (вначале мы выполняем сложение, а далее умножаем полученный результат).
  • Композиция задачи. Мы должны собрать “сложную” задачу из более “простых”.

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

Количество решений задачи

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

Из этого следует проблема: не каждое решение эффективно по скорости, потреблению ресурсов и прочим критериям. Вы можете перенести в код математическую задачу “в лоб” (не оптимизируя логику задачи), а можете проанализировать задачу и использовать эффективное решение, которое будет лучше работать в десятки, а то и в сотни раз.

Для этого можно использовать простой пример — 9! разделить на 12!. Тут я рассмотрю два способа:

  • Посчитать вначале 9! затем 12! и поделить. Этот вариант долгий и действует ровно так, как записано.
  • Можно сократить факториалы и вычисление выйдет гораздо быстрее.

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

Домашнее задание

  • Задачи программиста: проанализируйте программы, которыми вы пользуетесь и выделите в них три типа задач, которые решает программист.
  • Алгоритм решения задач: рассмотрите математические примеры (подобно тому, как был рассмотрен пример ”(2 + 2) * 2”).
  • Количество решений у задачи: придумайте задачу и способы ее решения, среди которых выделите оптимальное, среднее и ужасное решение.
InCode#A0: Основы основ

Добавить комментарий

Ваш e-mail не будет опубликован. Обязательные поля помечены *