Lessons Ive Learned as a Software Engineer

Will Sheppard
7 min readDec 21, 2020

I always had a passion to build things on my on with code, and even though i went to a bootcamp, i still proclaim myself, for the most part as self taught developer. Being a self taught developer has pros such as developing in the developer grit, perseverance, dedication, determination, and learning through the only real method of learning, doing(building/coding). The cons of being a self taught developer is that you may lack the key foundations that a developer with a CS degree, learns through formal education.

So here are some things I’ve learning while being a Junior Developer

Table Of Contents
1. CS Fundamentals Matter
2. Problem Solver First, Programmer Second
3. Learn the Art of Debugging
4. Always Be Learning
5. Keep the Passion Alive
6. Communicate Effectively
7. Don't Be Scared to Get Your Hands Dirty
8. Don't Judge Yourself Based on Others

CS Fundamentals Matter

Problem:

Before my first job, i thought i had it made. I knew how to write client and server side code, how to store, and retrieve data from the database, and how to deploy apps to Heroku. When i got my first job, it was like being a deer in the headlights. Things like VPNs, Cloud Computing, reading other peoples code, reviewing others code, debugging SQL where the ORM produced queries that are 10 or more joins long😳, design patterns, refactoring/ building on top of legacy-ish code, programming techniques such as (eager loading, lazy loading, recursion, ect), knowing when, and why we should use a certain data structures, and writing a optimal algorithms(no nested for loops), caught me totally off guard.

Solution:

As a self taught developer, take time every day to learn a concept of computer science.

I know that it usually frowned upon to learn many things in a given time, but as a self taught junior developer breadth of knowledge is your friend. Knowing things like why you should use certain data structures, when the algorithm your writing is in constant time, or quadratic time, when and why we use certain design patterns, and networking, database, and operating system basics will serve you well. You don’t really need to get deep on most concepts, unless you specialize in those parts. But understand the high level overview, the why, and how it’s applied.

Problem Solver First, Programmer Second

Problem:

I came into programming with the same ideas as everyone else, a coder should spend theirs coding. Nothing more, nothing less lol.😤

Life is full of ironies.One being the stereotype that a developer sits in a cubical and cranks out code all day long. But the truth of the matter is that writing code takes a small part of your day. Your day will usually consist of talking with stakeholders and peers, attending meetings, reviewing code, reading code, debugging, and understanding each problem, to come up with the best solution.

Solution:

Take time to understand the reality of being a developer, vs the preconceived notion about what a developer is. Many times you have to take off the developer hat, and do things that you generally don’t enjoy, or may not be used to doing, but thats what separates the amateur from the professional.

Learn the Art of Debugging

Problem:

As a Junior developer when confronted with a bug ticket, i would just assume what the problem was based on the first idea that came to mind. I had no mental template for tackling bugs, and i would silo myself into a hole until i hopefully came up with a solution. As you can tell this dragged issues on for hours and sometimes days.

Solution:

Debugging is a skill, and an art of its own. When debugging you have to have a method to the madness, or you could drag on the solutions endlessly. So when confronted with a problem, ask yourself what is particular program suppose to do, vs what it is actually doing. Then try to reproduce the issue, brainstorm some scenarios (notice the “s”) of what the issue may be, narrow scenarios down through a process of elimination, spend no more than 20–25 deeply focusing while going through the code, and then if your still having trouble reach out to a teammate.

Always be Learning

Problem:

I used to think that after i got my first job as a developer, growth would just fall in my lap. I felt that once i got a job, all those years of struggling through tutorials, documentation, books, uncertainty, and all nighters would be over once i got my foot in the door, and boy i was wrong. Getting in the door only amplifies the need to constantly be learning. My first couple of months on the job, revealed even more knowledge/skill gaps than i even thought of. Then down the line on the quest of searching for a new job, with the emergence of React, React Native, Redux, GraphQL, and an assortment of newer technologies i realized how far behind i was on that.

Solution:

Growth as a developer isn’t linear, its a rocky road. A bodybuilder gets stronger with progressive overload, a singer gets better by daily vocal practice, and the path of a developer is no different . The best developers don’t get better simply by showing up, coding, and drinking coffee. They have to constantly beat on their craft, be willing to learn new things , and get use to discomfort. I’am talking pure blood and sweat.

The biggest obstacle in programming other than yourself, is the problems you’ll constantly face, that force you to learn and apply new things. And if you don’t keep the mindset that you are a lifelong learning, forever a beginner, you’ll fall behind in this field very fast. Every problem at the job, requires a different approach, different solution, and different skillset. Be it regex, a new technology, framework, concept, ect. Then aside from your current job, you have to keep up your technical prowess up to date to be remain employable, in the case you have to suddenly switch careers. Nobody said this would be easy.

Keep the Passion Alive

Problem:

I knew i was destined to be a programmer since 16–17. But somewhere along the line of work, bills, life, stress, office politics, deadlines, and depression, i lost the drive to to learn, and build things. I explain it more in this article

Solution:

Figure out your why.

Stay in tune with the reason you started programming , so that when life hits, and it will you have something concrete to stand on.

Communicate Effectively

Problem:

I never understood how CRITICAL it is for a developer to be able to convey their message. All my life i’ve been an introvert, which in turn hurt my communication skills. I would talk quickly, so that i could end the conversation as fast as possible due to shyness, and i would occasionally stutter when trying to portray my thoughts, due to words come out faster then the thought forming in my head.

Not resolving communication issues can give others the idea that you either don’t care, are unprofessional, mean, unintelligent , are simply not vested in the company. This can also hurt you when your solving problems, because you’re not talking to people on the team, who may have a better solutions than you. It could hurt your pay, because you cant clearly communicate the value you add to the company, when it’s time for a promotion. It could hurt you when apply for jobs because you cant communicate why a company should pay you more during negotiations. It can hurt your relationships at the company, because people simply have no patience for a person who cant communicate well.

Solution:

Learn communication skills immediately.

If you were lost in another country, couldn’t speak the language, hungry, and didn’t know how to get back home, you would immediately understand the importance of communication. This example, although extreme is a metaphor for how your career and life could be if you don’t improve your communication skill.Whether through youtube, books, talking with strangers, and or public speaking, work on communication.

Don’t be scared to get your hands dirty

Problem:

Like i said in the section of “Always Be Learning” i figured that once i got a job as a developer, the bulk of the learning was done, i could solve any problem that was presented to me, with all the knowledge i’ve accumulated over the years. Then the reality hit, of possibility of having to deploy a production database, do rolling updates, refactor code written over the course of years, by developers with more experience than me, understanding how microservices like SQS, Lambda, S3, SendGrid worked, and understanding concepts i heard thrown around the office like deadlocks, transactions, concurrency, cpu spikes, ect, and i froze up lol. So when someone would ask me to solve an issue, which truthfully i know i could, i simply pass the baton, simply implying i had no experience with the issue.

Solution:

Everyone wants to experience peaks, but no one wants to go through valleys. But the irony of life, is to get to the peaks, you have to go through the valleys. Once i started taking on these obstacles head on, my confidence grew, i started understanding more of the codebase, and the underlying technologies. Nothing had me more elated than when i finally understood how SQS, Lambda, asynchronous control flow worked.

Don’t Judge Yourself Based on Others

Problem:

When i started, i used to judge my performance, knowledge, skills, and status in the company based off of my peers. I was elated to have my first job as a developer, but also felt like i wasn’t good enough at times based on other developers at the company…..who were there for YEARS. I would question myself about people who seemed to pick up certain concepts naturally, that took me blood and sweat to acquire. I would struggle with a project, then watch another engineer come in and seem to take the project by storm.

Solution:

Judging yourself based off of others, is akin to judging a fish based on its inability to climb a tree. In life, some people are just blessed through either putting in more work and hustle, genetics, their network, and or seniority. And the truth of the matter is that focusing on those factors wont get you any better. Winners win because they focus on winning, while losers focus on winners. Just focus on you, consistently improve 1% everyday, and you’ll get there.

Thanks for taking the time to read this article. If you enjoyed please leaves a clap.❤️

Connect With Me:

Linkedin: https://www.linkedin.com/in/will-sheppard-81a184145/

Github: https://github.com/willshepp28

Twitter: https://twitter.com/willshepp_dev

--

--

Will Sheppard

Seasoned software engineer with 5+ years of experience in JavaScript, React, GraphQL, and AWS