Take Apart A Computer: Follow-Up Post

(If you’re here because you want to know what to do with your shiny new Linux DVD, you can skip about the first third of this.)

Today I attended Take Apart A Computer Day, hosted by the Women In Computing club here at UNI. This was kind of a beta test run for a potentially larger event later on.

I worked together with two other girls (if you ladies are reading and want your names here, let me know–but I don’t generally mention names on this blog unless asked, for people’s privacy) on a huge old box. We have no clue if it worked beforehand (the consensus after two professors and all three of us took a crack at testing it was no), but it definitely isn’t working now, so I guess that’s a success. After all, the event isn’t called “Put a Computer Back Together in Full Working Order Day,” and we did get it apart. Eventually.

So, we learned a couple things from the beta run for next time:

  1. Test all the machines beforehand–after moving them.
  2. The test monitors that the computers also need to be tested on a known working box, so we know our testers work. Nothing like screwy monitor settings to make you crazy wondering what’s up with the computer.
  3. Two people is probably a good number for working on a computer together… three is a bit much. Having a partner makes things easier, but six hands is pretty awkward even if the people are friendly.
  4. WHERE IS THE RIGHT SCREWDRIVER. WHAT EVEN IS THE RIGHT SCREWDRIVER. NONE OF THESE SCREWDRIVERS WORK. HOW.
  5. Juice boxes! Yes, this is kind of a tradition with me now: bring juice into a place where it would be very bad to spill juice. But they were still all consumed! On the other hand, we need more people willing to take home pizza that’s been sitting out for a few hours…
  6. Having extra Linux install DVDs to hand out is a good thing! Not necessary, but good–people are curious!

Anyway, I’m sending this post around the WIC mailing list (er… Google group? It’s different from the CedarLUG list, which is legitimately an old-fashioned mailing list). About five of you folks from this event now have Linux test/install DVDs. If I remember right, I handed out a Xubuntu, a Mint, two versions of Debian, and… something else? Maybe that was it.

I’m pretty sure I’ve used each of them at one point, and they should all work even if they’re not all the newest and greatest; I think they’re all the long-term-stable releases so they’ll be fine. If they don’t work for whatever reason, don’t sweat it; email me or whatever and I’ll make more, or if you have blank DVDs lying around (or are willing to buy a pack for $5 at an office supply store), you can make one.

 

Anyway, when I give people techie stuff, I like to make sure they can easily figure out how to use it. (Doesn’t always happen, but I try to.)

So! If you’re curious about Linux and maybe just got a DVD from me, here’s a guide to all the guides I’ve written on the subject:

If you didn’t get a DVD or yours turned out to be a non-functional dud, here’s how to make one.

If you don’t have an optical drive in your computer, or want a more permanent plaything than the DVD, here’s how to make a virtual machine instead.

If you’re confused about the Linux ecosystem, here’s how I learned what I know.

If you’re just confused, period, here’s the FAQ I wrote for another event which involved lots of Linux newbies.

If you just want to run Linux off your DVD to play with it a little, it’s simple. Stick it in the optical drive of your computer, and restart the computer. While it boots, tap F12 (it’s probably F12, but keep an eye out for what key you’re supposed to press for menu options during your computer’s boot sequence) and select “Boot from CD/DVD” in the menu.

The difference between doing that and making a virtual machine is that a virtual machine will save any files you create from session to session (unless you do magic to configure it otherwise). An install DVD won’t save anything, so you get a fresh, clean system every time you start it up.

If that’s not working for you, email me in the list or comment on this post and I’ll try to help. If that still doesn’t work for you, bring the offending computer to the next WIC meeting if it’s portable (let me know what you’re doing so I make sure to come), or invite me over to your place if it’s not/if you can’t attend the meeting. I will help you get a Linux running if that’s something you want.

I’ve installed Linux on some weird old machines and gotten at least workable solutions out of them. Sometimes a setting needs to be tweaked or Google needs to be scoured for information. Sometimes a certain distro just doesn’t like your hardware, and you need to try a different one or download extra driver files or plug your computer into a wired Internet connection or something weird. Such is technology.

That’s usually not the case though. Most installs these days go really smoothly, especially with Mint or Xubuntu.

Speaking of installs, CedarLUG–UNI’s Linux Users Group–is holding a Backup Day pretty soon, and an Install Day sometime after that. If you want in on that, here’s the web site (I coded that! The penguin at the top is a bit of a giveaway…). Subscribing to that mailing list will get you updates on those events, and the occasional computer puzzle.

Happy Linux-ing!

Advertisements

How to make a Linux CD

A CD or DVD with Linux on it is a useful thing to have! There are quite a few things you can do with it:

  • You can try Linux out without installing it. Just putting the CD in the optical drive and running Linux from there won’t touch your main operating system or files. Using it like this can actually help you fix a Windows computer–you can still access the hard drive and back up all the files that are on it from Linux even if Windows is acting weird. (You can also use it to kind of crack into your machine if you’ve been locked out for some reason, but don’t try it on a network because the sysadmin will notice and flip out. You didn’t hear this from me.)
  • You can install Linux alongside or instead of your main OS–be careful about your files if you’re doing a wipe-and-install, of course, and be careful about partitioning your drive too. Make sure you have a backup of at least everything important if you do it this way!
  • You can also install Linux on a virtual machine, although using the .iso file you download from the Internet and burn to the CD works just as well for this.

So how do you make one? It’s pretty easy:

Get yourself a blank CD or DVD.

Some distros won’t fit on a CD and you’ll have to use a DVD. If you don’t know what this means yet, get a DVD.

Pick a Linux distribution (or “distro”).

There are lots of different “flavors” of Linux. They might look a little different, or be designed for special systems or specific groups of users.

If you’re new to all this, I suggest Mint or Xubuntu. They look a lot like Windows, so they’ll seem familiar, but they’re way better! And they’re a breeze to install. Normal Ubuntu I wouldn’t recommend as a first distro, actually; the user interface it comes with is kind of clunky. The only difference Xubuntu has is that it looks simpler and that makes it a little easier to use.

If you’re curious or you’ve tried this before, try searching around for a distro that’s particularly suited to you. I’m quite fond of Debian, but I’ve been playing with Elementary, which looks more like Mac OS X than the normal Windowsy-looking interfaces.

Mint and Xubuntu are great general-purpose distros. Xubuntu is probably the better one on older computers–I’ve made a ten-year-old box on two gigs of RAM run like a decent computer by installing Xubuntu. If your computer is THAT old, you’ll want 32-bit; otherwise, use 64-bit.

A word about some terms you’ll see. Unless you’re developing or testing for the distro as a project–in other words, if you’re a normal user–you won’t want to use the development versions. Anything that says “nightly release” or whatever, stay away from using as a main operating system because it’s still in testing.

“LTS” means “long term stable.” That is a GOOD thing to download. It may not be the very most recent version, but it’s a well-tested one that’s going to be supported for a reasonably long time.

You can also just get the most recent stable release. Those or LTS releases will be fine.

Download the .iso file

Either from the Internet directly or as a torrent. Googling the name of your distro should make it pop up. Where possible, always use a download link suggested on the project web site. There are probably multiple “mirrors” to download from; try to choose one that is on the same continent as you.

Any computer with 4 gigs of RAM or more should be using 64-bit operating systems. That’s probably what you want unless your computer is really old.

If this is your first time, I’ll make it easy on you. Here’s the download page for the latest Mint (64-bit, Cinnamon desktop), and here’s the download page for Xubuntu.

A torrent is a more reliable way of getting a distro if you have a torrent client set up. They’ll keep going even if they’re interrupted, and they’re less expensive for the maintainers. However, the clients are kind of tricky to set up, at least in my experience. There’s nothing wrong or sketchy about torrenting Linux distros–you can use torrent clients to get hold of sketchy Internet stuff, but that’s not what we’re doing here, this is super innocent and it’s just another way to get your .iso file.

Burn the .iso file to the CD

You probably know how to do this on your computer. If not, Google it. It’s pretty simple.

Label the CD, and maybe put it in a paper sleeve

Lots of people forget to do this, and it’s really confusing! Make sure you mark your CD with the distro name (e.g. Linux Mint), the version number (e.g. 18), and whether it’s 32- or 64-bit (probably 64).

Optional but fun: Burn more CDs for your friends

Self-explanatory.

“Did you get it to do that thing you were trying?”

“I figured out how to install programs!”

“I found a tutorial about the command line!”

“My resolution is acting funny, anyone have ideas about that?”

This is why Linux User Groups exist. Get enough nerds in one room playing with a shiny toy and something fun is going to happen.

 

Happy hacking!

There’s a new site I’m excited about

Hashnode – An open, friendly and conversational community for software developers

Remember when Atwood and Spolsky were developing StackOverflow, and their informal pitch was, “We’re like Experts Exchange, but without the evil”?

Hashnode is like StackOverflow, but without the evil.

Don’t get me wrong–SO is still a powerful resource, especially if you’re after something fairly simple and the question has already been asked. But the community is so huge that the moderators–who are supposed to be a result of Atwood’s valiant attempt at designing a system for the community to govern itself–have become Julius Caesar… and the system kind of needs a Brutus. If you know what I mean.

Basically, what I’m saying is: SO is a great resource, but not a great community any more.

Anyway, Hashnode looks to be more casual. It’s still a smallish community, or at least it feels small, and it looks like there isn’t so much policing.

I think SO’s problems are mostly just a result of its bigness, and also the fact that employers want to see a StackOverflow account on a dev’s resume, with as many points as possible. A tool meant for collaboration has become the subject of competition.

The solution to the bigness is the breakup of SO’s monopoly. I think there are several other sites cropping up to take its place, or at least take the load off; if you look in the comments on that article (which is where I found Hashnode), there appear to be a few different options that hopefully aren’t so dictatorial.

I suggest you join one, if you don’t belong to a forum or something already. Dream In Code is okay, if I remember right, but there was something about it that made me not stick around. Don’t remember what it was. Probably my own inexperience and inability to contribute; it was a while ago.

I don’t think Hashnode has that problem. They’re making a point of trying to welcome beginners. Anyway, you might want to check it out.

Happy hacking!

Encouragement

The last of today’s post trio; the three have a common thread.

There are loads of Internet people who will tell you how to do stuff, or give you cheesy motivation posts that are all the same except for their peppering of spurious advice that rotates in and out depending on the latest fads (“Get up early! Drink 8 glasses of water daily! Do a juice cleanse!”). This isn’t that.

If you’re trying to learn to code (that is, you’ve decided you still want to, not because other people have pressured you into learning), this post is for you to bookmark and return to when you’re feeling apathetic.

Because if you’re feeling apathetic, we lose something important. Your work is important.

What you’re doing is developing the kind of abilities that let you tinker with the world around you. Your ideas, if you choose to pursue them, can change how other people live. You can extend what humans are capable of.

You’re a maker. You’re powerful. You fix things. You solve problems. You’re capable. You’re creative. You’re clever. You’re sitting on a lot of potential. Whether you can feel it right now or not, you have all this pent-up energy waiting to be released into something.

Your code is art. With your mind alone you can make things that are not only beautiful and elegant, but serve a purpose.

Half the companies in America want to hire people like you because of the things you can do. No matter how you seem on the outside, your mind is a powerful tool. You’re among the relative few who understand a chunk of what’s going on with computers. Your skill set is prized and not common enough to fill the massive, gaping need for the things you can create.

And you’re getting better and better.

You can’t be apathetic. You can’t put yourself down. If coding is what you want to do, you can’t keep putting it off.

We need you too much.

We need the people who developed and maintained Kiva Loans so that struggling business owners and entrepreneurs in countries around the world could move out of poverty.

We need this guy and OptiKey, his open source software project that uses optical tracking to let people with motor and speech limitations use computers.

We need the people who are running OpenMRS, a medical record system designed for use in developing countries and now used basically everywhere.

We need the many, many open courseware projects that provide education to people around the world who might not otherwise have access to that knowledge.

We need the people who are building a bridge into a world that is way better than the one we live in now.

We need you, and those learning around you, to hold up the bridge with us. It’s a very important bridge and lots of people need to walk across.

Every time you build something, or answer someone’s question, or successfully learn something new, you are creating something incredibly valuable that didn’t exist before. And especially when you give away something other people will use, or even that other people are paying you for making (assuming they’re not terrible people)–that means you have changed a piece of the world.

Never forget how powerful you are.

I believe in you.

On impostor syndrome

I’m feeling pretty good about my skills lately. Maybe I’m realizing I didn’t have quite so much “catching up” to do as I thought. The theory stuff I’m learning in my classes is useful, but not as complicated as it looks.

(Well, most of it. Some of it is. Though I’m starting to pick up on the idea that if I don’t understand a recursive algorithm, it probably wasn’t efficient anyway–and if I don’t understand it [I’m usually good at this sort of thing] then it better be a darn good optimization hack for me to use such an unreadable piece of code. My standards may change as I’m learning Clojure, though.)

I dislike the whole “impostor syndrome” craze. If you read tech articles on Medium and Quora and so on, everyone and their dog has impostor syndrome. Saying you have impostor syndrome is like this big, socially-acceptable, self-contradictory humble-brag: “I’m actually a genius but I don’t think I am.”

It makes about as much sense as the girls who listen to “You Don’t Know You’re Beautiful” on repeat:

“You don’t know you’re beautiful, oh oh, / That’s what makes you beautiful”

and then say, “Omigosh, 1D just totally gets me.

First off, the point is that you don’t know, so if you acknowledge the song as something you relate to then you’re canceling out your own point. Second, this song is about how the singer finds it super attractive that you have no self-esteem. Catchy.

When you’re a beginner, of course you’re looking around and thinking, “Wow, everyone else knows so much more than me.” Because they do, duh, you’re a beginner. And you’re going to be a beginner for at least a few months. If you start calling your thoughts “impostor syndrome” at this point, you’re deluding yourself. On the other hand, you need to trust your ability to learn. Just don’t underestimate that it’s going to take some work and you’re not there already.

Impostor syndrome is when you’ve still got this mindset, but you’ve also got concrete evidence that your mindset is flawed, which you then brush off by thinking that everyone else is some kind of idiot you’ve fooled into believing you have way more technical knowledge than you do.

Listen, you have respect for the other techies around you, right? Anyone you talk to on forums, StackOverflow, GitHub, your school/bootcamp/job. (If you’re roughing it alone, try to connect with someone. It helps.) If any of them are actually worthy of that respect, they can smell technical BS from a mile off. That’s a skill we all develop. If they were going to suddenly find out you’re not as skilled as they thought you were, it’d have happened a long time ago.

It’s hard to feel like you’re making progress when you can’t measure your own skill. I get it. Nobody in tech knows how good they are at what they do; we can estimate, or take the judgment of those around us. And the problem with the latter is that most everyone else is as insecure as you are, and some of them will lowball you to feel better about their own skills, while others will try to flatter you so you’ll like them.

Listen. There’s a solution to this. Not a perfect one, but one all the same.

You have to build stuff. You have to solve problems. You have to read code. You have to write code.

Empirical evidence of your own skill grounds you. It puts a lower boundary on where you are. It gives other people something tangible to assess you on. Working on something real will tell you very quickly whether you’re out of your depth or just underestimating yourself.

Here’s how you tell the difference: If you’re super confused and have to look everything up before you can do any real work, you’re just underestimating yourself. If you’re actually out of your depth, you don’t even know where to start. Misleading, I know.

The problem with the advice “just build stuff!” is that it’s really freaking hard to start. You don’t know what to make. The things you want to make are complicated. You don’t have the syntax memorized. You don’t know how to split things up sensibly into different methods or files. That’s a big problem with programmers who are just past the point of doing lots of tutorials. You don’t know where to start, and it seems like you should go back to the tutorials and learn more, because that’s usually how it works. But in this case, it’s doubly misleading. The bigness of open-source and the complexity of many of its projects are also terribly confusing.

In practice, impostor syndrome is a lack of information about your own ability. So do the scientific thing and experiment. Run some tests. And remember that, with more practice, you can change the results.

Related sidenote

Listen, I’ve been thinking about writing some more how-tos. Programming how-tos, not the Linux ones from before.

And I wonder if I might also accept some… I guess students? Mentees? Just informally. If you try to do one of my programming tutorials and you post your code on GitHub, and then drop a line here, I could look at it and help you get unstuck or suggest improvements or that kind of thing.

I can’t promise a specific response time or anything that formal. And I know some of you don’t really qualify to be my students, because you’re legitimately better programmers than I am. But otherwise, I might help you learn something new, and/or feel a little more confident about your skills.

Is that something you might be interested in?

 

Should You Learn To Code?

This happened recently: https://techcrunch.com/2016/05/10/please-dont-learn-to-code/

Then this happened too: https://medium.freecodecamp.com/please-do-learn-to-code-233597dd141c#.ppljou5z1

It’s not new. Exactly the same debate happened in 2012: https://blog.codinghorror.com/please-dont-learn-to-code/

Then: http://decafbad.com/blog/2012/05/16/please-learn-to-code/

Here’s pretty much the conversation that’s going on.

“Not everyone needs to learn to code. It’s a fairly niche technical skill set, used in one kind of career. Insisting that everyone learn to code is like saying everyone needs to know plumbing.” (For some reason, both articles used this analogy; maybe the second one was just ripping off Jeff Atwood’s?)

“But computers are everywhere, they break often, they’re not well understood, and the world runs on them. Even if you don’t want to be a software developer, it might be smart to have a passing knowledge of code.”

“It’s just not necessary; people have other things that require their time and energy. Besides, there are all these newbies coming out of coding bootcamps, thinking they know everything and are entitled to a job. Then they’re either horribly let down, or they go out and write bad code the rest of us have to deal with.”

“Only some bootcamps are like that, and only some students. Often bootcamp students make good open-source contributors, too. Besides, many of these students intend to go into other fields anyway–they just want to kind of know what they’re doing around software.”

“The software field is way too romanticized. People want to be a software developer because they want to look smart and get a high-paying job. In reality you’re often overworked and the job is very stressful. Lots of students enter this field with an overly optimistic idea of what it’s like.”

“True, but we also have a massive lack of coders in America. There are lots of great jobs out there, and a big reason for the overwork is that we don’t have more people in those jobs.”

Yep, that’s about it: people who are already in the field, arguing whether newbies should be encouraged to join the club.

Personally, I think these people need to calm the #%#$ down, if you’ll excuse my cartoon language.

Here’s the question that determines whether you want to code.

It’s not “Are you dedicated?”

It’s not “Do you actually like computers?”

It’s not “You’re not just in this for money or prestige, right?”

It’s this:

Do you want to?

That’s it. That’s literally the only question you should be asking. This pretentious judgment of newcomers based on their “dedication” or “talent” or any other bull as judged by an outsider who has no clue who you even are? That shouldn’t matter to you. At all. If you want to code, code. If you want to learn, learn.

If you don’t, you don’t have to, and you shouldn’t. The people who are trying to pressure you into learning anyway–saying it’s “the new literacy” or whatever–aren’t you, any more than the people who are all like “stay out of our clubhouse.” The idea that either camp can or should tell you what to do is pretentious nonsense.

But if you still want in? Welcome to the clubhouse.

I don’t care if you have kids. I don’t care if you’re not a dev by trade. I don’t care if you start off thinking you know everything–you’ll learn soon enough, unless you’re generally a jerk with no empathy, in which case your interaction with computers doesn’t really matter as to whether I’ll like you.

None of that freaking matters.

If you’re not dedicated, you won’t put in the time to learn.

If you’re bad, someone will tell you and (hopefully) give you hints about how to get better.

If you don’t like computers, there are easier fields for you to get into for money and prestige.

The technology field has enough natural barriers to entry without people building more. In fact, the natural barriers hold too many people back who would otherwise be great coders; that’s why there are so many bootcamps, tutorials, intro-to-programming websites, and even blogs (ahem) to help newbies in this field.

Technology doesn’t need to be only in the hands of this “elite few” that “Please Don’t Learn To Code” article writers seem to be trying to protect. (Ironically? These people are going to be the same people who’ll complain that their manager has no clue about anything they do. At least if the managers knew some basics, the devs would have a language to use to talk to them. If the boss thinks their job is so simple, maybe s/he should look at the bug they’ve been fixing for the past four hours. It’d be more like onboarding a newbie coder, which is something they probably have experience doing. Or should, anyway.)

I do have this to say on the topic.

You know how in schools, we have music classes? Even though most people are not likely to become professional musicians, they’re given a class where they… probably learn to sing better, and take some lessons in music appreciation.

Why?

Because music is an art form, and studying it is its own reward.

Writing good code is making art. It’s not “like” making art. It is making art. You can write beautiful code, and it’s a joy to do so.

So if you agree with taking music lessons in seventh grade in order to better appreciate an art form, you should also agree with learning to code enough to recognize a beautiful piece of software–even if you yourself don’t do so, you shouldn’t condemn others for trying.

Not everyone who takes music ends up a very good singer, and definitely not everyone goes on to sing professionally. They only do if they love it and are good at it.

Isn’t that how it should be?

So

I’m not going to tell you that you should or shouldn’t learn to code. That’s for you to decide–based not on the opinion of some pompous person on the Internet who’s acting like a grumpy black hat and thinks they should decide if you belong in Technology-Claw or Liberal-Arts-Puff–but on one simple factor.

Whether you want to.

That’s enough.

Programmers and writing

Okay, so I started this post a while ago, not entirely sure what I was writing about. I wanted to write about how I’d suddenly realized I’d gotten to the point where I could tell the differences in personality between programmer bloggers, and how some of them posture more than others in order to look logical and educated and authoritative, and how this didn’t actually seem to correlate with whether I agreed with them. I wanted to talk about how readers of programmer writing expect posturing so much that it takes a real effort to sound friendly and welcoming instead, without the help of body language, but that this allows one’s writing to become more convincing, more motivational, and more enjoyable to read.

Then I thought, why am I writing this? If it’s about not writing like a snob, I’m preaching to the choir. You guys don’t do that. My own post sounded like an ironically self-indulgent rant about why how I write is better, or something. (It’s true that I put a lot of energy into not seeming arrogant. I hope it works.) Or, worse, it might sound as though I were accusing you of needing correction in this area. Neither was something I was aiming for.

Rather, I wanted to warn you about these behaviors, because of the effect they’d have on you as you read about your craft. But I didn’t pin this motive down until I read the intro to an online book LucasFF linked to me, and found this couple of paragraphs:

If you look for help you may find people are not patient with you. You may find that, rather than help, they take the time to express how much they know about the subject. Experienced programmers might tell you that you are wrong. The subtext to their tone might be that you should stop now, rather than inflict your bad code on the world.

After a couple of engagements like this you may decide that you are not a programmer, or don’t really like programming, or that you just don’t get it. You may have thought that you once enjoyed the idea of building your own programming language, but now you have realised that it is too abstract and you don’t care any more. You are now concerned with your other passions, and any insight that may have been playful, joyful or interesting will now have become an obstacle.

For this I can only apologise. Programmers can be hostile, macho, arrogant, insecure, and aggressive. There is no excuse for this behaviour. Know that I am on your side. No one gets it at first. Everyone struggles and doubts their abilities. Please don’t give up or let the joy be sucked out of the creative experience. Be proud of what you create no matter what it is. People like me don’t want you to stop programming. We want to hear your voice, and what you have to say.

Realizing why this post had come about, I decided it was worth writing after all.

A friend of mine emailed me a few months back. He was replying to my request for collaboration on an idea I was toying with. The response came late, because he’d been dreading disappointing me with the news that he’d stopped programming. He’d had it with the infighting.

This is something you need to protect yourselves against. Creativity and motivation are fragile creatures and must be guarded.

Three types of writing

Some programmer writing is just kind of awful to read. It goes off on rants. It boasts about the writer’s knowledge and accomplishments. It insults the reader, or the writer’s coworkers or friends. It’s unprofessional, sexual, or discriminatory. Or it’s any of a dozen other things I haven’t listed.

Sometimes that writing has a valid point to get across, and sometimes it doesn’t.

My thesis here is that if you’re not sure of yourself, it’s not worth reading anyway. There’s a wealth of tech writing that doesn’t do these things.

But I’m getting ahead of myself.

Quora demonstrates this divide a lot. Questions get a lot of variety in their answers. About once a day (that I see when I’m on), someone posts this question:

“Hey so I have this HUGE GREAT IDEA and it’s worth $10B but I don’t know how to code it. Can I get a developer and pay him 20% equity to build my great idea? Should I make him sign an NDA so he doesn’t steal it?”

and the answers are, on the whole, predictably snarky. It’s funny to read the first few times you see the question, and then it gets boring. But there’s usually a range of variation, from

“People like you are the reason I never tell anyone I’m a developer. We’re sick of being badgered with people’s ‘billion-dollar’ ideas that usually don’t even make sense or have a market.”

to

“Dude. Execution is everything, the idea is nothing–nobody would buy your idea for $20. Go out and learn to code, or figure out something else you can bring to the table to actually earn your ridiculous 80% share. [then optionally actually answers the question]”

to

“[actually answers question]

“But you’re unlikely to be able to do that, I’m afraid. Most developers have lots of ideas of their own, and they’re more likely to invest their time in their own idea than yours, especially since they’d get all the reward for building their own idea, not just a fifth of it. It’s hard, time-consuming work to build things. If you really believe in your idea, you could start building it on your own by learning to code, and then see if you can get others on board once you’ve made a prototype.”

#3s usually get comments back from the OP, because even though they’re basically saying the same thing as #2, they do the OP the courtesy of actually answering the question first (the order is more important than it seems) and then giving them the benefit of the doubt that they’ve asked out of honest ignorance rather than from a place of superiority and disdain for working devs. In other words, they treat the OP like an adult, even if he’s a 14-year-old boy on a cheap netbook somewhere.

In turn, OP usually listens to them. #1 seems really hostile–an outright declaration of animosity merely for the fact that OP dared to ask such a question (which is never a good approach; if the OP was really so despicable the best thing to do would be to deprive them of an audience)–and #2 is condescending and unapproachable, if somewhat more on topic. #3 is reasonable, diplomatic, and friendly. They’re offering the help OP came for, even if the message they have to deliver is bittersweet.

Be aware of what you’re reading

Joel Spolsky of the blog Joel on Software, as much as I like his posts for other reasons, has a lot of #2 posts on his blog. “If you don’t know this, you’re incompetent!” is a common theme, and to me there are two outcomes to reading that sort of thing: either you know the thing he’s talking about, and you feel smugly superior or think “at least I’m not incompetent at this thing”, or you don’t know it and you think, “oh, great, another thing I don’t understand, I’m farther behind than I thought.” If the latter, maybe you’ll think about learning whatever it is, but now you’re feeling bad about your skills and that doesn’t help anyone.

On the other hand, Jeff Atwood of Coding Horror seems way more approachable, because he’s willing to admit upfront he may not be competent at everything, including the thing he’s talking about. He gets pretty upset when he hears about people who actually can’t write code at all pretending they’re programmers, but I’ve never seen him go off on a wild rant because they didn’t know the difference between UTF-8, ASCII, and Unicode. (For the record, I read both posts all the way through.)

I’m not saying JS’s post on character encoding wasn’t worth reading. I’m saying it was a #2 post, not a #3. It has useful information, but instead of introducing you to it in a friendly way, it kind of beats you over the head with it.

In this article I’ll fill you in on exactly what every working programmer should know. All that stuff about “plain text = ascii = characters are 8 bits” is not only wrong, it’s hopelessly wrong, and if you’re still programming that way, you’re not much better than a medical doctor who doesn’t believe in germs. Please do not write another line of code until you finish reading this article.

It was worth reading, to me, but if his aim was actually to educate people on how to use character sets in code, this was a really roundabout way of doing it and there are several things that are ishy about the post.

  1. I’m not going to infect someone with Ebola if my web site shows up with weird question mark characters. So far, nothing I’ve written has been a matter of life or death depending on if it works in Turkey. This holds for probably most programmers. Ergo, the comparison to a doctor who doesn’t believe in germs is straight-up overdramatic yelling at people who happen to not know this thing you know.
  2. Most of the post is a lecture on the history of character sets and how they work, which, while somewhat interesting, actually doesn’t have much to do with solving the problem JS is complaining about.
  3. His actual message, if his intent was really to stop broken international code, could have been condensed to: “PSA–make sure you declare your character sets, folks! Using UTF-8 will make international users’ lives easier.” This would fit in a Twitter post.

I know I’m kind of picking on Joel, here, but he’s not actually a bad guy. He’s written some really cool software and I think his writing is interesting. This post I’m quoting was written in 2003, and I imagine he’s changed a lot since then. Really I just want to dissect his old writing as an example.

What if you were a new programmer, stumbling upon this post? You’d be really discouraged.

Character sets? What’s a character set and why is it so important? But this guy sounds really impressive and he knows all this history… how am I supposed to know everything I need if there’s really important stuff like this and I’ve never even heard of it? Maybe this is too difficult.

Yeah. No. That’s not a good situation.

Add in the fact that this person, if they have an online presence and are asking for help, is probably hearing from ten different people:

Wait, you’re learning PHP? Why would you put time into learning such a horrible, broken system?

Your design is all off and your conventions are sloppy. Can’t you even indent properly?

You’re going to be horribly ineffective unless you learn how to work with APIs.

Burn that book, you won’t really learn anything effectively in 24 hours like it promises.

You’re not a REAL programmer unless you’ve made something someone will pay you for.

Java is for sissies, here, learn C instead.

That framework does too much for you–you’ll never learn unless you build from scratch!

Why are you still using Notepad++? Let me introduce you to…

Learning Visual Basic first will ruin you as a programmer.

Wait, you don’t know anything about pointers? Seriously? Oh, you’re self-taught, I get it…

…and you’ve got one ex-newbie programmer.

Don’t let that be you–on either end, but particularly not the newbie end. This kind of talk, even if the writers think they mean well, is nothing more than posturing and bullying. It may not be all #1. Some of it may be #2. But unless it’s #3, it’s not something a beginner needs to hear. Even #3 writing is colored by an individual’s specialties and preferences.

Be aware of what you’re reading.

Some writers just posture a lot, without any mind to whether it’s actually justifiable. When you don’t know much about your field, #1 (ranting with no point, or a bad point) and #2 (ranting with a point) are hard to tell apart. Heck, #3 writing can be wildly off target too–but it’s less likely to be if the writer doesn’t need to resort to grandeur to get their point across, and furthermore, #3 writing doesn’t make you feel bad about yourself. Yes, that’s important. You might be thinking this this approach is some crazy feel-good thing where you only read stuff you like, whether it’s true or not.

But how important is it, to a beginning programmer, to have everything right? It’s far easier to realize, “Oh. So that polite guy actually didn’t know quite what he was talking about and it’s really more like this,” than it is to get over the kind of verbal abuse listed above. Your priorities should actually be geared toward protecting your motivation, rather than always getting accurate info. I mean, unless you’re programming kidney dialysis machines first thing, it’s better to be a wrong newbie than a newbie so discouraged that you stop.

Be careful, fellow larvals. Guard your motivation, and be cautious about what you read.