Beginning in Computer Science

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

Formal proofs preferred.

Moderators: phlip, Larson, Moderators General, Prelates

Beginning in Computer Science

Postby D.Mentia » Wed Dec 05, 2007 5:48 am UTC

There are lots of beginner tutorials and threads everywhere, but none about Computer Science itself. I know the beginnings of many languages, and I like to think I've got decent logic, but how would I go about getting into the big bad world of algorithms and all that jazz in Computer Science? It seems the *least* important thing of the field is knowing your languages ... that's assumed, and isn't difficult. How do I get into the harder parts? And for example, if it's all theoretical, then what kinds of things could I theorize about? :lol:, seems a crappy question, but nonetheless ... within the next decade, I hope to graduate as a Computer Science major, but currently the only things I've touched are the languages (and to be honest, I'm taking some language classes because they're apparently required to get into a real college, and this place has no real CS training. I need to spend about 2 years here, and I'm worried that by the time I get to a *real* college, I'm going to be too behind in CS).
Help me out here? :D
D.Mentia
 
Posts: 3
Joined: Wed Dec 05, 2007 5:35 am UTC

Re: Beginning in Computer Science

Postby TomBot » Wed Dec 05, 2007 5:59 am UTC

Aside from the languages, I can think of about 4 big things. Big O notation (pretty easy), data structures (pointers, linked lists, trees, graphs, etc.), complexity theory (finite-state machines, Turing machines, N and NP), and compiler stuff (parse trees, formal grammars). Maybe how to use matrices and homogeneous coordinates in 3D graphics. Discrete math is kind of a prerequisite.

Also, don't skimp on the programming skills. There's more to it than just knowing the language, you also need to write good code, which requires good instincts. Avoid duplication at all costs, be general when you can, comment well, make good designs, have test cases. Don't use trial-and-error, instead, review the code yourself and pick out bugs by inspection, rather than waiting for them to show. If you go to a university, you can't help but learn the stuff in the first paragraph, but it's easy to miss forming good habits.
User avatar
TomBot
 
Posts: 228
Joined: Sun Jul 29, 2007 1:17 am UTC
Location: Illinois (UIUC)

Re: Beginning in Computer Science

Postby Workaphobia » Wed Dec 05, 2007 6:34 am UTC

Wow, the previous post pretty much covered it all. I'd recommend in particular looking into a book on data structures and algorithms - something covering common structures such as arrays/vectors, linked lists, trees, hash tables, queues/stacks, and heaps; asymptotic complexity (Big-O notation); and various algorithms like sorts, Dijkstra's algorithm, spanning tree algorithms, and topological sorts. If you really, really want to get theoretical, study up on Turing machines, finite autonoma, NP-completeness, etc.. I learned a small bit about this from Wikipedia before I started college, but it's extremely difficult to get into from just an article or two.
Evidently, the key to understanding recursion is to begin by understanding recursion.

The rest is easy.
Workaphobia
 
Posts: 120
Joined: Thu Jan 25, 2007 12:21 am UTC

Re: Beginning in Computer Science

Postby spelunker » Wed Dec 05, 2007 7:37 am UTC

Data structures are a must, I agree, along with algorithms. We used this book in my Algorithms course and it was pretty good explaining things.

I'd also learn up on concurrency/threading stuff, because that's going to become more and more of an issue since regular desktop pc's are getting multiple cores now. There's all kinds of theory involved with that area; deadlock prevention and whatnot.

Database theory would be good too. Normalization, SQL, functional dependencies, tuple algebra (I think it's called that), etc.

Computer Science is a big field, and can involve a lot more than simply programming. Which is why it's so cool :-)
spelunker
 
Posts: 102
Joined: Wed Dec 05, 2007 7:07 am UTC

Re: Beginning in Computer Science

Postby tsears » Wed Dec 05, 2007 8:00 am UTC

D.Mentia wrote:I know the beginnings of many languages


Another thing worth mentioning, is what KIND of languages have you been familiarized with? I was pretty impressed with myself with how many languages I could grok before I took a class that introduced me to the non-imperative languages.

If you haven't, check out a functional language (Lisp, Scheme, Haskell, ML). Also check out a logic based language like prolog.
User avatar
tsears
 
Posts: 8
Joined: Tue Dec 04, 2007 6:27 am UTC

Re: Beginning in Computer Science

Postby Herrgray » Wed Dec 05, 2007 8:34 am UTC

The big topics have been hit. IMO, the most general division of the non-coding subjects is algorithms, math skills and formal semantics (State/Turing machines, grammars, etc).

My favorite algs book is this one and one of many good discrete books is here

Cost is an obvious issue, but both of those texts can easily be used to teach yourself the subjects, along with online references and a good forum/friend to bounce questions off of.
Herrgray
 
Posts: 15
Joined: Wed Nov 14, 2007 9:14 am UTC

Re: Beginning in Computer Science

Postby Anpheus » Wed Dec 05, 2007 9:31 am UTC

Don't ever forget that when you do data structures, you should start thinking in terms of "How efficient is this in terms of space/time?" You'll learn about tons of structures and tiny details that differentiate them from one another, but if you're using a hash table to store five items, or using an inefficient sort over an array of ten million, you're causing untold problems for yourself and the developers who will follow you.

And always remember, don't optimize prematurely. Determine which and where your data structure or algorithm are failing to meet expectations, then optimize. If you spend two weeks optimizing a function from O(n^2) to O(n log n) and then find out n is always less than 5, well, you probably just wasted two weeks.

I'd say though that all of the big issues, as everyone else has said, has been hit on. Try to tackle a little bit of everything in low doses, because computer science is a field that branched out really, really quickly. You'll benefit most if you know a little bit of everything and find out what you really like doing the most early on, and for the simple stuff like Big-O notation, you'll gain huge benefits in everything else from understanding it. To compare, mathematics took thousands of years to produce sizable differences in various fields, yet today we already have over a dozen different titles and jobs that require different degrees of specialization. Database experts and generic system administrators, debuggers, analysts, designers, security experts, all fulfilling different roles in the overarching field of computer science. Yes, I know it all boils down to math, but there's a reason you don't go from Multivariate Calculus to Database Design.
Spoiler:
Code: Select all
  /###\_________/###\
  |#################|
  \#################/
   |##┌         ┐##|
   |##  (¯`v´¯)  ##|
   |##  `\ ♥ /´  ##|
   |##   `\¸/´   ##|
   |##└         ┘##|
  /#################\
  |#################|
  \###/¯¯¯¯¯¯¯¯¯\###/
User avatar
Anpheus
I can't get any worse, can I?
 
Posts: 860
Joined: Fri Nov 16, 2007 10:38 pm UTC
Location: A privileged frame of reference.

Re: Beginning in Computer Science

Postby D.Mentia » Thu Dec 06, 2007 3:15 am UTC

Thanks for the help :P, I'll be googling alot of things now. Discrete math? I skipped out on that for Calculus ... xD. Anyway, I'll be sure to address any questions I have about all this stuff here, so keep an eye out ... though I don't expect to fully understand any or all of it for quite a while. That's what most people spend four years doing in a university, eh?
D.Mentia
 
Posts: 3
Joined: Wed Dec 05, 2007 5:35 am UTC

Re: Beginning in Computer Science

Postby btilly » Thu Dec 06, 2007 3:19 am UTC

Question. Do you really want to learn computer science, or programming?

If you want to learn programming, then I'm going to recommend that you start with reading Code Complete II. If you want to learn computer science, I'm a fan of The Structure and Interpretation of Computer Programming. (Even though it is orthogonal to the other topics that have been specified.)
Some of us exist to find out what can and can't be done.

Others exist to hold the beer.
btilly
 
Posts: 1877
Joined: Tue Nov 06, 2007 7:08 pm UTC

Re: Beginning in Computer Science

Postby Webzter » Thu Dec 06, 2007 3:42 am UTC

Ok, this probably isn't a great 'beginning' comp sci book, but it's one that I've adored since I first picked it up (it was our textbook for my data structures class) is 'Compared to What' by Rawlins. I'm sure the other alg books mentioned are excellent as well, but I have a soft spot for this one.

I'm not sure if you can buy it new but it's well worth grabbing if you have a chance. (consider the book a glorious extension of every point Anpheus made)

Also, you'd be remiss if you didn't at least consider 'The Art of Computer Programming' by Knuth. (consider it to be fundamental material). He also has lectures online: http://scpd.stanford.edu/knuth/
Webzter
 
Posts: 179
Joined: Tue Dec 04, 2007 4:16 pm UTC
Location: Michigan, USA

Re: Beginning in Computer Science

Postby quintopia » Thu Dec 06, 2007 5:01 am UTC

One vote for CLRS (Cormen, Leiserson, Rivest, and Stern). A good basic intro to algorithms, filled with pseudocode that you just know you may have to implement someday.
User avatar
quintopia
 
Posts: 2790
Joined: Fri Nov 17, 2006 2:53 am UTC
Location: atlanta, ga

Re: Beginning in Computer Science

Postby Aria » Fri Dec 07, 2007 5:00 am UTC

For anyone that did Computer Science in college, is there anything that you need to know before starting it for undergrad?
Aria
 
Posts: 2
Joined: Fri Dec 07, 2007 4:15 am UTC

Re: Beginning in Computer Science

Postby Rysto » Fri Dec 07, 2007 5:08 am UTC

Not really. Even if you don't know how to program going into a CS program, they should have an introductory programming course for you to start in.
Rysto
 
Posts: 1420
Joined: Wed Mar 21, 2007 4:07 am UTC

Re: Beginning in Computer Science

Postby Webzter » Fri Dec 07, 2007 5:10 am UTC

Aria wrote:For anyone that did Computer Science in college, is there anything that you need to know before starting it for undergrad?


It's pedantic, but I feel that I should point out that the purpose (IMHO) of a comp sci undergrad is to prepare you to go on to post-grad comp sci work. Granted, many of us chose that undergrad path and ended up as programmers, but that's not really the purpose of the degree. Once you're down with that, then no, you'll pick it up pretty fast or switch majors.

A love of computers and logic are necessary. Liking math can be essential (I wish I had paid more attention to math in college and after... working to remedy that now).
Webzter
 
Posts: 179
Joined: Tue Dec 04, 2007 4:16 pm UTC
Location: Michigan, USA

Re: Beginning in Computer Science

Postby davean » Fri Dec 07, 2007 6:36 am UTC

Webzter wrote:
Aria wrote:For anyone that did Computer Science in college, is there anything that you need to know before starting it for undergrad?


It's pedantic, but I feel that I should point out that the purpose (IMHO) of a comp sci undergrad is to prepare you to go on to post-grad comp sci work. Granted, many of us chose that undergrad path and ended up as programmers, but that's not really the purpose of the degree. Once you're down with that, then no, you'll pick it up pretty fast or switch majors.

A love of computers and logic are necessary. Liking math can be essential (I wish I had paid more attention to math in college and after... working to remedy that now).


Most colleges seem to treat undergrad "computer science" as programmer preparatory. Your lucky if even trying you can really get properly prepared for computer science.
User avatar
davean
Site Ninja
 
Posts: 2410
Joined: Sat Apr 08, 2006 7:50 am UTC

Re: Beginning in Computer Science

Postby quintopia » Fri Dec 07, 2007 5:00 pm UTC

davean wrote:Most colleges seem to treat undergrad "computer science" as programmer preparatory. Your lucky if even trying you can really get properly prepared for computer science.


Webzter wrote:It's pedantic, but I feel that I should point out that the purpose (IMHO) of a comp sci undergrad is to prepare you to go on to post-grad comp sci work.


So which is it? Do more schools treat it as programming prep or CS post-grad prep?
User avatar
quintopia
 
Posts: 2790
Joined: Fri Nov 17, 2006 2:53 am UTC
Location: atlanta, ga

Re: Beginning in Computer Science

Postby segmentation fault » Fri Dec 07, 2007 5:09 pm UTC

davean wrote:Most colleges seem to treat undergrad "computer science" as programmer preparatory. Your lucky if even trying you can really get properly prepared for computer science.


mine didnt. there was more computational theory than programming classes, and the classes we did do programming in were about writing programs to compute things. i only had 2 classes on actual real-word development, and sadly to say it wasnt enough, as i have learned more on the job in 2 years than i did throughout 4 years of school.
people are like LDL cholesterol for the internet
User avatar
segmentation fault
 
Posts: 1770
Joined: Wed Dec 05, 2007 4:10 pm UTC
Location: Nu Jersey

Re: Beginning in Computer Science

Postby Webzter » Fri Dec 07, 2007 5:47 pm UTC

quintopia wrote:
davean wrote:Most colleges seem to treat undergrad "computer science" as programmer preparatory. Your lucky if even trying you can really get properly prepared for computer science.


Webzter wrote:It's pedantic, but I feel that I should point out that the purpose (IMHO) of a comp sci undergrad is to prepare you to go on to post-grad comp sci work.


So which is it? Do more schools treat it as programming prep or CS post-grad prep?


At my college, most of the programming classes were in the CIS degree (business college courses) while the computational classes were in the CS degree (science department). You automatically graduated with a math minor in the CS track and were so close to a math major that many people just double-majored math/cs. They had a hybrid course as well, which is what I was in. That skimped on the math and included more programming courses from the CIS track and you ended up with a CIS minor and a CS major with no emphasis on math... worked well for where I wanted to go in life, YMMV (as an aside, though, I'd be lost if I chose to pursue post-grad CS coursework as I don't have the math background necessary now).
Webzter
 
Posts: 179
Joined: Tue Dec 04, 2007 4:16 pm UTC
Location: Michigan, USA

Re: Beginning in Computer Science

Postby Herrgray » Sat Dec 08, 2007 11:34 pm UTC

quintopia wrote:So which is it? Do more schools treat it as programming prep or CS post-grad prep?

Personally, my undergraduate degree has been more of post-grad prep. Now, to be fair, I got a Math/CS joint degree, but it included many many classes that would have little purpose in a programming preparatory degree. For instance, while I took standard data structures/discrete math/algorithms classes, I also took Artificial Intelligence, Abstract Algebra and Real Analysis classes that were required for my major, which you would be hard pressed to find much use for in (main stream) programming jobs.

However, I can't hope to speak for the average pure CS degree, just joint CS and Math programs.
Herrgray
 
Posts: 15
Joined: Wed Nov 14, 2007 9:14 am UTC

Re: Beginning in Computer Science

Postby laser » Tue Dec 11, 2007 5:31 pm UTC

I'm surprised no-one's mentioned hardware yet?

Basic electronics (don't really need to go in detail) and logic circuit design.
laser
 
Posts: 9
Joined: Wed Oct 17, 2007 11:35 am UTC
Location: Oxford, UK

Re: Beginning in Computer Science

Postby Rysto » Tue Dec 11, 2007 6:50 pm UTC

That usually falls under Computer or Electrical Engineering. You should see some processor design in CS, but not much.
Rysto
 
Posts: 1420
Joined: Wed Mar 21, 2007 4:07 am UTC

Re: Beginning in Computer Science

Postby davean » Tue Dec 11, 2007 10:19 pm UTC

Rysto wrote:That usually falls under Computer or Electrical Engineering. You should see some processor design in CS, but not much.


Usually you see architecture design, which requires an awareness of processor design and might require some processor design to prove it as viable but is no really processor design.
User avatar
davean
Site Ninja
 
Posts: 2410
Joined: Sat Apr 08, 2006 7:50 am UTC

Re: Beginning in Computer Science

Postby Anpheus » Tue Dec 11, 2007 11:01 pm UTC

davean wrote:
Rysto wrote:That usually falls under Computer or Electrical Engineering. You should see some processor design in CS, but not much.


Usually you see architecture design, which requires an awareness of processor design and might require some processor design to prove it as viable but is no really processor design.


Right-o. Computer science and modern processing circuit engineering have only the weakest of links tying them together... Computer scientists will generally deal far, far more with algorithms, data structures, and optimization, and will be capable of proving their worst, amortized, and best case time, whereas a processor engineer will deal with things as weird as leakage current, how to reuse a gate a dozen times in the course of an operation to get a speed up, how to avoid race conditions on circuits, and of course, every time they reduce the gate size, the new ground rules. Every time Intel or AMD drops the #μm (and now #nm) that describes the minimum feature size on the chip, they get closer to the point where quantum effects are playing havoc with what their circuit is supposed to do. The result is that they have to write enormous lists of rules of where this might cause that in an unexpected way, where electron tunneling can cause adverse results, etc. It's a complex process that I think I'm even underestimating the intricacy of.
Spoiler:
Code: Select all
  /###\_________/###\
  |#################|
  \#################/
   |##┌         ┐##|
   |##  (¯`v´¯)  ##|
   |##  `\ ♥ /´  ##|
   |##   `\¸/´   ##|
   |##└         ┘##|
  /#################\
  |#################|
  \###/¯¯¯¯¯¯¯¯¯\###/
User avatar
Anpheus
I can't get any worse, can I?
 
Posts: 860
Joined: Fri Nov 16, 2007 10:38 pm UTC
Location: A privileged frame of reference.

Re: Beginning in Computer Science

Postby spelunker » Sat Dec 15, 2007 1:19 am UTC

I think at least understanding what's going on is a great help, though. I was so proud of myself when I built a digital counter that went up to four and started over using logic gates on a circuit board.

Assembler was part of the class, too. Seeing a for loop implemented in assembly, again, helped me appreciate what was going on when I wrote a for loop in my programs. It all sorta seemed like hand-waiving until that point: "I write a program, the computer compiles it, which somehow turns into a bunch of electrical signals signifying stuff..."

Like it's been mentioned, CS is more than just programming, and I think hardware falls into this because the hardware is what makes half the computer.
spelunker
 
Posts: 102
Joined: Wed Dec 05, 2007 7:07 am UTC

Re: Beginning in Computer Science

Postby Azquelt » Wed Dec 19, 2007 12:08 am UTC

quintopia wrote:So which is it? Do more schools treat it as programming prep or CS post-grad prep?


I think it depends on where you go. My course (at Bath) has been mostly half and half. This last semester we've had one Databases and User Interface Programming on the one hand and Formal Logic and Semantics and Mathematics for applications on the other. We also had a module on Lisp and the Lambda Calculus which could go on either pile.
User avatar
Azquelt
 
Posts: 98
Joined: Tue Apr 10, 2007 10:39 pm UTC

Re: Beginning in Computer Science

Postby Iori_Yagami » Wed Dec 19, 2007 9:27 am UTC

I might sound old-fashioned and all, but I think things like algorithms and data structures are the salt of everything around programming. Besides, they are not that difficult (at least, basic). Moreover, they help much more that they require from you. Having a clean algorithm in your head is much 'healthier' than forever slamming code into Button1Clicks until it 'works'.
Those thing are, in a sense, 'solutions' of how to think about your programs.
Also, formal logic is the easiest and most coherent course I ever encountered. Many laws are self-evident, writing predicates is easy and clean, nothing is arbitrary. (unlike custom frameworks) :wink:
They cannot defend themselves; they cannot run away. INSANITY is their only way of escape.
User avatar
Iori_Yagami
 
Posts: 606
Joined: Wed Oct 03, 2007 8:37 pm UTC

Re: Beginning in Computer Science

Postby Hammer » Fri Dec 21, 2007 7:53 pm UTC

Recursion moved to Religious Wars. Feel free to continue that discussion there and this one on topic.
"What's wrong with you mathematicians? Cake is never a problem."
User avatar
Hammer
Because all of you look like nails.
 
Posts: 5486
Joined: Thu May 03, 2007 7:32 pm UTC

Re: Beginning in Computer Science

Postby akashra » Tue Jan 01, 2008 7:14 am UTC

I tend to find those who can't do Math can't do Computer Science. It's unfortunate how courses these days are being dumbed down and 'Computer Science' courses are becoming more like 'Software Development' courses.
From the above mentioned, O(n) is a no brainer. Pointers seem to be where everyone trips up, realistically it's a good idea to introduce people to ASM before pointers though. Data Structures aren't just a good idea, they're a law - any programmer should be able to write these in their sleep. We're not talking just basic ArrayLists, HashMaps and Binary Trees either. Any GOOD programmer should be able to write Semaphores, Channels, Barriers, Latches, Priority Queues and Exchangers by the time they leave University. Sadly, these days I can't even find people who would know how to write a LinkedList graduating out of Uni, which makes hiring juniors next to impossible.
Things like recursion are pretty basic topics in Computer Science. I don't expect VB or Multimedia devs to always have their heads around it though.

If you want to do 3D math, have a look into Dunn and Parberry's book. I think you're doing pretty well if your head is squarely around Quaternions and Matrices.

I don't expect people to be able to recite/use Dijkstra's off the top of their head, but it is nice. I think this kind of thing is kinda specialised though these days. If you go into any kind of games dev position, or perhaps defense/communications areas, then yeah, AI will come up.

Databases are pretty much a requirement these days no matter where you go. Having a thorough understanding of SQL is a basic level; I'd call optimizing indexes and data to be a requirement for when I'm hiring, sanitizing is a huge security issue; If you want to impress me in an interview give me a good low-level rundown of how InnoDB, BerekelyDB etc.

Languages? It does not matter what you spend most of your time in! However I do recommend you start with ASM, C, and at least be exposed to some VB, either C# or Java, and PHP, Ruby or Python before you leave uni. A good programmer can just switch between languages and learn new ones within a few weeks. There's a big demand for ActionScript devs at the moment - try find someone who's even heard of that before leaving uni who's not a Multimedia grad!

Hope this input helps a few newbies :)
( find / -name \*base\* -exec chown us : us { } \ ; )
akashra
 
Posts: 503
Joined: Tue Jan 01, 2008 6:54 am UTC
Location: Melbourne, AU

Re: Beginning in Computer Science

Postby Nebulae » Sun Feb 24, 2008 1:14 am UTC

Um, what's the difference between computer science and programming? I never really got the difference.
User avatar
Nebulae
 
Posts: 593
Joined: Wed Feb 06, 2008 11:20 pm UTC
Location: Anywhere

Re: Beginning in Computer Science

Postby Nath » Sun Feb 24, 2008 3:39 am UTC

Nebulae wrote:Um, what's the difference between computer science and programming? I never really got the difference.

Programming is writing instructions for computers to solve some specific problem.

Computer science is a field of academic study that tries to figure out what sort of problems can be solved, and how we might be able to solve problems that we can't solve yet.

In other words, computer science is a relatively abstract field of study whose major application is computer programming. The primary output of a computer scientist is knowledge for other human beings. The primary output of a computer programmer is a computer program.
User avatar
Nath
 
Posts: 2619
Joined: Sat Sep 08, 2007 8:14 pm UTC

Re: Beginning in Computer Science

Postby Nebulae » Sun Feb 24, 2008 3:50 am UTC

Nath wrote:Programming is writing instructions for computers to solve some specific problem.

Computer science is a field of academic study that tries to figure out what sort of problems can be solved, and how we might be able to solve problems that we can't solve yet.

In other words, computer science is a relatively abstract field of study whose major application is computer programming. The primary output of a computer scientist is knowledge for other human beings. The primary output of a computer programmer is a computer program.

But in order to solve problems that you haven't solved yet, wouldn't you need to program?
User avatar
Nebulae
 
Posts: 593
Joined: Wed Feb 06, 2008 11:20 pm UTC
Location: Anywhere

Re: Beginning in Computer Science

Postby EvanED » Sun Feb 24, 2008 4:00 am UTC

Not necessarily. You don't need to actually do any programming to think of a new algorithm for a problem, or prove a property of an old one. And programming isn't necessarily doing much computer science.

There is a Dijkstra quote "Computer Science is no more about computers than astronomy is about telescopes." Perhaps it's born out of my ignorance of what falls under the purview of astronomy, but I have a lot of problems with this statement, but it is half true.
EvanED
 
Posts: 3765
Joined: Mon Aug 07, 2006 6:28 am UTC
Location: Madison, WI

Re: Beginning in Computer Science

Postby Nath » Sun Feb 24, 2008 4:28 am UTC

Nebulae wrote:But in order to solve problems that you haven't solved yet, wouldn't you need to program?

It helps. Computer scientists do program a lot more than the general public, and it's hard to do computer science without being at least a reasonably competent coder. But programming is a means to an end in computer science, just as it's a means to an end in physics or molecular biology.

But no, you don't need to program to solve an unsolved problem. A program is a specific implementation of an algorithm. You need to reason about the algorithm itself.
User avatar
Nath
 
Posts: 2619
Joined: Sat Sep 08, 2007 8:14 pm UTC

Re: Beginning in Computer Science

Postby Nebulae » Sun Feb 24, 2008 5:52 am UTC

Nath wrote:
Nebulae wrote:But in order to solve problems that you haven't solved yet, wouldn't you need to program?

It helps. Computer scientists do program a lot more than the general public, and it's hard to do computer science without being at least a reasonably competent coder. But programming is a means to an end in computer science, just as it's a means to an end in physics or molecular biology.

But no, you don't need to program to solve an unsolved problem. A program is a specific implementation of an algorithm. You need to reason about the algorithm itself.

Ah, gotcha. Yeah, I took a CS course in high school. The algorithms and logic came easily. The actual implementation was a lot harder.

Anyway, how do you go about doing or studying computer science? Is it math? Proofs? What is it?
User avatar
Nebulae
 
Posts: 593
Joined: Wed Feb 06, 2008 11:20 pm UTC
Location: Anywhere

Re: Beginning in Computer Science

Postby Nath » Sun Feb 24, 2008 6:24 am UTC

Nebulae wrote:
Nath wrote:
Nebulae wrote:But in order to solve problems that you haven't solved yet, wouldn't you need to program?

It helps. Computer scientists do program a lot more than the general public, and it's hard to do computer science without being at least a reasonably competent coder. But programming is a means to an end in computer science, just as it's a means to an end in physics or molecular biology.

But no, you don't need to program to solve an unsolved problem. A program is a specific implementation of an algorithm. You need to reason about the algorithm itself.

Ah, gotcha. Yeah, I took a CS course in high school. The algorithms and logic came easily. The actual implementation was a lot harder.

Anyway, how do you go about doing or studying computer science? Is it math? Proofs? What is it?

It depends on the area. Here are a few major research areas, and loose definitions:
  • Computational theory: proving things about computation.
  • Artificial intelligence: designing general-purpose problem solvers.
  • Systems: studying the principles of how to build complex computer systems (networks, operating systems etc.).
  • Software engineering: studying the principles of software development.
  • Computer graphics: improving the capabilities of computers to produce graphics.
  • Computer architecture: improving the design of computer hardware.
As you might imagine, people working in different areas can expect to do different kinds of things. A theory person is pretty much a mathematician who happens to focus on computational problems. A systems person might have to write a fair amount of code, because systems are often hard to reason about without actually building them. Most other areas fall somewhere in between.
User avatar
Nath
 
Posts: 2619
Joined: Sat Sep 08, 2007 8:14 pm UTC

Re: Beginning in Computer Science

Postby Nebulae » Sun Feb 24, 2008 9:14 am UTC

I see. Makes a lot more sense now, thanks. Man, comp sci and engineering are so broad haha. How good are AI these days by the way? Are we close to the singularity yet :oops:?
User avatar
Nebulae
 
Posts: 593
Joined: Wed Feb 06, 2008 11:20 pm UTC
Location: Anywhere

Re: Beginning in Computer Science

Postby Nath » Sun Feb 24, 2008 9:39 am UTC

Nebulae wrote:I see. Makes a lot more sense now, thanks. Man, comp sci and engineering are so broad haha. How good are AI these days by the way? Are we close to the singularity yet :oops:?

AI systems are slowly becoming more powerful, but I don't think we're anywhere near the singularity. This problem isn't going to magically solve itself for us just yet; we still have quite a few more years of scribbling on white-boards and drinking coffee.
User avatar
Nath
 
Posts: 2619
Joined: Sat Sep 08, 2007 8:14 pm UTC

Re: Beginning in Computer Science

Postby Nebulae » Sun Feb 24, 2008 10:05 am UTC

Hmm, I know shit about computer science and programming, but think the crux of figuring out how to design a true AI will be to discern how exactly intelligence arises. We biologists aren't even close to figuring out how the brain works, but I would argue that's not necessary at all in order to create AI. We know for sure that there is no blank slate though, rather, in the beginning the outside world for us is defined totally by what our biology tells us.
User avatar
Nebulae
 
Posts: 593
Joined: Wed Feb 06, 2008 11:20 pm UTC
Location: Anywhere

Re: Beginning in Computer Science

Postby Nath » Sun Feb 24, 2008 11:08 am UTC

Nebulae wrote:Hmm, I know shit about computer science and programming, but think the crux of figuring out how to design a true AI will be to discern how exactly intelligence arises. We biologists aren't even close to figuring out how the brain works, but I would argue that's not necessary at all in order to create AI. We know for sure that there is no blank slate though, rather, in the beginning the outside world for us is defined totally by what our biology tells us.

Maybe, but I think the true crux is understanding that intelligence isn't some mystical force that suddenly arises anywhere. It's just the ability to process information usefully. Computers already do that, just not in all the ways that we'd like. I don't think there'll ever be a point where we'll be able to say, "OK, computers are intelligent now, but they weren't yesterday".
User avatar
Nath
 
Posts: 2619
Joined: Sat Sep 08, 2007 8:14 pm UTC

Re: Beginning in Computer Science

Postby silverwmoon » Thu Feb 28, 2008 8:19 pm UTC

I'm glad to see someone mentioned hardware and circuit design. One thing I like about my program is that they've seperated it into Software engineers, Computer engineers, Computer Scienctists and combined degrees (like math or bio). The first are programers and software developpement people, the second do mostly hardware development and computer architecture, the comp. sci. people do what ever they want (programing, numerical analysis, architecture etc) and the last group do interesting degrees like combined comp sci/math or Biology or Geology etc.

I guess I would suggest if your idea of computer science is programming that you ensure that you do programming on your own time, put what they're teaching you to use, get involved in Open Source Software. I like what was said about how you don't have to be a programmer in Comp Sci. either. MY algorithms prof can't program to save his life from what I can tell, all his examples of implementation are terrible and we use pseudo code for everything in his class. Nath's list is really well done I think, though perhaps don't include some of the other knowledge you need for some of those (physics is always helpful).

*not touching AI with a 10ft pole, I'd make you all hate me I'm sure ;_;*
Image
User avatar
silverwmoon
 
Posts: 18
Joined: Wed Feb 27, 2008 8:10 pm UTC
Location: Canada, asleep


Return to Computer Science

Who is online

Users browsing this forum: No registered users and 3 guests