Advice for Aspiring Software Engineers
Tags: softwareengineer, javascript, learning, juniorse
Published: 2021-08-14 13:49:53

As a junior software engineer, I wanted to share my personal experience and advice with other aspiring software engineers. Perhaps you may have a different perspective of some topics and might not agree with everything in this post. But I hope that you find some of the content helpful.
 
##Programming Languages

Learning your first programming language can be overwhelming and exciting. But after some practice, it will all start to make sense. I had many failed attempts when trying to learn a programming language. I would start strong but constantly get ahead of myself and get discouraged when examining how long it would take to build a full-fledged web app.

Luckily one day, I committed to enroll and complete a four-month programming course. It was pretty challenging, and I wanted to back out at the beginning. But after a month of constant learning, I was hooked on software engineering and had no plans on stopping. One of the biggest motivators was that the course was rather expensive, $250 a month. So the pain of not completing the course was much more significant than following through with my commitment, even though I felt utterly lost initially.

The good news is that learning your second programming language won’t be as hard as your first programming language. And a large number of concepts, principles, and methods will transfer over.


##What to Learn

Software Engineering requires non-stop learning. And there is an overwhelming amount of things you could learn. Initially, a big misconception was thinking that I had to memorize the documentation for a programming language or library. However, it's far more important to understand online documentations and getting in the habit of finding answers quickly. 

If you plan to get a job as a software developer, the path can be a bit blurry sometimes. And there are countless suggestions online on what you should learn. But my advice would be to start by reading the job descriptions on the role that interests you the most. It would be best if you also took note of the job requirements. Then practice on a set number of technologies at a time.

If your role requires a specific web framework like React, you should constantly build projects using that framework. But for the most part, interviews may consist of algorithm problems. Or small problems/assessments that do not require external libraries/tools. Therefore, instead of learning multiple libraries, I would suggest sharpening your skills for particular programming languages and the environments they will run. Examples of javascript would be learning more about how classes are different from other languages, the event loop, or new ECMAScript syntax. In addition to how browsers interpret javascript, the DOM, rendering methods, performance, etc.


##Learning Methods

Sometimes I would fall into the trap of binge-watching tutorials. But some things that have helped increase my productivity are constantly building projects, breaking things apart, teaching what I’ve learned, and using the Pomodoro Technique.

When learning new topics, I would start by writing small scripts to implement what I am learning. But my understanding significantly improves when I try to build out a rather large project where my thought process and planning have to be more organized.

If some things don’t make sense after a while, I will break things apart. An example of this is when I was working with ORM(Object Relationship Mapping) libraries. I would constantly revisit the docs and previous projects. But things became clear when I built out small projects, and instead of using an external ORM library, I would create my version of the library. 

Teaching has also been scientifically proven to help with learning as well.

Lastly, I would suggest looking into the Pomodoro Technique. The technique suggests that you should work for a set amount of time, traditionally 25minutes, while taking a short break (between five to ten minutes). This technique helps me gain more clarity. Sometimes, my productivity declines whenever I am working non-stop or frustratingly trying to debug a problem. But a small break has helped boost my productivity.
 
I hope you find some of the advice helpful. And even though you may encounter many ups and downs in your journey as an aspiring software engineer. Just try to push through, and you reap the benefits in the end.