Step 1 – How to Troubleshoot
You may be surprised that we start by acknowledging that things can and
will go wrong. But we believe it is best to be honest and proactive. As
with all new skills, you are going to get frustrated while learning to
program. Here are a few tips that may help you work through the
frustration and solve many of your own problems.
Language Learning
Do not forget you are effectively learning a new language, or even
languages depending on which lessons you try. You will not be fluent in
twenty minutes. But you can expect to start building your skills to the
point where you can complete simple tasks, progressing into more
difficult situations. When you are presented with new code, it’s
important that you take the time to really understand it.
If you whip through the lessons cutting and pasting code snippets you
may end up with a program that runs, but you will not understand it, nor
will you be able to generalize the skills and write your own programs.
Once you’ve got something that works, try making a backup copy and then
changing things in your code one at a time. If you can predict the
effect that your changes will have, you have a good understanding of
what is going on. When you are surprised by the effect of a change, you
have an opportunity to learn something new. When you’ve got something
that doesn’t work, make a backup copy and then try eliminating things
that you don’t understand. What is the simplest version that you can get
to work? Once you have that version, you can try adding in new code, one
thing at a time.
Search Engines
If you run into difficulties when writing computer code the great news
is that the answer to almost any problem can be found online. Computer
programmers constantly seek and give help on forums and mailing lists,
and the questions and subsequent answers are readily available. This
means the Internet is usually your best resource for finding help. If
you run into a problem, the first thing you should do is type your
problem into a search engine. More often than not someone has already
asked your exact question, and other people have provided a range of
answers. You might even find entire websites dedicated to solving your
particular problem. When you are just starting out, it is very unlikely
that you will come across a problem that no one has encountered before.
Likewise, if you encounter an error message that you don’t understand,
cut and paste that error message into a search engine and surround it
with quotation marks. Typically you will find dozens of explanations for
why this error appeared and how to fix it. The more specific that you
can be about your problem, the better the results you will find. Don’t
be discouraged if you don’t find the answer on your first search.
Rephrase the search terms and try again.
Forums
If you’ve Googled it, Yahoo’d it, and tried various combinations of
teas, coffees and energy drinks to no avail, you’re going to need to ask
for help. There are many Internet forums and mailing lists to which you
can turn. At the time of writing, our favourite forum for general
programming questions is Stack Overflow. There is also Tutor, a
mailing list where people who are learning Python can ask questions, and
people who are interested in teaching Python can answer them. If you are
learning another language or skill, chances are there is a similar forum
online dedicated to it. Try a search engine to locate the one that is
best for your needs. At any given time there are swarms of friendly,
knowledgeable people just waiting to answer your question. If you post
your problem in a courteous manner, with a little bit of luck you will
have a solution within a couple of hours. Keep in mind that it is bad
form to post a question in more than one place in quick succession. It
may not be the instant gratification we’ve come to expect, but don’t
forget, these people are volunteering to help you, and most probably if
you’re desperate enough to ask for help, you could use a few hours away
from the keyboard anyway. Go for a walk, take a nap, or do something
else to clear your mind and some new ideas will come to you.
Asking Good Questions
Clarity and specificity are your friends when it comes to asking for
help on a forum. The old FAQ page on Stack Overflow’s website is
great reading for anyone looking to ask a question about programming
online. Even if you do not use the Stack Overflow forums, the messages
here are essential. Remember, the people who read forums and offer their
expertise are busy; make it easy for them by carefully thinking out your
problem before you ask. Likewise, make sure you are asking a specific
question to a narrowly defined problem. For example, don’t post
something like: “Why won’t my code work?” Instead, try: “Why am I
getting a syntax error when I try to Push a value into an Object?”
Always post the relevant section of your code (and only the relevant
section of your code) along with your question. If possible, remove any
unnecessary bits that are not immediately relevant to the question to
make it easier for experts to help you solve your problem. If the answer
you get does not do the trick and you are still stuck, be polite and try
rephrasing the question. Remember, don’t bite the hand that feeds you;
these are volunteers and they’re trying to help you!
Debugging
When fixing problem code, systematically change one thing at a time and
retry your program after each change. Often if you make three or four
changes before retrying the program, you will solve one issue, but cause
another one. This is frustrating and confusing. By changing one thing at
a time and making sure it works before moving on, you will prevent a lot
of confusion. It also helps to make notes of the things that you have
tried, and of the solution when you find one. The more time that you
spend programming and debugging, the more familiar various kinds of
errors will become.
Sometimes the problem is on our end. We do our best to make sure errors
don’t creep in our lessons, but mistakes do happen. If you’ve looked
over the problem and are convinced we’ve made a mistake, or that no
matter what you try you cannot get the lesson to work, post a comment on
the lesson. We’ll take a look and see if we can figure out what’s gone
wrong. Sometimes its a typo on our end. Sometimes our explanations could
use a bit of beefing up. Either way, you’re likely not the only one
having trouble. And we don’t want that, so let us know!
Other Resources
As you’re working through the tutorials here, you will want to have a
few key resources open in your browser. Until you become familiar with
the programming languages that we’re using, it is nice to have a few
different introductory treatments to look at. There are many good online
resources like the ones listed below, which are great for Python and
HTML learning. Other programming languages have equally valuable sets of
introductory texts and websites which you can find online.
As you proceed (or if you already have some programming experience)
you’ll probably prefer more general references like:
We also like to have a few printed books ready-to-hand, especially
Bring On The Code!
Now that you have Step One (Troubleshooting) mastered, you are ready to
dive in. Let’s get programming.