Почему все же с++ такой сложный язык?
С++ – сложный язык. Хоть это для каждого по разному и тд, но он очевидно сложнее большинства (всех?) высокоуровневых языков программирования. С другой стороны он очень быстрый и дает тотальный контроль.
Теперь вопрос: должен ли язык быть априори настолько сложным для достижения мощи как в с++ или же так просто исторически сложилось (ака историческая несправедливость)?
T3RM1N4L
09.03.21 14:36:18 MSK
← 1 2 3 4 5 6 7 8 9 10 11 12 →
хорошая новость: C++ сложный только если программист тупой
horado
( 09.03.21 14:39:03 MSK )
На мой взляд, плюсы сложны только в том случае, если ты даже на базовом уровне не понимаешь, как оно работает. Если понимаешь — то ничего «сложного» в нем нет. Ни смотря с чем сравнивать — если с пистоном, где кода в разы меньше и думать не надо, то да, он сложный.
Zhbert ★★★★★
( 09.03.21 14:40:37 MSK )
Потому что развивался эволюционно по мере надобности а не в результате продуманного проектирования и в результате вынуждет блюсти обратную совместимость в том числе и с неудачными паттернами из 80х годов.
thunar ★★★★★
( 09.03.21 14:42:17 MSK )
Последнее исправление: thunar 09.03.21 14:43:44 MSK (всего исправлений: 2)
ПМСМ язык сложный только из-за громкого нытья неосиляторов и чисто идеологических противников языка, по содержанию плюсы сложны ровно столько же сколько любой подобный ООП язык, будь то сишарп или джава, с положительной разницей в том, что даёт возможности более низкоуровневого и ручного управления памятью, в остальном нужен опыт, опыт и ещё раз опыт, а если опыта нет, то код на любом языке будет смердить.
AKonia ★★
( 09.03.21 14:45:07 MSK )
Последнее исправление: AKonia 09.03.21 14:45:45 MSK (всего исправлений: 1)
Теперь вопрос: должен ли язык быть априори настолько сложным для достижения мощи как в с++ или же так просто исторически сложилось (ака историческая несправедливость)?
Rust, который позиционируется как замена C и C++, внезапно, получился тоже достаточно сложным языком программирования с примерно таким же «mindfuck» синтаксисом.
EXL ★★★★★
( 09.03.21 14:47:06 MSK )
Я начинал знакомство с С++ с книги Джеффа Элджера. И после такого впечатляющего введения в предмет он мне не показался особо сложным. Замороченным и мощным — да.
А для современного С++ какие книги почитать, которые обобщают опыт применения языка и дают представление о его выразительных возможностях?
wandrien ★★
( 09.03.21 14:48:13 MSK )
Последнее исправление: wandrien 09.03.21 14:49:32 MSK (всего исправлений: 1)
Ответ на: комментарий от EXL 09.03.21 14:47:06 MSK
Выдвину идею, что простоты всё-таки можно достичь. Но нужно брать лисп. Это избавляет как минимум от сложностей вида «ехал шаблон через шаблон» и закорючечного синтаксиса.
no-such-file ★★★★★
( 09.03.21 14:49:28 MSK )
Ответ на: комментарий от no-such-file 09.03.21 14:49:28 MSK
wandrien ★★
( 09.03.21 14:50:06 MSK )
C++ не сложный, C++ большой
Crocodoom ★★★★★
( 09.03.21 14:51:58 MSK )
Ответ на: комментарий от wandrien 09.03.21 14:50:06 MSK
Суть проблемы КМК в том, что без гомоиконности синтаксис постепенно превращается в фрактал говна. Гомоиконность позволяет сохранить «линейность» сложности путём создания dsl под конкретные нужны вместо многоэтажных шаблонов и т.п.
Т.е. zig и т.п. это всё обычный NIH и не более того.
no-such-file ★★★★★
( 09.03.21 14:52:16 MSK )
Последнее исправление: no-such-file 09.03.21 14:57:46 MSK (всего исправлений: 1)
Ответ на: комментарий от no-such-file 09.03.21 14:49:28 MSK
Так скобки тоже закорючки
ya-betmen ★★★★★
( 09.03.21 14:52:23 MSK )
Ты про какую сложность? Многие под сложностью подразумевают знание всех вариантов выстрела в ногу, что бы их не допускать.
MOPKOBKA ★★★
( 09.03.21 14:52:59 MSK )
Ответ на: комментарий от AKonia 09.03.21 14:45:07 MSK
по содержанию плюсы сложны ровно столько же сколько любой подобный ООП язык, будь то сишарп или джава
Ты забыл про шаблонную магию и всякие compile-time трюки. Подобное уже завезли в Java или C#?
EXL ★★★★★
( 09.03.21 14:53:01 MSK )
Ответ на: комментарий от ya-betmen 09.03.21 14:52:23 MSK
Прочитай предыдущий коммент. Лисп позволяет сохранить минимально необходимое количество закорючек на квадратный метр кода. Вместо усложнения синтаксиса усложняется вкладываемый в код смысл (появляется dsl).
no-such-file ★★★★★
( 09.03.21 14:53:39 MSK )
Последнее исправление: no-such-file 09.03.21 14:54:15 MSK (всего исправлений: 1)
Ответ на: комментарий от wandrien 09.03.21 14:50:06 MSK
EXL ★★★★★
( 09.03.21 14:56:19 MSK )
Ответ на: комментарий от no-such-file 09.03.21 14:49:28 MSK
Лол что? Покажешь как на лиспе будет выглядеть этот код? Что бы читатели оценили читаемость %)
a = b[5] = c[10].e(m+10).g();
MOPKOBKA ★★★
( 09.03.21 14:57:03 MSK )
Он не сложный пока ты пишешь небольшое приложение, которое у тебя укладывается целиком в голове, и пока ты пишешь его один.
Основные проблемы у тебя начинаются когда ты либо забыл что твой старый модуль А что-то не высвобождает сам т.к. это должен делать дергающий его модуль Б, либо когда модуль А писал не ты, а его автор понадеялся на тебя.
rukez ★★★★
( 09.03.21 14:57:05 MSK )
Ответ на: комментарий от EXL 09.03.21 14:56:19 MSK
Первый раз слышу. Посмотрю, что за зверь.
wandrien ★★
( 09.03.21 14:57:54 MSK )
Ответ на: комментарий от no-such-file 09.03.21 14:53:39 MSK
Менять много разных закорючек на много одинаковых, такое себе.
ya-betmen ★★★★★
( 09.03.21 15:00:03 MSK )
Ответ на: комментарий от MOPKOBKA 09.03.21 14:57:03 MSK
Лол что? Покажешь как на лиспе будет выглядеть этот код?
Конкретно к этому коду никаких претензий нет. Но тут и не такой код обсуждается. А вот такой
// linear calculation of n-th Fibonacci number on templates template struct Fib: protected Fib < protected: static const unsigned prev = Fib::value; public: static const unsigned value = Fib::prev + prev; >; template <> struct Fib < protected: static const unsigned prev = 0; public: static const unsigned value = 0; >; template <> struct Fib < protected: static const unsigned prev = 0; public: static const unsigned value = 1; >;
Написать как на лиспе посчитать Фибоначчи при компиляции?
no-such-file ★★★★★
( 09.03.21 15:10:12 MSK )
Ответ на: комментарий от EXL 09.03.21 14:56:19 MSK
Полистал с телефона и не понял. Это реальный проект или прикол?
wandrien ★★
( 09.03.21 15:10:44 MSK )
Ответ на: комментарий от no-such-file 09.03.21 14:49:28 MSK
Глупость какая. В лиспе полно бесполезных скобок, которые усложняют читабельность. Нужно брать Forth.
Aswed ★★★★★
( 09.03.21 15:11:23 MSK )
Ответ на: комментарий от no-such-file 09.03.21 15:10:12 MSK
Шаблоны как бы не для того.
wandrien ★★
( 09.03.21 15:11:31 MSK )
Ответ на: комментарий от wandrien 09.03.21 15:10:44 MSK
Это реальный проект или прикол?
Реальный прикол. Просто для демонстрации о чём идёт разговор.
no-such-file ★★★★★
( 09.03.21 15:12:23 MSK )
Потому что «больше фич богу фич».
Изначально стройная концепция языка уже давно погребена под тоннами новомодных фич/концепций и исправлений старых фич, но выкидывать мусор нельзя — ибо совместимость.
SkyMaverick ★★★★★
( 09.03.21 15:13:18 MSK )
Ответ на: комментарий от horado 09.03.21 14:39:03 MSK
хорошая новость: C++ сложный только если программист тупой
И сразу плохая новость: 99% программистов тупые.
Im_not_a_robot ★★★★★
( 09.03.21 15:13:52 MSK )
Ответ на: комментарий от no-such-file 09.03.21 15:10:12 MSK
А вот по честному, это нужно для чего-то кроме как сказать «зато мы можем сделать так»? Если что, я сам плюсовик и к плюсам отношусь с уважением.
rumgot ★★★★★
( 09.03.21 15:14:12 MSK )
Ответ на: комментарий от EXL 09.03.21 14:53:01 MSK
Ну в джаве свои дженерики есть, на уровне возможности для написания типонезависимого кода они не сильно отличаются от шаблонов(конкретно шаблонная магия это отдельный разговор, которой да у них нет, но и в плюсах никто писать сложно не понуждает и тут встаёт вопрос личной ответственности, т.к. написать плохой код позволяет буквально любой ЯП и чем больше у него возможностей, тем больше возможностей написать в том числе плохо), в шарпе не уверен, но помню и в нём есть свои неприглядные затыки и ограничения.
Единственное, что в джаве и шарпе хорошо по сравнению с плюсами, так это мощная основная библиотека, в остальном языки почти одинаковые.
AKonia ★★
( 09.03.21 15:14:53 MSK )
Ответ на: комментарий от wandrien 09.03.21 15:11:31 MSK
А используются для того. Пример-то простой, обычно там вообще без бутылки не разобраться кто на ком стоял.
no-such-file ★★★★★
( 09.03.21 15:15:08 MSK )
Ответ на: комментарий от thunar 09.03.21 14:42:17 MSK
Потому что развивался эволюционно по мере надобности а не в результате продуманного проектирования и в результате вынуждет блюсти обратную совместимость в том числе и с неудачными паттернами из 80х годов.
Ну вот раст или го, вроде бы, появились в результате продуманного проектирования, причем не быдлокодерами, а очень опытными людьми, но все равно добавляют фичи какие-то.
Im_not_a_robot ★★★★★
( 09.03.21 15:16:08 MSK )
сложнее большинства (всех?) высокоуровневых языков программирования
Нет, не сложнее. От большинства высокоуровневых языков программирования он отличается только бОльшим грузом легаси.
С другой стороны он очень быстрый и дает тотальный контроль.
Нет, не быстрый и нет, не даёт.
Теперь вопрос: должен ли язык быть априори настолько сложным для достижения мощи как в с++ или же так просто исторически сложилось (ака историческая несправедливость)?
С поправкой на то что все твои представления о качестваях языка неверны, то каков язык — исторически сложилось, и это не несправедливость, а естественный результат развития языка при сохранении обратной совместимости. Любой живой язык сравнимого возраста будет иметь такой же багаж легаси.
slovazap ★★★★★
( 09.03.21 15:16:09 MSK )
Ответ на: комментарий от no-such-file 09.03.21 14:49:28 MSK
Он уже научился компилироваться в машинный код без JIT?
X512 ★★★★★
( 09.03.21 15:17:17 MSK )
Ответ на: комментарий от rumgot 09.03.21 15:14:12 MSK
это нужно для чего-то кроме как сказать «зато мы можем сделать так»?
Я хз зачем плюсовики решили использовать шаблоны для чего-то кроме типизированных коллекций, но по факту там просто километровые header-only программы на шаблонах кругом.
no-such-file ★★★★★
( 09.03.21 15:17:31 MSK )
Ответ на: комментарий от Im_not_a_robot 09.03.21 15:13:52 MSK
Печально. Но что если каждый из нас тупой на 99%? Это еще печальнее.
wandrien ★★
( 09.03.21 15:18:06 MSK )
Ответ на: комментарий от X512 09.03.21 15:17:17 MSK
Всегда умел, а что? Там GC обычно, вот это другой вопрос. Но речь про гомоиконность саму по себе, а не в контексте конкретных реализаций. Есть например такой интересный проект https://github.com/carp-lang/Carp. Как rust, только лисп. Сыро, но на уровне идеи отлично.
no-such-file ★★★★★
( 09.03.21 15:20:28 MSK )
Последнее исправление: no-such-file 09.03.21 15:22:57 MSK (всего исправлений: 1)
Наверное сложность заключается во вхождении. Без базовых знаний очень тяжело, невозможно. Но опять же зависит от мотивации, работоспособности, в общем от возраста (за 50 поздно начинать).
anonymous
( 09.03.21 15:27:22 MSK )
Ответ на: комментарий от no-such-file 09.03.21 15:10:12 MSK
Полная чушь. Без малого 10 лет ни один вменяемый человек так не пишет.
Siborgium ★★★★★
( 09.03.21 15:28:30 MSK )
Ответ на: комментарий от wandrien 09.03.21 15:10:44 MSK
Это самый раздутый проект 19/20 года, разрабатываемый бездарным лжецом. Никакого будущего (и настоящего) у него нет.
Siborgium ★★★★★
( 09.03.21 15:31:46 MSK )
Ответ на: комментарий от rukez 09.03.21 14:57:05 MSK
Он не сложный пока ты пишешь небольшое приложение, которое у тебя укладывается целиком в голове, и пока ты пишешь его один.
Никакой разницы с другими языками тут нет.
Основные проблемы у тебя начинаются когда ты либо забыл что твой старый модуль А что-то не высвобождает сам т.к. это должен делать дергающий его модуль Б, либо когда модуль А писал не ты, а его автор понадеялся на тебя.
В программировании нет понятий «забыл» или «понадеялся». Есть чёткие определения ответственности и семантики владения, поэтому всегда абсолютно точно известно кто, что и когда освобождает. Чтобы с этим поиметь проблем, нужно явно приложить силы и вместо программирования заниматься дрочевом. И опять же, C++ тут никакой специфики не несёт — вопросы владения глобальны и от языка не зависят никак. Даже в питоне который за тебя вроде бы делает чуть менее чем всё, если ты не понимаешь семантики владения, ты запросто передашь список (вместо copy или deepcopy) в функцию которая его портит и поломаешь всю программу которая работает с исходным списком.
Язык программирования С++: чем он отличается от С, где его применяют и подходит ли он для старта
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++ сложный язык?
Да. Для новичка будет уж слишком сложно. Вам для начала нужно выучить основы, а их проще и быстрее учить на более высокоуровневых языках, таких как python, js и даже C# и тд. Если хотите побыстрее войти в сферу и не боитесь набить шишек, то для начала выберите направление, а там уже пробуйте языки или читайте их обзоры. Лучше начать изучать программирование с практики. Поковыряться в языке, его синтаксисе, а потом уже можно книжку найти или почитать руководство. Какое направление в разработке Вас вообще интересует? Может дам конкретный совет и выбор.
Yaroslav DolhikhУченик (107) 2 года назад
Так в том то и дело. хз, какое направление мне интересно. Для меня это тёмный лес. Я типо сварщик, мне 29, не глупый, хочу переквалифицироваться. а то у меня уже роботы часть работы забрали (оно с одной стороны хорошо, ну типо меньше сварки с другой стороны, лет так через 5 -10, если не буду знать англ. И какой нить язык програмирования, то вообще останусь без работы судя по всему. . И нужно что то решать.
Вообще люблю игры. Мне наверное было бы интересно заняться в сфере разработки игр. Мобильные, консольные.
Gene Taliya Профи (901) Yaroslav Dolhikh, изучайте движок «Unity» и язык программирования C#. Там можно и для ПК, и для консолей, и на мобилки. Если всё же выберите C++, то учите его и движок Unreal Engine.
Остальные ответы
В части ООП сложный.
Язык промышленного уровня.
Чистый Си — прекрасен.
Если вы новичек — питон очень хорошо.
Суть не в ЯП, можно выбрать любой и выучить за месяц другой ЯП и в этом не имеет разницы вплоть до удобства, суть в том как вы понимаете обучение построение кода и познание ООП. Ответ на новичков.
Gene TaliyaПрофи (901) 2 года назад
ну всё же суть, как по мне. Лучше быстрее учиться и вникать, чем исправлять баги))) Хотя я тоже, идиот, с плюсов начал.
Пользователь удаленУченик (242) 2 года назад
Ваше решение считаю хорошим. Чисто я с кумира начинал программировать, а там на Котлин перешёл))
Пользователь удаленУченик (242) 2 года назад
А для разминки без разницы беру там Lua, MoonScript))))
Пользователь удаленУченик (242) 2 года назад
Если любите быть Сисадмином, то почему бы не си++
Gene Taliya Профи (901) MacFantoms YT, я сейчас снова шишки буду набивать, буду учить скалу. Никогда не изучал функциональные языки. Просто для интереса решил выучить)))
Для новичка — сложный до абсолюта
Сложный. На большинстве языков можно писать «как-то» и при этом реализовать любые (новичковые) задачи. На C++ писать «как-то» не выйдет, нужен профессиональный подход, которым мало кто владеет (даже из тех, кто якобы знает C++, большинство не профессионалы).
К тому же — относительно мало вакансий, поэтому ценятся либо специалисты с официальным опытом и т. д. (стать сразу сеньором, а потом лидом), либо умные, трудолюбивые, талантливые самоучки, которые к тому же ради 50 т. р в месяц (а на двух работах — 100 т. р.) готовы стать рабами, делая всю работу за сеньора и тимлида.
YndelphoГений (94896) 2 года назад
Сначала Си
Основы выучить не так сложно, но вот когда дело дойдёт до указателей, классов, шаблонов, то там нюансов выше крыши.
Учи спокойно, все фигня. Если нормально выучить, все прочие языки станут как детские игрушки.)
На мой (чисто субъективный ) взгляд самый «простой» — Python, лучше всего с него и начинать, попутно осваивая всякие HTML, CSS, и прочие SQL ы )
Григорий кувырлоУченик (121) 2 года назад
А может вёрстка и стили человеку не нужны?
Denis_69 Искусственный Интеллект (144447) Григорий кувырло, возможно глубокие познания и не нужны, но иметь общее представление о том, что это такое, как устроено и как работает, просто необходимо, без этого сейчас никуда .
Не рекомендую игры, если надо срочно начать зарабатывать. Тут лучше подойдёт разработка чат ботов и сайтов, этому гораздо быстрее учатся. Игры требуют серьёзных познаний в математике и физике
АндрейМудрец (15046) 2 года назад
А каким хером здесь физика? Для нормального программирования нужно знание дискретной математики и её разделов + алгоритмическая база
Если использовать чисто C++ вещи типа iostream, STL, то очень сложный.
Люди забывают что это СИ, но с кое какими плюсами. Си гораздо проще и эту простоту нужно использовать.
начни с изучения английского, как только научишься свободно читать, переходи к изучению программирования на английском языке
Простите, сомневаюсь что давшие ответы программисты, сидят на «ответах»
_НЕТУЖАЛЬ_Высший разум (433197) 2 года назад
чмошник у тебя спрятался за ширинкой.
Yndelpho Гений (94896) К счастью, у меня него нет
_НЕТУЖАЛЬ_Высший разум (433197) 2 года назад
Ты гений персика.
Yndelpho Гений (94896) Ты даже на ответы на комменты не туда лепишь. Куда тебе кодить, старикашка? Ты и 2+2 сложить не можешь. Забудь, это не твоё
Развеиваем мифы о С++
За 38 лет существования C++ о нём появилось много мифов. В этой статье мы разберём некоторые из них, чтобы понять, есть ли смысл им верить.
За 38 лет существования C++ о нём появилось много мифов. В этой статье вместе с курсом Яндекс.Практикума «Разработчик С++» мы разберём некоторые из этих мифов, чтобы понять, почему так и есть ли смысл им верить.
Миф №1: С++ — низкоуровневый язык
Это правда только наполовину, потому что C++ — очень гибкий язык. Он совмещает в себе качества как низкоуровневых, так и высокоуровневых языков.
Уровень языка говорит о его схожести с естественными языками. Низкоуровневые языки больше похожи на машинные — в них даже самые простые операции достаточно сложны. Высокоуровневые языки больше похожи на человеческие — в них все инструкции могут быть понятны даже человеку без подготовки.
Например, на C++ вы можете написать процедурный низкоуровневый код, обращаясь к памяти напрямую. Или можете использовать высокоуровневые концепции вроде ООП и функционального программирования.
Для чего хорош C++?
Императивное программирование:
int v = ; int len = (sizeof(v)/sizeof(*v)); int sum = 0; for(int i = 0; i < len; i++) < sum += v[i]; >//sum == 55 int product = 1; for(int i = 0; i < len; i++) < product *= v[i]; >//product == 3628800
Функциональное (декларативное) программирование:
//Данные для вычислений std::vector v; //Функция accumulate() принимает первое и последнее значение массива, и начальное число int sum = std::accumulate(v.begin(), v.end(), 0); // Результат ‒ 55 //Та же функция может проделать и другие операции с данными. //Для этого нужно всего лишь передать нужный алгоритм int product = std::accumulate(v.begin(), v.end(), 1, std::multiplies()); //Результат ‒ 3628800
Оба фрагмента кода решают одни и те же задачи — складывают и умножают элементы массива. При этом при императивном подходе разработчик пишет чёткие инструкции: какие шаги компьютеру нужно выполнить, чтобы решить задачу. При декларативном подходе можно просто описать результат, который вы хотите получить.
То есть C++ позволяет работать сразу в нескольких парадигмах программирования, что совсем не вяжется с понятием «низкоуровневый язык».
Парадигма программирования — это набор идей и понятий, которые определяют стиль написания программ. Почитайте, что об этом говорят эксперты.
Миф №2: C++ подходит только для написания низкоуровневых программ
Этот миф вытекает из предыдущего. C++ даёт разработчикам столько возможностей, что на нём можно писать что угодно: от драйверов до интерфейсов сайтов с помощью WebAssembly. Также он не только универсальный, но и производительный.
Вот только пишутся программы на C++ дольше, чем на более специализированных языках. Разработчик на JavaScript может потратить больше времени на выбор фреймворка, чем на создание самого сайта. Библиотеки для Python позволяют написать нейросеть всего на 11 строках кода. В C++, конечно, тоже есть такие инструменты, но заточены они на производительность, а не универсальность и скорость разработки.
Библиотека — набор инструментов и готовых функций для языка программирования.
Фреймворк — готовый каркас приложения.
Поэтому C++ чаще используется там, где важна эффективность. Например, на нём хотя бы частично написаны все современные операционные системы, фото- и видеоредакторы, программы для работы с 3D-графикой, игры, библиотеки для машинного обучения.
Сам же язык можно использовать для любых задач. Просто во многих сферах важнее выпускать приложения чаще, пусть и со сниженной производительностью.
Миф №3: Язык не развивается
В последние годы у C++ появились новые конкуренты — Rust и GoLang. Из-за этого кажется, что C++ сдал позиции и вообще это какой-то древний язык, от которого пора отказаться. Однако он ещё очень долго будет популярен по нескольким причинам:
- На нём уже очень много всего написано, в том числе то, что вы используете каждый день: браузеры Chrome и Firefox, Windows, Linux, OS X, Android, iOS. Всё это нужно поддерживать и развивать. Следовательно, нужно больше C++-разработчиков, а сам язык должен развиваться.
- Язык хорошо зарекомендовал себя, а вот его конкуренты пока слишком молоды. Они понравились многим разработчикам, но пройдут годы, прежде чем они смогут сравняться с C++ по количеству новых и существующих проектов.
Что же касается развития, то разработчики постоянно обновляют популярные библиотеки и пишут новые. Так Qt (один из самых популярных инструментов для работы с графикой) получил новую версию в марте 2021 года, а относительно молодой TensorFlow (библиотека машинного обучения, первый релиз выпущен в 2015-м) — в декабре 2020-го. Стандарт языка тоже обновляется: C++20 был принят в сентябре 2020 года. Следующий планируют принять в 2023 году.
Миф №4: C++ — очень сложный язык
Частично это правда, потому что в C++ нет многих удобств, которые есть в более высокоуровневых языках. Например, разработчику на плюсах приходится самому работать с памятью, беспокоиться о том, чтобы не было утечек, собирать мусор и так далее.
Сборка мусора — освобождение памяти, которая больше не понадобится для работы программы. Это удобнее для программиста, но требует больше ресурсов для работы приложения.
С другой стороны, в C++ есть много высокоуровневых инструментов, конструкций и библиотек, что позволяет значительно ускорить разработку. Например, можно достаточно быстро создать игру с помощью Unreal Engine, а не мучиться с написанием собственного движка. Работа с базами данных упрощается SOCI, а математические операции — с помощью целого ряда библиотек и того же функционального программирования.
Сложность изучения C++ главным образом заключается в более высоком пороге входа. Перед тем как вы сможете использовать даже самые продвинутые и высокоуровневые библиотеки, придётся многому научиться.
Также язык требует от разработчика более продвинутого знания об устройстве компьютера, чем другие языки вроде JavaScript, на котором можно просто начать писать.
Тема сложности C++ достаточно часто обсуждается, и однозначно ответить, сложный ли он, нельзя. Например, в статье «Почему никому не нравится язык программирования C++?» собраны мнения разных разработчиков с сайта Quora об этом языке. Кто-то говорит, что C++ невероятно сложный, а кто-то — что совсем несложный, но очень обширный и не терпящий ошибок.
В обсуждении на StackOverflow большинство считает, что язык настолько сложный, что изучив его, можно без труда выучить любой другой язык. Один из участников дискуссии даже смог получить сертификат по Java, не зная о нём вообще ничего.
Миф №5: C++ — (не) лучший язык для новичков
Тут мнения тоже достаточно заметно расходятся.
Кто-то говорит, что лучше начать с простого языка, чтобы втянуться в процесс и сразу что-то создавать. Глубокие знания можно будет получить позже, да и вообще они никогда не понадобятся большинству разработчиков. Зачем понимать принципы работы компьютера, если ты сайтики создаёшь?
Другие говорят, что все, кто не знают, как работает процессор, не достойны звания программиста. И вообще, если начать с простого языка, то привыкнешь к простоте и никогда не сможешь стать настоящим профессионалом. Нужно начинать с C++, а лучше с C. А ещё лучше с Ассемблера или двоичного кода.
Люди пишут об этом целые статьи и устраивают в комментариях настоящие войны:
- Почему Python плохой первый язык и нужно учить C или Assembler,
- Часовое выступление на CppCon2015 «Перестаньте учить C»,
- Почему С++ хороший первый язык,
- Как стать профессиональным веб-разработчиком (автор советует начинать с самого простого, а сложное учить, когда оно понадобится).
Доля правды есть в словах обеих сторон. C++ может отпугнуть новичков своей сложностью, но то же самое может сделать и любой другой язык. Поэтому лучше выбрать сферу, которая будет по душе, и развиваться в ней. А язык стоит расценивать только как инструмент, его изучение не должно быть самоцелью.
Следите за новыми постами по любимым темам
Подпишитесь на интересующие вас теги, чтобы следить за новыми постами и быть в курсе событий.