views:

232

answers:

6

I'm currently attending programming courses in a college and I must say that I'm a bit overwhelmed.. In our college, we were taught basic VB.net for ~3months, then Java (basic too for 3 months) and right now, I'm doing basic C++ .. That's basically what I know so far..a little bit of everything ..

It seems that anything .NET is really hot (especially C# and ASP) and Java isn't so bad either. My question is, do I need to be really good in a lot of languages (ie. C#/Java/C++/C)? or should I just concentrate on one (I"m thinking C#) and work my way through that? coz I really don't know if I should spend too much time on one language when I can work on some other thing .. you know what I mean ..

Any advice? Thanks!

+2  A: 

Language is not important. What is important are the concepts. If you have got that mastered, you will be able to pick up a new language in a very short time. However, if you do not have the concepts down, you will struggle to write code in every language.

Edit: In fact, many courses use a 'pseudo' language to teach programming in order to focus on the concepts rather than the actual implementation.

sybreon
Generally I agree, wouldn't say that language is not important at all, just that a language details are less important than the basic programing concepts.
Liran Orevi
It would be more helpful, if someone lists the general programming concepts that any beginner should know.
Hideo
+7  A: 

True academic CS education isn't aimed at teaching you one specific technology. It aims to teach you general concepts and the ability to apply them in one instances, you're expected to be able to make the transition when necessary.

The problem is that many people get a job when they are done with college that is based on the languages they learned, and some of their experience comes from schoolwork and projects.

My advice is not to worry about languages too much, but focus on being a better programmer. If you understand a variety of languages you can then pick a book and start programming in another language and eventually become good at it.

Focus on getting practical experience in the languages your college teaches, or do everything in your power to get internships.

Uri
Yes, that makes a lot of sense.. I've actually been looking into programming techniques, data structures, etc.. Thing is, I think that our curriculum isn't laid out well. As I've said in my first post, they teach us a bit of everything.. lots of different languages.. do you think it would be a good idea to learn something like programming techniques from a book on my own?
Charles Khunt
I think you should focus on general CS (including algorithms and data structures, computability, etc.) since languages are easy to pick up but require you to work with them regularly to master them (and nobody can become a jack of all trades). The best move you could make, if you have time, is just to read Cormen and Rivest in your spare time. It's better than most academic courses anyway.
Uri
(Cormen and Rivest's introduction to algorithms is the standard textbook and covers a lot of great things. It's also a good reference. A lot of people here regularly vouch for it when there are textbook questions.
Uri
Oh my..I just looked at this book and couldn't understand most of what it's saying .. I guess I should let you know that I've never been exposed to things like recursion, recurrence, etc .. or data structures like trees, queues .. It seems that most recommend Code Complete which seems to be a book for at least graduates .. Any advice?
Charles Khunt
@Charles: All these concepts are central to CS degrees and as a result to most job interviews that you will face for entry level. Most job interviews will involve recursion, trees, etc. If you want to land a programming job and your school isn't teaching it, you need to make the gap yourself. That being said, CLR is a textbook, and it covers what many schools teach over the course of an entire degree but to a greater level of depth. It does build on you having read all their intro chapters.
Uri
@Charles: Code complete is great for making you a better code writer in terms of style and software engineering. But you still need to know when to use recursion and such. And besides, you need to land a job first, read code complete to become a better programmer once you already landed one with your CS skills.
Uri
I understand that stuff like recursion, trees, etc are really needed and I've been desperately looking around for a few days now.. The best that I've got so far is a college 2-3 hours away from here and that would be commute hell .. sorry, but what is CLR? I've been looking around for a book that teaches stuff like trees, queues and some basic algorithm.. any suggestions? or should I try my best to understand intro to algorithms?
Charles Khunt
CLR is the book that I mentioned (Cormen and Rivest). Most people call it CLR. Honestly, you can learn all this stuff from books, since a college course would merely rehash what's in the book. In my view, college is often more important to get the interview, not to pass it. If you got the instinct for software, you'll figure everything from books and experience, and use college to get a foot in the door.
Uri
@Charles: If it helps, I barely attended these courses in college since I was busy working full time. Luckily, there are enough books around. If you don't have time for books, use some online resources, like the TopCoder tutorials, they cover all the important algorithms and data structures.
Uri
Oh okay, thanks!!
Charles Khunt
+1 for a thorough, well-explained answer and excellent follow-up.
Adam Bernier
@Adam: Thank you.
Uri
+1  A: 

It takes a very long time to really learn to use a programming language as a pro whereas it only takes a very limited amount of time to pick up the basic concepts.

So I would suggest getting really good at one programming language plus looking occasionally into some others as a learning experience.

Benedikt Eger
+1  A: 

I would concentrate on one for now (Probably c# for now, as that's the way you're inclined.), and once you're quite knowledgable in that one, learn related ones.

My take on picking up languages is, it really helps to know one language extremelly well, as this first of all teaches you alot about all the concepts related to that language, but also makes learning other languages easier.

Just make sure it's a good first language, like c#, c++ or Java.

Bravax
+1  A: 

While sybreon and Uri are correct that for you, at this point, the concepts are more important than any single language, I do believe you would benefit from learning one language reasonably well. Doing your assignments will be easier, and after that it will be relatively easy to learn other languages. Just don't assume that you will be able to go through a career in programming with a single language. And don't assume programming is about knowing how to type in a certain programming language (again, the concepts are the most important piece at this point).

What is the best language to master probably depends on your school and your personal likes and dislikes. If your school mandates that classwork must be turned in one of the four (C#/Java/C++/C), it makes sense to master one of them. If you already know you'd like to work in an area where some language dominates, it makes sense to learn that well. For example, if you'd like to be a game developer, C++ would probably be a good bet. If your school does not care, and you'd like to do something like web application development, you might want to look at some well-liked general purpose languages in that space like Python or Ruby.

Heikki Toivonen
A: 

You may be missing a few things from what you are being taught:

1) Commonalities. How close is the OO-code of Java, C++, C#, VB.Net? Do you notice some patterns in terms of how to change the syntax from one language to another? Do you see how one may do some things better than another, e.g. how Java using a virtual machine or the .Net intermediate language has both benefits and drawbacks? Do you see differences in how pointers are handled in each language?

2) Different paradigms. While you may be taking a few different OO or procedural languages, there are functional languages and scripting languages that could also be worth learning enough to see where they can be useful. There can also be some database and networking stuff that while one can use C# for some of it, I'm not sure I'd want to write my own database server software from scratch in C#.

3) Technology churn. While .Net is hot now, there was a time when Win32 was hot and then something before that and something before that. My point is that there will be new technologies and knowing how to pick up a new technology quickly is a great skill to have that I think you may be selling short in terms of getting diverse experiences.

4) Even if you take one language, you may not get all the way through it. Take C# and all the different ways it can be used, e.g. WinForms, WebForms, ASP.Net MVC, Console Applications, WPF, and WCF to name a few, and does anyone really know all of these things thoroughly? Ok, maybe Jon Skeet or Scott Gutherie, but are there mere mortals that know all of the powers of the language?

JB King