views:

278

answers:

12

Hi guys,

I just completed a my first semester in Java and I am trying to decide if I should take a more advanced Java course or take a class in C.

Long term I plan to continue to learn them both, however, I am wondering if a deeper understanding of Java will serve me better or if learning the basics of another language will be best.

Your experience and opinions will be truly appreciated.

Thank-you

+15  A: 

What is your goal? A computer science degree? Programming experience?

Learning C is very important, IMHO. There's a limit to the understanding of the underlying machine you can gain with Java only. C, even if you won't really use it in your career, opens your eyes to important implementation details that will make you a better programmer overall.

Eli Bendersky
Good question. My goal is programming experience. Neither of this classes is REQUIRED per say, I just have to take enough IT classes to be able to graduate, but I really like programming.
misaelrod
then definitely C. once you know some Java, learning more of it is easy online. For C, you might learn new *concepts* - and that's definitely more important
Eli Bendersky
@misaelrod: *per se*. It comes from Latin and has nothing to do with saying. You sound more educated if you spell it right. There's no compiler for natural language but it's good to get in the habit of spelling stuff right - it will help your programming too.
Carl Smotricz
+1 on C. Some people recommend assembler, but the value of that is questionable. You can learn almost as much from C as from assembler, and C is useful in its own right *and* it will teach you more about the underpinnings of Java too. A win-win choice, I would say.
Carl Smotricz
+1  A: 

I would choose another java course. Most of what you'll learn will be language independent. You will probably learn data structures, algorithms and get a deeper understanding of programming as a whole. What you will learn in your second java course will probably be easier to use in the c course than the other way around.

Vargen
+5  A: 

C is a very important language to learn. In very many ways it is the base language from which many other languages evolved. C++ came from C. Java came from C++. C# came from either Java or C++(depending on who you ask). Plus you learn about pointers and how to directly work with memory. All of this teaches you the fundamentals of how computers work.

JeffHeaton
Well, Java did not come from C. It just uses C syntax to lure C++ programmers over.Guy Steele once said "[W]e were after the C++ programmers. We managed to drag a lot of them about halfway to Lisp. Aren't you happy?" - http://people.csail.mit.edu/gregs/ll1-discuss-archive-html/msg04045.html
Thorbjørn Ravn Andersen
I agree that C is important. My goal is to learn C as well, I am simply wondering which class I should take first. What will help me more? learning C now? or getting a better grasp on Java, then learning C?
misaelrod
Thorbjorn, I disagree: Java has *strong* roots in C. I respect Guy Steele and agree with his stated intentions but the outcome was so strongly influenced by C as to be syntactically closer to C than to any other language. Case in point: The syntactic train wreck that is the `switch` statement was taken unchanged from C.
Carl Smotricz
+3  A: 

I'd go for C myself.

An advanced JAVA class seems to me like a JAVA-Dependant class where you'll learn more about the java APIs and stuff, while learning C will be improve your base knowledge.

Soufiane Hassou
A: 

You would benefit from either. I suggest you do a little of both and spend more time on what interests you.

Peter Lawrey
A: 

You already have a Java-basis. It would be great to get familiar with C. This knowledge will open for you new horizonts so you'll be able to decide what to do next - turn back and go deeper in Java, proceed with C or may be learn something new.

IMHO you shuld try everything new until you find your thing.

Andrew Dashin
+2  A: 

If you have a choice, I think you should strengthen your understanding of programming in the language you already know before branching out into other languages. If you start learning C right now, you'll be spending time learning a new syntax to do things you already know how to do. I think it's more important for newer programmers to become familiar with new concepts within the same language.

I blogged about this some time ago in Many Languages or One? There are some very good points brought up in the comments to that article.

You can always teach yourself C from K&R. More advanced features of a language you already know will be easier to learn from an instructor.

Bill the Lizard
great point, great blog
misaelrod
A: 

I think you'd be better off taking a course where you learn about data structures and algorithms. Often those courses have programming assignments where you're allowed to use a language of your choice. Then you could pick C and learn the practice of teaching yourself a new language. This is a better approach because you learn something that is universal across languages (data structures and algorithms) while at the same time picking up a new language.

Suppressingfire
A: 

Hey you can even continue with both. Java is BIG considering the library. C is small but so much can be done in it.

Why don't you learn both. When you want to do something which should be fast or system programming you will need C. And when you want to program for databases, web apps etc. you will be better with Java.

Xolve
I do plan to learn both along with other languages. My big question really is, should I lean C now, or get more familiar with Java, then learn C... as as well as other languages. I want to make sure that I learn them in the proper order (if there is such a thing) so that I get the most out of my studies.
misaelrod
I know both and I don't feel there is any 'order' here.
Xolve
A: 

You want both depth and breadth in your programming experience. Java's a decent language for learning more about programming, so I'd opt for the more advanced course.

Longer term, learning something about C will help you get a better feel for what's happening below the Java level. This is important for understanding garbage collection, performance costs of various operations, and so on. (It'll also help if you want to learn C++, since it's a lot simpler.)

Learning C will also give you deep appreciation for how much more productive Java is, and then you'll naturally wonder if Java's productivity has been similarly surpassed by other languages. At some point in your studies you should definitely take a look at languages like Ruby, Clojure, Python, and/or Scala.

Jim Ferrans
Your comment resonates with me. As I said, I really want to learn as much as possible. I just want to make sure that I learn them in the proper order (if there is such a thing) so that I get the most out of my studies.
misaelrod
I hear you! In this profession, more than nearly every other, you'll be learning continually, and increasingly on your own. Even if you don't take a class on C (or whatever) right now, you can always try to squeeze in a bit of independent study.
Jim Ferrans
+1  A: 

It all depends on your goals, your learning style and the content of the classes.

If you would like some hands-on experience that you can apply immediately, I would go for advanced Java, especially if your first Java class did not cover data structures, polymorphism and inheritance. Depending on the content of the advanced class, it might give you interesting software engineering fundamentals, as well as providing you with patterns and solutions that can be readily applied in the real world.

However, as other people mentioned before, Java is very well documented online, and it is very easy to pick up interesting knowledge from books or online sources. Therefore, if you already have a good grasp of more advanced development, you can probably pick up the Java specifics by yourself.

Learning C is a very important part of being a computer scientist and of understanding how things work. Depending on your goals, this might be very important. Personally, I encourage people to take C and asm classes just to learn the fundamental computer science concepts that come with studying those. However, I understand it might not be useful for everyone.

TLDR: Java will give you a good boost on the short term, C will give you the fundamentals to take your programming at the next level.

Perhaps post the course outlines for your first Java class, your advanced Java class and the C class. Mentioning your short term and long term goals might be helpful too.

Bushibytes
read every word... i will post a synopsis of all the course outlines when I get a chance a little later. I will take both courses eventually, I am simply trying to figure out which is in my best interest to learn next. Thanks for your post, great stuff.
misaelrod
A: 

Java is higher level than C, with fact that there are several stuffs have been taken care of automatically. Learning advanced java you will go further on how the design goes, good if you just want to have a taste of how program works and go for careers requiring higher level understand.

C is exposing more ugly truths, like pointers, and memory loc, which is exactly the way computer works, but easy to get beginner confused. You would want to learn some of data structure and basic of how computer works with C. I suspect the beginner level of C would offer similar things as in Java. But taking the course would make you less scared of a new language, though their are mostly in common logically.

Dr. Xray