Русский
Русский
English
Статистика
Реклама

Советы начинающим

Как работают и отдыхают ИТ-специалисты в пост-карантин?

09.09.2020 10:06:55 | Автор: admin
В марте из-за пандемии COVID-19 Русфинанс Банк (РФБ) и целый ряд других компаний перешли на дистанционный режим работы. После снятия ограничений многие организации возвращаются к работе в офисе, однако РФБ и его ИТ-подразделение продолжает работать удалённо (подробнее о переходе на удалёнку можно прочитать тут).

Мы решили выяснить, как изменилась работа сотрудников после перехода в home office, и заодно познакомить вас с нашими ИТ-экспертами системными аналитиками, бизнес-аналитиками, разработчиками, тестировщиками.

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

Первым нашим собеседником стал Андрей Фетисов, начальник отдела разработки систем взаимодействия с партнёрами (команда, отвечающая за сервисную прослойку между банком и внешним миром в части автокредитования), в прошлом системный аналитик и руководитель группы. Андрей серьёзный руководитель, но в свободное от работы время по-прежнему любит, среди прочего, поиграть в компьютерные игры или заняться написанием музыки.



Чем ты занимаешься в Русфинанс Банке? За что отвечаешь?

Я начальник отдела разработки систем, отвечающих за интеграцию с партнёрами в рамках процесса автокредитования. Мы разрабатываем сервисы для интеграции наших систем с внешним миром, начиная с форм для самостоятельной отправки анкеты клиентом через наши или партнёрский сайты и заканчивая брокерским софтом, CRM-системами партнёров. И, в целом, двигаем процесс оформления автокредитов всё дальше и дальше в онлайн.

До этого работал системным аналитиком, затем руководителем группы.

Опиши, пожалуйста, одним словом/ фразой (метафорой, эпитетом), твой девиз в работе.

Поспешишь людей насмешишь.

Какие гаджеты (компьютеры, планшеты, смартфоны) ты используешь в работе/ для личного пользования? Изменились ли они с переходом на удалёнку?

Рабочий ноутбук + домашний компьютер + смартфон + умные часы. С уходом на удалёнку ничего не поменялось. У меня смартфон Huawei Honor 8, исторически пользуюсь Androidом.

Какие операционные системы тебе нравится использовать вне работы? С какими OS было бы интересно познакомиться для себя? Почему интересны именно они?

Использую Windows 10, на *nix никогда не планировал переходить, так как иногда играю в игры, а в те времена, когда я начинал (~20 лет назад), было немало проблем с совместимостью, поэтому так и остался на Windows. И хотя сейчас хобби уже практически сошло на нет, так как перестало затягивать и цеплять, инерция сохранилась.

Изредка собираемся с друзьями на сессионные игры (аналоги настольных игр типа Armello или MOBA типа Heroes of the Storm). Из однопользовательских игр последними меня зацепили Persona 5, Cuphead, Disco Elysium и Horizon: Zero Dawn.

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

В целом для домашнего пользования мне достаточно Windows.
Скучаю по привычному Windows XP

Каким таск-менеджером/ таск-трекером ты пользуешься для работы/ для себя? Почему выбрал именно их?

У меня личного таск-менеджера как такового нет, рабочие дела записываю в физические/ электронные блокноты. Некоторые свои нерабочие дела веду в Google Keep отдельными заметками с перечнем планируемых действий.

В целом ретроградски предпочитаю что-то офлайновое, не завязанное на соединение с Интернетом. К сожалению, хотя сейчас уже далеко не 2000-е, когда половина сервисов имела открытую наружу админку со стандартными логинами/ паролями, и информационная безопасность сделала миллион шагов вперёд, утечки данных случаются в том числе и у крупных компаний. Мне бы не хотелось, чтобы это случилось с моими личными заметками (улыбается).

В рабочем процессе используем Jira. По завершении процесса Discovery (бизнес-анализ, исследование актуальности и окупаемости той или иной фичи) задача заводится в бэклоге Delivery (системный анализ, разработка, тестирование, внедрение). Задачу декомпозируем на подзадачи, берём в работу, включаем в нужный релиз. У типовой задачи будет движение между аналитиком, Oracle-разработчиком, Java-разработчиком, тестировщиком и менеджером приложения (роль, которая в том числе отвечает за внедрение).

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

Не могу сказать, что мы на 100% с этим справляемся, но определённо движемся в этом направлении. У нас очень большая команда, и мы только учимся эффективно работать все вместе, поэтому предстоит огромное количество работы в том числе и над прозрачностью наших процессов.

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

Какие фреймворки, языки, IDE и другие инструменты тебе нравится использовать больше всего? Почему?

Сам разработкой не занимаюсь, с кодом работаю в основном в рамках чтения, написания проверочных скриптов. Для этих небольших нужд использую Pl/Sql developer.

Моделированием мы занимаемся не слишком часто, но когда необходимость возникает, использую Visio и Visio-совместимые приложения (например, draw.io).

Какое место в твоей жизни занимает тайм-менеджмент? Какие инструменты/ методики ты используешь для управления своим временем (если есть)?

За время карьеры делал несколько подходов к изучению и применению на практике различных методологий. Честно говоря, по моему мнению, для эффективного менеджмента рабочего времени необходимо, чтобы ежедневно у тебя было сколько-то этого самого времени для планирования (улыбается).

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

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

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

Слушаешь ли ты что-то во время работы/ в перерывах между работой (музыку, аудиокниги и т.д.)? Была ли у тебя такая возможность/ желание до перехода на удалёнку?

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

Какую профессиональную литературу ты читаешь? Что можешь порекомендовать?

Для аналитиков, только начинающих профессиональный путь, полезными будут Разработка требований к программному обеспечению Вигерса и Современные методы описания функциональных требований к системам Коберна.

Для более продвинутых специалистов полезнее, на мой взгляд, подписываться на профессиональные сообщества, на экспертов, описывающих кейсы, с которыми они сталкиваются. Здесь всё индивидуально, стоит подобрать под свои предпочтения и проблематику (и, что немаловажно, применяемую методологию).

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

Какие полезные профессиональные привычки помогают тебе в работе?

Всегда перепроверять любую свою работу (документацию, код) незамыленным взглядом после паузы.

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

Дожать задачу до конца это очень ценный навык, который будет работать не только на качество, но и на вашу репутацию (улыбается).

Какой важный совет, который ты когда-либо получал, можешь передать начинающим специалистам в твоей профессиональной области?

Если брать системный анализ, я бы сформулировал два:

1. Всегда старайтесь узнать чуть больше, как в технической, так и бизнесовой части.

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

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

2. Не бойтесь задавать глупые вопросы.

На работе нет места гордости. На 1 из 10* глупых вопросов вы получите не тот ответ, который кажется очевидным.

*Статистика собрана эмпирическим путём

В целом важные на мой взгляд советы:

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

2. Совет, который мне давали мои руководители ещё в самом начале работы в РФБ, когда я был специалистом, а не менеджером. Тогда я к нему не прислушался, потому что он внутренне показался мне неверным. Я смог по-настоящему его оценить только на дистанции. Хотя обоих советовавших я безмерно уважал и уважаю. И в целом всегда старался следовать всем их рекомендациям.

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

Разрешите себе уйти в офлайн, сосредоточиться на своей задаче. Если случится что-то критичное вас обязательно найдут (улыбается). Давайте себе какое-то время (например, с утра и до обеда), в которое вы не реагируете на внешние раздражители. Даже на короткие вопросики на пять минут максимум.

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

Баги не самый удачный пример, конечно, но, тем не менее, немалое количество вопросов рассасываются самостоятельно в течение часа-двух по тем или иным причинам.

О самоизоляции


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

API портал на что обратить внимание при дизайне. Опыт Wrike

16.06.2020 18:07:02 | Автор: admin


Использование публичных API помогает компаниям увеличивать ценность собственного ресурса, создавать уникальный контент и удовлетворять требования различных бизнес-задач. Wrike не исключение. На базе API Wrike создано уже более 30 тысяч приложений. Число пользователей продукта растет, а значит и требования к порталу возрастают с каждым днем.

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

В ходе редизайна нам удалось:

  1. Создать интуитивно понятную навигацию.
  2. Создать сетку для оптимального отображения контента на десктоп и мобильных устройствах.
  3. Обновить дизайн портала в соответствии с текущей дизайн-системой и создать недостающие компоненты.
  4. Соблюсти требования доступности уровня АА и внедрить тематизацию.


1. Интуитивно понятная навигация


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

В ходе интервью мы выяснили, что, помимо технических проблем с нотификацией и актуализацией информации, на портале есть проблемы с навигацией: пользователям сложно найти важную информацию референсы и документацию. Сложность была и в том, чтобы дойти до разделов, расположенных после методов. Например, чтобы найти раздел BI Export, пользователю приходилось просматривать сразу все методы, не было возможности свернуть раздел.


Навигация на предыдущей версии портала

Чтобы оптимизировать структуру портала, мы выделили основные разделы и подразделы, а также отделили технический контент от информационного. Так, в новом портале мы выделили 5 основных разделов: Introduction, API Documentation, API Reference, BI Export и Support, а раздел API Community закрепили отдельной ссылкой в нижней части боковой панели, чтобы пользователь мог при необходимости быстро обратиться за помощью.

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



Обновление навигации на портале (было стало)

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


Навигация на новом портале

2. Сетка для оптимального отображения контента


Dev-портал Wrike состоит в основном из статичных страниц с разнообразным контентом. Таблицы и текстовые блоки занимают всю ширину сетки, поэтому количество колонок не имеет значения.

Мы уделили особое внимание странице с методами. Построить эту страницу можно двумя способами:

  1. Поделить контентную часть на два блока: слева описание и таблицы, справа примеры.
  2. Сделать единый блок с контентом: примеры внутри каждого метода.

На предыдущей версии портала использовался первый способ.


Страница метода на предыдущей версии портала: описание и запрос слева, а слайдер с ответом и примерами справа

Мы проанализировали методы API Wrike и решили использовать второй вариант. Он позволяет сохранить таблицы с их вложенностью в удобном для чтения виде, а также просматривать ответ и пример без переключения слайдера.


Страница метода на новом портале

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

Создайте флюидную сетку, установив максимальную и минимальную ширину контентной области. Задайте минимальные отступы от контентной части и сделайте центральное выравнивание. Контент будет меняться пропорционально ширине экрана, но при этом читать текст и таблицы все равно будет удобно.

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



Принцип работы сетки на новом портале

Большинство разработчиков используют в работе устройства с широкими экранами. Но лучше предусмотреть возможность работы с порталом и на планшетах. Открывайте боковую панель на мобильных устройствах поверх контентной области. Это позволит сохранить информацию в читабельном виде.

3. Обновление дизайна портала в соответствии с текущей дизайн-системой и создание недостающих компонентов


Сущности API портала отличаются от стандартных сущностей веб-сайта. Я выделила несколько компонентов, которые требовали особого внимания со стороны дизайна.

HTTP методы


HTTP методы (GET, HEAD, POST, PUT, DELETE, CONNECT, OPTIONS, TRACE, PATCH) одна из важнейших сущностей API. В зависимости от вида действия сущность имеет определённый HTTP метод. При дизайне HTTP методов старайтесь следовать следующим рекомендациям.

  1. Присвойте каждому из 9 существующих HTTP методов цветовой идентификатор, чтобы визуально можно было отличать их, не заставляя пользователя долго фокусироваться.
  2. Для большего удобства добавьте в компонент HTTP метода URL, чтобы упростить жизнь разработчикам: им не нужно будет совершать дополнительные действия для просмотра этой информации.
  3. Предоставьте возможность видеть запрос и пример одновременно. В новой версии API портала Wrike примеры размещены внутри метода, а не спрятаны в слайдер, как это было ранее.
  4. Не располагайте на отдельных страницах методы, которые относятся к одной сущности: в старой версии Query Tasks, Create Task, Modify Task отдельные страницы. Вместо этого разделите страницы по сущностям: Contacts, Users, Tasks и т.д. Это также упростит взаимодействие с порталом.


HTTP методы на новом портале

Таблицы


Все запросы, отправляемые на сервер, представлены в виде таблиц с большим объемом данных.

Таблица на предыдущей версии портала

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


Таблица на новом портале

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


Вложенность на предыдущей версии портала

На новом портале шеврон относится к самому параметру и помогает пользователю понять, что внутри спрятан контент.

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

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


Вложенность на новом портале

Примеры


Пример показывает, как работать с конкретным методом и что будет возвращено при правильном запросе. Запрос формируется с применением CURL с указанием необходимых данных.

Примеры необходимо визуально отделить от остальной информации и задать фиксированную высоту, чтобы скролл был внутри компонентов, а не внутри страницы. Это избавит пользователей от бесконечного скролла.

Для комфортной работы с примером можно добавить возможность копирования в буфер.

Примеры на новом портале

4. Соблюдение требований доступности и тематизация


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

Контрастность обычного текста, заголовков и графических элементов соответствуют стандартам WCAG.

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

К каждому графическому объекту есть описание. Так, для кнопок копирования информации в буфер, рядом с иконкой расположен текст Copy, при нажатии на кнопку текст меняется на Copied CURL example.

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

Отдельно хочу выделить предоставление пользователю выбора темы интерфейса. Оно стало большим преимуществом нового портала по нескольким причинам:

  1. Это дружественное решение, которое соответствует одному из принципов инклюзивного дизайна принципу выбора.
  2. Темный режим является наиболее привычным для разработчиков.
  3. Темный режим регулирует яркость экрана в соответствии с условиями освещения и снижает нагрузку на глаза.
  4. Обеспечение тем улучшенной контрастностью делает сайт доступным для людей с ослабленным зрением или дальтонизмом.



Тематизация на dev-портале Wrike

Подводя итог


Для создания удобного интерфейса dev-портала необходимо:

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

Посмотреть, как получилось у нас, можно на dev-портале Wrike.

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

Перевод Приёмы и хитрости начинающего Java-программиста

05.10.2020 10:14:40 | Автор: admin

Небольшая коллекция практик, трюков и подсказок, с помощью которых вы сэкономите своё время при изучении Java и написании кода на этом языке программирования. Перевод статьиTop 25 Java Tricks, Tips, and Best Practices от специалистов Рексофт.

Организация работы

Чистый код

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

  • Правило 10-50-500. В одном пакете не может быть более 10 классов. Каждый метод должен быть короче 50 строк кода, а каждый класс короче 500 строк.

  • SOLID принципы.

  • Использование паттернов проектирования.

Работа с ошибками

Stack Trace (Трассировка стека)

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

import java.io.*;Exception e = ;java.io.StringWriter sw = new java.io.StringWriter();e.printStackTrace(new java.io.PrintWriter(sw));String trace = sw.getBuffer().toString();

NullPointerException

Исключения, возникающие из-заnullзначений (NullPointerException), довольно часто появляются при попытке вызвать метод у несуществующего объекта.

Возьмем для примера следующий код:

int noOfStudents = school.listStudents().count;private int getListOfStudents(File[] files) {if (files == null)  throw new NullPointerException("File list cannot be null");}

Примечание переводчика: а вот пример от меня как переводчика материала:

String anyString = null;if (anyString.equals("some string")) { // здесь будет null pointer exception, т.к. anyString == null// ...}

Дата и Время

System.currentTimeMillis или System.nanoTime?

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

МетодSystem.currentTimeMillis()возвращает текущее количество миллисекунд с начала эры Unix в формате Long. Его точность составляет от 1 до 15 тысячных долей секунды в зависимости от системы.

long startTime = System.currentTimeMillis();long estimatedTime = System.currentTimeMillis() - startTime;

МетодSystem.nanoTime()имеет точность до одной миллионной секунды (наносекунды) и возвращает текущее значение наиболее точного доступного системного таймера.

long startTime = System.nanoTime();long estimatedTime = System.nanoTime() - startTime;

Таким образом, методSystem.currentTimeMillis()лучше применять для отображения и синхронизации абсолютного времени, аSystem.nanoTime()для измерения относительных интервалов времени.

Валидация Даты из строки

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

package net.viralpatel.java;import java.text.ParseException;import java.text.SimpleDateFormat;import java.util.ArrayList;import java.util.Date;import java.util.List;public class DateUtil {// List of all date formats that we want to parse.// Add your own format here.private static List; dateFormats = new ArrayList() {{add(new SimpleDateFormat("M/dd/yyyy"));add(new SimpleDateFormat("dd.M.yyyy"));add(new SimpleDateFormat("M/dd/yyyy hh:mm:ss a"));add(new SimpleDateFormat("dd.M.yyyy hh:mm:ss a"));add(new SimpleDateFormat("dd.MMM.yyyy"));add(new SimpleDateFormat("dd-MMM-yyyy"));}};/** * Convert String with various formats into java.util.Date *  * @param input *            Date as a string * @return java.util.Date object if input string is parsed  * successfully else returns null */public static Date convertToDate(String input) {Date date = null;if(null == input) {return null;}for (SimpleDateFormat format : dateFormats) {try {format.setLenient(false);date = format.parse(input);} catch (ParseException e) {//Shhh.. try other formats}if (date != null) {break;}}return date;}}

Пример его использования:

package net.viralpatel.java;public class TestDateUtil {public static void main(String[] args) {System.out.println("10/14/2012" + " = " + DateUtil.convertToDate("10/14/2012"));System.out.println("10-Jan-2012" + " = " + DateUtil.convertToDate("10-Jan-2012"));System.out.println("01.03.2002" + " = " + DateUtil.convertToDate("01.03.2002"));System.out.println("12/03/2010" + " = " + DateUtil.convertToDate("12/03/2010"));System.out.println("19.Feb.2011" + " = " + DateUtil.convertToDate("19.Feb.2011" ));System.out.println("4/20/2012" + " = " + DateUtil.convertToDate("4/20/2012"));System.out.println("some string" + " = " + DateUtil.convertToDate("some string"));System.out.println("123456" + " = " + DateUtil.convertToDate("123456"));System.out.println("null" + " = " + DateUtil.convertToDate(null));}}

Результат:

10/14/2012 = Sun Oct 14 00:00:00 CEST 201210-Jan-2012 = Tue Jan 10 00:00:00 CET 201201.03.2002 = Fri Mar 01 00:00:00 CET 200212/03/2010 = Fri Dec 03 00:00:00 CET 201019.Feb.2011 = Sat Feb 19 00:00:00 CET 20114/20/2012 = Fri Apr 20 00:00:00 CEST 2012some string = null123456 = nullnull = null

Строки

Оптимизация строки

Для конкатенации (сложения) строк в Java используется оператор +, для примера, в циклеforновый объект может создаваться для каждой новой строки, что приводит к потере памяти и увеличению времени работы программы.

Необходимо избегать создания Java строк через конструктор, пример:

// медленное создание строкиString bad = new String ("Yet another string object");// быстрое создание строкиString good = "Yet another string object"

Одинарные и двойные кавычки

Что ты ожидаешь в результате выполнения этого кода?

public class Haha {  public static void main(String args[]) {    System.out.print("H" + "a");    System.out.print('H' + 'a');  }}

Казалось бы, строка должна возвращать HaHa, но на самом деле это будет Ha169.

Двойные кавычки обрабатывают символы как строки, но одинарные кавычки ведут себя иначе. Они преобразуют символьные операнды ('H'и'a') в целые значения посредством расширения примитивных типов получается 169.

Математика

Float или Double?

Программисты часто не могут выбрать необходимую точность для чисел с плавающей запятой. Float требует всего 4 байта, но имеет только 7 значащих цифр, а Double в два раза точнее (15 цифр), но в два раза прожорливее.

Фактически, большинство процессоров могут одинаково эффективно работать как с Float, так и с Double, поэтому воспользуйтесь рекомендацией Бьорна Страуструпа (автор языка С++):

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

Проверка на нечетность

Можно ли использовать этот код для точного определения нечетного числа?

public boolean oddOrNot(int num) {  return num % 2 == 1;}

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

public boolean oddOrNot(int num) {  return (num & 1) != 0;}

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

Возведение в степень

Возвести число в степень можно двумя способами:

  1. простое умножение;

  2. используя методMath.pow()(двойное основание, двойной показатель степени).

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

double result = Math.pow(625, 0.5); // 25.0

Простое умножение в Java работает в 300-600 раз эффективнее, кроме того, его можно дополнительно оптимизировать:

double square = double a * double a;  double cube = double a * double a * double a; // не оптимизированоdouble cube = double a * double square;  // оптимизировано double quad = double a * double a * double a * double a; // не оптимизированоdouble quad = double square * double square; // оптимизировано

JIT оптимизация

Код Java обрабатывается с использованием JIT-компиляции: сначала он транслируется в платформенно-независимый байт-код, а затем в машинный код. При этом оптимизируется все возможное, и разработчик может помочь компилятору создать максимально эффективную программу.

В качестве примера рассмотрим две простые операции:

// 1n += 2 * i * i; // 2n += 2 * (i * i);

Давайте измерим время выполнения каждого из них:

// 1long startTime1 = System.nanoTime(); int n1 = 0; for (int i = 0; i < 1000000000; i++) {   n1 += 2 * i * i; } double resultTime1 = (double)(System.nanoTime() - startTime1) / 1000000000;System.out.println(resultTime1 + " s");  // 2long startTime2 = System.nanoTime(); int n2 = 0; for (int i = 0; i < 1000000000; i++) {   n2 += 2 * (i * i); } double resultTime2 = (double)(System.nanoTime() - startTime2) / 1000000000;System.out.println(resultTime2 + " s");

Запустив этот код несколько раз, мы получим примерно следующее:

|`2*(i*i)`| `2*i*i`||---------|--------||0.5183738 | 0.6246434||0.5298337 | 0.6049722||0.5308647 | 0.6603363||0.5133458 | 0.6243328||0.5003011 | 0.6541802||0.5366181 | 0.6312638||0.515149  | 0.6241105||0.5237389 | 0.627815 ||0.5249942 | 0.6114252||0.5641624 | 0.6781033||0.538412  | 0.6393969||0.5466744 | 0.6608845||0.531159  | 0.6201077||0.5048032 | 0.6511559||0.5232789 | 0.6544526|

Схема очевидна: группировка переменных в круглые скобки ускоряет работу программы. Это связано с генерацией более эффективного байт-кода при умножении одинаковых значений.

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

Структуры данных

Комбинирование хеш-таблиц

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

import java.util.*;Map m1 = ;Map m2 = ;m2.putAll(m1); // добавить к m2 все элементы из m1

Array или ArrayList?

Выбор междуArrayиArrayListзависит от специфики задачи Java, которую вы хотите решить. Запомните следующие особенности этих типов:

  • Массив имеет фиксированный размер, и память для него выделяется во время объявления, а размерArrayListможет динамически меняться.

  • Массивы Java работают намного быстрее, а вArrayListнамного проще добавлять и удалять элементы.

  • При работе сArrayскорее всего возникнет ошибкаArrayIndexOutOfBoundsException.

  • ArrayList может быть только одномерным, когда массивы Java могут быть многомерными.

import java.util.*; public class ArrayVsArrayList {  public static void main(String[] args) {    // создаем массив    int[] myArray = new int[6];     // ссылаемся на несуществующий индекс    myArray[7]= 10; // ArrayIndexOutOfBoundsException     // создаем ArrayList    List myArrayList = new ArrayList<>();     // простое добавление и удаление элементов    myArrayList.add(1);    myArrayList.add(2);    myArrayList.add(3);    myArrayList.add(4);    myArrayList.add(5);    myArrayList.remove(0);     // перебор элементов ArrayList     for(int i = 0; i < myArrayList.size(); i++) {      System.out.println("Element: " + myArrayList.get(i));    }     //  многомерный массив    int[][][] multiArray = new int[3][3][3];   }}

JSON

Сериализация и Десериализация

JSON невероятно удобный и полезный синтаксис для хранения и обмена данными. Java полностью поддерживает это.

Примечание переводчика: для использования JSON из примера необходимо подключить библиотекуJSON Simple.

Вы можете сериализовать данные следующим образом:

import org.json.simple.JSONObject;import org.json.simple.JSONArray; public class JsonEncodeDemo {  public static void main(String[] args) {    JSONObject obj = new JSONObject();    obj.put("Novel Name", "Godaan");    obj.put("Author", "Munshi Premchand");     JSONArray novelDetails = new JSONArray();    novelDetails.add("Language: Hindi");    novelDetails.add("Year of Publication: 1936");    novelDetails.add("Publisher: Lokmanya Press");            obj.put("Novel Details", novelDetails);      System.out.print(obj);    }}

Получается следующая строка JSON:

{"Novel Name":"Godaan","Novel Details":["Language: Hindi","Year of Publication: 1936","Publisher: Lokmanya Press"],"Author":"Munshi Premchand"}

Десериализация в Java выглядит так:

import java.io.FileNotFoundException;import java.io.FileReader;import java.io.IOException;import java.util.Iterator; import org.json.simple.JSONArray;import org.json.simple.JSONObject;import org.json.simple.parser.JSONParser;import org.json.simple.parser.ParseException; public class JsonParseTest {  private static final String filePath = "//home//user//Documents//jsonDemoFile.json";      public static void main(String[] args) {    try {      // читаем json файл      FileReader reader = new FileReader(filePath);      JSONParser jsonParser = new JSONParser();      JSONObject jsonObject = (JSONObject)jsonParser.parse(reader);                  // берем данные из json объекта      Long id =  (Long) jsonObject.get("id");      System.out.println("The id is: " + id);                  String type = (String) jsonObject.get("type");      System.out.println("The type is: " + type);       String name = (String) jsonObject.get("name");      System.out.println("The name is: " + name);       Double ppu =  (Double) jsonObject.get("ppu");      System.out.println("The PPU is: " + ppu);       // извлекаем массив              System.out.println("Batters:");      JSONArray batterArray= (JSONArray) jsonObject.get("batters");      Iterator i = batterArray.iterator();            // проходимся по всем элементам массива      while (i.hasNext()) {        JSONObject innerObj = (JSONObject) i.next();        System.out.println("ID "+ innerObj.get("id") +             " type " + innerObj.get("type"));      }       System.out.println("Topping:");      JSONArray toppingArray= (JSONArray) jsonObject.get("topping");      Iterator j = toppingArray.iterator();      while (j.hasNext()) {        JSONObject innerObj = (JSONObject) j.next();        System.out.println("ID "+ innerObj.get("id") +             " type " + innerObj.get("type"));      }    } catch (FileNotFoundException|IOException|ParseException|NullPointerException ex) {      ex.printStackTrace();    }  }}

Используемый в примере файл JSON (jsonDemoFile.json):

{  "id": 0001,  "type": "donut",  "name": "Cake",  "ppu": 0.55,  "batters":    [      { "id": 1001, "type": "Regular" },      { "id": 1002, "type": "Chocolate" },      { "id": 1003, "type": "Blueberry" },      { "id": 1004, "type": "Devil's Food" }    ],  "topping":    [      { "id": 5001, "type": "None" },      { "id": 5002, "type": "Glazed" },      { "id": 5005, "type": "Sugar" },      { "id": 5007, "type": "Powdered Sugar" },      { "id": 5006, "type": "Chocolate with Sprinkles" },      { "id": 5003, "type": "Chocolate" },      { "id": 5004, "type": "Maple" }    ]}

Примечание переводчика: в Java проектах очень часто для работы с JSON используют библиотеки Gson от Google или Jackson. Обе библиотеки очень популярны и хорошо поддерживаются. Попробуйте и их.

Ввод и Вывод

FileOutputStream или FileWriter?

Запись файлов в Java осуществляется двумя способами:FileOutputStreamиFileWriter. Какой метод выбрать, зависит от конкретной задачи.

FileOutputStreamпредназначен для записи необработанных байтовых потоков. Это делает его идеальным решением, например, для работы с изображениями.

File foutput = new File(file_location_string);FileOutputStream fos = new FileOutputStream(foutput);BufferedWriter output = new BufferedWriter(new OutputStreamWriter(fos));output.write("Buffered Content");

УFileWriterдругое призвание: работа с потоками символов. Поэтому, если вы пишете текстовые файлы, выберите этот метод.

FileWriter fstream = new FileWriter(file_location_string);BufferedWriter output = new BufferedWriter(fstream);output.write("Buffered Content");

Производительность и лучшие практики

Пустая коллекция вместо Null

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

import java.util.*public List getLocations() {  List result = someService.getLocationsFromDB();  return result == null ? Collections.emptyList() : result;}

Создание объектов только когда необходимо

Создание объектов одна из самых затратных операций в Java. Лучше всего создавать их только тогда, когда они действительно нужны.

import java.util.ArrayList;import java.util.List; public class Employees {  private List Employees;   public List getEmployees() {    // initialization only if necessary    if(null == Employees) {      Employees = new ArrayList();    }        return Employees;  }}

Deadlocks (Дедлоки)

Взаимная блокировка (Deadlock) потоков может происходить по многим причинам, и полностью защититься от них в Java 8 очень сложно. Чаще всего, это происходит, когда один синхронизируемый объект ожидает ресурсов, которые заблокированы другим синхронизированным объектом.

Вот пример тупика этого потока:

public class DeadlockDemo {  public static Object addLock = new Object();  public static Object subLock = new Object();   public static void main(String args[]) {    MyAdditionThread add = new MyAdditionThread();    MySubtractionThread sub = new MySubtractionThread();    add.start();    sub.start();  }   private static class MyAdditionThread extends Thread {    public void run() {      synchronized (addLock) {        int a = 10, b = 3;        int c = a + b;        System.out.println("Addition Thread: " + c);        System.out.println("Holding First Lock...");        try { Thread.sleep(10); }        catch (InterruptedException e) {}        System.out.println("Addition Thread: Waiting for AddLock...");        synchronized (subLock) {           System.out.println("Threads: Holding Add and Sub Locks...");        }      }    }  }   private static class MySubtractionThread extends Thread {    public void run() {      synchronized (subLock) {        int a = 10, b = 3;        int c = a - b;        System.out.println("Subtraction Thread: " + c);        System.out.println("Holding Second Lock...");        try { Thread.sleep(10); }        catch (InterruptedException e) {}        System.out.println("Subtraction  Thread: Waiting for SubLock...");        synchronized (addLock) {           System.out.println("Threads: Holding Add and Sub Locks...");        }      }    }  }}

Результат этой программы:

=====Addition Thread: 13Subtraction Thread: 7Holding First Lock...Holding Second Lock...Addition Thread: Waiting for AddLock...Subtraction  Thread: Waiting for SubLock...

Взаимоблокировок можно избежать, изменив порядок вызова потоков:

private static class MySubtractionThread extends Thread {  public void run() {    synchronized (addLock) {      int a = 10, b = 3;      int c = a - b;      System.out.println("Subtraction Thread: " + c);      System.out.println("Holding Second Lock...");      try { Thread.sleep(10); }      catch (InterruptedException e) {}      System.out.println("Subtraction  Thread: Waiting for SubLock...");      synchronized (subLock) {        System.out.println("Threads: Holding Add and Sub Locks...");      }    }  }}

Вывод:

=====Addition Thread: 13Holding First Lock...Addition Thread: Waiting for AddLock...Threads: Holding Add and Sub Locks...Subtraction Thread: 7Holding Second Lock...Subtraction  Thread: Waiting for SubLock...Threads: Holding Add and Sub Locks...

Резервирование памяти

Некоторые приложения Java очень ресурсоемки и могут работать медленно. Для повышения производительности вы можете выделить на машине Java больше оперативной памяти.

export JAVA_OPTS="$JAVA_OPTS -Xms5000m -Xmx6000m -XX:PermSize=1024m -XX:MaxPermSize=2048m"
  • Xms минимальный пул выделения памяти;

  • Xmx максимальный пул выделения памяти;

  • XX: PermSize начальный размер, который будет выделен при запуске JVM;

  • XX: MaxPermSize максимальный размер, который можно выделить при запуске JVM.

Примечание переводчика: PermSize и MaxPermSize, начиная с Java 8 уже больше не используются.

Решение распространенных проблем

Содержимое директории

Java позволяет вам получать имена всех подкаталогов и файлов в папке в виде массива, который затем можно последовательно прочитать:

import java.io.*; public class ListContents {  public static void main(String[] args) {    File file = new File("//home//user//Documents/");    String[] files = file.list();     System.out.println("Listing contents of " + file.getPath());    for(int i=0 ; i < files.length ; i++) {      System.out.println(files[i]);    }  }}

Выполнение консольных команд

Java позволяет выполнять консольные команды прямо из кода, используя классRuntime. Очень важно не забывать об обработке исключений.

Например, давайте попробуем открыть файл PDF через терминал Java (на Linuxe):

public class ShellCommandExec {  public static void main(String[] args) {    String gnomeOpenCommand = "gnome-open //home//user//Documents//MyDoc.pdf";     try {      Runtime rt = Runtime.getRuntime();      Process processObj = rt.exec(gnomeOpenCommand);       InputStream stdin = processObj.getErrorStream();      InputStreamReader isr = new InputStreamReader(stdin);      BufferedReader br = new BufferedReader(isr);       String myoutput = "";       while ((myoutput=br.readLine()) != null) {        myoutput = myoutput+"\n";      }      System.out.println(myoutput);    } catch (Exception e) {      e.printStackTrace();    }  }

Воспроизведение звуков

Звук важный компонент многих десктопных приложений и игр. Язык программирования Java предоставляет средства для работы с ним.

import java.io.*;import java.net.URL;import javax.sound.sampled.*;import javax.swing.*; public class PlaySoundDemo extends JFrame {    // constructor   public playSoundDemo() {      this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);      this.setTitle("Play Sound Demo");      this.setSize(300, 200);      this.setVisible(true);       try {         URL url = this.getClass().getResource("MyAudio.wav");         AudioInputStream audioIn = AudioSystem.getAudioInputStream(url);         Clip clip = AudioSystem.getClip();         clip.open(audioIn);         clip.start();      } catch (UnsupportedAudioFileException|IOException|LineUnavailableException e) {         e.printStackTrace();      }   }    public static void main(String[] args) {      new PlaySoundDemo();   }}

Отправка email

Отправить электронную почту на Java очень просто. Вам просто нужно установитьJava Mailи указать путь к нему в пути к классам проекта.

import java.util.*;import javax.mail.*;import javax.mail.internet.*; public class SendEmail {  public static void main(String [] args) {        String to = "recipient@gmail.com";    String from = "sender@gmail.com";    String host = "localhost";     Properties properties = System.getProperties();    properties.setProperty("mail.smtp.host", host);    Session session = Session.getDefaultInstance(properties);     try{      MimeMessage message = new MimeMessage(session);      message.setFrom(new InternetAddress(from));       message.addRecipient(Message.RecipientType.TO,new InternetAddress(to));       message.setSubject("My Email Subject");      message.setText("My Message Body");      Transport.send(message);      System.out.println("Sent successfully!");    } catch (MessagingException ex) {      ex.printStackTrace();    }  }}

Получение координат курсора

Чтобы фиксировать события мыши, вам необходимо реализовать интерфейсMouseMotionListener. Когда курсор попадает в определенную область, срабатывает обработчик событияmouseMoved, из которого вы можете получить точные координаты (используя Swing для UI)

import java.awt.event.*;import javax.swing.*; public class MouseCaptureDemo extends JFrame implements MouseMotionListener {  public JLabel mouseHoverStatus;   public static void main(String[] args) {    new MouseCaptureDemo();  }   MouseCaptureDemo() {    setSize(500, 500);    setTitle("Frame displaying Coordinates of Mouse Motion");     mouseHoverStatus = new JLabel("No Mouse Hover Detected.", JLabel.CENTER);    add(mouseHoverStatus);    addMouseMotionListener(this);    setVisible(true);  }   public void mouseMoved(MouseEvent e) {    mouseHoverStatus.setText("Mouse Cursor Coordinates => X:"+e.getX()+" | Y:"+e.getY());  }   public void mouseDragged(MouseEvent e) {  }}
Подробнее..

Советы начинающим разработчикам

01.02.2021 10:05:55 | Автор: admin

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


Не нужно распыляться при изучении программирования

Почему-то многие начинающие разработчики начинают прыгать со стека на стек и учить совершенно разные вещи. Сегодня он учит C, чтобы писать код для микроконтроллеров, завтра он учит Java для мобильной разработке под Android, послезавтра он учит C# для создания игр под Unity. Как итог, голова забита, сил учиться уже нет, но по факту ничего не знает и не может.

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

Нужно следовать цели и работать с мотивацией

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

  • Какой язык программирования самый лучший.

  • Какой язык программирования нужно выучить, чтобы переехать в США.

  • Какие самые лучшие онлайн-курсы по программирования.

  • Какой ноутбук выбрать для программиста.

  • И так далее.

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

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

Спорить и ругаться с более опытными программистами

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

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

Знание инструмента и языка программирования

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

1) Современные инструменты разработки: PhpStorm/PyCharm/VSCode и другие, - имеют множество крутых фич, которые ускоряют написание и форматирование кода. И если посчитать, сколько времени они вам помогут сэкономить, становится просто очевидно, что вам обязательно нужно научиться ими правильно пользоваться, и сделать их использование на автомате.

2) Чем лучше вы понимаете, как работает та или иная функция языка (либо вообще вы знаете об её существовании), тем элегантнее и проще получается у вас код. Поэтому хорошей практикой является слежение за тем, какие нововведения появляются в новых версиях вашего языка, а также выполнение различных челенджевых задачек по типуCodewarsи других сервисов для практики написания элегантного кода.

Одна лишь теория программирования

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

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

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

Нельзя сесть и тщательное все выучить

Многие люди думают, что вот я уволюсь с работы, возьму себе отпуск на 6 месяцев и выучу все программирование, чтобы найти работу. Это большая ошибка, так делать нельзя.

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

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

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

У вас получится стать разработчиком

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

Подробнее..

Какие ошибки совершает аналитик в первые полгода работы и как их избежать

19.05.2021 14:18:09 | Автор: admin

Хайди хо, Кайл!

Меня зовут Диана и я бизнес-аналитик в компании Surf. В прошлом году я закончила бакалавриат факультета компьютерных наук в ВГУ: это дало мне базовые теоретические знания. Однако теория мало применима без практики: теперь набиваю шишки в настоящих проектах.

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

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

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

Не бойтесь задавать больше вопросов и просить уточнений

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

Лучше задать больше вопросов, чем что-то упустить. Например, когда работаешь над проектом, важно уточнить:

  • На чьей стороне будет реализована логика: фронта, middleware, бэка?

  • Как определять нужное состояние элемента? Как и где получать и обрабатывать нужные параметры?

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

  • Касаются ли вашей стороны эти требования или от вас никаких доработок и не потребуется?

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

Проверяйте и перепроверяйте выполнение договорённостей

Когда в процессе проработки фичи участвует большое количество человек, это как минимум значит, что сторонам будет непросто договориться. А ещё это значит, что сложно будет уследить за всеми требованиями и договорённостями.

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

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

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

Не стесняйтесь быть настойчивым и даже назойливым, иногда вы и проджект-менеджер единственные, кто может повлиять на то, что договорённости будут выполнены в срок. Если видите, что ответов нет в оговоренное время, не стесняйтесь пинговать коллег. Иначе ожидание может сильно затянуться.

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

Пример из жизни

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

Я не акцентировала внимание бэкендеров и продакт оунера на том, насколько важно, чтобы бэк присылал нам этот признак. Когда фича должна была уже уйти в разработку, этого признака всё ещё не было и в помине, потому что ни бэк, ни сторонний сервис, к API которого мы обращались, не разработали его.

Из-за этого процесс задержался ещё на неделю, потому что пришлось потратить много времени на повторное обсуждение. В итоге решили кнопку отображать всегда:)

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

Уточняйте, как сделать проще

Бывает, что бизнес-аналитику реализация фичи кажется удобной. Он предлагает её разработчику, а в ответ получает: Чё-то сложно, давай по-другому?. Это нормально: взгляды аналитика и разработчика на реализацию фичи могут разительно отличаться: разработчик понимает, что ему хотят втюхать что-то сложное и заморочное, и идёт в отказ.

Если бизнес-аналитику не хватает опыта, чтобы оценить, насколько сложен вариант реализации, лучше сразу прийти к разработчикам и посоветоваться с ними. Иначе потом придется проходить новый круг ада: обсуждать изменения. Кроме того, это может сдвинуть сроки реализации: не нужно объяснять, почему это плохо:)

Френдли ремайндер

Если встаёт вопрос, на чьей стороне должна быть реализована сложная логика, связанная со сравнениями, вычислениями, сортировкой и так далее, практически всегда логичнее вынести её на бэк. Запомните мой совет и повторяйте его как мантру на всех созвонах (и перед сном).

Будьте внимательным к потенциально проблемным требованиям

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

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

А вот пример из жизни. Недавно мы параллельно вели две фичи от разных продакт-оунеров. Фичи были частично взаимосвязаны, но требования во многих местах противоречили друг другу. Каждый продакт видел UI по-своему: договориться было достаточно трудно. Тогда пришлось столкнуть их лбами. После этому мы наконец пришли к варианту, устраивающему всех.

Важно быть начеку и проверять, не противоречат ли новые требования уже реализованной функциональности.

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

Как определить, что перед вами задача-оборотень, которая может превратиться из человечной в дикую? По количеству непоняток. Берегитесь, если:

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

  • Не очевидна инициализация флоу и переход между экранами.

  • Нет четкого понимания логики.

Например, несколько месяцев назад мы начали обсуждение фичи без определённых требований. У продакт-оунера не было четкого понимания, что должно получиться в итоге. Это стоило нам многих часов созвонов-обсуждений и несколько раз перекроенного ТЗ.

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

Пример

Прилетают требования: нужно определять значение поля по параметрам, которые будут приходить с сервера. Значение поля должно отображаться в интерфейсе.

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

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

_______

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

Вот и всё, мои маленькие хоббиты. Я поделилась с вами своей мудростью, теперь вы сами по себе. Не дрейфте, не теряйтесь, будьте настойчивы и внимательны. В добрый путь!

Подробнее..

Перевод Как переписать SQL-запросы на Python с помощью Pandas

31.07.2020 18:06:20 | Автор: admin
В этой статье June Tao Ching рассказал, как с помощью Pandas добиться на Python такого же результата, как в SQL-запросах. Перед вами перевод, а оригинал вы можете найти в блоге towardsdatascience.com.

image
Фото с сайта Unsplash. Автор: Hitesh Choudhary

Получение такого же результата на Python, как и при SQL-запросе


Часто при работе над одним проектом нам приходится переключаться между SQL и Python. При этом некоторые из нас знакомы с управлением данными в SQL-запросах, но не на Python, что мешает нашей эффективности и производительности. На самом деле, используя Pandas, можно добиться на Python такого же результата, как в SQL-запросах.

Начало работы


Нужно установить пакет Pandas, если его нет.

conda install pandas

Мы будем использовать знаменитый Датасет Титаник от Kaggle.

После установки пакета и загрузки данных нам необходимо импортировать их в наше окружение Python.

image

Для хранения данных мы будем использовать DataFrame. Управлять этой структурой данных нам помогут различные функции Pandas.

SELECT, DISTINCT, COUNT, LIMIT


Начнем с простых SQL-запросов, которые мы часто используем.

image

titanic_df["age"].unique() вернет массив уникальных значений, поэтому нам придется использовать len(), чтобы посчитать их количество.

SELECT, WHERE, OR, AND, IN (SELECT с условиями)


После первой части вы узнали, как простыми способами исследовать DataFrame. Теперь попробуем сделать это с некоторыми условиями (это оператор WHERE в SQL).

image

Если мы хотим выбрать только определенные столбцы из DataFrame, мы можем сделать это с помощью дополнительной пары квадратных скобок.

Примечание: если вы выбираете несколько столбцов, вам нужно поместить массив ["name","age"] внутри квадратных скобок.

isin() работает точно так же, как IN в SQL-запросах. Чтобы использовать NOT IN, на Python нам нужно использовать отрицание (~).

GROUP BY, ORDER BY, COUNT


GROUP BY и ORDER BY также являются популярными SQL-операторами при исследовании данных. А теперь давайте попробуем использовать их на Python.

image

Если мы хотим отсортировать только один столбец COUNT, то можем просто передать булево значение в метод sort_values. Если мы собираемся сортировать несколько столбцов, то должны передать массив булевых значений в метод sort_values.

Метод sum() выдаст суммы для каждого из столбцов в DataFrame, которые могут быть численно агрегированы. Если нам нужен только определенный столбец, то нужно указать имя столбца, используя квадратные скобки.

MIN, MAX, MEAN, MEDIAN


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

image

SQL не содержит операторов, возвращающих медианное значение, поэтому для получения медианного значения столбца с информацией о возрасте мы используем BigQuery APPROX_QUANTILES

В Pandas метод агрегации .agg() также поддерживает другие функции, например sum.

Теперь вы научились переписывать SQL-запросы на Python с помощью Pandas. Надеюсь, эта статья будет вам полезна.

Весь код можно найти в моем репозитории Github.

Спасибо за внимание!
Подробнее..

Совет дизайнеру работа в продуктовой команде

22.09.2020 14:11:12 | Автор: admin

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



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



image


Познакомься с командой


Это самый первый пункт, который нужно выполнить. Команда это ваша новая семья, люди связанные общим вектором. Атмосфера в команде может быть разная, но нужно понимать людей, с которыми теперь предстоит работать. Узнайте их сильные и слабые стороны, их компетенции, уточните, по каким вопросам и к кому можно обратиться. Звучит довольно очевидно, но вы не представляете, как часто новички приходят и знакомятся только с парой человек, с которыми чаще всего коммуницируют, остальная команда для них остается почти невидимой. А в условиях удалёнки и подавно.



Правильно работай с критикой


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



Прислушивайтесь ко мнению команды, но не забывайте, что дизайнер в команде именно вы, и финальное решение, касающееся вашей работы за вами.



Готовься к встречам


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



Работа с ожиданиями


Рассказывайте команде о том, в каком статусе находятся ваши задачи. Если у вас проблемы или вы не успеваете, сообщите об этом сразу, не стоит делать вид, что всё хорошо. Это поможет команде скорректировать roadmap или предпринять какие-то меры, а не получить нож в спину в последний момент.



Социальный капитал


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



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



Продакт vs Дизайнер


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



Для того чтобы минимизировать такие ситуации, надо понять несколько вещей:


  1. Нужно общаться со своим PO действительно много. Он руководит командой, а вы создаете условия для того, чтобы идея, стоящая за продуктом, была удобно и понятно реализована. Вы делаете одно дело, просто у вас разные роли. От того, насколько хорошо у вас выстроена коммуникация, зависит успешность продукта.
  2. У вашего PO другой mindset. Он не мыслит критериями красиво или не красиво. Его работа связана с метриками и финансированием, и всё что сложно подсчитать или что не принесёт существенной прибыли или роста метрик, его мало интересует.
  3. Самое главное: PO поможет сделать вам всё что угодно, если он сам в это поверит.


Договорённости


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



Культура общения


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



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



В комментариях вы сможете дополнить этот базовый чеклист ещё чем-то полезным.

Подробнее..

Как стать высокооплачиваемым инженером в области электроники

09.04.2021 16:11:40 | Автор: admin

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

Статья подготовлена действующим инженером-конструктором 1-й категории АО ИСС Дмитрием Савиным на основе своего проектного и руководящего опыта.

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

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

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

1. Всегда проявляйте разумную инициативу

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

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

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

2. Постарайтесь адекватно оценить уровень вашей компетенции

Кто-то себя недооценивает, кто-то напротив, считает что знает всё на свете. Чаще всего не правы и те и другие. Если вы не знаете ответ на какой-либо вопрос, всегда можно найти человека или ресурс, которые смогут вам помочь, главное не опускать руки.

И напротив, то в чём вы уверены на 100%, и что вы считаете непоколебимой истиной, в определенной ситуации может принимать иные, не известные вам формы, так как прогресс не стоит на месте, и реальность может значительно отличаться от теории.

3. Старайтесь быть универсальным

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

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

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

4. Постоянно развивайтесь

В инженерном деле всегда есть к чему стремиться и куда расти. Читайте профессиональную литературу (например Джонсон Г. Грэхэм М Конструирование высокоскоростных цифровых устройств. Начальный курс черной магии или книги по электронике за авторством Кечиева Л.Н.), отраслевые издания (напримерhttps://www.soel.ru/), проходите курсы повышения квалификации.

Не ждите когда информация дойдет до вас самотеком, ищите её сами (см. 1). Полезными источниками информации для инженера электронщика могут быть не только книги и журналы, а так же сайты (напримерhttp://personeltest.ru/aways/habr.com/) и YouTube-каналы.

5. Будьте на волне

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

Ищите людей интересующихся тем же, чем интересуетесь вы, вступайте в сообщества электронщиков (напримерhttps://t.me/Altium_and_electronics), иногда можно открыть для себя что-то абсолютно новое, или помочь кому-нибудь решить проблему, решение которой для вас уже стало очевидным.

6. Перенимайте любой полезный опыт

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

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

7. Выучите английский

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

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

Научитесь правильно использовать онлайн-словари (напримерhttps://www.multitran.com) и переводчики, и ни в коем случае не верьте в то, что они способны выдать вам правильный результат с первого раза, перепроверяйте их работу и сверяйтесь с контекстом.

8. Попробуйте создать устройство своими руками

От идеи до воплощения. Всё зависит от уровня вашей заинтересованности и подготовленности, а наши коллеги из Азии, за символическую плату доставят вам всё что угодно, от готового набора для сборки устройства, до мешка с электрорадиоизделиями. И это позволит вам почувствовать на себе, что такое программирование микроконтроллера, разводка платы, пайка компонентов.

От простых мигалок-гуделок до сложных роботизированных систем, в наше время практически любой человек при желании может попробовать сделать что-нибудь сам, да здравствует эра DIY. И помимо всего прочего это позволит вам стать чуть более развитым и универсальным (см. Советы 3 и 4).

9. Любите свою работу

Если вы искренне заинтересованы не только в том, чтобы вам стабильно повышали оклад, но еще и в том, чтобы ваши устройства работали без сбоев, а планы выполнялись своевременно, то разумеется, это не останется без внимания. Помните Hard work pays off (см. 7).

10. Не бойтесь перемен

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

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

Изначально данная статья подготовлена для порталаaltium-u.ruи публикуется с разрешения редакции.

Подробнее..

Категории

Последние комментарии

  • Имя: Макс
    24.08.2022 | 11:28
    Я разраб в IT компании, работаю на арбитражную команду. Мы работаем с приламы и сайтами, при работе замечаются постоянные баны и лаги. Пацаны посоветовали сервис по анализу исходного кода,https://app Подробнее..
  • Имя: 9055410337
    20.08.2022 | 17:41
    поможем пишите в телеграм Подробнее..
  • Имя: sabbat
    17.08.2022 | 20:42
    Охренеть.. это просто шикарная статья, феноменально круто. Большое спасибо за разбор! Надеюсь как-нибудь с тобой связаться для обсуждений чего-либо) Подробнее..
  • Имя: Мария
    09.08.2022 | 14:44
    Добрый день. Если обладаете такой информацией, то подскажите, пожалуйста, где можно найти много-много материала по Yggdrasil и его уязвимостях для написания диплома? Благодарю. Подробнее..
© 2006-2024, personeltest.ru