Java Developer
6.45K subscribers
235 photos
8 videos
12 files
279 links
MAKE JAVA GREAT AGAIN

Мемы: @java_memes
加入频道
Старт карьеры

Попросил своего друга Павла Погодаева @pogpp описать впечатления от первых двух недель работы программистом. В итоге получился небольшой рассказ о его первом месте работы. Слово Паше:

Первые дни работы программистом.
Год-полтора учёбы и подготовки к интервью, и вот он – оффер в не самую отстойную контору. Девочка-кадровик собирает бумаги, а ты ходишь очаровано смотришь на средний офис, команду разработки и переживаешь про себя. Вдруг ты самозванец, тебя спалят, что приврал в резюме про Spring Boot или Hibernate и не пройдешь испыталку. Но нет.

Начало везде одинаковое: читаешь бесполезную документацию, смотришь видосы, ни у кого особо на тебя нет времени. Но потом приходит она – первая таска. Как правило, простая, как 2 байта переслать. Через пару месяцев уже полноценно участвуешь в работе, несёшь ответственность за фичи и в целом появляется картина, как оно и зачем.

Моим первым проектом на пути программиста были кассовые приложения для Спортмастера. Из технологий – Hibernate, JavaFX + guice и божественный soap для связи с внешними системами. Через 7 месяцев я прозрел, что это сплошной багфикс и никакого роста. Стояк на работу стал не так крепок, и пришло время что-то менять. Как итог: новая приятная работа, доходы выросли за год в 2.5 раза, международный проект, переезд из Мск в СПб (да-да, не надо стесняться релоцироваться из-за денег) и вот оно счастье.
Хорошо — Плохо

Проглатывать исключения плохая практика

Плохо
catch (Exception ignored) {}

Хорошо
catch (Exception e) {
throw new RuntimeException(e);
}

Тоже гуд
catch (Exception e) {
log.error("Description", e);
}
Один из лучших вариантов пробрасывания ислкючения — создать свой специализированный. Например, UserNotFoundException, который унаследован от RuntimeException. Плюс обрабатывать исключение должен тот класс, который знает, что с ним нужно делать. Иначе прокидывать дальше.

Исключения нужно использовать только для сигнализации исключительных ситуаций и не использовать для корректного исполнения. Они намного дороже с точки зрения ресурсов, чем обычный возврат значения или управления.
​​@rs_n4k прислал в ответ на пост о проглатывании исключений
Пост для тех, кто сейчас обучается у нас на марафоне по Джаве
Хорошо — Плохо

Объявляйте переменные в как можно меньшей области видимости. Например, переменная i используется только внутри цикла. Её нужно объявить внутри цикла, а не снаружи.

Плохо
int i = 0;
for (i = 0; i < 10; i++) {
/* ... */
}

Хорошо
for (int i = 0; i < 10; i++) {
/* ... */
}

Плохо
int count = 0;
void counter() {
if (count++ > 10) {
return;
}
/* ... */
}

Хорошо
void counter() {
int count = 0;
if (count++ > 10) {
return;
}
/* ... */
}
Хорошо — Плохо

Везде, где это возможно, объявление и инициализацию переменной записывайте в одну строку. И каждую переменную объявляйте отдельной строкой. То есть не нужно использовать объявления такого типа int a, b;

Плохо
int i, j;
i = j = 100;

Хорошо
int i = 100;
int j = 100;
Кто такой CTO

Задал несколько вопросов Фёдору Борщёву, CTO в ГдеМатериал и автору канала @pmdaily.

— Расскажи, как прошел свой путь от простого программиста до технического директора

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

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

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

За время редких студийных выходных я выучил Django и сопутствующий стек (до этого писал на PHP). И под конец работы в студии начали сыпаться предложения об интересных технически-сложных проектах.

— Чем занимается CTO?

С точки зрения бизнеса, первая задача CTO — сделать работу с техническими специалистами такой же управляемой как, скажем, с менеджерами по продажам. Бизнес не должен задумываться о том, сколько у него программистов, на каких технологиях они работают, какое у них покрытие кода тестами и объем технического долга. Вместо этого он должен выдавать требования, получать в ответ цифры ФОТ (оплата труда) и результат к заявленному сроку.

Дальше начинается специфика — в маленьких компаниях CTO должен быть мастером на все руки. И в продукт влезть не хуже продакт-менеджера, и код пописать на уровне синьора, и бизнесу рассказать, какие требования лучше отдать в разработку, а какие сделать по старинке на Экселе и AmoCRM.

В больших компаниях, наоборот, CTO становится ближе к администрированию — выбирает правильных подрядчиков, задает им бизнесовые KPI, обращает много внимания на HR — как делить команды (по продуктам? по компетенциям? по фичам?), кого ставить во главу этих команд, как нанимать правильных людей и организовать передачу знаний.

Кроме бизнеса «сверху», есть еще программисты. Программисты обычно ждут от CTO хороших процессов — все хотят получать четко поставленные задачи с четкими критериями приемки, работать на актуальных технологиях, иметь возможность самим принимать решения и расплачиваться с техническом долгом, знать у кого из коллег о чем стоит спросить и т.д. В общем задача CTO для программистов — сделать, чтобы они были счастливыми, а значит — производительными.

— Насколько глубоко CTO должен разбираться в языках программирования? И какие технологии должен знать?

Для маленьких компаний, где CTO «работает руками», чем больше технологий — тем лучше :-) Лично я стараюсь фокусироваться на том, что важно для комфортной и быстрой работы команды, но при этом тяжело дается для изучения на «боевых» задачах — девопс, новые инструменты\механики тестирования, какие-то вещи про будущее.

Кроме самих технологий, CTO должен понимать, куда движется рынок в целом. Скажем года два назад хороший CTO для JS-проектов должен был изучать такие популярные сейчас вещи как Vue.js, typescript, jest, задумываться о serverless, знакомиться с netlify, предсказывать, что хайп вокруг NoSQL сойдет на нет и т.д.

А для больших компаний желание работать руками скорее будет минусом, чем плюсом.

#интервью #cto
— Какая зарплатная вилка у CTO сейчас?

Зарплата — вопрос сугубо индивидуальный и переговорный. Если посмотреть на рынок труда, то CTO можно называть и единственного веб-программиста, который дорабатывает лендос у сервиса онлайн-курсов, а могут — руководителя производства, критичного для компании уровня ВК или Ламоды. Вот такая же и разница в зарплатах.

— Как программисту стать управленцем?

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

Для начала сделай так, чтобы тебя не нужно было менеджерить — научись выполнять свои собственные обещания и разбираться в задачах. Покачай софтскиллы — пойми зачем в принципе одни люди приходят к другим людям. Вот классические книги, которые в этом помогут:
• Стивен Кови — 7 навыков высокоэффективных людей. Про принятие решений и обещания.
• Джим Кэмп — Сначала скажите «нет». Про то, как разговаривать с другими людьми, чтобы им было полезно.
• Элияху Голдратт — Цель и Критическая цепь. Как лучше разбираться в постановке задач и управлении проектами.

Когда научишься менеджерить себя, останется совсем немного до того, чтобы научиться менеджерить других.

— Как научился брать на себя ответственность? Как понял, что больше хочешь быть управленцем, чем программистом?

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

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

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

А вообще я считаю, что каждый программист должен забирать на себя столько ответственности, сколько только может. Ведь это же твоя жизнь, и именно ответственность определяет ее качество: будешь ли ты сам доволен результатом того, что делаешь?
​​Шпаргалка по Doker'у
​​Шпаргалка по Git'у
Что посмотреть на выходных — 11

Уроки по Android
https://www.youtube.com/playlist?list=PLvqW4wlh9oP7Joa2E4zUYHmGXN4DR-P8A

Интервью сооснователя QIWI
Бориса Кима
https://youtu.be/bAPl6gKNbWk

Принцип экономии мыслетоплива
https://youtu.be/fWR5SFhBUWc

#чтопосмотреть
Ситуация — вы в поиске работы. Характеристика, которая больше остальных повлияет на выбор компании:
anonymous poll

Есть профессиональный рост – 449
👍👍👍👍👍👍👍 72%

Есть амбициозные задачи – 57
👍 9%

Есть карьерный рост – 47
👍 8%

Можно запустить внутренний стартап – 22
▫️ 4%

Можно повлиять на развитие компании – 20
▫️ 3%

Можно выбрать команду при устройстве – 16
▫️ 3%

Можно поменять специализацию – 14
▫️ 2%

👥 625 people voted so far.
​​Шпаргалка по Java Core
​​Шпаргалка по Java Core 2
Плохо — Хорошо

Методы не должны принимать слишком много входных параметров
​​Плохо
​​Хорошо