Questions about CS and College

Hello, everyone,

I am currently entering Junior year of high school, and I have some concerns about my future prospects.

My school refuses to hire an instructor for Computer Science (this is an Alabama school) so I am currently in the process of attempting to teach myself the basics of programming and this field in general. Of course, I tend to fail miserably, but I am pretty sure that this is the market that I want to spend my life working in. I came to this specific section of CC to inquire about the difficulty of admission, difficulty of coursework, how a chosen college affects job prospects, and of course, what I should do to prepare myself for the gauntlet that determines whether or not I live in poverty for the rest of my life.

You can try going through these introductory CS courses:

http://ocw.mit.edu/courses/electrical-engineering-and-computer-science/6-001-structure-and-interpretation-of-computer-programs-spring-2005/
http://www-inst.eecs.berkeley.edu/~cs61a/fa14/

CS at the college level is about a lot more than programming. It’s very theoretical.

The best preparation for college-level CS is a thorough training in abstract, quantitative thinking - whether or not actual coding is involved. Mostly, this means doing well in your math classes. Although something like the SICP course linked above may help as well.

I have known many excellent programmers who never coded at all before their freshman year of college. I have known a few terrible programmers who were hacking assembly as pre-teens. The excellent programmers did well at math; the terrible ones, not so much. (Then again, most professional mathematicians are terrible programmers, but that’s another issue).

In sum, don’t worry about it. Do well in your core math classes; teach yourself a bit if you can. But you won’t be the only one with little programming experience when CS 101 rolls around. And CS 101 will likely take place at such a high level of abstraction that even the kids with APCS won’t have much of an advantage.

I wouldn’t worry about not taking a programming class in HS.

You can start with Scratch (also from MIT) and Alice. Also, you live in a second golden age for the experimenter.

Arduinos (which you can search for) are available at Radio Shack, and some of those stores will have some kits to expand just the basics. The Integrated Development Environment is available for download on Mac, Win, and Linux at no charge. Simple programs (sketches) are included with that download. It’s powered by a USB port.

Also, Raspberry Pi’s are out and available as bare bones boxes for around US$30 to around $130 for a full starter kit: http://www.makershed.com/products/raspberry-pi-starter-kit
The starter kit includes a book that describes setup and includes some description of running Scratch on the Pi. The Raspberry Pi is kind of fun because you get to install Linux on it right away.

If that’s too spendy, you might be able to score an older desktop or laptop and install a Linux distro on it. Ubuntu is pretty easy for a first time, but many others are straightforward as well, “Puppy Linux” can install on computers that ran Windows 97, for example. Part of the value of this is to get over the fear of a command line, and to help gain an understanding of how a system works. Most if not all of the source code is available, so you can, if you like, inspect and compile it on your own system. Not a lot of people in your position will have done that even if they’ve taken the “Hello World” Java course in high school.

Both the 'ino and the Pi as well as most Linux distros have communities and shared code as well as “maker” projects available. This means a lot of the basic questions have been asked and are easy to find answered.

“Little Bits” has an Arduino block available, if you want to combine those two. There are add-ons for both the Pi and the Arduino to run Lego Mindstorms sensors and motors.
Mindstorms itself is a pretty good learning toy, I think.

For general background, I recommend the “essays” at http://www.joelonsoftware.com/
His big project, stackoverflow and the follow-on stackexchange also have a lot of discussion and Q&A on programming concepts etc.

A friend put together some other links, including:
http://www.codecademy.com
https://www.coursera.org/

Edit:

That’s w w w . c o u r s e r a . o r g Not sure why that’s starred out, but if it’s a bad thing around here, any mod should feel free to edit the thing out entirely.

http://ocw.mit.edu/index.htm

It’s a good field, IMO, and even after working in it for 25+ years, I still get deep satisfaction from making good software. Those days when you look at a piece of code or block of logic and think “that is very, very good” make it easy to put up with a lot of the other nonsense of office life.

You don’t need any programming experience before you start a CS degree program. They generally start everyone out from scratch. The main reason to try out some programming beforehand would be to see if you like it.

I probably wouldn’t jump into Arduino or Raspberry Pi development right away, although it is fun to see how code can control hardware. I’d advise starting with something simple like a Javascript tutorial.

Right idea, but anything but Javascript. I would advise Python on codeacademy.org

http://www.codecademy.com/ is a good suggestion, and look for the Python lessons.

Also look for the older age level tutorials on code.org.

And, you said, “Of course, I tend to fail miserably.” It’s normal for code to not work the first time or even the first many times. That’s called “debugging.” A big part of improving at CS is learning to fail a whole bunch of times but still make things better progressively.

“I have not failed. I’ve just found 10,000 ways that won’t work.” – Thomas Edison

I agree with poster who wrote CS is not all programming. Lots of theory. I’ve looked at my daughters exam and it looks like Greek to me and I’m an engineer with EE and CE/CS degree.

Yeah, you’ll likely be surprised by just how much theory there is when you hit upper division. I took theory of computation in fall quarter and am finishing up algorithms now. There was absolutely no coding in either of them, and I’ve had more than one non-CS friend not realize that I was doing CS homework when they saw me doing those assignments. They thought I was doing some abstract math stuff…which I guess isn’t too far off. I mean, my last algorithms homework is almost all proofs, and the rest is coming up with some efficient algorithm for a situation related to those proofs.

If it makes you feel any better on “failing miserably” with your code, I’m in operating systems this quarter and me and my partner couldn’t get our last project completely debugged in time for the due date. This despite starting the project the day it was assigned. For reference, I’m a junior/soon to be senior, and my partner is a graduating senior who’s had a job lined up since fall. Don’t get discouraged if a program just isn’t doing what you wanted it to while you’re writing it; that happens most of the time. Remember: Computers always do what you tell them to do, not always what you want them to do. And figuring out how to more accurately tell them what you want them to do takes practice.

On a final note, I came into college with no programming experience, and here I am. That’s not an issue at all.