Как правильно изучать программирование: метод франклина

Языки программирования и их история

Так какой же язык понятен компьютеру, в каком виде следует вносить информацию в его память, чтобы он потом делал то, что мы хотим. Компьютер – это электронное вычислительное устройство. Вычислительное! Он работает с числами, складывает, вычитает, сравнивает. Больше ни с чем. Но как же? Ведь мы привыкли обрабатывать на компьютере не только числовую информацию, также текстовую и графическую. Поэтому нам кажется, что компьютер работает не только с числами. Фокус заключается в том, что любую информацию, в том числе текстовую и графическую можно закодировать числами. Все действия компьютер выполняет над числами. И только когда мы обращаемся к данным, эти числа определенным образом декодируются.

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

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

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

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

Программирование в природе

Если долго наблюдать за окружающим миром, то становится понятно: вся окружающая действительность подчиняется инструкциям с прописанными фундаментальными постоянными. В программировании это — выполнение кода с жестко установленными константами. Мы называем эти алгоритмы законами природы, а константы — фундаментальными физическими постоянными.

Сейчас науке известно из «природного кода»:

  • скорость света в вакууме;
  • гравитационная постоянная;
  • постоянная Планка;
  • элементарный заряд;
  • постоянная Больцмана;
  • и другие.

Пространство-время нашей Вселенной строго подчиняется прописанным алгоритмам и константам. То же относится к биологической жизни. Как показывает сегодня наука, код для управления любым живым организмом указан в его генетической программе — геноме. Большинство этих программ, в том числе геном человека, составлены из молекул ДНК, в которых информация и инструкции записываются цифровым кодом из четырех оснований ДНК (T, C, G, A). Исходный код человека расшифрован и опубликован в открытом доступе.

С точки зрения программиста, ДНК похожа скорее на байт-код для виртуальной машины под названием «ядро клетки». Полная программа человека составляет 3,1 млрд пар оснований. Это примерно3 гигабайта, которые можно сократить до750 мегабайт, если выбросить «мусор» (старые копии генов, результаты неудачных экспериментов и т.д.). Копии программы хранятся в каждой клетке. Поэтому каждая клетка организма теоретически может превратиться в любую другую клетку организма, если получит такую команду (плюрипотентность).

Хотя полноценные изменения ДНК в организме крайне редко происходят в пределах одного поколения, существенные поправки вносятся путем активации или деактивации частей нашего генома без изменения самого кода.

Интересно, что в коде человеческого генома есть даже комментарии (интроны), которые располагаются между участками функционального кода (экзонами). Промежуток ДНК с интронами и экзонами выглядит примерно так:

настоящий код<!— бла бла бла бла —- бла —>настоящий код| | | | | |экзон1 донор* интрон1 ветвь акцептор** экзон 2* начало комментария** окончание комментария

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

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

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

Илон Маск,

американский инженер и предприниматель, который организует колонизацию Марса

Косвенным свидетельством этого является бурный прогресс виртуальной и дополненной реальности. Если экстраполировать такой прогресс на миллионы лет — вывод напрашивается сам собой: через миллион лет игры будут неотличимы от реальности, а значит, вероятность того, что мы живем в одном из таких искусственных миров, созданном более развитой цивилизацией, очень высока, считает Илон Маск.

Примечания

  1. Вирт Н. Алгоритмы + структуры данных = программы. — М.: Мир, 1985;
  2. Вирт Н. Алгоритмы и структуры данных. Новая версия для Оберона + CD. М.: ДМК Пресс, 2010. ISBN 978-5-94074-584-6, 0-13-022005-9
  3. Антонов Е. «Древнегреческий компьютер» оказался древнее, чем считалось // Наука и жизнь. — 2014. — 11 декабря (№ 12).
  4. А.И. Китов. Электронные цифровые машины. — Москва, 1956.
  5. Архангельский А.Я. Программирование на С++Builder 6. — Москва: БИНОМ, 2003. — 1152 с. — ISBN 5-7989-0239-0.
  6. Макки Алекс. Введение .Net 4.0 и Visual Studio 2010 для профессионалов. — Москва: ООО «И.Д. Вильямс», 2010. — 416 с. — ISBN 978-5-8459-1639-6. — ISBN 978-1-43-022455-6.

Для чего нужно программирование

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

Где применяется программирование? С каждым годом оно охватывает всё большие области человеческой деятельности. Человек осваивает программирование автоматов и машин, которые по инструкции делают все, что нам нужно. Ученые научились программировать живые организмы, вирусы. Мы программируем растения, чтобы увеличить урожайность и защитить их от вредителей. Близки к успеху опыты по изменению генома человеческих эмбрионов, чтобы вносить улучшения в людей на стадии зародыша (лечить наследственные заболевания, выбирать мальчиков вместо девочек и т.д.).

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

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

Процесс обучения

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

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

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

Как правильно изучать программирование: метод франклина

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

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

Знания про запас

Большая проблема традиционного обучения в том, что знания получаются в надежде их будущего применения

Поэтому студенту трудно различить, где что-то важное, а где то, что никогда не пригодится

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

Продвинутые ученики, напротив, прямо сейчас ищут и изучают то, что нужно для решения задачи. Они ищут ответы в Интернете, задают вопросы на форумах,  спрашивают на StackOverflow. То есть они активно накапливают знания, которые сразу применяют и получают пользу.

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

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

Функциональное программирование

При­ме­ры язы­ков: Haskell, Lisp, Erlang, Clojure, F#

Смысл функ­ци­о­наль­но­го про­грам­ми­ро­ва­ния в том, что мы зада­ём не после­до­ва­тель­ность нуж­ных нам команд, а опи­сы­ва­ем вза­и­мо­дей­ствие меж­ду ними и под­про­грам­ма­ми. Это похо­же на то, как рабо­та­ют объ­ек­ты в объектно-ориентированном про­грам­ми­ро­ва­нии, толь­ко здесь это реа­ли­зу­ет­ся на уровне всей про­грам­мы.

Напри­мер, в ООП нуж­но задать объ­ек­ты и пра­ви­ла их вза­и­мо­дей­ствия меж­ду собой, но так­же мож­но и напи­сать про­сто код, кото­рый не при­вя­зан к объ­ек­там. Он как бы сто­ит в сто­роне и вли­я­ет на рабо­ту про­грам­мы в целом — отправ­ля­ет одни объ­ек­ты вза­и­мо­дей­ство­вать с дру­ги­ми, обра­ба­ты­ва­ет какие-то резуль­та­ты и так далее.

Функ­ци­о­наль­ное про­грам­ми­ро­ва­ние здесь идёт ещё даль­ше. В нём весь код — это пра­ви­ла рабо­ты с дан­ны­ми. Вы про­сто зада­ё­те нуж­ные пра­ви­ла, а код сам раз­би­ра­ет­ся, как их при­ме­нять.

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

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

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

Функ­ции все­гда воз­вра­ща­ют одно и то же зна­че­ние, если на вход посту­па­ют одни и те же дан­ные. Если в про­шлом при­ме­ре мы отда­ва­ли в функ­цию сум­му в 1000 ₽, а на выхо­де полу­ча­ли скид­ку в зави­си­мо­сти от дня неде­ли, то в функ­ци­о­наль­ном про­грам­ми­ро­ва­нии если функ­ция полу­чит в каче­стве пара­мет­ра 1000 ₽, то она все­гда вер­нёт одну и ту же скид­ку неза­ви­си­мо от дру­гих пере­мен­ных.

Мож­но про­ве­сти ана­ло­гию с мате­ма­ти­кой и сину­са­ми: синус 90 гра­ду­сов все­гда равен еди­ни­це, в какой бы момент мы его ни посчи­та­ли или какие бы углы у нас ещё ни были в зада­че. То же самое и здесь — всё пред­ска­зу­е­мо и зави­сит толь­ко от вход­ных пара­мет­ров.

После­до­ва­тель­ность выпол­не­ния под­про­грамм опре­де­ля­ет сам код и ком­пи­ля­тор, а не про­грам­мист. Каж­дая коман­да — это какое-то пра­ви­ло, поэто­му нет раз­ни­цы, когда мы запи­шем это пра­ви­ло, в нача­ле или в кон­це кода. Глав­ное, что­бы у нас это пра­ви­ло было, а ком­пи­ля­тор сам раз­бе­рёт­ся, в какой момент его при­ме­нять.

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

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

Пишем чат-бота

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

Итак, откроем сайт ideone. Слева будет окошко для кода. Возможно, что по умолчанию там будет выбран другой язык — тогда просто нажмите на его название и выберите C#.

Как правильно изучать программирование: метод франклина
В окошке уже будет написано несколько строчек основы, а свой код мы будем писать под надписью «your code goes here».

Самые первые слова любого программиста — «Привет, мир!» (Hello, World!), поэтому и мы начнём с них. Хотя не совсем: мы позволили себе заменить «мир» на «Скиллбокс» 😉 Чтобы отобразить наше сообщение, используем команду Console.WriteLine (). Свой текст напишем в скобках и не забудем поставить кавычки. Вот так:

Как правильно изучать программирование: метод франклина
Console.WriteLine () — команда для отображения информации.

Чтобы запустить свой код и протестировать, работает ли он, нажмём зелёную кнопку RUN в углу.

Чтобы общаться с нашим будущим чат-ботом, нам надо научить его читать — то есть сделать так, чтобы мы могли задавать информацию, с которой он будет работать. Для этого мы используем команду Console.ReadLine (). Она прочитает текст, который написал пользователь.

Давайте уже напишем начало: пусть чат-бот здоровается, а потом читает наше сообщение:

Прочитать-то он прочитает, но память у бота короткая — надо, чтобы он это сообщение запомнил. Для этого сохраним его в переменную — назовём её, например, text. Вместо Console.ReadLine () напишем вот так:

Console.ReadLine () — команда, читающая сообщение пользователя;var — команда, которая отмечает, что мы создаём новую переменную. После неё мы пишем название переменной.

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

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

Важно! Не забывайте ставить точку с запятой в конце каждой строчки!

Чтобы задать свой input, запустите программу, а потом нажмите кнопку edit слева вверху над кодом.

Как правильно изучать программирование: метод франклина

Снизу откроется окошко с надписью input над ним. То, что вы там напишете, программа использует при следующем запуске.

Как правильно изучать программирование: метод франклина

Сейчас наш чат-бот умеет здороваться и может повторить, что мы ему написали. Давайте научим его реагировать на то, что мы пишем. Для этого нам понадобится конструкция if — она проверяет, соблюдено ли условие, и решает, что делать дальше. На новой строке напишем if и в круглых скобках напишем условие. Пусть в ответ на «Привет» бот отвечает «Здарова!». Мы можем написать вот так:

Для сравнения пишется двойной знак =. Обычный мы используем, если надо сохранить значение в переменную. Не путайте!

У нашего решения есть несколько проблем. Первая: если мы напишем весь свой текст маленькими или большими буквами, программа его не опознает. Что с этим делать? Добавим команду ToLower (), которая заменит все буквы на маленькие, и текст, с которым мы сравниваем сообщение пользователя, тоже перепишем маленькими буквами, вот так:

А что, если мы напишем «Привет, как дела?»? Наш бот никак не отреагирует. Чтобы это исправить, используем функцию Contains (), которая проверит, есть ли нужная строка в нашем вводе.

Можем разнообразить словарный запас нашего бота, добавив ещё условий:

Теперь, если мы напишем «Привет! Как тебя зовут? Как дела?», наш бот напишет ответ на все фразы по очереди.

Важно! Если бы вы писали более сложного «настоящего» бота или другую программу, вы бы не копировали один и тот же код много раз, а использовали файл, базу данных или что-то другое. Когда одна и та же часть повторяется много раз, код неудобно читать и тяжело исправлять

А что, если мы хотим получать не только такие ответы, но и меняющуюся информацию? Например, нам интересно, какой сегодня день. Если бы мы написали сегодняшнюю дату в такую же конструкцию, как выше, то или нам пришлось бы переписывать код каждый день, или наша программа сразу бы устарела. Нам поможет функция DateTime. Спросим у неё, какая сейчас (Now) дата, переведём это в строку нужного формата (ToString («dd.MM.yyyy»)) и всё это сохраним в переменную date. Вот так это выглядит:

И напоследок ещё одна важная тема.

Конструкция if часто идет в паре с else. Else описывает, что сделать в том случае, если условие из if не выполнится.

Используется else после if — но мы уже не пишем условие, а только действие в фигурных скобках. Вот пример этой конструкции:

Теперь, если мы напишем сообщение боту без слова «привет», он обидится и будет ругаться.

Раскраска графа

Дан граф:

Нужно раскрасить его вершины в три цвета (красный-синий-зеленый), так чтобы никакие две соседние вершины не были одинакового цвета, либо сказать, что это невозможно.

Выход:
(картинки взяты отсюда)

Основные конструкции ASP кода мы уже разобрали — пройдемся по остальным элементам: node/1 (node(a). node(b)…) — объявляет множество вершин графа, порядок не важен, edge/2 — объявляет дуги. Такие атомы в ASP (и логическом программировании) называются — фактами, фактически это сокращение от “a :- true.”, а выводится просто из утверждения, которое всегда верны, т.е., атомы задают данные программы.

Принцип «поймать падающую звезду»

На программирование можно смотреть, как на запуск множества «процессов» — как бы принуждение компьютера «делать работу за вас» — и управление этими процессами. В программировании процесс часто выдаёт некий результат. Результатом может быть файл, но может быть и нечто попроще, например строка, или число.

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

Митап JavaScript EVENING

30 сентября в 19:00, Онлайн, Беcплатно

tproger.ru

События и курсы на tproger.ru

Если вы создаёте что-то с помощью процесса, вам надо схватить его, или вы его потеряете. Вот где в игру вступают переменные — как способ «запечатлеть» результаты процесса. Этот принцип сильно помогает понять, что такое программирование, на ранних этапах обучения. И если вы рано его ухватите, то найдёте его очень полезным.

Вопрос изучения

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

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

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

Как правильно изучать программирование: метод франклина

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

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

Из чего состоит программа на C++

Начнём с самой первой строчки:

С помощью языка программирования можно:

  • писать условия;
  • работать с памятью;
  • создавать подпрограммы;
  • работать с классами, структурами и объектами;
  • выполнять базовые математические операции и так далее.

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

Одна из таких библиотек, iostream, позволяет запрашивать пользовательский ввод или выводить что-то в консоли.

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

Вернёмся к коду:

main () — это подпрограмма (функция), с которой начинается выполнение любой программы на C++. Её также называют точкой входа.

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

Настало время понять, как работают команды:

Команда cout говорит компьютеру о том, что нужно вывести определённый текст в консоли. В нашем случае — Hello, World!. Любой текст должен быть в кавычках, иначе компилятор воспримет его как идентификатор, то есть имя команды, функции, переменной и так далее. Поэкспериментируйте с текстом, запустите программу и посмотрите, что изменится.

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

Определите, чем вы хотите заниматься

Все эти споры, какой язык круче, бессмысленны, потому что:

  1. У каждого языка есть свои преимущества и недостатки.
  2. Один язык не может быть хорош для всего.

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

  • Быстро создать сайт — PHP или Python.
  • Создать игру — C++ или C#.
  • Веб-систему для банка — Java, C# или C++.
  • Красивый интерфейс для сайта — HTML, CSS и JavaScript.
  • Приложение для Android — Java или Kotlin.
  • Приложение для iOS или Mac OS — Objective-C или Swift.

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

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

Выбор технологии не определяет успеха игры, сайта, приложения и чего угодно ещё.

А вот основные сильные и слабые стороны популярных языков:

Язык Преимущества Недостатки
С++ • Высокая производительность• Прямой доступ к памяти• Строгая типизация • Высокий порог входа• Низкая скорость разработки
C# • Строгая типизация• Сборка мусора• Кроссплатформенность• Большое количество синтаксического сахара • Ориентированность под Windows• Нет возможности создавать кроссплатформенное GUI
Python • Высокая скорость разработки• Возможность быстро выучить язык• Широкий спектр применения • Слабая типизация• Низкая производительность
JavaScript • Высокая скорость разработки• Возможность быстро выучить язык • Непредсказуемость• Слабая типизация
Java • Кроссплатформенность• Строгая типизация• Сборка мусора • Требуется много времени на запуск приложения• Большой объём повторяющегося кода
PHP • Большое сообщество• Быстрое развитие • Слабая типизация• Небезопасный код

Джоэл Спольски (CEO Stack Overflow) предпочитает C-подобные языки, но всё равно выбирает тот, который лучше справится с конкретной задачей.

Литература

  • Китов А.И. «Электронные цифровые машины» М.:, Издательство «Советское радио», 1956, 276 с.
  • Китов А.И., Криницкий Н.А., Комолов П.Н. «Элементы программирования» (для электронных вычислительных машин). Под редакцией А.И. Китова. Издательство Артиллерийской инженерной академии, М.:, 1956, 286 с.
  • Китов А.И., Криницкий Н.А. «Электронные цифровые машины и программирование» М.:, Издательство «ФИЗМАТГИЗ», 1959 (второе издание в 1961 г.), 572 с.
  • Дейкстра Э. Дисциплина программирования = A discipline of programming. — 1-е изд. — М.: Мир, 1978. — 275 с.
  • Бьярне Страуструп. Программирование: принципы и практика использования C++, исправленное издание = Programming: Principles and Practice Using C++. — М.: Вильямс, 2011. — С. 1248. — ISBN 978-5-8459-1705-8.
  • Александр Степанов, Пол Мак-Джонс. Начала программирования = Elements of Programming. — М.: Вильямс, 2011. — С. 272. — ISBN 978-5-8459-1708-9.
  • Роберт У. Себеста. Основные концепции языков программирования / Пер. с англ. — 5-е изд. — М.: Вильямс, 2001. — 672 с. — ISBN 5-8459-0192-8 (рус.) ISBN 0-201-75295-6 (англ.).
  • Иан Соммервилл. Инженерия программного обеспечения / Пер. с англ. — 6-е издание. — М.: Вильямс, 2002. — 624 с.
  • Иан Грэхем. Объектно-ориентированные методы. Принципы и практика / Пер. с англ. — 3-е изд. — М.: Вильямс, 2004. — 880 с.
  • Дональд Кнут. Искусство программирования. В четырёх томах / Пер. с англ. — М.: Вильямс, 2001 − 2013.

Разобраться в мотивации

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

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

У программистов рутинная и механическая работа, и к этому нужно быть готовым. Правда, некоторые разработчики почему-то обижаются, когда их занятие не ассоциируют с творчеством. Тогда они находят красоту в коде: «О, вот эта реализация очень красивая». Странно это слышать, поскольку реализация либо работает, либо нет, а красота кода — от лукавого.

Приводим два экспертных мнения насчет того, является программирование творчеством или нет. Директор центра по подбору специалистов SymbioWay Даниил Пилипенко полагает, что это зависит от задачи:

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

Языки программирования

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

  • низкого уровня (ассемблер) — работают напрямую с процессорными командами
  • высокого уровня (C++, C#, Java и др.) — больше похожи на обычный язык

Во время разработки программного продукта могут выделяться разные уровни абстракций. То есть по разному представляться объекты реального мира. В зависимости от этого языки программирования принято разбивать на следующие виды:

  • Процедурные — определяют решение задачи шаг за шагом, вся система разбивается на ряд связанных между собой процедур.
  • Объектно-ориентированные — программа разрабатывается как совокупность взаимосвязанных объектов, каждый из которых может порождать множество конкретных реализаций. С точки зрения декомпозиции объекта разработки может быть удобнее;
  • Декларативные — представляют собой языки описания проблемы и ожидаемого результата.