Advice to a Junior Developer

It’s important to realise, especially as a junior developer, that you are still learning and this is fine.

This is the latest installment in a series of articles offering advice from the members of the Capgemini Microsoft Team to Junior Developers, for the previous posts click here and here.

If you are looking for a post that gives you advice on what is the hottest technology right now, this is not the post you are looking for, however if you are looking for some general advice on how to become a better developer then you have come to the right place.

It’s not all development

Before you started working as a developer, you probably thought that you would be writing code all day, well this could not be further from the truth as you’ve probably already found out.

These are some of the technical competencies that will help you become a more rounded and effective developer.

Networking

The packet switching type rather than the meeting people type. Pretty much everything that you do as a developer will involve a network, which means that learning some basic troubleshooting would be good.

This course in Pluralsight gives a nice introduction specifically for developers, if you have a Pluralsight subscription it’s less than 90 minutes.

Configuring and Troubleshooting servers

This is probably a little bit antiquated given the prevalence of PaaS and SaaS offerings, not least Dynamics 365, however, I still think there is value in knowing a bit about how a server is configured.

If you are working on an IaaS project or on a Hosted environment, this is a must. Do not just rely on the senior developers or the system admins to configure everything, you should learn how to do it yourself.

If you want to broaden your horizons, learn to configure and troubleshoot Windows and Linux servers even if you don’t use one of them on a day to day basis. It will help you see how the other side does it.

PowerShell

PowerShell is becoming ubiquitous, at least in the Windows world and once you learn what you can do with it, you will see why. It’s interesting to note that any .NET library can be loaded into PowerShell so it really can do pretty much everything .NET can, even WinForms.

A useful combination of all the above is a PowerShell snippet to do a socket test, namely test that you can connect to a server on a specific port, e.g. you want to test that you’ve configured a firewall and a server on a specific port:

$socket = New-Object System.Net.Sockets.TcpClient("<ip address/ hostname>", <portnumber>)

If the command looks somewhat familiar or at least the structure does, this is because it comes from a .NET class constructor.

Security

As I type this, the certificate for Medium has been issued by Mcafee Web Gateway:

Not issued by a real CA

In essence, this is a Man In The Middle (MITM) attack, but Chrome is happily showing the certificate as valid, because this computer trusts the Mcafee Web Gateway Certification Authority.

This is a pretty common set up on corporate computers and it means that this connection is not secure and potentially somebody could eavesdrop on any connection I make.

This is what the real certificate looks like

This is a genuine certificate issued by DigiCert

I would suggest that a good developer needs to be familiar with how TLS works, best practices for password storage and OWASP 10

Object Oriented Programming is no longer where is at

You should try to learn another programming paradigm other than OOP. My suggestion would be to try Functional Programming (FP) for reasons I explain below.

It is entirely possible to do functional like programming in a language like C# but you should try to learn a real functional programming language as it will help you to think about approaching problems in a different way and as an added bonus you can fold a lot of that knowledge back in to your day to day code.

I cannot emphasise enough how pure functions make the code easier to reason with, which means lower cognitive load, which in turn means fewer bugs and thus more productivity.

If you want an easy transition into FP, from a C# developer’s perspective, you can do worse than F# as it’s part of the .NET framework and integrates nicely with Microsoft’s tooling.

If, on the other hand, you want a challenge, then go for Haskell and try not to bore your colleagues with Category Theory when you get there.

Impostor Syndrome

I would like to be able to tell you that the feelings of inadequacy go away as you get more experienced, but unfortunately this is not true.

If you truly care about the code you are writing, you will always feel a little bit inadequate when you don’t come up with the best solution but fret not as the more experience you get the more you will come up with the best solution and the less like an impostor you will feel.

If it’s any consolation, this is relatively prevalent in among so-called knowledge workers.

I personally see suffering from this from the following two points of view:

  1. I still care about delivering quality.
  2. I am, unlike the Pope when speaking ex cathedra, fallible.

Embrace Code Reviews as a mean to improve your skills

If there is one takeaway from this post, make it this one. It’s important to realise, especially as a junior developer, that you are still learning and this is fine.

You might feel that the reviews are personal attacks on your ability and competency as a developer. The truth is that this is rarely the case and it is very important that you mindset when it comes to code reviews is: Why didn’t I think of that?

If your mindset is: it works fine as it is, you could easily be losing opportunities to learn and improve.