LINUX.ORG.RU

Какой язык выбрать из Java, C++, C#, Kotlin?

 , , ,


1

5

Всем привет! Я решил изучать программирование и посмотрел видео о языках. Мне понравились 4 языка: Java, C#, C++, Kotlin. C++ потому что он работает на уровне железа и на нём можно писать интересные и сложные штуки; Java потому что на нём можно писать банковские приложения и у него больше всего вакансий; C# потому что он похож на Java, но намного проще; Kotlin потому что если знаешь Java, то знаешь и Kotlin, и на нём можно писать под мобильные устройства. Что бы вы посоветовали выбрать?

Перемещено hobbit из general

Ответ на: комментарий от MOPKOBKA

Ну на Scala все покороче будет:

val d: BigDecimal = (a + b) / c * BigDecimal(2) + BigDecimal(100)

final case class CustomerAddress(
  var customerStreetNumber: Int,
  var customerStreetName: String,
  var customerAptNum: Int
)

В Java уже Record-ы добавили BTW. Было бы неплохо, чтобы и дальше рутину убрали б. Но тут главное вовремя остановится, чтоб язык не сильно заумным стал.

necromant ★★
()
Ответ на: комментарий от mdilink

Как стать хэкером. Эрик С. Рэймонд

Статья не теряет своей актуальности. Python, C, Perl и LISP - из этого списка я бы только Perl не рекомендовал (он только для ценителей). Вместо него как раз можно Java какую изучить. К Lisp в пару просится Haskell, чтобы повернуть мозги и увидеть еще один способ программирования.

necromant ★★
()
Ответ на: комментарий от mdilink

https://youtu.be/qhzTawm3_6Y?t=1143 The Evolution of Programming | The Standup

Pascal -> C

+ python для быта

+(ba)sh/cmd для комп машинерии

пока студент рабкотай и учись : структуры (управления|данных|хранения данных

qulinxao3 ★★
()
Ответ на: комментарий от necromant

Использовать «var» тут не надо - сломаешь эквивалентность и хеш-код. Такой объект противопоказано будет помещать в контейнеры, особенно, в хеш-таблицы. Мы на собеседованиях всегда обсуждали этот момент (ну, я и многого другого любил спросить еще).

Кстати, топик-стартер, вот котлин похоже выглядит. Авторы котлина очень и очень многое взяли из Скалы. Но как я тебе уже пару раз писал выше (топик-стартеру), не знаю, какие есть учебники по котлину для новичков. А так, котлин прямо хорош (но я бы взял scala 3 для себя)

anonymous
()

Фиг знает.. на гошечке фигачить, растишке…

HTML сайта глянешь, там про «отсталый» utf-8 даже ещё не слышали. 1251 во весь рост)))


( Это я к тому, что бессмысленно полагаться на советы, изучай статистику.)

anonymous
()
Ответ на: комментарий от mdilink

while (1){
	std::time_t result = std::time(nullptr);
	if("default"==input1){
		switch(input){
			case "full":set_full_time(&result);break;
			case "not_full":set_hms_time(&result);
		}
	}else if("tabletki"==input){
		set_timer_tab(&result_tab, std::stoi(input1), &count);
		if (count == 5)	break;
	}
	Sleep(1000);
	system("cls");
qulinxao3 ★★
()

Ruby изучай, где покупать мощностя/пространство под проект.. это потом.. как нибудь спросишь)))

3 Щас пока слушай советы! Ими же потом и осудишься, что идиот - нафига слушал?. Мбуахаха))))

Соц. инжэнэрию тоже подтяни, пригодится.

anonymous
()

Всем привет! Я решил изучать программирование

Знаете, программисты учатся всю жизнь и каждый день.
Такая это профессия.

anonymous
()
Ответ на: комментарий от necromant

Python, C, Perl и LISP - из этого списка я бы только Perl не рекомендовал (он только для ценителей).

Перл хорош тем, что там кишки просвечивают и хорошо видно как на самом деле работают динамические языки. Разница между ссылками и значениями, между compile time и run time, неприглядная сущность ООП. Вот это всё в питоне замаскировано сахаром. При этом перл достаточно высокоуровневый, и там не придется заниматься байтодрочерством. Ну и книга Ларри Уолла прекрасна. Perl Cookbook тоже классика жанра.

bread
()
Ответ на: комментарий от mdilink

я все понял, вы крутые все знаете, но я так ничего и не выбрал((((

Предлагают в треде Java, C#, C++. Котлин не ругают, но и не предлагают.

Смотри с каким ЯП можно в твоем городе устроиться на стажировку/неполный рабочий день. Или бери любимый язык преподавателя.

Если совсем не понятно/страшно, то изучай теорию от бухучета и структуры предприятия до компьютерных сетей и как работает сам компьютер на аппаратном уровне. Расширяй кругозор. Понимание само собой придет.

dicos ★★
()
Ответ на: комментарий от bread

ну если Python через

https://docs.python.org/3/tutorial/index.html (который для уже умеющих в «процедурное» именно как второй язык - достаточно быстро про id и прочие потроха )

т.е. если копать то у любого языка потроха видны

perl хорош тем что вынуждает быть аккуратным в заклинаниях

qulinxao3 ★★
()
Ответ на: комментарий от Ygor

Так не пишет ни кто, пишут: this.customerStreetNumber = value

А, еще длиннее пишут? Ну извини, не могу комментарий отредактировать. Дальше ты про инструменты кодогенерации пишешь, это было в моем комментарии, добавить мне нечего.

Сравнивать манипуляции с интами(?) и с числами с бесконечным количеством знаков некорректно.

Сравнение очень корректное, в COBOL точная BCD арифметика произвольной длинны. В Java нету BCD арифметики, но BigDecimal справляется с этой задачей. По хорошему, во втором примере я должен был вместо Integer тоже BigDecimal поставить.

MOPKOBKA ★★★★★
()
Последнее исправление: MOPKOBKA (всего исправлений: 3)
Ответ на: комментарий от rukez

ты можешь написать так же как на коболе (с математическими операторами или прямым доступом к переменным)

Не могу, в Java операторы есть для Integer, Float, первый без точки, второй с потерей точности, а в COBOL как я уже написал, произвольная длинна BCD арифметики.

все обернутое геттерами/сеттерами легко оборачивается как рефлексией так и всякими мудреными фактори

Ага, выше еще про генератор IDE написали, это все было отраженно в моем комментарии, без сторонних инструментов писать на этом просто невозможно. Причем сторонние инструменты еще могут быть у каждого проекта свои, кто то генерирует, кто то использует рефлексию, кто то IDE.

т.е. разобраться как работает, дополнить или поменять чужое-мудреное - гораздо легче чем в скомканной лапше прыжков по кускам памяти

Да, обычно изменение начинают с полного пересоздания дерева наследования, потому что оно нерасширяемо, а новый эксперт покажет как надо, но только до следующего эксперта.

Вообще если говорим про сеттеры геттеры, как так получается, что с одной стороны Java программисты говорят «ну сгенерируй просто каждый набор getter/setter в любой структуре, и потом обновляй его, не забывая при измении структуры» и это Ок, и при этом на защиту getter/setter они встают с позиции «ну не сгенерирует же тебе IDE getter/setter если у тебя переменная структуры меняется в разных местах по коду, а ты захотел добавить дополнительное поведение к этому» ???

Ну и к примеру, взял я через getCobol21c() объект JavaLanguage, и теперь сделал JavaLanguage.setName(«ya ne cobol»), помогли в таком случае getter/setter?

можно писать коротко и прямо

Невозможно, попробуй перепиши кратче чем в COBOL мои примеры.

MOPKOBKA ★★★★★
()
Последнее исправление: MOPKOBKA (всего исправлений: 2)
Ответ на: комментарий от MOPKOBKA

Не могу, в Java операторы есть для Integer, Float, первый без точки, второй с потерей точности

Не очень понял претензии - если тебе нужен объект как переменная то есть и Long и Double - первый длинный, второй точный
Если ты хочешь примитивы то есть long, int, float, double и тп. - это чисто классические примитивные переменные как в коболе или си.
У Явы с примитивами есть ряд вроде бы проблем:

  • из коробки нет беззнаковых переменных
  • нельзя жонглировать длиной примитива - есть байт, есть инт, по середине нет 16ти битных, например
  • нельзя взять и скопировать память куском из объекта в объект сделав независимый клон объекта по аналогии с мемкопи структуры Однако (с) в реальном мире Явы беззнак лютая редкость и 16бит регистры не существуют (т.е. один фиг 16бит займет нативные для системы 32 бита минимум), а вот клонирование объектов - да, боль (надо либо пробежаться по всем филдам скопировав их по очереди, и кстати тут геттеры подсобят особенно если дробить синхронизацию в многопотоке, либо пробежать рефлексией)

Ага, выше еще про генератор IDE написали

Я не про написание оберток а про использование - в Яве много инструментов которые умеют в обернутое геттерами/сеттерами при динамическом создании объектов - собственно те же фабрики частично про это - тебе не надо перебирать условия по типам объектов а достаточно внятно разложить функционал в геттерах/сеттерах при наследовании

Причем сторонние инструменты еще могут быть у каждого проекта свои

Инструменты в теории могут быть разными (хотя это просто генератор шести строк с заменой имени переменной 😁) но для г/с результат типизирован

Да, обычно изменение начинают с полного пересоздания дерева наследования, потому что оно нерасширяемо

Не очень понял - наследники могут расширять или не расширять дерево наследования, ты же можешь даже указать обязательность или не обязательность реализации веток чтоб не забывать что родитель не делает что-то специфическое

если у тебя переменная структуры меняется в разных местах по коду

В Яве нет структур, есть объекты - переменная такая же часть объекта как и функции (в этом отличие от структуры) т.е. переменную для своего же удобства не надо менять вне объекта руками если она обернута г/с - там спецом слово private для этого есть чтоб запретить прямое обращение не из класса объекта. Но вообще это не мешает работать самим г/с, это мешает только тебе - ты можешь вызвать сеттер установив переменную в 1, потом руками ее установить в 2 и геттер тебе вернет 2.
И кстати задав ей private ты сразу найдешь все обращения не из класса и можешь сразу их заменить на г/с

Ушел на хоккей, вечером может допишу 😁

rukez ★★★★★
()
Ответ на: комментарий от rukez

Не очень понял претензии - если тебе нужен объект как переменная то есть и Long и Double - первый длинный, второй точный

Второй не подходит, нужно хотя бы десятичное число с плавающей точкой, подобных примитивов нету, BigDecimal единственный подходящий тип, но он не имеет операторов.

нельзя жонглировать длиной примитива - есть байт, есть инт, по середине нет 16ти битных, например

О чем ты говоришь, есть же short.

и 16бит регистры не существуют (т.е. один фиг 16бит займет нативные для системы 32 бита минимум)

Надеюсь ты это не из бредогенератора копируешь. Есть регистры ax, bx, cx, ... У тебя очень странная информация... Даже интересно стало, как ты пришел к такому мнению о 16 битах.

MOPKOBKA ★★★★★
()
Последнее исправление: MOPKOBKA (всего исправлений: 1)
Ответ на: комментарий от bread

Я вот из любопытства за последнее время дважды заглянул в код open source проектов на Java.

Ну оно просто нечитаемое. Я, например, не понимаю, зачем в 2025 году писать простыни на несколько экранов вида:

class Foo {
  private Integer a;
  private Integer b;

  public Integer getA() {
    return a;
  }
 
  public Integer setA(newA) {
     a = newA;
  }
}

Меня эти мегатонный бойлерплейта просто выводят из себя. Это вид какого-то извращённого квадратно-гнездового насилия над человеками. Если человеку нравится писать и читать мегатонны бойлерплейта, за которым очень тяжело увидеть реальную бизнес-логику, алгоритмы, которые решают задачу, то я уже просто не знаю, что сказать.

Ну неужели реально нельзя было придумать ничего лучше?

Chiffchaff
()
Ответ на: комментарий от anonymous

У меня есть вопросы к любому языку программирования. Я понимаю, что идеальных языков не существует.

Но я прям действительно не могу понять людей, которые говорят, что им нравится Java. У этих людей наверное дома везде прямые углы.

Да Java создавалась именно как инструмент создания корпорабов. В рекламных материалах Java в 90-х, постоянно подчёркивалось, что это язык, который позволит штамповать одинаковых взаимозаменяемых человекоюнитов, впахивающих на корпорации. И вот эта квадратная уголоватость, желание подчинить себе человекораба, так и торчит всюду из неё, чтобы человечишка постоянно получал углом под рёбра, и не мнил о себе много.

Chiffchaff
()
Ответ на: комментарий от MOPKOBKA

подобных примитивов нету, BigDecimal единственный подходящий тип, но он не имеет операторов.

BigDecimal не примитив по этому у него операторы обернуты функциями, что кстати местами полезно (например при делении)

О чем ты говоришь, есть же short.

А я не уверен что он 16 бит внутри (ниже)

Надеюсь ты это не из бредогенератора копируешь. Есть регистры ax, bx, cx, … У тебя очень странная информация… Даже интересно стало, как ты пришел к такому мнению о 16 битах.

Жвм в общем случае приводит все к инту притом системной длины под капотом т.е. short вроде как может занимать 16 бит при хранении (по крайней мере оракл так пишет) но при каждой математической операции будет развертываться в 32 бита - по этому по факту ими никто особо не пользуется ибо инт обычно шустрее
С байтом кстати я выше тоже налюбил - он тоже в 32 бита минимум развернется в большинстве случаев

Есть регистры ax

Ax и иже с ним разве до сих пор самодостаточные а не просто половинка от еах?

rukez ★★★★★
()
Последнее исправление: rukez (всего исправлений: 1)
Ответ на: комментарий от Chiffchaff

Нет, там было по другому. Разворачивалось на моих глазах.

Если брать книги от авторов Java (озвученную мною ранее книгу Гослинга и еще была от другого автора - отдал знакомому и забыл имя автора), то планировали Java, вообще, для небольших устройств, чтобы там писать логику. Как я понимаю, через 30 лет примерно это и случилось.

Потом, в конце 90-х Java подавалась как язык для написания аплетов. Тогда браузеры только-только набирали популярность (как и компьютеры). И было очень здорово, когда код на Java запускался прямо в браузере с удаленного сайта.

Вообще, я считаю, что аплеты Java - это вообще лучшее, что когда либо случалось с HTML. Но история потом пошла по другому пути.

Перемены начались, когда Java связалась с банками на рубеже 90-х и нулевых годов. Там и пошла в оборот.

А потом просто физически не осталось защитников Java-аплетов. Некому стало продвигать эту фантастическую идею. Сейчас же имеем убогий HTML5 и не менее убогий JavaScript.

А так, для своего времени Java была очень хороша. В итоге она стала тем, чем должен был стать Smalltalk, но не стал, а Java победила

anonymous
()
Ответ на: комментарий от rukez

но при каждой математической операции будет развертываться в 32 бит

Это совершенно не важно, главное что бы он работал как 16 битное значение, и массив 16 битных значений занимал в два раза меньше места чем массив int значений. На x86 и с 16-битными регистрами операции над ними выполняются медленнее чем над 32-битными. GCC например тоже работает с short как с 32 битными значениями если позволяет алгоритм: https://godbolt.org/z/h95Ybo9z1

MOPKOBKA ★★★★★
()
Последнее исправление: MOPKOBKA (всего исправлений: 1)
Ответ на: комментарий от necromant

long развертывается в long, адреса тоже 64 битные на 64 битных системах. Но например длинна массива и его индекс это int, и поэтому в Java есть ограничение на длину массива около 2^31 значений, ну и си-строк/массивов byte больше 2 гб быть не может.

Это невозможно исправить без поломки совместимости. Все же она предназначалась для кофеварок, а не для ворочанья террабайтов памяти.

MOPKOBKA ★★★★★
()
Последнее исправление: MOPKOBKA (всего исправлений: 5)
Ответ на: комментарий от anonymous

Я не знаю, можно ли сейчас найти рекламу 90-х, явную и неявную. В основном, тогда всё происходило в печатных журналах.

Java позиционировалась как выдающееся решение по следующим признакам (компанией Sun, и теми, кому она заплатила):

  1. Write once, run anywhere (тогда было много аппаратных и софтверных платформ, сильно больше, чем сейчас)
  2. Простой язык, который позволит легко нанимать взаимозаменяемых разработчиков, кодовая база будет простой и понятной для всех.

Апллеты, мне кажется, не предполагались основной фишкой. На железе конца 90-х, начала 2000-х, они работали просто отвратительно. Я отлично это помню. Если на странице встречался апплет, то браузер фризился на несколько минут, часто со всей системой, т.к. стартовала тяжёлая JVM, всё начинало дико свопиться даже на более-менее хорошей сборке.

Это прививало хорошую память, чтобы избегать любые страницы и сайты с JVM. В то же время, появился Flash, который был на порядки легче и быстрее.

Притом апплеты и выглядели совершенно инородно на странице. Даже по тем неизбалованным временам, интерфейс JWT (да даже и Swing) выглядел грубо вырубленным топором, квадратно-гнездовым.

Chiffchaff
()
Ответ на: комментарий от Chiffchaff

Если через Swing, то это был тормоз, где демка Java2D грузилась минуты две (потом они добавили ленивую инициализацию). А вот, если AWT да еще на микрософтовской JVM, то работало довольно шустро. Это можно было развить, но толком не развили.

Язык действительно был простой по сравнению с языком-чемпионом того времени, с тогдашним языком C++. Многие откровенно в ФИДО писали, что работу они работают на C++, а на Java отдыхают для души. Java выглядела тогда очень привлекательно, хотя и была тормозной.

То есть, я хочу сказать, что Java сначала получила признание как язык для хобби, а всей такой энтерпрайзно-энтерпрайзной из себя стала позднее.

anonymous
()
Ответ на: комментарий от Chiffchaff

Апллеты, мне кажется, не предполагались основной фишкой.

Да, но на первых порах она только для апплетов и годилась. И то, пришлось ещё впаривать эти апплеты, а то мало кто понимал зачем они нужны. Я помню, что даже в самом конце 90-х жава ещё строго ассоциировалась с апплетами. Естественно, все это ненужно отключали, и репутация у жабы была так себе. Ну и потом долго ещё только ленивый её не пинал. Но все претензии давно устарели, имхо.

bread
()

Брать лучше C++ и Kotlin.

  1. C# - виндузятно-корпоративно-майкрософтная попытка перетянуть на себя одеяло Java. Это не язык, это политота. Подминание под себя Java-рынка Биллом Гейтсом, ничего более. В микрософте посмотрели как в банках всё на Java клепают и захотели такой же язык себе в виндовой экосистеме. Хотя на нём что-то в OZON пишут сейчас, но скорее это продиктовано теми старпёрами, которые оказались в позиции архитекторов того проекта. Типа как java в «одноклассниках» - там просто какой-то эксперт по JVM на тот момент работал в штате, вот и понеслось. А вот такие сайтики как «фотострана» или «loveplanet» в двухтысячных были на жостком садомазо-C++ написаны в backend или на си-с-макросами, треш и угар по-взрослому творился, до сих-пор наверное работают.

  2. Java - устаревшая, но классическая штука. «Мир java», то есть разные виды JVM, под которыми работают всякие Scala/Kotlin - это надолго, потому что красивая идея была. Но сам язык по меркам 2025 года слишком многословен и туп, под каждый чих класс пейсать и шаблонов нормальных нет. Изначально там была красивая идея «написал один раз, работает под любой платформой», но на момент 2025 года всем нассать, потому что железо дороже, чем абстрактные идеи - перекомпилировал под что надо и зашибись. Я не эксперт в андроиде, но кажется даже сборки .apk нынче могут содержать бинарный код под конкретную железную архитектуру ARM, например v7, например Telegram какие-то супероптимизировнаные куски приложения/кодеки так может таскать. В мобильном приложении Telegram под ведроид вообще жесть понахимичено на сишечке, как я понимаю, потому что иначе как с аппаратным ускорением видосы во время отправки в чатик они перекодируют на клиенте? Java - это красивая история, классика, но ненужно как старый красивый мерседес 1983 года выпуска - круто, уважаемо, но жрёт бензин и автоматически не тормозит перед бабкой перебегающей дорогу ночью.

  3. Kotlin - это очень выразительный современный язык, порождённый в России-матушке в Санкт-Петербурге после творческого глубокого переосмысления кучи разных других языков из JVM-мира и вне его. Используется в настоящее время массово повсеместно для разработки под ведроид и рекоммендуется гуглом для этого. Многие до сих пор пишут на Java эти приложения, но похоже это уже старпёры-неосиляторы всего нового.

  4. C++ - чудовищно мощен и выразителен, а времена отстрела ноги, если ты обычный разраб, который читал новые стандарты C++ - ушли. Нынче код на C++ легко пишется так, что не увидишь ни указателей, ни выделений памяти, причём кратко и сжато. Страшен из-за беспредельной мощи - новые фишки добавляют, а старые-то не убирают! Получается сумасшедший шайтан-коктейль смерти. Упоротые гении могут невозбранно сочинить там «язык внутри языка», написать на нём что-то, что никто никогда в жизни не прочитает и агрессивно пытаться утверждать, что это единственно правильное решение - их бьют, увольняют, харкают в рыло, в общем начинаются драмы, широкое поле потенциально ненужных скандалов открывает язык - применять его для написания большого количества микросервисах в корпорациях с множеством увольнений не советуют почему-то, хотя кто сказал что на расте такой фигни не происходит. C++ каждые 3 года переосмысляется и выкатывается новый стандарт с новыми фичами, например цикл можно написать короче или перестать писать тип возвращаемого значения или начать вычислять значения функций во время компиляции - короче C++ хоть и старый дед, но кукухой знатно поехал в последние годы, помирать явно не хочет. Я думаю, туда скоро опцией Borrow Checker добавят типа g++ -std=c++27 -fborrow-checker и Rust ещё успеют захоронить и на могиле насрать.

Золотая жила - это хорошо уметь клепать быстрый нетребовательный к ресурсам backend на C++, пилить на нём внутренности СУБД и быстро отдавать серверные ответы за наносекунды, чтобы сотни тыщ запросов в сек на виртуалке за 350 рублей отдавало и одновременно рулить в Kotlin, делая на нём мобильные приложения, которые будут ходить в твой мегабыстрый C++ backend.

lesopilorama
()
Последнее исправление: lesopilorama (всего исправлений: 3)
Ответ на: комментарий от anonymous

А потом просто физически не осталось защитников Java-аплетов. Некому стало продвигать эту фантастическую идею. Сейчас же имеем убогий HTML5 и не менее убогий JavaScript.

webassembly придумали же, чем хуже. Тот же байткод, компилируемый JIT в бинарный и исполняемый в браузерном контейнере. Из чего хош в webasm компилируй - хоть из C++, хоть из Java.

lesopilorama
()
Ответ на: комментарий от mdilink

только в каком порядке учить или учить параллельно? а если не хватит времени

Учить чисто ради учить вообще не стоит, надо брать проект/идею/стартап/пет-проджект и сразу делать его. Споткнулся - пошёл почитал в DeepSeek как это сделать - продолжил. Так и выучится. Сначала реализация будет кривой и медленной, но это в 100500 раз лучше, чем какие-то учебные задачки.

И когда придёшь работу искать, то там не спросят что ты учил, там спросят что ты реализовал на этом языке.

lesopilorama
()