Professional Calisthenics

7 minute read Published: 2020-03-21

Recently I had a discussion with a colleague of mine about professional career, hard skills and how to stay in a good shape despite the environment, lack of time and “boring” working activities. This conversation was an inspiration to write down this post about my attitude and share with you some techniques that I use to train myself in a professional way. Title inspired by one of the first blog posts I’ve read as a software engineer - Object Calisthenics.

Disclaimer: You should treat all information here only as my personal experience, I made no research and just do what I do.

TL;DR - feel free to scroll down and just check list of resources.

Interviews

Let’s start from interviews - why you should attend interviews and how to prepare yourself?

Why?

I think nothing is more important as a practice. And when we talk about interviews, an interview practice may be more important than your professional experience - until AI will replace technical interviewers, the way you behave on the interview, how confident you are and many other “soft” aspects will play a leading role in estimation. I try to attend one interview as a candidate every two months and conduct minimum one interview a week as a main interviewer. It’s very effective to be not only in a candidate role, but have an opposite point of view and experience conducting interviews. Why do you need to spend your time on so many interviews?

  1. If you have no plans to change your job or even have a plan to do not change your job, you can’t be aware of your boss’s plans or another environmental effects which can turn out as a lay-off.
  2. It’s also a good self-check mechanism and a possibility to find your strength and weak aspects. You may think that you are an expert in some technology until you will meet a real expert.
  3. And of course you never know what market can give you until you ask. I know a lot of brilliant software engineers working for “free” and not a lot of just good engineers with a great salaries. Difference between them is the market knowledge.

How?

From a candidate’s perspective - I made a document with some popular interview questions and topics. The up to date version of it can be found here: +Interview Calisthenics. Almost any technical interview (SFT/QA, Dev, BA, etc.) will request you to know Algorithms & Data Structures, Databases and SQL. More specific topics will be based on top of these, even if you will never need them in your work. Some of them may be even very controversial, like OOP (my opinion on this topic can be found here). What about being in Technical Interviewer’s shoes - I will definitely write another post how to conduct TI in an effective way. To be short here - read good theory, pass certification in your company, take it serious.

Okay, after some interviews you know local market situation you need some hard skills related information about trends to know what new tools or paradigms to learn. Missed the train Many people consume this information from popular mass media resources such as habr, vc or social networks - they are late majority. They know something when it’s already popular and in a wide use. It’s good to know such information but it will not give you any value as a professional. If you an IT expert, it is okay to consume news about medicine from popular resources, but it will be strange if your therapist will heal you based on articles from men’s health. Looking forward Early adapters - they look into sources, check official sites of ambitious companies, projects or communities, their email boxes full of weekly newsletters (and they read them), so they can go to mass media and write down this information (using own words and making it more subjective then it was) in exchange for likes and retweets. Writing about something new and sharing of this information with a late majority is an important role of early adapters. For example I try to share good talks when I watched them on YouTube, nice papers that I read, etc. If you are willing to move forward from a late majority into early adapters, find your ‘Guru’ and constantly consume his or her shares and retweets - cause he or she already know where to find good information, but it’s not the same as wait until their tweets will move down and ‘mutate’ on the way to some popular resources. Several years ago Egor became my ‘Guru’ and I find a lot of good papers, terms and concepts reading his blog posts. Now I also have some ‘Gurus’ (you can check my twitter’s following), but I think I also became an early adapter. Innovators - is where I want to be next. They can produce new content, participate in RFC’s and commit to specifications drafts. They also have ‘Gurus’, but they outliers in some expert fields and really unique. What to do My attitude in looking for new trends can be described in the following steps:

  1. Wide scan. YouTube recommendations, links in chats and other “trash” need to be checked - new framework, languages or papers - if something looks interesting it moves into “watch later” on YouTube or into my Pocket. You can use your lists and applications to store this links, but be sure to sort and consume them in a FIFO order - in such a case you will not “forget” about something interesting. It is also a good motivator to clean up your queue and do not snooze some items forever - if you don’t want to read an article or watch some video, just delete it from the queue. Wide scan builds your T shape. Even if you don’t fully (or completely) understand some subjects you will know about them, familiar with buzzwords and will be able to learn more if needed.
  2. Hands on experience. Some people make a mistake after wide scan. They keep reading about some topics without trying to have hands on experience. They just waste their time, it’s really hard to become an expert without practise. So get some. I prefer to start from a “getting started” guides on official sites or repositories. You found new framework? Just complete getting started guide and you will be ready to make a decision about it for sure. Good example: many people heard about docker and kubernetes a million of times but never tried them - there is an interactive tutorial and the only thing you need to complete it is a browser. Impressed by a new language - take an hour and write some “hello, world”.
  3. Deep dive. And if you really mad about new technology, find a way to get more experience. Do not push this into your work - be a professional, imagine doctor who tests new drugs on his patients. First, create a prototype, analyze new tool, find cons and pros and add it into your toolbox. Now you are ready to use it on your work if needed. That’s how I adopted Spring Data Rest, Docker, Cucumber, Gitlab and now Rust. I try to use the same example when test competitive technologies (Rocket vs Spring vs Vert.x vs Javalin, Kotlin vs Java + Cucumber, etc.). Because every problem need a right tool and tool which is right in one situation can be invalid in another. Place all your projects in open source, make them your portfolio, write blog posts about your experience, speak about them at conferences. Doing so I do not waste my time playing with new toys, but become better as a professional.

Resources

So where I look for a new information?