by Ali Spittel

My best tips for new developers: advice from a (mostly) self-taught software engineer

xv-ON8eNLsMTu99jneXEUH1PXV3KtNyzK01Q

The most common question I get from blog readers is “What is your advice for new programmers?” So, I thought it was time to write up my thoughts.

I will write up my full story in the future, but I took two computer science classes in college. Then, I got a software engineering internship shortly after. I started doing web development work. Initially, I worked on the backend and then eventually on the frontend. My college definitely did not teach web development in those first few computer science classes, so I taught myself.

I don’t think my story is unique. All programmers are self-taught to some degree, whether they’re fully self-taught or have a masters in computer science. Everyone has taught themselves something like RegEx along the way. In fact, self-teaching may be one of the most important skills you can have as a developer.

In addition to my own experience, I also teach people to code as my primary job and for organizations I volunteer with. So this article is drawing on that experience as well.

So here are my tips for getting started.

My Tips for New Programmers

1. Have your reason, and remember it

If you want to start programming, there has to be a reason for that. That reason can be you love writing code or that you want to have a more lucrative career. It could be that you are doing a bunch of Excel work and you want to make that more efficient.

Keep track of that reason. Programming is hard, and you will get frustrated sometimes. It is essential to keep that reason in mind and to stick with it. You could put a sticky note on your computer or a note on your home screen. Or (like me) write it on your mirror with a dry erase marker.

2. Build a solid foundation

This may be a less common piece of advice, but I think its really helpful. Before you start writing code, if you haven’t looked at math in a while, I would revisit the concepts from Algebra 1. Programming is built on Algebra 1 math, like functions and variables. Understanding these concepts outside of programming will be super valuable in the future. I recommend Khan Academy’s Algebra 1 course!

let x = 1; // conceptually the same as algebraic variables!
function add (x, y) { // the same as algebraic functions!  return x + y}

3. Find a community

Finding a community to support you as you start writing code will be helpful. This community will be valuable, because other people will be in the same place as you. They can offer resources that helped them and offer encouragement.

I would suggest finding a meetup in your area as the top solution here. Even small cities tend to have a group somewhat nearby. If there isn’t one, I would suggest dev.to and the CodeNewbie community as two excellent alternatives. CodeNewbie has a weekly Twitter chat, a Slack group, and podcasts to listen to. Dev.to has a bunch of blog posts and a #discuss tag where you can post your questions.

4. Break down problems into smaller ones

One of the most important parts of programming is taking a large problem and breaking it into smaller and smaller pieces until those pieces are solvable. If you are looking at a blank text editor not knowing where to start, it may be because you haven’t broken down the problem enough!

5. Pseudocode

Related to the previous point, a lot of times it is beneficial to write down in detail what you are trying to do in plain words before even trying to write code. This process is called pseudocoding, and it can take whatever form you want it to. It can also be helpful to solve a problem really slowly on paper first. You think about or even write down the individual steps you are going to take to solve that problem.

// if the user has more than ten points//     display "winner" on the page// else//     keep playing

6. Embrace the cycle of learning

If you’re learning to code as a second career, especially if you’ve been away from the classroom for a while, learning how to learn is going to be a big part of your process. There are lots of ups and downs involved, which is very natural! I would brace yourself for that rollercoaster before starting out.

7. Start with free resources

There are a million and one resources for learning how to code. Some are free, and some are paid. I would start with the free resources. Make sure you like writing code first. Then after that, you could think about moving onto paid resources or even a bootcamp.

8. Find your niche

There are a lot of worlds within programming, so try to find one world that you love and focus on that. Instead of trying to learn 8 programming languages, frontend and backend, compiled and interpreted languages, all the text editors, developer tools, and so on, find a few things you are really interested in and get good at them.

9. Get good at pattern recognition

Recognizing patterns in code is one of the most important skills you can have. When people talk about writing “DRY” code (i.e., Don’t Repeat Yourself) they are talking about reducing the patterns in your code. I recommend the game Set for pattern recognition — you can even play online each day on the New York Times’ website!

// not DRY codelet reversedString = string.split("").reverse().join("")let reversedString2 = string2.split("").reverse().join("")
// cleaner code
const reverse = string => string.split("").reverse().join("")let reversedString = reverse(string)let reversedString2 = reverse(string2)

10. Make good habits early

It will be easier to write clean code in the future if you get into the habit early. Bad habits can be hard to break. Here are my tips for writing cleaner code. If you are doing web development, running HTML and CSS validators on your code can tell you exactly what to fix!

// Not great
function avg (a) {  let s = a.reduce((x, y) => x + y)  return s / a.length}
// Much better!
function sumArray(array) {  return array.reduce((number, currentSum) => number + currentSum)}function averageArray(array) {  return sumArray(array) / array.length}

11. Identify your learning style

Everybody learns differently. Whether you are a visual, audio, or kinesthetic learner, you learn differently than the next person. Identify how you learn best, and rely on resources that fit that style well. For example, I learn best from reading the documentation and its code examples. I lose focus easily in tutorials.

12. Struggle, but not too much

Struggling a little bit when you are learning is really important. You want to solve the problem yourself and find an answer using resources that exist. That said, it is unproductive and demotivating to struggle with a problem for too long. After a few hours, reach out to someone for help!

13. Get comfortable with failure

Programming is hard, and finding the right answer won’t be immediate. One of the most pivotal moments in my programming journey was failing at writing a Sudoku solver. It can be challenging to adjust to not getting everything right away and seeing those error messages. But that is a huge part of programming.

14. Love your error messages

Error messages are super helpful! When you are starting out, that red error message can be terrifying! One huge step to take is to read through those messages, understand them, and then use them to solve the problem. In fact, you will get to a point where a program silently failing will be far more annoying than a useful error message.

vKkyrwV1Wlb-BZGX-6ehvK-Ur2qBEqZ8mkzD
Python Error Message

15. Some programming languages are easier than others

There isn’t a right answer for what programming language to learn first. Some will be easier to pick up. My top three are Python, Ruby, and JavaScript. I like them because they have a large community behind them, have more straightforward syntax, and are interpreted, so you don’t need to go through a compiling process.

16. You don’t need to know everything

It is straight up 100% impossible to know everything about programming. Nobody knows every programming language, every single method that’s out there, every library and framework, or the perfect solution to every problem. Don’t worry about learning everything, just focus on what you do know and extend that.

17. Focus on depth over breadth

Learning one thing in depth is better than learning a tiny bit about a lot of things, especially at first. That in-depth knowledge will carry over and make learning that next thing easier. Put the blinders on, so you don’t get tempted to drop what you’re learning and move to something new.

18. Focus on the fundamentals first

The fundamentals of programming are invaluable. You will use them no matter what you end up doing with programming. Focus on having a solid knowledge of loops, conditionals, functions, data types, and (in most languages) object-oriented programming before moving on to learning about that awesome library that everyone’s talking about.

It will be so much easier to learn that library once you know the fundamentals really well. They will also carry over from language to language, so you only have to really learn them once. After that it’s just syntax!

19. Get good at Problem-solving

Problem-solving is the basis of programming! Getting better at this is critical. Solving riddles, writing code on paper, and breaking down problems can really help with problem-solving.

Something I sometimes see with new developers is that they approach programming like a research problem instead of a problem-solving project. If they Google something well enough, then they’ll have a solution. Yes, Google and Stack Overflow are super helpful, but rely on yourself sometimes too. Try something out a few different ways before researching it. Or, research small parts of the problem instead of the problem itself — i.e. “turn a String into an array JavaScript” instead of “reverse string JavaScript.”

20. Get good at researching

One of the biggest things to learn is how to find good answers to your questions or to learn new features of your language or library. Using Google is important, so is joining communities and subscribing to resources. The Google template I normally use is “problem language/framework/library” in as few words as possible and without filler. So, “sort array JavaScript”, “spin element CSS”, or “create router Vue.”

21. Build projects you love

When you’re learning, you will be building various projects to practice (and show off) your skills. Pick project ideas that are interesting to you — you will be much more likely to finish them and want to put work into them. Related: complete those projects. A few really good finished projects is way more impressive than a bunch of half-finished ones!

22. Compare yourself only to yourself

There are a lot of people learning to code out there. Don’t compare your progress to someone else’s. Instead, compare yourself to previous you and focus on your own growth.

23. Do a bunch of code challenges

Doing quick code challenges can really help solidify the fundamentals. They are great for problem-solving and practicing for interviews. I post one on Twitter every day with the hashtag #CodingPuzzle if you want someone else to solve them with!

"""Find the element in an array that only occurs oncefrom https://www.hackerrank.com/challenges/ctci-lonely-integer""" from collections import Counter
def lonely_integer(a):    a_counter = Counter(a)    for l, count in a_counter.items():        if count == 1:            return l

24. Celebrate your wins

Learning to program can be a really difficult process, so when you accomplish something, even if its small, celebrate it! I keep track of my wins in Google Keep so, if I have a bad day, I can come back to those wins and remember them.

25. Programming is awesome

Programming is really cool because you get to build things. I always come back to this Sandi Metz quote:

Those of us whose work is to write software are incredibly lucky. Building software is a guiltless pleasure because we get to use our creative energy to get things done. We have arranged our lives to have it both ways; we can enjoy the pure act of writing code in sure knowledge that the code we write has use. We produce things that matter. We are modern craftspeople, building structures that make up present-day reality, and no less than bricklayers or bridge builders, we take justifiable pride in our accomplishments.
This all programmers share, from the most enthusiastic newbie to the apparently jaded elder, whether working at the lightest weight Internet startup or the most staid, long-entrenched enterprise. We want to do our best work. We want our work to have meaning. We want to have fun along the way.
Sandi Metz

Keep in Touch!

If you liked this article, there’s a lot more where it came from! I send out a newsletter every week with my favorite links and what I’ve written that week. You can also follow me on Twitter to see my posts as they come out!

Originally published at zen-of-programming.com.