Я сейчас изучаю C#. Мой клиент организовал новое хранилище данных, а клиентское приложение будет на Windows. Как новоиспеченному консультанту, так же не помешает опыт в .NET/C#, даже если я предпочитаю разрабатывать на любой платформе, кроме Windows… Как консультант, я должен заботится о получении контрактов в будущем. Если для этого следует использовать и разрабатывать под Windows – я буду это делать, даже дома.
Я люблю Java VM. Она зрелая, быстрая, чрезвычайно мобильна(portable) и существует масса языков, которые работают на ней. Когда я программировал на Java, я был единственным человеком в команде, у которого стоял на рабочем компьютере Linux, все остальные использовали Windows. Когда вы пишете на Java — это не имеет значения. В реальности, это было даже преимущество. Некоторые наши клиенты использовали ПО на Unix-подобных системах. Имея хотя бы одного разработчика, который пользовался и тестировал наш продукт на Linux, было уже выигрышем. Наша система сброки билдов работала на слабом Linux-сервере. Так как Java запускает везде, где стоит Java VM, любой из нашей команды, как и наши клиенты, мог запустить ПО.
Но Java, как язык, начал меня угнетать. Его оставили на пыльной полке. Scala является моим любимым языком на Java VM, включивший в себя много новых идей, которые все еще ищут свой путь в Java.
Хуже всего доя энтузиастов Java – Java пал позади C#. Я изучал C# по книге О'Рейли «C# in a Nutshell ». Эта книга отличный путь к изучению нового языка, если до этого вы уже знаете n-ое кол-во других языков. Я должен был дать Micorosft шанс (даже если это делает мне больно). Вот некоторые вещи в C#, которые Java не умеет:
Вдобавок, у Java много одинаковых вещей с C# включая:
Я до сих пор склонен к JVM, нежели к CLR. JVM — огромная, зрелая, быстрая и самое главное – мобильная. Но Java, язык, пал позади и теперь у него большой недостаток в полезных особенностях, которые есть у C#. Я до сих пор использую Scala потому, что он корректирует недостатки Java, дает много современных возможностей, позволяя при это использовать мощь и удобства JVM. Используя библиотеки или встроенные возможности, Scala предоставляет те же возможности, что и C# и более. Но в .NET мире C# является lingua franca. И C# и .NET большие конкуренты Java.
Sun и Java комьюнити позволили Java находится в застое, по сравнению с C# и Scala, и ей не приятно пользоваться. Как давний программист Java, я должен сказать, что я огорчен.
Я люблю Java VM. Она зрелая, быстрая, чрезвычайно мобильна(portable) и существует масса языков, которые работают на ней. Когда я программировал на Java, я был единственным человеком в команде, у которого стоял на рабочем компьютере Linux, все остальные использовали Windows. Когда вы пишете на Java — это не имеет значения. В реальности, это было даже преимущество. Некоторые наши клиенты использовали ПО на Unix-подобных системах. Имея хотя бы одного разработчика, который пользовался и тестировал наш продукт на Linux, было уже выигрышем. Наша система сброки билдов работала на слабом Linux-сервере. Так как Java запускает везде, где стоит Java VM, любой из нашей команды, как и наши клиенты, мог запустить ПО.
Но Java, как язык, начал меня угнетать. Его оставили на пыльной полке. Scala является моим любимым языком на Java VM, включивший в себя много новых идей, которые все еще ищут свой путь в Java.
Хуже всего доя энтузиастов Java – Java пал позади C#. Я изучал C# по книге О'Рейли «C# in a Nutshell ». Эта книга отличный путь к изучению нового языка, если до этого вы уже знаете n-ое кол-во других языков. Я должен был дать Micorosft шанс (даже если это делает мне больно). Вот некоторые вещи в C#, которые Java не умеет:
- Лямбда-функции, которые гораздо лучше, чем внутреннее анонимные классы, которые есть так же и в C#
- Делегаты. Да это можно сделать в Java, но это не будет так же красиво.
- Перегрузка операторов. Это штука может превратить все в ад, но она до сих пор удобна, особенно в библиотеках и DSL
- Свойства. Нет нужды писать getters и setters. Все выглядит, как прямое обращение, даже если это не так. Это так же идиомы Python и Scala, и как только вы начинаете их использовать, вы больше не захотите использовать getters и setters. foo.x += 1 более читабельно, нежели foo.setX(foo.getX() + 1)
- Поддержка yield в итерациях. Хотя я предпочитаю синтаксис Python(и Scala) чем C#, это мощная и очень удобная вещь. Если вы когда-либо использовали его для создания ленивых итераторов (в Python, Scala, C#, без разницы) — вы поймете, о чем я.
- Методы расширения. Это эквивалент в С# неявному приведению типов в Scala, и это черт побери, удобно. Это позволяет вам расширить существующие классы, даже если они готовы, без реального расширения. Как и в Scala версии, существует механизм неявного приведения, они не случаются автоматически.(Пометка: как заметил Томи Моррис, в комментариях к статье, методы расширения являются не совсем эквивалентами неявному приведению типов в Scala, в нем это все реализовано гораздо мощнее. Теперь ясно, что C# позаимствовал один полезный аспект, но так же ясно, что Java даже не имеет и близкого подобия этого понятия).
- Поддержка оператора ??, который предлагает простой синтаксис получения значения ссылочного типа, если оно не равно null или указанное значение по умолчанию.
Вдобавок, у Java много одинаковых вещей с C# включая:
- Интерфейсы
- Генерики
- Автоматическая упаковка и распаковка.
- Аннотации(в C# это атрибуты)
Я до сих пор склонен к JVM, нежели к CLR. JVM — огромная, зрелая, быстрая и самое главное – мобильная. Но Java, язык, пал позади и теперь у него большой недостаток в полезных особенностях, которые есть у C#. Я до сих пор использую Scala потому, что он корректирует недостатки Java, дает много современных возможностей, позволяя при это использовать мощь и удобства JVM. Используя библиотеки или встроенные возможности, Scala предоставляет те же возможности, что и C# и более. Но в .NET мире C# является lingua franca. И C# и .NET большие конкуренты Java.
Sun и Java комьюнити позволили Java находится в застое, по сравнению с C# и Scala, и ей не приятно пользоваться. Как давний программист Java, я должен сказать, что я огорчен.