views:

70

answers:

2

If you were about to enroll into "Intro to CS" at your respective college, and looking back with what you now know in terms of experience and wisdom, what would be your game plan for independent study?

+2  A: 

You might try learning Python.

I really like the book How to Think Like a Computer Scientist. It's a gentle introduction to Python and programming.

If you're really brave you could try Structure and Interpretation of Computer Programs from Abelson, Sussman, and Sussman.

Vitor Py
Agreed, python is a perfect beginner language for learning the ins and outs of cs.
Moses
+2  A: 

Without any background knowledge, either (something like) C or (something like) Python.

C if you really want to be able to understand what's going on at the 0/1 level. Python if you're more interested in higher-level things like data structures and algorithms.

It boils down to this: Are you more interested in the lower-level, bare-metal of how the machine and OS work? Then go with something like C, C++, Ada, etc. If you care more about solving interesting real-world problems without going too deeply down the rabbit hole of 0's and 1's, then I'd recommend perhaps Python or PHP.

Feeling enterprise-y? Languages/platforms such as Java, C#, and Objective-C may be more your speed.

At any rate, the important thing to keep in mind - if you're truly committed to really earning/learning something for yourself - is that you need to have passion for the project. Some project that you care enough about to get you through the keyboard-pounding frustrations that coding will, inevitably, provide you. Something to drive you into (and sometimes back out of) the long nights. Something to provide you enough of a challenge to keep you engaged and learning.

Some will suggest you start small - I say, nay. You do those piddly little examples when learning the languages and platforms; to get used to grammar, syntax, mechanics, style, and conventions. To really push yourself to grok anything of value, don't limit yourself - to anything.

"I want to make a WoW clone," "I think I can do Facebook better," or "Google's results are good, but..." are all perfectly acceptable attitudes, in my humble opinion*. No goal is too lofty, you just need a passion for it. You do want to understand that this is a goal you may never reach, or if you do, the feature/product/market/platform/whatever may be irrelevant by then, but that's not the point. If some day you bank out on the code, then great, but that's only a bonus and shouldn't be confused with the real reason for the study.

For me, it was an old-school-style text-based dungeon game. 6 years ago, and I still haven't released a "finished" stable build. I didn't know my infinite recursions from a [bottomless] hole in the ground before I started, but I still have a blast working on it, I learned (and continue to learn) a ton, and it spawned a curiosity for computer science that's landed me a great job and a good sense of responsible computing. It wouldn't change a thing if I knew the game would never get played by 1 single person - I wouldn't trade the experience for anything.

*I would like to make the ancillary statement that this is the exact type of attitude that pushes the technology industry so far, so fast. It's what makes us tick - a healthy passion borderlines on obsession, takes nothing for granted, and produces great folks (and sometimes software, too).

Chris