• Как понять NullPointerException

      Эта простая статья скорее для начинающих разработчиков Java, хотя я нередко вижу и опытных коллег, которые беспомощно глядят на stack trace, сообщающий о NullPointerException (сокращённо NPE), и не могут сделать никаких выводов без отладчика. Разумеется, до NPE своё приложение лучше не доводить: вам помогут null-аннотации, валидация входных параметров и другие способы. Но когда пациент уже болен, надо его лечить, а не капать на мозги, что он ходил зимой без шапки.

      Итак, вы узнали, что ваше приложение упало с NPE, и у вас есть только stack trace. Возможно, вам прислал его клиент, или вы сами увидели его в логах. Давайте посмотрим, какие выводы из него можно сделать.
      Читать дальше →
    • FindBugs помогает узнать Java лучше

        Статические анализаторы кода любят за то, что они помогают найти ошибки, сделанные по невнимательности. Но гораздо интереснее то, что они помогают исправить ошибки, сделанные по незнанию. Даже если в официальной документации к языку всё написано, не факт, что все программисты это внимательно прочитали. И программистов можно понять: всю документацию читать замучаешься.

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

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

        Тернарный оператор ?:


        Казалось бы, нет ничего проще тернарного оператора, но у него есть свои подводные камни. Я считал, что нет принципиальной разницы между конструкциями
        Type var = condition ? valTrue : valFalse;
        и
        Type var;
        if(condition)
          var = valTrue;
        else
          var = valFalse;

        Читать дальше →
      • Физкультура для программиста, есть ли хороший выход?

        У меня никода не было мотивации заниматься физкультурой. Даже в детстве я предпочитал спорту киберспорт. С началом профессиональной деятельности поменялся только характер запускаемых программ. Спортивным стало программирование. И, как полагается профессиональному спортсмену, я продолжал хорошо питаться. Все поменялось когда мне стукнуло 25. Я поменял свое отношение к физическим нагрузкам - я стал их просто ненавидеть, они стали моим приговором. При росте 175 и весе в 120 кг я заимел гипертонию с аритмией. Выполнение обычных бытовых дел выматывало так, что на работу сил оставалось все меньше и меньше. Впереди начали маячить серьезные проблемы со здоровьем. Как я за 10 лет нашел выход из этой ситуации? Да никак. Подробности под катом.

        Читать далее
      • Почему не стоит учиться на программиста

        Всем привет, меня зовут Иван, я разработчик, пишу на Java. Хочу поделиться с вам мыслями и совместно порассуждать, когда не стоит идти учиться на программиста.

        Что я имею ввиду? Если совсем коротко: не надо заниматься программированием, если вам это не нравиться. Глупее некуда, зачем вообще озвучивать то, что понятно всем по умолчанию, скажете вы. Но, не все так просто, отвечу я. 

        Все вокруг стали хотеть войти в IT, из-за высоких зарплат, популярности и пропаганды различных курсов. Но большинство желающих не понимаю почему зарплаты высокие и что именно им придется делать на работе. Незнание порождает ошибочное представление о профессии, что в свою очередь выливается в ошибочное желание учиться на программиста/дата сатаниста/питониста и т.д… Появляется спрос на курсы, курсов и "менторов" становиться все больше. И с каждым днем на рынок выходят специалисты в кавычках. И в кавычках они не потому что мало знают и ничего не умеют, или прошли плохие курсы, а потому что на самом деле им не нравиться программировать. Я предлагаю порассуждать вместе на тему: “Почему нельзя идти учиться на разработчика из-за денег".

        Меня не покидает мысль, что тут и обсуждать нечего. Все же просто, ты не можешь писать код, если тебе это не нравиться. Конец статьи. Но нет, я знаю разработчиков, которые учились на курсах, работали в компании, а через год или несколько лет увольнялись с глубокой депрессией без желания делать вообще что либо. И я также знаю людей, которые идут учиться после нескольких лет успешной работы в медицине например, а ведь перед этим было еще шесть лет университета. Общаясь с ребятами, которые хотят идти изучать какой-нибудь язык, я все чаще слышу признание: “меня привлекает большая зарплата”.

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

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

        Читать далее
      • 9 тяжёлых уроков, которые я усвоил за 18 лет разработки

        • Translation
        Я начал писать код в моей комнате родительского дома, когда мне было 14. Помню, как читал всё, что мог достать с помощью своего медленного соединения с Интернетом. Затем, когда мне было 20, я подписал первый контракт, став веб-разработчиком и изучая PHP и JavaScript. Мне потребовалось 18 лет, чтобы осознать, что кодинг — только часть профессии. Заметьте, я по-прежнему наслаждаюсь кодингом. Не думаю, что когда-нибудь перестану программировать, даже если это станет просто моим хобби, но есть нечто гораздо большее, чем код. Вот почему я хочу поделиться своим опытом. Я думаю, что иногда разработчики усваивают эти уроки слишком поздно.

        Приятного чтения
      • Самый неадекватный кандидат за мою карьеру

          Были кандидаты, которые после первого рабочего дня на радостях в запой уходили… Но вчера ребята провели первичный скрининг и наткнулись на одного из самых сложных кандидатов за последние годы. Сегодня же он выдал опус с целью очернить компанию и интервьюеров и перевел в публичную плоскость дискуссию, а это уже требует реакции компании. К тому же все сказанное им вранье, а сам человек неадекватен. Что произошло и как поступать в таких ситуациях? Ответы на этот вопрос и советы для интервьюеров и кандидатов в данном посте!
          Читать дальше →
        • Как программировать если совсем не хочется? План спасения на случай перегорания или дедлайна


            Никакой воды в этой статье, только описание конкретного плана действий в случае если вы перегорели, у вас дедлайн, прокрастинация, депрессия, а также методики и советы, помогающие привести этот план в действие.

            Читать дальше →
          • Казнить нельзя помиловать

              Привет! 

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

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

              Условия эксперимента следующие:

              Вы руководите несколькими командами разработки. Одна из команд (не единственная) состоит из 10 человек, делает классный и востребованный продукт для конечных клиентов. В состав команды входят:

              7 инженеров—разработчиков (допустим, все фуллстеки, чтобы убрать из задачи сложности по непересекающимся стекам);

              UI/UX-дизайнер;

              системный аналитик;

              владелец продукта — ведущий специалист от Бизнеса, который определяет приоритеты доработок и пользу от новых фич.

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

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

              Погрузившись в историю коммитов и побеседовав со всеми инженерами команды (в том числе и с тем, по которому «есть вопросы») вы получаете следующую картину:

              Читать далее
            • Собеседование Backend-Java-разработчика: вопросы и где искать ответы. Часть 2


                Публикую продолжение сборника вопросов-ответов с собеседований на Backend-Java-разработчика. В первой части мы прошлись по Java и Spring. А в этой поговрим о Hibernate, базах данных, паттернах и практиках разработки, об одной популярной библиотеке, поддержке и сопровождении наших приложений, а также посмотрим на альтернативные шпаргалки и подведём итоги.

                Потопали
              • Собеседование Backend-Java-разработчика: вопросы и где искать ответы. Часть 1


                  Когда-то я проходил серию собеседований на Backend-Java-разработчика и записывал вопросы себе на будущее, чтобы потом можно было пробежаться и освежить память. Подумалось, что, вероятно, данный сборник будет полезен не только мне, поэтому сдул с него пыль, набросал ответов и делюсь с сообществом. На оригинальность и исключительность не претендую: подобные статьи уже были и на Хабре, и много где ещё — в конце (во второй части) приведу список ссылок, чтобы шпаргалка была максимально полной.


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


                  Текста получилось много, поэтому пришлось разбить на две части. В первой поговорим про Java и Spring, а обо всём остальном — во второй. Вторая часть тут

                  Погнали
                  • +13
                  • 20.2k
                  • 7
                • Защита Linux-сервера. Что сделать в первую очередь


                    Habib M’henni / Wikimedia Commons, CC BY-SA

                    В наше время поднять сервер на хостинге — дело пары минут и нескольких щелчков мыши. Но сразу после запуска он попадает во враждебную среду, потому что открыт для всего интернета как невинная девушка на рокерской дискотеке. Его быстро нащупают сканеры и обнаружат тысячи автоматически скриптовых ботов, которые рыскают по сети в поисках уязвимостей и неправильных конфигураций. Есть несколько вещей, которые следует сделать сразу после запуска, чтобы обеспечить базовую защиту.
                    Читать дальше →
                  • 6 ошибок мышления, из-за которых вы остаетесь на нелюбимой работе

                      В начале 2020 года специалисты сервиса по поиску работы «Работа.ру» провели социальный опрос и выяснили, что в следующие 12 месяцев 74% россиян хотят заняться вопросом нового трудоустройства. 53% респондентов рассказали, что недовольны текущим уровнем заработной платы. Но почему в итоге ничего не происходит?

                      Лишь малая часть из тех, кто планирует сменить место работы, в конечном итоге делает это. Оказывается, в большинстве случаев основная причина бездействия — когнитивные ошибки. Мы решили разобраться, что это и из-за каких именно ошибок в мышлении люди отказываются менять карьеру и добиваться новых высот.

                      Читать далее
                    • Стоит ли увольнять разраба за большую и дорогую ошибку? Думаю, нет, но менеджмент хотел крови



                        В Англии все одержимы футболом. Уйма любительских команд и куча стадионов. И вот через знакомых ко мне обратился один англичанин, у которого была идея и немного денег — он попросил сделать приложение, в котором люди могли бы управлять своей любительской командой по футболу. Расставлять людей на поле, делать замены, искать игроков, заказывать стадионы и общаться в чате.

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

                        Поэтому я согласился на работу. И это была просто отдушина после того, что я пережил в бэкенд разработке.
                        Читать дальше →
                      • Я провёл более 600 технических интервью — и вот пять проблемных мест, которые я заметил у кандидатов

                        • Translation
                        Недавно я провёл 600-е собеседование на interviewing.io (IIO). Хотелось бы поделиться опытом, рассказать, как я подхожу к интервью, и пролить свет на типичные проблемы у кандидатов. Каждый интервьюер на IIO индивидуален, поэтому ваши результаты могут отличаться. У нас на платформе сформировалось замечательное сообщество, где каждый работает над улучшением своих знаний, навыков и результатов интервью.

                        Пробное интервью на interviewing.io


                        Мы оцениваем людей по трём четырёхбалльным шкалам. Оценка «один» означает плохой результат, а «четыре» — очень хороший. Я обычно вначале даю кандидату три балла, а затем прибавляю/отнимаю очки по мере интервью.

                        Каждый интервьюер отдаёт предпочтение какому-то одному аспекту. Лично я проявляю некоторую предвзятость в сторону скиллов «общение» («коммуникация») и «решение проблем», которые мы обсудим ниже.
                        Читать дальше →
                      • Коллеги, вы меня огорчаете

                          В июле и августе 2020 года я, с подачи Григория Петрова, проводил для компании Evrone технические интервью на позицию Senior Golang Backend developer. И, видимо, буду вынужден продолжать проводить, о чём ниже.

                          Задача формулировалась как «найти человека, который сможет задать и поддерживать высокий уровень профессионализма в применении языка Go». То есть, сформулирована она была по-человечески, перевод на канцелярит — мой. Под эту задачу я сформировал новый опросник вместо того, которым пользовался несколько лет — старый был с жестким закосом под DevOps. Методику, которой я пользуюсь для создания опросников и количественной оценки соответствия кандидатов, я излагал в своем докладе «Техническое интервью как инженерная задача» на конференции Saint TeamLead 2019.

                          И вот что я хочу сказать вам, коллеги: вы меня огорчаете.


                          Читать дальше →
                        • Никто не умеет управлять программистами — и все придумывают костыли, вместо решений



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

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

                            Если коротко — все ещё хуже, чем выглядело со стороны.
                            Читать дальше →
                          • Топ IT-книг прошлого века, которые актуальны до сих пор

                              «Физические законы — это не Python, их не изменить в новых версиях, то есть материал в книге (по электронике) будет актуален всегда».
                              ne555, из комментариев на Хабре

                              image

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

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

                              Вдохновившись историей «второго рождения» учебника по электронике 1979 года (а точнее, комментариями к ней), мы решили собрать для вас подборку книг по электронике, которым в 2020 году исполнилось от 25 до 69 лет, но которые при этом не утратили своей актуальности. А чтобы не ограничиваться собственными нейтрально-редакторскими вводными, мы попросили прокомментировать эту подборку победителя «ТехноТекста-2019» в номинации «Научно-популярное», старожила Хабра, разработчика интегральных микросхем для космоса и потомственного инженера Валерия Шункова aka @amartology.

                              Осторожно: прочтение книг из этой подборки может вызвать острое желание взяться за паяльник. Вдохновляйтесь, творите и делитесь своим опытом с Хабром, ведь именно по просьбе сообщества мы добавили в список номинаций «ТехноТекста-2020» новую — «Железо и его разработка».
                              Читать дальше →
                            • Структуры данных в картинках. HashMap

                                Приветствую вас, хабрачитатели!

                                Продолжаю попытки визуализировать структуры данных в Java. В предыдущих сериях мы уже ознакомились с ArrayList и LinkedList, сегодня же рассмотрим HashMap.



                                HashMap — основан на хэш-таблицах, реализует интерфейс Map (что подразумевает хранение данных в виде пар ключ/значение). Ключи и значения могут быть любых типов, в том числе и null. Данная реализация не дает гарантий относительно порядка элементов с течением времени. Разрешение коллизий осуществляется с помощью метода цепочек.

                                А почему бы и нет?
                              • Вопросы к собеседованию Java-backend, Java core (60 вопросов)

                                image

                                Добрый день! Представляю вашему вниманию список вопросов к собеседованию Java Backend, которые я оформлял на протяжении около 2х лет.

                                Вопросы разбиты по темам: core, collections, concurrency, io, exceptions, которые задают основные направления хода технического собеседования. Звездочками отмечен субъективный (с точки зрения автора) уровень сложности вопроса, в сноске спойлера — краткий ответ на вопрос. Ответ представляет для интервьювера правильное направления развития мысли кандидата.
                                Читать далее
                              • Сериализация данных: тест производительности и описание применения

                                Сериализация (Serialize, в последующем «сохранение») – это процесс сохранения данных объекта во внешнем хранилище.
                                Эта операция работает в паре с обратной – восстановлением данных, называемой десереализацией (Deserealize, в последующем «восстановление»).


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


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


                                Само понятие сериализации никак не привязано к формату данных, в который будут сохранены данные, поэтому вне зависимости от того, какой результат будет получен – бинарный файл с собственной структурой, формат XML, JSON или даже текстовый файл – все это будет сериализацией.


                                Читать дальше →