How do I start learning about Comp. Science and Programming?

A place to discuss the science of computers and programs, from algorithms to computability.

Formal proofs preferred.

Moderators: phlip, Larson, Moderators General, Prelates

How do I start learning about Comp. Science and Programming?

Postby Mammon » Mon Apr 18, 2011 1:38 am UTC

I have no prior experience with either computer science or programming. What books or websites would you recommend for beginners?
Mammon
 
Posts: 11
Joined: Wed Apr 13, 2011 8:13 pm UTC

Re: How do I start learning about Comp. Science and Programm

Postby Meteorswarm » Mon Apr 18, 2011 3:02 am UTC

You could start with our very own, stickied, thread about learning the mathematics and science behind computer science.

Beyond that, pick a language, find a tutorial, learn it, and play around for the programming end. I like Python.
The same as the old Meteorswarm, now with fewer posts!
User avatar
Meteorswarm
 
Posts: 980
Joined: Sun Dec 27, 2009 12:28 am UTC
Location: Ithaca, NY

Re: How do I start learning about Comp. Science and Programm

Postby Mammon » Mon Apr 18, 2011 4:26 am UTC

Does it matter which language you choose as the first?
Mammon
 
Posts: 11
Joined: Wed Apr 13, 2011 8:13 pm UTC

Re: How do I start learning about Comp. Science and Programm

Postby Meteorswarm » Mon Apr 18, 2011 4:53 am UTC

Mammon wrote:Does it matter which language you choose as the first?


At a fundamental level, no, but all languages have their idioms, and only cover a small subset of the space of programming languages, so your first language will have a large impact on how you think about programming.

I think Python is a good language for beginners for a number of reasons - it has an interpreter, has simple syntax, supports but does not mandate classes and object-oriented design, and provides lambdas, but it is by no means perfect, and there are plenty of other languages that you can start on (i.e., all of them) and be a good programmer. Hell, I started with TRUEBASIC, and I turned out all right.

Also, bear in mind that programming is very far removed from computer science. A good programmer often knows a lot of computer science, but this is not always the case, and you don't even have to have access to a computer of any kind to be a good computer scientist. Just look at Turing, Church, Curry or Von Neumann.
The same as the old Meteorswarm, now with fewer posts!
User avatar
Meteorswarm
 
Posts: 980
Joined: Sun Dec 27, 2009 12:28 am UTC
Location: Ithaca, NY

Re: How do I start learning about Comp. Science and Programm

Postby EvanED » Mon Apr 18, 2011 5:06 am UTC

My take on this is that what language is best depends on what you're interested in. If you're the sort of person who wants to start getting in and making stuff, I think Python is one of the best choices out there. (It's certainly not perfect, as Meteorswarm says.) If you're getting into it because you say "I want to program for a career", you may want to consider Java, though I'm less convinced about that. If you want to see how the nuts and bolts work, then C or C++ isn't too bad. (I've even seen a "learn programming" book that goes about it via assembly.)

My feelings on the tradeoffs between a high-level language (e.g. Python) and pretty low-level language (like C) is as follows. High-level languages will get you building neat stuff extremely quickly. If you found the right material, you could even start doing coding of GUIs and such very very quickly in Python. (It'd be rather further down the line in Java, because you have more syntactic overhead and concepts to cover before you get there. And it'd be almost impossible in C I think.) I also think the level of something like Python is much closer to where people should be programming for almost everything (even though stuff like C, C++, and Java are more popular out in industry). I'm not saying Python is the right choice -- but I think it's madness the amount of programming that happens in C and C++ now.

On the other hand, it's a really good idea to have a good grounding in what underlies the "abstractions" you're using in a high-level language. And that's where I think most of the benefit of knowing C comes from (aside from potential employment). You get to see what goes on pretty close to the machine, and then as you move from C to Java or something you can learn how classes work behind the scenes, and that gives you a better understanding of why the language is structured the way it is.

Understand that this is, of course, all just one person's opinion.
EvanED
 
Posts: 3765
Joined: Mon Aug 07, 2006 6:28 am UTC
Location: Madison, WI

Re: How do I start learning about Comp. Science and Programm

Postby WarDaft » Mon Apr 18, 2011 5:47 am UTC

I sometimes wish the first language I had encountered was Haskell. Then I remember how many times installing new modules has inexplicably failed over and over, thus preventing me from doing all sorts of neat stuff that should have been quite simple. So it's a toss up.

Any language that enforces currently believed to be good coding practices would be a good place to start. It might be frustrating, but overall the process of becoming a good coder would be faster.
All Shadow priest spells that deal Fire damage now appear green.
Big freaky cereal boxes of death.
User avatar
WarDaft
 
Posts: 1538
Joined: Thu Jul 30, 2009 3:16 pm UTC

Re: How do I start learning about Comp. Science and Programm

Postby Parsifal » Mon Apr 18, 2011 10:27 am UTC

How to start learning about Comp. Science: Either learn math to about the level of discrete math, linear algebra and calculus, or learn to program. Otherwise, learning about algorithmic complexity and the kinds of problems basic programs can solve probably won't mean much to you.

How to learn to program. Speaking as a programmer with over 10 years of experience, I'd recommend reading this book: http://www.amazon.com/Java-Programmers-Paul-J-Deitel/dp/0137001290. When I was first learning, I was always disappointed by programing books geared toward total novices, which never quite went into enough detail to show you how to write a meaningful program. This is the book I wish I had read back then.

What I actually DID read was a book on x86 assembly language. I would have to say that this starting point, combined with a very old computer that couldn't do much more than build tiny programs in DEBUG, definitely influenced my approach to coding.
Parsifal
 
Posts: 114
Joined: Thu Feb 28, 2008 1:35 am UTC

Re: How do I start learning about Comp. Science and Programm

Postby Meteorswarm » Mon Apr 18, 2011 12:53 pm UTC

WarDaft wrote:I sometimes wish the first language I had encountered was Haskell. Then I remember how many times installing new modules has inexplicably failed over and over, thus preventing me from doing all sorts of neat stuff that should have been quite simple. So it's a toss up.

Any language that enforces currently believed to be good coding practices would be a good place to start. It might be frustrating, but overall the process of becoming a good coder would be faster.


Yeah, the other branch is learning functional programming first, which is totally awesome, but might make it hard to work with other programmers who don't know it so well.

http://learnyouahaskell.com/ is a pretty great way to learn functional programming for people who already know how to program imperatively (the main other way)
The same as the old Meteorswarm, now with fewer posts!
User avatar
Meteorswarm
 
Posts: 980
Joined: Sun Dec 27, 2009 12:28 am UTC
Location: Ithaca, NY

Re: How do I start learning about Comp. Science and Programm

Postby Mammon » Tue Apr 19, 2011 5:15 am UTC

Thanks, guys. I've decided to start learning Haskell and then learning Python after that.
Mammon
 
Posts: 11
Joined: Wed Apr 13, 2011 8:13 pm UTC

Re: How do I start learning about Comp. Science and Programm

Postby Meteorswarm » Tue Apr 19, 2011 1:41 pm UTC

Mammon wrote:Thanks, guys. I've decided to start learning Haskell and then learning Python after that.


Just verifying that you know this but, the tutorial I linked assumes proficiency with some language other than Haskell.
The same as the old Meteorswarm, now with fewer posts!
User avatar
Meteorswarm
 
Posts: 980
Joined: Sun Dec 27, 2009 12:28 am UTC
Location: Ithaca, NY

Re: How do I start learning about Comp. Science and Programm

Postby ochuckles » Tue Apr 19, 2011 4:52 pm UTC

Abelson and Sussman's Structure and Interpretation of Computer Programs.

I believe there is a free edition online somewhere.
ochuckles
 
Posts: 8
Joined: Sun Nov 14, 2010 9:24 pm UTC

Re: How do I start learning about Comp. Science and Programm

Postby Mammon » Tue Apr 19, 2011 7:58 pm UTC

Meteorswarm wrote:
Mammon wrote:Thanks, guys. I've decided to start learning Haskell and then learning Python after that.


Just verifying that you know this but, the tutorial I linked assumes proficiency with some language other than Haskell.


I understand. I'm using this instead.
Mammon
 
Posts: 11
Joined: Wed Apr 13, 2011 8:13 pm UTC

Re: How do I start learning about Comp. Science and Programm

Postby LakatosIstvan » Thu Apr 21, 2011 10:50 pm UTC

Stop! Programming isn't just about learning a few languages and using them to write some programs. Do yourself some good and start reading Structure and Interpretation of Computer Programs. Not only will you learn things that others had to learn in ages, but you will also learn to program in the kickass Lisp programming language, more exactly in the very elegant Scheme dialect. Just Google the book, and have fun.
Sir_Elderberry wrote:Cords are not just bendy cylinders. They are flexible, animate beings possessed by spirits whose intentions are beyond our ken. They are Cthulu's tentacles intruding on our reality.
LakatosIstvan
 
Posts: 87
Joined: Tue Jun 03, 2008 5:54 pm UTC
Location: Sector ZZ9 Plural Z Alpha

Re: How do I start learning about Comp. Science and Programm

Postby Meteorswarm » Fri Apr 22, 2011 3:31 am UTC

LakatosIstvan wrote:Stop! Programming isn't just about learning a few languages and using them to write some programs. Do yourself some good and start reading Structure and Interpretation of Computer Programs. Not only will you learn things that others had to learn in ages, but you will also learn to program in the kickass Lisp programming language, more exactly in the very elegant Scheme dialect. Just Google the book, and have fun.


Scheme is a popular choice for first language among functional newbies, but it's not really objectively better than Haskell, which is quite elegant IMO, and teaches concepts just as well. Haskell also has types, which can be very handy for a novice.
The same as the old Meteorswarm, now with fewer posts!
User avatar
Meteorswarm
 
Posts: 980
Joined: Sun Dec 27, 2009 12:28 am UTC
Location: Ithaca, NY

Re: How do I start learning about Comp. Science and Programm

Postby EvanED » Fri Apr 22, 2011 5:11 am UTC

Meteorswarm wrote:Scheme is a popular choice for first language among functional newbies, but it's not really objectively better than Haskell, which is quite elegant IMO, and teaches concepts just as well. Haskell also has types, which can be very handy for a novice.

"Haskell" doesn't teach anything unless you're way way smarter than I am. It's whatever guide you're using for learning Haskell that teaches you stuff. SICP is of high quality, and is certainly a reasonable thing to start with. (There are even old video lectures associated with the 1st edition of the book that you can download.)

Now, I don't know any of the suggestions, so it's quite possible that they are good as well; but if they aren't, or you don't feel like evaluating them, then SICP would be a pretty good reason to start with Scheme.

(A disclaimer here is that MIT has changed their intro CS class from Scheme to Python.)
EvanED
 
Posts: 3765
Joined: Mon Aug 07, 2006 6:28 am UTC
Location: Madison, WI

Re: How do I start learning about Comp. Science and Programm

Postby TheChewanater » Sun May 01, 2011 12:48 am UTC

Guys, obviously $x is the best language to start with because it supports $y, which is the most important thing you must learn first because $z.
ImageImage
http://internetometer.com/give/4279
No one can agree how to count how many types of people there are. You could ask two people and get 10 different answers.
User avatar
TheChewanater
 
Posts: 1260
Joined: Sat Aug 08, 2009 5:24 am UTC

Re: How do I start learning about Comp. Science and Programm

Postby headprogrammingczar » Mon May 02, 2011 4:29 pm UTC

First you must learn to program in minesweeper, because it will teach you that even the most random things are Turing complete!

On topic, I think Learn You a Haskell is a better intro to programming than SICP. It is written in a much more informal style, and even though it claims to assume prior knowledge, I haven't found it to generally be the case. It's a very accessible resource. Also, it is a better introduction to the theoretical aspects of computer science. It doesn't get nearly as advanced as SICP does, but it points you closer to the deep end.
<quintopia> You're not crazy. you're the goddamn headprogrammingspock!
<Weeks> You're the goddamn headprogrammingspock!
<Cheese> I love you
User avatar
headprogrammingczar
 
Posts: 2953
Joined: Mon Oct 22, 2007 5:28 pm UTC
Location: Beaming you up

Re: How do I start learning about Comp. Science and Programm

Postby achan1058 » Mon May 02, 2011 11:26 pm UTC

headprogrammingczar wrote:First you must learn to program in minesweeper, because it will teach you that even the most random things are Turing complete!
While I don't agree on programming in Minesweeper, I do think programming a Minesweeper game would teach you quite a bit about the language you are using.
achan1058
 
Posts: 1791
Joined: Sun Nov 30, 2008 9:50 pm UTC

Re: How do I start learning about Comp. Science and Programm

Postby Parsifal » Tue May 03, 2011 10:44 am UTC

That's not a bad exercise to see if you feel like you have the aptitude for coding. I work with a number of mediocre coders who couldn't write a minesweeper game, with or without graphics, to save their lives.
Parsifal
 
Posts: 114
Joined: Thu Feb 28, 2008 1:35 am UTC

Re: How do I start learning about Comp. Science and Programm

Postby Dason » Thu May 05, 2011 7:38 pm UTC

This conversation got me to write a usable minesweeper clone in R. It started as a console only version where you had to specify the row and column you wanted to check. Then I added the ability to point and click. I should probably use Gtk or Qt or something but instead I just used the built in functions to interact with a plot. You can only detect a click and can't differentiate between right click and left click so there is no ability to set flags. But it's all built on top of the plotting device.

It's interesting what I choose to waste my time on...
double epsilon = -.0000001;
User avatar
Dason
 
Posts: 1264
Joined: Wed Dec 02, 2009 7:06 am UTC
Location: ~/

Re: How do I start learning about Comp. Science and Programm

Postby Meteorswarm » Thu May 05, 2011 9:49 pm UTC

Dason wrote:This conversation got me to write a usable minesweeper clone in R. It started as a console only version where you had to specify the row and column you wanted to check. Then I added the ability to point and click. I should probably use Gtk or Qt or something but instead I just used the built in functions to interact with a plot. You can only detect a click and can't differentiate between right click and left click so there is no ability to set flags. But it's all built on top of the plotting device.

It's interesting what I choose to waste my time on...


Care to post the code? Github or gitorious would be awesome; maybe somebody'll write a front end for you.
The same as the old Meteorswarm, now with fewer posts!
User avatar
Meteorswarm
 
Posts: 980
Joined: Sun Dec 27, 2009 12:28 am UTC
Location: Ithaca, NY

Re: How do I start learning about Comp. Science and Programm

Postby Dason » Thu May 05, 2011 9:52 pm UTC

Hmm. I was talking to somebody recently who wanted to make a version of battleship within R so I might just set up a github repository so we can combine them and just have an Rgames package or something similar. I'll see what I can pull together.
double epsilon = -.0000001;
User avatar
Dason
 
Posts: 1264
Joined: Wed Dec 02, 2009 7:06 am UTC
Location: ~/

Re: How do I start learning about Comp. Science and Programm

Postby ugmhemhe » Thu May 12, 2011 2:14 am UTC

C++ would be great for beginners :D
Image
User avatar
ugmhemhe
 
Posts: 51
Joined: Fri May 06, 2011 6:20 am UTC

Re: How do I start learning about Comp. Science and Programm

Postby Meteorswarm » Thu May 12, 2011 7:55 am UTC

ugmhemhe wrote:C++ would be great for beginners :D

D:
The same as the old Meteorswarm, now with fewer posts!
User avatar
Meteorswarm
 
Posts: 980
Joined: Sun Dec 27, 2009 12:28 am UTC
Location: Ithaca, NY


Return to Computer Science

Who is online

Users browsing this forum: No registered users and 5 guests