DEV Community

Cover image for Advice for Junior Developers

Advice for Junior Developers

Jeroen De Dauw on October 11, 2022

Over the 15+ years of my development career, I have learned several things that significantly increase my effectiveness. In this post, I share thos...
Collapse
 
h_sifat profile image
Muhammad Sifat Hossain

Awesome post. I've actually read the Clean Architecture book in the last month and I would highly recommend it. It significantly changed the way I think about software and taught me how to take decisions carefully.

Collapse
 
jmfayard profile image
Jean-Michel πŸ•΅πŸ»β€β™‚οΈ Fayard

Ok not in which ways?
What were you see we the most impactful aspects for you personally?

Collapse
 
sirhamy profile image
Hamilton Greene

I'm curious about the interaction between 6 and 7.

6 - OO && don't use static
7 - Functional

In my experience, writing functionally implies lots of static functions (as this is how you declare a "pure" function (one without access to state) in OO languages).

Is 6 more around static objects? e.g. this would mean an object (and its relating data) are global

Collapse
 
jeroendedauw profile image
Jeroen De Dauw

The "avoiding static" in point 6 is about not writing static functions with side effects or usage of global state. You are absolutely right that pure functions are not a problem.

Collapse
 
loebkes profile image
Lui

Nice article! I always recommend Working effectively with legacy code, too. It's one of the best and most applicable books I've read.

What I think what should be added is to structure your code with "package by feature".

This changed a lot for me and I use the same concept now for structuring documentation.

It's much easier to see strange dependencies and to reduce/restrict/avoid them.
Much easier to navigate and find classes and much easier to grasp the code as the classes are much more cohesive (on package/folder level at least).

Collapse
 
mcsee profile image
Maxi Contieri

great post !

Collapse
 
jenniesworth12 profile image
Jennie Sworth

Thanks for sharing this ^^ I'm new to dev

Collapse
 
yurieastwood profile image
Yuri Eastwood

Many topics, rich resource gathering!
Really nice article, congrats!

Collapse
 
leoclao profile image
Leo Dao

This post really means a lot to me, thank you so much

Collapse
 
soenkekluth profile image
SΓΆnke Kluth

top!

Collapse
 
logudotcom profile image
Loganathan Natarajan

I love this article and valuable information for juniors

Collapse
 
mxglt profile image
Maxime Guilbert

Great post and valuable for all experiences! A reminder is always good!

Collapse
 
kingoloruntofunmi profile image
Dada David Oloruntofunmi

Am happy this appeared on my feeds.
This is a lot and this is awesome
Thanks so much

Collapse
 
arraju profile image
Asikur Rahman

Thanks for your valuable post

Collapse
 
dhruvjoshi9 profile image
Dhruv Joshi

Such a detailed and helpful blog!!! Thanks!!

Collapse
 
manuartero profile image
Manuel Artero Anguita 🟨

Really really good post.

Collapse
 
jeffchavez_dev profile image
Jeff Chavez

Thank you for the resources! I'll take it to heart as a new dev.

Collapse
 
candlepeter profile image
Isienyi Paschal Ejike

Great content...

Collapse
 
stretch0 profile image
Andrew McCallum

Solid post! Love the explanation of comments being code smell and suggesting there is a more clear way to write the code

Collapse
 
otijhuis profile image
Okke Tijhuis

The issue is not the comments themselves but the fact that many developers just repeat what's already obvious in the code or they use comments to avoid doing good software design. Instead of saying 'avoid comments', advice should be given on what makes a good comment. I love comments that detail why something is done, assumptions that are being made, explain workarounds (with links to github issues for instance) and so on. So I don't see comments as a code smell, I see them as an important part of the code and they should be reviewed as such.

Collapse
 
avieldez profile image
AvielDez

This is great advice for a new dev such as myself. Thanks for providing reading material too. Very helpful!

Collapse
 
webjose profile image
JosΓ© Pablo RamΓ­rez Vargas

As a developer with 18 years of experience, I find very odd the statement "don't inherit". I inherit in a healthy amount regularly. It also a common practice to have a base class for abstract factories. Is it because people don't do it properly? In my opinion, if you are SOLID, it is OK to have base classes. After all, the main argument of composition over inheritance seems to be geared towards obtaining services, not implementing them.

Or am I missing something? Cheers.

Collapse
 
jeroendedauw profile image
Jeroen De Dauw

My advice is to "don't inherit for code reuse". Inheriting a purely abstract class is basically the same as implementing an interface: all about subtyping, and not about code reuse.

I regard inheritance for code reuse as an advanced tool, that sometimes can be used appropriately, but is better not handed to devs that are just starting out.

Collapse
 
dagger profile image
Dagger

Do one thing in your functions
By doing a single thing in a function, you can give it a clear name

Great post. And this bit of advice is something I always seem to forget.

Collapse
 
mainuol01 profile image
mainuol islam

Nice article!

Collapse
 
raffaeleloi profile image
Raffael Eloi

Awesome post. Thanks to write that.

Collapse
 
dmj profile image
Dmj

Very helpful post

Collapse
 
mayallo profile image
Mohamed Mayallo • Edited

I think we can add

Don't trust everything you read on the internet, for example, inheritance or SOLID principles or ..., without knowing the drawbacks before the gain.

Try to search on the internet about SOLID principles, for example, you would see that the majority of the resources tend to over-praise them without mentioning their limitations.

I have already written two articles about the SRP and the OCP, you can check them out to know what I mean.

dev.to/mayallo/do-you-really-know-...
dev.to/mayallo/open-closed-princip...

Collapse
 
otijhuis profile image
Okke Tijhuis

The post contains some great information but are those really things a junior developer should focus on? To me a junior developer is someone who is still getting the lay of the land, like learning the programming language, the tooling and so on. While something like software design is extremely important to me, I wouldn't want a junior developer to worry about that yet. I feel that in this industry we expect way too much, way too soon. The best way to learn is often from your mistakes. Following best practices blindly might sound like a good idea at the start but how is a junior supposed to know when there's a best practice and in what situation it's applicable? Like you said, code is not the point. I'd rather have them thinking about the problem first, the quality of the code later. Having a good mentor, doing pair programming and getting detailed feedback on reviews will be far more valuable to a junior imho.

Collapse
 
dpods profile image
David Glassanos

Really great post, nice work! I agree with most of it and love all the additional reading sources.

About point #3, I agree but I think it's a little more nuanced. Junior devs should definitely follow best practices when starting out. The issue though is that sometimes there is no consensus around what the best practice is, or there may be outdated resources on the internet recommending outdated best practices. This makes it difficult for junior devs to discern what actually is a best practice or not, but that's more an issue with the industry as a whole than anything else. Things move quickly, and what used to be a best practice last month might not be the best way to go about it next month.

I'd also like to shamelessly recommend my own book to add to the resources. I just published a book called "Junior to Senior: Career Advice for the Ambitious Programmer". Here's a link to a free sample chapter: How to Read Unfamiliar Code

I talk about some similiar points your mentioned in your post, and you mentioned some points that aren't covered in the book. All in all, nice job and I think the more resources junior devs have to get up to speed in the industry the better.

Collapse
 
incrementis profile image
Akin C.

Hello Jeroen De Dauw,

thank you for your article.
It was easy to read and many links were added to the specific terminologies that helped me understand the article better.

I think it's a great thing when someone wants to learn more than they should.
I also agree that documentation is necessary and needs to be written, imo.

Still, the things you expect from a junior developer are a bit overwhelming in my opinion. It sounds like a way to become some sort of full-stack developer.
For example, I understand your article to mean that this junior developer is expected to:

  • Software engineer(Coding)
  • Software designer
  • Software architect
  • Software tester

Please correct me if I'm wrong here.

Collapse
 
jeroendedauw profile image
Jeroen De Dauw

As a software engineer you write code that you design and test. If you split that into 3 different jobs, you will not get a good outcome. Yes, you can have dedicated testers or people who specialize in architecture, but this does not remove the need for devs to think about what they are doing and to create automated tests.

Collapse
 
ebonydomingue13 profile image
Ebony Dominguez

Thank you!!! Very useful post for those who are just starting to work in IT. I also want to recommend looking at the code of well-known or just interesting projects, to analyze its structure. If you want to see how this code works in business and what is the life cycle of the project, watch the growth of young companies. For example, I like to look at SlotoGate. It's nice to see how young projects are gaining popularity.

Collapse
 
bernardm profile image
Bernard Martis

The book recommendations looks like someone from ThoughtWorks made them. I’ve always recommended Code Complete over Clean Code. The principles are explained clearly with a lot less preaching and TDD gospel.

Collapse
 
dalibor profile image
Dalibor

You make a lot of great points. I'll add one suggestion. Try out a low-code programming tool. Low-code is growing and it gives you an overview the process for creating an app. It replaces a lot of the tasks of classic development, in which you should definitely become expert, but low-code enables you to get some wins.

I play around with the jetveo.io platform to make apps for myself, just for fun. It's kind of like when html start a long time ago: in order to learn how to do the coding for work, I taught myself with a side project for myself (which was much more interesting and engaging).

Collapse
 
wadecodez profile image
Info Comment hidden by post author - thread only accessible via permalink
Wade Zimmerman • Edited

People always forget the most valuable skill! Learn to use a debugger and/or [developer tools](People always forget the most valuable skill! Learn to use a debugger and/or developer tools!

Collapse
 
peyaza profile image
peyaza

awesome post

Collapse
 
og_dev profile image
OGBONNA SUNDAY

Nice and insightful article! πŸ’―

Collapse
 
drfow profile image
Dr. FoW

Wonderful post buddeee

Collapse
 
srisuma13 profile image
Srisuma Atluri

Great advices! Thanks for posting it.

Collapse
 
mahmudhasarifat profile image
Mahmudul Hasan Rifat

**Tradexpro Exchange **is the best php script based Cryptocurrency platform for all time.

Collapse
 
candlepeter profile image
Isienyi Paschal Ejike

Awesome post. Thank you for your advice, I am trying to transition to tech without a CS degree and it's not been easy. Thank you these recommendations.

Collapse
 
anderspersson profile image
Anders Persson

Great post, lot of usefull things i a good structure.

Collapse
 
ashm10 profile image
Asther Marie Moreno

This is awesome, thank you so much!! ❀️

Collapse
 
reidterror profile image
reidterror

Literally my 3rd day of reading small chunks + blog posts linked in this post. Very good stuff!

Collapse
 
peranoxx profile image
Info Comment hidden by post author - thread only accessible via permalink
PeranoXx

Testing comment

Collapse
 
asohyannick profile image
Asoh Yannick Anoh

Always go for progress and not perfection as a developer. We keep learning everyday and daily progress will take you to higher heights in your journey as a developer.

Collapse
 
lucabertolasi profile image
Luca Bertolasi

Great post.

To be honest, it's good to review these points even as a more seasoned developer, just to check which habits to keep and which ones to get rid of.

Collapse
 
vignesh_subramanian profile image
Vignesh Subramanian

Very nicely summarized !

Collapse
 
angie_guan profile image
Angie Guan

very good posts

Some comments have been hidden by the post's author - find out more