C# — junior C# или Java


Содержание

JAVA ИЛИ C#. ЧТО ВЫБРАТЬ?

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

В этой статье приведена сравнительная характеристика этих языков, которая поможет определиться, какой же выбрать, в зависимости от цели разработки приложения.

Общие сведения

Оба языка, C# и Java, — это усовершенствованный С++.

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

Java был создан под именем Oak Java в 1990 году американской компанией Sun Microsystems. В 1995 году была представлена первая бета-версия этого языка.

C# появился в 2000 году. Вскоре, в 2002, вышла первая версия фреймворка .Net, который поддерживался этим языком программирования.

Java был разработан на основе Objective-C и C, а базой языка C# выступили C++ и Java. Однако, несмотря на своё название, C# ближе к Java, чем к C++.

С точки зрения разработчика, Java и C# имеют почти идентичную структуру. Оба языка строго типизированы и объектно-ориентированы. Много функций позаимствованы из синтаксиса C++, однако эти языки проще для изучения начинающим.

Java и C# можно сравнить по следующим характеристикам:

  • синтаксическая основа;
  • механизм работы с динамическими данными;
  • объектные средства;
  • типы данных;
  • полезные функции.

Механизм работы с динамическими данными и сборкой мусора

Оба языка имеют схожую модель работы с динамическими данными: объекты создаются динамически с помощью конструкции “new”. Среда выполнения отслеживает наличие ссылок на них. Сборщики мусора периодически очищают память объектов, у которых нет ссылок.

В Java и C# есть сильные и слабые ссылки на объекты. Оба языка поддерживают метод финализатора. Из-за неопределенности момента удаления объекта, финализаторы не могут использоваться для освобождения системных ресурсов, занимаемых объектом. Это заставляет создавать дополнительные методы для объекта “cleaning” и вызывать их явно.

В Java 7 добавлена структура «try-with-resources», которая обеспечивает автоматическую очистку, аналогичную C#.

Java позволяет регистрировать слушателя (“listener”), который будет получать сообщения, когда ссылка подвергается сборке мусора, что улучшает производительность класса WeakHashMap.

Объектные средства

Код и данные могут быть описаны только внутри класса.

Инкапсуляция
В Java модификатор “protected”, помимо доступа из классов-потомков, разрешает доступ ко всем классам, находящимся в том же пакете, что и владелец класса.

В C# для объектов, которые должны быть видимыми в диапазоне сборки (примерный аналог пакета Java), был введен отдельный модификатор “internal” (аналог «default» в Java). Модификатор «protected» сохраняет свой первоначальный смысл от C++ — доступ только от классов-потомков.
Также возможно комбинирование модификаторов “internal” и “protected”.

Внутренние классы
Оба языка позволяют определять класс в классе.
В Java внутренние классы используются для эмуляции замыканий. Они имеют доступ к нестатическим элементам родительского класса. Также, в пределах метода, можно определить локальные классы, которые имеют доступ на чтение к локальным переменным; безымянные (анонимные) локальные классы, которые фактически позволяют создавать экземпляры объектов и интерфейсов, а также методы перекрытия класса непосредственно в месте их использования.

В C# есть замыкания и лямбды. Подход C# больше напоминает C++: внутренние классы доступны только для статических элементов внешнего класса. Для доступа в нестатические элементы необходимо явно указать экземпляр внешнего класса. В C# не поддерживаются локальные внутренние классы.
Лямбда-выражения появляются в версии Java 8.

Методы
В обоих языках методы определяются функциями класса. Тело метода локализовано в описании класса. Поддерживаются статические и абстрактные методы.
В C# существует очевидная реализация методов интерфейса, которая позволяет любому классу реализовывать их отдельно от своих собственных методов или давать различные реализации одноименных методов, принадлежащих двум разным интерфейсам.

В Java 8 появляется оператор “default”, который позволяет определить реализацию методов интерфейса “по умолчанию”. Таким образом, класс интерфейса избавляется от обязательства реализации методов по умолчанию, но может заместить их.

Виртуальные методы
C# повторяет концепцию виртуальных методов C++: виртуальные методы могут быть объявлены с ключевым словом “virtual”, другие методы не являются виртуальными. Более того, C# требует явного объявления перекрытия виртуального метода в производном классе с помощью ключевого слова «override».

В Java наоборот, все открытые методы, кроме статических, являются виртуальными и невозможно переопределить метод без участия виртуального механизма. Этот подход синтаксически проще, так как он обеспечивает вызов метода класса, к которому относится объект.

Типы данных

Java и C# могут относиться к нескольким типам

Примитивные типы
Оба языка поддерживают идею примитивных типов (в C# они являются подмножеством типов-значений) и обеспечивают автоматическую “упаковку” (“boxing”) и “распаковку” (“unboxing”).
Количество примитивных типов в C# больше, чем в Java за счет беззнаковых (“unsigned”) целых типов.
Язык Java, для упрощения, отказался от большинства беззнаковых типов.

В C# возможно рассмотрение примитивных типов как объектов, и это одна из причин, которая делает его популярным.

Перечисляемые типы
Перечисляемые типы в C# происходят от примитивных целочисленных типов.
В Java перечисляемые типы представлены как классы, а их значения — как объекты.

Параметризированные (обобщенные) типы
В обоих языках типы могут быть параметризированны, и это поддерживает парадигму обобщенного программирования.
Обобщение типов в Java — всего лишь лингвистическая структура, которые реализуются только на компиляторе.

C# выбрал другой путь. Поддержка обобщения была интегрирована в виртуальную среду выполнения, впервые появившуюся в .NET 2.0. Язык здесь — это только внешний интерфейс для доступа к этим функциям среды.

Мы рассмотрели основные характеристики наиболее популярных языков программирования, и теперь самое время сравнить Java и C # через призму их полезных функций.

Преимущества C#

Лямбда-функции
Также, как и анонимные внутренние классы в Java, C# обеспечивает более эффективные лямбда-функции.
Это удобный метод для определения объекта анонимной функции непосредственно в точке вызова или передачи функции в качестве аргумента. Как правило, лямбда-выражения используются для инкапсуляции передаваемых в алгоритмы или асинхронных методов нескольких строк кода.

Делегаты
Делегаты используются в качестве методов для указания на другие методы. В Java тоже есть такая функция, но в C# она проще.

Оператор перегрузки
Язык C# позволяет выполнять перегрузку операторов для их использования в собственных классах. Это позволяет достигнуть естественного вида определяемого пользователем типа данных и использовать как основной тип данных.

Свойства
Свойства C# дают каждому классу возможность предоставить общий способ получения и настройки значений, скрывая при этом код реализации или верификации. Это позволяет данным быть легкодоступными и продолжать продвигать безопасность и гибкость методов.

Поддержка ключевого слова “yield”
С помощью “yield” можно определить генератор. Используя генератор, можно создавать вычисления последовательностей «на лету», что помогает сэкономить память и выполнять вычисления бесконечных последовательностей.

Расширение методов
Это удобный способ расширения существующих классов, даже если они готовы без реального расширения

Поддержка “?? Operator”
Он предлагает простой синтаксис для получения значения ссылочного типа.

Основываясь на вышеперечисленных функциях, можно убедиться, что C# — продвинутый язык программирования, который был создан для решения различных задач высокой сложности.

Преимущества Java

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

Большая история
Язык Java существует на рынке с 1995 года, поэтому сегодня он широко изучен и предлагает сотни решений и технологий.


Упрощенная версия C#
Все разработчики, изучающие C++ и Java, очень близки к этому языку. Java изучается на основе C++ и достаточно лёгок. Более того, Java является простым, предсказуемым и минималистичным. Новые функции представлены очень основательно.

Доступные цены
Сильная интегрированная среда разработки, как, например, “ IntelliJ IDEA” — вершина эволюции средств разработки, и она намного дешевле, чем Visual Studio Ultimate для C#.

Кросс-платформенность
Приложения работают буквально на всём: от суперкомпьютеров до смарт-карт. Особенно хорошо запускаются на бесплатном Linux и FreeBSD.

Изобилие библиотек
Существует около 350 гигабайт библиотек, доступных в Maven Repository . Можно найти любую для чего угодно, и, в большинстве своём, бесплатно!

Сторонники Java
Java — самый популярный язык программирования, что является причиной большого количества Java-программистов. Для него также существует официальная сертификация SCJP ( Sun Certified Java Programmer).

Полная обратная совместимость
Java имеет полную обратную совместимость с API и ABI ранних версий. Ни один язык не сможет похвастаться такой совместимостью, даже C#. Java эффективно используется в корпоративной сфере для больших проектов, занимая очень сильную позицию.

Выводы

Мы конструктивно и тщательно рассмотрели структуру, функции и преимущества Java и C#. Пока еще нелегко без сомнений ответить, какой язык лучше. Выбор очень зависит от конкретного разработчика, его стиля и опыта. Мы можем только сравнить функциональности обоих языков и, в соответствии с конкретной задачей, рекомендовать Java или C# в качестве наиболее подходящего языка по его производительности. Вполне вероятно, что когда-нибудь эти языки сможет заменить какой-нибудь более универсальный, но на сегодняшний день, Java и C# могут называться основой современного программирования.

Java или C#, что нужнее сейчас и в перспективе? [закрыт]

Мне 17 лет. Встал выбор. Либо Java (android, кроссплатформа), либо C# (wpf, windows phone). Веб откинул сразу — пробовал , не понравилось. Опыт работы с обеими платформами примерно одинаков (одинаково мал) — пришло как раз время выбирать направление. С# и дотнет импонируют документацией msdn, студией, синтаксическим сахаром шарпа и активным развитием. Java в свою очередь — более «правильной» реализацией платформы (написано под старое — запускается на новом), простотой языка без лишних изысков, оупенсорсностью :) По статистике, на Украине и то, и другое востребовано примерно на одном уровне. Что чаще нужно в мелком городе? Что лучше на перспективу? Кому легче устроится без опыта? Кого чаще берут на удаленку? Во фрилансе что нужнее? Поделитесь своими наблюдениями. UPD: android + Java и desktop + C#. Думаю, что пойдёт, то и моё.

Закрыт по причине того, что необходимо переформулировать вопрос так, чтобы можно было дать объективно верный ответ участниками Kyubey, awesoon, Ella Svetlaya, dizballanze, Alexey Shtanko 13 июн ’15 в 6:23 .

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

Заблокирован участником Nick Volynkin ♦ 24 янв ’16 в 11:04 .

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

Подробнее о заблокированных сообщениях здесь.

7 ответов 7

(Я активный сторонник C#, моё мнение предвзято.)

  • Хорошо и быстро развивающийся язык. LINQ и async/await ещё долго будут вне пределов досягаемости других мейнстримовых языков.
  • Платформа Windows Phone сейчас растёт, под неё понадобятся приложения, которые уже есть под iOS и Android. Рынок пока не заполнен, можно рискнуть и выиграть.
  • WPF — один из немногих вменяемых декстопных GUI-фреймворков. Java в этом плане сильно отстаёт.
  • Андроид всё же самая популярная мобильная ось на текущий момент.
  • Энтерпрайз пишется в основном на Java.

По поводу кроссплатформенности, она не кажется мне решающим фактором. Обычно проекты пишутся под конкретную платформу, особенно если они завязаны на фронт-энд.

Кстати, а где вы нашли отсутствие обратной совместимости в .NET?

Учи алгоритмы и ООП. А выбор платформы это уже дело техники и личных предпочтений. У джавы свои дыры, у шарпа свои. Это практически холивар по данному вопросу.

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

Молодой человек, вы сначала определитесь с логикой: то вы ищете то что востребованнее то вы ищете, что вам нравится (веб пробовал не понравилось, Java или C# что востребованнее. ). Корень лежит там — в этой логике. В вашем возрасте важнее, мне кажется, все таки логика «нравится — не нравится», а не «нужнее — не нужнее». По той простой причине, что то что нравится и получается лучше. В плане денег и шарп и джава примерно одного плана. Джава более международнее что ли разве что, а шарп поместечковее. Как то так.

Из вашего опуса вижу, кстати, что Java вам нравится поболее dot Net. Так что делайте выводы.

Я — разработчик на C#, но посоветовал бы автору изучать Java. Desktop-приложения — это умирающее направление разработки, все переходит либо в web, либо на мобильные приложения.

C# для Windows — это как Objective-C для Mac OS. C# активно развивает Microsoft и делает это очень хорошо и что не говори, но приложения написанные на C# будут всегда лучше всех работать на Windows. Это своего рода сфокусированный на Windows язык программирования, как и Objective-C для Mac OS. Просто при выборе C# не надо пытаться разрабатывать кростплатформенные приложения (используя всякие «Mono» и т.п.). И сегодня сделав выбор в сторону C# ни как не проиграешь. Ну а то что сегодняшний программист должен знать хотя бы пару языков, говорить думаю не стоит.

В Java нет структур, в топку её.

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

Структуры хранятся в stack’е (но в куче, если массив). Выделение памяти в stack’е происходит очень быстро: stack – заранее выделенный буфер памяти, в котором просто резервируется место по размеру структуры (в основном, на этапе компиляции) путём уменьшения значения в stack pointer (уменьшения, т.к. данные в stack’е хранятся задом-наперёд). Когда функция завершает свою работу, то «освобождение» всех переменных в stack’е происходит один махом путём увеличения указателя stack pointer на количество байт, необходимых для переменных. А выделение и освобождение памяти в куче – это огромное количество операций, в отличие от простого вычитания и суммирования.

Из-за того, что структуры хранятся в stack’е, они не требуют сборки мусора. Это сильно разгружает сборщик мусора и избавляет от проблемы фрагментации памяти.

Структуры, поля которых – только value types, легко сериализовать в массив байт и обратно.

А еще Java-компилятор не оптимизирует хвостовую рекурсию

Java против C#: какой язык производительнее в реальных проектах?

Сегодня мы познакомимся с одним опытом, при помощи которого усердный автор, Джефф Когсвелл, попытался рассмотреть производительность кода Java и C# «в реальных условиях». Этот опыт можно считать приглашением к анализу производительности двух языков, ведь полученные автором результаты не претендуют на абсолютную объективность. Но, учитывая соперничество и популярность затронутых в статье языков, надеемся, что материал станет для читателя вкусной пищей для размышлений.

Автор подготовил специальные тесты и решил проверить, какой из этих языков окажется лучше «в реальных условиях»

Давайте сравним Java и C# — два языка программирования, каждый из которых имеет широкий круг поклонников, но вместе с тем и яростных противников. Несмотря на все те прения, которые разворачиваются в онлайне, сложно найти четкие критерии, позволяющие оценить реальную производительность каждого из этих языков.

Какой смысл я вкладываю в понятие «реальный»? Дело в том, что меня не интересует еще один тест, скрупулезно вычисляющий значение числа Пи до миллиона знаков. Я хочу поговорить о решении прикладных задач на языке: какой язык мне выбрать, если требуется ежедневно выдавать клиентам миллионы веб-страниц? Какой из языков сильнее при выборке информации из базы данных и динамической сборке веб-страниц? Именно такая статистика обычно интересует технического специалиста, выбирающего подходящую платформу.

Прежде чем перейти к тестам, давайте определимся с терминологией. Когда вы пишете код Java, вы обычно планируете использовать его на виртуальной машине Java (JVM). Иными словами, ваш код компилируется в байт-код, а этот байт-код работает под управлением JVM. C#, в свою очередь, обычно работает в общеязыковой исполняющей среде (CLR) от Microsoft. C#, как и Java, компилируется в байт-код.

Java и C# — это просто языки. Теоретически вы могли бы писать код Java для исполняющей среды Microsoft CLR, а также код C# для JVM. Действительно, на работу с виртуальной машиной Java ориентирован и ряд других языков, в частности Erlang, Python и др. Самые распространенные языки, рассчитанные на работу с CLR (кроме C#), — собственный язык Microsoft Visual Basic.NET, а также майкрософтовская разновидность C++, называемая C++.NET. Общеязыковая исполняющая среда также поддерживает некоторые менее распространенные языки — уже упомянутый выше Python и F#.

Цукерберг рекомендует:  Вакансии Startuplandia

Две эти исполняющие среды содержат фреймворки, представляющие собой наборы классов. Такие наборы для JVM были написаны в Oracle/Sun, а для CLR — в Microsoft. У Oracle есть платформа Java с разнообразными API. Фреймворк Microsoft .NET — это огромный набор классов, обеспечивающих разработку для CLR. На самом деле, многие специалисты называют всю систему просто .NET, а не CLR.

Мы не будем сравнивать языки как таковые. Нас интересуют лежащие в их основе исполняющие среды. Но мы заинтересованы не только и не столько быстродействием этих сред, сколько производительностью фреймворков. Поэтому я выполню несколько сравнений, но в итоге нам все равно придется соотнести яблоки с яблоками.

Например, вы вполне можете написать собственный HTTP-слушатель на C# или Java, а потом просто отправить клиенту динамически сгенерированную HTML-страницу. Но на практике почти никто не пишет низкоуровневых HTTP-слушателей; обычно мы стремимся использовать имеющиеся HTTP-серверы. Большинство веб-приложений на C# работают на базе майкрософтовского сервера IIS.

C другой стороны, серверный код на Java может работать с несколькими разными серверами, в частности Apache HTTP и Tomcat. Кстати, сервер Tomcat был специально разработан для взаимодействия с серверным кодом Java. Мы, конечно, хотели бы сравнивать сопоставимые величины, но в то же время должны сохранить реалистичность эксперимента. Скорее всего, отклик будет зависеть от сервера, а одни серверы работают быстрее других. Хотя HTTP-серверы технически и не входят в состав исполняющей среды, они применяются практически всегда, поэтому их производительность нельзя не учитывать. В первом тесте мы обойдемся без этих стандартных инструментов, а напишем собственные небольшие HTTP-серверы. Во втором случае мы опробуем подобные тесты с аналогичными HTTP-серверами, чтобы получить более точную и полную картину.

Еще одна проблема — это статические файлы, я собираюсь обойтись в данном опыте без них. Некоторые читатели могут со мной не согласиться, но при современных архитектурах, если вам требуется высокая скорость работы со статическими файлами, написанными на JavaScript или CSS, их просто можно загрузить на облачный сервер, данные которого тиражируются во всей стране. Далее по DNS-конфигурации определяем, какой сервер расположен ближе всего к клиенту, и отсылаем данные весьма быстро. Именно поэтому я собираюсь пропустить эту часть. Вдобавок, если вас интересует максимальная производительность, вы не будете нагружать ваше веб-приложение выдачей статических файлов, а постараетесь выполнять в нем только самую необходимую работу: считывание баз данных, сборка динамического контента и т. п.


Замечание об аппаратном обеспечении

Я хочу гарантировать, что применяемое в тестах оборудование привносит в опыт минимальное количество посторонних переменных факторов. На той машине, где я занимаюсь разработкой, стоит масса дополнительных программ, в частности многочисленные сервисы, которые запускаются автоматически и отхватывают процессорное время. В идеале следовало бы выделить под процесс Java или C# целое процессорное ядро, но, к сожалению, выделение ядер происходит иначе. Вы можете ограничить зону действия процесса одним ядром, но не можете «не допустить» в это ядро другие процессы. Поэтому я выделяю для опыта крупные серверы на Amazon EC2, системы которых можно считать базовыми. Поскольку здесь мы не собираемся сравнивать Linux и Windows, а C# ориентирован преимущественно на Windows (если не учитывать проект Mono, который мы и не будем учитывать), все тесты будут выполнены в Windows.

С клиентской стороны требовалось обеспечить, чтобы результаты не искажались из-за сетевых задержек. Единственная задержка могла испортить итоги всего теста. Поэтому я решил исполнять клиентский и серверный код на одной и той же машине. Итак, я не могу «заставить» операционную систему выделять по ядру на процесс, но могу заключить каждый процесс в своем ядре, что я и сделал.

Сбор результатов

Результаты хронометрировались на клиентской стороне. Делая это, лучше всего отследить время и сохранить его, потом по мере необходимости снова отмечать время, и так до конца теста. Лишь по окончании работы выполняются все подсчеты. Кроме того, я не выводил на консоль никаких данных до полного завершения теста. Распространенная ошибка, которую совершают в подобных тестах: в определенных точках отбираются значения времени, в каждой точке подсчитывается разница во времени, после чего результаты выводятся на консоль. Консоли работают медленно, особенно если их требуется прокручивать. Итак, работаем до конца, а потом вычисляем разностные значения и выводим данные на экран.

Клиентский код

Фактически неважно, какой код мы используем в качестве клиентского — важно последовательно задействовать его во всех тестах. Клиентский код будет имитировать работу браузера и измерять, сколько времени требуется на доставку страницы с сервера. Для этого можно использовать C# или Java. Я остановился на C#, поскольку в нем есть очень простой класс WebClient и несложный класс-таймер.

Первый тест: слушание HTTP

Начнем. Мы протестируем код, который просто открывает HTTP-слушатель и рассылает динамически сгенерированные веб-страницы.

Сначала попробуем Java. Мы можем реализовать описанную задачу несколькими способами, но я хотел бы обратить внимание на два подхода. Во-первых, попробуем открыть слушатель TCP/IP на порте 80 и дождаться входящих соединений. Это очень низкоуровневый метод, при котором мы будем пользоваться классом Socket. Другой интересующий нас вариант — использование класса HttpServer. Вот почему я собираюсь воспользоваться этим классом: если мы действительно хотим сравнить скорость Java и C#, без участия Веба, то можно применить некоторые базовые индикаторы, не связанные с работой в Интернете. Так, можно написать два консольных приложения, которые будут оперировать подборкой математических уравнений и, возможно, также выполнять кое-какой строковый поиск и конкатенацию — но это уже другая история. Здесь нас интересует Веб, поэтому займемся HttpServer и его эквивалентом на C#.

Сразу же я обнаружил одну аномалию: выполнение любого запроса в Java-версии длится почти в 2000 раз больше. На обработку 5 запросов при получении строки из CLR-программы, использующей класс HttpListener, ушло около 17 615 тактов процессора, а на 5 аналогичных запросов с применением сервера Java и класса HttpListener было израсходовано 7 882 975 тактов. Если выразить это соотношение в миллисекундах, то имеем 2 миллисекунды на 15 запросов на сервере C# и 4045 миллисекунд на сервере Java.

Добавив на сервер Java некоторую отладочную информацию, я выяснил, что сама функция, занятая ответами на входящие запросы и рассылкой данных, работает довольно быстро — ни разу не приближаясь даже к показателю в 3 секунды. Вероятно, узкое место расположено где-то во фреймворке Java, при отправке данных обратно к клиенту. Но такая проблема отсутствует при обмене информацией с клиентом C#.

Чтобы докопаться до сути проблемы, я решил перейти на другой Java-клиент. Отказался от сравнительно тяжеловесного класса HttpServer, а взамен создал простой сокет, слушающий TCP/IP — для этого воспользовался классом ServerSocket. Вручную создал строку заголовка и основной текст, совпадающий с отправленным в версию на C#.

Ситуация значительно улучшилась. Могу запускать множество тестов; выполняю 2000 запросов один за другим, но не собираю данных о времени, пока не завершатся все 2000 вызовов к серверу Java. Потом осуществляю аналогичный процесс с сервером C#. В данном случае время измеряется в миллисекундах. На 2000 запросов к серверу Java уходит 2687 миллисекунд. На 2000 запросов к серверу на C# тратится 214 миллисекунд. C# по-прежнему гораздо быстрее.

Поскольку сохраняется такая значительная разница, мне ничего не оставалось, кроме как испробовать версию Java на сервере Linux. Я воспользовался сервером «c1.medium» на Amazon EC2. Установил оба упомянутых класса Java и получил фактически такие же скорости. Класс HttpServer тратит около 14 секунд на обработку 15 запросов. Плоховато.

И, наконец, чтобы быть абсолютно уверенным, я написал на Java эквивалентную клиентскую программу, получающую данные. Временные показатели существенно не изменились.

Второй тест: полнофункциональный сайт

Как я уже указывал, мы редко пользуемся самодельными HTTP-серверами. Программисты, работающие с C#, обычно прибегают к IIS. У приверженцев Java есть несколько вариантов, в частности, Tomcat. В моих тестах я использовал именно эти два сервера. В варианте с C# я задействовал платформу ASP.NET MVC 4, работающую на IIS 8. Применил два метода: в первом случае возвращал HTML-строку от самого контроллера; во втором — возвращал представление, содержащее справку даты/времени.

В тестах Java можно применять два похожих метода. Можно работать с сервлетом, возвращающим информацию на HTML, либо возвращать результаты на странице JSP. Эти методы аналогичны приемам C#, в первом из которых задействуется контроллер, а во втором — представление. Можно было бы применить более новые Java Faces или любые другие фреймворки; оставляю эти задачи всем заинтересованным для самостоятельного изучения.

Контроллер C# просто возвращает HTML-строку. При прогоне моего клиентского теста с 2000 итераций на него уходит 991 миллисекунда. Опять же, гораздо быстрее, чем версия с сокетом Java.

Та версия приложения C#, которая работает с представлением, создает полнофункциональную HTML-страницу, соответствующую всем стандартам. Здесь есть элементы HTML, head, meta, title, body и внутренний элемент div, содержащий текст «The date and time is» с указанием даты и времени. Дату и время мы получаем в экземпляре DateTime.Now, динамически записывая эту информацию при каждом запросе.

Прогон клиентского теста (2000 итераций) в такой версии с представлением занимает 1804 миллисекунды; примерно вдвое дольше, чем напрямую. Напрямую мы возвращаем более краткий HTML, но если увеличить HTML до размеров, сопоставимых с вариантом-представлением, разница практически отсутствует; длительность колеблется в пределах 950—1000 миллисекунд. Даже при добавлении динамической записи даты и времени процесс существенно не замедляется. В любых условиях версия с представлением выполняется примерно вдвое дольше, чем версия с контроллером.

Перейдем к Java. Сервлет не сложнее, чем контроллер C#. Он просто возвращает строку, содержащую HTML-страницу. На возврат 2000 экземпляров уходит 479 миллисекунд. Это примерно вдвое быстрее, чем с контроллером C# — действительно впечатляет.

Возврат JSP-страницы также происходит очень быстро. Как и в случае с C#, второй вариант протекает дольше первого. В данном случае на возврат 2000 экземпляров расходуется 753 миллисекунды. Если добавить к JSP-файлу вызов, возвращающий дату, заметной разницы не возникает. На самом деле, на сервере Tomcat явно выполняется какая-то оптимизация, так как в последующих попытках на возврат 2000 экземпляров тратится уже 205 миллисекунд.

Заключение

Эти результаты кажутся мне довольно интересными. Я много лет профессионально занимался программированием на C#, мне неоднократно говорили, ссылаясь на личный опыт, что .NET — одна из самых быстрых существующих сред исполнения. Но эти тесты свидетельствуют об обратном. Разумеется, они минимальны; я не делал никаких крупных вычислений, активных запросов к базе данных. Возможно, я еще проведу тесты с базой данных и уточню результаты. Но в моем опыте Java побеждает с явным преимуществом.

C# или Java? Какой язык программирования тебе больше подходит?

Если вы пытаетесь найти исчерпывающее сравнение C# или Java – вы попали по адресу! Может быть действительно трудно выбрать только один язык программирования для изучения, когда вы только начинаете в области программирования (или компьютерных наук в целом). В то время как университеты и колледжи имеют свои собственные программы, на которых они изучают языки программирования, тем кто изучает самостоятельно может быть тяжело найти что-то конкретное. Именно здесь поэтому существуют статьи-сравнения как эта – вы не только узнаете (по крайней мере) о двух языках программирования (их плюсах и минусах и т. д.). Но и можете выбрать тот, который подойдет вам лучше всего.

В самом начале мы поговорим о каждом из двух языков. Мы не будем вдаваться в подробности, но у вас будет возможность узнать основные сведения о каждом из них. Узнав основы C # и Java, мы выведем критерии для сравнения C# или Java. Наконец, в самом конце мы проведем само сравнение.

Введение

Независимо от того, знакомы ли вы со всеми тонкостями программирования или вы впервые слышите о C# или Java – будет полезно прочитать краткое введение в оба языка. Преимущества довольно очевидны, если вы новичок – вы сможете развить довольно хорошее понимание обоих языков, прежде чем перейти к реальному сравнению.

Если вы уже являетесь опытным программистом, возможно, вам все же будет полезно пересмотреть базовые сведения о Java и C# (Си шарп). Чем лучше вы разбираетесь в программировании, тем более автоматизированной становится ваша работа – вы больше не задумываетесь о большей части того, что делаете, это становится мышечной памятью и привычкой. Вот почему повторение – мать учения.

Тем не менее, давайте начнем нашу статью про C# или Java с рассмотрения Java.

Создание Java началось в 1991 году. Его создали Джеймс Гослинг, Майк Шеридан и Патрик Нотон. До сегодняшнего дня он наиболее широко известен своим лозунгом WORA – напиши один раз, запускай где угодно (write once, run anywhere). Этот слоган используется для описания универсальности Java – код, написанный на Java, может использоваться на многих различных платформах.

Вся концепция Java заключалась в том, что она должна быть объектно-ориентированной, простой, знакомой и безопасной. Все четыре из этих принципов являются краеугольными камнями, на которых построен язык. Синтаксис Java схож с синтаксисом языков программирования C и C++. Это связано с тем, что C и C++ были самыми популярными языками программирования в начале 90-х годов.

Язык Java тоже не идеальный. Люди утверждают, что, хотя языку программирования удалось сохранить все вышеперечисленные особенности, существует одна область, в которой ему все еще не хватает – старение. Существует немало мнений о том, что язык Java попросту не развивается, а другие популярные языки программирования уже далеко впереди. Однако язык Java стремится оспорить эти утверждения, выпустив Java 9 – эта версия языка поставляется с целым рядом новых обновлений и инноваций.

Обсудив и описав основные моменты Java, давайте продолжим эту статью о C# или Java, рассказав о C#.

C#, созданный Андерсом Хейлсбергом в 2001 году, является языком программирования общего назначения. Он имеет высокий уровень абстракции и поддерживает множество различных дисциплин программирования.

Как и Java, язык программирования C# – это объектно-ориентированный язык программирования (также известный как ООП). Это действительно важный момент, если мы говорим о сравнении C# или Java – языки ООП в какой-то мере стали нормой в мире программирования. Объектно-ориентированный язык фокусируется на объектах и ​​классах вместо того, чтобы акцентировать внимание на логике, которая их определяет. Это позволяет программистам повторно использовать свой код для более поздних, различных проектов и делает процесс программирования в целом более плавным.

Если вы, как разработчик C #, решите использовать Visual C #, у вас также будет встроенный редактор кода. Многие программисты любят язык программирования C#, потому что он очень универсален. Си шарп был создан в Microsoft! Это не только гарантирует отличную производительность, но также означает, что язык хорошо документирован и имеет достаточную поддержку для любых проблем, которые могут возникнуть.

Один из самых больших недостатков C# заключается в том, что если вы хотите запрограммировать приложение .NET, вам придется делать это через ОС Windows. Это может стать серьезным препятствием для некоторых программистов, которые непреклонны в использовании Mac или любой другой ОС.

Итак, теперь – теперь вы знаете некоторую фундаментальную информацию о языках сегодняшнего сравнения C# или Java. Чтобы продолжить, давайте попробуем выяснить основное различие между Си шарп и Java – после этого мы перейдем непосредственно к части сравнения.

C# или Java – различия языков

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

Честно говоря, главное различие между двумя языками программирования в C# или Java заключается в их предполагаемом использовании. Java в основном предназначен для разработки мобильных приложений (точнее – Android). Напротив, C# фокусируется на веб-разработке и разработке игр. Стоит упомянуть, что эти два языка на самом деле больше похожи, чем различны – они оба могут быть использованы для веб-разработки, но также имеют свое собственное назначение!

Еще одна вещь, о которой стоит упомянуть, это то, что хотя язык Java очень гибкий и может легко использоваться для кроссплатформенной разработки, язык программирования C# страдает от отсутствия универсальности. Это важный аспект для программистов, которые ценят гибкость в своей повседневной работе.

Критерий сравнения

На данном этапе мы узнали общую информацию о C# или Java и упомянули некоторые фундаментальные различия между ними. Прежде чем вы на самом деле решите, хотите ли вы изучать и использовать C# или Java, нам все же нужно выявить аспекты, по котором мы будем оценивать. Есть много разных аспектов, на которых мы могли бы сосредоточиться, но это заняло бы много времени и очень, очень длинную статью для сравнения. Вместо этого я выбрал три различные функции, которые наиболее интересны людям, когда они пытаются найти подходящий язык программирования, чтобы начать обучение.


Три функции – это простота использования, поддержка сообщества и зарплата в этой области. Давайте быстро пройдемся по каждому из них.

Простота использования

С течением времени популярность языков программирования, которые легко использовать и освоить, быстро растет. Опытные программисты часто характеризуют это негативно. По их мнению, если человек решит изучать язык программирования высокого уровня в качестве своего первого языка программирования, он теряет много возможностей для развития своего логического мышления и математических навыков и упускает из виду философию программирование, в целом. Хотя эта тема действительно противоречива, цифры говорят сами за себя – люди ищут языки программирования, которые не требуют много времени для изучения, и сравнение C# или Java не является исключением.

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

Цукерберг рекомендует:  Добавление эффекта сепии к изображению на HTML5

Поддержка сообществом

Сильная поддержка сообщества – очень важная особенность для любого языка программирования. Сообщество помогает не только поддерживать язык, но и предоставляет отличные возможности для обучения новичков. Позвольте мне уточнить.

Какой бы язык C# или Java вы ни выбрали, вам, вероятно, захочется начать изучать его онлайн, через курсы, видеоролики на YouTube или любым другим способом. Должно быть много соответствующей информации о языке, который вы могли бы выбрать. Популярные языки программирования предлагают различные источники на выбор, так что вам не нужно беспокоиться. Если бы мы рассматривали другой, неизвестный язык программирования, есть вероятность, что вы действительно не сможете изучить его через онлайн-источники – вы просто ничего не найдете

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

Зарплата

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

Однако не все языки программирования имеют одинаковую зарплату. Это также верно в нашем сравнении C# или Java – оба эти языка предлагают разные зарплаты. Естественно, сумма денег, которую вы можете заработать, зависит от нескольких факторов: сложности языка программирования, уровня владения им, компании и даже местоположения вашей работы (географической). может отличаться огромными наценками в разных странах). Однако одно можно сказать наверняка – программирование в целом – это сверхприбыльная и стабильная карьера, и это одна из его главных привлекательных сторон.

Сравнение

Теперь, момент, которого вы ждали – сравнение C# и Java. У нас есть основы, мы знаем различия между двумя языками, и мы выделили критерии. Осталось только ответить на вопрос – C# или Java?

Какой из языков проще использовать?

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

Хотя раньше Java был проще, недавние обновления C# как бы выравнивали игровое поле. Конечно, оба они не близки к уровням простоты, скажем, Python, но они также намного проще, чем C++.

У какого языка шире поддержка сообщества?

Опять же, хотите верьте, хотите нет – и C# или Java одинаково популярны. Это потому, что они имеют много общего во всех аспектах этого вопроса. Оба языка отлично подходят для веб-разработки, но оба они также имеют свое специфическое применение.

Когда дело доходит до изучения C# или Java, вам не нужно беспокоиться – какой бы вариант вы ни выбрали, информации в Интернете более чем достаточно. Будь то курс или статья, которую вы ищете, вы не столкнетесь с какими-либо препятствиями, пытаясь изучить C# или Java.

В какой сфере выше зарплаты?

По данным Glassdoor.com, средняя годовая зарплата разработчика Java составляет около 88 100 долларов США. Это составляет 7340 долларов США в месяц. По данным того же веб-сайта, зарплата разработчика C# составляет чуть более 95 000 долларов США в год или около 7920 долларов США в месяц.

Как вы видите, разработчик на C# зарабатывает немного больше денег, чем разработчик на Java. Разница не так уж и значительна, но она все же имеется. При этом обе зарплаты значительно выше средней!

Заключение

Итак, каков будет вывод этого сравнения C# или Java? Оба языка похожи, это точно. Тем не менее, если вы хотите больше ориентироваться на разработку игр, то C# – это определенно правильный путь, в то время как люди, ориентированные на веб-разработку, могут найти Java более подходящим выбором.

Я надеюсь, что это сравнение было полезно для вас, и вы узнали что-то новое о C# и Java! Желаем удачи и увидимся позже!

Junior C# Developer

Пользователей в процессе подтверждения: 5459

Описание квалификации Junior C# Developer

Уже достаточно давно платформа .NET захватила значительную часть рынка разработки программного обеспечения. А одним из самых популярных языков программирования для этой платформы является C#. И не удивительно, ведь в наше время C# изучают в университетах на ряду с такими языками как C++, Pascal и Java.

Junior C# разработчиком обычно называют программиста, который только начинает свою карьеру в ИТ и практически не имеет опыта коммерческой разработки продуктов на C#.

Обычно от младшего разработчика на C# не требуется глубокого знания какой-либо конкретной технологии или framework’а. Достаточно знать зачем некоторая технология нужна, какие задачи она позволяет решить, ее преимущества/недостатки в сравнении с технологиями-конкурентами.

Современному Junior C# Developer’у для успешной работы на своей должности необходимы следующие знания:

  • Основы программирования (системы счисления, базовые алгоритмы, базовые структуры данных)
  • Язык программирования C# (синтаксис, знания ООП, стандартная библиотека)
  • OOP и OOD (парадигмы объектно-ориентированного программирования, паттерны проектирования)
  • ASP.NET (основы создания веб-приложений)

А теперь подробнее о подтверждении квалификации на Junior C# Developer’а.

Необходимые тесты

Программирование — Основы

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

C# — Основы

Тест содержит вопросы как по синтаксису, так и по практическому использованию той или иной возможности языка C#. Вопросы теста преимущественно простые, но будьте готовы встретить вопросы похитрее, которые проверяют понимание и умение анализировать код без помощи IDE.

ООП — Основы

Знание ООП парадигм на базовом уровне безусловно необходимо для Junior’а. Данный тест как раз и ставит задачу проверить знание ОО подхода к написанию программ. Вопросы в основном теоретического плана и требуют соответствующего уровня подготовки.

ООП в C#

Тест посвящен реализации поддержки ООП в C#. В тесте проверяется знание вопросов, которые часто задают на собеседованиях Junior’ам: «как реализовать множественное наследование в C#», «в чем отличие абстрактного класса от интерфейса» и т.д. Тест содержит в основном практические примеры и неплохо дополняет предыдущий тест по теоретическому ООП.

ASP.NET — Основы

Естественно область применения C# не ограничивается вебом, но чаще всего C# программисты начинают свой путь именно с исправления ошибок и реализации несложной функциональности в веб-приложениях. Тест ASP.NET состоит из простых вопросов по синтаксису, директивам, серверным элементам управления.

Написание статьи


Написание статьи необходимо для того, чтобы убедиться в умении молодого .NET специалиста разбираться в новых технологиях с одной стороны, и, с другой стороны, — грамотно излагать свои мысли. Тематика статьи должна касаться предметной области. Как вариант можно предложить на рассмотрение администрации 3-4 темы для статьи, а администрация предложит для написания одну из них. Написанная вами статья не должна быть ранее опубликова на других ресурсах.

Составление вопросов

Необходимость составления вопросов преследует ту же цель, что и написание статьи: умение аналитически подходить к изучению нового материала. Ограничений на тематики вопросов для собеседования нет. Главное, чтобы вопросы были интересными и содержали качественные пояснения с примерами кода (если это возможно).

Важно: Вопросы по поводу статьи можно задавать в комментариях на странице Вашей квалификации (не перепутайте с публичной страницей описания), на которую можно зайти из ссылки на профиле в блоке Квалификации.

C# глазами Java

Есть два подхода к сравнению языков программирования: религиозная война и «a нам всё равно». Я постараюсь втиснутся между ними и начну с общего. Ключевой особенностью и Java, и C# является автоматическое управление памятью. Конечно, оба языка этого совершенно не подходят для написания ядра операционной системы, но зато существенно упрощают разработку прикладных программ, потому что:

  • остаётся меньше возможностей для memory leak;
  • не надо писать код для освобождения памяти;
  • можно написать f(g(x)) и не думать об освобождении памяти от

Итак, мы имеем две массовых платформы для разработки программного обеспечения, на каждой из которых работают миллионы программистов; за каждой стоят мировые софтверные гиганты, но ни одна не имеет революционных преимуществ.

Влияние Microsoft

Исторически Java появилась раньше .NET и потихоньку захватывала рынок не только серверного ПО, но и для корпоративных клиентов, потому что C++ сложноват для рисования формочек, Visual Basic не похож на язык для крутых девелоперов, а Borland инвестировал в Java больше, чем в Delphi.

Но чем больше приложений на Java, тем меньше потребность в Windows, поэтому Microsoft решил не поддерживать Java, а создать .NET, чтобы стимулировать разработку программ для Windows. Кончено, кроссплатформенность у .NET есть, но, с точки зрения Windows, .NET стремится стать частью операционной системы, как Internet Explorer. Карьера предполагает тесные партнёрские отношения с Microsoft, включая использование среды разработки Visual Studio, базы данных MS SQL и системы контроля версий Visual SourceSafe.

Нужно отдать должное маркетингу Microsoft, многие компании предпочитают думать о программном обеспечении не выходя за рамки видения Microsoft. Иногда этого приходится откладывать в сторону любимую Java и брать в руки C#. Хорошая новость в том, что накопленный в Java опыт помогает и в .NET, а развитие .NET стимулирует прогресс Java.

CVS vs. VSS

Большинство привыкли к CVS, после этого переход на Visual SourceSafe в сочетании с реализацией интеграции с ним в Visual Studio и концепцией воспринимается весьма болезненно. Справедливости ради стоит отметить, что переход на CVS в большом проекте теоретически возможен, но вызовет крайне негативную реакцию людей, привыкших к VSS.

В этом месте можно было бы немного помахать кулаками на тему «почему CVS лучше VSS», но я этого делать не буду, потому что CVS тоже не идеален, и есть такой проект как Subversion, который открыто позиционируется в качестве замены CVS. Microsoft тоже не считает VSS своим флагманским продуктом и готовит ему замену в виде Visual Studio 2005 Team System.

Влияние VB.NET

Программы на многих языках могут быть скомпилированы в для JVM, но практически абсолютно всё программное обеспечение для платформы Java написано именно на Java. Для .NET примерно с равной вероятностью проект может разрабатываться как на C#, так и на VB.NET, причём очень часто используются сразу оба языка.

Понятно, что C# и VB.NET практически не имеют между собой отличий, кроме синтаксиса, но вносят раздробленность в сообщество разработчиков. Даже если использовать только на C#, то в результатах поиска по документации всегда будут путаться материалы, относящиеся к VB.NET. В MSDN можно настроить фильтр по языку программирования, но всё равно, на мой вкус, документация по Java значительно удобней и понятней.

Разработка GUI

Разработка GUI на C# являет типичным примером RAD, как Delphi. На Java GUI, как правило, делается при помощи Swing. Хотя Swing весьма объёмен и сложен, хорошая продуманность и расширяемость архитектуры в сочетании с доступными исходными кодами позволяет разрабатывать GUI любой сложности.

Разработка веб-приложений

Я съел собаку на разработке на Java, но никогда не использовал ASP.NET; тем не менее, я вполне допускаю, что ASP.NET имеет определённые и весьма существенные преимущества при создании небольших сайтов. Однако, эти преимущества выделяют в отдельный сегмент, очень многие специализируются либо только на GUI, либо только на веб. На Java можно создавать без использования специфических технологий вроде JSP, JSTL или Struts: extends HttpServlet — и вперёд!

Конечно, рынок разработки сайтов Java без боя не отдаст, можно ожидать новостей от или от Fabrique. В любом случае, делать — это не самый сложный класс задач для современных языков программирования.

Is everything object?

В Java очень популярен лозунг «Everything is object», в C# это не так. Первое, что бросается в глаза — наличие структур в C#. Очевидно, что есть мотивы использовать структуры для повышения производительности, но мне кажется, что современные компьютеры достаточно производительны, чтобы не добавлять ещё одну сущность в язык.

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

Если уж зашла речь о delegate , то нужно упомянуть и об event — они действительно сокращают размер кода при разработке GUI, хотя и ценой отступления от идей ООП.

В определённой степени C# менее лаконичен, не вдаваясь в подробности, ограничусь упоминанием ключевых слов virtual , override , ref , out и param , не имеющих аналогов в Java.

Влияние платформы на самосознание программистов

Безусловно, больше всего на качество программного обеспечения влияет качество самих разработчиков, а не язык программирования. Тем не менее, мой опыт говорит о том, что в подавляющем большинстве проектов на Java для build management используется Ant, а в .NET очень часто билды делаются встроенными средствами Visual Studio, хотя аналогичные инструменты существуют и для .NET. Кроме этого, в C# нет чётких правил наименования классов и их размещения на диске, что часто вносит дополнительную путаницу (конечно, квалифицированные программисты успешно борются с этой проблемой).

В С# нет checked exceptions, есть даже объяснение почему. Такое решение имеет свои резоны, но если компилятор не контролирует обработку checked exception, то нужно больше рассказывать об обработке ошибок через другие коммуникационные каналы, иначе появятся программисты, которые вообще не будут знать, что такое exception.

Тигры рвутся вперёд

Есть области, в которых Java доминирует безусловно, например, игры для мобильных телефонов или технология JavaCard. Однако, борьба между C# и Java за долю на рынке будет идти ещё долго, обе платформы будут совершенствоваться, например, в Java 5 и .NET 2.0 появится поддержка generics.

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

Благодарности

Огромное спасибо Дмитрию Жемерову, благодаря которому вам не пришлось читать всю ту ерунду, которую я написал сначала, компании DataArt, которая дала мне возможность заниматься изучением C# в рабочее время, коллегам из компании DataArt, которые оказывали мне интеллектуальную и моральную поддержку, а также компании JetBrains, которая очень вовремя начала делать ReSharper, который позволяет получать на C# многие виды удовольствия, привычные пользователям IntelliJ IDEA. Особая благодарность Алексею Пчелинцеву за заботу о букве Ё.

.Net Core 3.0 C# 8 vs Java 12

Java, как язык, че-то тухло развивается, на фоне .NET Core и C# 8. Как оно вообще, на Линукс, взлетело? Майкрософт очень не хило бустит эту платформу в opensource — тут тебе и Docker сборки постоянные, и уже даже работа на Upwork переодически подворачивается под .net core.

Попробовал под маздаем, вроде, гламурно. Жрёт мало, работает шустро, имхо, можно начинать писать Console Application только в путь, особенно тем, кто ратует за статическую типизацию и ооп, C# 8, async/await.

Есть Rider, VSCode, VisualStudio IDE.

Пишите свои саксесс стори с .NET Core, благо майкрософт скоро выкатывают 3-ю версию, пора бы уже завоёвывать рынок демонов и игровых серверов, кстати, что, если переписать Minecraft Game Server под .net core — он будет меньше течь и жрать рамы? :)

На третий день индеец орлиный глаз заметил.

Я пишу под кор. Все отлично, и с инфраструктурой и IDE, и так далее, и на порядок лучше чем в жабах и прочем г.

А мне вот интересно, swift для веба используют?

Давно перелез с жабки на .NET Core, ощущалось это как глоток воздуха. Правда в последнее время меня из языков на нем больше всего интересует F#, в плане инфраструктуры пока что он гораздо удобнее Haskell.

На работе пишем бэкенд под .net core больше года, проблем нет. Сторонние библиотеки тоже его поддерживают, не помню случаев, чтобы какой-то не хватало (разве что нхибернейт вроде как забил на core)

После студии rider несколько уныл, но быстро привыкаешь.


Хипстерьё из IntelliJ примазалось к F# или ещё нет?

в 2020 завезли поддержку f# в райдер

Java, как язык, че-то тухло развивается

Норм развивается, а если на будущую перспективу, так просто отлично. В общем, если бы не перспектива, то я бы задумался о .net под линух. А так не вижу смысла, можно побыть ждуном. А не разбирать грабли новой платформы это же время.

На гитхабе как-то уныло с либами для бекенда по сравнению с той же джавой

Попробовал под маздаем, вроде, гламурно.

А зачем бекенд под маздаем? Я уж не говорю о бизнес приложениях. Сейчас можно за $25 взять компьютер на ARM и запускать аналог 1С на джаве под убунтой. Но пока я вынужден покупать Intel NUC за $135 (это я еще сумел найти, а так много дороже) без RAM и HDD. И ставить Windows 10, неделю разбираясь с OpenVPN, которая там работает через одно место.

Жрёт мало, работает шустро, имхо, можно начинать писать Console Application только в путь

Так и на джава тоже самое, через GraalVM можно уже бинарники делать без JVM.

Пишите свои саксесс стори с .NET Core

Понравилось как быстро и просто цеплять DLL-ки под маздаем (столкнулся, когда разбирался с OpenVPN под Windows 10), жду когда в джаву нечто подобное запилят из коробки. Точнее, в GraalVM уже есть, но теперь осталось дождаться в майнлайне.

он будет меньше течь и жрать рамы?

Зависит от кривизны рук переписчика.

А не разбирать грабли новой платформы это же время.

.Net Core давно уже стабильна. Уже 3я версия выходит, если че. У нас 2.1 в проде.

На гитхабе как-то уныло с либами для бекенда по сравнению с той же джавой

С чего бы? И, NuGet смотри, а не github. Огромное количество либ есть, на все случаи жизни. И 95% либ щас пишется под .Net Standard, значит они везде работают.

А зачем бекенд под маздаем? Я уж не говорю о бизнес приложениях.

Винда отличная система, это раз, во-вторых, на линуксе работает абсолютно всё, кроме виндоспецифичных вещей(AD, WMI, COM, итп).

Цукерберг рекомендует:  Отзывы о курсах .ru (ГикБрейнс) – обучение, стажировка, трудоустройство

Ты не поверишь, Core работает и под ARM

И ставить Windows 10, неделю разбираясь с OpenVPN, которая там работает через одно место.

Почему-то у меня на то чтобы сделать себе OpenVPN, ушел час. Из него 90% времени, это настройка сервака на линуксе. А виндовый клиент работает вообще из коробки, подсовываешь ему конфиг, и всё.

Так и на джава тоже самое, через GraalVM можно уже бинарники делать без JVM.

.Net Core рвет Java, как по времени запуска, так и по производительности. И может собирать standalone приложения без адских кривых костылей и всяких платных приблуд типа excelsior jet.

Зависит от кривизны рук переписчика.

Любой .Net по определению будет жрать меньше памяти, т.к. там есть Value-типы.

Из него 90% времени, это настройка сервака на линуксе.

А я делал сервер на виндовсе, даже не спрашивай зачем ) Загвозка была с файрволом и нежеланием попасть OpenVPN TAP интерфейса в частные сети. В итоге так и не победил, тупо отключив на TAP интерфейсе файрвол.

.Net Core рвет Java, как по времени запуска, так и по производительности.

Ой, да ладно, речь идёт о бинарниках, а не о JVM

И может собирать standalone приложения без адских кривых костылей и всяких платных приблуд типа excelsior jet.

Про excelsior jet не знаю, я же английским языком написал GraalVM и это не костыль, это ожидается в майнлайне.

Любой .Net по определению будет жрать меньше памяти, т.к. там есть Value-типы.

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

Вот если бы .NET Core появился в году так в 1998 под линух, то тогда да, шансы были бы.

На Андроид на .Net Core и эпичные судебные тяжбы с Гейцом :-D

Ну .net core давно взлетел под линукс насколько мог взлететь. Просто не стоит от него жать чего-то такого, ну типо как nodejs или той же жабы, то есть победоносного шествия — не будет, никогда. Просто потому что особенно ничего такого он не предлагает. За жабой стоят реальные ынтерпрайзодетатели, а мелкие всё больше скатываются в жипсторятину, а там есть гугл со своими опостолами и ещё целая шайка контор. Иными словами тягаться с жабистами бесполезно, не тот вес, жаба это целая инфраструктура, точнее множество инфраструктур и уютная ынтерпрайзная атмосфера. Ну а тягаться с go и nodejs вообще никак.

У нас проект успешно взлетел на .NET core, впечатления вполне хорошие, если рассматривать платформу как мелкософтскую, то вообще зашибись впечатления. Взлетает на обычных линукс конфигурация без проблем, nuget успешно рулит пакетами, всё хорошо. Стартует плавно, особого подхода не требует, без проблем интегрируется с любым проксирующим современным http сервером. Но это всё хорошо смотрится именно на фоне обычного .NET, в том числе фичи языка. Фичи всё равно проникают в продакшин не так быстро. Особенно в крупных проектах. У нас был проект довольно древний, с громадной mssql базой с бизнеслогикой, довольно успешно всё то дерьмо, что было vbasic и C# переписали на c# .net core, естествено почти ничего не меняя в базе. Впечатления положительные только остались.

И да, из впечатлений понравилась работа с http запросами, поскольку новый проект был на angular client + core net rest backend, а его прародитель asp .net с кучами говна.

Шансы на долгую жизнь. А здесь сменится политика партии, и все — придет кирдык дот-нет-коре на линуксе.

Я думаю они наконец-то собрали нормальных специалистов из индустрии, совершенно не индоктринированых в Microsoft way. И они просто принесли опыт того как успешно делались экосистемы языков, community, управление пакетами, сборкой, интеграцией с IDE и контейнеризацией. Новый .NET Core даже не .NET вовсе, с жиробасным непортабельным SDK, пыхтящей IDE с рекламой и отсутствием каких угодно best practices. Это реально очень другая штука, сделаная реально адекватно. По сути они перепрыгнули эволюцию Java/Sprint/JavaEE добавили удобство контейнеризации, IoC и управления пакетами. Короче приехали на такси к финишу.

Только что меня кинули с люто-Ынтерпрайсной жабы (IBM WebSphere, MQ, eclipse link, и еще 9000 EE-технологий) на свежий модный молодежный бекенд на корке. С нуля. Вот сижу, въезжаю в эту наркоманию. От количества синтаксического сахара у меня скоро случится диабет. И какое-то невменяемое количество магии. Это конечно все хорошо и круто, пока ты придерживаешься стандартных паттернов, но стоит только захотеть чего-нибудь странного, как ты тут же получаешь волосатый хер, потому как всю эту магию приходится переписывать вручную.

Короче, для простеньких проектов сойдет, но для серьезных вещей я бы предпочел жабу.

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

Насколько помню, это всегда было характерной и отличительной особенностью микрософтовских решений, еще до появления всяких дотнетов. Это их фирменный почерк.

Java, как язык, че-то тухло развивается,

Я бы вообще ее заморозил. Добавлял бы только новые классы в библиотеку.


Что оно такое интересное делает? Ну вот по сравнению если я пойду и скачаю обычный WildFly

Да ничего оно уникального не делает. Страдать нас заставляет. Это просто чтобы оценить всю степень Ынтерпрайзности: у нас джава-машина от IBM! Разве кто-то согласится на такое по доброй воле?

C# против Java

Сегодня прочитал следующее письмо, которое пролежало в ящике несколько дней (простите, все не было времени прочитать и ответить)

Михаил, привет. Изучаю Библию С#, спасибо за книгу. Но уже несколько человек сказали мне, что я нуб, и гораздо перспективнее начинать серьезно учить Java, так как работы больше, зарплаты выше и перспектив у языка больше. Поэтому хотел бы с тобой посоветоваться: с одной стороны Microsoft все-таки посильнее чем Oracle и C# развивается намного быстрее, но Java кроссплатформенный, а при сегодняшнем буме планшетов и смартфонов это большой плюс. Что ты думаешь по этому поводу? Какие перспективы у .NET? Какие тенденции в западных странах? Тема очень холиварная,!

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

Я никогда не выбирал язык за перспективность. Когда я выбрал Delphi, то это было потому, что мне нравился Паскаль и его перевоплощение в виде Delphi. Если бы я смотрел на перспективу, то выбрал бы C++, потому что Delphi популярен в России, немного в Германии и еще паре стран. В северной Америке полно народу, которые даже не знают о его существовании. Мне нравится C++ и я его использовал, но душа больше лежала на стороне Delphi.

Я выбрал C# не потому, что он перспективнее Java, а потому что мне он больше нравится. Я пытался изучать Java, несколько раз заставлял себя, но не смог ничего серьезного на нем написать. Ну не мое это, раздражает меня этот язык и вся платформа. Это личные предпочтения каждого. Если тебе нравится этот язык, то пиши на Java, если нравиться C# то пиши на C#. Но какой бы язык ты не выбрал, я бы просто на всякий случай изучал бы второй из них. Просто на всякий пожарный случай.

Лично я свои яйца разделил на две корзины (было больно, но я потерпел) – PHP и C#. Если какая-то из этих корзин упадет, то хотя бы с одним яичком я останусь. Хотя я все же в обеих корзинах уверен.

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

А вот теперь к халивару – перспективность языков. Если посмотреть на компании, которые поддерживают каждую из сторон, то Microsoft выглядит мелким школьником, потому что на противоположной стороне расположились такие гиганты как Oracle, Google и мега любитель Java корпорация IBM. Если сложить эти три кита, то Microsoft превращается в гонца за пивом. Но если посмотреть на историю, то гонцами становятся как раз киты.

Компания IBM любит Java и поддерживает ее уже долгие годы, но при этом Java практически не развивается и по разным рейтингам популярности этот язык во всех сферах летит вниз. И если бы не Google со своим Андроидом, то Java потеряла бы еще больше. Oracle вообще не особо влияет на судьбу языка. Они и не могут сильно повлиять, потому что они выпускают сервера (достались от Sun) и базы данных, поэтому на популярность платформы Java не могут сильно повлиять. А вот Google может и смог.

Я считаю, что только благодаря мобильной платформе и корпоративному рынку SAP систем язык еще жив (это только мое больное воображение после шока от разделения яиц). На рынке создания Web сайтов Java практически не используется, потому что он неудобен (опять же, мой больной взгляд). Тут властвует PHP и будет королем еще долгие годы. Все эти руби на рельсах, как камары на костылях появляются каждый год и кричат что они убийцы, а на самом деле через некоторое время превращаются в лузеров и так ничего и не захватывают.

На настольной платформе Java тоже не смог ничего показать. Этот язык на много старше .NET, но на .NET уже написано в несколько раз больше.

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

Понравилось? Кликни Лайк, чтобы я знал, какой контент более интересен читателям. Заметку пока еще никто не лайкал и ты можешь быть первым

C# или Java: что учить, что перспективнее в России/Европе?

hadestm

Здравствуйте!
Хочу сразу оговориться. Я не начинающий программист, но и к опытным себя тоже не могу отнести. Работаю в данный момент РНР-программистом в одной не крупной конторе около года.
Задался целью расширить свои профессиональные навыки.
В данный момент обладаю следующими знаниями:
C/C++, STL, PHP, Zend Framework, HTML, CSS, XML, XHTML, XSLT, JS, AJAX, jQuery
VB (основы)
MySQL, SQLite
CMS: Joomla, Drupal
Задался вопросом, что учить лучше: Си шарп или же Джаву? По функциональности вроде бы примерно тоже самое. К плюсам явы можно отнести ее кросс-платформенность, но и минусов тоже хватает.
Что на ваш взгляд перспективнее, что легче освоить и за какой срок примерно?
Под освоением я подразумеваю ни синтаксис(его я могу выучить и за пару дней), а билиотеки(классов). И что конкретно из билиотеки классов следовало бы выучить (знать что бы можно было использовать в повседневной практике не подсматривая в документаию каждые пол минуты).

Заранее благодарен за ответ.
Дополнено (1). Господа, какие основыне фреймворки для Явы есть? Как насчет их документированности и глючности?
Дополнено (2). Pharmakis, я не могу назвать минусы и плюсы ни одной не второй технологии, ибо с ними я не знаком…

Неровный каток

Учить C#

Гость

Назовите минусы java по сравнению с c#. Не просто так минусы, а именно по сравнению. Это поможет вам определиться.
А вообще шарп как любая мелкомягкая технология оплачиваемей скорее всего.

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

monyag

Ну это как сказать… И то и то хорошо в равной мере. Платят за j и c# примерно одинаково. Я выбрал Java, но на должности JavaDeveloper в одной забугорной корпорации пишу всем на чем скажут, в том числе На Java, VBScript, Cpp… Список можно проболжить. Java — отличная школа и прекрасная платформа для разработки. Мой плюсик за нее

super-medved

Если вы программируете на PHP значит вам интересны web-технологии, если вам интересны web-технологии лучше наверное C#, так как ASP.NET развивается быстрее j2ee и я думаю скоро обгонит его. Хотя Java это кроссплатформенность, на западе Java популярней чем у нас.

MBen

>ак как ASP.NET развивается быстрее j2ee и я думаю скоро обгонит его

грянул кризис пару лет назад, и я наблюдал миграцию прогеров с аспа на пхп и яву — поскольку мало стало компаний, готовых платить за c#-разработку, проприетарное софт-окружение и асповый хостинг…

по библиотекам — легче (быстрее) пойдет освоение шарпа, ибо с явой наблюдается большой зоопарк оных.

HukoJIau

Учи питон… Низнаю сколько перспективнее, но насколько приятнее кодить на питоне по сравнению с другими языками я даже описать не смогу.
Попса может измениться, нужно выбирать то, к чему душа лежит, это как в игре LineageII пока будешь убер класс качать его могут понерфить;) сорри за жаргон…

ercalote

лучший ответ Хм… Если есть желание остаться в разработке под веб, то советую обратить внимание на фреймворк ASP.NET MVC. Именно с припиской MVC, а не не классический ASP.NET (между ними есть много фундаментальных отличий).

А выбор между C# и Java… Платят больше за C#, но, скажем, под тот же андроид, нужно писать на джаве. Если вопрос только в деньгах, то учите мелкомягкие технологии. Но я советую пощупать обе технологии: сердце подскажет.

Разработчик C#

В феврале 2020 года

За 5 месяцев мы последовательно рассмотрим особенности языка C# до уровня начинающего Senior / крепкого Midlle. Подробно изучим внутренние механизмы и устройство языка, CLR (LINQ, многопоточность, асинхронность, рефлексия, сериализация). Научимся разворачивать различные конструкции и представлять их в промежуточном языке (IL). Поработаем с SQL и NoSQL базами данных, кэшированием, Unit-тестами, CI/CD и другими сложными и полезными инструментами профессиональных разработчиков C#.

Must have практики
В процессе обучения рассмотрим паттерны проектирования Банды Четырёх, шаблоны корпоративных приложений Фаулера, принципы SOLID, DRY, YAGNI и другие. А в последнем модуле затронем темы для повышения вашей ценности как специалиста: методологии (Waterfall, Kanban и пр.), подходы (TDD, DDD и пр.) и профессиональный инструментарий программиста (LinqPad, Fiddler и пр.).

Программа разработана специально для C# Developers, которые хотят:
— прокачать технические навыки и получить целостное понимание .NET Framework и языка C#;
— с лёгкостью отвечать на вопросы на собеседованиях;
— научиться работать в Scrum-команде и на практике понять эффективность Agile-подходов.

Один из разработчиков academy.cppstudio.com — бесплатного интерактивного сервиса по обучению С++. Свыше 5 лет опыта разработки приложений на C++ и C#.
Используемые технологии и фрэймворки:
WPF, WinForms, EF6, ASP.NET MVC5, ASP.NET Core 2.

Профессиональный программист. Преподаватель языка Java в колледже.
Автор видеокурсов по C#, Java, PHP

20 лет опыта ведущим программистом в разных фирмах и опыта преподавания в университете, колледже. 6 лет опыта ведения вебинаров и создания видеокурсов

Три самых крупных завершенных проекта:
PHP. Служба знакомств в интернете — PHP, MySQL, FreeBSD, C/C++
C#. Программа расчёта заработной платы на АЭС — C#, MS-SQL Server
Java. Видеокурс создания игры Сапёр на Java: https://goo.gl/24DgBg

Статьи на Habrahabr:
Как я создавал методику изучения C# — habr.com/post/239825/
Об альтернативном образовании и про C# — habr.com/post/257957/
Изучение C# — Практический подход — habr.com/post/304142/

Участие в IT-конференциях в Литве, призовое место в конкурсе программирования InfoBalt, призовое место на республиканской олимпиаде по математике и информатике

С окончания школы в 1996 году постоянно преподавал информатику в университете, школе, на кружках, в ДДТ, на предприятиях, в колледже. С 2013 года ведет вебинары онлайн, записывает видеокурсы
https://www.VideoSharp.info/

В 2002 году закончил Вильнюсский государственный университет по специальности «Магистр математики и информатики», а в 2008 году по специальности «Учитель профессии»

«В детстве меня вдохновила «Занимательная ***» серия книг Я. И. Перельмана. Считаю своим призванием создать занимательную методику обучения программированию.»

Team Lead в компании YouDo в Москве. Команда состоит из 12 человек и включает в себя бекенд, фронтенд, Android, iOS разработчиков, а также инженеров тестирования сайта и инженеров тестирования мобильных приложений.

Получил первое высшее образование по специальности «Информационные Системы и Технологии», параллельно работая программистом в Информационно-Вычислительном Центре, председателем факультета в профсоюзе и заместителем председателя в студенческом совете.
Пока получал второе высшее образование по специальности «Менеджмент Организации», создал сайт студентов потока, делал сайты на заказ, работал программистом в компании, разрабатывающей сканирующие установки для предприятий лесоперерабатывающей отрасли и старшим лаборантом в Институте Физиологии Коми Научного Центра. В 2013 году отправился покорять Москву, где до YouDo успел поработать в Актион-МЦФЭР, Social Discovery Ventures и Лаборатории Касперского.

Опыт программирования начинается с 2000 года, который включает в себя 10 лет оплачиваемого опыта работы с C#. Благодаря девизу «Постоянно учиться и расти», помимо двух высших образований, за его плечами большое количество всевозможных курсов и профессиональных переподготовок начиная с программирования на 1С и заканчивая курсами по Продакт (Нетология) и Проджект (ВШБИ при НИУ ВШЭ) менеджменту.

Главный программист Insense Arts LLC, доцент кафедры ВТИСиТ УГТУ, главный редактор журнала «Информационные технологии в управлении и экономике».
Основатель проекта Межвузовской информационной системы оценки деятельности студентов вузов, основатель проекта «Мобильный хронометр». Заведовал ИТ-кафедрой, был директором студии мобильных разработок «Л-ИС». Писал в одиночку клон «Космических Рейнджеров» — первая версия на C++, вторая — на C#.
Учился в УГТУ на кафедре ИСТ (сейчас ВТИСиТ) и еще в нескольких местах — обладатель коллекции из 3 красных дипломов и корочки кандидата наук.
C 2009 года 90% проектов написаны на C#. Выбрал этот язык за удобство написания, мощность IDE и разнообразие применений.

Понравилась статья? Поделиться с друзьями:
Все языки программирования для начинающих