Основы программирования - с чего начать?
Для того, чтобы перейти к этому вопросу, нам нужно уточнить терминологию.
Так что же такое программирование?
Программи́рование — процесс создания компьютерных программ.
По известному выражению Никлауса Вирта «Программы = алгоритмы + структуры данных».
Иными словами, ключевыми непосредственными задачами программирования являются создание и использование алгоритмов и структур данных.
Под программированием понимают спектр деятельности, связанный с созданием и поддержанием в рабочем состоянии программ — программного обеспечения.
Такая техническая дисциплина называется «программная инженерия».
Сюда входят анализ и постановка задачи, проектирование программы, построение алгоритмов, разработка структур данных, написание текстов программ, отладка и тестирование программы (испытания программы), документирование, настройка (конфигурирование), доработка и сопровождение.
Само же программирование основывается на использовании таких языков программирования, на которых записываются особые инструкции для компьютера.
Множество инструкций, связанных между собой, содержит современное приложение.
Текстовый редактор среды программирования может иметь специфичную функциональность, такую, как индексация имен, отображение документации и т.д.
С помощью текстового редактора программист производит набор и редактирование текста создаваемой программы, который называют исходным кодом, а язык программирования определяет синтаксис и изначальную семантику исходного кода.
В настоящее время используются интегрированные среды разработки, включающие в свой состав также редактор для ввода и редактирования текстов программ, отладчики для поиска и устранения ошибок и другие служебные модули.
Язы́к программи́рования — формальная знаковая система, предназначенная для записи компьютерных программ.
Сам язык программирования определяет набор лексических, синтаксических и семантических правил, также определяющих внешний вид программы и действия, и которые выполнит особый исполнитель (обычно — ЭВМ)  под её управлением.
Со времени создания самых первых программируемых машин наше человечество придумало более восьми тысяч языков программирования.
Каждый год их число увеличивается.
Некоторыми языками умеет пользоваться только небольшое число их собственных разработчиков.
А сами же профессиональные программисты могут владеть даже десятком и более разных языков программирования, как ни странно.
Язык программирования предназначен для написания компьютерных программ.
Они представляют собой набор правил, позволяющих компьютеру выполнить тот или иной вычислительный процесс, организовать управление различными объектами, и т. п.
В чем же состоит отлично одного от другого?
Большинство языков программирования использует специальные конструкции для определения данных процессом вычислений.
Как правило, язык программирования существует в нескольких, но существенно отличающихся видах:.
Какие же общие выводы мы можем сделать?
Это же увлекательное занятие (fun) - программирование!
Как же еще можно проводить целые дни, создавая машины своим воображением, строя их без молотка и гвоздей, не пачкая ничего, заставляя их работать как по магии, и при этом ежемесячно получать зарплату — довольно неплохую?
Вы скажете: программирование — занятие сложное!
Где еще продукты от самых престижных компаний отказывают в обычных условиях использования и Где еще вы найдете так много возмущенных пользователей?
Где же еще инженеры проводят свои все часы и дни в попытках понять, почему то, что должно работать, не работает, как не в программировании быть может?
Будьте готовы к овладению мастерством программирования в его профессиональной форме — инженерии программ.
Выбрав информатику, вы избрали одну из самых интересных и особо развивающихся областей науки и техники.
Пятьдесят лет назад едва ли можно было говорить об информатике как научной отрасли.
Сегодня невозможно представить университет без факультета информатики.
Однако, стоит заметить, что около тысячи книг и журналов появляются в этой области, проводятся тысячи конференций.
Общие доходы в индустрии, называемой "Информационные технологии" (ИТ), измеряются триллионами долларов.
С такой скоростью растущей нет другой отрасли в истории технологи.
Без ПО невозможны были бы межконтинентальные перелеты, и практически не было бы и самих лайнеров (а также и современных автомобилей, быстрых поездов и прочего другого), так как их проектирование требует весьма сложного ПО, называемого CAD (Computer-Aided Design).
Для выдачи зарплаты, какая-либо большая компания должны была бы иметь сотни работников бухгалтерии и других сотрудников, занятых начислением чеков и выписыванием расчетных чеков.
Даже известный нам всем телефон до сих пор висел бы на стене с протянутыми к нему проводами.
Сделав снимок фотоаппаратом, вы не смогли бы увидеть результат.
И, конечно же, Не было бы ни любимых нами игр (и видеоигр), iPods и iPhones, ни Skype, ни GPS.
Даже любой отчет нужно было бы написать вручную и отдать машинистке для перепечатывания, или же вводить самому, а потом править полученный текст долгими часами, повторяя этот процесс до получения желаемого результата.
Неожиданное желание узнать имя капитана-артиллериста в романе "Война и мир" или численность населения Кейптауна, или автора известного высказывания.
Все это требовало бы путешествия в библиотеку.
Теперь же достаточно в окне поиска напечатать несколько слов и мгновенно получить ответ.
Все это - этот список новых возможностей, составляющих всю нашу повседневную жизнь и время, можно продолжить.
В их основе лежат сложные программы.
Все это не получилось само по себе, по какому-либо волшебству палочки.
Программирование  является интеллектуальным занятием, требующим созидательного мышления и опыта, ведь это задача конструирования новых программ.
Этот материал поможет вам войти в мир программ и программирования.
Все больше и больше людей получают знания по основам информатики.
Но профессиональное программирование предполагает совершенно иной уровень мастерства.
Программирование все в большей степени становится занятием лишь для профессионалов, объявленный в середине 1980-х гг. лозунг «Программирование — вторая грамотность» остался в прошлом.
В слова «компьютерная грамотность» на данный момент входит навык использования многообразных средств информационных технологий.
Решая ту или иную информационную задачу, необходимо выбрать адекватное программное средство.
Но ведь может возникнуть вопрос - а что если средства не дают такой возможности?
И уже только в том случае, когда подобные средства не дают возможности решить задачу, следует прибегать к уже описанным выше универсальным языкам программирования.
Считается отличать программистов двух видов: прикладных и системных.
Системные программисты — разработчики базовых программных средств ЭВМ (операционных систем, трансляторов и т.п.).
Они являются профессионалами высочайшего уровня в программировании.
Прикладные программисты разрабатывают средства прикладного программного обеспечения ЭВМ, предназначенные для решения задач из различных областей.
Требования же к самому качеству как прикладных программ, так и системных сегодня уже очень высоки.
Программа умеет не только правильно решать задачу, но и иметь пригодный интерфейс, быть надежной, дружественной по отношению к использователю и т.д.
Конкуренцию на рынке программных продуктов могут выдерживать только такие программы.
Программирование на любительском уровне сегодня никому не нужно, ведь по мере развития компьютерной техники развивались также и методика, и технология программирования.
Сначала возникает командное и операторное программирование, в 1960-х гг. бурно развивается структурное программирование.
Появляются линии логического и функционального программирования, а в последнее время — объектно-ориентированное и визуальное программирование.
Освоение основ структурной методики программирования - задача, которую следует ставить при первоначальном изучении программирования.
Для цели подходящим средством является язык Паскаль.
Автор языка Паскаль — швейцарский профессор Никлаус Вирт — создавал его именно для этого.
Сама структурная методика же остается основой для всей программистской культуры.
Не освоив ее, пользователь, взявшийся изучать искусство программирование, не имеет никаких шансов стать профессиональным программистом.
Реализации в версиях фирмы Borland для IBM, известных под названием Турбо Паскаль, значительно расширили язык.
С версии 5.5 Турбо Паскаль становится языком объектного программирования.
Здесь мы ориентированы на глубокое освоение базовых понятий языков программирования высокого уровня в их реализации на Паскале.
Так что же дает нам изложение основ языка?
Изложение основ языков Си/Си++  опирается на знания и навыки, полученные пользователем при изучении Паскаля.
Все больше и больше людей в наше время хочет научиться программировать, и думаю, никого не надо убеждать, что в наш век информационных технологий, каждому человеку с техническим образованием необходимо знать основы программирования, пусть и на уровне "для чайников".
Конечно, данная статья не претендует на всестороннее описание различных нюансов создания программ.
Но думаю некоторое обобщение "компьютерных хитростей" будет полезно.
Для тех, кто только собрался осваивать программирование, важно начать с усвоения азов программирования для начинающих - в дальнейшем это поможет сэкономить время и силы.
В виде коротких тезисов сформулированы принципы, которые применяются при написании программ, на которых  "китах" лежат современные языки программирования.
Первый и самый основной принцип программирования для чайников - широчайшее использование знаний из различных разделов математики для написания программ.
Но для начала давайте поподробнее рассмотрим историю программирования.
Антикитерский механизм из Древней Греции был калькулятором, использовавшим шестерни различных размеров и конфигурации, обусловливавших его работу.
Впервые, ученый Аль-Джазари соорудил программируемый автомат-гуманоид в 1206 году.
Одна система, задействованная в этих устройствах, использовала зажимы и кулачки, помещённые в деревянный ящик в определённых местах, которые последовательно задействовали рычаги, которые, в свою очередь, управляли ударными инструментами.
Часто первым программируемым устройством принято считать жаккардовый ткацкий станок, построенный в 1804 году Жозефом Мари Жаккаром, предоставив случай программировать узоры на тканях при помощи перфокарт.
Чарльз Бэббидж разработал первое программируемое вычислительное устройство, Аналитическую машиную.
19 июля 1843 года графиня Ада Августа Лавлейс, дочь великого английского поэта Джорджа Байрона, как принято считать, написала первую в истории человечества программу для Аналитической машины.
Эта программа решала уравнение Бернулли, выражающее закон сохранения энергии движущейся жидкости, в своей первой и единственной научной работе Ада Лавлейс рассмотрела большое число вопросов.
Ряд обозначенных ею общих свойств (принцип экономии рабочих ячеек памяти, связь рекуррентных формул с циклическими процессами вычислений) сохранили свое особое значение и для современного программирования.
В материалах Бэббиджа и комментариях Лавлейс намечены такие понятия, как подпрограмма и библиотека подпрограмм, модификация команд и индексный регистр.
Которые стали употребляться только в 1950-х годах.
Однако ни одна из этих самых программ, написанных Адой Лавлейс, никогда так и не была запущена, к сожалению.
Основная работа программистов - написание кода, отладка программ на одном из языков, тестированием.
Исходные тексты и исполняемые файлы программ являются объектами авторского права и являются интеллектуальной собственностью их авторов и правообладателей, отчасти искусство программирования состоит в том, чтобы выбрать язык программирования, наиболее полно подходящий для решения поставленной задачи.
Различные языки программирования поддерживают различные стили программирования.
Различные языки требуют от программиста разного уровня внимания к деталям при написании алгоритма, результатом чего часто бывает компромисс между простотой и производительностью (или между затратой времени программиста и пользователя).
Единственный язык, напрямую выполняемый ЭВМ — это машинный язык (также называемый машинным кодом и языком машинных команд).
Изначально же все программы писались обычно в машинном коде, но сейчас этого практически нигде и никогда уже не делается.
Вместо этого программисты пишут исходный код на том или ином языке программирования, затем, используя компилятор, транслируют его в один или несколько этапов в машинный код, готовый к исполнению на целевом процессоре.
Но это закономерно только для языков программирования высокого уровня.
Если требуется полный низкоуровневый контроль над системой на уровне машинных команд и отдельных ячеек памяти, программы пишут на языке ассемблера, мнемонические инструкции которого преобразуются один к одному в соответствующие инструкции машинного языка целевого процессора ЭВМ.
По этой причине трансляторы с языков ассемблера получаются алгоритмически простейшими трансляторами.
В некоторых языках вместо машинного кода генерируется интерпретируемый двоичный код «виртуальной машины», также называемый байт-кодом (byte-code) - такой подход применяется в Forth, некоторых реализациях Lisp, Java, Perl, Python, языках для .NET Framework.
Можно сказать, что первые языки программирования возникали ещё до появления современных электронных вычислительных машин.
Уже в XIX веке были изобретены устройства, которые можно с долей условности назвать программируемыми — к примеру, механические пианино и ткацкие станки.
Для управления ими использовались наборы инструкций, которые в рамках современной классификации можно считать прототипами предметно-ориентированных языков программирования.
Значимым можно считать «язык», на котором леди Ада Августа графиня Лавлейс написала программу для вычисления чисел Бернулли для Аналитической машины Чарльза Бэббиджа, ставшей бы, в случае реализации, первым компьютером.
А уже в 1930—1940 годах, А. Чёрч, А. Тьюринг, А. Марков в СССР разработали одни из первых так называемые математические абстракции (лямбда-исчисление, машину Тьюринга, нормальные алгоритмы) соответственно — для формализации алгоритмов.
Появились электрические и  цифровые компьютеры и был разработан язык, который можно считать первым высокоуровневым языком программирования для ЭВМ — «Plankalkül», созданный немецким инженером К. Цузе в период с 1943 по 1945 годы, в то же время, в 1940 годы, что и прошлое изобретение.
Программисты ЭВМ начала 1950-х годов, в особенности таких, как UNIVAC и IBM 701, при создании программ пользовались непосредственно машинным кодом, запись программы на котором состояла из единиц и нулей и который принято считать языком программирования первого поколения.
Вскоре на смену такому методу программирования пришло применение языков второго поколения, также ограниченных спецификациями конкретных машин.
Но более простых для использования человеком за счет использования мнемоник (символьных обозначений машинных команд) и возможности сопоставления имен адресам в машинной памяти.
Вышеописанное можно называть современные автокодом и ассемблером.
И все же, при использовании ассемблера становился нужным процесс перевода программы на язык кодов перед её выполнением, для чего были составлены специальные программы.
Сохранялись и проблемы с переносимостью программы с ЭВМ одной архитектуры на другую, и необходимость для программиста при решении задачи мыслить терминами «низкого уровня» — ячейка, адрес, команда.
Позднее уже языки второго поколения были намногоусовершенствованы: в них появилась и известная нам поддержка макрокоманд.
С середины же 1950-х начали появляться первые языки третьего поколения, такие как известнейшие и начальным программистам Фортран, Лисп и Кобол и проч.
Языки программирования этого типа более абстрактны и универсальны, не имеют жесткой зависимости от конкретной аппаратной платформы и используемых на ней команд.
Программа на языке высокого уровня может исполняться на любой ЭВМ, на которой для этого языка имеется транслятор (инструмент, переводящий программу на язык машины, после чего она может быть выполнена процессором).
Обновлённые версии перечисленных языков до сих пор имеют хождение в разработке программного обеспечения.
И каждый из них оказал определенное влияние на последующее развитие языков программирования.
Тогда же, в конце 1950-х годов, появился Алгол, также послуживший основой для ряда дальнейших разработок в этой сфере - необходимо заметить, что на формат и применение ранних языков программирования в значительной степени влияли интерфейсные ограничения[5].
В период 1960-х — 1970-х годов были разработаны основные парадигмы языков программирования, используемые в настоящее время.
Хотя во многих аспектах этот процесс представлял собой лишь улучшение идей и концепций, заложенных ещё в первых языках третьего поколения.
Развитие получили и совершенно новые направления науки.
Развивались также приёмы, направленные на сокращение объёма программ и повышение продуктивности работы программиста и пользователя.
В 1980-е годы - период, называемый временем консолидации.
Сам язык С++ объединил в себе все черты объектно-ориентированного и системного программирования, правительство США стандартизировало, как известно многим, язык Ада, производный от Паскаля и предназначенный для использования в бортовых системах управления военными объектами, в Японии и других странах этого мира осуществлялись значительные инвестиции в изучение и анализирования перспектив так называемых языков пятого поколения, которые включали бы в себя конструкции логического программирования[9].
Здесь нужно задать следующий вопрос: чем же любительское программирование отличается от уровня выше?
Факторы, определяющие высокое программирование от ниже, включают объем, длительность и изменения.
В профессиональной разработке приходится иметь дело с программами, содержащими миллионы строк кода, работающими в течение нескольких лет или десятилетий, подверженными многочисленным изменениям и расширениям в ответ на изменившиеся обстоятельства.
Многие проблемы кажутся незначительными и тривиальными, но они становятся критическими при переходе к профессиональному программированию.
И вот здесь мы выделим основные элементы программирования, его основы для начинабщих.
Первый и самый значимый принцип программирования для начинающих - глубочайшее использование знаний из различных разделов математики для написания программ.
Конечно, досконально разбираться во всех тонкостях высшей математики Вам чаще всего не понадобится, но хотя бы основы алгебры и умение читать математические формулы необходимы.
Нашим ключевым понятием в программировании является переменная - это некое буквенное обозначение для какого-либо числа, которые перекочевали в программирования из математики.
Каждый из Вас когда-то решал на уроках алгебры уравнения или строил график функции: возьмем, например известный всем график прямой:
y = 2x + 1.
И в программировании и в самой нашей с вами известнейшей науке алгебре результат выражения означает одно и тоже: в переменной y будет записано выражение 2x + 1.
А вот определение самого x математик и программист определят по-разному.
Помните чем математические формулы отличаются отличается запрограммированных.
Вторая основная проблема программирования для чайников - чтобы написать программу нужно не только знание математики, но и понимание того, чем отличается запись математической формулы в программировании от таковой в классической алгебре.
Ответ, который надо занести в "Библию программирования для начинающих" - различия практической работы с переменными.
Даже самый начинающий программист знает, что одних математических выражений для написания хоть сколько нибудь серьезной программы недостаточно.
Сам код и программа должны уметь реагировать на внешние условия и адаптироваться, изменять свое поведение в зависимости от них.
Тут приходит на помощь базовая конструкция любого языка программирования: ЕСЛИ - ТО, а уже при необходимости используйте циклы, чтобы повторять программный код нужное число раз.
Ну вот и все основные принципы, а так же краткая историческая справка по основам программирования.
