Recently, Pearson/InformIT reached out to its authors and asked us what advice we give to beginning developers. Here's my contribution!
Several times a year, I teach groups of people how to program in Python. These are absolute beginners. Many times, the first time they opened up their terminal or command prompt was that morning.
By the end of the class, they’ve learned enough to make a fairly robust program. They can save data, use files, make calculations, loop, and test for conditions. They know how to read error messages, and they’ve played with imports and libraries. I get one question, every time:
At first, I told them to think of a cool project. Surely, they must know of one! No, everything neat they could think of had been done already. Or, they had an idea, but it was too big. They’d have to learn 3D animation, or advanced calculus, or a tricky API. Finally, I remembered the first project I had really undertaken on my own. It was a loot tracker for a game. My friends and I wasted a ton of time keeping track of who got what spoils when we played together in an online game. I ended up making a simple app to keep track of possible loot, who could use it, and who had gotten the last cool item.
It didn’t make me millions. No one ever used it outside of our little group. But it taught me more than most classes could. I learned how to use databases and secure them. I learned about linking up forms and organizing my code. I learned how to maintain my server, and I learned how to upgrade my system without breaking my app.
The annoyances in our lives, as much as they make us grit our teeth, are also the best places to start. The fact that they exist means there is a void in the existing technology. Perhaps the bit of code hasn’t been written, or it’s prohibitively expensive. Perhaps it’s too clunky, or terribly behind the times. Whatever the case, it represents a place the student can start their journey, and create something that makes their life, and perhaps the lives of others, better.
Here are the rest of the responses, from all over the various tech communities! They should be adding to the list all month.
I spend much of my time in the OS community teaching. I teach kids, I teach beginners, I introduce experts to new concepts. At nearly every conference, I will at least attempt to teach a class. I love teaching, and I also try to talk others into teaching as well.
There’s one problem I’ve noticed with those that are interested in teaching, and it’s something that’s not really discussed openly. Normally, people make a single snarky comment, then walk away. The topic?
Why is this a problem?
When I’ve taught classes, I’ve almost always taught to a mixed crowd of Macs, Windows laptops, and the odd Linux machine. The more novice the class, the more likely it is that I’m going to be dealing with Windows people.
People in beginner classes expect you, the teacher, to know how to deal with their hardware. Yet, when I bring up the Windows problem, people scoff. The most common answer?
“They should get a better laptop.”
I’ve endured tirades about how they should just install Ubuntu, or how a Mac is really just as cheap as a Windows machine. I get to hear about how many years it’s been since they touched a Windows machine. I’ve heard so many stories about how people moved their loved ones onto Ubuntu or Mint or a Mac and that they loved it and everyone else should just do the same.
It’s a problem because it’s snobbery, and it doesn’t belong in education. Why do people buy Windows? There are many reasons why people might own a Windows machine. Maybe they like gaming. I know that’s why my husband and I keep Windows laptops around. They may not have a choice, since that’s what their work gave them (not all of us can demand MacBook Pros). Maybe the suite they work with only works on Windows. They might be like my parents, and scared to learn a new OS.
Or, maybe the decision is economic.
The cheapest Mac starts at a grand. I can easily find laptops for less than that. Sure, they may not have the screen or build or battery life, but that’s not the deciding factor for a large part of the population.
When money is unstable, it can be hard to save money. Savings are pecked away at by daily life and a host of things that cannot be cut. When you’re in this situation, you tend to get chunks of cash in on an irregular basis. You get a Christmas bonus, someone dies and leaves you a bit of cash, or your tax return clears.
Everyone I know who lives at the lower end of the middle-class spectrum or lower has a death or taxes laptop.
If you only get these bits of income in every now and then, you try to make them count. You get things replaced. You pay off a large debt. You buy big ticket items. A laptop is a common choice, but you want the most for your money. You won’t be upgrading in two years. You may be using this laptop for the next eight. So you go for the most memory, space, and video that you can get for that little pile of cash you have.
And if you want that, you’re going to get a Windows machine.
We can shout all we want about stability, or how you still have a MacBook from 2002 that works fine, or how you know of an indie seller that has cheap Linux laptops. At the end of the day, the Windows line is going to win. They are not the enemy At this point, the people I talk to often get mad at the users. They’re blind! Sheep! Technophobes!
The users are not the enemy.
Sure, we’ve all had our infuriating experiences with Windows. Some of us have watched the political wars, both from afar and in the trenches, and we have bad tastes in our mouths. We’ve been held hostage at parties to an infected install of XP that we’ve been asked to clean up, while everyone else takes in holiday cheer. We’ve realized that our children’s school system has been locked into a contract that only exposes the kids to Windows. I get it. But you’re getting mad at the wrong people.
These people did not buy the OS they did in order to make you mad. Really. They did it because it was the cheapest option, or the one they were the most familiar with, or they had specific needs with regards to their OS, and they weren’t confident enough to research alternatives on MacOS or Linux. So stop being mean to them by being snarky or ignoring them.
But if they would just try…
There’s probably something in your life that you use, but you’re not 100% knowledgeable about. How would you feel if someone ran in and, without explaining themselves or gaining your trust, told you to get something wildly different and foreign? For me, I felt this way the first time I walked into a bike shop. I was interested in getting a bike to tool around town. I had grown up with this sort of bike:
It’s basic. One gear, break by pedaling backwards. The bars were at a certain angle, one you could grab while leaning over or sitting up straight. Sitting up was common, because who doesn’t want to pretend to be Julie Andrews now and then? You got one kind of tire. The one choice you got was color.
Then, I went into a bike shop. None of the bikes looked like that. They pointed me towards something like this thing:
Wait, there’s wires everywhere! And the handlebars are so tiny… And what’s with the seat and handle angle? My arms would need to be four feet long to sit up! Wait, the brakes are where? Why can’t I just pedal backwards? And that seat! That’s not comfortable looking at all. Wait, why are you asking me about tire choices WHY IS THIS EVEN A THING?
Whenever I feel the desire to rush a Windows person to a new OS, I remember the feeling of being slightly panicked and wondering if this salesperson was just trying to con me into a bike that wouldn’t work for me, and I back off. I earn their trust by showing that I do know how to deal with Windows, and that I can get Python working on their system. Then, once I have their trust, I start to explore whether they might be interested in checking out another OS.
And note that I say might. They might never move over. That’s okay, because that’s their choice.
What do you need to know how to do?
If you haven’t run away at this point, good! Let’s talk about what you need to know in order to work on a Windows machine.
You’ll need to know how to get the command prompt up. In general, all you need to do is hit the Windows key and type ‘CMD’ + Enter.
You need to know how to figure out what version of Windows you’re on. Don’t just ask the student. This is a chance for you to prove that you’re not going to break their machine. Pull up the command prompt and type in ‘ver’ or ‘systeminfo’. At least one of those should work.
You need to know how to install Python on Windows, both two and three. This is not the time to be Ultimate Nerd. Use the installer. You might even want to trust the defaults, though I know you’ll probably look, anyway. If you stick with defaults, the student will have an easier time debugging down the road.
There’s a good chance you’ll need to update the system path. If you pull up the command prompt after installing Python and get an error when you type ‘python’, your path needs help. This is slightly different for each system, so some googling might be in order.
If you’re teaching something other than just Python, you need to make sure that you know how to install THAT package as well. Oh, and while you’re at it? It’s a good idea to get pip and easy_install working as well.
Finally, you should get familiar with some sort of editing program for Windows. I generally show off IDLE first (since it’s great for beginners), but it can fall short when you’re trying to work in a project that has items other than Python files. I like Notepad++. It’s free. It’s updated pretty often. It looks fine. It’s not crazypants like Eclipse.
And that’s it. That’s not a huge list, all told. But just knowing how to do those things can open you up to a much wider community of learners, and give you a chance, after you get friendly, to maybe move them over to your OS of choice.