С# для новичков: развеиваем мифы и пишем простого чат-бота
Содержание:
- Содержание
- Обузданная мощь
- Другие обучающие программы
- Среда разработки (IDE)
- “Hello, World” на C#
- Машинный язык
- Давайте посмотрим на код C++!
- 1.1. Решение задачи
- Что такое С ++?
- А можно еще проще?
- Обучение углублённым темам
- Как я изучаю C ++?
- C++ в Яндексе
- Javascript
- Определите, чем вы хотите заниматься
- 1.5. Первый взгляд на ввод/вывод
Содержание
Курс состоит из 6 разделов
Введение
В данном разделе Вы узнаете:
Как наиболее эффективно проходить курс?
Как работает язык C++ изнутри? Это очень важно понимать, поскольку такие базовые знания отличают дилетанта от профессионала.
В какой среде разработки лучше писать код на C++? Как её скачать, установить (особенно важно, какие компоненты необходимы) и как настроить?
После просмотра данного раздела Вы уже будете знать, что это за язык, как он работает, а также у Вас уже будет всё готово для написания свои первых программ на C++.
Основы программирования на C++
В этом разделе Вы узнаете:
- Как пишутся программы на C++?
- Как правильно использовать комментарии?
- Что такое переменные, как они создаются и используются?
- Какие типы переменных есть в C++ и чем они отличаются друг от друга?
- Что такое константы и как с ними работать?
- Какие арифметические, логические и побитовые операции есть в C++ и как их использовать?
- Как работать с консолью?
- Как решить проблемы с кодировкой в консоли (не только на вывод, но и на ввод)?
- Что такое условный оператор и как он работает?
- Что такое оператор switch-case и когда его использовать?
- Что такое циклы и какие они есть в C++?
- Что такое цикл for, while и do-while и какая между ними разница?
- Что такое массивы, какие они бывают и, как и когда их использовать?
- Как работать с многомерными массивами?
- Что такое ссылки и для чего они нужны?
- Как создавать функции, как они работают изнутри, как они взаимодействуют со ссылками и многое-многое другое?
- Что такое область видимости переменных?
- Что такое статические переменные
- Что такое пространства имён, для чего нужны и как применяются?
- Что такое макросы?
- Как правильно разбивать код на разные файлы?
- Как собрать проект?
После прохождения этого раздела Вы уже сможете писать несложные программы на языке C++.
Работа с указателями
Указатели – это неотъемлемая часть языка C++. Мне трудно представить серьёзный и грамотно написанный проект, где не использовались бы указатели. Поэтому работать с ними надо уметь обязательно, и как раз в этом разделе этим мы и займёмся.
Посмотрев данный раздел, Вы узнаете:
- Что такое указатели и чем они отличаются от ссылок?
- Как взаимодействуют между собой указатели и массивы?
- Как работают константы и указатели вместе?
- Как работать с массивами в параметрах функций?
- Что такое указатель на функцию, а также как и когда его использовать?
- Что такое динамические объекты?
- Как не допустить утечку памяти?
Объектно-ориентированное программирование
Объектно-ориентированное программирование (ООП) – это самая популярная методика программирования, без которой немыслимо подавляющее большинство проектов не то, что средних и крупных, а даже маленьких. И сам язык C++, если ООП не использовать, становится бессмысленным (уж лучше тогда язык C использовать). Поэтому ООП надо обязательно знать любому, кто работает с C++. И как раз в этом разделе Вы и освоите ООП.
В этом разделе Вы узнаете:
- Что такое объектно-ориентированное программирование и какие парадигмы в нём есть?
- Как создаётся класс в C++?
- Что такое конструкторы и деструкторы?
- Что такое методы (функции класса) и их перегрузка?
- Как правильно использовать .h и .cpp файлы?
- Что такое модификаторы доступа и как правильно их применять?
- Что такое дружественные функции и классы?
- Что такое статические поля и методы?
- Что такое перечисления?
- Что такое структуры?
- Что такое наследование и как его использовать в C++?
- Что такое виртуальные методы?
- Как делать перегрузку операторов?
- Что такое абстрактные классы и методы?
- Что такое шаблоны и как они используются?
После просмотра данного раздела Вы сможете создавать относительно сложные проекты с любой по сложности иерархией классов.
Обработка исключений
В этом разделе Вы узнаете:
- Что такое исключения и почему они так важны?
- Как обрабатываются исключения в C++?
- Как генерировать исключения?
- Как обрабатывать много исключений?
- Как создавать свои собственные исключения?
Просмотрев этот раздел, Вы сможете грамотно обрабатывать самые различные исключительные ситуации, как в чужих библиотеках, так и при написании собственных.
Обузданная мощь
В плюсах, как и в других компилируемых низкоуровневых языках, есть статическая типизация кода, которой нет в Python. Благодаря ей вы можете чётко и ясно объявить, что такой-то объект имеет вот такой тип данных, что вот эта штука — число. И всё, после этого оно не станет, скажем, строкой. И это даёт возможность компилятору генерировать более эффективный код.
Программы на C++ быстрее благодаря более чёткой типизации
Программируя на C++, вы на самом деле чувствуете мощь — у вас куча возможностей. Как говорили в таких случаях Питеру Паркеру: «С большой силой приходит большая ответственность», что, кстати, тоже является хорошим стимулом для обучения.
Если вам интересно создавать эффективный код и в процессе перелопачивать огромные объёмы данных, то дополнительным челленджем в C++ станет не просто написать быстрый код, но написать его так, чтобы он был понятен остальным. Люди же будут его использовать, поддерживать и масштабировать — это не вещь в себе, это инструмент. Хороший, работающий и ремонтопригодный.
Ведь как только вы напишете одну хорошую и эффективную программу, вам наверняка захочется начать писать много таких же классных программ. Так, например, в Яндексе мы сейчас пишем множество самых разных сервисов на плюсах. Поэтому вопрос про поддержку отнюдь не праздный.
К счастью, у C++ за всё время накопилось множество хороших практик того, как писать понятный и поддерживаемый код. И это тоже интересный момент в плане обучения: задача усложняется, потому что у вас в руках уже не просто язык посложнее, но при этом и огромный набор инструментов, чтобы на нём хорошо писать
Этому тоже важно учить
Другие обучающие программы
Для полноты картины рассмотрим еще пару-тройку предложений от онлайн-школ. У некоторых из них есть свои плюсы, например, доступная цена, выдача сертификатов или выход с преподавателем в прямой эфир.
Основы программирования на C++. Уровень 1 – Level Up
Основы программирования на C++. Уровень 1 – это онлайн-курс, который длится 3 месяца и включает в себя 48 академических часов обучения. Предназначен для людей, не знакомых с основами веб-разработки и не знающих ни одного языка программирования.
Программы курса будет достаточно для старта в сфере веб-разработки.
Что изучают студенты:
- Code review;
- Unit-тестирование;
- Git;
- установку IDE;
- операторов;
- типы данных;
- циклы;
- рекурсию;
- массивы;
- препроцессоры и макросы;
- make-файлы;
- переменные;
- алгоритмизацию;
- структуры данных;
- ООП;
- спецификаторы доступа;
- конструкторы и деструкторы;
- move-семантику.
Стоимость – 15 500 руб.
Программирование на C# – от новичка до специалиста – beONmax
Курс Программирование на C# – от новичка до специалиста направлен на ознакомление студентов со C#, платформой .NET и объектно-ориентированным программированием.
Студентам необходимо пройти более 100 онлайн-уроков и выполнить около 120 заданий. Всего на обучение тратится примерно 22 часа. Уделяя занятиям по 2–3 часа в день, можно пройти весь курс дней за 10. Ученикам, которые успешно освоили программу, выдается сертификат.
В программе:
- строение платформы .NET;
- типы данных в C#;
- массивы и коллекции;
- ООП в C#;
- написание веб-программ и гейм-разработка;
- основные фреймворки;
- подбор среды разработки;
- литералы;
- работа со строками;
- циклы;
- модификаторы;
- конструкторы;
- константы;
- полиморфизм;
- работа с файлами;
- делегаты.
Для прохождения программы необходимо оформить подписку. Ее стоимость на 1 месяц – 7,8 $, на полгода – 11,8 $, на год – 15,8 $.
Gamecode – XYZ School
Обучение по программе Gamecode длится 5 месяцев. Авторы предлагают свой курс всем, кто любит программирование и видеоигры. Хотите создать собственного персонажа, прописать код, чтобы он двигался так, как вам нужно, и добавить различные элементы окружения? Тогда эта онлайн-программа для вас.
Один раз в 2 недели преподаватели выходят на связь в прямом эфире, где им можно задать вопросы.
В программе обучения:
- настройка окружения;
- установка UE4;
- установка Visual Studio C++;
- конфигурации билдов;
- внесение изменений в код;
- сборка и упаковка игры;
- создание персонажа на C++;
- анимация персонажа;
- оружие и атака;
- визуальные эффекты;
- искусственный интеллект NPC;
- навигация;
- интерактивные объекты;
- триггеры;
- стриминг уровней;
- профилирование и оптимизация в UE4.
Стоимость обучения узнавайте на сайте. Для этого нужно оставить заявку, указав в специальном поле номер телефона и адрес электронной почты.
Среда разработки (IDE)
Средство разработки, которое включает в себя мощный редактор кода и набор инструментов для работы с проектом, его сборки и т.п. называется IDE. На данный момент существует несколько IDE, в которых есть все необходимое для того чтобы начать путь разработчика на C#, далее будут рассмотрены процессы установки Microsoft Visual Studio, VS Code, JetBrains Rider на ОС Windows.
Microsoft Visual Studio
Если ваша основная ОС это Windows, то одним из самых мощных и удобных средств для разработки приложений под эту платформу является Visual Studio. Это полнофункциональная среда позволяет разрабатывать все типы приложений под Windows, Android, iOS, Linux, веб-сервисы и облачные приложения, поддерживает как .NET Framework так и .NET Core. На момент написания статьи самая актуальная версия этого продукта – это Visual Studio 2019, она имеет ряд лицензий – Community, Professional, Enterprise. Для начинающего разработчика Community варианта будет более чем достаточно, эта лицензия позволяет разрабатывать даже коммерческое ПО, но у нее есть некоторые ограничения, более подробная информация по этому вопросу есть на официальном сайте Microsoft.
Сохраните файл установки на компьютере. Это веб-установщик, поэтому он имеет небольшой размер. Запустите его, в результате вам будет представлено окно приветствия.
Нажмите на кнопку “Продолжить” дождитесь окончания подготовительного этапа. После этого откроется окно с настройкой компонентов, для выполнения всех работ по курсу достаточно выбрать “Разработка классических приложений .NET”, “ASP.NET и Разработка веб-приложений”.
Дождитесь окончания установки, это может занять продолжительное время в зависимости от мощности вашего компьютера и скорости доступа в интернет.
Microsoft VS Code
Еще один продукт от Microsoft, он позиционируется как легковесный редактор кода, включает в себя отладчик, инструменты для работы с Git, подсветку синтаксиса, IntelliSense, средства для рефакторинга и многое другое. VS Code предоставляет большое количество настроек визуального оформления редактора.
Для его установки перейдите по ссылке https://code.visualstudio.com/?wt.mc_id=vscom_downloads.
Нажмите на кнопку “Download for Windows” и сохраните дистрибутив на свой компьютер.
Запустите скачанный файл. Нажмите “Далее” в окне с лицензионным соглашением.
В следующем окне оставьте все галочки без изменений и нажмите “Далее”.
В последнем окне нажмите кнопку “Установить” и дождитесь окончания установки.
Установка завершена.
JetBrains Rider
Нажмите кнопку “Скачать”, дождитесь загрузки дистрибутива и запустите его.
Нажмите “Next” и выберите место установки. На следующем экране можно произвести дополнительные настройки ассоциации файлов или оставить все как есть, после этого нажмите кнопку “Next”, а затем “Install”.
Дождитесь окончания установки.
Онлайн интерпретаторы
Если вы хотите быстро проверить работу вашего кода, то лучше всего для этого подойдет онлайн интерпретатор C#. Далее приведены несколько проектов, которые можно использовать для этой цели:
“Hello, World” на C#
Создание проекта в Microsoft Visual Studio (Windows)
Создадим первый проект на языке C# для Windows. Для этого запустите Visual Studio, при первом запуске появится окно “Добро пожаловать”.
Снимите галочку “Проверка подлинности …”, если у вас есть Microsoft-аккаунт, то нажмите на кнопку “Войти”, если нет, то на надпись “Не сейчас, возможно позже”.
Далее выберите тему по вкусу и нажмите “Запуск Visual Studio”.
Все подготовительные шаги пройдены, нажмите на кнопку “Создание проекта”.
Выберете шаблон “Консольное приложение” и нажмите “Далее”.
Укажите имя проекта, например “MyFirstProject” и место где он будет сохранен.
В результате будет открыто окно Visual Studio с созданным проектом.
Проект в Visual Studio представляет собой набор файлов, их структура представлена в окне “Обозреватель решения”. Основной файл, который нас сейчас интересует это Program.cs. Откройте его, мы добавили поясняющие комментарии в код модуля:
using System; // Подключаем библиотеку System // Пространство имен, с классом Program namespace MyFirstProject { // Объявление класса Program class Program { // Точка входа. Метод, который будет запущен первым при старте приложения static void Main(string[] args) { // Вывод текста "Hello World!" в консоль Console.WriteLine("Hello World!"); } } }
Запустим наше приложение и посмотрим, что произойдет.
Для этого можно использовать несколько способов:
- На панели вверху нажать кнопку с изображением зеленого треугольника. Название у кнопки будет такое же как у вашего “решения”.
- Нажать сочетание клавиш Ctrl + F5, запустится “решение” без отладки, либо F5 для режима отладки.
- Через панель меню: Отладка -> “Запуск без отладки”
Запустите приложение любым вышеописанным способом, в результате появится консоль, в которой будет выведено сообщение “Hello World!“.
Процесс запуска приложения “под капотом” достаточно сложен, он включает в себя создание ряда каталогов, компиляцию проекта в сборку (файл с расширением .exe) и непосредственно запуск получившегося файла. Результат сборки вы можете найти в папке <Папка проекта>\bin\Debug – если выбран режим сборки Debug, либо в <Папка проекта>\bin\Release – если выбран Release. Режим по умолчанию – это Debug.
Создание проекта с использованием средств .NET Core (Windows и Linux)
В этом разделе мы познакомимся с консольным инструментом .NET Core для создания, сборки и запуска проектов. Приведенный подход работает в Windows и Linux. Перейдите в каталог, в котором вы хотите работать с вашим проектом. Откройте консоль (если вы работаете в Windows, то нажмите сочетание клавиш Win+R и введите cmd), и с помощью команды cd перейдите в папку с проектом:
> cd c:\MyFirstProject
Для создания проекта в .NET Core используется команда dotnet new, после которой указывается тип проекта. Так как мы будем работать с консольным приложением, то нужно указать тип console
> dotnet new console
После выполнения команды в папке с проектом будет размещен необходимый набор файлов. Для запуска проекта воспользуйтесь командой:
> dotnet run
Как и в случае с проектом в Visual Studio, в консоли будет выведен текст “Hello World!”.
Поработаем над кодом программы: вместо текста выведем текущую дату. Для этого в файле Program.cs замените строку
Console.WriteLine(“Hello World!”);
на
Console.WriteLine(DateTime.Now);
Сохраните файл и выполните команду:
> dotnet run
Вместо текста в консоли должна появиться текущая дата.
Компиляция файла с исходным кодом вручную (Windows)
Познакомимся с компилятором C#, из .NET Framework (только для Windows). Создайте пустой каталог, а в нем файл Program.cs. Откройте его текстовым редактором и внесите туда следующий код:
using System; namespace FirstApp { class Program { static void Main(string[] args) { Console.WriteLine(DateTime.Now); } } }
В меню “Пуск” найдите и откройте “Developer Command Prompt for VS 2019”, перейдите в каталог с файлом и выполните в нем команду:
> csc.exe Program.cs
Если компиляция прошла успешно, то должен появиться файл Program.exe. Запустите его для этого введите в терминале:
> Program.exe
В результате должны быть выведены текущие дата и время.
Машинный язык
Процессор компьютера не способен понимать напрямую языки программирования, такие как C++, Java, Python и т.д. Очень ограниченный набор инструкций, которые изначально понимает процессор, называется машинным кодом (или «машинным языком»). То, как эти инструкции организованы, выходит за рамки данного введения, но стоит отметить две вещи.
Во-первых, каждая команда (инструкция) состоит только из определенной последовательности (набора) цифр: и . Эти числа называются битами (сокр. от «binary digit») или двоичным кодом.
Например, одна команда машинного кода архитектуры ×86 выглядит следующим образом:
Во-вторых, каждый набор бит переводится процессором в инструкции для выполнения определенного задания (например, сравнить два числа или переместить число в определенную ячейку памяти). Разные типы процессоров обычно имеют разные наборы инструкций, поэтому инструкции, которые будут работать на процессорах Intel (используются в персональных компьютерах), с большей долей вероятности, не будут работать на процессорах Xenon (используются в игровых приставках Xbox). Раньше, когда компьютеры только начинали массово распространяться, программисты должны были писать программы непосредственно на машинном языке, что было очень неудобно, сложно и занимало намного больше времени, чем сейчас.
Давайте посмотрим на код C++!
Глядя на приведенный ниже код, вам может быть интересно, что все это такое и что это значит. Добро пожаловать в синтаксис C++.
Что такое синтаксис? Синтаксис подобен грамматике языка программирования. Это основная основа всего, что вы будете писать на C++.
Это правила, которые определяют, как вы пишете и понимаете код C++. Давайте посмотрим на пример кода, чтобы познакомиться с синтаксисом.
#include <iostream> //header file library using namespace std; //using standard library int main() { //main function cout << "Hello World \n"; // first object cout << "Learn C++ \n\n"; //second object with blank line cout << "Educative Team"; //third object return 0; //no other output or return } //end of code to exectute
Объяснение синтаксиса
— это библиотека заголовочного файла. Заголовочный файл импортирует функции в вашу программу. По сути, мы просим программу скопировать содержимое из файла с именем . Это означает поток ввода и вывода , и он определяет стандарты для объектов в нашем коде.
означает, что мы используем имена объектов и переменных из стандартной библиотеки ( std). Этот оператор часто сокращается с помощью ключевого слова и оператора . используются для определения основной функции.
Это очень важная часть программ на C++. Функция по существу определяет действие для вашего кода. Все, что находится в фигурных скобках , будет выполнено.
это объект (произносится «видеть»). В этом примере он определяет наши выходные данные: строки слов. Мы пишем новый объект, используя во второй строке. Символ заставляет текст исполняться в другой строке.
Включение двух создает пустое пространство. Выражением мы сообщаем программе, что ничего не вернется. Мы выводим только строки текста
Обратите внимание, что мы используем оператор для именования наших объектов. Точка с запятой функционирует как точка
1.1. Решение задачи
Программы обычно пишутся для того, чтобы решить какую-то конкретную задачу.
Например, книжный магазин ведет запись проданных книг. Регистрируется название
книги и издательство, причем запись идет в том порядке, в каком книги продаются.
Каждые две недели владелец магазина вручную подсчитывает количество проданных
книг с одинаковым названием и количество проданных книг от каждого издателя.
Этот список сортируется по издателям и используется для составления последующего
заказа книг. Нас попросили написать программу для автоматизации этой деятельности.
Один из методов решения большой задачи состоит в разбиении ее на ряд задач поменьше.
В идеале, с маленькими задачами легче справиться, а вместе они помогают одолеть
большую. Если подзадачи все еще слишком сложны, мы, в свою очередь, разобьем
их на еще меньшие, пока каждая из подзадач не будет решена. Такую стратегию
называют пошаговой детализацией или принципом «разделяй и властвуй».
Задача книжного магазина делится на четыре подзадачи:
Прочитать файл с записями о продажах.
Подсчитать количество продаж по названиям и по издателям.
Отсортировать записи по издателям.
Вывести результаты.
Решения для подзадач 1, 2 и 4 известны, их не нужно делить на более мелкие подзадачи.
А вот третья подзадача все еще слишком сложна. Будем дробить ее дальше.
3a. Отсортировать записи по издателям.
3b. Для каждого издателя отсортировать записи по названиям.
3c. Сравнить соседние записи в группе каждого издателя. Для каждой одинаковой
пары увеличить счетчик для первой записи и удалить вторую.
Эти подзадачи решаются легко. Теперь мы знаем, как решить исходную, большую
задачу. Более того, мы видим, что первоначальный список подзадач был не совсем
правильным. Правильная последовательность действий такова:
Прочитать файл с записями о продажах.
Отсортировать этот файл: сначала по издателям, внутри каждого издателя — по
названиям.
Удалить повторяющиеся названия, наращивая счетчик.
Вывести результат в новый файл.
Результирующая последовательность действий называется алгоритмом. Следующий
шаг — перевести наш алгоритм на некоторый язык программирования, в нашем случае
— на С++.
Что такое С ++?
C ++ – это язык программирования общего назначения, основанный на основах C, одного из наиболее широко используемых языков программирования всех времен. С годами язык C постепенно заменялся современными усовершенствованиями языка, такими как C ++ и C #.
C ++ был впервые изобретен в 1985 году Бьярном Страуструпом, который хотел получить более быструю и мощную версию языка программирования C (созданную в 1972 году). Хотя он содержит большую часть синтаксиса C, в C ++ добавлены новые функции, такие как классы, что делает его способным к объектно-ориентированному программированию.
В языке программирования C «++» увеличивает значение числовой переменной (т. Е. 1 станет 2). Бьярне добавил это к названию C ++, чтобы сообщить, что этот новый язык является более продвинутой, развитой версией C.
В настоящее время C ++ занимает место своего предшественника как один из самых популярных языков программирования сегодня.
А можно еще проще?
- фронтенд — всё, что браузер выводит на экран: контент, дизайн элементов, набор цветов и анимаций, реакции на действия пользователя. Нередко это направление выбирают те, кому нравится дизайн;
- бэкенд — всё, что работает на стороне сервера: функции сайта, обработка запросов пользователей и работа с базами данных. Направление, как правило, выбирают те, кому дизайн и графика не близки.
Другое явное преимущество веб-разработки — оно востребовано всегда. Скажем, захотел сайт-каталог расшириться и добавить онлайн-торговлю — вот и вакансия для бэкенд-разработчика на фриланс-бирже. Или надумала фирма обновить свой дизайн — начинаются поиски фронтенд-разработчика. Регулярно нужно делать и новые сайты, что будет по силам со знаниями фулстек-разработчика.
Кто-то может возразить, мол, веб-технологии динамично развиваются, ежегодно появляются «технологии завтрашнего дня», быстро замещающие актуальные. И не получится ли так, что учишься год-два, а когда выходишь на рынок, это направление устарело и надо учиться заново?
Обучение углублённым темам
В плюсах есть множество тем, в которых можно дополнительно попрактиковаться и расширить свои возможности. Например, динамический полиморфизм. Это когда мы пытаемся отчасти приблизиться к Python и заявить: этот объект имеет не совсем фиксированный тип и может быть то числом, то строкой. Но всё это происходит под вашим контролем! И потому всё ещё максимально эффективно для вашей задачи.
С другой стороны, есть полиморфизм статический — механизм, благодаря которому можно писать универсальный код, работающий для разных типов данных. Он выполняется так же эффективно, как код, заточенный под конкретный тип, и всё ещё легко читается. В общем, если вы что-то слышали про метапрограммирование — это оно. А самое приятное, что язык развивается и всё больше упрощает подобные сложные задачи.
И подобных примеров достаточно — они ограничены лишь любознательностью и готовностью изучать новое в, казалось бы, привычном языке.
Как я изучаю C ++?
C ++ известен как довольно сложный и трудный для изучения язык. По этой причине многие программисты предпочитают изучать HTML, CSS и язык программирования, такой как JavaScript. Таким образом, они могут начать свою карьеру в области веб-разработки и изучать C ++, пока они уже зарабатывают деньги и получают опыт программирования.
Если вы хотите принять участие в изучении C ++, вам нужно сделать несколько шагов:
Первым шагом является зачисление в программу информатики в вашем местном университете. Как низкоуровневый язык программирования, вы должны знать большинство основных концепций компьютерного программирования, прежде чем запускать C ++.
Однако вам также придется проводить много времени вне классной комнаты, поскольку программа по компьютерным наукам чаще всего направлена на обучение вас концепциям, а не навыкам.
Поэтому вторым шагом к изучению C ++ является поиск хороших печатных и цифровых ресурсов, которые вы можете изучать в свободное время. Существует множество книг и руководств, которые могут научить вас программировать на C ++, а также онлайн-классы и учебные пособия. Поскольку C ++ существует уже очень давно, вы можете даже найти несколько хороших книг по программированию на C ++ в своей локальной библиотеке.
Третий шаг – поиск онлайн-сообществ, форумов и досок объявлений, где вы можете получить помощь от более опытных программистов на C ++. Продолжайте практиковаться и спрашивать сообщество, когда вы застряли и не можете сами найти решение. На таких сайтах, как Cplusplus.com, есть форумы, на которых пользователи активно обсуждают смежные темы и отвечают на вопросы.
C++ в Яндексе
А теперь расскажу, как C++ пригождается нам внутри компании. На нём хорошо писать сервисы, которые критичны с точки зрения нагрузки и скорости ответа. Сейчас я руковожу отделом разработки баннерной системы. Это сервис, отдающий рекламу на конкретный запрос конкретному пользователю. Рекламу мы показываем и на поиске Яндекса, и на других сайтах — соответственно, трафика через нас проходит огромное количество. Бо́льшую часть прибыли Яндексу приносит именно реклама. Это важный сервис, и он написан на C++.
К рекламному движку, как мы его называем, предъявляются жёсткие требования по нагрузке: за секунду нужно обрабатывать сотни тысяч запросов, и делать это нужно за десятки–сотни миллисекунд. Спроектировать и поддерживать такой сервис довольно тяжело. И современный C++ нам в этом помогает.
Известный всем поиск Яндекса сталкивается с похожими проблемами. Он тоже написан на плюсах, и наши команды активно обмениваются опытом разработки и проектирования высоконагруженных сервисов. Или взять, например, браузер: он должен быть эффективным и не замедлять систему пользователю, который установит его на свой компьютер и откроет пару сотен вкладок. Тоже C++, и тоже челленджи.
Javascript
Вот уже несколько лет подряд Javascript занимает лидирующую позицию в рейтингах самых используемых языков программирования. И не зря. Эта технология прекрасно подходит для разработки десктопных, веб- и мобильных приложений. Да-да, хоть большинство мобильных приложений заточены под Android, где господствует Java, но JS, благодаря своим гибким библиотекам, может с ней посоревноваться.
Javascript — универсальный язык программирования, который используется во front-end и back-end разработке.
Front-end — клиентская сторона вопроса. Проще говоря, фронтенд — это разработка интерфейса, мобильная, отзывчивая и адаптивная верстка, работа с графикой и мультимедиа в браузере.
Чтобы работать с Javascript на фронтенде, нужно качественно изучить библиотеки React.js. и Angular.js. Без этих гибких инструментов во frontend делать нечего.
Back-end — все, что работает на сервере, то есть «не в браузере» или «на компьютере, подсоединенном к сети (обычно к Интернету), который отвечает на сообщения от других компьютеров».
В бэкенде кровь из носа нужен Node.js.
Еще один безусловный плюс JS — его мультипарадигменность. Это значит, что его не нужно компилировать под платформу, на которой ведется разработка. Не нужно подгонять костюмчик, он и так хорошо сидит.
Обобщая информацию о Javascript, делаем вывод, что этот язык программирования заслуживает того, чтобы быть первым. Даже если вы еще не определились, что хотите разрабатывать (десктопные, веб- или мобильные приложения), смело приступайте к изучению. Понимание, куда двигаться дальше, придет немного позже.
Кстати! Для наших читателей сейчас действует скидка 10% на любой вид работы
Определите, чем вы хотите заниматься
Все эти споры, какой язык круче, бессмысленны, потому что:
- У каждого языка есть свои преимущества и недостатки.
- Один язык не может быть хорош для всего.
Новички ещё слишком мало знают, чтобы понять, что им нужно от языка. Поэтому выбирать нужно не язык, а то, чем вы хотите заниматься. Многие языки в первую очередь затачиваются под решение определённых проблем или под определённые сферы:
- Быстро создать сайт — 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-подобные языки, но всё равно выбирает тот, который лучше справится с конкретной задачей.
1.5. Первый взгляд на ввод/вывод
Частью стандартной библиотеки С++ является библиотека iostream, которая реализована
как иерархия классов и обеспечивает базовые возможности ввода/вывода.
Ввод с терминала, называемый стандартным вводом, “привязан” к предопределенному
объекту cin. Вывод на терминал, или стандартный вывод, привязан к объекту cout.
Третий предопределенный объект, cerr, представляет собой стандартный вывод для
ошибок. Обычно он используется для вывода сообщений об ошибках и предупреждений.
Для использования библиотеки ввода/вывода необходимо включить соответствующий
заголовочный файл:
#include <iostream>
Чтобы значение поступило в стандартный вывод или в стандартный вывод для ошибок
используется оператор <<:
int v1, v2; // ... cout << "сумма v1 и v2 = "; cout << v1 + v2; cout << "\n";
Последовательность «\n» представляет собой символ перехода на новую
строку. Вместо «\n» мы можем использовать предопределенный манипулятор
endl.
cout << endl;
Манипулятор endl не просто выводит данные (символ перехода на новую строку),
но и производит сброс буфера вывода. (Предопределенные манипуляторы рассматриваются
в главе 20.) Операторы вывода можно сцеплять. Так, три строки в предыдущем примере
заменяются одной:
cout << "сумма v1 и v2 = " << v1 + v2 << "\n";
Для чтения значения из стандартного ввода применяется оператор ввода (>>):
string file_name; // ... cout << "Введите имя файла: "; cin >> file_name;
Операторы ввода, как и операторы вывода, можно сцеплять:
string ifile, ofile; // ... cout << "Введите имя входного и выходного файлов: "; cin >> ifile >> ofile;
Каким образом ввести заранее неизвестное число значений? Мы вернемся к этому
вопросу в конце раздела 2.2, а пока скажем, что последовательность
инструкций
string word; while ( cin >> word ) // ...
считывает по одному слову из стандартного ввода до тех пор, пока не считаны
все слова. Выражение
( cin >> word )
возвращает false, когда достигнут конец файла. (Подробнее об этом – в главе
20.) Вот пример простой законченной программы, считывающей по одному слову из
cin и выводящей их в cout:
#include <iostream> #include <string> int main () { string word; while ( cin >> word ) cout << "Прочитано слово: " << word << "\n"; cout << "Все слова прочитаны!";}
Вот первое предложение из произведения Джеймса Джойса “Пробуждение Финнегана”:
riverrun, past Eve and Adam's
Если запустить приведенную выше программу и набрать с клавиатуры данное предложение,
мы увидим на экране терминала следующее:
Прочитано слово: riverrun, Прочитано слово: past Прочитано слово: Eve, Прочитано слово: and Прочитано слово: Adam's Все слова прочитаны!
(В главе 6 мы рассмотрим вопрос о том, как убрать знаки
препинания из вводимых слов.)
1.5.1. Файловый ввод/вывод
Библиотека iostream поддерживает и файловый ввод/вывод. Все операции, применимые
в стандартному вводу и выводу, могут быть также применены к файлам. Чтобы использовать
файл для ввода или вывода, мы должны включить еще один заголовочный файл:
#include <fstream>
Перед тем как открыть файл для вывода, необходимо объявить объект типа ofstream:
ofstream outfile("name-of-file");
Проверить, удалось ли нам открыть файл, можно следующим образом:
if ( ! outfile ) // false, если файл не открыт cerr << "Ошибка открытия файла.\n"
Так же открывается файл и для ввода, только он имеет тип ifstream:
ifstream infile("name-of-file"); if ( ! infile ) // false, если файл не открыт cerr << "Ошибка открытия файла.\n"
Ниже приводится текст простой программы, которая читает файл с именем in_file
и выводит все прочитанные из этого файла слова, разделяя их пробелом, в другой
файл, названный out_file.
#include <iostream> #include <fstream> #include <string> int main() { ifstream infile("in_file"); ofstream outfile("out_file"); if ( ! infile ) { cerr << "Ошибка открытия входного файла.\n"; return -1; } if ( ! outfile ) { cerr << "Ошибка открытия выходного файла.\n"; return -2; } string word; while ( infile >> word ) outfile << word << ' '; return 0;}
В главе 20 библиотека ввода/вывода будет рассмотрена подробно. А в следующих
разделах мы увидим, как можно создавать новые типы данных, используя механизм
классов и шаблонов.
Вперед