Как перейти из C++ разработки в Java.

Работа – штука занятная. Бывает что пишешь в течении 10 лет на плюсах, знаешь их довольно хорошо, и, вдруг, херась, и ты стал ведущим Java-разработчиком. Причем, ты даже не хотел переквалифицироваться, т.к. работодатели разрывали на куски, да и вообще инструмент нравился. Но, раз уж ввязался, не разрывать же контракт из-за такой мелочи как новый язык программирования.

Тем не менее, после такой неожиданной «переквалификации», остро встает вопрос вхождения в тему. Да, языки похожи, но библиотеки имеют мало чего общего, да и вообще, надо бы понимать что ты делаешь. Конечная цель в моем случае, выглядит приблизительно так: сетевая низкоуровневая разработка + безопасность + немного WEB-морд (Spring + JSP).

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

  1. The Structure of the Java Virtual Machine. Глупо работать с инструментом, не имея представления о его внутреннем устройстве. Так что начать надо именно с этого.

  2. Memory Management in the Java HotSpotTM Virtual Machine. Терпеть не могу работать с каким-то языком, не зная как же язык обращается с памятью. На мой взгляд, это одно из основных знаний о любом языке программирования

  3. Java for C++ Programmers. Небольшое введение в язык. Все основные вопросы рассматриваются, писать код можно начинать сразу после прочтения.

  4. Effective Java , Second Edition . Joshua Bloch. Чем-то напоминает книги «Эффективное использование C++». По большому счету, чтобы понять Java после C++ этого полностью хватает.

  5. Java Network Programming . Elliotte Rusty Harold . Книга довольно бестолковая, тем не менее это лучшее что я нашел по сетям в Java. Читать не стоит, а пролистать — очень даже.

  6. Java Concurrency in Practice. Brian Goetz, … . Аналогично предыдущей. Читать много и муторно, но пролистать надо.

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

Многообещающе

Открылся, как мне кажется, довольно многообещающий сервис по поиску работы Карьера 2.0 на небезызвестном StackOverflow. Регистрация соискателей либо по приглашению, либо за заслуги “перед отечеством”, в моем случае проекты на GitHub зачлись. С учетом бешенной популярности StackOverflow, думается, что данный сервис может очень пригодиться в поиске работы.

Mac разработчики редки и ценны :)

На РСДН-е появилась вакансия Mac OS X разработчика в Каспер. Что странно, денег дают даже больше чем разработчикам вендовых драйверов. Честно сказать, меня это удивляет, с учетом того, что требования к разработчикам под MacOS довольно низкие. Ни у кого нет Маков? Ни кому под них не интересно писать?

Но в любом случае: добро пожаловать

Классическая задача для собеседования в реальной жизни

Случилось странное – я столкнулся с буквально классической задачей с собеседования в реальной жизни. Задача состоит в том, что необходимо найти первый не нулевой бит в массиве. Поиск должен происходить максимально быстро, скорость поиска желательно получить приближённую к линейной. Никаких правил по распределению единиц в массиве нет. Массив не велик и должен не вылезать за пределы одной кэш-линии.
Родились 3 варианта алгоритма, одна часть которого общая во всех случаях, вторая специфическая.
Общая часть сводится к поиску первого 32 разрядного слова с хотя бы одним не нулевым битом. Дальше, в найденном 32 разрядном слове ищем первый не нулевой бит. Я не знаю как можно оптимизировать первую часть алгоритма, так что ищу простым перебором. Continue reading

Как не надо писать вакансии

Обычно, вакансии C++ разработчиков выглядят довольно логично. Но иногда попадаются просто редкостные уродцы. Вот небольшой кусочек одного из них:

Вам нравится программировать и решать нетривиальные задачи? Вы читали Страуструпа и Александреску, отличаете Composite от Decorator и знаете, где в памяти размещаются статические данные? Умеете исследовать дампы и поддерживать legacy код, но при этом вам по душе применить пару-другую паттернов в новом проекте? Тогда мы с нетерпением ждем ваше резюме на позицию Software Developer C++!

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

Странные собеседования

В последнее время мне “везет” на странные собеседования. Чтоб было понятнее о чем я говорю, странные собеседования отличаются от нормальных неким неожиданным волшебным поведением противоположной стороны. Итак, пообщался я с R&D подразделением одного крупного американского банка, сидящим в солнечном “бананово лимонном” и гордым маленьким стартапом из не менее солнечной Калифорнии. Что довольно важно, или может на оборот, не важно, менеджеры принимающие итоговое решение были русские.
Continue reading

Тестовое задание.

В целом, я противник каких бы то нибыло тестовых заданий. Большинство компаний в качестве тестовых заданий дают либо совсем уж унылое говно, либо что-то, очень смахивающее на кусок необходимого им компонента. Да и вообще, надо очень сильно хотеть работать где-либо, чтоб согласиться тратить на это свое время.
Хотя, иногда, бывают и исключения. Например, это тестовое задание компании ESET. Делать я его не стал, но подход мне понравился. В качестве задания предлагается провести реверс-инжиниринг небольшого приложения, содержащего в себе простую (8 команд) виртуальную машину. Данная виртуальная машина используется для проверки правильности комбинации имя пользователя/пароль. На выходе должно быть написано приложение, использующее байт-код виртуальной машины и реализующее ее саму.
Для того чтобы кандидату было интереснее, в приложении присутствуют какие-то антиотладочные трюки, т.к. IDA ругается на сегмент экспорта, а Hex-Rays утверждает что SP некорректен.

C++ не нужен?

В преддверии лекции Страуструпа, посвященной C++0x, наша маленькая но разношерстная команда разработки под Mac OS X разошлась во мнениях о ее потенциальной полезности. Одна часть, что показательно молодежь, утверждает что и от книги мозги вскипают, а от лекции и подавно поплохеет. Другая часть, постарше, ожидает что будет очень интересно.
Так вот, получается довольно интересная ситуация. Приток новых людей в область сильно сокращется, новички хотят иметь в языке как минимум сборку мусора, а старые разработчики уходят кто куда.
С учетом всего этого, очень интересно, что ждет область лет через 10. С одной стороны, плюсы это далеко не настольно незаменимы как чистый Си, с другой стороны, на данный момент это единственный язык позволяющий писать достаточно шустрый код для конечного пользователя. Но, как ни крути, такая ситуация будет не всегда, мощность компьютеров рано или поздно позволит работать программам на управляемых языках с приемлимой скоростью.
В целом, тенденция с сокращением количества C++ разработчиков не так уж и плоха, будем как кобол-динозавры, жутко редкими и жутко дорогими. С другой, скучно, наверное, в говнищах 30 летней давности копаться? Но, на данный момент, описанная выше тенденция сплошной плюс – зарплаты растут, количество вакансий растет, интресных задач все больше.

Работа в Москве

Похоже, что московское АйТи таки оправилось от кризиса (ну, либо думает что оправилось).  В крайнем случае в области разработки на C++ зарплаты уверенно ползут вверх. С помощью МоегоКруга и hh.ru, получилось собрать довольно интересную информацию, такую как:

  • Зарплату в 150 тыр на старте давать никто не хочет (блин, обидно), хотя, по слухам, где-то такие ЗП есть!
  • На 130 тыр вакансии уже есть, но их чертовски мало. Тем не менее, очень хорошему разработчику на C++ или архитектору дать могут.
  • До оплаты в 100-110 тыр созрели почти все более-менее уважающие себя компании. Это очень приятный момент.
  • Ниже 100.. ну это уже не интересно, хотя, надо признать, таких вакансий не мало (если не сказать что дохрена), но и требования там довольно не серьезные.

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