27 апреля 2012 г.

Суть программирования.


Суть программирования.

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



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

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

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

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

Теперь о самой сути. Важно понять что любая программа от калькулятора до 3д игры это вычисления.

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

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

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

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

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

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

Теперь почему не стоит учить языки программирования, а стоит учиться программировать? Дело в том что начиная изучать Си или Си++ Java или Ассемблер мы учим новый синтаксис языка, новые правила оформления программ, новые команды, новый интерфейс среды разработки, но не учимся самому программированию. Если строить аналогию в иностранных языках то мы просто учим новые слова нового языка, в тот момент когда мы узнаем что фонетика,синтаксис, правила написания и произношения есть суть иностранного языка мы намного быстрее поймем чужой язык и быстрее разберемся в сути и следовательно обучение пойдет быстрее.

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

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

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

Изучайте суть программирования и вы всему научитесь. Удачного программирования !!!

Комментариев нет:

Отправить комментарий