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

Підписуйтеся на Telegram-канал «DOU #tech», щоб не пропустити нові технічні статті

Здравствуйте, я начинающий программист, но учусь на экономическом, есть «минимальный» опыт в программировании на таких языках как Python, C# и Java, мое знание ограничивается лишь синтаксисом данных языков. Время на ознакомление прошло и я решил остановится на чем то одном, Python сразу отпал, в итоге уже длительное время разрываюсь между Java и .NET. Мне больше нравится Java, даже не знаю почему, но вижу что она намного больше чем .NET — не так сложная, как большая, я имею ввиду очень большое количество технологий, это и отталкивает меня от нее, так как придется учить не только язык, но и всю платформу/сервера/фреймворки и т. д. А в .NET — только C#, ASP.NET (MVC), ADO.NET и MSSQL Server ну и плюс некоторые мелкие типа LinQ, но без которых можно обойтись.
И вот, собственно вопрос, насколько нужно junior"у умение/владение всеми этими Java технологиями? Понимаю, что обойтись лишь знаниями/синтаксисом языка не получится, но возможно есть такие технологии, которые в основном используются, например Spring, Hibernate, JSP, JSF, а все другие опускаются? Или лучше не искать неизвестного и остаться с .NET?
Не хотелось бы видеть здесь холливаров на данную тему, просто возможно у кого то была похожая ситуация или есть что сказать по теме.
Спасибо

👍ПодобаєтьсяСподобалось0
До обраногоВ обраному0
LinkedIn
Дозволені теги: blockquote, a, pre, code, ul, ol, li, b, i, del.
Ctrl + Enter
Дозволені теги: blockquote, a, pre, code, ul, ol, li, b, i, del.
Ctrl + Enter

Писать лучше на C#, а работать выгоднее на Java

А ты на джаве писал? Или «не читал, но осуждаю»?

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

А когда раньше писал на простом недоязыке, по глупости выбранном как раз по принципу «что попроще», и всего примерно через год-полтора опыта работы наступил практически потолок по знаниям и зарплате, было очень печально.
Какая у тебя жестокая попаболь.

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

Если попробуешь Java, то тут есть два больших направления, остальное поменьше. Spring vs Java EE.

Если Spring, то Spring MVC/Hibernate/JUnit/Spring Test/JSP/HMTL5/JS. Сервер можно Jetty/Tomcat. Для сборки Maven. Сейчас Spring более популярен, в будущем не известно

Если Java EE, то версий 6 или 7, сервер лучше JBoss AS 7 или Wildfly. JAX-RS/JPA/EJB 3/HTML 5/JS. Есть технологии которых лучше избегать — JSF. Тестирование — Arquillian/JUnit. Java EE себе заработал плохую славу, но это дело прошлого, сейчас это очень мощная, быстрая, современная плафторма.

Если .NET, то именно то что ты перечислил. На отсылки к Mono не ведись, пока что это значительно более слабая вещь чем оригинал.

И что бы ты не выбрал, JS+JS+JS в браузере, бояться не нужно, лучше изучить хорошо чтобы это стало твоим инструментом

Я в свое время одинаково знал Java/C#/C++/Python (одинаково посредственно). Просто потому что

— предпочитаю статическую типизацию для своего основного языка (не отвергая динамическую для других вещей)
— отсутствие возни с памятью (это нужно, пусть это делает кто-то другой)
— я уже 7 лет на Linux

Это лично для меня отсеяло тогда C#, C++, Python и я остался на Java. Да и легко было писать на Linux, на сдачу лаб в универе приносить на Windows только JAR и код.

Решай задачи и не делай из инструментов религию

Народу собралось много, ну что ж — ловите:)
ru.wikipedia.org/..._C_Sharp_и_Java

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

Python сразу отпал
Чисто для личного интереса я как ярый поклонник «Питона» задам вопрос : И почему же для вас он сразу отпал ? Чем не угодил самый афегительный язык в мире (ИМХО) ?

Только ОДНА причина была : практически не было вакансий в тот момент вообще не было, а на работу очень хотелось !

Фрилансил немного, ботов писал, сайты на Django правил, добавлял функционал, но на сайтах там больше с JS работы было чем Python. Вообще конечно закончу фигачить свой проект на Python что бы портфолио было достойным и хорошая практика и свалю в Киев\Харьков если получится на нормальную Питон-вакансию, опыт не большой с Java\C# есть так что может и возьмут в более менее нормальную контору ...

Мало вакансий и в аутсорсе ентерпрайз разработки (бабло!) практически не востребован.

Мало вакансий
практически не востребован

— и это очень плохо, очень уныло что мало кто смотрит на Python ! И это при том что Python — рулит, даже мне HR-ы пишут типа : Вы пишите на Python ? Это чудесно, а не хотите прийти в нашу компанию что бы изучить и работать на Ruby on Rails ! — Ахренеть, я в шоке был от такой дискриминации Питона ...

Бесплатный, я луше знаю «Питон» чем «Шарп» ...

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

Если тебя дотнет конкретно не пропирает, переходи сразу на джаву.
Она более развита, популярнее, больше платят.
Для джуна нужно знание:
* баз данных. Достаточно MySQL и базовых SQL запросов: CREATE TABLE, INSERT, UPDATE, DELETE, SELECT.
* JDBC — через эту технологию джава подключается к БД
* JSP
* Разбираться в классах коллекций: List (ArrayList, LinkedList), Set (HashSet), Map (HashMap)
Если ещё останется сил можешь копнуть Spring MVC и IoC.

Лично я впервые джава программистом устроился даже и половины не зная из того что тут описал, так что у тебя отличные шансы ;)

Спасибо! Ответ такого типа и ожидал

Она более развита, популярнее, больше платят.
Похоливарю:) Каким местом более развита? Где лямбды, расширяющие методы, анонимные типы, LINQ, не говоря уже об async/await и Compiler as a Service? Где элементарный var? Где проперти? В части Web — где Web API & SignalR? Java как язык, а не платформа, находится сейчас на уровне С# 2005, и то не полностью, к сожалению.


Кому не нравится джава как язык, юзают scala, clojure, и т.д. С приветом, твой Кэп.

Топикстартеру следует быть готовым вместо одного языка изучить три, я правильно понял?

Скалу вполне можно юзать как джаву с всеми плюшками что ты написал.

Да, я согласен что Джава как платформа крута, и тут есть о чем спорить в разрезе «семейка Java vs семейка .NET», но в самом языке — застой. Плюс моё личное ИМХО — есть врожденные минусы в языке, как виртуальность методов по умолчанию и protected как protected internal в C# (наследники + пакет/сборка). Ну и мне лично ооочень не хватает пропертей и LINQ. Так что я бы советовал топикстартеру все же C# как крайне мощный и сбалансированный язык, до которого языку Java очень далеко.

Скала же не так распространена на сегодняшний день как С#, количество вакансий для неё — несоизмеримо меньше.

Внимание: Выключаем фантазию!! Данным комментом я не пытаюсь сравнивать Ц№ и джаву и если вы (любой читающий этот коммент) прочитали что-то подобное — это проблемы сугубо вашего мозга.

есть врожденные минусы в языке, как виртуальность методов по умолчанию и protected как protected internal в C# (наследники + пакет/сборка).
Про протектеды и уровень пакета: если вы не делаете библиотеку, то почему бы не делать вообще все методы пабликами (как это есть во многих языках) или прайватами? Можете привести реальные задачи где бы протектед, который виден в пакете вредил качеству кода (помимо библиотек).
№ 2. В чем проблема с виртуальными методами? Помнится когда переходил с ЦПП иногда нехватало «невиртуальных методов» (как и указателей и перегрузки операций и тд), но всегда когда хотелось такого странного находилось __более прозрачное__ решение без этих техник. Можете привести реальный пример, когда невиртуальные методы решают какую-то проблему (запрет переопределения — это отдельная история).

Спасибо за вопросы по существу.
Про протектед — нарушение инкапсуляции: почему мои протектед методы должны быть видны новому классу, который не является наследником меня? Это способствует сильной связанности классов, ведь есть искушение дернуть протектед, который предназначался наследникам, а не пакету. Для того, чтобы не было этих проблем, в С# протектед — для наследников, интернал — для сборки (пакет в Джаве), протектед интернал — для наследников в сборке или за её пределами + для всех остальных классов в сборке. Что значит «если Вы не делаете библиотеку»? Если приложение разбивается на слои — в каждом отдельные библиотеки же обычно, которые дергают друг друга, и так обычно пишется энтерпрайз. Насчет «все методы прайватами» — это как вообще? Все в одном классе что ли?

Проблема с виртуальными методами:
stackoverflow.com/...harp-nonvirtual
www.artima.com/...onvirtualP.html

Про протектед — нарушение инкапсуляции: почему мои протектед методы должны быть видны новому классу, который не является наследником меня?
1) Не нарушает инкапсуляцию. Ибо под инкапсуляцией понимают в широком смысле: соединение данных и методов обработки этих данных. И куда реже эти самые ограничения видимости. То есть вопрос просто в определениях, а не в сути.
2) Видны они должны быть по определению в конеретном языке, в другом языке может быть другое определение.
Вопрос в том когда то или иное определение вызывает проблемы?
Это способствует сильной связанности классов, ведь есть искушение дернуть протектед, который предназначался наследникам, а не пакету.
А искушения отнаследоватсо и дернуть метод через наследника нет? От тут и есть отличие приложения от библиотеки. Когда вы делаете библиотеку вы должны понимать что те кто будут ее использовать — злобные идиоты, которых вы никак не контролируете, когда вы пишете код приложения то вы должны оставить в своем коде как можно больше способов для расширения, ибо те кто будут использовать ваш код прошли хоть какой-то отбор и не хотелось бы соберать по 100500 митингов и пересоберать 100500 под-проектов для того чтобы «изменить цвет кнопки».
Я просил привести __примеры__. Когда лично вам (или вашим знакомым) оно мешало?
Проблема с виртуальными методами:
stackoverflow.com/...harp-nonvirtual
www.artima.com/...onvirtualP.html
И снова нет __примеров__, а лишь точка зрения одного человека. При том он говорит что есть и другая, но свою он считает «прагматично», а не свою — другой.

Как я понимаю, все приложения Вы пишете исключительно в одиночку, и всегда знаете, что другие члены команды будут ответственны и не напартачат с protected? И дизайн у Вас исключительно классный, и связанность слабая, правильно? Мне кажется — нет. Не верю я, что человек, не понимающий, зачем нужно разделять видимость для наследников и для пакета, пишет хорошо поддерживаемый код.

Насчет виртуальности:
Если никому не мешает — чего ж везде @override в Джаве лепят в проектах с настроенным статическим анализом кода?
Мне бы мешало, но я пишу на языке, который возможность этих проблем исключает в принципе.

Как я понимаю, все приложения Вы пишете исключительно в одиночку, и всегда знаете, что другие члены команды будут ответственны и не напартачат с protected?
Когда вы делаете библиотеку вы должны понимать что те кто будут ее использовать — злобные идиоты, которых вы никак не контролируете, когда вы пишете код приложения то вы должны оставить в своем коде как можно больше способов для расширения, ибо те кто будут использовать ваш код прошли хоть какой-то отбор и не хотелось бы соберать по 100500 митингов и пересоберать 100500 под-проектов для того чтобы «изменить цвет кнопки».
А напартачить, так вот
А искушения отнаследоватсо и дернуть метод через наследника нет?
-----------
Не верю я, что человек, не понимающий, зачем нужно разделять видимость для наследников и для пакета, пишет хорошо поддерживаемый код.
А еще есть языки в которых вообще нет этих самых «видимостей».
Если никому не мешает — чего ж везде @override в Джаве лепят в проектах с настроенным статическим анализом кода?
Не все и не везде. А те кто пихают, так основная мотивация — это отслеживать мертвый код и как вы заметили аннотация вполне решает эту проблему.
Повторяю вопрос еще раз:
Я просил привести __примеры__. Когда лично вам (или вашим знакомым) оно мешало?
Теоретически можно спорить сколько угодно, есть много доводов за все подходы. Меня интересуют конкретные проблемы.

Можно — в pet projects; в 99% контор пишут на джава, причем безальтернативно.

не говоря уже об async/await и Compiler as a Service? Где элементарный var? Где проперти? В части Web — где Web API & SignalR?
все аналоги есть

1. Приведите поименно для тех, что написали выше.
2. Что насчет

лямбды, расширяющие методы, анонимные типы, LINQ,
?
3. У Мерседеса тоже есть аналог — Ланос.
1. Приведите поименно для тех, что написали выше
Мне поименно приводить лень, может сам в гугле пошаришься? Но если ниасилишь по каким то пунктам я так и быть тебе помогу.
2. Что насчет
лямбды, расширяющие методы, анонимные типы, LINQ,
?
Я же уже тебе написал. У тебя с чтением проблемы?
3. У Мерседеса тоже есть аналог — Ланос.
Да, только ланос — это .нет в данном случае.

а в C# есть совместимость с предыдущими версиями?

Да, безусловно. Единственный breaking change, который был на моей памяти — в C# 5.0 (.NET 4.5) поменяли реализацию foreach, которая затронула где-то 1% случаев, и которая очень легко обходится. За предыдущие 10 лет — ни одного breaking change.

ага,расскажи ещё сказки что на всех платформах работает

Это единственный существенный минус у C#, который я знаю, но на крайняк — есть Моно, который сейчас уже мощнее чем современная Джава. Винда на сегодняшний день самая распространенная на ПК, ASP.NET с IIS на куче ентерпрайза вертится, для Mobile есть Xamarin... Не знаю, я не использую Linux/Mac OS, работы хватает без него.

все эти тормознутые решения ради удовольствия понавтыкать лямбды?
а что кроме сахара, платных инструметариев и ОС,парочки фреймвёрков
может предложить С-клетка ?

Не нравится сахар — пишите на на асме. Сахар делает жизнь проще: вместо 10 строк одна — это правильный подход ИМХО.

любишь сахар пиши на руби или пёрле,вместо 1 строчки будет четверть строчки
С-клетка годный язык,но он прикован к решётке на окошке ИМХО

Руби крут, особенно крута платформа Rails. Но я поклонник компилируемых языков. Зря тыкаете и название языка коверкаете. Джава прикована к сообществу, которое не может принимать решения быстро (нужны месяцы и годы на каждое серьёзное изменение), 100500 фреймворкам для каждого слоя приложения, и врожденным дефектам, которые исправлены в C#. C# будет кросплатформенным в течении пяти лет, с Майкрософтом или без него (Мono/Xamarin) — уж больно хорош язык.

Как раз сообщество и выдало groovy, scala, clojure и кучу всяких цейлонов и икстендов. А еще mvc, IoC/DI, ОРМ, все то что потом перцы из сишарпика тщательно копировали.

C# будет кросплатформенным в течении пяти лет, с Майкрософтом или без него (Мono/Xamarin) — уж больно хорош язык.
C# уже давно кросплатформенен, и даже на нем под линукс какие то проги писали, только не получил распространения, потому что язык это еще далеко не все и не самое сложное.
Зря тыкаете
извини,но ты ошибся,в мужиков не тыкаю
и название языка коверкаете
меня не задевает когда говорят жаба или С-решётка
тк доля правды в этом есть,если тебя это оскорбляет то это твои проблемы восприятия
Джава прикована к сообществу, которое не может принимать решения быстро (нужны месяцы и годы на каждое серьёзное изменение)
если добавят все плюшки в 8 что наобещали,то нетчикам и попрекнуть нечем будет
100500 фреймворкам для каждого слоя приложения, и врожденным дефектам, которые исправлены в C#
да-да тырят лучшие и исправляют под NET
C# будет кросплатформенным в течении пяти лет, с Майкрософтом или без него
если это будет выгодно микрософту,а если не выгодно?а если виндакапец?а если планшеты вытеснят домашние пк, а андроид захватит мир ? а если ...
гадать на 5 лет вперёд можно долго
да-да тырят лучшие и исправляют под NET

У кого, говорите, Java стырила лямбды в 8й версии? ;)

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

100500 фреймворкам для каждого слоя приложения, и врожденным дефектам, которые исправлены в C#
да-да тырят лучшие и исправляют под NET
тормознутые решения
Подробнее о тормознутости?
есть Моно, который сейчас уже мощнее чем современная Джава
В чем выражается мощность?

Да, ты прав, джава с .нетом несовместима, отстой полный.

Привет Алекс,

Ты прав, Ява как язык менее развит чем почти все другие языки.
Я давно написал статью Почему я советую учить Яву где расписал подробнее
stokito.wordpress.com/...ым-студентам-у
и ещё одну про субъективное сравнение языков stokito.wordpress.com/...e-yazyki-gavno

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

Гляну, спасибо.

Мужик ты молодец, реально всё по делу написал без гoвна как многие пишут ! Респект тебе лично от меня ! Всё так и есть ...

«А в .NET — только C#, ASP.NET (MVC), ADO.NET и MSSQL Server ну и плюс некоторые мелкие типа LinQ»

А как на счет WPF, WCF, WWF? Я уже больше года ковыряюсь в NET и понимаю, что еще непаханное поле работы.

Ну а цель какая — технологии коллекционировать? Оно все забудется, если на практике их не ковырять, во-первых. Во-вторых, в данном случае, ИМХО, стоит найти работу джуниора за еду, а там уже как карта ляжет и куда занесет (или купить телефон под Андроидом, и остаться на джаве :)

Коментар порушує правила спільноти і видалений модераторами.

Підписатись на коментарі