Three Perspectives of Learning Software Development

Pavel Yeliseev
devtrails.io
Published in
5 min readOct 15, 2018
“trail signage selective focus photography” by Camille Couvez on Unsplash

They say that doctors need to learn all their life. With great respect to doctors, I believe that this statement extends to software developers as well. The ever-increasing demand for complex software is continuously driving innovation and with every day we see new tools, platforms, and practices appearing to address the new challenges. As a software developer, I have to spend a considerable amount of time on research and development that will allow me to stay up to date today and remain competitive on the market tomorrow.

A good example of this is JavaScript, an ecosystem that has produced a staggering amount of new projects in recent years. We’ve seen the rise of different frameworks that made creating new applications much easier, adoption on new platforms, from backend to mobile and desktop, a plethora of new tools and libraries and a rapidly growing developer community. For some people keeping up with the constantly shifting landscape proved to be challenging, giving birth to the term “JavaScript fatigue”. Especially for beginners.

I’m personally familiar with the uncomfortable feeling of starting learning something new and not knowing where to begin. You start with the basics and often you soon find yourself with more questions than answers. Occasionally, you stop and ask yourself if you are heading in the right direction, trying to figure out your next move. Here are several personal stories I would like to share to help illustrate my point.

The Rise of JavaScript

It was around year 2012–2013. I was then mostly doing web development on PHP sprinkled on top with some jQuery-driven JavaScript. I was pretty comfortable in that area, however, I realized that frontend development has gone a long long way ahead. This was the time when AngularJS was dominating as the UI framework, and tools like Grunt, Gulp and Bower became increasingly popular. I had some good JavaScript fundamentals from the early days but honestly, this only helped me so far. The real challenge was figuring out how to write complex SPAs. There was a dozen of questions that needed to be answered like:

  • Which framework to choose?
  • Do I need a CSS processor or a templating engine?
  • Which build tool to use?
  • What the hell is bower?
  • JS is messy, should I use CoffeeScript or TypeScript?
  • Is testing JavaScript even a thing?

Gradually continuing with learning Node.js only multiplied my concerns. Books and online courses where helpful, but they where often outdated and I had to look for information in blogs and GitHub projects. These where up to date, however, the information there was scattered and it was difficult to get a wholistic view of the landscape and understand the role of each tool in it.

It was a period of intense learning and with some time, effort, and a some exploratory projects, I was able to reach a point where I felt comfortable with calling myself a frontend developer. But then new challenges came.

All Hands on Deck

We’ve successfully delivered several relatively complex SPAs and with that, our client’s appetite for rich user interfaces grew. We needed to onboard new frontend developers to address the increasing demand. We had a lot of experienced developers in our company with different backgrounds. Some have been doing Java development, even frontend development using GWT, others came from jQuery and a few had experience with more modern framework. The challenge was to understand the gaps in their knowledge, align it with our understanding of the current state of the ecosystem and derive a curriculum that would allow them to become productive as soon as possible.

We needed a way to quickly introduce a lot of new concepts and often we didn’t have the manpower to organize in-depth training sessions on each topic. Rather we produced overviews of our current tech stack and shared our thoughts on why we need each component. Something in the lines of, “we use TypeScript to make JS more descriptive and maintainable.”, “We use linters to provide assistance to developers”, “We use webpack to bundle the code together.” and etc. After some introduction we shared links to the relevant learning resources and expected our colleagues to do further investigation on their own.

It might not have been the perfect approach to sharing knowledge, but it worked and we were able to onboard more people to frontend development. Currently we have a community of frontend developers in our company, each doing their own thing and sharing new useful findings with the rest of the company.

Above and Beyond

When the dust of JavaScript fatigue had settled, it was time to look for new challenges. I’ve started looking into Go as an alternative language for backend development. We had use cases for developing simple micro-services and Go seemed like a good fit. Since I already have prior backend development experience, it’s unfair to say, that it was completely new to me. Of course, I had to learn Go as a language and get a hang of wring idiomatic Go applications, but a lot of the concepts are similar. Like, what do I use for unit testing? Dependency management? Linters? It wasn’t really about learning new concepts, but about finding the implementations for old ones, and since these were similar to other languages, I could reuse my prior experience, and adapt it to new technology. In this context, Go-centric blog posts, newsletters and awesome lists were a good source of information.

In the same time I am looking at the cloud sector and feel the same uneasy feeling that I had before starting frontend development. It takes time to get oriented in all the services offered by major cloud providers, containers and Kubernetes, Cloud Native projects and etc. Is “cloud fatigue” already a term? A comprehensive, birds eye view map of what’s going on would be highly appreciated.

So what am I getting at?

During my whole career as a developer, I found great value of guides that provide a high-level overview of what’s currently happening in a particular segment of the industry. Whether it’s JavaScript, Go or cloud technologies, they help you position yourself in the landscape, decide where you would like to be and find your way.

This is why I started the devtrails.io project. It’s devoted to sharing experience and trends in the industry in forms of brief but broad introductory guides in a format that was influenced by mind maps, awesome lists, ThoughWork’s Technology Radar and others. We’ll start with web development and see where the journey takes us from there. I believe such guides can be useful for both beginners and experienced professionals so long as that they are kept well structured, not too subjective and up to date.

I’ll begin publishing the first guides soon and would appreciate your thought on this subject. Do you have similar personal stories to share? What kind of learning materials helped you establish yourself as a developer? Share your thoughts and help others learn from your experience.

--

--