• 0.00

  • +0.49

Профессиональное выгорание. Как устоять?

Приветствую вас, дорогие друзья!

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

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

Для того, чтобы стать Java разработчиком необходимо ОЧЕНЬ много эмоционально-энергических и личностных ресурсов. Т.к. необходимо знать и понимать огромное количество фреймворков, инструментов, библиотек и т.д. И со временем это количество растет. И самое сложное в начале, когда нужно освоить какое-то базовое их количество.
И стоит вопрос в том, что сделать, чтобы еще на эпате обучения не «сгореть»?.. Я в свое время тоже задумался над этим вопросом, но у меня были некоторые знания о том, что такое колесо жизни.

Колесо Баланса Жизни

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

Занимайтесь спортом!
Спорт дает нам силы, которые нужны для жизни. Спорт питает нас тему ресурсами, которые нужно чтобы не выгореть как специалисту. Спорт делает нас здоровыми и не восприимчевыми к болезням.
  • Я, к примеру, хожу в тренажерный зал 3-5 раз в неделю. Причем каждая тренировка начинается с пробежки на беговой дорожке и заканчивается им. Придерживаюсь того, что делаю много подходов и много повторений. Я считаю, что это лучшее решение для такой профессии как наша.
  • Купил себе фитнес трекер для счета того, сколько в день хожу. Это тоже очень важно при нашем сидячем образе жизни. У меня стоит норма 10 000 шагов это примерно 8км.
  • У меня есть велосипед и я им пользуюсь. Любительски. По городу езжу.

Настольные игры
Я в свою очерень очень люблю играть в настольные игры! Это было для меня открытием, пару лет назад я попробовал. Начинали мы с игры «Монополия», но ее оказалось мало и то, что она зависима сильно от кубика тянула нас дальше и потом мы сыграли в настолькую игру «Колонизаторы», которая тоже была с кубиком, но она более интересная как стратегия. Причем именно в Колонизаторов мы играем постоянно, прелесть ее в том, что карта не статическая и всегда раскладывается рандомно и каждый раз все по разному.
В погоне за сложностью мы начали играть в топовые игры, такие как «Игра престолов» и «Цивилизация», в которых только вдумчивое чтение и разъяснение правил идет не менее 2-3 часов. Но оно стоит того.

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

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

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


Ставте цели
Ни один успешный человек не обходится без целеполагания. В данный момент я говорю именно о тех людях, которые всего добились сами, в не получили в наследство. Именно те, которых трудом и потом добивались всего в своей жизни. Есть прекрастная, проверенная методика — целеполагание по SMART
Отдых — это смена деятельности
Так просто и так важно. Чтобы были силы для развития, необходимо развиваться разномерно. В этой статье я привел те вещи, которые делаю Я. Для вас они могут быть другими, совсем другими. Но принцип один — помимо работы, развития себя как специалиста необходимо учитывать и другие роли.

И еще немного

Есть еще одна мысль. Будут люди, которым она не понравится и это нормально.
Если вы хотите добиться еще больше и перейти на более новый уровень — откажитесь от употребления алкоголя и сигарет и других веществ, которые дают фальшивое удовольствие! Абсолютно, как говорится «не капли в рот».
Кто касается меня, то я уже 1.5 года аюсолютно не употребляю алкоголь. Как раз в тот момент, когда решил учить Java. И за это время я добился ОЧЕНЬ многого. И цели на дальнейшее СООТВЕТСТВЕННЫЕ.

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

Если вам понравилась статья — ставьте "+". берегите себя и свою жизнь, мечтайте, добивайтесь целей, влюбляйтесь и живите так, чтобы не «сгореть».

См. также мои другие статьи:
Тестовое задание: «Написать Интерпретатор на язык BrainFuck»
Тестовое задание «Image Comparison»
Java — быстрее, сильнее и выше! Зарплаты украинских программистов.
История успеха спустя 1.5 года от начала обучения
Технические вопросы на собеседовании.
Как найти работу? Рассылка резюме
Профессиональное выгорание. Как устоять?
Английский для IT и для собеседования
Паттерн Command своими словами.
Паттерн Singleton своими словами.
Как создать исполняемый jar в Intellij IDEA / how to create jar in IDEA
Помогите, нужна мотивация!

Подписывайтесь на мой блог Паттерны Проектирования пишите в нем статьи!

Английский для IT и для собеседования.

Приветсвтую Вас, дамы и господа! =)


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

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

Реальность такая, что во многих компаниях собеседование проходит в три этапа:

  • Общение с HR. На этом этапе рассказывают про компанию, какие они классные, чем они занимаются и т.д. и попутно смотрят насколько адекватен, собеседник. Если он неадыкват, то дальше никакого общения не будет.
  • Собеседование на английском… Вот здесь как раз будут смотреть, насколько честно вы признались в резюме, какой у вас уровень. И реально, если вы будете молчать и ничего не отвечать, то на этом этапе собеседование для вас закончится… Здесь будет общение не на тему программирования, а так просто в вольной теме или зачастую «Tell me about yourself».
  • Если вы успешно прошли первые два этапа — поздравляю, вы сможете поговорить с техническим специалистом на тему вашей профессиональной граммотности.


Исходя из этого списка, я хочу рассказать о том, как я это делал, какие выводы и примеры.
На своей первое собеседование я шел и про тему английского как-то не подумал… цитата из моей статьи:
Поговорив с HR-ром, ко мне позвали преподавателя по английскому, с которым я «пообщался». К этому моменту я вовсе был не готов и вышло, что я больше слушал, чем говорил. И на тему расскажи о себе, я что-то промямлил, но ничего особенного.
И после этого я вынес важный урок, что к английскому нужно готовиться также чательно, как и к техническим вопросам.
Реально за короткий срок грамматику всю не повторишь и не изучишь, а вот сделать небольшую шпаргалку для себя — это можно. Пусть она будет состоять из простых предложений, пусть она будет не доскональной, но она Будет! и вам будет что сказать.

С такими мыслями я составил свой первый рассказ, который понятно я выучил, может не дословно, но приближенно к тексту:
Hello. my name is roman. I AM studiNG AT SomeUniversity. I have HAD an experiance in android development. Ive been working with freelansers team since January. I have strong communication skills and I am fast learning person.
I have many hobbies, for example i play guitar and love camping.
My grandfather father and I are bee-keepers. Really. I am not afraid when bees are stinging me. I know what need to do if you want to get some honey from bee-hive.
I like sport, thats why i go to the gym EVERY OTHER DAY day. I lIKE this.
Also i do not drink alkohol and smoke the cigarretes.
Небольшой, но уже какой-то. Там где выделено большими буквами — это мне редактировала моя жена, которая читала это. У нее с английским получше, чем у меня.

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

И вот я плавно подошел к тому, что готовился пару дней назад. За это время я несколько поднатаскался с английским(как я считаю) и получил вот такой шаблончик:
Hello!
My name is Roman. I live in SomeCity. I’m working as Java developer in IT company.
On this job, I’m developing microservices structure. For dependency injection, I’m using Guice(pronounced as juice). It’s lightweight framework from Google. Also, we’re using Jersey. As build tools, we are using Gradle. Gradle it’s the most powerful of all those tools. Because it has life circle as Maven and it has tasks as Ant. And all of this you can combine as you want on Groovy. it’s mean that you do all thing in groovy script. Also, I’m making different tests. I’m using JUnit 4, Mockito and JMeter. For database we use MongoDB where we store metadata for our application.

I love sports, that’s why 3 times per week I go to the gym. Also, I like to play volleyball, badminton and sometimes I can go to play soccer with my old friends, but it doesn’t mean that I’m good in it.
Also, I have many hobbies, for example, I play the guitar. Every summer I go to the forest near Chuguev on the Severskiy Donec beach. It’s place called “Figurovka”. Every night we seat around the bonfire and sing songs while I play the guitar. It’s about the night, as for day we usually play volleyball and badminton.
you know badminton is more difficult than volleyball because while you play volleyball you can rest instead of badminton when you need to move all the time if you want to win. When I speak about badminton I mean professional badminton when you have badminton court and rules.

Next, it is a hobby and a family business. My father and I are beekeepers. We know how to get honey :D.
we have about 40 colonies of bees. It’s normal for us. I love it because working with bees it’s very healthy for the body. They are very smart. of course, we sell honey. Bees produce many commodities. For example honey, beeswax, pollen, propolis and else. Also, we produce Medovucha. It’s lightweight alcohol beverage, which does not contain ethanol.
Also, we provide pollination services.

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

Английский для IT
И конечно хочу добавить несколько слов из своего опыта про то, как развивать свой английский в IT.
Это только лично мое мнение и оно никоим образом не претендует быть правдой в последней инстанции, но если кто-то вынесет для себя что-то интересное — я буду только рад.

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

Да, именно так, сейчас я читаю книгу «The Linux CommandLine» на английском и завел себе тетрадь, в которую вписываю неизвестные мне слова, которые они используют. И это реально работает, это помогает мне.

Вконце хочу пожелать всем Джаварашевцам удачи в прокачке своих скилов, успешном поиске работы и intermediate английского!

Всем, кому понравилась статья, ставте "+", пишите в комментариях, давайте вести диалог.

См. также мои другие статьи:
Тестовое задание: «Написать Интерпретатор на язык BrainFuck»
Тестовое задание «Image Comparison»
Java — быстрее, сильнее и выше! Зарплаты украинских программистов.
История успеха спустя 1.5 года от начала обучения
Технические вопросы на собеседовании.
Как найти работу? Рассылка резюме
Профессиональное выгорание. Как устоять?
Английский для IT и для собеседования
Паттерн Command своими словами.
Паттерн Singleton своими словами.
Как создать исполняемый jar в Intellij IDEA / how to create jar in IDEA
Помогите, нужна мотивация!

Подписывайтесь на мой блог Паттерны Проектирования пишите в нем статьи!
  • ,

Регулярные выражения в Java. Часть 2

Продолжаем изучение регулярных выражений и java.util.regex API, предыдущий урок — Регулярные выражения в Java. Часть 1.

Символьные классы


Символьные классы — это набор символов, заключенных в квадратные скобки.



Простые классы


Самая простая форма символьных классов — перечисление символов в квадратных скобках. Например, регулярное выражение [bcr]at соответствует словам «bat», «cat», или «rat», потому что оно определяет класс, принимающий буквы «b», «c», или «r» в качестве первого символа.

Запустите программу, приведенную в первом уроке, и протестируйте с этим регулярным выражением:



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

Отрицание


Для нахождения символов исключая перечисленные, используйте метасимвол «^» в начале символьного класса. Такая техника называется отрицанием.



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

Диапазоны символов


Иногда необходимо определить символьный класс, который содержит диапазон значений «от а до я» или цифры от 1 до 5. Для задания диапазонов используется метасимвол «-» между символами, например [1-5] или [a-h]. Вы также можете использовать разные диапазоны в одном символьном классе, например для [a-zA-Z] подойдут строки, содержащие буквы алфавита, независимо от регистра: a — z (прописные) или A — Z (заглавные).

Несколько примеров отрицаний и диапазонов:



Объединения


В также можете использовать объединения для создания символьного класса, который объединяет два или более разных символьных класса. Для создания объединения, просто заключите один внутри другого: [0-4[6-8]]. Данное объединение создает единый символьный класс, для которого подходят числа 0, 1, 2, 3, 4, 6, 7, и 8.



Пересечения


Для создания единого символьного класса, который определяет все вложенные в него, используйте &&, например: [0-9&&[345]]. Это выражение определяет строки, подходящие обоим вложенным классам, т.е. цифры 3, 4 и 5.



Вычитание


Наконец, вы можете использовать вычитания для отрицания одного или нескольких символьных класса, например: [0-9&&[^345]]. Этот пример создает класс, подходящий цифрам от 0 до 9, исключая числа 3, 4 и 5.



Следующая статья: Основы регулярных выражений в Java. Часть 3.

Ссылка на первоисточник: http://easy-code.ru/lesson/java-regular-expressions-part2
  • ,

Перегрузка методов equals() и hashCode() в Java

Переопределение методов equals() и hashCode() в Java
Equals и hashCode являются фундаментальными методами объявленные в классе Object и содержатся в стандартных библиотеках Java. Метод еquals() используется для сравнения объектов, а hashCode — для генерации целочисленного кода объекта. Эти методы широко используются в стандартных библиотеках Java при вставке и извлечению объектов в HashMap. Метод equal также используется для обеспечения хранения только уникальных объектов в HashSet и других Set реализациях, а также в любых других случаях, когда нужно сравнивать объекты. Реализация по умолчанию метода equals() в классе java.lang.Object сравнивает ссылки на адреса в памяти, которые хранят переменные, и возвращает true только в том случае, если адреса совпадают, другими словами переменные ссылаются на один и тот же объект. Java рекомендует переопределять методы equals() и hashCode(), если предполагается, что сравнение должно осуществляться в соответсвии с естественной логикой или бизнес-логикой. Многие классы в стандартных библиотеках Java переопределяет их, например в классе String переопределяется equals таким образом, что возвращается true, если содержимое двух сравниваемых объектов одинаковое. В классе-обертке Integer метод equal переопределяется для выполнения численного сравнения, и так далее.
Так как HashMap и HashTable в Java полагаются на методы equals() и hashCode() для сравнения своих key и values, то Java предлагает следующие правила для переопределения этих методов:

1) Рефлексивность: Объект должен равняться себе самому.
2) Симметричность: если a.equals(b) возвращает true, то b.equals(a) должен тоже вернуть true.
3) Транзитивность: если a.equals(b) возвращает true и b.equals© тоже возвращает true, то c.equals© тоже должен возвращать true.
4) Согласованность: повторный вызов метода equals() должен возвращать одно и тоже значение до тех пор, пока какое-либо значение свойств объекта не будет изменено. То есть, если два объекта равны в Java, то они будут равны пока их свойства остаются неизменными.
5) Сравнение null: объект должны быть проверен на null. Если объект равен null, то метод должен вернуть false, а не NullPointerException. Например, a.equals(null) должен вернуть false.

Соглашение между equals и hashCode в Java.
1) Если объекты равны по результатам выполнения метода equals, тогда их hashcode должны быть одинаковыми.
2) Если объекты не равны по результатам выполнения метода equals, тогда их hashcode могут быть как одинаковыми, так и разными. Однако для повышения производительности, лучше, чтобы разные объекты возвращали разные коды.

Как переопределять метод equals в Java
@Override
    public boolean equals(Object obj) {

1) Проверьте
if (obj == this) {
и верните     return true;
		 }

2)Проверьте объект на null, а также проверьте, чтобы объекты были одного типа. Не делайте проверку с помощью instanceof так как такая проверка будет возвращать true для подклассов и будет работать правильно только в случае если ваш класс объявлен как immutable. Вместо этого можно использовать getClass();
if (obj == null || obj.getClass() != this.getClass()) { 
			return false; 
		}


3) Объявите переменную типа, который вы сравниваете, и приведите obj к этому типу. Потом сравнивайте каждый атрибут типа начиная с численных атрибутов (если имеются) потому что численные атрибуты проверяются быстрей. Сравнивайте атрибуты с помощью операторов И и ИЛИ (так называемые short-circuit logical operators) для объединения проверок с другими атрибутами.
Person guest = (Person) obj; 
		return id == guest.id && (firstName == guest.firstName || 
			(firstName != null && firstName.equals(guest.getFirstName()))) 
				&& (lastName == guest.lastName || (lastName != null && 						lastName .equals(guest.getLastName()))); 
                      }


Полный пример переопределения метода equals в Java
/** * Person class with equals and hashcode implementation in Java * @author Javin Paul */ 
public class Person { 
	private int id; 
	private String firstName; 
	private String lastName; 

	public int getId() { return id; } 
	public void setId(int id) { this.id = id;} 
	
	public String getFirstName() { return firstName; } 
	public void setFirstName(String firstName) { this.firstName = firstName; } 	
	public String getLastName() { return lastName; } 
	public void setLastName(String lastName) { this.lastName = lastName; } 		
	@Override 
	public boolean equals(Object obj) { 
	if (obj == this) { 
		return true; 
	} 
	if (obj == null || obj.getClass() != this.getClass()) { 
		return false; 
	} 

	Person guest = (Person) obj; 
	return id == guest.id 
		&& (firstName == guest.firstName 
			|| (firstName != null &&firstName.equals(guest.getFirstName()))) 		&& (lastName == guest.lastName 
			|| (lastName != null && lastName .equals(guest.getLastName())
			)); 
	} 
	@Override 
	public int hashCode() { 
	final int prime = 31; 
	int result = 1; 
	result = prime * result + ((firstName == null) ? 0 : firstName.hashCode()); 			result = prime * result + id; result = prime * result + 
		((lastName == null) ? 0 : lastName.hashCode()); return result; 
	}
 }


Распространенные ошибки при переопределении equals в Java

1) Вместо того, чтобы переопределять метод equals (Override) программист перегружает его (Overload). Синтаксис метода equals() в классе Object определен как public boolean equals(Object obj), но многие программисты ненароком перегружают метод: public boolean equals(Person obj) — вместо Object в качестве аргумента используют имя своего класса (напр. Person). Эту ошибку сложно обнаружить из-за static binding. Таким образом, если вы вызовите этот метод для объекта своего класса, то метод не просто скомпелируется, а даже сделает это корректно. Однако, если вы положите ваш объект в коллекцию, например ArrayList и вызовите метод contains(), работа которого основана на методе equals(), то метод contains не сможет обнаружить ваш объект.

2) При переопределении метода equals() не проверять на null переменные, что в конечном итоге заканчивается NullPointerException при вызове equals(). Ниже представлен корректный код.
firstname == guest.firstname || (firstname != null &&
firstname.equals(guest.firstname));

3) Третья распространенная ошибка это не переопределять метод hashCode(), а только equals(). Вы обязаны переопределять оба метода equals() и hashCode() в Java. Метод hashCode используется в hash-коллекциях(например HashSet), и чем меньше будет коллизий (одинаковый код при разных объектах) тем эффективнее эти коллекции будут работать с объектами вашего класса.

4) Последняя распространенная ошибка программистов в том, что при переопределении метода equals() не сохраняется соответствие между методами equals() и compareTo(), что является неформальным требованием для избежания хранения дубликатов в Set (SortedSet, TreeSet).

Подсказки как писать в Java метод equals
1) Большинство IDE такие как NetBeans, Eclipse и IntelliJ IDEA обеспечивают поддержку генерации методов equals() и hashCode(). В Eclipse нажмите правую кнопку -> source -> generate equals() и hashCode().

2) Если в классе есть уникальный бизнес-ключ, то будет достаточно сделать проверку только на равенство этих полей. Как в нашем примере “id” — уникальный номер для каждого Person.

3) При переопределении hashCode() в Java удостоверьтесь в использовании всех полей, что были использованы в методе equals().

4) String и классы-оболочки такие как Integer, Float и Double переопределяют метод equals(), но StringBuffer не переопределяет.

5) При любой возможности делайте поля immutable используя final переменные в Java.

6) При сравнении String объектов используйте equals() вместо оператора ==.

7) Два объекта которые логически равны, но загружены из разных ClassLoader не могут быть равными. Помните, что проверка с помощью getClass() вернет false если класс-загрузчик разный.

8) Используйте @Override аннотацию также для метода hashCode, так как это предупреждает неуловимые ошибки, например возвращаемое значение метода int, однако некоторые программисты возвращают long.

P.S. Уважаемые коллеги! Мне оказалась полезной эта статья при решении задач 21 го уровня! Желаю удачи при разборе данной темы, пользуйтесь переводом!
Я надеюсь, что вы мне поможете поднять мой рейтинг, так как сейчас я даже не могу оставлять комментарий на этом форуме. Всем огромное спасибо!
Оригинал статьи javarevisited.blogspot.co.il/2011/02/how-to-write-equals-method-in-java.html
я некоторые моменты опустил в связи с нехваткой свободного времени, однако перевел все, что необходимо знать для решения задач 21о уровня.
  • ,

10 заметок о модификаторе Static в Java

Модификатор static в Java напрямую связан с классом, если поле статично, значит оно принадлежит классу, если метод статичный, аналогично — он принадлежит классу. Исходя из этого, можно обращаться к статическому методу или полю используя имя класса. Например, если поле count статично в классе Counter, значит, вы можете обратиться к переменной запросом вида: Counter.count. Конечно, следует учитывать модификаторы доступа.

Преобразование ссылочных типов, или спящий волк на клавиатуре

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