Когда-то в мире был только Си. Или Бэйсик. Или Паскаль. Это если не считать ассемблер для КР580ВМ. И хотя в книгах можно было найти упоминание ещё и о Фортране, но уже тогда, вместе с упоминаниями, были и предостережения о не самом удачном выборе, если бы вам вдруг захотелось писать на этом языке. Так выглядел мир глазами школьника из СССР.
Начинать тогда предлагалось с Бэйсика. Журнал "Наука и жизнь" так прямо и указывал. А заодно предлагал серию статей, заменявших вводный курс программирования начинающим хакерам. Была, конечно, ещё и "Техника молодёжи" с её занимательно составленным введением в программирование, но только на программируемом калькуляторе. Сегодня, наверное, сложно себе представить, как можно было увлечься каким-то программируемым калькулятором, ведь все с детства привыкли к айфонам с андроидами, но в те стародавние времена, когда книг с фантастикой в местной библиотеке было мало, школьники как некое чудо воспринимали коротенькие фантастические рассказы в "Технике молодёжи", сопровождавшиеся показом, как можно самостоятельно рассчитать все манёвры главного героя около Луны и летавшей где-то неподалёку окололунной станции.
Так мы входили в АйТи. Или в IT? Ну тогда мы даже аббревиатуры такой не знали. А потом пришлось взрослеть.
Взрослая жизнь напомнила о рациональности. Метания от одного увлечения к другому, со сменой языков и мест, в которых новые языки можно было применить, были полезны для сбора житейского опыта, но с точки зрения карьеры мой серьёзный старт всё же был следствием удачи, а не багажа из разных, но не всегда полезных в карьере языков.
Сначала я предпочитал Си. Это очень экономный на количество текста язык. Когда по молодости хочешь всё и сразу, писать кучу слов вроде begin, end и прочих procedure, совершенно не хочется. Казалось, что вот оно, решение! В Си нет таких сложностей! А ещё на нём можно писать программы, которые умещаются на одну дискету в 1.44мб, и даже 5-ти дюймовую 1.2мб, и на дискете ещё остаётся куча свободного места!
Но радость была недолгой. Потому что хотелось всего и сразу. И тут была очень кстати такая штуковина, под названием FoxPro. На ней в текстовом режиме, то есть на экране 40*25 символов, можно было рисовать мышью графический интерфейс! Повторюсь - на исключительно текстовом экране, где нет произвольных линий, кругов, овалов, и уж тем более, живых обоев и прочих развлечений с вашего айфона. Да, такой подход меня реально вдохновил. Это было крайне эффективно. И работало после установки всего с нескольких дискет. Вы можете себе представить GUI IDE, умещающуюся в несколько мегабайт? Плюс, как это принято называть сегодня, весь Runtime, то есть всё необходимое для полноценной работы созданной в этой IDE программы. Вместе с доступом к базам данных. Да, было время...
Но обладая всем этим богатством, я был далёк от настоящего "фэн-шуя". Например, я не знал, что такое индекс (который в базе данных). Да и вообще много чего потом вспоминал как забавы настоящего идиота, развлекающегося с бусами из алмазов путём разбрасывания бусинок по лужам.
Всё это было следствием отсутствия системы знаний. Но удача всё же привела меня к выбору весьма и весьма надёжной опоры. Хотелось краткости, как в Си. И хотелось удобств, как той же FoxPro, идею которой неплохо развили в Visual Basic. Ну и хотелось выхода в интернет!
А интернет тогда был "по талонам". То есть нужно было найти большую контору с толстыми каналами связи и любознательными админами, которые пробили для себя канал в интернет. В интернете тогда были статические сайты. Правда с картинками, что их очень даже оживляло. Но не хватало динамики. И на тот момент динамику предложила принцесса Java (помните такую рекламу чая?).
Это были апплеты (что-то вроде уменьшительно-ласкательного от слова "приложение" по английски). И в апплетах были доступны множество полезных функций, которые сразу, без необходимости каких-то дополнений или скачиваний, имелись в наличии после установки Java. И понеслась возня с 3D анимацией и прочими непотребствами прямо в браузере. Да, та 3D была с приставкой "псевдо", но выглядело весьма занимательно, особенно если ваш браузер поддерживал JIT (это такой компилятор, который прямо в браузере заставлял всё летать намного быстрее).
Но это были лишь игрушки. Настоящим джедаям подавай настоящие развлечения, ведь правильно? И их было у Java! Называлась игрушка J2EE. Ага, с EJB 1.1. Правда скоро появились 2.0, потом даже 2.1, что не могло не радовать, но всё же путь джедая был тернист. Зато в итоге признание пришло почти автоматически - меня легко взяли в контору, которая делала заказной проект на технологиях Java! Услышав моё бодрое рассуждение про J2EE, EJB и прочий Enterprise хлам начала 2000-ных годов, собеседовавшие довольно быстро предложили поработать у них.
Ну а далее я уже не встречал на пути серьёзных проблем с трудоустройством. Благо спрос на Enterprise-разработку стабильно рос, а стэк технологий был вполне в тренде. Оставалось лишь творить в своё удовольствие, ведь как просто - читаешь про новые возможности, видишь их плюсы, предлагаешь в конторе, а там народ ещё такого не читал, и я получаюсь единственным носителем полезного знания. Да, в телеграм каналах тогда про это не писали, и на айфоны уведомления с предложением полайкать не рассылали. Вот ведь была житуха - без телеграмов и прочих вацапов! Хотя ICQ уже была.
Ну так всё же почему?
Почему я рекомендую Java сегодня? Да, прошло время, ушли заработанные деньги, всё вокруг течёт и всё меняется. Но Java жива! И не просто жива. Это целый мир. Это система знаний. Именно этой системы мне не хватало на старте. Без системы я брёл наощупь. Теперь же у меня есть "фонарь во лбу", в смысле мне уже не нужны костыли и крепления для фонаря знаний, он в меня удачно встроился.
Теперь расставим все точки над ё (или над Ё?).
Итак, начнём с краткого синтаксиса. Он вполне себе сохранился и несёт наследие Си в безоблачное будущее. Но что ещё интереснее - в мире много наследников Си. И это не может не радовать! Вы в них как у себя дома! Ну почти. Немного уточняете формат ключевых синтаксических конструкций, знакомитесь со стандартными библиотеками, по быстрому изучаете используемую с языком IDE, и вот вы уже вполне сносно пишете на десятке диалектов Си, хоть и с очень разными названиями, и даже областями применения. Корни Си ещё долго будут вам опорой!
Посмотрим на примеры. В браузерах царствует Java Script. Изначально это была упрощённая Java, урезанная ради лёгкости применения, в первую очередь, в браузерах. Потом пути родственничков разошлись и сегодня JS уже не торт, в смысле от Java там остался лишь похожий синтаксис, плюс часть в неофициальном названии (официальное - ECMА-Script - то есть развод был со скандалом и сменой фамилий). Но ведь похожий синтаксис - это так приятно! Нет там ни тебе begin, ни тебе end. Значит, зная Java, вы без психологических сложностей с отторжением непривычного сможете перейти на JS (если захотите, разумеется).
Хотя семейство Си-подобных языков велико, одним сходством синтаксиса сегодня мало кого убедишь. Поэтому перейдём к распространённости. Не будет большим преувеличением сказать, что серверная часть большинства современных приложений написана на Java. Ну ладно, пусть даже не большинства, но как минимум, того, что написано на Java, точно больше, чем альтернатив на любом другом языке. Это если мы говорим о прикладном (или бизнес-) софте. Именно разнообразие программ в этой сфере стоит принимать во внимание, потому что хоть в мире и присутствуют миллиарды копий винды, но программа-то в данном случае одна, хоть и с вариациями.
Почему нам важно разнообразие программ? Да потому, что все их нужно поддерживать. Или переписывать. Значит, чем больше разных программ, тем больше команд требуется для обеспечения работоспособности такого зоопарка. А чем больше команд - тем больше спрос на программистов. И в частности - на программистов Java. Отсюда вытекают все те большие зарплаты, о которых многие из читателей слышали, но почему-то боялись подать заявку на их получение.
Но распространённость бывает разная. Пока что мы смотрели "вширь". Теперь посмотрим "вглубь". Даже уже упоминавшийся Java Script вполне подходит для понимания глубин, до которых вам будет легко донырнуть, если вы начали с Java. Но в нём всё же есть набор тем, которые нужно серьёзно подучить, поэтому посмотрим на более лёгкие пути. И что мы видим? Мы видим Android. Да, под него всё ещё можно писать на Java. На вполне себе чистой Java. Правда версии всего 1.7, поскольку Гугл решил отказаться от "чужой" для него Java в пользу полностью подконтрольного Котлина (остров около Питера, он же - новый язык для Android-а). Да, жаль конечно, что гуглы хотят всё исключительно в личную собственность, но тем не менее, есть хорошие новости. Новость такая - гуглам нужно переводить на питерский остров всех ранее писавших под Android на Java. Поэтому главный слоган в рекламе Котлина - это почти Java! Да, там всё очень похоже. И мало того, Котлин компилируется в Java-байткод, дабы программы и библиотеки на нём бесшовно запускались на обычной JVM (это набор программ, которые помогают Java быстро бегать). Поэтому разработка под Android для вас будет лёгкой прогулкой, особенно если вы не будете обращать внимание на несколько корявую реализацию библиотек и документации к ним, позволяющих создавать пользовательский интерфейс для Android. Вообще, стоит заметить, что работа с пользовательским интерфейсом слабо стандартизирована, а потому во многих случаях вам придётся иметь дело с той или иной степенью корявости реализации интефейса человек-программа.
Ещё одна отметка глубины - проникновение в браузер. Да, вы можете писать на Java программы, которые будут исполняться в браузере. Как? Очень просто - Java код компилируется в Java Script, а затем уже этот, родной для браузеров язык, оживляет клиентскую часть вашего приложения. То есть нет необходимости учить что-то, кроме Java. А вот в глубины понимания происходящего в браузере и между ним и сервером, вам погружаться придётся. Но это же и есть столь ценное для ищущих людей разнообразие! Которое в Java тоже есть.
Итак, глубины мы оглядели. Теперь треть измерение. Назовём его "толщина". Это весь набор полезностей, который был создан вокруг Java за уже где-то 25 лет её существования. Это реально очень толстый слой шоколада! Там есть всё! Вам надо computer science? Их есть у нас! Или вам 3D моделирование? И этого добра навалом! Или игры? И они есть, хоть и не столь массовые. Как говорится - проще сказать, чего нет. Хотя тут я не уверен, а вдруг всё же где-то есть? Скажем, операционная система, 100% которой написано на Java, есть такая? Ну конечно есть! Вот поэтому я и не уверен, чего же там всё-таки нет.
Итак, массовость, большие зарплаты, наличие всего на свете, глубина, ширина и высота - всё есть! Но ещё есть система знаний!
Мир Java заставляет вас познавать программирование как в глубину, так и в ширину. В данном случае под глубиной понимается степень вашего проникновения во внутренности компьютера. Как работает автомобиль? Очень просто - вставляете ключ и едете. А если что-то сломалось? Вызываете механика. А если механика нет поблизости? Вот тут-то вам и нужно нырять глубже. И Java, благодаря своему всепроникающему наследию, даёт вам возможность опускаться в любые глубины, вплоть до непосредственного общения с железом (вспоминаем операционную систему на Java).
А теперь ширина из предыдущего абзаца. Это технологии. Все, о которых вы когда-нибудь слышали. Веб сервисы? Есть. Базы данных? Есть. Enterprise приложения? Есть. Настольные приложения? Есть. Карманные приложения? Есть. Игрушки, 3D, computer science, machine learning и т.д и т.п. Есть! В нашей "Греции", всё есть (с). И, что крайне важно, оно подаётся очень и очень грамотно! Да, Java создавалась людьми, имеющими большой опыт разработки ПО, а потому они привнесли в неё массу сложных знаний, но поданных крайне элегантно! И за время существования Java эта элегантность оттачивалась на огромном множестве практических примеров. Не зря Microsoft по сути скопировали Java в виде своего C#. Поэтому, забравшись внутрь экосистемы Java, вы найдёте не только разнообразие и много полезных штуковин, но вы найдёте там множество примеров просто красиво спроектированных систем, познав которые, вы не сможете более писать так называемый "говнокод" и городить костыль на костыле.
Итак, не умаляя результатов, достигнутых другими языками, без малейшего сомнения заявляю - в среднем по больнице Java лучше! Хотя, скажем, в отделении гастроэнтероскопии, наверняка есть специфические инструменты, которые спасли известное место немалому количеству пациентов, но граждане присяжные заседатели, мы же за всю больницу несём ответственность! Помните об этом, когда будет писать гневные комментарии с указанием на прекрасные результаты отделения хирургии глаза! Мы за вас всех болеем, целиком! От ушей и до хвоста! Так что не будьте мрачными и хмурыми, скорее записывайтесь к нам в больницу на курсы Java! Мы вас обязательно вылечим!
Комментарии (79)
DMGarikk
26.08.2022 12:17+4Я вот с какойто стороны тоже согласен с утверждением, но статья совершенно тему не раскрывает, скорее какието рефлексии по поводу 'ой какие классные программки можно делать'
Очень просто — Java код компилируется в Java Script, а затем уже этот, родной для браузеров язык, оживляет клиентскую часть вашего приложения. То есть нет необходимости учить что-то, кроме Java. А вот в глубины понимания происходящего в браузере и между ним и сервером, вам погружаться придётся.
А можно ненадо так делать? :))И Java, благодаря своему всепроникающему наследию, даёт вам возможность опускаться в любые глубины, вплоть до непосредственного общения с железом
мое любимое (с тех времен когда я еще на яве писал), давайте пример программирование bluetooth не под андройд, посмеемся над проникновением в любые глубины
===
я вот явой очарован во многом в том что она системности в мозгах прибавляет, это на питончике с его динамической типизацией бац бац и выкатили… в рантайме упадет — норм, или голанг с его 'программист сам пусть следит за корректностью интерфейсов… перепутал объект с похожим интерфейсом… ну ниче… клиент потом в поддержку тикет напишет, нада лучче следить за кодом!'
а тут тебе и контроль при компиляции, и многословность (которую многие не любят, зато блин всё понятно что происходит) и ООП во все щели0xd34df00d
26.08.2022 17:40+3а тут тебе и контроль при компиляции
Очень слабый.
и многословность (которую многие не любят, зато блин всё понятно что происходит)
Ну это зависит. Если вы месяцами, если не годами, работаете над одним проектом, то даже чтение чужого кода даже на немногословном языке не составляет проблем. Если же вы прыгаете с проекта на проект, с задачи (не в смысле таска в джире, а в смысле какой-то глобальной цели кода, который вы пишете) на задачу, то да, тогда это очень важное преимущество. Правда, постольку, поскольку предметная область достаточно неглубокая, чтобы оверхед от изучения принятой нотации был заметен на фоне изучения этой области.
Но лично я бы не хотел прыгать в скучных задачах.
ООП во все щели
Как будто что-то хорошее.
DMGarikk
26.08.2022 18:11Как будто что-то хорошее.
плохое это когда 70% проекта на процедурщине, а 25% на ООП и 5% на перловых скриптов которые вызываются странными путями
а то что язык весь ООП, это ни хорошо ни плохо, я последние лет 8 слышу что будущее за функциональщиной, и еще ни одного проекта с ней не видел… ruby, php, python, C#, java даже блин перл… полно, функциональщина… все глаза закатывают… вот если быыы… и пишут на питонеЕсли же вы прыгаете с проекта на проект, с задачи (не в смысле таска в джире, а в смысле какой-то глобальной цели кода, который вы пишете) на задачу, то да, тогда это очень важное преимущество
очень важное, сейчас я работаю вроде как на одном проекте, но разветвленность кода такая… около 50 репозиториев, везде разные стили… там одно там другое… водном месте все понятно описано.
в другом одна строчка кода и 100500 неявных эвентов… велком ту дебаг, пойди всё отлови0xd34df00d
26.08.2022 18:52+1а то что язык весь ООП, это ни хорошо ни плохо, я последние лет 8 слышу что будущее за функциональщиной, и еще ни одного проекта с ней не видел… ruby, php, python, C#, java даже блин перл… полно, функциональщина… все глаза закатывают… вот если быыы… и пишут на питоне
Забавно. У меня за последние года три самый близкий к не-функциональщине проект был, когда надо было что-то на окамле подпилить. Окамл такой, не очень чистый.
около 50 репозиториев, везде разные стили… там одно там другое…
Ну так это может быть на любом языке.
в другом одна строчка кода и 100500 неявных эвентов… велком ту дебаг, пойди всё отлови
Эвенты какие-то… я говорю скорее о том, что в одном языке я напишу
mapM foo bars
, и дальше там монадки всё сделают, а в другом мне придётся какой-нибудь явный цикл писать.
jetcar
26.08.2022 12:39+4Если начинать, то лучше с с#, всё настраивается в разы проще, вариантов как сбилдить 1-2 штуки в зависимости от версии, а не 100500 как на яве и очень много можно настроить через УИ тулзы и не надо прописывать зависимости ручками, с решарпером можно даже по началу не понимать как оно работает и всё за тебя сделается и добавиться куда нужно, а уж библиотеки пишут не как для тех кто хочет в исходники лезть, а как для тех кому не интересно как оно внутри работает.
В дальнейшем это может вызвать проблемы, и захочется не стандартных решений, тогда придётся разбираться. Но для начала нужно чтоб оно без бубна запускалось и позволяло менять даже в довольно сложном проекте. Ну а дебаггер в студии вообще загледенье, по крайней мере до тех пор пока внешний код не надо дебажить. Но мы же про начинающих говорим. По мере роста профессионализма можно переходить на чтото посложнее.
murkin-kot Автор
26.08.2022 13:57+2План для начинающих: качаем IDE, например Eclipse; выполняем шаги по созданию проекта (они обычно расписаны на сайте IDE); создаём первый класс, в котором пишем свой Hello World; затем ctrl+s и ctrl+f11 - и оно запустилось.
Вполне коротко и быстро, разве нет?
DMGarikk
26.08.2022 14:01+3так изкоробки только VS работает, все остальные IDE очень часто натыкаются на очень неявные костыли вроде «пропишите/установите интерпретатор», 'а собирать будете в gradle или maven?' (а я новичок, я хз что это за заклинания))
тотже эклипс мозг сожрет новичку… лучше уже jetbrains советовать, и то… как вспомню как я пытался Clion поднять чтобы проект с гитхаба пересобрать какойто...10 потов сошло… и это при том что я хоть и не умею в си, но представляю как оно там работаетmurkin-kot Автор
26.08.2022 14:09Ну вы же писали про начинающих. А если с гита качаете проект, то значит уже претендуете на знания.
Сейчас на гите модно оставлять проекты на Maven, что означает сокрытие зависимостей. Точнее - перевод их из явных в неявные. Поэтому новичку кажется, что всё сложно, ведь он не видит зависимостей. Тогда вам нужно искать на гите инструкцию оп сборке. Хотя опять же, она там часто расчитана на тех, кто знает Maven, что опять заводит нас на очередной цикл непонимания. Да, это не совсем для новичков. Здесь можно посоветовать почитать что-нибудь о сборке под Maven, если у вас совсем нулевые знания.
А без mavena всё просто - подключаем библиотеки и радуемся жизни. Хотя если знаете maven, то опять же просто - жмёте build, и всё собираеся само.
DMGarikk
26.08.2022 16:14Хотя если знаете maven, то опять же просто — жмёте build, и всё собираеся само.
ага, само, до тех пор пока вы не начинаете, опятьже, под какойнить bluetooth писать и оказывается что мавен не только jar подтягивает, но еще и dll и so, а иногда даже сишный код компилит… а если там чёто не получается… велком изучать мегабайтные логи на предмет ошибокmurkin-kot Автор
26.08.2022 17:41а если там чёто не получается…
А если получается?
Вообще, cross-language сборка тема не самая простая. Плюс работа с железом напрямую - тоже специфическая задача для Java, то есть её могут решать при помощи кучи костылей вместо упрощающих сборку решений. И в итоге получается, что вы возмущены работой конкретного человека, который собрал в одном месте множество разнородных составляющих. Но обвинение-то подано в адрес Java.
Я не вникал в работу с bluetooth на настольных системах, возможно там действительно нет приличной инфраструктурной обвязки. Тогда, если кто-то сумел сгородить костыльное решение, которое всё же позволяет вам работать с bluetooth, стоит сказать ему спасибо и за это, ведь иначе вообще бы ничего не было. И может быть так, что инфраструктура есть, но кто-то с опытом в основном в С, банально тянет туда знакомые ему библиотеки, а за ними необходимость писать С-код и сборки целого бегемота. Здесь просто надо разобраться. Но принципиально нелогично обвинять Java, если вы всё же ещё не успели разобраться.
DMGarikk
26.08.2022 18:14Но принципиально нелогично обвинять Java, если вы всё же ещё не успели разобраться.
я не Java обвиняю, я говорю бравые хвалебные песни про Java зачастую умалчивают суровые реалии, которые не особо её выделяют из других языковmurkin-kot Автор
26.08.2022 19:13Ну вы же понимаете, что один сложный случай легко найдётся для любого языка. В целом же количество сложностей не очень большое. Хотя, чем более сложные проекты выполняются на языке, тем более сложной становится инфраструктура вокруг таких проектов, а потому требуются всё большие усилия по изучению. Но это же именно сложные проекты. А помимо них есть и простые. Давайте всё-таки начинать именно с простых, тогда и не будет суровых реалий. Ведь просто!
Danik-ik
26.08.2022 14:42+1О, мне нравятся эти два варианта в Шарпе. Или получится, или не получится.
Года полтора тому пробовал шарп. Многое понравилось всё больше из последнего, что в dotnet core (не переврал название, надеюсь?). Работа с зависимостями - вообще восторг. Но вот по части методического обеспечения...
Если я находил примеры трёхлетней давности, то они практически всегда не работали
Наработанная кодовая база создавалась строго в рамках концепции «единственного правильного мнения». Доходило до смешного: мультиплатформенный UI фреймворк (не буду тыкать пальцем) имел треть тестов, работающих только под Windows.
Тесты... Не помню, три, что ли варианта тестовых библиотек видел. Так вот, даже на официальном сайте не всегда можно понять, к какой из них относятся примеры. А люди в интернетах, кажется никогда об этом и не думали. Я только на третий день начал что-то подозревать.
Много в Шарпе хорошего, вкусного, полезного. Но вот это «думать совсем не обязательно» получается далеко не совсем безобидным. Фигни тоже хватает. Фигни вообще везде хватает.
Лично мне не зашёл из-за боли при попытке подружить с Линуксом. Можно, но только если следовать генеральной линии партии и не хотеть странного.
Sklott
26.08.2022 12:47+1Мне кажется у вас это, как оно там, "ошибка выжившего" что-ли называется? Вы похоже не писали ничего серьезного ни на чем, кроме Java и поэтому считаете этот язык лучшим. Я тоже начинал с программируемых калькуляторов, и за свою карьеру много писал и на C/C++ и на Java по-крупному и на куче других языков "по-мелкому". И в принципе не очень согласен.
На мой взгляд, если говорить про совсем "новичков-новичков", то лучше питона, как современной замене бэйсика я думаю трудно найти:
-
Это интерпетатор, достаточно написать пару строк и запустить и все работает. Можно даже прям в режиме интерпертатора что-то быстренько посмотреть иногда. И это на порядок сокращает "цикл разработки", что достаточно важно для новичков.
Чтобы настроить сборку простейшей программы на Java без предварительных знаний - умучаешся.
Легко и просто найти и заинсталлить кучу расширений на все вкусы от графики до научной математики.
И при всем при этом это вполне себе серьезный язык с ООП, в отличии от того-же бейскиа
На самом деле мне больше нравится ruby, в основном из-за синтаксиса, но к сожаленю python победил в этом соревновании...
Если же говорить не совсем про "новичков-новичков", а про "начинающих программистов", которые уже в принципе понимают что такое программирование и хотят так сказать "углубить" свои знания, то тут да, согласен Java может рассматриваться как один из вариантов, но не думаю что как единственный. И C++ и JavaScript и другие современные языки вполне себе с ней могут поконкурировать, хотя и в разных областях.
DMGarikk
26.08.2022 13:54серьезный язык с ООП, в отличии от того-же бейскиа
в VB кстати (6.0), вполне себе ООП есть, может не такое изощренное как в яве. но всеже дает реализовать большую часть паттернов… (а современный VB, это фактически C# с другим синтаксисом)
p.s. а других бейсиков сейчас больше и нет в продакшенеНа самом деле мне больше нравится ruby, в основном из-за синтаксиса
много слышал что там какойто особой синтаксис, мне довелось переписывать руби проекты на питоне и вообще разбираться, чёт немогу я согласится в наглядности этого кодаpehat
26.08.2022 14:05+7Я не знаю, о каких паттернах можно говорить в языке, где необъявленную переменную можно использовать как инициализированную по умолчанию. У нас так в газпромовских сметах в графе "итого" два года выводился
0
, потому что ответственный разработчик суммировал итог в переменнуюconstruction_total
, а выводилconstraction_total
. Правда, то, что этого за 2 года вообще никто не заметил, само по себе много говорит о важности смет в Газпроме, но это уже совсем другая история.Sklott
26.08.2022 14:22+1Я не знаю, о каких паттернах можно говорить в языке, где необъявленную переменную можно использовать как инициализированную по умолчанию.
Это вы сейчас про что? В python-е такого нет:
>>> print(a) Traceback (most recent call last): File "<stdin>", line 1, in <module> NameError: name 'a' is not defined
PS: И в ruby тоже:
irb(main):001:0> print a Traceback (most recent call last): 2: from /usr/bin/irb:11:in `<main>' 1: from (irb):1 NameError (undefined local variable or method `a' for main:Object)
DMGarikk
26.08.2022 14:35Я не знаю, о каких паттернах можно говорить в языке, где необъявленную переменную можно использовать как инициализированную по умолчанию.
option explicit on — и всё
===
Sklott
А то что в питоне нет
constraction_total=10
construction_local=get_contraction() # 100500
print(constraction_total)
10
и никаких ошибок (упс)
OldNileCrocodile
27.08.2022 02:02Разгадка в том, что это переменные экземпляра модуля, поэтому к ним прристреливаются значения по умолчанию. В Java только поля класа и объекта получают значение по умолчанию.
Sklott
26.08.2022 14:08много слышал что там какойто особой синтаксис, мне довелось переписывать руби проекты на питоне и вообще разбираться, чёт немогу я согласится в наглядности этого кода
Ну я думаю тут в основном дело вкуса. По сути python и ruby очень похожи по функционалу. Что мне больше нравится в ruby - это нормальные лямбды, а не вот это питоновское "функции - это полноценные объекты языка" или как у них там, они во многих языках полноценные объекты, но зачем мне нужно писать отдельную функцию, если мне надо использовать её только один раз в конкретном месте, я не понимаю.
Плюс в ruby еще есть mixin-ы, которых в питоне вроде нет, довольно удобный механизм иногда.
Ну и плюс, лично меня бесит использование whitespace-ов как части синтаксиса языка. Да, код выглядит красиво и его не испоганишь как в других языках, но бесит.
Trigger1985
29.08.2022 09:32Mixin в python есть и достаточно активно изучаются на курсе для новичков, например в Яндекс практикум.
PEP8 или правильность оформления кода очень дисциплинируют, все программы читать легко! Главное же, что программа один раз пишется и десять читается и через много лет один и тот же код смайл.
murkin-kot Автор
26.08.2022 14:11Интерфейсы ввели раньше 6.0. Возможно в 4, но в 5-м точно были. Это ключевое, что даёт похожесть на ООП.
murkin-kot Автор
26.08.2022 14:01Чтобы настроить сборку простейшей программы на Java без предварительных знаний - умучаешся
Чуть выше уже показывал очень короткий набор шагов - https://habr.com/ru/post/684786/#comment_24666048
Вообще, похоже у комментирующих нет опыта работы с Java IDE, поэтому им кажется всё сложным. Но если IDE установлена и вы хоть немного умеете ею пользоваться - всё остальное тривиально. Проще, чем на С++.
Sklott
26.08.2022 14:25-1Проще, чем на С++.
На C++ нет "стандартной" системы сборки. А из тех что поддерживают C++ есть IMHO и получше, чем gradle или maven...
murkin-kot Автор
26.08.2022 14:33Где-то в начале 90-х появился Borland C, в котором основные идеи сборки в IDE были реализованы очень практично и наглядно. То есть сборка средствами IDE - старая и очень эффективная история.
Sklott
26.08.2022 14:39+1Если не ошибаюсь, сейчас сборкой "средствами IDE", кроме Visual Studio никто не занимается. Все остальные используют сторонние инструменты.
И для этого есть веские причины: когда у тебя pet проект, в котором можно настроить сборку парой раз ткнув мышкой - это одно. А вот когда у тебя собираются сотни тысяч файлов, когда процедуры сборки правится десятками людей, когда нужно сохранять разные версии билдовой процедуры на разных бранчах и потом их мержить, то все UI и проприетарные форматы идут в сад и использются "стандартные" решения.
murkin-kot Автор
26.08.2022 17:53Нет смысл спорить с потребностью в системах сборки. Но всё началось с того, что вы написали про сборку простейшей программы. Простейшие (и не только) программы самым простым образом собираются именно средствами IDE.
А если мы говорим о сложных программах, то для пишущих такие программы авторов в принципе нет проблем со сборкой, потому что этот этап они давно и отлично понимают. А если не понимают, значит замахнулись на то, что не готовы осилить.
erzi
26.08.2022 21:51Тоже не понимаю, в чем проблема с NetBeans IDE
Установка NetBeans полностью автоматизирована, ничего прописывать и корректировать не надо, всё по умолчанию, т.е. несколько кнопок "ОК"
Запуск IDE и кнопка "Создать проект" или на базе простейшего примера
Кнопка "Пуск" и всё
VGoudkov
26.08.2022 22:55Не надо в 2022 использовать NetBeans. Стоит сразу привыкать к IDEA, она вроде как промышленный стандарт уже стала, тем более, что лучшее из NetBeans там есть. А уж что касается поддержки разных фреймворков...
И да, в IDEA можно собрать проект средствами IDE и ручным подключением библиотек, но зачем?
-
panzerfaust
26.08.2022 12:54+2По мне так главное, это на каких задачах учиться. Сейчас многие вкатываются не в язык, а в фреймворк над языком. Например, есть куча биоинформатиков или дата-сатанистов, которые уверены, что программирование - это найти и вызвать либу с функцией .analyzeMyData(data). И ни шага в сторону. Есть и "джависты", которые умеют только аннотации в спринг-буте расставлять. Вот это все лажа. Если заходить серьезно, то нужно начинать с типов, структур, операторов, циклов. Несмотря на все потуги но-код движения, эти понятия никуда со сцены не уходят. По мне лучше это делать на ЯВУ со строгой типизацией, то есть и джава и шарп и плюсы подойдут, но это скорее моя вкусовщина.
static_cast
26.08.2022 13:00+14Предлагать начинать с языка, в котором прямо для хелловорлда нужно использовать статический публичный метод класса... Ну, такое.
DMGarikk
26.08.2022 13:57+5а в чем собственно проблема? это вполне вписывается в логику языка построенного на принципах ООП
Это уж лучше выглядит питона с его «if __name__ == '__main__':» — у меня до сих пор глаз спотыкается об этот костыльmicbal
26.08.2022 14:05+3Для "Hello world!" не обязательно уточнять точку входа, и даже создавать функцию (не говоря уже про класс с методом). :)
DMGarikk
26.08.2022 14:26+1тоесть из ООП языка сделать процедурный, так?
micbal
26.08.2022 14:45+5Синьера от джуна отличает умение выбрать нужное количество слоев-абстракций, золотую средину межде хардкодом и софткодом, количеством зацеплений-зависимостей и т.п. исходя из задачь бизнеса. Задача бизнеса вывести "Hello world", используем паттерн скрипт, ни каких процедур. :) Хороший язык это позволяет.
�
static_cast
26.08.2022 18:18+1тоесть из ООП языка сделать процедурный, так?
Использовать процедурный подход мультипарадигменного языка. Питон он же как
огрлук, - многослойный, - и ООП, и процедурщина это просто разные слои )DMGarikk
26.08.2022 18:33и зачем собственно? чтобы учеников текст не смущал лишний?
ЯП это инструмент и есть правила как инструментом пользоваться, если правила не нравятся — бери другой инструмент, всё просто
Ява создавалась во времена когда всякими упрощательствами (злобный взор в сторону неявных имплементаций интерфейсов у голанга и 'простых и задорных горутин' которые работают на магии, а в яве чёто все морочатся и целые книги пишут как многопоточность синхронизировать) еще не упарывались, а надеялись что человек если пишет — он понимает что делает… а если не понимает то язык его своим дизайном заставляет писать так чтобы он понимал
static_cast
26.08.2022 14:12+5а в чем собственно проблема? это вполне вписывается в логику языка построенного на принципах ООП
Именно. Это концепты ООП, от которого начинающих стоит держать подальше. До ООП им еще нужно пройти долгий путь, - понять что такой вообще поток выполнения, переменные, функции, циклы, базовые алгоритмы и прочее такое всякое. ООП это уже про организацию и архитектуру кода.
TyVik
26.08.2022 20:04И главное - зачем всё это нужно. Желательно, с примерами из собственной жизни.
OldNileCrocodile
27.08.2022 01:50Стань Джедаем Java и получай three hundred thousands bucks (300 000$) to release your deep dark fantasies.
jobber_man
26.08.2022 22:39+1Да не нужен этот костыль для hello world, просто берете и пишете всю программу прямо в файле. Трюк с "if __name__" вам потребуется только если вы этот файл и импортировать, и как отдельную программу запускать захотите. А это уже намного более продвинутый уровень.
panzerfaust
26.08.2022 14:40+2Слабый довод. Метод мейн - это такая условность, через которую при обучении можно один раз перешагнуть и спокойно шпарить дальше чистую процедурщину без всякой мысли про ООП. Если этот момент реально мешает изучить язык, то у меня вопросы совсем не к языку.
И в целом не надо путать сложность чего-то и незнакомость с чем-то. В первый раз все тяжело.
Emulyator
26.08.2022 14:42+2тогда уж Kotlin - Java нормального человека. )
sshikov
26.08.2022 18:48+1ну да, типа того.
причем уже лет 15 можно в той же роли использовать groovy. И все те же самые преимущества будут в наличии — язык простой и удобный (синтаксис лучше питона, более простой и логичный во многих местах), экосистема JVM в наличии, библиотек куча, интероперабельность на уровне… и по сути, вся разница с питоном — в том что экосистемы разные, развивающиеся в разные стороны.
Pastoral
26.08.2022 15:05+1Если смотреть с позиции новичка, то в статье проблема - новичок твёрдо уверен что сейчас Java правильно называется Kotlin, а автор отмалчивается.
Сам же вопрос с чего кому начинать - запретительно сложный. С Java Script и писать на нём вообще всё через Node.js, Electron и Capacitor? С Dart и писать почти всё на Flutter? Методично учить Neovim, Lua, C++ чтобы ей в полной мере воспользоваться, SDL/Skia... и до выхода Carbon свободен? Решить что вне Эппл нет жизни, купить iPad и учить Swift? Решить, что вне Интернет нет жизни и учить Rust ради WebAssembly и PWA?
Я не знаю как с этим быть и не думаю что можно, руководствуясь принципом "не навреди", что-то рекомендовать. Вместо рекомендаций что-то типа "Какие лакуны в образовании можно закрыть занявшись Java"...
murkin-kot Автор
26.08.2022 15:07-3новичок твёрдо уверен что сейчас Java правильно называется Kotlin, а автор отмалчивается
В тексте есть про Kotlin, только название там правильное, изначальное, то есть по русски (поищите поиском). Kotlin в основном под Android. И не все новички вообще знают о существовании Kotlin-а.
Pastoral
26.08.2022 17:53Про остров - это замечательно интересно, но по теме, почему именно Java, формально не написано ничего, а неформально - не надо отказываться от Java потому что за нас от неё уже отказался Гугол. Как-то не очень убедительно, с первого чтения даже как аргумент не заметил.
Кстати, утверждение что Котлин полностью подконтролен Гуглу означает, что JetBrains тоже полностью подконтрольна Гуглу. Это точно так?
murkin-kot Автор
26.08.2022 18:11-4JetBrains тоже полностью подконтрольна Гуглу
JetBrains - подрядчик. Подконтрольность, соответственно, на уровне подрядчика. А язык предназначен для замены подконтрольной Oracle Java на Android. Поэтому в договоре с гуглом JetBrains, разумеется, подписались под многими пунктами, предоставляющими гуглам возможность максимального контроля.
Отказ же гугл от Java отнюдь не смертелен, потому что основная денежная ниша Java - это так называемый backend, где у гуглов мало что получается. Хотя и туда они пробуют залезть со своим Go. Но, как видите, даже сами гуглы имеют альтернативу Котлину. Так что кто тут от чего отказался - пока что весьма зыбкое поле для размышлений.
prishol
26.08.2022 15:07Неважно с чего начинать. Главное, думаю, понять саму суть работы алгоритмов, принципов работы кода и как всё это работает с железом. А насчёт языков, конечно у каждого свои особенности и уровень вхождения, но если тебе 25+, то начни вот прям с любого ЯП. Дальше уже поняв основы, можешь быстро переориентироваться под любое понравившееся направление.
PS: Если хочешь сразу видеть результат работы на экране: HTML/CSS + JS вот базовый набор.
murkin-kot Автор
26.08.2022 15:08Если хочешь сразу видеть результат работы на экране
Тогда нужно no-code решение.
OldNileCrocodile
27.08.2022 01:36Такими решениями придем к тому, что будем лишь писать приказы к ИИ, а ИИ сам уже напишет код, соберет проект, и развернёт его на сервере.
sukhe
26.08.2022 17:37+1Ха! Сразу результат на экране…
В институте я изучал программирование на ЕСках. Где команда PRINT — это реально печать на бумаге на барабанном принтере. Без никаких там экранов. А результат работы программы можно было увидеть завтра, потому что лаборантки только вечером разрывали на кусочки результаты печати всех программ за день.
Так что для своевременной сдачи лабораторок надо было писать программы сразу без ошибок. Чтобы с одного прогона правильно отработало. Потому что следущий раз машинное время перепадёт только через неделю.
Sin2x
26.08.2022 15:12+1Если говорить про JVM-мир, то в наше время логичнее начинать сразу с Котлина.
murkin-kot Автор
26.08.2022 15:18-2И замкнуться в мире гугл и андроид.
Emulyator
26.08.2022 15:51а как же Kotlin Multiplatform, Compose Multiplatform ? ИМХО, неплохие перспективы на будущее.
murkin-kot Автор
26.08.2022 17:45+1Backend очень инертен, там этого добра не будет ещё весьма длительное время. А возможно и вообще никогда не будет, ну кроме малоизвестных проектов некоторых энтузиастов.
Хотя борьба гугла за котлин может в итоге и пододвинет Java, но пока что это, в лучшем случае, перспектива через лет 5-10. А в худшем - никогда.
Emulyator
26.08.2022 20:36+1https://hh.ru/search/vacancy?text=kotlin+Backend+developer
Соглашусь, инертность мышления - очень сильный фактор, но количество людей оценивших плюсы kotlin будет расти, и поводов к обратной тенденции я пока не вижу. По ссылке чень немало упоминаний kotlin, пусть чаще в связке с java, и тенденция положительная. (я поглядываю иногда).
dom1n1k
26.08.2022 17:31+3Для начального обучения с полного нуля надо брать Python.
Если программирование изучается как хобби или вспомогательный навык, то им же можно и ограничиться.
Но если вы планируете становиться профессиональным программистом, то после освоенной базы обязательно нужно прыгать на C. Ну а третий по счету язык вы уже выберете исходя из личных вкусов.
Я убежден, что проф программист обязан пощупать память руками, даже если потом в реальной практике он будет работать с высоким уровнем абстракции. Все эти ручные выделения и освобождения памяти, адреса и указатели, ошибки доступа, ручная работа со строками и прочее — формируют мышление и полезное понимание, что происходит под капотом. И что синтаксический сахар, от которого у всех уже слиплось в одном месте, не бесплатен.
Ассемблер желательно, но всё же не обязательно. Ручное управление памятью обязательно.murkin-kot Автор
26.08.2022 18:03Я бы сказал по другому - грамотный программист просто должен понимать, что происходит внутри программы. Только способ достижения такого понимания может быть разным. На мой взгляд, на Java понимание наступит не сильно позже, чем в случае с С, если речь идёт о чём-то, что выше уровня общения с железом (а такого софта - большая часть). Сама же базовая концепция линейки байт, реализуется почти во всех языках и "щупать" эти байты, соответственно, можно не вспоминая о более близких к машине языках.
В целом всё зависит от способа обучения. Если способ предполагает наличие опытного разработчика, хотя бы неявно, в виде автора книги, то и понимание никуда не денется. А если прыгать по случайным проектам сразу, освоив только Hello World, тогда и на С понимание может очень долго не наступить.
VGoudkov
26.08.2022 23:07Понимание к сожалению наступит сильно позже. Потому что изучать в самом начале концепцию машинной памяти и как на неё отображаются структуры данных - это немного отличается от расстановки аннотаций и создания репозиториев. Причём второй путь зачастую быстрее приводит к желаемому результату, что в создании фич, что в прохождении собеседований. Но вот когда оно начинает упираться в производительность или объём памяти... тогда C-like знания становятся нужны. Но это уже как бы и не уровень джуна.
murkin-kot Автор
27.08.2022 11:51Да, большинство курсов ориентировано на скорость и игнорирует глубины. Это плохо.
defecator
26.08.2022 18:37+2через всю статью красной нитью прошито "ох, begin не нужно писать ! end не нужно писать ! Ах, ох !"
GospodinKolhoznik
26.08.2022 22:45+1Всё так. Да и научиться программировать на джаве очень легко. Всё что нужно, это научиться писать код так, чтобы не возникало ошибки null pointer exception.
Вот как этого добиться, это другой вопрос. Потребуется всего лишь удерживать в уме 25+ паттернов проектирования и использовать их при написании кода. Поначалу кажется, что это невозможно, ибо все эти паттерны противоречат друг другу, но через каких-то 25+ лет опыта вы научитесь так умело ими жонглировать, что они даже не будут мешать другу другу, и вам наконец удастся избежать null pointer exception в рантайме (но это не точно).
VGoudkov
26.08.2022 23:15Lombok наше всё :) Мы вот попытались имитировать в проекте null-safe концепцию из Kotlin путём совместного использования
@NonNull
,@Nullable
иOptional<>
. Вместе со статическим анализом и хинтами IDEA получается очень даже ничего. NPE становится рабочим исключением и обычно ловится тестами
murkin-kot Автор
27.08.2022 11:58Похоже, многие комментирующие, и в том числе вы, почему-то считают, что Java, это что-то сложное. Но как видно из вашего примера, проблема не в Java, а в необходимости изучать достаточно большие объёмы необходимой информации. И эта информация потребуется для создания серьёзной программы на любом языке.
Поэтому ваш сарказм про, по сути, "сложность" самых базовых вещей, скорее характеризует вас, но никак не Java.
GospodinKolhoznik
28.08.2022 14:11Ну и к чему эти переходы на личности?
Вы статью вроде как для начинающих написали? Что это за такие начинающие в вашем понимании, если навык грамотного применения различных ооп-шаблонов проектирования это базовые вещи!?
В моем представлении начинающие рисуют разноцветные концентрические окружности циклами и анимацию зеленых фигур Лиссажу на черном фоне, имитируя осциллограф.
nikolas78
26.08.2022 22:54Имхо: Python (чтобы заинтересовать) -> C (пощупать железо) -> Java (пощупать ООП) -> Haskell (пощупать ФП).
ZhilkinSerg
26.08.2022 23:54Изначально это была упрощённая Java, урезанная ради лёгкости применения, в первую очередь, в браузерах.
YAmROOEhxc0
OldNileCrocodile
27.08.2022 01:41+1Попался на название Javascript. Его назвали не тупо из-за копирастии из Java, а тупо из-за рекламы. Ибо аббревиатура ECMA не была понятна рядовому юзеру.
GerrAlt
28.08.2022 19:44Изначально это была упрощённая Java, урезанная ради лёгкости применения, в первую очередь, в браузерах.
Писать такое в статье для новичков стыд и позор, прежде чем кому-то что-то советовать стоило бы ознакомиться с упоминаемыми вещами.
krdpsr
29.08.2022 09:52javascript лучше для начинающего
начинающему лучше если всё будет в разы проще
чтобы начать например с 12ти лет
и можно программировать микроконтроллеры - это шикарные перспективы
и далее можно при желании легко перейти на java
pehat
Ну конечно, если выбирать между фортраном и Java, я предпочту поехать на дачу. Что мне интересно — в какой профессии можно усидеть, если вообще ничего не знать о языках, созданных после 1995 года?