Java vs Python? Что выбрать для backend-разработки?

Всем привет. Хочу внутри своей компании перейти в разработку. Хочу заниматься backend-разработкой на Java. Начальник дал контакт человека, с которым можно пообщаться на эту тему. Он посоветовал изучать Python, т.к. он лучше подходит для тех, кто только начинает свой путь в программировании и на нём легче научиться программировать. Он заявил, следующее (цитирую): "Зачем сразу Java? Валера посоветовал? Зачем сразу хоронить людей в понятиях полиморфизма, инкапсуляции и наследований? Прикольно он придумал для тех, кто за функции еще даже не шарит". В общем, вопросы:
1) Как вы считаете, стоит ли учить сначала Python, чтобы научиться программировать?
2) Периодически натыкаюсь на утверждения о том, что после Python будет сложно перейти на другой язык (ту же Java). Так ли это?
Заранее благодарю за ответы.

0
46 комментариев
Написать комментарий...
Борис Д

Эх... всё не так. Если серьезно, то...

1) Сначала изучаете математику на школьном базовом уровне. Хорошо! изучаете, с пониманием.
2) Потом изучаете немного высшую математику: производные, интегралы, комплексные числа и т.д. С пониманием, что такое интегрирование, дифференцирование, как работать в разнызных системах счисления и пр.
3) Далее хорошо изучаете дискретную математику, теорию множеств, алгоритмы...
4) Изучаете немного электротехнику и электронику, чтобы понимать закон ома, как работает транзистор, диод, резистор и т.д.
5) Переходите к схемотехнике: как работают элементы "И", "ИЛИ", счетчики, регистры и т.д. Сильно глубоко углубляться не надо, но понимание принципов необходимо.
6) Изучаете архитектуры компьютеров. Как работает микропроцессор, оперативная память (как адресуется, каких типов бывает), контроллеры и пр.
7) Немного окунаетесь в программирование в машинных кодах и на ассемблере - это нужно для понимания работы микропроцессора и памяти.
8) Потом переходите к языку Си. Глубоко изучать не обязательно, но пощупать крайне желательно.
9) Поверхностно пробегаетесь по разным языкам и движкам на их базе.
10) Останавливаетесь на желаемом языке и осваиваете его за месяц.

Вот собственно и всё. Это если по нормальному.

Ответить
Развернуть ветку
Аккаунт удален

Комментарий недоступен

Ответить
Развернуть ветку
Илитный Иксперт

Троллинг тоньше чем человеческий волос

Ответить
Развернуть ветку
Борис Д

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

Ответить
Развернуть ветку
Роман Анисимов

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

Ответить
Развернуть ветку
Борис Д
>> Какой смысл становиться доктором наук по математике, если ты хочешь программировать?

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

Банальный пример: сейчас сына учу программированию, пишем простую игру на питоне (на движке Arcade) - летит бомбардировщик и по нажатию пробела сбрасывает на цель боеприпас. Вроде плевое дело, но... необходимо понимать, как должен лететь боеприпас - какие силы на него действуют и в каком направлении. Это уже необходимо знать физику, вектора, производные. Смещение боеприпаса происходит каждый тик на несколько точек, количество которых задает мгновенную скорость. А это и есть производная.

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

Ответить
Развернуть ветку
Андрей Макарычев

Одних Производных маловато. Надо бы ещё аэродинамику накинуть. А то тема смещения пикселя полностью не раскроется.

Ответить
Развернуть ветку
Роман Анисимов

И решить уравнение Навье-Стокса, иначе какая аэродинамика без симуляции потоков топлива в турбине?

Ответить
Развернуть ветку
Роман Анисимов

Почему он уже программирует? Ему сначала нужно высшую математику - по Вашему собственному плану, представленному выше - выучить, затем резисторы, транзисторы, операционные системы, и только потом можно выбирать язык. Вы просто мучаете сына какими-то непонятными штуками!

Ответить
Развернуть ветку
Борис Д

Всё это изучаем, не волнуйтесь.

Ответить
Развернуть ветку
Роман Анисимов

И как у вас дела с машинными кодами?

Ответить
Развернуть ветку
Борис Д

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

Ответить
Развернуть ветку
Alex Gusev

Лет двадцать программирую web-приложения. Ни разу с подобной задачей не столкнулся. Но я никогда не писал программ для игровой индустрии.

Ответить
Развернуть ветку
Илитный Иксперт
Какой смысл становиться доктором наук по математике, если ты хочешь программировать?

Ты шо, программирование это математика!

Ответить
Развернуть ветку
Аккаунт удален

Комментарий недоступен

Ответить
Развернуть ветку
Борис Д

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

>> Потом получаются программисты, которые корутину от потока отличить не могут

Вот это как раз сущая мелочь. Для нормального программиста - это (если еще не знает) пара дней на изучение и всё.

Ответить
Развернуть ветку
Аккаунт удален

Комментарий недоступен

Ответить
Развернуть ветку
Борис Д
>> Приоритеты странные какие-то

Почему ж странные? Ваш текст далее сам поясняет, что не странные, а необходимые.

>> теория операционных систем это основа, вместе с алгоритмами, это базовая вещь для любого программиста

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

>> В машинных кодах никто не программирует

Ну, так речь и не о реальном программировании в машинных кодах, а о понимании, как это всё работает. Достаточно на нескольких примерах разобраться: как процессор получает данные/команды по шине данных из памяти, как осуществляется адресация, как в АЛУ с регистрами происходят вычисления и т.д.

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

Ответить
Развернуть ветку
Роман Анисимов

Чтобы сложить числа и двигать биты не нужна математика, уж точно не та, о которой Вы написали. Процессору нафиг не сдались интегралы, он делает простейшие операции

Ответить
Развернуть ветку
Darkinfinyti

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

Ответить
Развернуть ветку
Роман Анисимов
если попроще и побыстрее то питон

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

Ответить
Развернуть ветку
Борис Д

Проще говоря, вопрос некорректный. Это как вы бы спросили: "Хочу стать плотником. Чем мне научиться работать - молотком или пилой?". И даже если вас научат забивать молотком гвозди, и даже пилить доски научат, вы станете плотником? Очевидно, что нет. Это же просто инструмент. Спец подберет инструмент под задачу. Если надо, освоит работу с ним. Главное - уметь задачу решать.

Ответить
Развернуть ветку
В А

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

Ответить
Развернуть ветку
Роман Анисимов

Тут дело не в круге задач. Python может вообще все языки заменить, как и любой другой Тьюринг-полный (сейчас даже Excel такой). Вопрос в скорости: в скорости разработки, в скорости изучения, в скорости работы итогового решения. Он разрекламирован, потому что позволяет одной строчкой начать программировать, не изучая точки входа, работу с памятью, проверку ввода-вывода, операторные скобки и т.п., что хорошо подходит детям (на кого, собственно, и рассчитана, в основном, реклама). Всё, что им нужно знать, это то, что подчинённые блоки кода располагаются с отступом - это и визуально понятно, и ничего лишнего не нужно учить. Только по мере необходимости программа обрастает библиотеками.

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

Ответить
Развернуть ветку
Аккаунт удален

Комментарий недоступен

Ответить
Развернуть ветку
Victor Pomortseff

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

Ответить
Развернуть ветку
Alex Gusev
Все идет от задачи к алгоритму. А потом уже язык.

Сколькими языками программирования вы владеете хорошо, коллега? У меня проблема в том, что в голове одномоментно хорошо сидит только один язык программирования. Сначала это был LotusScript, затем Java, PHP, JavaScript. Я коммерчески писал программы на C/C++, VisualBasic, Clarion, Perl, Python. В институте - на Pascal и Prolog. Из всего этого выбивается только Prolog. Остальные языки плюс/минус похожие. Если пройти "от задачи к алгоритму", то любой из вышеупомянутых языков, за исключением Prolog'а, более-менее успешно реализует "алгоритм". Но при этом у каждого языка есть своя "заточка" - область наилучшего применения. Я всегда пытался не лезть со "своим" языком на "чужое" для него поле. Ну, т.е. не программировать нейросети на JavaScript'е. Хотя у меня был опыт программирования для браузера на Java (GWT). Ну то такое себе - сначала "Вау!", а потом куча проблем там, где их не должно быть.

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

Вполне допускаю, что есть профессионалы, которые одинаково хорошо (не одинаково плохо, а одинаково хорошо!) владеют сразу несколькими языками и без проблем переключаются между ними. На web'е долгое время считалось нормальным программировать сразу и на PHP, и на JS. Но лично меня всегда клинило на одну сторону. Если я начинал активно использовать какой-то язык, то предыдущий постепенно вымывался из головы.

Ответить
Развернуть ветку
Victor Pomortseff
Сколькими языками программирования вы владеете хорошо, коллега?

Конкретно сейчас работаю на платформе (IBM i), которая поддерживает концепцию "интегрированной языковой среды" (ILE) в которую входят CL (командный язык системы, но с типизированными переменными, компилируемый), RPG (очень старый, но вполне еще развивающийся язык для бизнес-логики - типы с фиксированной точкой, удобная работа с датами и временем, строками и т.п.), С/С++, COBOL. Концепция ILE подразумевает возможность написания модулей на любом из поддерживаемых языков с последующим объединением нескольких модулей в один программный объект (модуль - аналог объектного файла, объединение - binding - тоже самое что линковка)
Из этих всех не знаю только Кобол.
Бизнес-логику пишем на RPG. Всю работу с БД - на RPG. Там дополнительно еще если два способа работы с БД - прямое обращение к таблицам (чтение-запись, позиционирование...) встроенными средствами языка или же использование SQL выражений непосредственно в коде (exec SQL ....) - тут по ситуации - небольшая выборка по одной индексированной таблице эффективнее встроенными средствами, без накладных расходов (построение плана запроса и т.п.), сложные выборки по многим таблицам - тут, конечно, уже SQL.
Если требуется низкоуровневая работа (те же сокеты, пайпы, работа с регулярками и т.п.) - С/С++
Высокоуровневая работа с системными объектами (создать объект, копировать, проверить существование и т.п.) - CL. Но его похуже знаю т.к. мало использую.
Так что основных - два - RPG и C/C++. Плюс SQL где он эффективнее. Большая часть кода на RPG.

Ну то такое себе - сначала "Вау!", а потом куча проблем там, где их не должно быть.

Если сравнивать RPG и тот же С - оба процедурные ЯВУ. Но со своими особенностями. Есть вещи, которые на С писать проще и как-то естественнее. Но есть то, что на RPG реализовано проще. Тот же аналог union в С в RPG реализован изящнее - там возможно произвольное полное или частичное перекрытие полей внутри структуры (в RPG struct - называется ds). Например вот такое:

dcl-ds myDs qualified;
field1 char(20);
field2 char(20) pos(10);
end-ds;

описывает структуру с двумя полями по 20 символов, которые перекрываются между собой - последние 10 символов первого поля перекрываются с первыми 10-ю второго поля. При этом в той же структуре могут быть еще и другие, не перекрывающиеся поля.

Два типа данных с фиксированной точкой (отличаются способом хранения в памяти. При том, если есть одна переменная с двумя (например) знаками после запятой и вторя с тремя, то присвоение может быть как обычное, с отбросом последнего знака, так и с округлением (добавление 5 единиц к последнему знаку и затем присвоение с отбросом последнего знака).

Типы даты, времени, таймштамп (дата+время). При этом есть возможность преобразования из даты в строку или число и обратно в любом из поддерживаемых форматов (ISO, EUR, CYMD и т.п.). Аналогично для времени.

Все это на уровне языка.

Но некоторые низкоуровневые вещи на RPG хоть и возможны, но выглядят "тяжеловесно" и на С/С++ их писать проще и естественнее. Посему удобно совмещать.

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

Ответить
Развернуть ветку
Аккаунт удален

Комментарий недоступен

Ответить
Развернуть ветку
Andrew Nefedov

php

Ответить
Развернуть ветку
Аккаунт удален

Комментарий недоступен

Ответить
Развернуть ветку
Андрей Макарычев
Ответить
Развернуть ветку
Семён Сердюков

Ну Ява конечно. Как Ява разработчик пишу.

Ответить
Развернуть ветку
Victor Pomortseff

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

Я вот могу сказать, что в том бекенде, где работаем мы (это очень глубокий бекенд, на уровне ядра автоматизированной банковской системы где хранятся все данные и выполняются все бизнес-операции), джава не применима от слова совсем - она не может напрямую работать с БД. Она не может нативно работать с системными типами дат, времени, фиксированной точкой. Она слишком неэффективна т.к. требует накладных расходов для JVM. Ну и далее по списку.
Как писал уже выше тут - для задач нашего бека есть специализированный язык, интегрированный в систему и напрямую работающий с системными объектами и типами данных.
Но это у нас так. В других местах все может быть иначе. И прежде чем что-то советовать, нужно понимать конкретику места и требования к системе.
И да, джава у нас тоже есть. Но на других уровнях и других системах. Например, она широко используется в вебсервисах, которые есть один из способов взаимодействия ядра АБС со внешними системами. Также она (точнее, JMS) используется для работы с MQ на стороне внешних систем (на нашей стороне используется MQ API для C/C++ или RPG)
И да, там (для внешних систем) это тоже своего рода бекенд. Но, так сказать, промежуточный - там нет особой бизнес-логики, только трансляция фронтовых запросов в АБС и интерпретация полученных ответов.

Ответить
Развернуть ветку
Семён Сердюков

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

Ответить
Развернуть ветку
Victor Pomortseff

А что такое "обычная жизнь"? Для нас вот (и не только для нас - на этой платформе в РФ еще как минимум несколько банков работает, может еще какие структуры, а уже в мире подавно - коммерческие сервера на этой платформе достаточно распостранены и рейты разработчиков там вполне на уровне) это вполне обычная жизнь.
Просто это то, чему на ускоренных курсах не научить - слишком сложно будет, слишком много особенностей, которые нужно иметь ввиду разработчику чтобы писать эффективный код.

И да. "Что-то типа КОБОЛ". Примерно современник ему, но развивается и эвалюционизировал до нормального синтаксиса и нормального процедурного языка.
КОБОЛ, кстати, на этой платформе тоже поддерживатеся.

Ответить
Развернуть ветку
Alex Gusev

Javascript/TypeScript. Если говорить за web-разработку. На фронте ему пока что достойных альтернатив нет, а на бэк он проникает медленно, но верно. Ни Python, ни Java на фронт так и не проникли. Google пытался (GWT), но даже у него не получилось.

Ответить
Развернуть ветку
Владислав

Подобный вопрос волнует каждого, кто начинает задумываться о сфере IT. При выборе языка необходимо отталкиваться от будущих задач.
Если в планах: анализ данных, машинное обучение, построение ботов, то логично выбрать Python.
Касательно Java ничего не могу сказать. Был опыт именно с Python, и синтаксис языка действительно не сложный для понимания основ. Как и у любой язык, Python имеет свои фишки, тонкости, закономерности.
И конечно, отличным бонусом станет помощь со стороны наставника (если такой имеется в вашей компании), который поможет освоить язык, ответить на вопросы, укажет на ошибки. Даже если такого человека нет рядом, то полно сообществ (например, чатов в телеграм), где можно получить ответы.

P.s. Мое изучение Python завершилось тем, что не было той области, где я мог применить язык. Т.е для 98% задач мне хватает экселя.

Ответить
Развернуть ветку
alex ns
Хочу заниматься backend-разработкой на Java.

Однозначно - учить именно Java. Питон берёт хоршим набором готового "из коробки", но чуть в сторону - будет сложно. Зачем вам учить набор из коробки питона, если в Java есть свой набор, который тоже придётся учить? Вы выучите два набора и один из них будет бесполезным хламом в работе на Java.

Другое дело - как учить.

В плане "как" могу порекомендовать курсы до уровня "уверенный middle". Самостоятельно вы будете долго шарахаться по разным темам, не понимая, какая из них реально полезна в будущей работе, и какая практически никогда не понадобится. Курс даёт не только знания "вообще", но он даёт систему, которая помогает учащемуся самим своим наличием. Бессистемно самостоятельно научившиеся очень долго входят в серьёзную разработку, потому что набор знаний у них дырявый. Ну разве что вы будете исключением из правил )

Ответить
Развернуть ветку
Артур Анонимов

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

Ответить
Развернуть ветку
alex ns

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

Порекомендовать могу наш курс https://vmeste.social/?type=Blog&case=Text&id=26, но он ещё не запущен, первый поток будем собирать где-то к концу лета, может к середине августа. Знакомство с текстами на сайте по ссылке даст вам в некотором смысле рекомендации за наш проект. Но повторюсь - он начнётся не прямо сейчас.

Ответить
Развернуть ветку
alex ns

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

Ответить
Развернуть ветку
David Tukin

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

Ответить
Развернуть ветку
Роман Анисимов

Ежегодный опрос говорит об обратном

Ответить
Развернуть ветку
Семён Сердюков

А новое это что?

Ответить
Развернуть ветку
Виктор

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

Ответить
Развернуть ветку
43 комментария
Раскрывать всегда