Everyone Needs A Computer To Survive: Near-Portland Students Can Get Them Free.


ou may have heard that computer science is important to study, but have you really heard the why?

Today we’re going to talk about why you need to study computer science to be successful. And then we’re going to talk about why getting a computer is not a problem for anyone near Portland, thanks to a great group called Free Geek. There’s a fair amount of reading, so skip to the parts which are interesting to you.

Why You Need Computer Science And, Therefore, A Computer.

Software Development: Your Future Job

Software developers have bad posture, according to this picture from the U.S. Bureau of Labor Statistics. What are they trying to say? Be the cure. Sit straight.

According to the US Bureau of Labor Statistics, Software Development is one of the fastest-growing highest-paying jobs. Read: It is one of the highest-paying jobs, and of the category of highest-paying jobs, it is is the fastest-growing. And many of those jobs require only a bachelor’s degree. (Source). That’s pretty wild. And it means if you want to hop on board with one of the most accessible and lucrative jobs in the US, you need to start programming.

About Software Development

Read a little bit about software development, as described by the US BLS. Here’s the gist:

  • The job growth from 2010-2020 is projected to be 30%. The average is 14%.
  • The median pay is $90,000 per year.
  • Entry-level jobs require a B.S. in computer science. Similar-paying jobs often require a Ph.D.

That last piece of information is important: if you want to become a high-paid software developer, you need to study computer science.

Obstacles for Computer Science Students

Charles Babbage, the first computer scientist, didn't have a computer but was still great. You can be, too. But since computers are, you know, invented now, we recommend picking one up.

Don’t even get us started on the number of non-programming jobs which require you to use a computer (most of them). That said, computer science what you need to survive.

So why are some people skeptical about CS majors, or hesitant to study it? Well, there are a couple things which, at first, seem scary:

  • A CS major involves a lot of mathematics classes.
  • It’s hard to get one’s hands on a computer with which to program at home.

Here’s the problem with math: it usually involves a lot of pencil-and-paper computations which are tedious and just plain annoying. That’s how math often gets taught in school. But the kind of math you learn for CS is less about computing and more about concepts, and you can have your computer do the computing (appropriate, isn’t it?). Check out this great TED talk, from one of the guys in charge of Wolfram Alpha, about how to revamp your math education:

Math is not about tedious calculations, it’s actually about logic and problem solving.
Plus, when you’re learning to program a computer, you can make it do all of the

Given that a CS student needs to focus on conceptual math, and can make their computer do the calculating, that means that the biggest problem for CS students is getting a computer.

How to get your hands on a computer.

Linux is popular among programmers because it's completely open-source and completely customize-able. That's why there are custom distributions like Ubuntu.

For a lot of people, getting a computer can be hard. A decent one is a couple hundred dollars, and good ones can be over a thousand. Some people are lucky enough to get one as a gift or hand-me-down from family or friends, but other families just don’t have computers. That’s fine for a family, but not for you. You need one to study CS, or even just to get by in the professional world.

In Portland, there’s a company called Free Geek, whose goal is to get computers in the hands of as many people as possible. They believe computer skills are essential for the future, and have a number of programs to get computers into the hands of people who may not be able to get them otherwise.

The Ubuntu logo. Ubuntu is one of the most popular distributions of Linux.

Free Geek has two programs to get computers at no cost: the Adoption Program, where you donate 24 hours of time in exchange for a free computer; and the Build Program, where you build five computers for Free Geek, and then a sixth for yourself. Click the above links to learn more, and then apply.

The best part: the computer you get is loaded with Ubuntu Linux, a great operating system both because it’s free and because Linux operating systems are great for programming learners, thanks to their customization and their shell. Plus, they offer free classes for their volunteers.

Read On

The secret Y2K disaster—but this one will really happen: The IPocalypse

Note: CS has a lot of acronyms; run your mouse over any of them to see what they stand for. Google them if you want to learn more—most of them aren’t really important to what I’m saying here.

We have roughly 100 days until the end of the internet as we know it.

Not exactly, but it’s technically true.

Image explaining the structure of an IP address

IPv4 is in 32-bit/4-byte format. IPv6 will be 128-bit/16-byte format.

Here’s a little bit of history: websites are assigned numeric addresses, called IP addresses. But you never see them is because they’re masked by named URLs, which you type in. The current format of IP address, called IPv4, has been in use since 1981. IPv4 addresses are in a 4-byte format (one byte is any 8-digit binary number, meaning it can store 256 different values).

Here’s a problem: do the math, and you’ll see that IPv4 can only store 2564 unique addresses. That’s 4,294,967,296 unique addresses. Guess how many are already taken.

Over 4,130,000,000. We have about 5% to go before we’re out of internets. And like everything else on the internet, new IPs are being taken at an exponentially faster rate than they were 5 years ago. According to this Twitter account, we’ve only got about 100 days until they’re all used up.

Well, the solution was invented 12 years ago. In 1998, IPv6 was made, which can store 25616, or roughly four billion IPs per person on Earth. But it’s hardly been implemented by our dear internets; every major OS, including those used by servers and big companies has IPv6 installed. But a 2008 study by Google reported that less than 1% of the internet is using IPv6. Very few have changed over, presumably because the end of the road hasn’t been close.

This is all conjecture, but with 100 days left and 99% of the internet having to switch to IPv6, one can expect there will be a lot of problems. Ever heard of Murphy’s Law? It’s a good rule of thumb to adhere to, especially in the computing world. And no matter how prepared everyone is, 99% of the internet is (or will be) almost 4,300,000,000 websites. There will be problems. A lot of major websites will be prepared (Facebook has already switched to IPv6, for example), but quite a few of those little websites you love just might go down in the switch to IPv6. And what then? It gets worse when you consider that, on top of these websites possibly going down, new ones cannot be created as there is no IP to assign them.


This entire thing could have been avoided if ZOI was followed. It’s the heuristic rule in CS that you shouldn’t limit how much data can be stored unless you have a very good reason. In other words, why limit it to 2564 IP addresses? You might as well prepare for the end-game and give it no theoretical limit.

A good practical example is on your cell phone: ever been annoyed that you can only store so many numbers per person? It’s pretty common for phones to limit you to having two ‘mobile’ numbers per contact, for example. But you only need one name for them, because they’ve always only got one name. (Okay, that’s not always true, but you get the point.)

But this technology was created in the 80s. Supposing we can forgive it. Even be proud of it for lasting this long!

Why Computational Thinking is useful for everyone

This post was one hour late—I’m terribly sorry about that. the 7 and 8 keys (for “publish at 17:00”) are right next to each other.

Computational thinking is the practice of using Computer Science fundamentals to systematically solve large, real-world problems. Those fundamentals include identifying the real problems to be solved, breaking them down into manageable portions (by identifying what conditions need to be met for the problems to be considered ‘solved’), identifying the most efficient solutions to meet those conditions, and then implementing your solutions.

For a bit of a personal example, I’ve recently dealt with a real-world problem, which you might be able to relate to: I have midterms next week. On top of that, I have all sorts of other things I’m involved in, which I can’t just drop.

A graphic depiction of the dream layers from movie Inception

Getting to the root of a problem can feel like this sometimes.

In this case, identifying the ‘real’ problems meant asking myself why I was stressed. Getting to the root of this meant using the Engineering principle of asking why five times, or Problem Analysis. So:

  • I feel stressed because I feel like I have too much to do
  • I feel like I have too much to do because I have not yet organized my time
  • I have not yet organized my time because I have not made time to do it
  • I have not made time to organize my time because I feel stressed.

As is common in emotional issues, this one was circular. So the first step was for me to just get over it, and organize my time. I realize I didn’t take this asking process five steps in; sometimes you don’t have to.

My main point here: if you have a lot to do, organize your time. I kept those answers fairly general so hopefully you can relate—if you’re stressed out.

Since time-organization is my main problem at hand, I simply have to come up with a solution which satisfies all requirements:

  • Read My Literature-Class Story and write a short paper on it by Thursday (300 pages; 3-5 pages)
  • Study for Tuesday’s Science exam (six chapters)
  • Study for Thursday’s Language oral exam (two lessons)
  • Make it to today’s club meeting, and the one next Monday
  • Make it to the gym three times by Thursday (optional but preferred)
  • Sleep enough to stay sane
  • Eat enough to stay alive
  • Publish blog posts on Monday and Wednesday of next week.

Edited to keep things general, since you don’t care what book I’m reading or how long it really is—longer than that ;). To apply computational thinking to real life, you’d also have to include other things, like commute time, getting ready in the morning, mealtime, and so forth. Don’t forget mealtime.

If you wanted to be extra thorough, you could break your problems down even more. For example:

  • I can’t finish reading that book in time.
  • I can’t finish it in time because I read too slowly.
  • I read too slowly because I do not speed read.
  • I do not read actively because I am distracted, and because I don’t know how to speed read.
  • I am distracted because of the noise. I don’t know how to speed read because I haven’t learned yet.

This leaves you two problems to solve: fix the noise, and learn to speed read (check out this speed-reading link too; scroll down to the top-ten list at the bottom).

You can continue this process with every problem you have.

The next step could be to do something like writing your activities onto note cards as chunks of time, and shuffling them around on a table to organize what you need to do. But because we have things like Google Calendars nowadays, you don’t need to. If you can combine two activities (bike at the gym and read your book!) then do so, to save time.

And really. Don’t forget to eat. Happy midterms!