Top 5 Principles for a Software Developer
Posted13 Apr, 2019
Read Time5 mins
Updated29 Sep, 2019
Things I wish I knew when I started my career as a software developer
1. Develop Side Projects in the Areas of Your Interest
As software developers, we ought to write code to solves real-life problems. When we start out inexperienced, we tend to think we don't have what it takes to build something professional, polished, and useful. So, we decide to enroll in bootcamps and take courses to feel competent in writing code. There is absolutely nothing wrong with that.
The problem is when we learn without purpose. It's when we take a new course or learn that new framework because everyone else is doing it or it looks really cool.
The first step is to understand why you're learning what you're learning.
The main question to ask yourself is, "Will this help me solve a problem I'm having right now?" If not, I would not waste time on it. You need to apply what you learn right away for it to become ingrained in your mind.
The goal is to build skills that become 2nd nature and yield tangible benefits. So, if you're wasting time learning course material that is not being applied, that's time that could've been used for tackling an actual problem and learning though overcoming obstacles.
You may ask, "What "actual" problems would I have?" That's where side projects come in. Take problems you have at school or work or your own personal life, and build your solutions for them.
There's no pressure to build world-class software. The goal is to start and FINISH projects. While building these projects, you will encounter issues that challenge you beyond your current skill set. That's where you should seek out certain courses and blog articles to fill in the missing gap in knowledge.
After working on a few projects, you will have an attractive portfolio to showcase to potential employers, or a project that can become a viable product. The experience of delivering real working and usable software will be the best reward and asset.
2. Develop using Rapid Feedback Loops (REPL)
REPL stands for Read-Evaluate-Print-Loop. To keep it simple, it's about making chances to your code and seeing the output of those changes right away. It makes coding very interactive, where developers can learn by trial and error quickly. It's a rapid feedback loop.
One great example is CodePen.io which is a REPL for web development (HTML/CSS/JS). Having a REPL like CodePen on the side can quickly answer and test questions as they arise without needlessly surfing the web.
Unlike in web development, a REPL is not always available for the technologies you're working with, which is why you should "create" one.Creating a REPL could involve the following things:
- Writing automation scripts that perform a long series of tedious setups to generate the output
- Constantly deploying to a server after small sets of change
- Automated testing (i.e.think Red-Green-Refactor approach in Test-Driven Development)
- Using version control system (Git) to revert the project back to a working state multiple times in quick successions after "breaking it" in hopes of solving the issue
The point is that having a REPL can 10 X your development time, and it's worth the extra time that it takes to setup it initially because you will save more time in the long term. With a REPL in place, you can try more things in less time, and trying more things will lead to the solution quicker.
3. Don't Optimize Prematurely but Do Optimize Eventually
When we're trying to solve a technical problem, we can think of complicated solutions that demands lots of effort and foresight. While it's great to plan out everything in detail well ahead of time, I find that over complexity tends to stop momentum in developing a viable solution early on, which prevents a great solution from ever materializing at all.
It's important to get your hands dirty quickly and move in the general direction of the solution. The code or solution we develop initially may not be the greatest, but we can quickly learn what works and pivot from there. When we plan too much without experience, it's highly likely that we focus on the wrong things and miss the crucial 20% of things that were going to drive 80% or more of the results. Most of that 20% was going to get discovered by getting started sooner.
Once we do get started and make progress, we should start noticing patterns or bottlenecks the may need improvements. This is where knowing longevity of the project plays a key role in optimization. If newer features are added regularly or anticipated, then spending the time to optimizing the codebase further is worth it because it will exponentially save more time when making modifications to that codebase later on. The optimization should scale with demand.
4. Invest in Time-Saving Tools
Something I commonly see in other software developers is that they are overcautious in spending money on products that will make their work easier, faster, and enjoyable. This can be training material, software products, and productivity tools. Just like spending money on a great bed is vital for getting that quality 8 hours of rest, doing the same for your work life is just as important. If your employer doesn't reimburse you, you should still get it. It's your time, career and life.
You will probably use those tools outside of work anyway. If you think long-term, the cost of buying the tools is nothing compared to the output you will generate. The real question is: do you view yourself as a worthwhile investment? If so, then invest in yourself and appreciate in value.
Here are my top 3 purchases:
- PluralSight - for learning new skills on demand
- JetBrains - for IDEs that save me hours of time everyday jumping through various codebases and tech stack
- Noise Cancelling Headphones - block out all external noise and distractions so I can concentrate fully on the task at hand
I use these products because they reduce the time it takes for me to solve problems, which lets me solve more problems with the same time and increase my value as a developer.
5. Code with Zero Interruptions
Software development, like many crafts, requires stretches of deep concentration to produce valuable results. Solving complex problems in the your mind requires holding many variables and contexts in your short term memory, which can easily be flushed if something outside of work distracts you. Getting back to the same intensity of focus can take 10 to 20 minutes. Once you have that productive level of focus, keep it for 90-120 minutes before taking a 10-20 minute break, to recharge your brain, eyes and body. Doing 3 to 6 of these cycles everyday is the sweet spot.
Here are my 3 ways of achieving deep concentration:
- Investing in noise cancelling headphones - helps me block out distracting conversations and noises
- Close all email/messaging clients (or change status to Do Not Disturb) - you will only get contacted if something is truly urgent. Set aide time for emails separately.
- Have a personalized, prioritized list of tasks that need to be achieved and put all energy on a single item at a time
Thanks for taking the time to read my post. If you have any thoughts on this, please comment below. I'm happy to talk and learn.