How Senior and Mid-level developers can better teach Juniors
Tags: mvc, dotnet, aspnetcore, architecture
Published: 2021-03-14 00:02:14

Coder Foundry has helped me realize my passion for learning and helping others learn. The Bootcamp is a twelve-week intensive job skills course focused on placing participants into the tech industry. Some participants had no previous knowledge of coding while others had backgrounds in IT. Though I'm still learning, I've been able to identify certain methods that can help students eager to learn.

     Show, don't tell.

The owner of the Bootcamp, Bobby Davis Jr, has a video on youtube describing how one full-stack project can lead to a dev job. The video explains what a bug tracker is and what technologies were used to build it. I did some research on LinkedIn and saw the bug trackers of Coder Foundry graduates. They were all functional and had crisp user interfaces. I decided to give it a shot. After watching Bob Tabor's 8 hour video on the C# fundamentals, I bought a Udemy course and started learning from tutorials how the MVC design pattern works. From there I went onto Youtube and started searching for the best-looking bootstrap templates. Next, I began setting up sprints, user stories, and Software Requirement Specifications. Lastly, as I worked on the project I would consult senior-level developers from discord chats and websites such as codementor.io for guidance and code review. 

I got far into building the bug tracker, solely based on everything I had seen and heard from Bobby’s video. I eventually decided to enroll myself into a cohort to fully flesh out my bug tracker as well as my full-stack skills. Show the learner, and if they are truly eager to learn, they'll find a way to hone their skills. 

     Use real-world examples

Most students looking to get into software development aren't familiar with technical jargon. You need to ease them into it. I was recently paired up in a zoom breakout room during our final weeks of the cohort. "What are the differences between classes, services, and models?" When this question came up, I paused for a second before giving an answer. Though it was a long-winded answer, it seemed to click. I also decided to give an example just to solidify the theory. 

 "Classes are blueprints that will hold methods and properties (or fields). Services are classes that will perform certain functions. Think of services as a verb. Models are classes that will take on the shape of data in which records will be created and put into a database. The records that get put into a database could be records of students, teachers, or principals. Think of models as a noun."

This example seemed to click a lot more. Nouns and verbs are things we have been learning since kindergarten. Another real-world example I used to help a fellow student was when it came to abstraction. Lets be honest, the word abstraction itself can seem intimidating. Instead of abstract, let's use something a little more beginner-friendly. 

Extract.

Vanilla extract, Almond extract, Pepper extract. Think about the process of extracting vanilla out of a vanilla bean. You are taking the flavor of the vanilla bean, and processing it into a new form. It may be in a different form, but it is still the same vanilla flavor.

var abstract = new Extract();

When you abstract(Extract) logic from a controller and put it into a service, you are taking that logic from the controller and using it in a manner that will be easily accessible and optimal for the application.  

If you wanted to take it further, you could even tie in loose coupling to this example. PepsiCo, parent company of many famous beverage brands, wants to go into the health foods industry. They want to create a new beverage that will serve as a pomegranate smoothie. Since pomegranate seeds leave chunky residual when blended, to achieve a smooth consistency, PepsiCo has decided that their pomegranate flavors will be made from concentrated EXTRACTS. The company needs their beverages to be smooth and LOOSE to appease the customer's expectations when it comes to consistency.

OOP development always needs to adhere to loose coupling as opposed to something densely packed and tightly coupled. A loosely coupled application is a lot easier to maintain since developers will be able to easily trace the flow of data and quickly set breakpoints.

      Create Toy Apps

Before joining Coder Foundry, my GitHub repo was filled with toy applications. Toy apps are applications you build to get your feet wet, NOT applications you show employers to secure a job offer. TicTacToe, ToDo Lists, and calculator apps are all examples of toy apps. Again, if you showed this to an employer hoping to impress them, they will most likely give you a soft no. However, if you created a console application and build a toy app that implements a list, chances are, you'll have an easier time working with lists when the interviewer asks you to print out a list's elements in alphabetical order. 

Back in December, I created a console application that would print out the number of entries into the Fibonacci series based on the user's input. I implemented a list to store all the entries that were going to be displayed to the user.

Fast-Forward nearly three months later, that same exact Fibonacci toy app helped me secure my first job. It wasn't just the toy app however, it was a scaled-up version of the toy app. I implemented the Fibonacci algorithm as a service inside an MVC application as well as implemented two new services. One service calculates the Pythagorean theorem of two numbers and the other calculates the standard deviation of multiple numbers. I then created XUnit tests for all calculation methods to showcase Test Driven Development methods used in the industry. Lastly, I logged info from the application to a seq server utilizing Serilog structured logging.

P.S.
Shout out to the creator of Seq for giving me feedback :) 
![image](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/p5qbuuvbr0dr8r6xz07v.png)

![image](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/pys00ul6mz0tar6ecsx3.png)



    Have Junior developers watch Youtube videos and read blog posts


Tim Corey is a .NET developer who posts educational youtube videos. I came across his video in which he details 10 NuGet packages that make development easier. FluentAssertions, Serilog, and Seq all stood out as the most useful. During the cohort, I would tell folks that if they had trouble understanding how to implement a certain piece of functionality, to watch youtube videos. Watching videos is good to understand how the functionality works, but can be bothersome when trying to implement. After watching youtube videos, reading blog posts should be the next step. I watched Tim Corey's videos on all three technologies to get a sense of what to do, gave it a shot. Next,I started reading blog posts from other developers to compare and contrast my code with theirs. Open source blog posting websites are amazing because developers are very willing to interact with their comments section. Devs love knowing that they are helping other devs while also displaying their expertise to potential employers. 

I showcased the MVC app (as well as my bug tracker) at multiple interviews and was lauded for my efforts.

https://tdddemo.herokuapp.com/

An article will be written later on detailing my experience with Serilog, Seq, XUnit tests, and FluentAssertions. Check out some of my previous experiences:   https://zacharyhadjah.netlify.app