Бесплатные курсы по с++
Содержание:
- Введение
- Какова цена?
- Определите, чем вы хотите заниматься
- «Уроки программирования на языке C++» от Ravesli
- Лицензионное соглашение
- C#
- Синтаксический анализатор / парсер
- «Курс по C# для Unity3D» от AndroidHelper
- Лексический анализатор / лексер
- Среды и компиляторы для программирования на C
- Pascal и Delphi — самые строгие учителя
- Вопросы и ответы
- «C#. Быстрый старт» от GeekBrains
- «Основы C#» от LoftSchool
- Заключение
Введение
Я не эксперт. Когда я начал работу над этим проектом, я понятия не имел, что делаю, и всё еще не имею. Я никогда целенаправленно не изучал принципы создания языка — только прочитал некоторые материалы в Сети и даже в них не нашёл для себя почти ничего полезного.
Тем не менее, я написал абсолютно новый язык. И он работает. Наверное, я что-то делаю правильно.
В этой статье я постараюсь показать, каким образом Pinecone (и другие языки программирования) превращают исходный код в то, что многие считают магией
Также я уделю внимание ситуациям, в которых мне приходилось искать компромиссы, и поясню, почему я принял те решения, которые принял
Текст точно не претендует на звание полноценного руководства по созданию языка программирования, но для любознательных будет хорошей отправной точкой.
Какова цена?
Цену своих курсов я всегда определяю, исходя из той выгоды, которую они несут. Проще всего определить ценность знаний по какой-то специальности — это посмотреть уровень зарплат по ней.
Даже начинающим C#-программистам платят весьма прилично.
А у C#-разработчиков с опытом работы зарплаты вырастают в разы:
И мне трудно сказать, кто из программистов получает хотя бы сопоставимые зарплаты. В голову приходят только Java-программисты. Зарплаты у C#-программистов очень высокие.
Исходя из этих зарплат, я мог бы смело поставить цену на курс в 100 000 рублей. И это было бы сверхвыгодно для Вас. Вложили 100 000 рублей, а уже через год Вы заработаете на полученных знаниях 600-800 тысяч рублей. А через 2-3 года зарплата будет составлять по 2.5 – 3.5 млн рублей ежегодно. Недаром говорят, что самая выгодная инвестиция – это инвестиция в свои знания.
Однако, если я поставлю цену на курс в 100 000 рублей. То, хоть она и была бы оправданной, но за такую сумму курс смогут позволить себе лишь единицы. Более того, среди моих учеников очень много людей, для которых программирование – это просто интересное и полезное хобби. И отдавать 100 000 рублей за хобби для большинства дороговато.
Определите, чем вы хотите заниматься
Все эти споры, какой язык круче, бессмысленны, потому что:
- У каждого языка есть свои преимущества и недостатки.
- Один язык не может быть хорош для всего.
Новички ещё слишком мало знают, чтобы понять, что им нужно от языка. Поэтому выбирать нужно не язык, а то, чем вы хотите заниматься. Многие языки в первую очередь затачиваются под решение определённых проблем или под определённые сферы:
- Быстро создать сайт — 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-подобные языки, но всё равно выбирает тот, который лучше справится с конкретной задачей.
«Уроки программирования на языке C++» от Ravesli
Длительность: 213 уроков плюс дополнительный материал.
Формат обучения: материал для самостоятельного изучения, практические примеры и задачи без обратной связи.
Программа обучения: курс посвящён основам и нюансам языка С++. Он поможет научиться создавать, компилировать и отлаживать программы в популярных средах разработки Visual Studio, Code Blocks, Xcode. Курс подойдёт как новичкам, так и продвинутым программистам, желающим освежить знания и прокачать навыки.
Какие навыки получите:
- Понимание основ языка C++ и программирования в целом.
- Основы разработки ПО.
- Работа с переменными и основными типами данных.
- Применение операторов в C++.
- Перегрузка операторов.
- Работа с переменными.
- Основы ООП.
- Понимание принципов наследования.
- Использование библиотек C++.
- Создание игр на C++.
- Решение типовых проблем, возникающих в процессе программирования на С++.
Плюсы:
- Полезная информация в свободном доступе.
- Качественная подборка материала.
- Каждый урок сопровождается примерами.
- Насыщенная программа для новичков.
- Подборка дополнительных уроков.
Минусы:
Лицензионное соглашение
Все опубликованные ниже материалы могут быть свободно использованы
в некоммерческих целях при условии сохранения авторства.
Без письменного согласия автора ЗАПРЕЩАЕТСЯ:
- 1) публикация материалов в любой форме, в том числе размещение материалов на других Web-сайтах;
- 2) распространение неполных или измененных материалов;
- 3) включение материалов в сборники на любых носителях информации;
- 4) получение коммерческой выгоды от продажи или другого использования материалов.
Использование и скачивание материалов означает, что вы приняли условия этого лицензионного соглашения.
C#
Язык C # — это высокоуровневый абстрактный язык программирования общего назначения. Он был создан в 2001 году, а самая последняя стабильная версия была выпущена в марте 2017 года. C# был создан датским инженером-программистом Андерсом Хейлсбергом и поддерживает множество различных областей программирования.
Многие статьи по сравнению C# или C++ пытаются ответить на вопрос «в чем разница между C# и C++?». С точки зрения производительности двух языков. Язык C++ работает очень похоже на язык C# — оба эти языка программирования лучшие в производительности. C #, однако, предлагает средние уровни производительности.
С другой стороны, в любом обсуждении «C# или C++» важно упомянуть, что эти языки программирования предназначены для совершенно разных задач. Позже мы рассмотрим назначение C++, язык C# предназначен для создания мобильных приложений и в простом программировании
Следует учитывать, что этот язык программирования не имеет тех же требований к производительности, что и его конкуренты.
Еще одна особенность C# (хотя и у C++ есть эта особенность) это то, что он является объектно-ориентированным языком программирования. Совершенно очевидно, что ООП (объектно-ориентированное программирование) языки уже давно являются стандартом — большинство лучших языков кодирования либо частично, либо полностью объектно-ориентированы.
Объектно-ориентированный язык программирования ориентирован на объекты и данные, а не на действия. Проще говоря, это означает, что язык C# является быстрым и эффективным, поскольку он делает упор на объект, не фокусируясь на деталях (что делает язык адаптируемым)
ООП позволяет вам повторно использовать определенные части вашего кода в будущем, что очень важно, когда вы говорите о крупных проектах корпоративного размера
Синтаксический анализатор / парсер
Список токенов проходит через парсер и превращается в дерево.
Следующая стадия — парсер. Он преобразует исходный текст, то есть список токенов (с учётом скобок и порядка операций), в абстрактное синтаксическое дерево, которое позволяет структурно представить правила создаваемого языка. Сам по себе процесс можно назвать простым, но с увеличением количества языковых конструкций он сильно усложняется.
Bison
На этом шаге я также думал использовать стороннюю библиотеку, рассматривая Bison для генерации синтаксического анализатора. Он во многом похож на Flex — пользовательский файл с синтаксическими правилами структурируется с помощью программы на языке C. Но я снова отказался от средств автоматизации.
Преимущества кастомных программ
С лексером моё решение писать и использовать свой код (длиной около 200 строк) было довольно очевидным: я люблю задачки, а эта к тому же относительно тривиальная. С парсером другая история: сейчас длина кода для него — 750 строк, и это уже третья попытка (первые две были просто ужасны).
Тем не менее, я решил делать парсер сам. Вот основные причины:
- минимизация переключения контекста;
- упрощение сборки;
- желание справиться с задачей самостоятельно.
В целесообразности решения меня убедило высказывание Уолтера Брайта (создателя языка D) в одной из его статей:
«Курс по C# для Unity3D» от AndroidHelper
Пройти курс
Длительность: 17 видеозаписей продолжительностью 6-20 минут.
Формат обучения: самостоятельный просмотр уроков без обратной связи.
Программа обучения: курс посвящён основам языка C# для дальнейшей работы в Unity. Спикер расскажет о базовых принципах программирования, а к концу обучения каждый сможет создать простое приложение. Программа рассчитана на новичков.
Чему научитесь:
- Понимание принципов программирования на C#.
- Работа с операторами, циклами, массивами.
- Создание управления игровыми персонажами.
- Создание проектов в среде Unity.
Плюсы:
- Информативные уроки в хорошем качестве.
- Дополнение теории примерами.
- Возможность применять полученные навыки на практике.
- Домашние задания (без проверки).
- Полезные ссылки под каждым уроком.
Минусы:
Лексический анализатор / лексер
Строка исходного кода проходит через лексер и превращается в список токенов.
Первый шаг в большинстве ЯП — это лексический анализ. Говоря по-простому, он представляет собой разбиение текста на токены, то есть единицы языка: переменные, названия функций (идентификаторы), операторы, числа. Таким образом, подав лексеру на вход строку с исходным кодом, мы получим на выходе список всех токенов, которые в ней содержатся.
Обращения к исходному коду уже не будет происходить на следующих этапах, поэтому лексер должен выдать всю необходимую для них информацию.
Flex
При создании языка первым делом я написал лексер. Позже я изучил инструменты, которые могли бы сделать лексический анализ проще и уменьшить количество возникающих багов.
Одним из основных таких инструментов является Flex — генератор лексических анализаторов. Он принимает на вход файл с описанием грамматики языка, а потом создаёт программу на C, которая в свою очередь анализирует строку и выдаёт нужный результат.
Моё решение
Я решил оставить написанный мной анализатор. Особых преимуществ у Flex я в итоге не увидел, а его использование только создало бы дополнительные зависимости, усложняющие процесс сборки. К тому же, мой выбор обеспечивает больше гибкости — например, можно добавить к языку оператор без необходимости редактировать несколько файлов.
Среды и компиляторы для программирования на C
Если вы пользуетесь одним из дистрибутивов GNU/Linux, вам подойдет любой текстовый редактор с подсветкой синтаксиса, также понадобятся GCC и терминал.
Существуют редакторы для программистов, включающие различные дополнения, в том числе терминал, просмотр каталогов и др. Например, Geany или Atom.
C – компилируемый язык программирования. В GNU/Linux для получения исполняемых файлов используется GCC – набор компиляторов, включающий в том числе компилятор для C. Чтобы из исходного файла (обычно таким файлам дают расширение *.с) получить исполняемый, надо выполнить в терминале команду примерно следующего вида:
gcc -o hello hello.c
, где gcc — команда, запускающая программу, выполняющую компиляцию и иные действия; -o – ключ, сообщающий, что мы вручную указываем имя исполняемого файла; hello – имя получаемого исполняемого файла; hello.c – имя файла с исходным кодом. Имя исполняемого файла можно не указывать:
gcc hello.c
В этом случае исполняемый файл будет иметь имя по умолчанию a.out.
Для Windows существует свой набор компиляторов – MinGW. Его можно использовать самостоятельно, однако он входит в состав простой среды разработки Dev-C++, которая может оказаться хорошим выбором для обучения программированию на языках C и С++.
При сохранении выбирайте тип файла «C source files (*.c)». Компиляция и запуск программы выполняется при нажатии клавиши F9. После исполнения программа сразу закрывается и результат невозможно увидеть. Чтобы этого не происходило, прописывают две дополнительные строки: #include <conio.h> и getch(). (Возможно это не актуально для более новой версии Dev-C++.)
«Hello World» в GNU/Linux:
#include <stdio.h> int main () { printf ("Hello World\n"); }
«Hello World» в Windows:
#include <stdio.h> #include <conio.h> int main () { printf ("Hello World\n"); getch(); }
С другой стороны, существует большое количество кроссплатформенных сред разработки. Например, Eclipse + модуль CDT, KDevelop, CLion.
«Hello World» на C
На примере простейшей программы сразу отметим некоторые особенности языка программирования C.
В языке C роль основной ветки программы берет на себя функция main(). Она является точкой входа в программу. Эта функция всегда должна присутствовать в законченной программе на языке C, и исполнение программы начинается именно с нее. Однако объявленные внутри нее переменные не являются глобальными, их область видимости простирается только на main(). Тем не менее в языке программирования C почти весь программный код заключается в функции, и функция main() является главной и обязательной.
По умолчанию функция main() возвращает тип данных int, поэтому можно не указывать тип возвращаемых данных. Однако компилятор в этом случае выносит предупреждение.
Функция printf() предназначена для вывода данных. Ее назначение аналогично функции print() в Python. Однако функция printf() после вывода не выполняет переход на новую строку. Поэтому для перехода используется специальный символ, который обозначается комбинацией \n.
Выражения на языке C разделяются точкой с запятой.
В языке C функции ввода-вывода не являются частью языка. Например, в Python нам не надо импортировать никакой модуль, чтобы пользоваться функциями print() и input(). В C мы не можем просто вызвать функцию printf(), т. к. в самом C ее просто нет. Эту функцию, а также ряд других, можно подключить с помощью заголовочного файла stdio.h. Именно для этого в начале программы прописана строка . Include с английского переводится как «включить», а stdio есть сокращение от «стандартный ввод-вывод (input-output)».
В заголовочных файлах (они оканчиваются на *.h) обычно содержаться объявления тех или иных функций. Объявление — это просто описание функции: какие параметры она принимает и что возвращает. Сам код функции (определение) находится не в заголовочном файле, а в библиотеках (других файлах), которые могут быть уже скомпилированы и расположены в системных каталогах. Перед компиляцией программы запускается препроцессор языка C. Помимо прочего он включает в начало файла программы содержимое указанных в ней заголовочных файлов.
Закомментируйте1 первую строчку кода программы HelloWorld. Попробуйте скомпилировать программу. Удалось ли получить исполняемый файл? Какое предупреждение выдал компилятор?
1 // — однострочный комментарий на языке C; /* … */ — многострочный комментарий на языке C.
Pascal и Delphi — самые строгие учителя
Такое заявление вас может сильно удивить, но не спешите закрывать вкладку со статьей: это рекомендация от практикующего senior-разработчика PHP.
Почему Pascal?
Если мы говорим именно об обучении программированию с самых основ, то начинать нужно на Pascal или Delphi.
Дело в том, что Pascal — это очень структурированный и упорядоченный язык. Он учит правильному программированию. В нем есть отдельная секция для описания переменных. В целом синтаксис языка строгий: например, программист не сможет поставить запятую после последнего элемента массива.
Пример программы на Pascal.
Такие языки, как PHP и Node.js, позволяют разработчику очень много вольностей в процессе написания кода. В результате без необходимых знаний о том, как правильно программировать, вы с большой вероятностью получите «грязный» код со множеством ошибок.
Пример ужасного PHP-кода при условии, что в свойстве active передаются строки ‘true’ и ‘false’:
$len = strlen($r->active);if ($len == 4) {$a = true;} else {$a = false;}if ($a){//do something}
А так выглядит корректный код:
if ($r->active == ‘true’){//do something}
Другой показательный пример, когда метод класса может принимать в качестве единственного параметра объект, массив, число или строку. Новички делают проверку метода на тип параметра и ошибаются. Для нее нужно использовать либо четыре разных метода, либо четыре класса и применить паттерн Strategy.
Pascal учит хорошему тону в разработке. Например тому, что нужно всегда объявлять переменные и правильно их называть. Многие программисты на том же PHP часто грешат тем, что забывают об этом. В итоге значение переменной не присвоено, и без него она используется во всем скрипте — неудивительно, что программа не работает так, как нужно.
Почему Delphi?
Альтернативный вариант строгого учителя программированию — язык Delphi. По эффективности и результату это тот же Pascal, только для ООП: с ним вы поймете SOLID-принципы. Вы не сделаете того, что можете реализовать средствами С или PHP, — но для человека с нулевыми знаниями и отсутствием опыта это преимущество, а не недостаток.
Если новичок решает, с какого языка программирования начать, и выбирает PHP и ему подобные, то его код будет очень «грязным», неаккуратным и трудно читаемым — потому что синтаксис позволяет так писать. И здесь ответственность за чистоту кода ложится на плечи самого разработчика. Поэтому мы и советуем начинать с технологий, которые вы назовете «древними», и будете правы.
Учебные лабораторные работы на Pascal и Delphi создают несколько рафинированное представление о коде и программировании — то есть оторванное от реальности. Ведь вы не занимаетесь техническими задачами в настоящем, работающем проекте. Они не дадут системного подхода и полной картины программирования.
Пример тренировочных заданий по Delphi.
Вместо решения лабораторных без практического применения попробуйте написать простую программу для работы с клиентами: не сайт, а, например, десктопное приложение для учета. Еще варианты: графический или текстовый редактор, браузер, антивирус или любая программа под свои нужды. Это будет хорошей практикой для новичка, желающего самостоятельно обучиться программированию с нуля.
Вопросы и ответы
1. Какое разрешение у видео?
2K (2560×1440)
2. Какова продолжительность курса?
Курс состоит из 90 уроков общей продолжительностью чуть более 16 часов.
3. Актуальная ли информация в курсе?
Этот курс вышел осенью 2020-го года, поэтому, безусловно, да, информация актуальная. А когда она становится уже не совсем актуальной, то курс снимается с продаж и выпускается его новая версия.
4. Выдаётся ли сертификат?
Да, сертификат выдаётся.
5. Можно ли оплатить картой в гривнах/долларах/евро?
Да, можно. При оплате произойдёт автоматическая конвертация по курсу Вашего банка.
6. Карты МИР принимаются?
Да, принимаются.
7. Есть ли упражнения в курсе?
Да, упражнения идут практически к каждому уроку, за исключением нескольких чисто теоретических уроков.
8. Есть ли защита у курса? Можно ли будет его посмотреть на разных компьютерах?
Защита у курса есть. Активировать его можно будет на 3-х различных устройствах.
9. После переустановки операционной системы потребуется ли замена лицензионного ключа?
Нет, не потребуется, так как лицензионный ключ привязывается к «железу» устройства, а не к его операционной системе.
10. Нужен ли доступ в Интернет для просмотра уроков?
Интернет нужен только во время активации, которая проводится лишь единожды. Для последующего использования курса Интернет не обязателен.
11. Можно ли будет посмотреть курс на Mac?
Да, можно будет.
12. Можно ли заказать курс на дисках?
Да, можно. Для этого при оформлении заказа надо указать способ доставки: «По почте»
Однако, обратите внимание, что этот способ дороже, так как требует оплату изготовления бокса, дисков, а также стоимости самой доставки.
13. Нужно ли знание английского языка?
Для успешного прохождения курса точно не нужно
Однако, в будущем для решения каких-то проблем очень часто приходится искать информацию на англоязычных форумах, тут-то он и пригодится. Правда, я знаю, что многие используют онлайн-переводчики, и так же успешно находят ответ на свой вопрос на англоязычных сайтах без знаний английского языка.
14. У меня остались ещё вопросы. Куда мне их написать?
Любые вопросы можете задать в мою службу поддержки: https://support.myrusakov.ru/ask
«C#. Быстрый старт» от GeekBrains
Длительность: 7 уроков.
Формат обучения: видеоуроки с практическими заданиями по теме.
Программа обучения: курс подходит тем, кто интересуется языком C#, хочет узнать его особенности, преимущества и недостатки. Обучение проходит на примере написания простой игры. Для успешного прохождения пригодится минимальный опыт программирования. Также курс будет полезен разработчикам игр на Unity для профессионального развития.
Чему научитесь:
- Понимание основ языка C#.
- Использование функций.
- Написание простых игр.
- Создание графического интерфейса.
Плюсы:
- Можно учиться по индивидуальному удобному графику.
- Записи лекций доступны после трансляции.
- Интересная подача информации.
- Сочетание теории с практикой.
- Компетентный преподаватель.
- Обмен опытом с другими участниками на форуме курса.
- Предусмотрена выдача сертификата.
Минусы:
«Основы C#» от LoftSchool
Длительность: 6 уроков.
Формат курса: самостоятельное изучение темы по предоставленным видеоматериалам.
Программа обучения: рекомендована новичкам с минимальными навыками программирования. На уроках рассматриваются базовые принципы C#.
Что узнаете:
- Типы переменных в C#.
- Концепция ООП.
- Принципы наследования и инкапсуляции.
- Что такое полиморфизм и абстракция.
- Как применять массивы C#.
- Как использовать базовые циклы.
Преимущества:
- Нет установленного срока для прохождения курса.
- Короткие информативные уроки.
- Приведение реальных примеров для понимания теории.
- Возможность понять основы языка за короткий период.
Недостатки:
Заключение
Надеюсь, эта статья окажется кому-нибудь полезной. Я крайне рекомендую хотя бы попробовать написать свой язык, несмотря на то, что придётся разбираться во множестве деталей реализации — это обучающий, развивающий и просто интересный эксперимент.
Вот общие советы от меня (разумеется, довольно субъективные):
- если у вас нет предпочтений и вы сомневаетесь, компилируемый или интерпретируемый писать язык, выбирайте второе. Интерпретируемые языки обычно проще проектировать, собирать и учить;
- с лексерами и парсерами делайте, что хотите. Использование средств автоматизации зависит от вашего желания, опыта и конкретной ситуации;
- если вы не готовы / не хотите тратить время и силы (много времени и сил) на придумывание собственной стратегии разработки ЯП, следуйте цепочке действий, описанной в этой статье. Я вложил в неё много усилий и она работает;
- опять же, если не хватает времени / мотивации / опыта / желания или ещё чего-нибудь для написания классического ЯП, попробуйте написать эзотерический, типа Brainfuck. (Советуем помнить, что если язык написан развлечения ради, это не значит, что писать его — тоже сплошное развлечение. — прим. перев.)
Я делал довольно много ошибок по ходу разработки, но большую часть кода, на которую они могли повлиять, я уже переписал. Язык сейчас неплохо функционирует и будет развиваться (на момент написания статьи его можно было собрать на Linux и с переменным успехом на macOS, но не на Windows).
О том, что ввязался в историю с созданием Pinecone, ни в коем случае не жалею — это отличный эксперимент, и он только начался.
Перевод статьи: «I wrote a programming language. Here’s how you can, too»