Стоит ли изучать С и С++ после Java
Разбираемся, зачем переходить с Java на С или С++, зачем учить С-языки и какие плюсы и минусы присущи С и С++ по сравнению с Java.
Java — отличный язык программирования, который проверен и временем, и количеством программ, которые на нём написаны. Java часто рекомендуют в качестве первого языка программирования, потому что он решает большинство проблем в написании ПО и потому что он максимально понятен.
Однако у Java есть и некоторые минусы, которые могут натолкнуть вас на мысль о переходе на другой язык программирования.
В этой статье разбираемся, зачем переходить с Java на С или С++, зачем учить именно С-языки и какие плюсы и минусы присущи С и С++ по сравнению с Java.
Зачем переходить на C/C++ после Java
За некоторыми исключениями C++ считается чем-то вроде надстройки Java, но это не значит, что при переходе с Java на C++ будет просто: вам нужно будет изучить новые концепции языка и новый синтаксис.
Основное преимущество C++ заключается в том, что он не обременяет новичка концепциями объектов. Также C++ лучше поддерживает более поздние классы, которые используются в написании операционных систем и построении компиляторов. Написание ОС в Java осложняется тем, что JVM сама по себе является подобием ОС.
Если вам нужно написать код, который управлял бы железом устройства, изучение байт-кода JVM не рекомендуется: он плохо переводится на язык ассемблера. Код Java “живет” в JVM, которая отрывает программу от железа.
Java присуща негибкость: например, код отличается многословным синтаксисом, который нелегко сократить. Код на Java, кажется, имеет другой стиль разработки, который поощряет крупные и сложные решения, тогда как более мелкие и простые были бы эффективнее.
C/C++, с другой стороны, ужасно беспорядочные языки, которые наполнены устаревшими функциями. Хуже того, из-за этого беспорядка можно выстрелить себе в ногу, написав отличный код, но не учтя нюансов его работы, о которых вы никогда и не слышали.
Однако код на C/C++ более гибкий, и как только вы его изучите, вы поймёте, что можете решить проблему множеством способов. В Java при этом обычно поощряется один способ решения задачи.
Кроме того, в процессе изучения C/C++ вы научитесь работе с указателями, стеком, производительностью, изучите процесс компиляции и системное программирование.
Резюмируя, вот причины, по которым вам стоит перейти с Java на C/C++:
- Вам нужно написать программу, которая тесно взаимодействовала бы с железом.
- Вы хотите изучить низкоуровневый язык программирования.
- Вы хотите следить за последними обновлениями в языках программирования.
- Вам хочется писать на “гибком” языке программирования, который предложил бы несколько решений проблемы.
- Вы хотите писать лаконичный код.
Зачем учить С
Обычно С предлагают учить перед С++, потому что кажется, что сперва нужно изучить менее развитый язык и понять концепции низкого уровня вроде malloc и free. И, конечно, эта точка зрения имеет право на жизнь.
К примеру, при изучении С вы сможете понять общие принципы языка, не вдаваясь в сложные концепции вроде классов, объектов, наследования, полиморфизма, шаблонов, обработки исключений и ссылок. Сперва полезнее изучить основные элементы С.
Ещё один существенный плюс С — его низкоуровневость. Если вы собираетесь писать операционную систему или драйвера для устройств, если вы хотите разрабатывать мобильные приложения, стоит присмотреться к С, а не к С++, потому что первый язык существенно выигрывает в производительности и скорости.
То же касается и геймдева: если игра требует быстрых вычислений, С станет отличным инструментом.
Однако у пути от менее развитого языка к более развитому есть существенные минусы. Вы можете обнаружить, что многие выражения C — это худшая версия выражений C++.
C — это низкоуровневый язык, который будет подталкивать вас к использованию небезопасных абстракций низкого уровня. Если вы сможете соблюдать типовую безопасность, проблем не возникнет.
Также способ управления памятью в C сильно отличается от C++, даже несмотря на то, что он построен на низкоуровневых абстракциях. Как ни странно, проще понять управление памятью через конструкции std::move() и std::unique_ptr в С++, чем malloc/free в C. Ещё один нюанс низкоуровневого С — сложность массивов.
Также в C++ есть выражения, которые были заимствованы из более современных языков и которых нет в C.
Оптимальный вариант — начать обучение с C++, а затем немного поработать с C, чтобы понять нюансы работы низкоуровневого языка.
Плюсы в пользу C после Java
- C — относительно простой язык с меньшим количеством функций, чем в C++.
- Изучение C углубит понимание концепций низкоуровневого программирования, таких как управление памятью и указатели.
- Код C легче переносить на разные платформы.
Минусы изучения C после Java
- В С меньше принципов ООП. C — это процедурный язык, и в нем не так сильно используется объектно-ориентированное программирование (ООП), как в Java или C++.
- В языке C отсутствуют современные функции и библиотеки, аналогичные тем, что уже есть в Java и C++.
Зачем учить С++
C++ — это язык, который лучше всего для жесткого контроля над управлением памятью. Также здесь играет огромную роль производительность программ.
С++ отлично подойдёт для высокопроизводительных вычислений, при которых вы не можете позволить себе расходы на память, но вам нужно, чтобы все работало как можно быстрее. C++ лучше подходит для высокопроизводительных численных вычислений, чем Java в целом. При этом учтите, что кривая обучения C++ очень большая.
Java, с другой стороны, не зависит от платформы и имеет большую поддержку библиотек (синтаксический анализ XML и т. д.). Java — это интерпретируемый язык, с которым вам не нужно беспокоиться об управлении памятью.
Недостатком Java является относительно плохая настройка производительности. В Java нет особого контроля над распределением памяти, и часто возникает нехватка высокопроизводительных числовых пакетов.
Что касается синтаксиса, в Java код очень подробный: всё должно быть классом, и каждый класс должен находиться в отдельном файле, и так далее. Однако и синтаксис C++ тоже непрост в изучении, так может быть препятствием в переходу с одного языка на другой.
Плюсы в пользу C++ после Java
- Как и Java, C++ является объектно-ориентированным и поддерживает классы, объекты и наследование.
- C++ предлагает более широкий набор функций, включая низкоуровневые манипуляции с памятью, шаблоны и стандартную библиотеку шаблонов (STL).
- C++ широко используется в разработке игр, системном программировании и приложениях, где производительность критична.
Минусы изучения C++ после Java
- C++ может быть сложнее в изучении из-за обширного набора функций.
- Хотя C++ предлагает контроль над управлением памятью, это также может привести к увеличению количества ошибок.
Заключение
Эта статья была написана на основе советов опытных программистов, которые больше 10 лет кодят на Java и С-языках. Надеемся, материал получился исчерпывающим и помог вам решить, стоит ли переходить с Java на С и С++.
Приглашаем вас присоединиться к дискуссии. Какие аргументы в пользу С/С++ мы забыли упомянуть? Или, может быть, есть и другие языки, которые закрывают проблемы Java, но на которые перейти было бы удобнее, чем на С-языки? Напишите в комментариях! ?
Какие наиболее востребованные направления для разработчика на java [закрыт]
Закрыт. На этот вопрос невозможно дать объективный ответ. Ответы на него в данный момент не принимаются.
Хотите улучшить этот вопрос? Переформулируйте вопрос так, чтобы на него можно было дать ответ, основанный на фактах и цитатах.
Закрыт 3 года назад .
Хочу начать учить java. Подскажите, что учить и направление.
Отслеживать
47.8k 17 17 золотых знаков 56 56 серебряных знаков 100 100 бронзовых знаков
задан 7 мая 2020 в 5:19
28 4 4 бронзовых знака
Сначала core изучите. metanit.com/java/tutorial
7 мая 2020 в 6:00
алгоритмы, структуры данных
7 мая 2020 в 6:40
1 ответ 1
Сортировка: Сброс на вариант по умолчанию
Сразу скажу, что это не волшебный и правильный путь. Я лишь опишу своё видение того, какой путь должен быть пройден. Не претендую на истину в последней инстанции. Я выражаю своё видение.
Буду рад, если в комментариях под моим ответом вы cкоррелируете моё видение.
Начинать с ключевых моментов о том что такое классы, методы, циклы. В общем очень плотно изучать весь JavaCore + Алгоритмы и Структуры данных . В одном ответе даже невозможно описать все темы. Изучение Java Core это довольно долгий длительный процесс в котором как раз вы сможете определиться — хотите ли заниматься Java .
Это не реклама, но для JavaCore рекомендую для изучения JavaRush . Пройдя там курс, вы будете уверенно знать Core , так как проделаете много практических задач. Или же можно основные темы в курсе на Stepik — https://stepik.org/course/187/promo. В любом случае даже если вы начнете со JavaRush данный курс на Stepik тоже обязательно.
После Core надо изучать Java EE — Сервлеты и всё что с ними связано. Написать минимальный web-проект на Java EE + JDBC .
После Java EE надо начинать изучать Hibernate , Spring Core и все основные модули Spring Data , Spring Security , Spring Security , Spring Boot . А так же переделать web-проект, который делали ранее, на Spring .
Ко всему этому надо изучить основы SQL , HTML+CSS .
Это супер минимум тех знаний, которые нужны разработчику.
5 языков, которые следует выучить после Java
Java — один из самых популярных языков современности и прекрасный инструмент для того, чтобы зарабатывать на жизнь. Но даже истинные ценители Java иногда испытывают непреодолимое желание попробовать что-то новое, пусть даже с осознанием того, что в процессе обучения придется плеваться и морщиться.
Вот 5 языков программирования, которые после Java произведут наименьший негативный эффект:
C#
C# — язык, с которым так или иначе сталкивался любой выпускник кафедры программирования (тем более опытный разработчик). Именно поэтому многие согласятся, что, не считая языков, транслируемых в JVM, это наиболее схожий представитель. Кроме того, C# востребован, а это важное условие, если вы собираетесь монетизировать свои знания.
Что общего: очень сложно удержаться от цитирования статьи на Википедии, поэтому вот вам факты.
Оба языка так или иначе являются развитием C++. Более того, создатели C# называют свой язык развитием Java. Кроме того, оба языка строго следуют принципам ООП.
А еще у них похожий синтаксис:
public class HelloWorld
public static void main(String[] args) System.out.println(«Hello World!»);
>
>
// HelloWorld.cs
public class HelloWorld
public static void Main()
System.Console.WriteLine(«Hello World!»);
>
>
И у Java, и у C# типизация строгая, что в известной степени способствует повышению безопасности в области использования памяти. Еще у языков похожие алгоритмы сборки мусора. Ещё один важный схожий момент, прекрасно характеризующий оба языка. Наконец, оба они кроссплатформенны. Изучение этого языка рекомендуем начать с нашего базового интенсива по Си Шарп.
От чего захочется ругаться: Microsoft и естественная завязанность на их экосистему.
Swift
Если вы изучили Java для разработки мобильных приложений, то Swift станет логичным карьерным развитием. Более того, не так давно слухи упорно связывали будущее платформы Android со Swift, однако в итоге Google отстояло свое право на использование Java. Впрочем, кто поставит свой компьютер на то, что в дальнейшем Google не свернет с этого курса? В любом случае, умение писать “правильные” приложения для iOS лишним точно не будет.
Что общего: оба языка статически типизированы, оба имеют наследственную связь с С, схожие принципы наследования, перегрузки методов, протоколы и т.д. В конце-концов, на сегодняшний день это два главных мобильных языковых лагеря.
От чего хочется ругаться: подобно C#, экосистема Apple может вызывать отторжение.
Kotlin
Сахар для синтаксиса — распространенное мнение относительно Kotlin у разработчиков Java, ознакомившихся с ним лишь поверхностно. Куда более совершенный язык и наиболее очевидный преемник Java из существующих — утверждают люди, посвятившие изучению Kotlin чуть больше времени. В любом случае, как бы не сложилось ваше знакомство, равнодушным останитесь вряд ли.
Что общего: создатели не скрывают, что Kotlin является доработкой Java с перспективой полного замещения. То есть фактически Kotlin сочетает всё то, за что вы полюбили Java, но при этом ещё удобнее, безопаснее и функциональнее. Работает с виртуальной машиной JVM.
От чего хочется ругаться: и кому нужна Java, если есть Kotlin?
Python
Изучить Python после Java стоит хотя бы потому, что это просто. Во всех рейтингах, опросах и статьях, посвящённых выбору первого языка программирования, Python неизменно находится в топе.
Что общего: практически ничего, кроме некоторых общих принципов ООП и кроссплатформености.
От чего хочется ругаться: слишком далеко от привычного понимания о программировании.
Go
Возвращаясь к теме возможного отказа Google от Java в своем мобильном будущем, стоит всерьез рассмотреть вариант развития событий, при котором наследником станет Go. Пока что язык здорово проявляет себя в привычной среде Big Data, то есть сегодня, как минимум, Go может послужить полезным расширением для функциональности вашего приложения. Но если Go продолжит развиваться заданными темпами, а Google решится на внутреннюю революцию, то знание этого языка станет не бонусом, а практически необходимостью. Кстати, пару лет назад один из создателей Go, выложил в сеть интересную презентацию с названием “Go для Java-программистов”. Рекомендуется к просмотру.
Что общего: формально общего здесь примерно столько же, сколько и в случае с C#: происхождение от языка C, строгая типизация, алгоритмы очистки памяти, схожие методы, интерфейсы и многое другое. Но, как язык, созданный почти через 15 лет после Java и через 10 после C#, Go он куда совершеннее, функциональнее и перспективнее.
От чего хочется ругаться: несмотря на то, что язык Go не вчера был придуман, при углубленном изучении вы неизбежно столкнетесь с некоторыми недоработками.
Освоить востребованную профессию в Аналитике больших данных можно всего за полтора года на курсах GeekBrains.
Что учить после основ Java?
Всем привет, на данный момент изучаю язык программирования Java, а также начал копатся с базами данных в MySql. Но вот вопрос, что учить дальше? Слышал про JDBC, Spring, Hibernate и в таком роде. Чесно говоря запутался во всём жтом и не знаю куда двигаться сначала. Можете подсказать что учить дальше и как практиковаться во всем этом, так как без опыта никуда?
- Вопрос задан более трёх лет назад
- 5537 просмотров
Комментировать
Решения вопроса 1
Simon Osipov @SimonOsipov
Через баги к коммиту!
Советую обратить внимание на следующую подборку статей.
Ответ написан более трёх лет назад
Ulrik @Ulrik Автор вопроса
Спасибо большое, очень полезные статьи, буду изучать по ним.
Ответы на вопрос 5
Я есть на хабре
Все это — для энтерпрайза.
Если хочется с места в карьер — да, нужно учить и идти работать.
Если хочется изучения именно языка — изучай спецификации и внутреннее устройство, нижележащие технологии, являющиеся общими для любого языка (сети, ос, да даже железо). Попробуй сделать что-нибудь самостоятельно с использованием изученного. А абстракции верхнего уровня уже потом смотри.
Но это не точно
Ответ написан более трёх лет назад
Нравится 2 1 комментарий
Ulrik @Ulrik Автор вопроса
Понял, спасибо.
Game Developer
Устроиться джуниором на работу и уже исходя из рода деятельности изучать то что нужно — spring, hibernate, базы данных и т.д., смотря чем будете заниматься. Изучите шаблоны проектирования.
Ответ написан более трёх лет назад
Нравится 1 1 комментарий
Ulrik @Ulrik Автор вопроса
Хорошо, спасибо за ответ.
Папа Стифлера @PapaStifflera
Родился, вырос.
Русский язык, например.
Ответ написан более трёх лет назад
В вопросе всего 3 ошибки)
Ulrik @Ulrik Автор вопроса
Как скажете.
private_tm @private_tm
англ тогда уже русский для джавера не нужен.
SQL это правильно, для джуна часто требуют знаний баз. А так придумать себе проект, что-то автоматизировать, например забирать данные с одного облака и отправлять в другое, можно придумать много чего интересного, я как-то делал скачиватель музыки для вк, теперь правда от него толку мало, но зато это опыт.
Про Hibernate и JDBS это лишь средства для конекта с БД и после того как выучите Sql это не сложно.
Про Spring — это большой раздел для корпоративной разработки и его постигнуть весь не реально, стоит учить уже на работе по ходу, а на данном этапе советую поиграть с сборщиками проектов(maven, gradle) очень удобные вещи и знание которых тоже будет приветствоваться ну и ещё git(система управления версиями).
А после устраиваться джуном и расти дальше.
p.s. на stepic.org есть хороший курс java по веб-серверному программированию, там кстати разбирается JDBS, Hibernate, сборщики, многопоточность и тп.