Two month ago, Josh Kraus wrote an article for SkilledUp titled Self-Taught Developers: 6 Tips To Get You Started. As part of the article, he asked me a few questions. Here are all the answers to his questions. As I'm entirely self-taught, maybe this will be useful to somebody who is trying to learn how to code out there. Comments, questions and suggestions are welcome on Twitter at @nicoschuele or by email.
1. What was the very first step you took when beginning to teach your self web development?
I first started by imagining what I wanted to build and worked my way backwards to figure out what I needed to know in order to build my ideas. My first concrete step was to take a credit at a bank so I could order some books from this then new startup, Amazon, that could ship US books to Switzerland. $700 worth of books.
2. What is the first thing you'd tell a beginning developer to do? What do you wish someone would have told you?
To a beginner, I'd say that coding is about building stuff. If you want your learning to be effective, you need to have a lot of ideas about things you'd like to make. Learning for the sake of learning won't bring you very far.
When I started, these were the old days of classic ASP and VBScript. I wish someone would have told me to spend a bit more time outside of the language/framework I chose and explore other languages and methodologies. It would have saved me some time when ASP just disappeared. A junior coder uses the tools he knows. A senior coder uses the tools best suited for the task at hands.
3. Any advice on particular resources to use?
Stay away from gimmicks. Today, there are way too many outlets trying to make money from teaching as learning how to code is a hot stuff at the moment. Keep an eye open for keywords such as "easy". When a resource tells you "easily learn"... ...run the other way. The outlets that "let you code from the comfort of your browser" should be avoided. In the real world, programmers use real tools and they need to know how to set them up properly. Even though we are in 2015, your best bet is still reading books. Before diving into a book, try to figure out what people who read it before you learned from it. Ask what they have built after reading it.
4. Have learning opportunities and resources changed at all between when you first started learning, and now? How so?
A lot! At the time, there were nearly no online tutorials, documentation outside of books was scarce. Video on the web didn't exist. Academia was also not prepared for what was coming and was still teaching students things like COBOL and mainframes programming. Without knowing it, I was lucky I never went to school as I was learning things that students at the time didn't even know existed. It changed a bit today but I still think that schools don't adapt fast enough to the pace of change in the industry. I see that when hiring a junior developer.
5. What are some common challenges novice developers face, and how can they overcome them?
The biggest challenge, and probably the most understated one, for a beginner is to know what he doesn't know. How can you learn something if you don't know what it does and that you will need it? My advice would be to draft a rough learning path - shameless plug: you can use one of mine -, listing learning material you intend to follow and have it reviewed by a senior developer. The web is full of forums and communities that will help you validate your learning path. You can even contact me: a lot of people do and ask me if the resources they gathered for learning are good enough.
6. What are some common mistakes novice developers make when trying to teach themselves?
They don't build enough things. It doesn't need to be a full featured Twitter clone. To Do lists or simple note taking apps are fine. Novices spend a lot of time following tutorials, books, videos and copying the examples. They should absolutely come up with their own things that they build aside from their course examples. That's how they'll face real world issues. That's also what will highlight what they don't know yet. For example, take one of the introduction book on Rails: even though the book will go through building one app from start to finish, a student should have built, or tried to build 20-30 apps by the time he reaches the last chapter.
Another mistake is to only focus on code. A novice should never forget that coding is about solving problems. If you can't understand the problem, there are little chances that you'll solve it. I mostly see that in the corporate world where there are tons of programmers, loaded with diplomas and certifications who simply can't understand the problem the non-programmers would like to be solved by an app. Always learn within a context. To be honest, it is this context that should have brought you to "hey, I need to learn how to code". Whether it is gaming, financial trading, social media or anything else, you need to understand the context that you will help by writing code for it.
7. If you were ever at a point where you wanted to give up, what kept you going? What did you tell yourself for motivation?
Honestly, I never had that happen to me. I'm not a good musician, I can't draw my way out of a paper bag but I consider myself a creative person. Coding is my creative outlet. I need it. And I need to learn. My strongest motivation is to think about these things I'll be able to build which I can't today. Here is why I love coding so much.
If early in his learning path a student struggles with motivation, I'd ask him if there are other things he'd rather be doing than learning how to code... ...and go for that right now rather than slaving on tutorials as ultimately, he'd find no joy in coding. Everybody can learn how to code to a certain degree but that doesn’t mean everybody should be a coder.
8. How long did it take you to get to a level where you could code with confidence?
Not there yet. I've been coding for two decades and I'm not confident in my coding. A quarter of my week is spent learning and experimenting. I'm confident that I can find a solution to a given problem because I know how to search and I know the terminology. There's this huge misconception aspiring programmers have: they think they need to learn
c and that boom, there will be this magical point in time where suddenly they can call themselves a developer. Like, yesterday they are not a developer and today, because they finished this book or that tutorial, they are.
Input the code in the first tutorial you ever read and execute it. Done? You are a coder. You wrote code and it produced an output. Most likely
Hello, World!. Now, for the rest of your career you'll expand on that and learn to do more than printing "hello world" in your console. I'm always wary of people introducing themselves as expert coders. What does it mean to be an expert coder, anyway?
9. Any thoughts on making yourself a practice/study schedule?
I recommend to the people I teach to practice every day. At least 30 mins but an hour is advised. Learning how to code is like learning an instrument or a foreign language. It's by practicing every day that you'll feel coding is a natural part of your life and is included in your routine. I don't recommend to cram 8 hours on week-ends and nothing during the week. You want to commit what you learn to long term memory.
10. Any thoughts on participating in forums/online communities as a way to grow?
There's no question here. You can't grow in isolation. As early as possible, try to answer questions other people have. Go create yourself an account on StackOverflow and attempt to answer questions written by others. Do that on forums intended for learners too. It will help you master concepts more quickly. You understand a concept when you can use it. You master it when you can explain it with your own words.