It really all depends on where you are and what the programs offer. Try to think about what you are interested in and see who offers the most applicable courses. Look at the faculty and what they are researching. Do they bring in grant money? That can be an indicator of a good program.
If you are not sure, look at the prerequisites. It may be much easier to switch from one to the other. In the case of UC, I would have had a much easier time switching from CompE to CS because the Engineering school has alot of basic coursework that CS did not have. Also, if they are in different schools they might have different admission standards. Go into the one that is tougher and would be harder to switch into (if there is a difference).
I got a Computer Engineering degree from UC as well. Although I started out in EE, after a digital systems design class I decided to switch to CompE. I considered going into CS, but at the time CS was in the math department and pretty much sucked. Third rate faculty and program. The CompE program, on the other hand, had an excellent faculty with lots of interesting research. (they merged CS into the ECE department the year after I graduated)
I ended up doing software, and the department really came through on that. I had professors doing things like formal methods of software specification as well as the usual algorithms and data structures type stuff.
One thing that really impressed me about the program was that they never taught a programming language (I had to do plenty of programming for assignments, but it the basic policy was do it in any language you choose). If you are going to a university to learn a programming language, you are wasting your money. The real value of an education in this area is to learn the concepts behind how to design software and different areas of computing (like databases and algorithms). Programming languages and techniques will constantly be changing throughout your career, but a good theoretial foundation will serve you well.
On a final note: I really think that there is something to be said for knowing the entire picture. Just like the point #5 above, I know how to design *everything* (albeit not neccesarily at a professional level) in a computer.. from the architecture to the CPU to the OS to a compiler. But knowing those things does not mean that you have to operate at a low level. Much of my professional career has been working with UML and Java (implementing software, teaching courses, and giving presentations - if you look at the info from JavaONE '99 I am sure you can figure out who I am).
Now, I do feel that I have to give props to CS people. True CS people do innovative work and are truly scientists. Unfortunatley I have gotten the impression, both from my experience at school and from working with and hiring software development professionals, that alot of what passes as "CS" in schools is no more than a vo-tec program.
It is amazing the amount of bad vibes towards Sun I see in these postings. Sun is a good company that makes great products. I know that Linux is faster than Solaris and runs on more hardware, but that is not the point. Solaris is still a great OS and for some applications I prefer it over Linux (I would not even try to run Linux on an E10K, even if it was ported). And also lest we forget, we are not dealing with another micro$oft hegemony here. These are the guys who gave us NFS, Sun RPCs and Java. I think that everyone would have to admit that without being a full open source company, they conduct themselves admirably.
And I would not want to have to support 2 OS'es either.
I think that there needs to be some sort of "intelligence" in the boot up that will spit out messages like "Damn! 31 Processors. I am gonna kick some a**", and "256 freekin' GB of memory!"
or at least at the end spit out "holy sh*t"
What I think is one of the coolest things about java is the late binding. You can take a running program and introduce a new class, and the program can use the new class either by knowing about one of the new class's parents or via reflection. This is what allows things like Jini to work. I often write programs that use this for extensibility.. need to add a new functionality module to the program? Just extend my base class and then tell me the name of the class you created.. no restart required.
Anyway, I would hate to loose that. In what they themselves describe as a very disconnected world, I think that having the ability to load new code into a running program over the network is going to be increasingly important to do.
Oh, one more thing. One of the big things that I like about Java is that it is not a "Kitchen Sink" language. I do not want to use a language that keeps me so tied up in the intricacies of implementation that I loose the big picture of the architecture. A good architecture is the key to any good software and no other language lets you take your concepts and implement them cleanly as well as Java does. I am also pretty in to UML and the symmetry between UML and Java is a beautiful thing.
It really all depends on where you are and what the programs offer. Try to think about what you are interested in and see who offers the most applicable courses. Look at the faculty and what they are researching. Do they bring in grant money? That can be an indicator of a good program.
If you are not sure, look at the prerequisites. It may be much easier to switch from one to the other. In the case of UC, I would have had a much easier time switching from CompE to CS because the Engineering school has alot of basic coursework that CS did not have. Also, if they are in different schools they might have different admission standards. Go into the one that is tougher and would be harder to switch into (if there is a difference).
I got a Computer Engineering degree from UC as well. Although I started out in EE, after a digital systems design class I decided to switch to CompE. I considered going into CS, but at the time CS was in the math department and pretty much sucked. Third rate faculty and program. The CompE program, on the other hand, had an excellent faculty with lots of interesting research. (they merged CS into the ECE department the year after I graduated)
I ended up doing software, and the department really came through on that. I had professors doing things like formal methods of software specification as well as the usual algorithms and data structures type stuff.
One thing that really impressed me about the program was that they never taught a programming language (I had to do plenty of programming for assignments, but it the basic policy was do it in any language you choose). If you are going to a university to learn a programming language, you are wasting your money. The real value of an education in this area is to learn the concepts behind how to design software and different areas of computing (like databases and algorithms). Programming languages and techniques will constantly be changing throughout your career, but a good theoretial foundation will serve you well.
On a final note: I really think that there is something to be said for knowing the entire picture. Just like the point #5 above, I know how to design *everything* (albeit not neccesarily at a professional level) in a computer.. from the architecture to the CPU to the OS to a compiler. But knowing those things does not mean that you have to operate at a low level. Much of my professional career has been working with UML and Java (implementing software, teaching courses, and giving presentations - if you look at the info from JavaONE '99 I am sure you can figure out who I am).
Now, I do feel that I have to give props to CS people. True CS people do innovative work and are truly scientists. Unfortunatley I have gotten the impression, both from my experience at school and from working with and hiring software development professionals, that alot of what passes as "CS" in schools is no more than a vo-tec program.
It is amazing the amount of bad vibes towards Sun I see in these postings. Sun is a good company that makes great products. I know that Linux is faster than Solaris and runs on more hardware, but that is not the point. Solaris is still a great OS and for some applications I prefer it over Linux (I would not even try to run Linux on an E10K, even if it was ported). And also lest we forget, we are not dealing with another micro$oft hegemony here. These are the guys who gave us NFS, Sun RPCs and Java. I think that everyone would have to admit that without being a full open source company, they conduct themselves admirably.
And I would not want to have to support 2 OS'es either.
I think that there needs to be some sort of "intelligence" in the boot up that will spit out messages like "Damn! 31 Processors. I am gonna kick some a**", and "256 freekin' GB of memory!" or at least at the end spit out "holy sh*t"
What I think is one of the coolest things about java is the late binding. You can take a running program and introduce a new class, and the program can use the new class either by knowing about one of the new class's parents or via reflection. This is what allows things like Jini to work. I often write programs that use this for extensibility.. need to add a new functionality module to the program? Just extend my base class and then tell me the name of the class you created.. no restart required.
Anyway, I would hate to loose that. In what they themselves describe as a very disconnected world, I think that having the ability to load new code into a running program over the network is going to be increasingly important to do.
Oh, one more thing. One of the big things that I like about Java is that it is not a "Kitchen Sink" language. I do not want to use a language that keeps me so tied up in the intricacies of implementation that I loose the big picture of the architecture. A good architecture is the key to any good software and no other language lets you take your concepts and implement them cleanly as well as Java does. I am also pretty in to UML and the symmetry between UML and Java is a beautiful thing.
hehe.. it is going to be Field Tested :)