С чего начать изучение C++? [дубликат]
Всем привет! Есть вопрос: с чего начать изучение C++? Я знаю, что это сложный язык, потому спрашиваю у вас. У каждого языка программирования есть основа, без которой просто никуда. Что вы посоветуете пройти для начала?
Заранее спасибо.
Отслеживать
11 1 1 золотой знак 2 2 серебряных знака 8 8 бронзовых знаков
задан 29 ноя 2014 в 15:46
303 2 2 золотых знака 4 4 серебряных знака 17 17 бронзовых знаков
обычно все начинают со школьной программы basic и pascal
4 дек 2014 в 16:58
7 ответов 7
Сортировка: Сброс на вариант по умолчанию
Ох, ну сейчас я накидаю список.
Язык Си
Поскольку язык С++ включает в себя язык Си, который намного проще изучить, я бы советовал начинать с него. В частности с Шилдта — «Полный справочник по Си». Это единственная книга, в которой я не встретил просто кучу устаревшей информации с ошибкой в каждом втором примере(привет книге K&R).
Однако, изучение Си не обязательно, хотя я и рекомендую.
Что же касается самого с++
- Роберт Лафоре — «Объектно-ориентированное программирование в С++» Замечательная книга по С++ для новичков. Написана простым, лаконичным и понятным языком, материал разбирается детально и подробно. Рекомендую как самую первую по С++. Есть примеры для решения. Читать, одно удовольствие. Единственный минус, которыя я отметил — автор сильно и часто перехваливает достоинства языка по тексту книги.
- Герберт Шилдт — Полный справочник по C++ Прочитав Лафоре, можно углуюлять в детали языка и посмотреть своеобразный справочник-учебник по С++. Здесь будет сказано все то, чего не было сказано в первой книге.
Далее идет список, который я не читал, но книги из него рекомендуют так же на многих ресурсах как самые лучшие.
- Брюс Эккель, Чак Эллисон — «Философия C++. Введение в стандартный C++.»
- Брюс Эккель, Чак Эллисон — «Философия C++. Практическое программирование.»
- Стенли Липпман, Жози Лажойе — «Язык программирования C++. Вводный курс»
- Стенли Липпман — «Основы программирования на С++. Том 1»
Отлично, это был С++, но так же есть его библиотека STL, которой посвящены так же отдельные книги и Boost. А так же разбор продвинутых техник программирования на С++.
- Питер Нортон Скотт Мейерс — «Эффективное использование STL»
- Николай Джосьютис — «C++ Стандартная библиотека. Для профессионалов.»
- П. Плаугер, А. Степанов — «STL. Стандартная библиотека шаблонов C++»
Обязательно ознакомьтесь потом с BOOST, книг к сожалению не знаю.
- Питер Нортон Скотт Мейерс — «Наиболее эффективное использование C++. 35 новых способов улучшить стиль программирования.»
- Нортон Скотт Мейерс — «Эффективное использование C++. 50 рекомендаций по улучшению ваших программ и проектов.»
- Питер Нортон Скотт Мейерс — «Эффективное использование C++. 55 верных советов улучшить структуру и код ваших программ.»
- Герб Саттер — «Новые сложные задачи на C++»
- Герб Саттер — «Решение сложных задачи на C++»
- Андрей Александреску, Герб Саттер — «Стандарты программирования на С++. 101 правило и рекомендация»
- Не забудьте прочитать книгу четырех о шаблонах проектирования.
Страуструп
Если Вы прочитали множество приведенных книг и получили достаточно опыта, то самое время переходить к трудам Страуструпа. Книги его написаны академическим языком и читаются достаточно сложно. Некоторые рекомендуют начинать с него, но только от того, что сами с него начинали, когда на рынке больше никакой годной литературы не было. ОДнозначно не берите его первым, но он обязателен для хорошего программиста С++.
Еще не надоело клепать скучные консольные приложения? Самое время перейти к изучению QT. Или же изучения программированию под Windows.
- Макс Шлее «Qt 4.8. Профессиональное программирование на С++»
- Бланшет, Саммерфилд — «Qt4 Программирование GUI на С++»
- Марк Саммерфилд — Qt Профессиональное программирование (High tech) — 2011
- Андрей Боровский — Qt4.7+. Практическое программирование на C++ — 2012
Немного Windows мозгодробилки, но вместо WinAPI можно почитать что-то более высокоуровневое, всякие там MFC, WTL. Да, первые две книги для windows 95, но с тех пор WinAPI вообще не менялся, книги являются отличным пособием.
- Чарльз Петцольд — «Программирование для Windows 95. Том 1»
- Чарльз Петцольд — «Программирование для Windows 95. Том 2»
- Джеффри Рихтер — «Windows для профессионалов»
Ну в общем-то сюда еще можно добавлять всякие нужные книги, прямо не связанные с С++, но думаю вы и сами на них натолкнетесь в процессе изучения. Так же всякие DirectX, OpenGL, базы данных и т.д и т.п. Что-то можно высмотреть еще тут: хорошие книги по С++
А еще, если вы windows ориентированный разработчик, лучше использовать для проектирования интерфейса GUI язык C#, а на С++ писать для него библиотеки. Но это уже потом.
Удачи, если вы захотели стать профессионалом в области С++.
Как учить .NET: подробная инструкция для новичков и пару советов для опытных
Всем привет. Меня зовут Влад. Я старший .NET разработчик в компании DataArt. В IT я около семи лет, из них больше пяти работаю c .NET. Хочу дать некоторые советы тем, кто только начинает свой путь в IT как разработчик, а также тем, кто уже имеет пару лет опыта. Надеюсь, мое видение кому-то поможет на пути.
На написание этой статьи меня вдохновили несовершенные программы обучения многих курсов, а также несостоятельные, общие или слишком избыточные советы экспертов для новичков.
Речь пойдет о том, как, по-моему мнению, правильнее развиваться начинающим специалистам в мире разработки в целом и некоторые советы по развитию в мире .NET и прилегающих к нему технологий.
Добавлю оговорку: есть разные уровни новичков — интерны и джуниоры. Интерны — это те, кто не имеют опыта вовсе, обладают только теоретическими знаниями. Джуниоры — те, кто уже где-то недолго работали.
Что хотят от джуниора
В основном работодатель, нанимая начинающего специалиста, желает получить недооцененный актив. То есть изначально человека берут для развития, чтобы инвестиции работодателя окупились, и через какое-то время джуниор выполнял ту же работу так же качественно, как и специалист, который стоит на рынке дороже и имеет больше опыта.
Как ни странно, для начинающего гораздо важнее то, что называют soft skills, и знание английского языка. Но стоит учитывать, что есть вещи, которые можно исправить и которым можно научить, а есть те, которым нельзя. Например, если человек не говорит по-английски, но понимает базовый словарь и грамматику — то научить его разговорному языку — это рискованная затея. Но если джуниор уже немного разговаривает, то натаскать его за полгода вполне реально.
Если человек способен расслабленно вести беседу и проявляет, что называется, аналитические способности, не впадает в ступор от сложностей — это тоже можно отнести в разряд soft skills. Важно то, насколько человек способен доводить работу до результата, а умение общаться, правильно задавать вопросы и давать ответы — очень эффективный для этого инструмент.
Кстати, способность обучаться — тоже немаловажный фактор. Лучше взять специалиста, уже способного к самообучению, чем прививать это. Показателем могут быть, например, домашние поделки на GitHub или даже проекты в продакшене.
Ходит шутка (похожая на правду), что пройти собеседование на джуниора/интерна гораздо сложнее, чем на сеньора 🙂 Так оно и есть. Опытный специалист имеет портфолио/резюме — это уже говорит о том, что он способен приносить результат. Но если человек раньше не работал или работал мало — рекрутеру необходимо только за одно собеседование и, возможно, тестовое задание выяснить все о кандидате.
Но даже если человек хорошо показал себя на собеседовании, это еще не повод расслабляться — компания будет следить за тенденциями развития, чтобы вовремя выяснить, оправдывает ли джуниор инвестиции денег и времени в него или нет.
Где выгодны джуниоры
Существует целый ряд задач (несложный баг-фиксинг, правки верстки и UI, написание юнит-тестов), с которыми человек с небольшим количеством знаний и опыта справится за то же время, что и человек более опытный. Взять, к примеру, промышленную (enterprise) разработку, крупные проекты, где кучу времени уходит на рутину, вроде обновления проекта до актуальной версии, мердж, тестирование. Это жирный плюс в найме начинающих специалистов.
Если взять аутсорсинг и аутстаффинг (то есть перепродажу человеко-часов) в той или иной форме, то рейты, по которым продают джуниоров, не намного ниже рейтов миддл-разработчиков. А ЗП начинающих может быть значительно ниже, что делает их привлекательным активом компании, приносящим даже более высокую маржу, нежели более опытные разработчики. Опытных еще и найти гораздо сложнее — нужно платить агентствам или рекрутерам вплоть до одной зарплаты такого человека, чтобы осуществить найм. А маржа при заработке на высококлассных специалистах — низкая, они больше нужны для поддержания бизнеса в рабочем состоянии.
Первые шаги
Если вы вообще не из IT, у вас нет друзей-разработчиков, нет профильного образования, и вы совершенно ничего не понимаете — можно начать с каких-нибудь курсов. Боюсь, что оставлю сейчас без куска хлеба владельцев инфобизнесов, но в интернете можно найти достаточно бесплатных материалов, например, на торрентах. Но, естественно, я не рекомендую вам скачивать пиратский контент 🙂
Если с живым человеком-лектором вам проще, то советую курсы с большой длительностью, например от 3 до 6 месяцев. Мне кажется, это либо втянет вас в процесс, либо окончательно вам надоест, и вы поймете, что это не ваше.
Курсы не помогут вам найти работу и не помогут получить все необходимые знания для трудоустройства. Но если вы заплатите деньги, это дисциплинирует вас. Также курсы дают первую понятийную базу, от которой можно дальше отталкиваться, общее понимание предмета и что немаловажно — знакомства.
Но лучше всего иметь товарища из IT, который сможет проверить на адекватность курсы, куда вы хотите пойти, чтобы не вышло, что это банальное вытягивание денег, и вы получили хоть какую-то пользу.
Для людей, которые уже когда-то что-то кодили в универе или школе, имеют какое-то представление об IT-сфере, курсы — скорее всего, лишняя трата денег. Достаточно посмотреть их программу и далее самому искать нужные материалы.
Замечу, что любое обучение должно сопровождаться практикой. Будь то самообучение или курсы, вы должны показывать результат. Это может быть макет, если вы учите верстку, веб-приложение или мобильное — не важно. Главное, все, что вы узнаете теоретически, сразу же примените на практике.
Далее я распишу свое видение, с чего лучше начинать и как двигаться дальше в мире .NET разработки.
Hard Skills
Я разделю все сферы знаний hard skills на такие части:
- C# — синтаксис — это база. Нанимаясь на первую работу, вы должны знать хорошо хотя-бы это.
- LINQ — расширение C#, фактически его очень важная часть. Сейчас большая часть бизнес-логики пишется именно на нем.
- .NET — платформа, на которой работает все выше описанное. Понимание базовых вещей убережет вас от часов поиска в Гугле и непонятного для вас поведения проекта, если вы что-то сделали не так.
- Фреймворки — средства поверх C#, с использованием которых и ведется разработка. Для web — это MVC/WebForms/WebAPI/SignalR, для десктоп — WPF/WinForms. Для веба главное — понимать MVC. WebForms используется реже. Можно также добавить ASP.NET Core и Store App, однако проектов по ним не так много, так что начинать учить MVC — беспроигрышный вариант. Cамый популярный фреймворк для работы с данными — Entity Framework. Де-факто стандарт. Также нужно уметь работать хотя бы с одним IoC-контейнером, например Ninject, понимать, как и зачем работает Dependency Injection и почему слабо связанное приложение лучше поддерживается.
- SQL — очень часто требуется. Знание SQL — для вас огромный плюс. С .NET приложениями чаще всего используют MS SQL Server и язык запросов T-SQL.
- Шаблоны проектирования и парадигмы — даже если вы их не понимаете — то заучите. С практикой придет понимание. Шаблон сам по себе — наилучшее, найденное в ходе эволюции миллионов человеко-часов решение какой-то общей проблемы.
- Архитектурные гайды — лезть в вопросы проектирования поначалу глубоко не стоит. Но понимание, что такое SOA, N-layer, Microservices, поможет вам гораздо быстрее въезжать в суть дела.
- Базовое понимание Front-end — очень часто от бекенд-девелоперов требуют минимальные знания фронта. Возможно, достаточно JQuery, который используется в достаточном количестве проектов, заходящих в наши аутсорс-компании. Если вы человек с чистым бекенд-профилем, то, может быть, будете более интересны продуктовым компаниям, где множество людей делают большие технологические продукты, но, по-моему мнению, попасть в такую компанию новичку сложнее, нежели в аутсорс.
- Productivity tools — очень полезно приучать себя работать быстро с самого начала. Потом productivity tools сэкономят вам сотни часов времени, воспринимайте это как инвестицию.
- Системы контроля версий — средства для организации командной работы. Фрилансерам, которые работают над проектами самостоятельно, они могут быть и не нужны, но в компаниях всегда коллективная работа — там без них никак.
Для разработчиков разных уровней требуется разная степень погружения в эти направления. Давайте посмотрим, с чего начать.
Советы для интернов/джуниоров
Названия книг написаны в оригинале, можно без проблем найти русскоязычные адаптации в печатном или электронном виде.
C#
Хорошо подойдет для освоения базового синтаксиса самого языка. Лично мне никогда не нравились книги Троелсена, которые рекомендуют новичкам. По моим субъективным ощущениям, там много воды, а вот у Шилдте как раз все по делу и с примерами.
Очень важное замечание для начинающих. Если осваиваете C# с нуля, изучайте как можно детальнее именно сам язык, синтаксические конструкции и всевозможные их сочетания, пробуйте их применять, пытайтесь сами ставить себе вопросы и тут же отвечать, тестируя, как это работает, в общем-то исследовать.
Заучивать, какой тип сколько байт занимает в памяти, можно обзорно, но не стоит на этом зацикливаться. Лучше убедитесь, насколько хорошо вы понимаете примеры и сможете ли написать такое же.
Методы стандартных библиотек .NET — это энциклопедические знания, и заучивать их тоже по началу не стоит. Это гуглится за пару секунд, и куда более продуктивно будет это делать уже по мере самой работы (учебной, разумеется) над какими-то своими поделками. Так у методов будет свой «вес», и потребность в них. Следовательно, запомнятся они куда лучше.
Однако это лишь база. Необходимы еще соответствующие знания фреймворков и общее понимание ООП и многослойных, а может, и микросервисных архитектур, хотя-бы теоретическое. Реальное умение это применять приходит с опытом.
LINQ
Книжка дает исчерпывающие понимание средств LINQ в достаточном объеме для уверенной работы с ним, а с LINQ придется работать много. По сути, это огромная часть языка C#, на которой пишется немало логики. Я сам очень люблю использовать LINQ, где только смогу. Писать бизнес-логику (логику программы) в функциональном стиле (используя описательный формат преобразования данных, а не последовательный) куда лаконичнее и понятнее, как по мне. В общем в книге достаточно глубоко показаны все тонкости, рекомендую, не смотря на ее возраст. В LINQ мало что поменялось.
Бонус #1
Даю вам свою классификацию методов LINQ, которая поможет их запомнить куда лучше. Написал ее, когда сам изучал LINQ.
.NET
«CLR via C#» by Jeffrey Richter
Классика жанра. Совсем новичкам ее можно пропустить и сконцентрироваться на более практичной литературе по фреймворкам, но каждый .NET разработчик обязан ее прочитать. Книга дает базовое понимание, как устроена платформа .NET, как работают синтаксические средства.
Я бы дал некоторые советы, как читать эту книгу:
Часть 1 — Основы CLR — очень глубоко вникать не нужно, достаточно понять, что такое:
- строгие и не строгие имена сборок;
- что такое CLR, по сути, и как устроена сборка, манифест, метаданные;
- как запускается CLR через исполняемый файл exe и что еще в нем может содержаться кроме кода вызова;
- JIT-компиляция и IL код;
- CTS/CLS;
- версирование сборок.
Часть 2 — Проектирование типов — эту часть нужно хорошо изучить целиком, важная базовая часть C#/.NET.
Часть 3 — Основные типы данных — заучивать функции работы со строками нет смысла, это все легко гуглится. Особое внимание уделите:
- главе о делегатах — достаточно полная и базовая информация об этой части языка, понимание Func, Action;
- что такое StringBuilder, как организованы строки в .NET;
- интерфейсам ICollection, IEnumerable, IList;
- Nullable-типам.
Часть 4 — Ключевые механизмы — советую очень хорошо разобрать:
- концептуальный механизм уборки мусора;
- фундаментальные вещи об исключениях;
- что такое домен приложения и как он работает;
- что такое Reflection (рефлексия, отражение);
- общее понимание сериализации.
Часть 5 — Многопоточность — слишком глубоко вникать, как это работает на уровне ядра ОС, не стоит, но надо понимать общие концепции:
- про переключения контекста;
- про то, сколько памяти выделяет поток;
- что такое Task и как он соотносится с реальным потоком ОС;
- как работает синхронизация потоков на уровне приложения и ОС.
SQL
Пожалуй, самая лучшая книга по T-SQL, которую я видел для начинающих. Информация дается последовательно, детально и системно, однако в книге того издания, которое читал я, не было главы об индексах. Советую найти отдельно и изучить.
Бонус #2
Дам вам исходный код змейки, которую я написал на T-SQL. Делать такие проекты — очень хороший способ выучить язык лучше.
А теперь челлендж: кто первый напишет тетрис на T-SQL — получит от меня бутылку ирландского виски 🙂
Frameworks & Tools
Для веб-разработки рекомендую эту книгу. В ней неплохо разобраны базовые возможности ASP.NET MVC, контейнеры управления зависимостями (IoC), основы LINQ, AJAX, JQuery. Есть примеры с кодом, достаточно легко читается.
Также рекомендую очень хорошие сайты-справочники по фреймворкам на платформе .NET — Metanit.com и Professor Web. Есть очень много примеров.
Также неплохой специализированный ресурс по Entity Framework — Entity Framework Tutorial.
Productivity tools
Очень очень важно приучать себя с самого начала пользоваться средствами повышения продуктивности, чтобы не терять время на банальной механике работы. Возьмите за правило: чем больше действий вы производите на клавиатуре — то есть клавишами, а не мышью, тем быстрее вы работаете. Комбинации из горячих клавиш способны очень сильно ускорить рутину и не отнимать вашего внимания.
Обязательно установите себе ReSharper — лично я не мыслю свою работу без этого дополнения к Visual Studio. Для тех, кто использует Rider, Resharper вообще, как родной.
Если вы используете MS SQL Server Management Studio, то must have расширение — это SQL Hunting Dog. Некое подобие ReSharper’a для более быстрой навигации по сущностям базы и переключения баз.
Если ваша разработка связана с Web — осваивайте Chrome dev tools (F12 tools).
Для 99% случаев отладки кода в браузере их должно хватить. Для более хитрых случаев перехвата и изменения трафика используйте Fiddler.
Шаблоны проектирования и парадигмы
Русскоязычная книга по шаблонам проектирования, достаточно толковая, с примерами.
Парадокс шаблонов проектирования в том, что их знание чаще всего требуется от новичков, а сами шаблоны — это концентрация опыта тысяч разработчиков, и действительно научиться их применять можно только с годами. Поэтому для начала рекомендуется просто заучить формальные определения и схемы. Со временем это формирует стиль мышления, и вы будете применять шаблоны повсеместно. Самое плохое — применять шаблоны ради шаблонов, это называется over-engineering.
Также советую ознакомиться с парадигмами SOLID, главная из которых, я считаю «S» — single responsibility principle. Все остальное уже производное от нее.
Front-end
Я не рекомендую читать самую известную ортодоксальную книгу с носорогом, которая называется «JavaScript: The Definitive Guide» (Подробное руководство) by David Flanagan. Очень академичный стиль изложения, очень много воды и несущественных деталей. Конечно, если вы разработчик front-end фреймворков, то эта книга для вас. Но я все же люблю более практичный подход. Самое лучше, что есть в Рунете по Javascript, это JavaScript.ru и Learn Javascript.ru.
Информации на этих ресурсах достаточно, чтобы иметь компетенцию на уровне middle front-end разработчика. Конечно, нужен еще опыт владения технологией и фреймворками, но я говорю лишь об объеме знаний.
JQuery.page2page.ru — ресурс, который я рекомендую, если вы столкнулись с JQuery. В наших реалиях достаточно старых проектов — это может быть актуально.
Осваивать Angular, TypeScript или React вполне возможно на сайтах по официальной документации.
Из того, что мне показалось очень хорошим для вникания в React.js и современную инфраструктуру front-end разработки, это книга «Разработка веб-приложений в ReactJS» А. Хортона и Р. Вайса.
Вспомогательные средства
Очень полезны разработчикам любых уровней и направлений. Элементарные задачи — сделать скрин — отправить коллеге, записать видео — отправить клиенту — не должны вызывать трудностей.
Clip2net — утилита, которая позволяет на ходу дорисовать что-то на скриншоте и тут же его сохранить или отправить.
Jing — утилита, позволяющая в два клика записать видео с экрана, загрузить в облако и выдать ссылку на его просмотр.
Также есть онлайн-средства для тестирования небольших кусков кода, например, .NET Fiddle, или для регулярных выражений — RegExr.
Многие любят LINQPad — текстовый редактор, позволяющий тестировать LINQ2SQL или EF LINQ запросы к базе и разные куски кода без перекомпиляции тяжелых громоздких проектов.
Системы контроля версий
Сейчас в основном пользуются git-подобными системами, так что изучение контроля версий рекомендую начать именно с git.
Если вы думаете, что работа с git это обязательно заучивание команд командной строки — то это не так. Думаю нет ничего зазорного в том, чтобы использовать визуальные клиенты. Это даже проще с точки зрения разрешения конфликтов или организации работы с большим количеством файлов. Например, мне нравится SourceTree.
Для начала достаточно понимать, что такое Repository, Branch, Pull, Commit, Push, Merge, Stash. Если хотите создать свой приватный репозиторий — можете использовать BitBucket. Если хотите кому-то показать свой код, то удобно будет создать публичный репозиторий на GitHub.
Stack Overflow
Я очень рекомендую иметь там аккаунт и задавать вопросы, также по возможности давать ответы. Даже заданный вопрос может принести вам рейтинг. Например один из моих вопросов набрал 10 000 просмотров, что дало мне золотую медаль и хороший рейтинг.
Этот рейтинг можно тратить, выставляя бонус за ответы на ваши вопросы, на которые никто не хочет отвечать. С бонусом вероятность получить ответ возрастает. Меня это несколько раз спасало, когда мне нужно было срочно получить ответ. Я использовал библиотеку, на которую почти не было документации, и спросить было не у кого. В результате мои вопросы со временем очень сильно выросли в рейтинге.
Методологии разработки
Следует разобраться, что такое Agile-подход, хотя бы в теории, возможно, выучить «артефакты» Scrum.
Недавно IT Ukraine Association выложила документ с набором необходимых навыков для junior-специалистов. В своей учебе можно также ориентироваться на него. Методологии разработки и релиз-менеджмент уже занимают там важное место. Начать изучать Scrum можно прямо с Wiki.
Ясное дело, что в реальной жизни и реальных проектах все заточено под ситуацию, и некоторыми артефактами или процессуальными вещами можно жертвовать. Но тем не менее надо понимать, зачем это было придумано и как это помогает в работе. Это своего рода фреймворк взаимоотношений с клиентом, чтобы и для него разработка была более прозрачной и прогнозируемой, и команду не обижали.
Бонус #3
Даю свой список вопросов для подготовки к собеседованиям, который я составил несколько лет назад. Если ответите на все эти вопросы, можно сказать, что вы знаете C#/.NET и Core-библиотеки на уверенном middle-уровне.
Советы для разработчиков Middle/Senior уровня
Для чтения следующих книг уже желательно иметь хотя бы год-полтора опыта разработки, иначе горы теории не найдут свой отклик в вашем восприятии.
C#
Книга Джона Скита, топового комментатора со Stack Overflow. Джон — профессиональный разработчик на Java в Google, но это не помешало ему написать бестселлер про тонкости синтаксиса C#.
Очень детально разбираются нюансы синтаксиса, разница в поведении в разных версиях .NET фреймворка и просто легко читается. Если Рихтер — больше о .NET, то эта книга именно о тонкостях C# и об эволюции этих языковых средств.
T-SQL
Книга по подготовке к экзамену от «Майкрософт». Более структурного и внятного справочника по T-SQL я не находил. Темы очень четко разделены между собой, много наглядных примеров, даются все тонкости синтаксиса T-SQL. По сути, больше, чем в этой книге .NET разработчику, если он не является профессиональным Database developer’ом, знать и не нужно.
Архитектура
Эта книга — отправная точка в изучении архитектуры корпоративных приложений. В ней достаточное количество рассмотренных фундаментальных средств и понятий.
Книжка дает понимание о современных течениях в архитектурах, раскрывает понятия CQRS, DDD. Полезна для саморазвития. Читать ее или не читать — решать вам. Такие подходы вы увидите не в каждом проекте, но важно уметь оперировать категориями и шаблонами, описанными там.
Книжка Мартина Фаулера. Дается очень глубокий аналитический подход по рефакторингу и улучшению существующего кода.
Фреймворки
Если вас беспокоят вопросы производительности в старом-легаси проекте, а переписывать на чистый SQL вы не хотите — рекомендую гайд «Performance Considerations for EF 4, 5, and 6»
На Entity Framework можно писать достаточно производительный код, не прибегая к помощи Dapper’a или чистого ADO.NET, либо же переписывать уже существующий, оптимизируя его.
Также несколько книжек по более детальному разбору возможностей Entity Framework и производительности:
- «Mastering Entity Framework» by Rahul Rajat Singh
- «Entity Framework 6 Recipes» by Zeeshan Hirani (Author)
Следующие книги я не читал, но слышал рекомендации от коллег. Они могут помочь, если перед вами стоят специфические задачи в узких областях:
- Security — «.NET Framework Security» by Brian A. LaMacchia;
- Threading — «C# Threading Handbook» by Tobin Titus;
- Memory management — «Under the Hood of .NET Memory Management» by Chris Farrell.
Обзор Open-source проектов
Просмотр того, как сделаны Open-source проекты, помогает обогатить понимание и дает возможность взять себе лучшие фишки.
И еще можете глянуть самый знаменитый .NET Open-source E-commerce движок.
Нужны ли сертификаты от Microsoft?
Решать вам, в этом вопросе я не специалист. Однако скажу свое мнение.
- Компания, в которой работает достаточное количество сертифицированных спецов, получает скидки на продукты от MS, что делает вас немного приоритетнее других при найме.
- Некоторые клиенты предпочитают иметь дело с девелоперами с сертификатами. Также если вы занимаетесь удаленной работой без посредника, это может немного вас выделить.
- Иногда компания оплачивает сдачу экзаменов для своих сотрудников.
- Структурное изложение материала.
- Знания, полученные в процессе подготовки.
Могу отметить пособие по подготовке к экзамену как отличный учебник, да и вообще пособия для сдачи экзаменов по базам данных — чудесные учебные материалы.
- Потраченное время на подготовку и деньги на сдачу экзамена.
- В вопросах бывает слишком много не особо важных мелочей, которые редко применяются.
- Не скажу, что на всех экзаменах, но на тех, что видел я по веб-разработке, подготовка сводится к тому, чтобы найти базу с вопросами в интернете и заучить их.
Куда расти дальше
Рост компетенции человека возможен как в сторону софт скиллов — организации процесса обучения новичков, коучинга, организации работы команды, управления рисками на позиции проектного менеджера или CTO, так и узкой специализации — уметь делать более сложные вещи, изучать более редкие технологии или просто работать в разы быстрее других.
Могу посоветовать читать книги для общего развития, а также развития навыков в смежных специализациях. Например, по методологии проектирования UI можно ознакомиться с книгой проектировщика Apple — Джефа Раскина «Интерфейс. Новые направления в проектировании компьютерных систем».
Или же выбирайте базовые книги по проектному менеджменту: «Мифический человеко-месяц, или Как создаются программные системы» Фредерика Брукса.
Более академическая литература по проектному менеджменту — «Руководство к своду знаний по управлению проектами».
Или же можете записаться на курсы Stratoplan. Сам просмотрел пару штук, улучшил понимание процессов и людей в них. О «Стратоплане» как о курсах для менеджеров слышу только позитивные отзывы.
Куда двигаться — решать вам, но также стоит обсудить с руководством, какие специалисты более актуальны конкретно в вашей компании.
Ответы на популярные вопросы
Отвечу на несколько вопросов, которые часто перерастают в холивары из-за непонимания полной картины разработки.
Нужна ли программисту математика и алгоритмы?
Бывает по-разному. В программировании есть типичные задачи, решаемые типичными методами. Эти методы и можно назвать алгоритмами. Почти всегда все алгоритмические задачи так или иначе решены уже в каких-то библиотеках от сторонних производителей, и разработчикам остается только лишь использовать их. Так происходит в 99% случаев.
Однако если вы работаете над созданием уникальных технологических вещей — да, вам нужно в этом ориентироваться. То же самое с математикой — как ни странно, но чаще всего она нужна в геймдеве или в узкоспециализированном софте по расчетам / прогнозированию / машинному обучению и так далее. Кроме того, работа с алгоритмами и математикой расширяет умственные способности и паттерны мышления, что позволяет быстро думать и соображать.
Для входа в IT, думаю, с головой достаточно понимать:
- алгоритмы сортировки массивов (пузырек, слияние, quicksort);
- алгоритмы обхода бинарных деревьев в ширину и глубину;
- «О» большое и «о» малое, или временная сложность алгоритма;
- базовые структуры данных (стек, очередь, лист, дерево, хештейбл) и временные сложности поиска и добавления новых элементов в них.
Если вы учитесь/учились в техническом вузе — то для вас это будет относительно несложно. Но если профильного образования нет и тяги к алгоритмам тоже, развивайте свое портфолио на гитхабе, учитесь делать проекты и приносить результат.
И несколько холиварных вопросов 🙂
Что лучше — Java или C#?
В мире разработки есть более или менее уместные средства решить задачу, в том числе важный фактор — возможность найти людей, знающих технологию, и их цена. Однозначного ответа нет. На Java больше open-source, в C# более модерновый синтаксис. Java хостится на Linux, C# требует Windows, хотя .NET Core разворачивается на Linux, что делает его хорошим выбором для микросервисов под бесплатными системами управления базами данных, например PostgreSQL или MongoDB. У всех технологий есть плюсы и минусы. Все зависит от конкретной задачи.
Ставить или нет нижнее подчеркивание для приватных членов класса?
Как хотите 🙂 Однако если весь проект написан в едином стиле, его проще читать, и члены команды привыкают читать код быстрее. «C# Coding Conventions (C# Programming Guide)» — кое-что описано тут. Можно использовать StyleCop и блокировать компиляцию проекта в случае несоответствия форматированию. В целом стандартизация повышает скорость и понятность.
Что лучше — SQL или NoSQL базы данных?
Опять таки ответа нет — каждой задаче свое решение. Технологии — лишь инструментарий, решающий задачу. Очевидно, что хранить данные аналитики с достаточно плоской структурой и большим объемом удобней в NoSQL, а сущности, связанные сотнями связей и ограничений, — в реляционной базе.
Зачем эти вопросы? Своими ответами я хотел показать свое отношение к технологиям и разработке в целом. Не важно, каким молотком ты забьешь гвоздь. Важен факт забития гвоздя под нужды клиента, учитывая его потребности и возможные риски. Остальное — детали, которые ему, по сути, и не нужны.
Вот и все, если захотите со мной связаться, можете писать прямо на Facebook — Vladislav Furdak.
Все про українське ІТ в телеграмі — підписуйтеся на канал DOU
Подобається Сподобалось 15
До обраного В обраному 25
Язык программирования С++: чем он отличается от С, где его применяют и подходит ли он для старта
C++: что это за язык, как он появился и какие у него преимущества
В 1980-х годах датский программист Бьерн Страуструп моделировал распределение вызовов между телефонными станциями. Работал он на языке С, похожем на машинный код в виде инструкций из двоичного кода.
Язык С не устраивал Страуструпа: был слишком медленным и не поддерживал объектно-ориентированное программирование — то есть не мог представить программу как набор объектов, не был понятным и наглядным.
Тогда Страуструп решил усовершенствовать С, скрестив его с другим ретро-языком Simula. В C++ появились классы, строгая проверка типов, inline-функции и другие элементы, которые упрощают и ускоряют программирование.
Сначала усовершенствования воспринимались просто как надстройка над базовым языком. Но очень быстро «С с классами» стал надежным рабочим инструментом для миллионов разработчиков.
Бесплатные курсы по программированию в Хекслете
- Освойте азы современных языков программирования
- Изучите работу с Git и командной строкой
- Выберите себе профессию или улучшите навыки
- Скорость. С++ обрабатывает данные быстрее большинства высокоуровневых языков типа Python.
- Кроссплатформенность. В отличие от многих языков, в том числе от еще более высокоуровневого С#, С++ не зависит от платформы: разработку можно легко перенести с одной операционной системы на другую.
- Универсальность. С++ поддерживает множество стилей программирования, например, процедурное программирование, объектно-ориентированное программирование. Также С++ предоставляет абстракцию данных. Благодаря этому его можно использовать для решения практически любых задач».
Читайте также: «История IT. 1970: События, люди, технологии»: Павел Калашников про запуск UNIX-времени, создание Pascal и патент на компьютерную мышь
Что пишут на С++
На C++ создают высоконагруженные приложения, драйверы, графические стандарты и игры. Например, на С++ написана система управления базами данных MySQL — основа для множества высоконагруженных приложений, — главные продукты Microsoft, культовые игры Counter Strike и World of Warcraft.
На С++ пишут код, который должен работать быстро и надежно, поэтому язык часто является основой для балансировщиков нагрузок на серверах и сложных графических алгоритмов. На C++ можно написать код для GPU — графического процессора. Так, например, создаются шейдеры для игр и графического ПО: они параллельно запускаются на GPU и позволяют без задержки выполнять сложные вычисления.
На С++ можно писать сложные, нетривиальные алгоритмы — для этого у языка есть огромная библиотека STL (Standard Template Library), где реализована большая часть алгоритмов и структур данных. Иногда С++ используют, чтобы оптимизировать код, добавить ему скорости и производительности или настроить приложение под конкретные платформы.
«Несмотря на универсальность, у языка есть и свои ограничения. Например, на С++ неудобно обрабатывать логи — файлы с информацией о действиях в программе — или собирать серверную статистику. Писать алгоритмы для машинного обучения или серверы для обработки запросов тоже будет сложно: в первом случае больше подойдет Python с большим количеством фреймворков, во втором — Java или C#».
Существует миф, будто С++ подходит только для сложных приложений, потому что даже простые операции, написанные на нем, выглядят как сложные команды. Но эти проблемы легко решить благодаря огромным библиотекам с открытым исходным кодом по С++, которые содержат много вспомогательных функций и серьезно упрощают работу. Поэтому писать на С++ можно что угодно: и большой высоконагруженный сервис, и несложные программы для вычисления площади или решения систем алгебраических уравнений.
Что нужно знать разработчику на C++
«Если вы планируете карьеру С++ разработчика — учите общие алгоритмы и структуры данных. Без них не обходится ни одно собеседование.
Если захотите писать код на С++ и заниматься сложными вычислениями, придется разобраться в параллельном программировании, когда команды выполняются одновременно несколькими процессорами. Также нужно будет изучить открытый стандарт для распараллеливания OpenMP. Инженерам по разработке ПО важно знать дискретную математику, статистику, алгоритмы.
Еще одно направление развития — компьютерная графика и геймдев, где нужно писать шейдеры и OpenGL. Здесь пригодится знание сопряжений с OpenCL — фреймворком для параллельных вычислений в графических процессорах — или CUDA, компилятора с расширениями, необходимыми для написания кода на GPU».
Читайте также: Что нужно знать программисту перед собеседованием и как успешно его пройти
Подходит ли C++ для начинающих
Есть еще один не менее распространенный миф о С++. Говорят, что это сложный язык, который не подходит для старта в профессии.
Легко понять, почему его называют непростым. Вот пример классической программы «Hello, World!» на С++:
//include using namespace std; void function_name () cout <"Hello, world" <endl; > int main() function_name(); // Вызов функции return 0; >
А это пример кода на Python:
print('Hello, World!') // => Hello, World!
Вот что говорит о сложности языка создатель языка Страуструп:
«C++ действительно непрост, и чтобы научиться его использовать, необходимо приложить определенные усилия. Но людям вообще хочется невозможного: еще более простого языка, с еще большим количеством фич и сохранением работоспособности существующего кода».
С++ может стать отличным стартом в IT, но только если вы готовы приложить усилия. В отличие от многих высокоуровневых языков — Python, Java — он не такой «удобный». Код не читается интуитивно, приходится самому работать с памятью: следить, чтобы не было утечки данных и освобождать место для работы программы. Для этого сначала нужно разобраться с основами устройства компьютера.
Но усилия многократно окупаются ростом уровня подготовки. С С++ можно начинать, если вы настроены серьезно и готовы копать глубоко. Этот язык даст отличную базу, которая поможет уверенно двигаться вперед и решать проблемы не только на уровне кода.
«На мой взгляд, C++ — оптимальный язык для старта, потому что он дает базу. Если человек хочет быть разработчиком и разбираться в этой теме глубоко, то не стоит начинать с языков с низким порогом вхождения, таких как Python или JavaScript.
Конечно, на их основе быстрее можно научиться программировать. Но из-за простоты этих языков можно легко упустить важные вещи и не знать в итоге, как устроена память, адресация и многое другое. Это сложно, но важно. По моему опыту, людям, которые начинали, скажем, с Python, потом сложнее глубоко погружаться и разбираться, почему программа так и не работает».
Можно ли стартовать сразу с С++, не изучая С
Эта тема — предмет вечных дискуссий в комьюнити. Одни — и в их числе сам Страуструп — говорят, что С учить не обязательно. Вполне можно стартовать сразу с С++, где не нужно работать напрямую с символами и памятью и тратить время на сложности, с которыми пришлось бы возиться в С.
Чтобы увидеть разницу, посмотрите, как выглядит на С создание email-адреса:
char* compose(const char* name, const char* domain) char* res = malloc(strlen(name)+strlen(domain)+2); // место для строк, '@', и 0 char* p = strcpy(res,name); p += strlen(name); *p = '@'; strcpy(p+1,domain); return res; >
А вот как это же действие выглядит на С++. Никаких сложных операций с символами и памятью:
string compose(const string& name, const string& domain) return name+'@'+domain; >
Другая точка зрения: на примере С лучше разбираться в базовых теоретических вещах, поэтому для тех, кто «копает глубоко», лучше подойдет последовательное изучение обоих языков.
Посмотрите, как разработчики решают задачу из олимпиадного программирования на языке С пятью разными способами. Судя по их решениям, кажется, что зная С, можно потом без проблем выучить многие другие языки — настолько хорошую базу знаний дает этот язык.
«Вопрос в том, чего вы хотите достичь. Если нужно глубоко разобраться в теме, то лучше сначала изучить C. С его помощью можно разобраться с базовой архитектурой компьютеров и теоретическими основами, включая побитовые операции, обращение с динамической памятью и числами с плавающей точкой. Мы обычно преподаем именно так: даем фундамент, а на второй год изучения переводим студентов на С++ с его особенностями и фишками».
Что популярнее: С или С++
Как С, так и С++ уже который год стабильно входят в топ-5 самых популярных языков. Причем одни индексы оценивают их по отдельности, другие включают в общую категорию.
Например, по данным индекса TIOBE в ноябре 2022 года С находится на втором месте, уступив самому популярному языку в мире Python. С++ отстал от С на два пункта и занял четвертое место.
В исследовании Stack Overflow за 2022 год, наоборот, С++ находится на шестом месте, а С — на седьмом.
А вот в индексе PYPL оба языка попали в одну категорию и находятся на четвертом месте, уступая другому родственному языку — C#.
Изучите основы языка C У Хекслета есть платформа для изучения основ программирования с нуля — Code Basics. Пройдите бесплатный курс по изучению языка С. Обучение на Code Basics начинается с азов, информация структурирована и подается от простого к сложному.
Сколько зарабатывает разработчик С++
На С++ пишут практически во всех крупных компаниях, поэтому он может стать хорошим инструментом для карьерного роста.
Уровень зарплаты зависит не только от опыта, но и от знания фреймворков, алгоритмов, библиотек. Исходя из вакансий , опубликованных на HeadHunter, в среднем джуниор-разработчик может претендовать на зарплату 120-150 тыс. рублей, а мидл- и сеньор-разработчик — от 200 тыс. рублей.
Как и с чего стартовать в С++: книги и ресурсы
Перед погружением в язык изучите базовую теорию по объектно-ориентированному программированию — это поможет быстрее погрузиться в тему.
Для тех, кто решит начать с изучения языка С:
- Герберт Шилдт « Полный справочник по С »
А если захотите стартовать сразу в С++, пригодятся книги:
- Герберт Шилдт « Полный справочник по C++ »
- Бьерн Страуструп « Язык программирования C++ »
- Бьерн Страуструп « Программирование. Принципы и практика использования C++ »
В процессе изучения языка не забудьте про библиотеки STL и BOOST:
- Питер Нортон Скотт Мейерс «Эффективное использование STL»
- Николай Джосьютис «C++ Стандартная библиотека. Для профессионалов»
- П. Плаугер, А. Степанов «STL. Стандартная библиотека шаблонов C++»
А еще здорово помогут:
- Сайт стандартизации С++
- YouTube-канал о С и С++
- Русскоязычное сообщество разработчиков
Бесплатные курсы по программированию в Хекслете
- Освойте азы современных языков программирования
- Изучите работу с Git и командной строкой
- Выберите себе профессию или улучшите навыки
Мощный, но сложный: стоит ли изучать язык C++ в 2023 году
С++ называют мамонтом в мире программирования. Его создал датский программист Бьерн Страуструп ещё в начале 1980-х годов. Несмотря на это, в течение последних 20 лет С++ остаётся одним из самых актуальных и широко используемых языков программирования. Например, благодаря С++ работают Яндекс.Поиск и поисковый движок Google. С его помощью создаются беспилотные автомобили, нейронные сети, сервера, видеоигры и даже пишутся музыкальные треки. Редакция Synergy Times узнала у руководителя отдела по разработке продуктов факультета программирования университета «Синергия» Николая Щербатенко, с чем это связано, в чём особенность этого языка и сколько платят разработчикам на С++.
Из этой статьи вы узнаете
Что пишут на языке С++
Зачем он химикам и диджеям
В чём сила и слабость этого языка
Сколько платят разработчикам на C++
Как учить язык C++
Что пишут на C++
Программисты ценят C++ за производительность и надёжность. В 2003 году он даже стал языком года в индексе TIOBE , в мае 2019 года оказался третьим по популярности в этом рейтинге, а в октябре 2022 года — четвёртым.
В 2022 году составители IEEE Spectrum отдали C ++ третью строчку. И, хотя сейчас в этом рейтинге лидирует Python, эксперты считают, что C и большие C-подобные языки (C++ и C #) превосходят по своей совокупной популярности Python.
Что же пишут на этом языке? В основном на C++:
- разрабатывают игры и игровые движки. Например, язык использовался в ядре игровых движков Unreal Engine и Unity. На нём созданы игры Counter Strike, Diablo I, StarCraft: Blood War, Football Pro и World of Warcraft, а также многие игровые продукты для консолей Xbox и Playstation;
- создают базы данных;
- программируют встроенные системы, которые используются в управлении беспилотными автомобилями, сенсорами, умными часами, кофемашинами;
- разрабатывают настольные и кроссплатформенные приложения. Например, на С++ написаны почти все продукты Adobe (Photoshop, Illustrator, inDesign, Acrobat, Adobe Premiere и т.д.);
- создают операционные системы. На языке написана MacOS. Но разработчики считают, что С++ — избыточен и формирует громоздкие коды, поэтому в большинстве случаев ОС пишутся на чистом С.
Ещё C++ используют в разработке поисковых систем (например, Google), приложений с графическим интерфейсом, веб-браузеров, библиотек, при deep learning, в облачном программировании, на нём обучают нейросети.
Ранее создатель C++ Бьерн Страуструп признавался, что его «поразил диапазон применения C++».
«Это большая честь — осознавать, что язык используется повсеместно: в автомобилях, фильмах, играх, медицине, финансах, компьютерах, сельском хозяйстве… Больше всего меня радует, что С++ используют в науке: проект “Геном человека”, фундаментальные исследования в области физики в CERN и других лабораториях, марсоходы», — рассказал Страуструп в интервью онлайн-платформе Codecademy.
Фулстек-разработчик: чем занимается, сколько зарабатывает и где на него учат
Зачем C++ химикам и диджеям
C++ похож на конструктов Lego. На нём можно создавать всё, что угодно. Поэтому им пользуются не только программисты, но и другие специалисты.
Математики решают алгебраические уравнения с помощью численных методов, которые созданы на C++. А физики и химики моделируют на нём среды и физические процессы.
Художники научились писать алгоритмы на C++ для генерации картин и скульптур.
Генеративный дизайн колонны, созданный с помощью цифрового производства, автор: Майкл Хансмайер, aiartists.org
Музыканты используют этот язык для изучения акустических эффектов и даже пишут треки. Диджеи-программисты вживую на сцене создают алгоритмы, которые генерируют музыку. Такие вечеринки называются algorave.
Музыкальная вечеринка с живым кодированием, www.artrabbit.com
Всем кодить! Зачем вашему ребёнку курсы программирования
В чём сила и слабость С++
C++ создавался на базе С, поэтому перенял у него некоторые сильные стороны и получил собственные. C++ отличают:
- полноценное ООП-программирование ;
- обработка исключений ;
- поддержка множества стилей программирования. Разработчик может выбрать, в каком стиле писать программу;
- высокая скорость. Разработка на С++ занимает меньше времени;
- универсальность. С++ можно использовать во многих отраслях — от интернета вещей до веб-разработки и машинного обучения. Написанные на этом языке программы можно запускать на любых платформах;
- высокая производительность. Язык не перегружает программу;
- библиотека стандартных шаблонов (Standard Template Library). Она содержит универсальные шаблоны, которые реализуют широкий спектр алгоритмов и структур данных;
- большое сообщество. Язык постоянно обновляется — новый стандарт выходит каждые три года (C++14, C++17, C++20). Он дополняется библиотеками и шаблонами. О нём написано много книг и самоучителей.
Но у C++ есть недостатки:
- Легко допустить ошибку, которая приведёт к неправильной работе программы или её падению.
- Сложно отследить неправильное использование механизмов ссылок, указателей и перегрузок на этапе поиска ошибок.
- ООП может снизить быстродействие кода.
- Возникают сложности с управлением памятью. С++ позволяет гибко управлять оперативной памятью. Но ошибки могут привести к утечкам или утяжелить приложение.
Новичку будет сложно выучить C++, однако после него проще освоить Java, JavaScript или C#.
Стань фулстек-разработчиком, который умеет всё
Сколько платят разработчикам на C++
По данным сервиса по поиску работы HeadHunter, junior-разработчик может зарабатывать от 40 до 140 тысяч рублей в месяц. Специалисту уровня middle российские работодатели платят от 80 до 250 тысяч рублей, а senior-разработчику — от 100 до 700 тысяч рублей в месяц.
hh.ru Средняя зарплата специалиста со знанием С++ в Москве превышает 120 тысяч рублей, а в Санкт-Петербурге — 100 000 рублей.
Разброс в зарплатах программистов большой. Это зависит от нескольких условий: какой опыт у специалиста, работает он на фрилансе или в офисе, трудоустроен официально или ведёт собственный бизнес, где находится его работодатель — в мегаполисе или в небольшом населённом пункте.
hh.ru
«Не соглашайтесь на зарплату сразу, к концу собеседования она вырастет» – чему учат будущих айтишников
Как учить язык C++
Эксперты прогнозируют, что в ближайшем будущем C++ останется востребованным из-за широты своего применения. Например, с каждым годом становится больше устройств, поддерживающих технологию интернета вещей, а значит, спрос на разработчиков на С++ будет только расти.
Если у вас есть желание освоить этот язык, сейчас самое время приступить к этому. В интернете много ресурсов для самостоятельного изучения, найти их не составит труда. Например, можно воспользоваться «Руководством по языку программированию С++» на сайте о программировании metanit.com. Для тех, кто предпочитает видеоформат, есть обучающие ролики «Основы C++. Программирование для начинающих» от SimpleCode или видеоуроки на английском языке «C++ Programming Language Tutorials» от GeeksforGeeks.
Если вы новичок в программировании, вам будет сложно в одиночку справиться с информацией, которую обрушат на вас учебники и руководства по программированию. Чтобы выучить C++, нужна хорошая техническая база, её логичней всего получить в вузе. Ещё важно постоянно практиковать и решать задачи из всевозможных областей на этом языке.
Такая возможность есть на факультете программирования университета «Синергия». 25% учебного времени студенты изучают теорию, 30% — посвящают практике, а 40% займёт отработка полученных во время учёбы навыков на реальных кейсах. Каждый студент получает стажировку или начинает полноценно работать в компаниях-партнёрах вуза уже с 3 курса. К окончанию обучения студенты имеют портфолио с более чем 20 проектами.
Научись создавать сайты под ключ
Станьте фулстек-разработчиком, который умеет всё. Изучите программирование, технологии веб-разработки, методы создания и продвижения продуктов, работу с базами данных и алгоритмами. Уже во время обучения сможете устроиться на работу и получать от 100 тысяч рублей.