Java или C++ в качестве первого языка. Что выбрать? — Хабр Q&A
Возможно, хорошим вариантом будет Rust . Это молодой язык, и не факт, что он пригодится вам в ближайшие пару лет, но для обучения у него есть несколько преимуществ:- С одной стороны, он предсказуем, как и C++, т.е. обычно достаточно очевидно, как будет выполняться тот или иной кусок кода на низком уровне. С другой, он достаточно прост (ненамного сложнее JAVA) и автоматизирует управление ресурсами (без сборщика мусора, но так даже лучше).
- Как и в C++, можно использовать абстракции с нулевой стоимостью (чего в Java нет в принципе), и для этого не требуется сложный шаблонный код.
- Компилятор обругает вас за допущенные ошибки. Если не обругает компилятор — в большинстве случаев будет ошибка времени выполнения. C++ тоже часто находит ошибки во время компиляции, но в Rust это реализовано лучше, при этом на C++ сложнее искать ошибки времени выполнения. В JAVA ошибки по большей части возникают во время выполнения, что не очень хорошо для обучения — многие ошибки на простых примерах просто не возникают.
- Модель управления ресурсами изначально учитывает многопоточность, что снижает вероятность возникновения ошибок в многопоточных программах.
- Есть стандартный менеджер пакетов и система сборки, чего сильно не хватает C++. У Java тоже есть неплохие менеджеры пакетов, но их несколько, пусть и совместимых, что иногда осложняет жизнь.
- У него неплохой стандартный учебник, в том числе на русском, в который я в любом случае рекомендую заглянуть: rurust.github.io/rust_book_ru/README.html . Правда, у С++ и Java тоже с этим особых проблем нет, разве что сложнее выбрать подходящий.
Если вы всё же выбираете между C++ и Java — выбор в основном должен зависеть от того, сколько времени вы готовы потратить на изучение. Для изучения C++ нужно несколько лет (существует мнение, что около 5 лет), при этом нет смысла изучать C++ на базовом уровне — его достоинства проявляются только при хорошем знании языка. Java проще для изучения, довольно быстро можно достичь уровня, необходимого для устройства на работу, многие перспективные инструменты изначально разрабатываются на/для Java (например, экосистема BigData сейчас вертится вокруг Java и Scala, многие СУБД тоже ориентированы на Java). Но в случае выбора другого языка для изучения Java потом при необходимости можно будет быстро освоить, да и популярные инструменты обычно предоставляют интерфейсы для других языков, так что ориентироваться на конкретные инструменты не стоит.
P.S. Я сам программирую на C++, Java (а чаще — Scala) использую только для научной работы (BigData и т.п.), и в целом C++ мне нравится больше. Но в будущем планирую перейти на Rust в качестве основного языка.
Java или javascript с чего начать
В этой статье мы рассмотрим основные черты этих языков, показав, что общее название — не более, чем начальная задумка разработчиков.
Язык Java, в процессе разработки носивший названия «Oak» и «Green», официально появился на свет в 1995 году. Он заимствовал многое от C/C++, однако продвигал новые концепции, включавшие в себя легкое и безопасное программирование. Поэтому изначально именно Java воспринимался как наследник этих популярнейших языков.
Основной принцип работы кода на Java — возможность программисту писать код один раз, чтобы он мог работать где угодно. Вместо компиляции различных файлов под каждую платформу, здесь создаётся JAR-файл. И если система поддерживает Java, то файл исполняется.
Для реализации такой задумки используется JVM, или Виртуальная машина Java. Это ничто иное, как набор инструкций, определяющих компиляцию в зависимости от платформы и дальнейшее исполнение кода. Такой принцип носит название just-in-time.
Хотите разобраться в Java? Рекомендуем начать с бесплатного онлайн-интенсива по Java для чайников.
Основные области применения Java:
- Android-приложения. Это официальный язык для самой популярной ОС на сегодняшний день. Это означает, что для получения лучших результатов и использования максимального количества возможностей, Java — идеальный язык
- Десктопные приложения. Кроме того, Java — один из инструментов для создания кроссплатформенного ПО. JavaFX и SWT вам в помощь.
- Системы предприятий. В отраслях, связанных с обработкой личных данных (банковские операции, финансы, торговля), Java используется как надёжный, простой в обслуживании и быстрый язык.
- Встроенные системы. Смарт-часы, некоторые контроллеры, светофоры и даже отдельные системы гибридных автомобилей используют Java. Самый актуальный вектор развития — Internet of Things.
- Научный исследования. Куда большую популярность здесь имеют MATLAB и Python, но и Java прекрасно справляется со сложными задачами, вроде обработки языка или управления искусственным интеллектом.
JavaScript
JavaScript был разработан на фоне огромных ограничений HTML. В Netscape Communications предвидели скорую потребность в динамичном функциональном вебе, поэтому всего за 10 дней они создали язык под названием LiveScript в том же 1995 году.
Позднее разработчикам пришла мысль дополнить функциональность с использованием Java. Именно так появилось окончательное название и схожий синтаксис. Правда на этом любые сходства заканчиваются. По понятным причинам, к тому времени Java в вебе еще не запускался, в то время как JavaScript быстро завоевал популярность, став вместе с HTML и CSS главными столпами современного интернета.
В отличии от Java, код которого компилируется, код JavaScript интерпретируется. То есть когда вы посещаете веб-страницу, ваш браузер получает код, написанный на JavaScript, и сразу же исполняет его. Для этого используются специальные движки, каждый браузер при этом использует свой: V8 — Chrome, SpiderMonkey — Firefox, Chakra — Edge и так далее.
Однако сегодня JavaScript больше не является исключительно браузерным инструментом. За более, чем два десятка лет с момента своего появления, JavaScript утвердился одного из самых гибких языков программирования, который применяется и в других областях:
- Веб-приложения. JavaScript невероятно хорош, как для разработки фронтенда, так и бэкенда. В первом случае, это влечет за собой манипуляции с DOM на стороне браузера (анимация, вставки данных, обновления), во втором — на стороне сервера (маршрутизация, обработка данных, взаимодействие с БД).
- Мобильные приложения. Такие инструменты, как React Native и PhoneGap, позволяют вам создавать полноценные мобильные приложения, используя лишь JavaScript. Подобные фреймворки делятся на два типа: те, что транслируют JavaScript в собственный код, и те, что сами используют движок JavaScript.
- Настольные приложения. Можно вытащить JavaScript в оффлайн, используя такие фреймворки, как Electron и NE.js. Движок при этом упаковывается в исполняемый файл, а в открываемом окне исполняется HTML/CSS/JS код.
Так что выбрать?
Учитывая современный уровень развития обоих языков, фактически выбор сводится к заданным требованиям производительности, функциональности и скорости исполнения.
Java чуть более сложный язык с большим количеством ограничений. Java-приложения менее склонны к ошибкам и в целом более функциональны, чем те, что созданы с использованием JavaScript. Но это имеет и свою цену, главная из которых — время и сложность разработки. JavaScript-приложения потребуют от вас меньше усилий, но исполняться они будут дольше, ошибок при отладке выскочит больше, да и сложный код вам писать вряд ли захочется.
Поэтому для веба лучше использовать JavaScript, а разработку сложного комплексного ПО лучше оставить Java. Что касается создания десктопных и мобильных приложений, то здесь дело вкуса. Я бы рекомендовал использовать Java, так как это обеспечит чистоту кода м меньшее количество ошибок. С другой стороны, JavaScript тоже для этого подойдет.
Если вы взглянете на статистику GitHub, то увидите, что JavaScript и Java — два гегемона современного мира программирования, опережая C/C++, Python, PHP и Ruby. Несмотря на то, что их имена схожи, что JavaScript, судя по названию, более легковесная, понятная, удобная версия Java, между ними всё же почти нет ничего общего.
В этой статье мы рассмотрим основные черты этих языков, показав, что общее название — не более, чем начальная задумка разработчиков.
Язык Java, в процессе разработки носивший названия «Oak» и «Green», официально появился на свет в 1995 году. Он заимствовал многое от C/C++, однако продвигал новые концепции, включавшие в себя легкое и безопасное программирование. Поэтому изначально именно Java воспринимался как наследник этих популярнейших языков.
Основной принцип работы кода на Java — возможность программисту писать код один раз, чтобы он мог работать где угодно. Вместо компиляции различных файлов под каждую платформу, здесь создаётся JAR-файл. И если система поддерживает Java, то файл исполняется.
Для реализации такой задумки используется JVM, или Виртуальная машина Java. Это ничто иное, как набор инструкций, определяющих компиляцию в зависимости от платформы и дальнейшее исполнение кода. Такой принцип носит название just-in-time.
Хотите разобраться в Java? Рекомендуем начать с бесплатного онлайн-интенсива по Java для чайников.
Основные области применения Java:
- Android-приложения. Это официальный язык для самой популярной ОС на сегодняшний день. Это означает, что для получения лучших результатов и использования максимального количества возможностей, Java — идеальный язык
- Десктопные приложения. Кроме того, Java — один из инструментов для создания кроссплатформенного ПО. JavaFX и SWT вам в помощь.
- Системы предприятий. В отраслях, связанных с обработкой личных данных (банковские операции, финансы, торговля), Java используется как надёжный, простой в обслуживании и быстрый язык.
- Встроенные системы. Смарт-часы, некоторые контроллеры, светофоры и даже отдельные системы гибридных автомобилей используют Java. Самый актуальный вектор развития — Internet of Things.
- Научный исследования. Куда большую популярность здесь имеют MATLAB и Python, но и Java прекрасно справляется со сложными задачами, вроде обработки языка или управления искусственным интеллектом.
JavaScript
JavaScript был разработан на фоне огромных ограничений HTML. В Netscape Communications предвидели скорую потребность в динамичном функциональном вебе, поэтому всего за 10 дней они создали язык под названием LiveScript в том же 1995 году.
Позднее разработчикам пришла мысль дополнить функциональность с использованием Java. Именно так появилось окончательное название и схожий синтаксис. Правда на этом любые сходства заканчиваются. По понятным причинам, к тому времени Java в вебе еще не запускался, в то время как JavaScript быстро завоевал популярность, став вместе с HTML и CSS главными столпами современного интернета.
В отличии от Java, код которого компилируется, код JavaScript интерпретируется. То есть когда вы посещаете веб-страницу, ваш браузер получает код, написанный на JavaScript, и сразу же исполняет его. Для этого используются специальные движки, каждый браузер при этом использует свой: V8 — Chrome, SpiderMonkey — Firefox, Chakra — Edge и так далее.
Однако сегодня JavaScript больше не является исключительно браузерным инструментом. За более, чем два десятка лет с момента своего появления, JavaScript утвердился одного из самых гибких языков программирования, который применяется и в других областях:
- Веб-приложения. JavaScript невероятно хорош, как для разработки фронтенда, так и бэкенда. В первом случае, это влечет за собой манипуляции с DOM на стороне браузера (анимация, вставки данных, обновления), во втором — на стороне сервера (маршрутизация, обработка данных, взаимодействие с БД).
- Мобильные приложения. Такие инструменты, как React Native и PhoneGap, позволяют вам создавать полноценные мобильные приложения, используя лишь JavaScript. Подобные фреймворки делятся на два типа: те, что транслируют JavaScript в собственный код, и те, что сами используют движок JavaScript.
- Настольные приложения. Можно вытащить JavaScript в оффлайн, используя такие фреймворки, как Electron и NE.js. Движок при этом упаковывается в исполняемый файл, а в открываемом окне исполняется HTML/CSS/JS код.
Так что выбрать?
Учитывая современный уровень развития обоих языков, фактически выбор сводится к заданным требованиям производительности, функциональности и скорости исполнения.
Java чуть более сложный язык с большим количеством ограничений. Java-приложения менее склонны к ошибкам и в целом более функциональны, чем те, что созданы с использованием JavaScript. Но это имеет и свою цену, главная из которых — время и сложность разработки. JavaScript-приложения потребуют от вас меньше усилий, но исполняться они будут дольше, ошибок при отладке выскочит больше, да и сложный код вам писать вряд ли захочется.
Поэтому для веба лучше использовать JavaScript, а разработку сложного комплексного ПО лучше оставить Java. Что касается создания десктопных и мобильных приложений, то здесь дело вкуса. Я бы рекомендовал использовать Java, так как это обеспечит чистоту кода м меньшее количество ошибок. С другой стороны, JavaScript тоже для этого подойдет.
JavaScript не применяется для создания апплетов или автономных приложений. Чаще всего JavaScript находится внутри документов HTML и обеспечивает уровень взаимодействия с веб-страницами, которого невозможно достичь с помощью простых документов HTML.
Основные различия Java и JavaScript:
Java представляет собой объектно-ориентированный язык программирования, а JavaScript — это объектно-ор иентированный язык создания сценариев.
Java используется для создания приложений, которые запускаются на виртуальных машинах или в браузерах, а код JavaScript выполняется только в браузере.
Код Java необходимо скомпилировать, а код JavaScript используется в текстовом виде. Для них требуются различные подключаемые модули.
Java и JavaScript — это не одно и тоже! Теперь вы знаете главную тайну масонов. В этой статье я хочу поделиться с вами мыслями и соображениями о языке JavaScript через глаза Java — разработчика. Проведу сравнение структур данных, типов, функций, объектов, классов и других общих возможностей языков Java и JavaScript.
Фундамент
JavaScript — это интерпретируемый, скриптовый язык для написания сценариев. Это значит, что тот код, который вы напишите, будет выполняться построчно, от инструкции в инструкции, от скрипта к скрипту. Java — язык компилируемый, это значит, что перед стартом программы на Java, компилятор должен перевести весь код, написанный вами, в специальный машинный код, понятный для JVM — bytecode.
Неудобства для Java-разработчика, начавшего писать на JS, связанные с этими отличиями будут следующие:
- Перед запуском компиляции вашего кода, написанного на Java, компилятор проведет за вас синтаксический и семантический анализ, и в случае проблем — оповестит вас об этом. Получается, что вы имеете возможность узнать об ошибке еще до запуска приложения. В JS, в силу отсутствия компилятора, такой проверки нет. И ошибки, допущенные вами в момент написания кода будут обнаружены только после запуска скрипта.
- Следующее неудобство возможно только для версии JS до ES5. Т.к. JavaScript выполняется построчно стиль написания функций, вызывающие другие функции, будет отличаться от принципов Чистого кода «дядюшки» Боба, проповедуемого для написания программ на Java. В JS, если из функции foo() необходимо вызвать функцию bar(), вы должны определить bar() до foo(). Если сделать наоборот, как в Java — приложениях, то вызов может закончится неудачно в некоторых старых браузерах.
Переменные и их типы
JavaScript — слабо типизированный язык, в отличии от Java. С одной стороны, это дает больше гибкости, с другой — больше возможностей совершить выстрел в ногу. Для объявления переменной в JS достаточно использовать ключевое слово var, после которого указать имя переменной и, если необходимо, значение. На практике же необязательно даже использовать ключевое слово var.
Теперь о типах. В JS для целочисленных и чисел с плавающей точкой нет разных типов. Они объединены в типе number.String, boolean такие же как и в Java. В JS есть тип Object. Если в Java это суперкласс всех классов, то в JS это просто один из типов.
Java-разработчика ничего не должно смущать. Теперь давайте попробуем провести операции между объектами разных типов и посмотрим что получится.
Некоторые результаты могут немного смутить Java-разработчика. Например, возможность использовать тип boolean таким образом: true && 1 и при этом получать какой-то результат. В Java невозможно провести такую операцию т.к. компилятор выдаст ошибку о том, что нельзя использовать оператор && с типами не boolean. Теперь обратим внимание на еще одно отличие JS и Java: операторы === и !==. Это операции сравнения, необходимые слабо типизированному языку, такому как JS. === — вернет true, если сравниваемые объекты равны по значению и их типы совпадают. !==, соответственно, вернет true, если сравниваемые объекты не равны по значению или их типы не совпадают. Рассмотрим несколько примеров:
Функции
В JS, так же как и в Java, функции могут возвращать/не возвращать значение, быть с аргументами и без. Вызвать функцию можно как в коде JS, как было показано в примере выше, так и реакцией на определенное событие на элементе html-разметки.
При нажатии на кнопку на странице будет напечатано «Calling foo» как результат вызова функции. Теперь о странностях на которые может обратить внимания Java-разработчик. Вернемся к примеру выше, где функция foo() вызывает в себе функцию bar() — которая используется только как внутренняя функция. По идеи мы ожидаем того, что ее можно сделать приватной. Но в JS нет никаких селекторов доступа. Нет возможности сделать поле private простым добавлением этого слова перед объявлением функции. Пойдем дальше. Создадим объект — экземпляр класса со своими полями и одним методом.
Если смотреть на этот код глазами Java-разработчика, то можно отметить, что функция Person — является конструктором объектов класса Person и определением полей, и методов, входящих в класс. Функция getLocation() является функцией класса Person. Внутри нее мы используем обращение к полям экземпляра класса this.person и this.age. Логично, что эта функция, использующая текущей экземпляр класса Person, должна работать только с ним и последний вызов функции getLocation() не должен работать. Но, в JS это нормально, потому что понятия класса, функции, методов класса размыты. Слабая типизация во всем. Выполнив этот скрипт вы получите следующий вывод в окне браузера:
Однако, переписав код следующим образом, определив функцию внутри класса, ее вызов не для экземпляра класса будет недоступен:
Последний вызов приведет к ошибке, т.к. функция getLocation() не определена. Получается что хоть в JS и нет модификаторов доступа, но есть область видимости функций и переменных, управляемая с помощью фигурных скобок. JavaScript прекрасен огромным количеством вариантов совершить выстрел себе в ногу.
Массивы
Когда мы говорим о массивах, то представляем структуру данных, хранящую однотипные элементы, доступ к которым осуществляется по индексу. Это в Java. Когда же дело касается JS и его слабой типизации, то в дело вступает настоящая анархия. В следующим примере мы создаем 4 массива. В первом элементы разных типов, во втором только числа, в третьем boolean, в четвертом boolean и number:
После выполнения скрипта мы увидим тип каждого элемента каждого массива и сумму двух первых цифр из массива чисел.
Вывод
При первом касании с языком JavaScript у Java — разработчика могут возникнуть все вышеперечисленные замечания и вопросы. При моем первом знакомстве с JS я испытывал не самые веселые эмоции. Скорее это было вот так: «Что за . ». Многие отличия и не понимания кроются в разнице типизаций двух языков. Я не знаю зачем JS нужна слабая типизация.
Возможно, есть выгоды почему так было сделано. Если вы знаете ответ, пишите в комментариях.
Да, есть TypeScript, который вроде как является типизированным, но в итоге он же будет переведен все в тот же JS. Лично я не сторонник слабой типизации, но мой коллега, недавно попробовавший JavaScript, почему-то был в восторге от нее. Возможно, это дело вкуса. А как считаете вы, что лучше слабая или сильная типизация?
Рекомендуем к прочтению
C# против Java: какой язык программирования общего назначения выбрать?
C# vs Java – какой из общецелевых, объектно-ориентированных языков программирования лучше всего подойдет вам для работы? Они оба имеют обширные библиотеки, которые можно использовать для создания приложений для ПК, веб, мобильных устройств и других платформ. У обоих есть большие сообщества восторженных поклонников и много онлайн-поддержки.
Имея так много общего, выбор правильного языка требует более тонкого, тщательного подхода. Давайте подробнее рассмотрим сходства и различия между C# и Java.
Что такое C#?
C# – это язык программирования общего назначения, который впервые появился в 2000 году в рамках инициативы Microsoft .NET. Он был разработан для общей языковой инфраструктуры (CLI) – открытой спецификации, разработанной Microsoft и стандартизированной ISO и ECMA. Приложения C# скомпилированы в байт-код, который может запускаться при реализации CLI.
Что такое JAVA?
Java, первоначально выпущенный Sun Microsystems в 1995 году, является языком программирования общего назначения, который был разработан с конкретной целью, позволяющей разработчикам “write once, run anywhere”, то есть написать код единожды и запускать в любом месте. Java-приложения скомпилированы в байт-код, который может запускаться при реализации виртуальной машины Java (JVM). Подобно CLI, JVM помогает преодолеть разрыв между исходным кодом и 1 и 0, которые понимает компьютер.
C# VS. JAVA: ОСНОВНЫЕ СХОДСТВА
Появление как Java, так и C#, тесно связано с переходом от низкоуровневых языков программирования, таких как языки программирования C++, к языкам более высокого уровня, которые компилируются в байт-код. Байт-код можно запустить на виртуальной машине. С этим связан ряд преимуществ, в первую очередь, возможность написания кода, который будет понятен человеку и будет работать на любой аппаратной архитектуре, на которой установлена виртуальная машина. Если отбросить синтаксические причуды в сторону, то неудивительно, что эти два подобные между собой языка так популярны для разработчиков приложений. Вот несколько основных сходств между C# и Java:
- Безопасность типов. Ошибка типа возникает, когда тип данных одного объекта ошибочно назначается другому объекту, создавая непреднамеренные побочные эффекты. И C#, и Java работают на то, чтобы гарантировать выявление таких типов незаконных приведений во время компиляции. Если приведение не может быть применено к новому типу, тогда во время выполнения такие исключения будут удалены.
- Сборка мусора: На языках более низкого уровня управление памятью может быть утомительным, ведь нужно помнить о том, что необходимо правильно удалить новые объекты, чтобы освободить ресурсы. На С# и Java есть встроенная сборка мусора, которая помогает предотвратить утечку памяти путем удаления объектов, которые больше не используются приложением. Утечки памяти все еще могут возникать, но благодаря основам управления памятью — это уже не ваша проблема.
- Одиночное наследование. Оба языка поддерживают одиночное наследование – это означает, что существует только один путь из любого базового класса в любой из его производных классов. Это ограничивает непреднамеренные побочные эффекты, которые могут возникать при наличии нескольких путей между несколькими базовыми классами и производными классами. Diamond pattern – книжный пример этой проблемы.
- Интерфейсы. Интерфейс представляет собой абстрактный класс, где все методы абстрактны. Абстрактным методом является тот метод, который объявлен, но не содержит подробностей его реализации. Код, определяющий любые методы или свойства, определенные интерфейсом, должен предоставляться классом, который его реализует. Это помогает избежать двусмысленности паттерна diamond, поскольку всегда ясно, какой базовый класс реализует данный производный класс во время выполнения. Результатом является чистая иерархия линейных классов одиночного наследования в сочетании с некоторой универсальностью множественного наследования. Фактически использование абстрактных классов является одним из способов множественного наследования языков, которые могут преодолеть проблему паттерна diamond.
C# VS. JAVA: ОСНОВНЫЕ РАЗЛИЧИЯ
Важно помнить, что C# берет свое начало в желании Microsoft иметь собственный «Java-подобный» язык для платформы .NET. Поскольку C# не создавался в вакууме, новые функции были добавлены и настроены для решения проблем, с которыми сталкивались разработчики Microsoft, когда они изначально пытались создать свою платформу на Visual J++. В то же время сообщество Java с открытым исходным кодом продолжало расти и между этими двумя языками развивалась гонка технических вооружений. Вот некоторые из основных различий между C# и Java.
- Windows vs open-source. Хотя существуют реализации с открытым исходным кодом, C# в основном используется в разработке для платформ Microsoft – .NET Framework CLR и является наиболее широко используемой реализацией CLI. На другом конце спектра Java имеет огромную экосистему с открытым исходным кодом и у него открылось второе дыхание отчасти благодаря тому, что Google использует JVM для Android.
- Поддержка обобщений (Generics): Generics улучшает проверку типов с помощью компилятора, в основном удаляя приведения из исходного кода. В Java средства обобщений реализуются с использованием стираний. Параметры общего типа «стираются», а при компиляции в байт-код добавляются приведения. C# также использует обобщения, интегрируя его в CLI и предоставляя информацию о типе во время выполнения, что дает небольшое увеличение производительности.
- Поддержка делегатов (указателей): В C# есть делегаты, которые по существу служат в качестве методов, которые могут быть вызваны без знания целевого объекта. Для достижения такой же функциональности в Java вам необходимо использовать интерфейс с одним методом или другим способом обхода, который может потребовать нетривиального количества дополнительного кода, в зависимости от приложения.
- Проверяемые исключения: Java различает два типа исключений – проверяемые и непроверяемые. C# выбрал более минималистский подход, имея только один тип исключения. Хотя способность ловить исключения может быть полезна, она также может отрицательно влиять на масштабируемость и контроль версий.
- Полиморфизм: C# и Java используют очень разные подходы к полиморфизму. Java допускает полиморфизм по умолчанию, C# же должен вызывать ключевое слово «virtual» в базовом классе и ключевое слово «override» в производном классе.
- Перечисления (Enums): в C# перечисления представляют собой простые списки именованных констант, где базовый тип должен быть целым. Java представляет перечисления более глубоко, рассматривая его как именованный экземпляр типа, что упрощает добавление пользовательского поведения к отдельным перечислениям.
Когда стоит использовать C# или Java?
Язык, который вы в конечном итоге решите использовать, будет во многом зависеть от платформы, которую вы выбрали для своего проекта. Сегодня C# используется в основном для реализации CLI на .NET Framework, Mono и Portable.NET. Если ваше программное обеспечение или веб-приложение создаются для Windows, C# будет работать лучше всего с набором технологий .NET.
Тем не менее, если вы хотите разрабатывать для Unix, Linux или других платформ за пределами платформы Microsoft, экосистема с открытым исходным кодом – Java – лучший выбор. Сообщество постоянно создает новые библиотеки и инструменты. Появились новые мощные языки, такие как Scala, Clojure и Groovy, и они все тоже основаны на JVM. К тому же это неплохо, что большинство реализаций JVM являются общедоступными и бесплатными. Java – основной язык разработки, который использует Google для Android – самой большой мобильной операционной системы в мире в настоящее время.
Имейте в виду, что перечисленные выше преимущества незначительны, и ни один из языков не исчезнет в ближайшее время. Оба языка существуют достаточно долго и, на самом деле, вы не сможете ничего такого построить на одном языке, чего бы не смогли построить на другом.
Итог: выберите язык, который лучше всего подходит для платформы вашего проекта.
Источник: https://www.upwork.com/hiring/development/c-vs-java/
Что можно реализовать на разных языках программирования? С++ Java Python на какие ОС?
Бессмысленный вопрос. Программировать можно на чём угодно. И всё это бред про «начинать стоит с основ».Сделать следует две вещи. Порядок не важен!
Выберите ту область, что нравиться. Ориентироваться стоит на не связанные с языком программирования вопросы. Например, для геймдева требуется любовь к играм, знание основ геймдизайна, много общения в этой сфере: потребуется огромный фидбек, и хорошо, если он будет получен за кружкой пива/кофе от знакомого человека, и да, чуть не забыл — много много упорства, иначе всё будет проваливаться. Тогда как для вебдизайна было бы не плохо иметь т.н. чувство вкуса, умение быстро переключаться между задачам т.к. часто приходиться вести несколько проектов сразу, знание цветов и их сочетаемость также не будет лишней, хотя сео скорее мертво, чем живо, понимание особенностей продвижения сильно поможет. То есть для разных сфер имеются множество особенностей, с которыми приходиться сталкиваться каждый день, но решая которые не будет написано ни строчки кода. Конечно, чем больше команда, тем больше разделение труда и тем меньше приходится вникать в те особенности, но, особенно на старте, эти вещи будут заметно помогать.
Посмотрите на разные языки программирования. Здесь, наверное, следует исключить эзотерику и функциональщину, ибо с ними сложно что-то толковое сделать не имея опухоли мозга (шучу, конечно). Их много: python, c++, java, go, ecmascript, nasm, c# (mono)… Список огромен. Большинство из них распространились на огромные области. Не важно: геймдев, вебдизайн, банки, транспорт — в каждой из них можно применить практически любой инструмент. Более того, в каждой из них применяется часто сразу несколько инструментов. Так что первый выбор почти не на что не повлияет.
Тут стоит сразу пару моментов осветить.
Во-первых, матанозированность различна. Наименьшая она в вебе. Наибольшая, наверное, в банках. Где-то посредине геймдизайн, хотя не так давно, он был куда более матаноёмкий, сегодня большая часть матана закралась где-то в библиотеках (впрочем, с логикой всё равно придётся подружиться).
Во-вторых, платформа. Некоторые языки заточены под одну платформу (c — *nix, c# — ms), что, в прочем, не запрещает их использовать на других платформах, там есть свои особенности (нормального чисто win’ового компайлера Си под вином до сих пор нет, а его WinAPI на Си убого чуть более чем полностью, тогда как порт c# — mono — имеет множество особенностей при работе на неродных платформах). А ECMAScript (js) вообще одно время работал только под браузером, хотя сегодня делать native-приложения на нём довольно затруднительно (если, конечно, ОС — это НЕ браузер), да и возможности его ограничены API браузеров, которые часто различаются между собой.
Но это всё детали. Они есть везде. Можно делать backend на c++, можно на python, можно на node.js. Можно писать игры на C# (XNA/Unity/monogame), можно на js (браузерные игры сегодня распоряжаются и webgl). Так что что больше нравиться, то и изучайте. И не стоит с основ. И тем более не стоит отождествлять Си и «основы основ».
C++ или Java для игр и различных приложений? — Хабр Q&A
Здравствуйте. я понимаю что таких вопросов много. и вероятно вы устали на них отвечать. но вот уже пару недель мучая google, яндекс, и даже bin… не могу найти конкретики и решения помогите пожалуйста….Суть. делать Игры (game dev) и периодически приложения для различных мобильных устройств ( телефоны планшеты ).
дело в том что игры планируются как для ПК ( серьезные проекты *да да знаю большая команда много денег и т.д* то есть явно не мобильные) но также и мобильные игры которые хотелось бы и на Андройд и на ПК чтобы работали ( понятное дело это не большие игры в условиях инди разработок например, *с чего-то же надо начать :)* ).
так как в планах и что то серьезное и не очень . я понимаю что Java не очень годится, ( да и честно признаюсь не люблю я java для меня он не логичен, ужасен это точки… аж бесит вот правда…).
да и потом не было бы C++, не было бы и свойственно андройда так как я понял центральное ядро системы С++, да и в играх ( на моб устройствах) часто используют так сказать «заплатки» из кодов С++ для оптимизации и т.д..
как я понял: понятное дело что тетрис можно написать и там и там. но на С++ он будет быстрее, зато на Java проще. это я понимаю.
Да знаю про QT но там есть много платного кнтента…. из за чего про какое-то 3д можно забыть не имея суммы в кармане ( у меня её нет )
а хотелось бы вот что. подскажите как ?
ну написал я какой-то код грубо говоря в нотпаде++, ну или в любой среде по С++. Тот же тетрис например.
подключил OpenGL сделал игру запустил работает. естественно получается нечего особого у меня там не будет, в отличии если делать это через QT или туже Android studio которые напихают файлов, и в файлы кучу ненужного мусора.
то есть хотелось бы в чистую (без всяких лишних вещей что обычно используют IDE вроде ) написать тот же «привет мир», чтобы это заработало на андройде и виндовс хотябы.
или все это сложно и муторно и мне проще перебороть себя ( а это ужасно сложно для меня ). и выучить java ну или ковыряться с QT. в общем мне это для само развития больше хочется чтобы понимать как все работает и устроено ( ну очень как хочется).
Учить 2 языка, да я все понимаю НАДО ( даже спорить бессмысленно *программист должен уметь все :)* )
но хочется на С++ сразу делать и туда и туда. без лишних IDE что подскажете как лечить мне мою болезнь ? )
Прошу тех кто считает, что: Надо уметь а язык это всего лишь инструмент отвечу.
Кратко: инструменты бывают разные!!!!!, молот и наковальня( долго мучится), и например станок с ЧПУ ( нажал на кнопку все готово),
Развернуто: я уже так и вижу как по вашим рассуждениям игра уровня кризис или старкрафт 2, тера, дуум, что там еще современного есть.. и т.д пишется на Java вам самим не смешно ? , сидит примерно 50 прогеров и делают Java 3д полноценный шутер который еще и на OpenGL ( так как Java в основном на нем ) ох им весело то будет… а уж какой ПК понадобится чтобы все это запустить пентагон отдыхает…
я не идиот и понимаю что серьезные игры делаются не 1 год и далеко не 1м человеком, но сути вопроса это не меняет!
разумно читайте мой вопрос плз, и отвечайте по существу.