(Карьера) Я не могу быть продуктивным из-за парадигмы (или команд) - сменить работу [закрыто]

Контекстуализация:

Привет, мне 25 лет, и я работаю фрилансером уже 8 лет. В основном я работал со стеками: NodeJS, React, React Native и с TypeScript как надмножеством стека. Мне всегда нравилось программировать, и я всегда изучал такие языки, как: "C/C++/Rust/Go, Java/C#, Haskell, Python/Ruby, Elixir/Erlang, Clojure, Scala, Elm, PureScript... ..." (несмотря на то, что я не программировал в них профессионально, но я всегда учился, делая какие-то личные проекты). Несмотря на то, что я универсал (потому что я фрилансер), мне всегда нравилось доносить свою работу наилучшим образом, с чистым, простым и масштабируемым кодом.

Проблема:

В этом году я «ушла» из жизни фрилансера и начала входить в сферу бизнеса. Я начал работать с другими людьми, и у меня появилось много «головной боли», связанной с пониманием работы других (мы используем NODEJS), в основном потому, что есть команды, которые используют Vanilla JavaScript, другие TypeScript, некоторые делают это в объектно-ориентированном подходе, а другие более функциональны. .и это ужасно для меня. Хотя я не большой поклонник Java (и объектно-ориентированного программирования), по крайней мере, я думаю, что они более организованы, поскольку они следуют строгому шаблону, полностью объектно-ориентированному (или теоретически так и должно быть после того, как Java 8 представила лямбда-выражения).

Вопросы:

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

Я давно изучаю функциональное программирование, и я ДЕЙСТВИТЕЛЬНО хочу сменить работу, чтобы работать над каким-нибудь более функциональным языком (например, Clojure или Elixir), потому что я могу понимать код намного лучше, чем объектно-ориентированную абстракцию. (Или, по крайней мере, избегайте плохого кода, я думаю)

Любые советы для меня? Спасибо!

Поймите, что вы действительно ограничиваете себя. В академических кругах широко используются функциональные языки и парадигмы. В реальном мире ООП уничтожает функционал. 99% рабочих мест будут использовать парадигму OO. Я полностью меняю работу из-за того, что мне не нравится язык или инструменты (это повлияло на мою недавнюю смену работы), но неполучение ООП — это то, над чем вам следует поработать. В этой карьере этого не избежать.
Я изо всех сил пытался сказать это как можно мягче; но, учитывая количество времени, которое у вас есть в отрасли, уверены ли вы, что освоили язык, на котором говорите? Могут потребоваться годы, когда вы не будете полностью удовлетворены решением, чтобы найти лучшие модели решения проблем. Кроме того, как вы можете действительно оценить новые языки, учитывая, что вы находитесь в той вихревой фазе, когда видите «все преимущества» и «ни один из недостатков» лямбда-языков, не ограничивая вас достаточно, чтобы предотвратить действительно большие беспорядки. Вы обнаруживаете, что ваше чистое мышление не такое чистое, каким должно было быть.

Ответы (2)

Я думаю, что это более организовано, поскольку они следуют строгому шаблону, который полностью объектно-ориентирован (или теоретически он должен быть после того, как Java 8 представила лямбда-выражения)

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

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

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

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

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

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

Эй, спасибо за ответ! С лямбдой Java 8 я имел в виду, что: «Текущая java не на 100% объектно-ориентирована», потому что они представили лямбда (которая является функциональной) из версии 8», я думаю, что это была моя ошибка при написании, обманувшая вас в неверном истолковании, извините .
Я имею в виду, что JavaScript не является объектно-ориентированным, в настоящее время с ES6 да, но он изначально ориентирован на прототипы. Что касается смешения парадигм в проектах (которые я прокомментировал): я не ссылался на один и тот же проект! Потому что здесь мы используем JS для многих вещей, и некоторые команды запускают некоторые проекты на чистом JS, другие предпочитают использовать TypeScript, третьи используют функциональный JS (RamdaJS), и когда я помогаю другим проектам, я как бы «смешиваю» парадигма. Впрочем, я это и имел в виду :)
Да, проблемы и плохой код есть на всех языках, насколько я знаю. Но я сослался на следующее: в ООП ошибиться легче, чем в чем-то функциональном (мнение новичка), потому что его легче понять.
В любом случае, как я уже сказал, я просто хотел создать лучший и более простой код для обслуживания, поэтому я спросил здесь, так как у меня нет опыта работы с функциональными возможностями, я хотел узнать мнение тех, кто перешел с ОО на функциональный, чтобы знать, как происходит переход был . Я даже смотрел вакансии здесь: functions.works-hub.com jobs.braveclojure.com (Clojure был просто функциональным примером, это мог быть и Haskell или Elixir) в любом случае, спасибо за ваше время
@srluccasonline Ах да. Я часто печатал материал, который тоже плохо читался. Я вижу, вы отредактировали вопрос, я тоже обновлю свой. Тем не менее, есть много объектно-ориентированных подходов, с которыми я не разобрался до тех пор, пока не провел годы в этой парадигме. Я также могу заявить, что до тех пор, пока у вас не появится первая большая программа на основе лямбда-вычислений, вы не увидите по-настоящему беспорядочного кода. Lambda помогает вам сохранить структуру, которую вы применяете, но она может быть столь же хороша или так же плоха, как и ваша собственная способность обеспечивать дисциплину в вашем коде. По сути, с Lambda все настолько хорошо (или плохо), насколько это возможно.
@srluccasonline - Java всегда считался объектно-ориентированным языком. Если что-то неясно в вашем вопросе, вы должны отредактировать его вместо того, чтобы отправлять комментарий, признавая, что что-то неясно, и уточняя это во временном комментарии.
@srluccasonline Помимо комментариев Дональда о Java, JavaScript также широко известен как объектно-ориентированный. Трудно найти ссылку, в которой не говорится: «JavaScript - это объектно-ориентированный язык, основанный на прототипах». Тот факт, что для создания объектов вместо конструкторов используются прототипы, не делает их «не объектами».

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

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