Tell me more ×
Programmers Stack Exchange is a question and answer site for professional programmers interested in conceptual questions about software development. It's 100% free, no registration required.

I'm 16 years old and really an enthusiast on web programming. I know (X)HTML, css, javascript and php. And i heard about computer science. Below are my question:

  1. What is computer science?
  2. Should a web programmer learn computer science?
  3. If the answer of question 2 is yes, then what programming language(s) should I learn before I get into computer science (I saw the video of 'Introduction to computer science' which is one of the MIT opencourse and it started to use python without teaching you from scratch.)
  4. Can I learn computer science now? (Without a university degree, I can watch open courseware.)
share|improve this question

7 Answers

People (even professionals) tend to confuse computer science and software engineering. If you are interested in becoming a professional programmer, then you need to study software engineering. Like someone who builds bridges studies civil engineerng, or someone who builds aircraft studies aerospace engineering, someone who creates software needs to study software engineering.

But you don't need to focus on computer science, like an aerospace engineer does not focus on physics and material sciences alone. You would lack the practical skills and the engineering mindset, i.e. how to solve relevant problems using available technologies while keeping the necessary cost, time and resource constraints.

There are many universities in Europe that offer degrees in software engineering. Most of them include the necessary notions of computer science, which is a necessary theoretical basis for the more applied aspects of engineering.

share|improve this answer
2  
To expand, software engineering is the study of the process of writing software. This means managing a project, organizing a codebase, interfacing with a team, etc. – unholysampler Jun 25 '11 at 2:34
5  
Many US universities also offer SE degrees. But a modern computer science degree will have a healthy dose of software engineering, and a software engineering degree will have a healthy dose of computer science. If you use the analogy of aerospace engineering, they definitely learn the basics (physics, etc) before the engineering itself. The reason computer scientists learn software engineering is because there's not much use for pure CS nowadays -- even research generally needs to consider engineering at some level or another, and most CS majors will to go industry, not academia. – Greg Jackson Jun 25 '11 at 5:22
1  
If only someone had told me 10 years ago before I went to school for computer science I could have spent those 4 years doing something that I was much more interested in. – Steve Evers Aug 11 '11 at 1:30
1  
You also can't tell if it is a software engineering or computer science degree from the name of the course or department. The place where computing was invented originally called their dept "the statistical laboratory" – Martin Beckett Aug 11 '11 at 3:13
1  
@BlackJack: Maybe I didn't explain myself clearly with that phrase; editing now to clarify. – CesarGon Mar 22 '12 at 20:58
show 9 more comments

From Wikipedia, computer science:

is the study of the theoretical foundations of information and computation and of practical techniques for their implementation and application in computer systems.[1][2] Computer scientists invent algorithmic processes that create, describe, and transform information and formulate suitable abstractions to model complex systems".

Should a web programmer learn "computer science"? Well, keep in mind that computer science isn't just one thing. It's not like learning Algebra...computer science encompasses pretty much all the theory behind computation. Computer science varies from algorithm analysis (figuring out how fast something goes or how much space it takes up) to testing the limits of computation (Automata theory, etc.).

There are a lot of "computer science" topics I see being used in my work place. The main computer science topics a programmer needs to know are data structures, sorting algorithms, and Big-oh analysis. Of course, the more you learn, the more you know about computers. However, these three topics are central to actual/typical programming, from what I've seen. Their relevance:

  • Data structures will give you insight on better ways to structure your program/data. Understanding the pros and cons of different data structures will allow you to make better programming decisions.
  • Understanding the complexity of sorting algorithms will give you insight on what methods to use if you want to sort data.
  • Understanding big-Oh will help you analyze the speed and space of different algorithms.

It's actually fairly typical for me to hear workplace dialogue such as: "You're using a hash-table to implement this? You realize that's going to give you O(nlogn) complexity? In order for this to be fast enough for the customer, we're going to need something that's O(logn)."

(note: dialogue nonsensical)

share|improve this answer
hash-tables usually beat other data structures – Job Aug 10 '11 at 14:12
How big is "N" i heard a story a while ago about someone who wanted to know how best to sort some data in a view so he asked, a bunch of mid level guys went running for their old CS books, while a SR Guy asked "So how many rows of data do you have?" when hearing it was going to be ~50 he said "Just set the sorted flag and move on" – Zachary K Mar 22 '12 at 10:14

To answer question 1, Computer Science is studying how programming has evolved and is currently evolving. It is going to give you a very solid background in a little bit of everything. This is going to include things from OS architecture to different programming paradigms and languages.

As far as question number 2, I would say that depends on you. If you are going to be a hobbyist web developer then there would be very little reason for you to study Computer Science unless you have a keen interest in the subject. If you already plan on your career being web development then I would say studying Computer Science would be very beneficial to you. I feel, and this is only my opinion now, that my time learning Computer Science has been more beneficial to me as a web developer then my time learning Software Engineering. With Software Engineering I feel you learn many things that you don't put into practice until you make the mistakes but what I have learned in Computer Science I put into practice everyday as a developer.

Question 3 is simple. Whatever catches your eye is a good language to learn. Most people start with Java or Python these days. I started with Java and I found C++ eye opening once I learned it. Now, I am learning Python and that is teaching me new things about programming and changing how I thing about writing programs.

As for question 4, you can definitely learn Computer Science now. Much of Computer Science is logic and learning why things work the way they do. It is about algorithms and their complexity. As long as you feel you are a logical person there is no reason that you would not be able to start learning more about Computer Science now.

share|improve this answer
Did you open your eyes at C++ so you could stab them with a spork? – Rig Mar 22 '12 at 12:25

There is a difference between Computer Science and What they teach in a computer science degree at a university. Much of a degree program consists of programming literacy. You will probably need a diploma to get a job if you want to work as a programmer -- especially if you want to advance.

Computer Science is the study of Computation, AKA Programs. There are a bunch of tools that you can learn here that will be useful to you as a programmer -- standard algorithms and data structures, Big-O notation, how to tell if a problem can be solved in any way better than brute-force, etc. There are also more theoretical tools which are less likely to be useful in your day-to-day; Turing Machines and proof of computability.

There's also a bunch of stuff that isn't computer science you you should learn: How to use a VCS, Design Patterns and principles, estimation, etc.

share|improve this answer

If you want to write software professionally, you should obtain a Bachelor's degree in Computer Science, Computer Engineering, Software Engineering, or Mathematics.

Of those, the Computer Science degree is the standard professional degree for software developers that most universities offer. A few schools have a Software Engineering program; that may (or may not) be better - depends on the program.

Computer Engineering is more embedded-systems focused. Mathematics is a good degree that is broader, but won't teach programming.


I would recommend Computer Science with a minor in the Humanities. Software Engineering afaict is largely picked up on the job, regardless of what gets taught in school.

share|improve this answer

What languages you learn is almost incidental. You will learn a lot of them over the years. Python is not a bad place to start, Ruby and Scheme would also be good choices.

In general in Computer Science the assumption is that the language is just a mechanism to solve some problem so most CS classes do not teach you a language they assume you will just pick it up as you need it. Over the years I have been programming i have learned or used, Scheme, Pascal, Perl, PHP, Erlang, Javascript, CoffeeScript and probably a few others. (Though I could not do a few of those today)

If you want to learn something about programming languages (and I suggest it) then read the book "Seven Languages in Seven Weeks" it will give you a solid intro to seven languages and hopefully at least one of them will really cause you to rethink how you write code.

As for if you should learn CS now, YES. Start with the book "Structure and Interpretation of Computer Programs" you can find the lectures that go with the book online I think. SICP uses Scheme but its goal is not to get you to learn scheme but to understand how programs work. You will learn scheme along the way though.

share|improve this answer

Check out Udacity, they're teaching computer science from the ground up.

I think it's much better than OpenCourseware, since it's interactive.

share|improve this answer

Your Answer

 
discard

By posting your answer, you agree to the privacy policy and terms of service.

Not the answer you're looking for? Browse other questions tagged or ask your own question.