

Ask HN: I'm a non-CS major. What CS courses should I take? - keiferski

Me: philosophy major very interested in tech entrepreneurship. Moreso business than computer science, but I've decided that the best way to get my ideas off the ground is to build them myself. Seeing that I have a lot of elective credits, I want to take as many CS courses as possible.<p>My question to you is: what CS-specific courses should I take to help me build web applications? I'm not particularly interested in AI, higher-level math, and most other "technical" subjects. I just want to build web businesses. But, I would like to get at least some of the "theory" that a CS major provides.<p>----<p>Some possible options (that are available at my school). These are after the "intro-to-cs" class. Of these, what do you recommend? And what am I missing?<p>DATA STRUCTURES<p><i>This course emphasizes the study of the basic data structures of computer science (stacks, queues, trees, lists, graphs) and their implementations using the Java language. Included in this study are programming techniques which use recursion and reference variables. Students in this course are also introduced to various searching and sorting methods and are also expected to develop an intuitive understanding of the complexity of these algorithms.</i><p>COMPUTER ORGANIZATION AND ASSEMBLY LANGUAGE PROGRAMMING<p><i>The purpose of this course is to study the components of computing systems common to most computer architectures. In particular, this class is meant to introduce data representation, types of processors (e.g., RISC V. CISC), memory types and hierarchy, assembly language, linking and loading, and an introduction to device drivers.</i><p>SOFTWARE ENGINEERING<p><i>The purpose of this course is to provide a general survey of software engineering. Some of the topics covered include: project planning and management, design techniques, verification and validation, and software maintenance. Particular emphasis is on a group project in which a group of 4-5 students implement a system from its specification.</i><p>-----<p>Also, I'm supplementing this with Stanford, MIT, and other schools' free coursework and various online tutorials/books. Any particular recommendations?<p>Thanks a bunch.
======
nunb
I don't think you can learn to program anything related to "web-businesses" in
University. I've done a MS in CS at OSU, and I always pitied the poor schlubs
doing their undergrad. It's just a bunch of hoops.

My recommendation would be that you pick up a beginner PHP book and learn to
build basic websites. Beginner level 0. There was a link on HN about how
browsers and html5 work, see that, or see diveintohtml5.org

Then, if you see holes in your knowledge, look up something like
stackoverflow.com -- SO also has a list of free CS books, look that up.

To actually program, start with HTDP or similar, mentioned in the SO
bookslist. That will get you approx 7.53 times further than sitting in some
braindead Java class, struggling to get above a 3.0...

Use your hard-earned money to spend on MIS courses. They'll get you a job out
of school while a undergrad level java class won't. Don't do any of the
courses you mentioned above either: DS, CO + asm (you're kidding!), SE. PS
some of MIS is similar, you sound smart and motivated, so read the CS
coursework books for fun if you want, buy them used.

Kudos on the Stanford MIT stuff btw. I would recommend starting with something
like the iPhone programming course on iTunes U -- fill in the gaps as you come
across them (which is the big advantage of self-study.)

Finally, CS has only one theory that you need to know; you'll like the title
too. Google "shtetl optimized complexity". SO has some articles on it too, and
codinghorror tried explaining it once at
[http://www.codinghorror.com/blog/2008/11/your-favorite-np-
co...](http://www.codinghorror.com/blog/2008/11/your-favorite-np-complete-
cheat.html)

PS Feel free to ping me offline if you wish.

------
dwc
Given only what you've written above, I'd recommend the Software Engineering
general survey. All of the things you've listed under that are useful and
needed, and you should at least get some familiarity with all of them as a
budding entrepreneur.

For web apps specifically, see if there's a course using Ruby on Rails. Other
languages and frameworks exist, but both Ruby as a language and Rails as a
framework are great and will be a very nice place to start and will take you a
long way. And much of what you learn will transfer to other langs/frameworks
to some degree. Stuff like MVC and other concepts will stick with you.

------
porter
I studied economics and finance in college, worked in banking for about 5
years, and have spend the past 12 months learning computer science. I did a
combination of university courses and self study, and I now have a fully built
web application in python/django.

Here is what you need:

1) Discrete Math - this is the core of all computer science theory. You'll be
able to talk about Big Oh and all the fancy pants stuff that you'll wish you
learned later on.

2) Algorithms/Data Structures - As one of my friends working at a well known
YC startup said - this is basically all that matters when getting hired as a
programmer. You'll be able to solve those tricky technical interview questions
on linked lists, hash tables, and graphs, etc.

Helpful, but not necessary: Operating Systems, Databases, Artificial
Intelligence, Software Engineering.

Everything else you'll have to hustle and pick up yourself. I chose
python/django and found a great community of people willing to help me. Get
yourself a nick on IRC and start asking questions in #python and #django.
Also, check out the Harvard cs75 course (www.cs75.tv). This will give you a
crash course in web development.

For server stuff I suggest looking at the Linode.com library. It's a great
crash course in administering your own linux server. Plus, at $20 per month,
you really can't beat it if you want a box to learn on.

That should be plenty to get you to the point of building prototypes for your
ideas. You'll also have a solid foundation to learn from should you need to
deploy and maintain your software yourself. Feel free to shoot me an email
with any questions.

------
zmitri
The great thing about software engineering classes is that you generally get
to "build" something, or focus on a large project.

I was a CS major, but the biggest project I worked on in university was a
software eng course with a team of 6 others. The really cool thing about that
course vs other courses was that so much of it was just about putting
something together and integrating a bunch of people's work.

Only after that course did I truly start appreciate how important it is to
have impeccably nice, reusable code and an organized code base. Things can get
quite out of hand if they aren't so you need to put your foot down sometimes.

The assignments might have been more challenging in some of my other classes
(AI, Programming Languages and Paradigms, etc), this one was about building.
It's definitely a class that will separate the builders from the "students." I
think some of the classes I had taken before helped, but I learned even more
from building and coming up with solutions along the way-- and honestly, if
you can learn on your own and are motivated, it will take you a very long way.

