DEV Community

Cover image for Advice to Junior Developers
Sam Khan
Sam Khan

Posted on

Advice to Junior Developers

Over the course of the last couple of years, I've worked with a few interns and entry - level developers. This article lists some of the suggestion I have often found myself repeating while trying to provide them with guidance. 

In a way these are the advice I'd give my younger self if I could. Things I wish I had known back when I was fresh out of university and looking for a job as a developer. Lessons that have - or would have - helped me navigate the first year of my career, once I did eventually start my journey into software development.

1. Learn your fundamentals

How do you decide what to learn when you are starting out? There is no shortage of programming languages and frameworks. The industry is afloat with buzzwords like data science, machine learning, micro-services, cloud computing, NoSQL, DevOps, Blockchain, and on and on it goes. Then there are the abbreviations. So. Many. Abbreviations. UI, UX, API, OOP, IoT, CMS, CDN, PaaS, SaaS, what do they even mean?

If you happen to be interested in the JavaScript ecosystem or the front end (If you haven't come from a CS or IT background, there's a chance you don't really understand the difference between front end and backend developer yet - is there even a difference? and what's a full - stack developer anyway? I didn't know when starting out) you are probably overwhelmed by the plethora of JavaScript frameworks all of which seem to do the exact same thing. This is actually true for most of the popular programming languages. Popularity breeds frameworks.

And how do you even decide on a programming language? You've read on a blog somewhere that JavaScript is the future and then found one that claims "webassembly is going to replace JavaScript". Maybe you should learn Java, all the enterprises seem to have it on their job listings but then you hear you friend say that Kotlin will make Java obsolete. Who can you trust? Do you just pick a programming language that makes your resume more impressive? but what happens when that language is replaced by another one? 

First off, you can rest easy knowing that none of the popular programming languages have that short a shelf life. They are popular for a reason and there is a certain domain for each of them in which they solve a specific problem. And if they didn't excel in that problem domain by virtue of features or tooling they wouldn't be popular in it. Secondly, under the hood all programming languages do the same thing; they manipulate the computer's memory. So, knowledge of one translates nicely to others. 

That being said some languages are more beginner friendly than others. For instance, I wouldn't recommend JavaScript and C++ as a first language to anyone. Stick to one of Java, Python, or C, and learn it well. If you do that, you'll be able to pick up new languages in no time when the time comes. Don't waste too much of your time learning frameworks to make your resume heavier. No development team worth joining expects its juniors to be experts in a framework. Frameworks should be picked up on the job. 

The only thing you should be focusing on when learning the language of your choice is the fundamentals. Beyond learning how variables, conditionals and loops work in your preferred language, it's important to understand how the type system works. It is also good to have a rough understanding on how a computer's memory works. Combining that with knowledge of what data types are available to you in your language, and knowing how to make use of common data structures and algorithms will help you be an effective problem solver and thereby do well in technical interviews. Additionally, try to get enough practise to be able to code simple problems quickly. If you already have a good grasp of the basics, practise pointers and recursion problems. Sure, some people will tell you that you won't have to use them a whole lot in real life, and for a lot of jobs that may be true; however, solving pointer and recursion problems stimulate the sort of indirect thinking that is extremely useful for writing good code.

2. If you don't have a CS degree, Don't worry

I'm not of the camp that think a Computer Science degree is useless. It most definitely is not. Whether a CS degree is worth the money or not is a different question and the answer to that will depend on your situation and the particular school that is offering the degree. That being said do not fret if you don't have one. Just be aware that you will be competing against people who do and therefore there exists a certain gap that you have to work to fill.

We are privileged to work in a field where you can get the equivalent of an undergraduate degree on the internet free of cost. Coursera offers a lot of great courses that you can audit for free. Then there is MIT open courseware, edX, etc. Unlike a lot of the other hard sciences, your learnings in Computer Science will not be hindered by the lack of a laboratory. You laptop is an adequate lab for all the online courses you could possibly take. Make use of that privilege. Don't underestimate the value of a good education.

3. If you do have a CS degree, don't let it get to your head

If you do happen to have a CS degree, you have a head start. But don't let that be an excuse to get arrogant and don't make the mistake of looking down on those who didn't. Chances are those who taught themselves how to code have a lot of passion and that will make them effective developers. Some of the best developers I know didn't come from a CS background.

Use your time now to learn the topics you missed out on in university. Electives that you planned on taking but didn't get around to; the ones that got away. 

4. These are the topics you need to learn/revise

The following is a list of topics I consider valuable knowledge for any developer. I've listed them as courses or subjects offered in CS degrees and ordered them roughly by their importance. You don't need to be familiar with all of them before you land your job obviously; the goal should be to continue learning these topics on the side once you do start working as these will make you a better programmer in the long run.

  • Data structures and algorithms
  • Object oriented programming
  • Programming languages (a course that covers type systems, functional programming, comparison of functional and - object oriented programming, interpreters, etc)
  • Operating Systems
  • Hardware or systems programming(C/C++)
  • Computer organisation/architecture
  • Compilers

If you haven't formally studied computer science at a university, these are the subjects that will help you close the gap the quickest. There are plenty of resources available online that will give you an adequate background for all of these topics. If you have are currently enrolled in a CS degree or plan on attending one in the future, try to make sure you cover these at university. And if you have completed a CS course, you may want to study up on the topics you have missed and revise those you have already studied. 

When learning, always focus on depth rather than breadth. You're trying to build a career here, and should therefore aim at mastering your craft. There is no shortcut to mastery.

Some additional subjects for you to look at if you are interested in getting into the coveted Artificial Intelligence or Data Science field are as follows:

  • Linear algebra
  • Multivariate calculus
  • Undergraduate level statistics
  • Machine learning 
  • Computer vision
  • Deep learning
  • Natural language processing

5. When learning a new technology, know what's possible and know where to look it up

A big part of the job is to read documentation. There is no point in memorising what features and functions are present a particular library or framework. You'll remember as you gain more experience with a particular framework. Early on, you just need to know what is possible build with each bit of technology you use and ensure that you know where to look it up. I received this advice from my senior developer at my first job and it has helped me throughout.

6. Don't waste your time mastering frameworks and libraries

I've touched on this in above and you might already be wondering what's my beef with frameworks. While there is great value in specialising and building an expertise in your preferred tech stack, I firmly believe that the early stages of your career should be focused on learning the fundamentals. 

I work as a consultant across the full web stack and am often required to move from project to project. When I'm working on the frontend, I have to switch between frameworks - what feels like - every other day. The only thing that helps me retain my sanity as I juggle the likes of React, React Native, Vue, Angular, jQuery, LWC, Aura, VisualForce, Redux, Redux Sagas, Apollo Client, etc. is the time I spent early on in my career building up a firm grasp of JavaScript. Knowing the language that lies underneath those frameworks and libraries help me learn new ones on the fly. 

Understand this, if everyone simply relied on existing frameworks and libraries, no new ones would ever get made. My advice is therefore to learn the basics so that when the time comes, you will be ready to write your own. Those are some of the more rewarding experiences you can have as a programmer.

7. Take to time to enjoy where you are at

As you gain more experience, if you are at least somewhat decent at what you do, you will soon have your LinkedIn inbox flooded with recruiters. Some of them will be good too. They will come at you with promises of shiny new jobs, with better pay, seemingly more interesting projects, and a chance to work with newer, more modern tech stacks.

If you are always chasing after the next big thing, you'll never get to enjoy where you're at. Take the time to appreciate your current project, your tech stack, your job, and make the best of the learning opportunities presented to you.

Top comments (9)

Collapse
 
mattnot profile image
Matteo Notaro • Edited

I think you missed a thing in point 4.
You must have a little knowledge of parallel computing. I know that in modern languages is useless (python, js ect) but it's important to have the mental attitude.

Collapse
 
samkhan27 profile image
Sam Khan

Yeah I second that parallelism is important. I did not mention parallelism and concurrency separately since I expect any good course on operating systems to cover it at the level needed by a junior developer.

Collapse
 
steelwolf180 profile image
Max Ong Zong Bao

I think focusing on your soft skills is important as well. Since without it, it will be hard for them to be effective developer. Plus no one wants a person who is brilliant brat but really bad in their soft skills to work with team members.

Collapse
 
tan profile image
Tan

Hi Sam. Thanks for such an amazing post.
I’ll definitely look into these subjects now that I’ve got lots of free time before starting my first FTE job.

Would you have any advice on dealing with anxiety at the workplace? During a internship at a start-up, I was having trouble keeping up with tight deadlines and spent too much time thinking I wasn’t “quick enough”.
The feedbacks I got at the time didn’t help me feel good either, as they were mostly negative and related to my personal trait and my inability to deliver features “quickly”.
At the end, I didn’t get an FTE offer, and my manager said it was mainly because of my anxious behavior harming my productivity.
I never knew what I could’ve done better, and was wondering if you’ve faced something like that.

Kind regards,
Tan.

Collapse
 
samkhan27 profile image
Sam Khan

Hi Tan,

The way you get "quicker" or better at writing code is writing more code and you should get a lot of practise by looking into the subjects I have listed. That being said, quick and better are NOT the same thing and quick should not be the end goal. You should focus on doing things right rather than quick.

It's hard to know exactly what happened at your internship as an outsider but I feel like if the startup you were working at was stressing out its interns with tight deadlines, it was not a great place to start your career anyway. Startups often don't have the resources to provide the right development path for interns and junior devs; additionally, startups tend to be a fast paced environment which doesn't suit everyone's style. I wouldn't worry too much about not receiving an offer from them. I have worked with some fantastic developers who never received a full time offer from their first internship. If you are still concerned about how quick you are, you should apply to large or medium sized companies as they prefer slower development and will have the resources to support learning at a different pace.

I'm not qualified to answer how to deal with workplace anxiety. I personally find that being on a full stomach alleviates my anxiety most of the time. With things such as anxiety, it's best to look deeper into what's causing the anxiety and try to fix the root cause rather than treating the symptoms.

Good luck!

Collapse
 
nicolus profile image
Nicolus • Edited

Care to argument ? It seems to me that Java is still a more versatile language and is way better at teaching you some fundamentals of programming like data types, multithreading and OOP that you can then reuse in C++ or most other languages.

Javascript is a fine language but it seems to me that it's very targeted at web development, and may not teach you everything you need to work in other fields.

Collapse
 
decorouz_ profile image
Adeyemi Biola

Thanks for sharing. This article feels like you had me in mind while you were at it. Thank you again

Collapse
 
moustymainer profile image
MoustY MaineR👨🏾‍💻

This incredibly is a sound advice... I so love it

Collapse
 
tinegagideon profile image
tinega

I second that