TL;DR

…if you were thinking about screaming little humans, I am afraid I will disappoint you and it might be that this post is not for you.

If you are still reading, then you might be one of those people, who thought of something else what could have happened in a period of nine months. I salute you and encourage you to read on!

2020 was a special year, for the world and for me as well, on one side we had that end of the world kind of global infestation thing, on the other side I managed to make some changes, which hopefully will pay-off in the near future, dare saying some of them have already payed-off.

As of 01.06.2020 I joined the club of those unemployed, a.k.a I left the company I had been working for the last 12 years of my life and decided to take a well deserved break from that nine to five…ish lifestyle. I took that decision some time before the Coronavirus comfortably settled down to its new home…Europe, Germany.

Before you ask why I left the company after 12 years of employment, stay assured that’s a whole new story, which might become a new blog post in the near future. It suffices to say that after 12 years it kind of became clear what the future had in store for me and that that wasn’t compatible anymore with my aspirations.

At this point, you might think ok, ok, no job, but definitely, already on the search for a new one, maybe even already employed, and if unemployed then definitely registered as such at the Federal Employment Agency, a.k.a, Bundesagentur für Arbeit, right?!?. Well, no, and no!

To clarify the above a bit more, I didn’t plan to immediately continue with working for a new employer, I did want to take time off and see to my own things, more on this a bit later on. As for the gemeldet als arbeitslos and hence, I guess, benefit from money support from the state, I just wasn’t interested in that hassle. I had some savings and I was willing to use those to cover the payments I still had to make, including the health insurance, the pension insurance and other living expenses. This was and is a valid, legal way of taking time off from work, albeit a bit expensive (stuff paid by the employer, becomes your responsibility), and the employment agency doesn’t need to know about it, except for their statistics, but other than that…no earnings, no taxes, except for health and pension.

Now, on to what I meant with take time off and see to my own things, initially it was planned as a period of resetting, contemplating the future, learning new things, focus on physical exercising, getting in shape, exploring the world and just recharging with positive energy, energy others feasted on while I was employed. Well, karma had other plans for the world and such I was more or less confined to my apartment and had to rethink my new, well deserved freedom.

I am a software engineer, I have the computer science education (bachelor and master) behind me, and I have been working in the field of web development, with a focus on backend, for 1100 years ;). As such, spending time in front of the laptop and doing geeky stuff fits like a glove, reason why turning to my trustworthy laptop and start diving into all sorts of IT related subjects was as natural as it could be!

I already wrote a bit about what exactly this meant, have a look at this post, but this time I’ll go a bit further and offer some more insights.

Now, I need to mention, that I am not an expert in any of the subjects I will be mentioning below, but I am familiar with them, with some more than with others. This kind of immersion into different subjects is not an easy thing to do, and it will not make you an expert, it would be childish to say the opposite, it will broaden your knowledge though, maybe even deepen it, that’s for sure, and this kind of horizontal expansion, as opposed to a vertical one, turned out to be exactly what I needed.

One more thing before going further, we, as software engineers, as responsible software engineers, need to constantly learn and hone our engineering skills, we need to stay on top of this never-ending and always evolving field of IT, otherwise we risk becoming obsolete, which means, we risk becoming unemployed. There is another aspect here, it has to do with one’s comfort zone, and the idea of finding something that works for you, never gets obsolete, and sticking with it until you retire. That could also work, but it is definitely not my style. More on this in a future blog post.

This being said, here are some of the things I tackled and dedicated some time and attention to.

Blogging

I (re-)started with blogging at the beginning of 2020, it involved some work and getting accustomed to some new tools, but after figuring all that out, it felt, and still does, kind of natural. Because the design muses were absent at my birth, I decided to go with a default theme/look/design, that I could use with Jekyll, I bought myself a domain, connected it with GitHub and voilà…you can read my thoughts!

Btw, writing is a time-consuming process and doesn’t work all the time, if you add in the fact that I have little time for it, or would it rather be bad time management?!, one could easily understand why the blog is sort of…rarefied.

Programming languages

Aah, yes, programming languages, you know, those languages you use to tell a computer what to do…there are plenty of them out there, and it is my intention to learn them all…just kidding, ain’t going to do that, although it surely sounds appealing.

I personally started with Pascal, this was in high school, then continued with C, C++ and C++ - - a.k.a. Java, at the university. There were some other languages along the way, but in the end Java stuck to me and remained one of my go-to languages when I wanted to make my computer do something for me…, and it also pays the bills, so yay Java.

Other than that, my appetite for other languages kind of grew bigger, and such I learned some Python, gave JavaScript another chance, started with Kotlin (I am using it at my current job), learned some Julia…and was getting very confused when I was switching between the languages.

Remember my go-to language, well, learned some more of it too, and got two certifications. This 25+ years old language is still in top 5 in the TIOBE Programming Community index and its two releases per year cadence makes things a bit more challenging to keep up with it…, but you know, bills are kind of important… :)

The art of writing code

You know how they say, we write code for humans not for computers. While this is true, not many of us, those bestowed with understanding computer programs, really get the gist of it, in the end that code is intended to be understood by computers, rather than by humans…which complicates things for other…wait for it…humans!

Writing code in that way that you can say it is for humans is not necessarily an easy task to do, most of the time you get the algorithm working, it does what it is supposed to do, or at least it looks like it, and the next second you might think your job is done. NO! Your job is not done! Not by far, now you should make sure that the code is also written for your fellow programmers, colleagues or not.

There are all sorts of resources out there that can teach you how to properly write code, and I do not mean the syntax and how idiomatic your code is, while those are important aspects, obviously, there is more to writing code, than we might want to admit. It has to read like a poem, they say, it has to be a pleasure to work with. So stop doing the following, and you will be way ahead of others:

  • mutilate names
  • use way too generic names for your functions and variables
  • cram in lots of functionality into a class or method
  • over-engineer code to the point the functionality you were implementing is not recognizable anymore
  • being ignorant to the surroundings of where you are touching some code a.k.a leave the campground cleaner than you found it

Start with the above, and your fellow programmers will thank you.

Competitive programming

Another thing I had no idea it existed, is competitive programming, I remember watching a YouTube video of some guy solving problems and writing code faster than I can write normal English text. I cannot recall anymore how I got there, but I know I liked it and something in my mind was keep bugging me to learn more about it, and so I did.

The thing is, that you cannot just start solving complex algorithmic problems, it requires months, maybe years of practice, and some serious algorithmic muscles.

All hyped as I was, I started looking around, googling about this thing, watching videos of others solving problems and took quite a serious interest into algorithms and data structures… you kind of need them to be able to solve problems efficiently. There are lots of resources out there, one just needs the time, and the willingness to go through them.

Challenging yourself is a good thing, sometimes you will feel really smart, sometimes really dumb…just saying. Below are some online platforms where you can train/compete, and even make some money:

Algorithms and data structures

You may like it, or you may hate it, but you need them! Any self-respecting software engineer should know some basics algorithms and data structures and should be prepared to look them up either online or in some CS textbook. Internet has no shortage of information on them and people have created entire businesses around them, plus if you want to work at one of the FAANG(Facebook, Amazon, Apple, Netflix, Google) companies you definitely need to be comfortable solving algorithmic problems.

Truth be told, if you do HTML and CSS you most likely do not need them, but as soon as you start writing code, you have to deal with algorithms, maybe not with the complicated ones, but definitely with some common ones. In the end it depends on what you are doing as a software engineer.

Here the Internet is again full of resources, some of the most notable ones being:

Getting comfortable with the command line

The cool kids use the command line not the graphical user interface! Now you know!

If you are still reading, know that getting comfortable with the command line is not an easy thing. It has a lot of benefits and will make you look like a God, but it is not an easy thing to really master it.

Considering the learning curve, sometimes it might be better to just use the God damn mouse and click your way through all that. You will be doing it to the detriment of losing some popularity points, though.

In my attempt to master the command line, I renounced at Windows, installed a fresh copy of Ubuntu and started…clicking my way through it, I am kidding, diligently typing in commands and hopping for the best. You should give it a try too!

Software design and architecture

As software developers we still get the chance to write code, if you are lucky enough and are not stuck in some meetings, that never seem to end. At some point in your career you may want to level up and start thinking about how to design and architect an application, or the code you are writing. There are good reasons to do that, I mean projects have failed because of bad architectures and designs, or at least swallowed way too much money than they should have.

Again, the Internet is full of resources about this subject, one of those is this Coursera specialization.

I am strong believer of continuous improvement, as a professional, and as well as a human being. Online courses are, now more than never, in a boom, some are for free, some require some small payment, some cost quite a lot of money, but all of them can teach you something if you are willing to learn. So, learn! Invest in yourself!

Creating a portfolio / side projects

In Romanian there is this saying, teoria ca teoria, dar practica ne omoară, which more or less translates to theory is one thing, practice another. Of course, you have to read, to inform yourself, to see what others think about something, but you also have to try things out, apply what you learned, build something.

Side projects are a good think, you get to build something, to apply what you learned, and you will eventually end up with a portfolio you can show off, but all of this requires time and effort. It is kind of a double-edged sword.

When looking for a new job, it is quite common to see that they are requiring from you to show them your portfolio, your GitHub account or similar. While this is fine, they should also understand that not having one, doesn’t mean you are not capable of developing applications, writing code or solving problems, or that you are not interested into programming. Each and every one of us has their life, their time, and not having a GH profile doesn’t make you any less capable or prepared to handle stuff.

I personally have a bunch of projects on GH, of all sorts, some bigger, some smaller, some I would show off, some not. It is rather a place to save the stuff I am working on, than something to show off. So, practice, build something, but do not obsess over it, live your life too, you only have one!

Frameworks and the like for developing web applications

I have been in the field of developing web applications from the very beginning of my career life, in all sorts of capacities, so web application development is the field I know most, as opposed to, I don’t know, compilers, desktop applications, machine learning and such.

I am mostly interested into Spring Framework and its plethora of projects, but as life has it, you do not always get to work with what you are interested into, I guess this depends entirely on you. Other than targeting the JVM environment, I worked with NodeJs and its ecosystem, mostly in my side projects or while going through some course or class or workshop. You can build some serious stuff with it, but I’d rather prefer using Spring and remain in the JVM ecosystem - Java, Kotlin.

There are lots of other frameworks other than these two, it kind of depends on the main programming language you are using. Choose one or two and build something, get better at it and be curious…and patient…and resilient…frameworks and such tend to spring up like mushrooms after the rain.

Cloud

Yes, the Cloud, that thing which makes everybody’s life easier, which looks cool on your CV, and promises lots of money. While that might be true, do not forget, it’s more a case of passing on responsibilities to someone else, there are still some physical boxes stacked somewhere, as they say, it’s just someone else’s computer.

Cloud and cloud computing is not something of recent times, the idea kind of started around 1960-1970, with the mainframes, they didn’t call it cloud back then, but it was, in its core, kind of similar to todays interpretation of the word. Cloud computing in its modern context occurred in 2006, check this link for more on this.

Though I have heard about cloud, I didn’t actually use it, up until like 3-4 years ago, when I became more aware of what Amazon is offering and what other competitors are pushing forward.

Fast-forward to last year, I started with an Udacity program, to learn more about what it means to be a cloud developer, and learn more about this piece of technology. I also have in plan to get some official recognition in this field, but firstly I need more knowledge and experience.

Machine learning

Machine learning, the cherry on the cake, the thing which could change our lives for better. Looking at the whole Artificial Intelligence domain, this ML subfield, draws a lot of attention and turns a lot of heads.

When it comes to AI, some say it is the future of humanity some that it is its doom. Believe what you want, this field is, in my opinion, GOD DAMN AWESOME!

I had my first encounter with AI while I was studying CS at the university, I did my master in Informatics with a focus on artificial intelligence and distributed computing, but that was pretty much it. I haven’t actually applied it in real life, and have kind of lost contact with it.

Last year, 2020, the year of damnation, I took an interest into AI field in general and ML in particular. I had some time on my hands, so I decided to look more closely at it. OMG! I freaking love it! Sadly, it’s not something to finish in a couple of days or weeks, it’s a huge field in itself with educational programs and literature to consume and it is continuously evolving.

As always, there are tons of information out there, Universities have made public parts of their resources, courses, classes, programs and the like. I am particularly intrigued by MIT and Stanford, which offer some cool programs to start with, or dive even deeper into this field. Coursera has a bunch of courses and specializations on this too, and new programming languages emerge, promising better and faster implementation support for all those AI algorithms. Of course, the dominant language remains Python, but others are quite promising too.

Unfortunately, this field remains more of a hobby for me, than anything else. If I started with it, I’d have to start from the very beginning. Maybe, I will be one of those web application developers turned into ML engineers…time will tell!

Final words

As you can see there was/is a lot going on, and as I said earlier, this didn’t make me an expert in any of those fields, but it did broaden my knowledge and offered me some new views and takes on the complexity and beauty of software engineering.

Around the end of 2020 I started thinking about finding a new job, a remote one, not necessarily because of the Coronavirus, but rather because of the advantages and learning experiences it brings with. Finding a job is not an easy task, of course it’s an experience more or less unique to every person, but it is definitely not a walk in the park. I might put together a new post detailing this experience too.

Fast-forward, 01.03.2021, new job, new position, and a feeling of accomplishment to accompany me for the foreseeable future.

That’s it, folks!

Stay safe and healthy and never stop learning!

Vlad