post-thumbnail

Software engineers are in demand for several years already. That lead to a rapid increase in the number of companies offering courses in software development. You can even find self-help books that will tell you how to start your career in IT.

Unfortunately, a 3 months course cannot replace proper education and experience. On top of that course in software development is a pivot in career life for many of the participants. I’ve seen cooks, pharmacists, real estate graduates and other, who decided to make this pivotal change either looking for a big change in life change or hoping for better-paid jobs.

These enthusiastic people, often very bright and with high potential, enter the market where companies are reluctant to hire juniors. And it will take years to these software development neophytes to become senior members of the engineering community.

So what advise could I give to these brave people, being 12 years sla… software developer?

Learning never ends

The course you have finished gave you some basics. What you have seen is unfortunately just the tip of the iceberg. Even if some of the companies do their best to simulate the project life as close as possible, it is still far from reality.

In software development, there is one thing that you can be sure of. Change. Tools and solutions change all the time. That means you will have to learn all the time. If you stop learning, you are in fact going to lag behind.

Therefore remember to sharpen your skills. Below you can find a few bits of advice on how to get better at what you are passionate about.

Follow shu-ha-ri stages of learning

There is a concept in Japanese martial art called Shuhari which describes the stages of learning to mastery.

Shuhari Etymology according to Wikipedia

Shuhari roughly translates to “to keep, to fall, to break away”.

shu (守) “protect”, “obey”—traditional wisdom—learning fundamentals, techniques, heuristics, proverbs

ha (破) “detach”, “digress”—breaking with tradition—detachment from the illusions of self

ri (離) “leave”, “separate”—transcendence—there are no techniques or proverbs, all moves are natural, becoming one with spirit alone without clinging to forms; transcending the physical

photo by Thao Le Hoang on Unsplash

How does it translate to software development? First, mimic your more experienced colleagues. They have been for years doing what you are just learning. Don’t question the validity of their solutions yet. Ask questions to understand the reasoning behind the choice of implementation, framework or library.

Be cautious though to not fall into the trap of following rules for the sake that “things have always been like that here”. As a new member of the group, you bring your fresh perspective of an outsider. It may be one of the most valuable inputs you will bring in the beginning.

Once past that you are ready for independence. You start making your own conscious choices of implementations, frameworks or libraries. You are less the person who always asks questions, more a person who simply solve problems.

Then you become the person who answers the questions, solves the most complex problems. Somebody who other less experienced developers look up to.

Finally, you are ready to break rules and create new ones. A stage of the real masters like Martin Fowler, Robert C. Martin or Kent C. Beck.

Practice through code katas

Software developers seems to love martial art terms, as concept of kata is another borrowed from Japanese martial art schools.

Kata according to Wikipedia

Kata, a Japanese word, meaning literally: “form” ( or ), is a detailed choreographed pattern of movements made to be practiced alone, but are also practiced within groups and in unison when training. It is practiced as a way to memorize and perfect the movement being executed.

photo by Thao Le Hoang on Unsplash

In software development, a code kata is an exercise in programming which helps programmers hone their skills through practice and repetition. If you google for code kata you will probably find many resources over the internet with examples of the exercises you could perform.

One of the quite popular platforms for practising code katas is CodeWars. Not only it gives you challenges but also verifies your solution automatically. There is also an element of gamification, where you can compete with your teammates for the best score.

What I like most though about this platform is that once you submit your solution you can see and vote on solutions others have provided. That is usually the moment when I facepalm discovering a much simpler and elegant solution to a problem posed.

Learn and look for patterns

While code catas are great for practising algorithms for solving elements of the problem, the full application code is not just a simple sum of its parts.

An application is a composition of smaller parts, each solving separate problem. And these compositions are often similar between applications. These similarities are often described as patterns. Whatever problem you are facing, there are high chances somebody defined a pattern solving this problem.

One of the best resources on patterns is website managed by Martin Fowler. This guy did a huge thing with his website. I recommend you frequent it often.

Step out of your comfort zone

I was once into writing fiction and one of the most interesting sources of the knowledge were writing lessons from Orson Scott Card.

In one of these lessons, O. S. Card encourages his pupils to go out of the genre and form they typically write in. To try something different. If you write historical fiction try drama or poem. You may wonder why? The answer is – to get a better understanding of both forms, the one you are familiar with and the one you tried. It may happen that once you try drama, dialogues in your fiction will become more natural, or that your metaphors will start coming easier once you practice some poetry.

Same goes in my experience for software development. For a long time, I was a PHP backend developer. Backends in PHP are usually synchronous, request-response based APIs or server-side rendered websites. When I had the opportunity to do mobile development in Swift for iOS a world of asynchronous operations, reactive flows, declarative and functional programming opened to me. I had to discover new architectural patterns like MVVM, MVP or VIPER.

That meant that I had to shift my paradigms. In the end, my point of view on how to develop code has changed. I have embraced functional programming and used it together with object-oriented design. I had to learn thinking in terms of streams of data instead of instantly served responses.

My next stop was node.js backend development, where the two of the worlds partially meet. This way I was able to use both past experiences and increase my capabilities of delivering working software.

Conclusion

If you have picked a path of software developer you will never be allowed to stop learning. You will have to embrace the change without fear. Do it and your life will be more enjoyable. Like in this old joke.

A pedestrian on 57th Street sees a musician getting out of a cab and asks, “How do you get to Carnegie Hall?” Without pause, the artist replies wearily, “Practice.”

Although software development is a creative work, there are patterns, algorithms, optimal code use cases that learned can make you progress faster and make your daily life easier.

If you have any questions, other advises, do not hesitate to let us know in the comments below. We are happy to learn from your experience.

Lucjan Wilczewski

Featured photo by Jason Briscoe on Unsplash