The Junior Dev: Lessons Learned Pt. 1.0
Tags: webdev, beginners, programming, career
Published: 2024-01-27 05:39:59

Good day fellow programmers. This is the first in a series of musings wherein I will reflect upon the many valuable lessons I have learned as a junior developer throughout the first few years of my career. 

For the fortunate young developers, some may be lucky enough to have some form of mentor. These people are there to guide them through the processes and procedures, code base as well as familiarize them with valuable domain knowledge, and essentially water the seed that is the young developer to help them flourish into a valuable asset for any team. 

This however is often not the case, and for myself was certainly not. Throughout the past 2 years there is much I have learned about the ever-changing, often volatile nature of the web development landscape. If you find yourself in a similar position, fret not; oftentimes, the greatest opportunities come from difficult situations. Learning how to navigate and utilize every opportunity to your advantage will ensure you never stop learning, and never stop growing. This should be a long term goal for all developers and aspiring developers. The tech landscape currently changes faster than ever before and will likely only continue to accelerate in its growth. If you are not constantly learning new skills, new tools, new techs, you will eventually find you have fallen miles behind your peers. 

## Lesson 1.0 Get your hands dirty 😱

I think one of the most important things any new developer can do when first starting a new position is to dive head first into the code base. The faster you get a handle on the infrastructure, processes and actual code, the faster you can make meaningful contributions. Depending on the scope and complexity of the project this may take some time, but one of the best ways I've found is to simply spin up a local version of the project and poke around while looking at issues and potential solutions. 

If your team has documentation, **_READ IT LIKE IT'S YOUR BIBLE_** because it is now. A good documentation source is a developer's best friend, (that and your rubber ducky). If your team is lacking documentation, a great way to contribute to the team, while also learning your way around the code base is to develop a working documentation spec. This not only helps you learn the inner workings of all the aspects of the project, but it will also immediately enhance the productivity and lives of your team members.

If you're looking for examples of high quality documentation, I recommend [Stripe](https://stripe.com/docs). They have amazing examples in various languages, highly descriptive AND **up-to-date** descriptions. [Bootstrap](https://getbootstrap.com/docs/5.3/getting-started/introduction/) is another great example with all the same attributes as Stripe's. 

Documentation is a crucial component for long standing projects, and oftentimes, organizations lacking in on-boarding procedures will be lacking in other areas as well such as documentation or testing. Helping to implement and develop proper procedures, documentation and protocols can go a long way in projects with a long life expectancy. It also helps you get your nose into every nook and cranny of an application. Often times in legacy code you _may_ even discover Easter egg 🐣 bugs other people were unaware existed. Documenting these issues and advocating for fixes can help protect you and your team in the event of catastrophic error.

Another great method of getting your hands dirty is to explore any testing tools used by your new team. Exploring unit and/or End-2-End tests can help you develop a thorough understanding of the most important components of an application. These cases will often be driven by business requirements and logic and thus are the foundation of the applications existence. Understanding this can help encourage more mindful decisions when fixing bugs or add new features to an existing code base.

Testing is also a great way to develop an understanding of Application logic. E2E testing should provide an in-depth view of the indented use and flow of an application. Exploring testing suites can also help you identify sources of potential errors. 

Like documentation, testing, whether unit, integration or e2e should always be a part of every developer's toolkit. If no testing protocols exist, a great way to start learning the code base while providing instant benefit to the team is to begin developing a testing framework for the team to use. This will provide a longitudinal benefit and if you stick around a project long enough, you will eventually be thanking your past in the long run.

If you are interested in further reading on Automation testing I recommend checking out the [Playwright Framework](https://playwright.dev/). It's one of the most popular tools used for e2e testing and also has numerous applications in a variety of web service use cases (html-to-pdf generation is one example). Unit testing will depend on your development framework and language, but several popular tools exist; Mocha, Jest and Cypress quickly come to mind. Regardless of what tool you choose, I highly encourage you to delve in and learn the full power these tools offer. More reading on testing [here](https://www.browserstack.com/guide/top-javascript-testing-frameworks)

### Sidebar: Version Control
Another crucial skill every developer **_must_** know is source control. [Git](https://www.atlassian.com/git/tutorials/what-is-version-control) is currently the reigning champion in this domain but there are many other tools also in widespread use (SVN, tortoise SVN etc.) One of the first things you should familiarize yourself with (outside you IDE) is your team's source control software. **Learn it.** **Master it.** **❤️ it.** Many people will have a basic working knowledge of source control tools, but if you can truly master your team's source control software, you can immediately become an invaluable member of any team. Trust me when I say; everyone loves the person who is able to revert their accidental commits, or deal with complex merge resolutions. Depending on your team, and infrastructure and career goals, learning source control can also be a path to working in DevOps.  For more information on Git checkout the link above. 

#### Closing Notes:
Self awareness is an important soft skill developers should also work to cultivate. Knowing your abilities, your strengths and your limitations is a powerful skill. Often you will get asked in interviews: 
    - What are your greatest strengths?
    - What are your greatest weaknesses?

The actual answer itself does not matter as much as many people realize. The real reason interviewers ask these questions is to assess not your skills but to determine how self aware you are. It's crucial to know your level of ability. Be aware of how you can actually effectively contribute to teams without impeding the efficiency of others. 
##### **_Caveats_**
All of the above advice is valid, however, it's always a good idea to investigate the reasons **_why_** behind the _what_ or _how_. In some cases you might learn that business logic dictates certain practices and oftentimes this will conflict with what's been taught to you as best practices. But remember to be mindful that under all the tech and knowledge and skill, our duty and job as developers is to assist the company to function and succeed in its goals. If we forget this, we would quickly find ourselves out of a job. Professional software development work is often a series of trade-offs and compromises. Learning to walk this razor's edge as you navigate the cross sectional relationship of working as a professional developer can help you level up your career in various ways. Soft Skills are crucial for any developer and become increasingly important as team size and project size grow. The better you are able to interact with non-tech individuals, the further you will likely advance in your career. Always be aware of the potential consequences of your actions. There may not always be a safety net to catch you.

That is all I have for now.

If you have other tips you would like to share, please do so below. And if you enjoyed reading, thanks for staying. <3 

Keep Coding 🤓
{% runkit
const egg = 'Thanks for reading 🦊🐺 that`s my husky nikki btw she told me to tell you "bark bark arooo" ';
%}
console.log(egg);
{% endrunkit %}