views:

438

answers:

7

I'm 16. I run Linux, love to program, (and love to play tennis!).

I picked up a copy of K&R and am currently learning about pointers (chapter 5). Conceptually, it's pretty easy for me.

The scope of what a programmer must(?) known seems incredibly daunting.

If I want to persue this as a career, what should I be learning?

Any insight from those that have been doing this for a living would be much appreciated!

A: 

Read this article by Paul Graham: http://lib.store.yahoo.net/lib/paulgraham/bbnexcerpts.txt

Broadly you can categorize the languages into:

  • Desktop programming
  • Web programming
  • Functional programming (which can be used in both desktop & web programming)

It might seem Functional Languages (list, ruby...) is the way to go but there are not many jobs in that field.

If you want to have a good chance of employment then pick either Java or C# and master it. While Java is for web programming, C# will get you into both desktop and web programming. You should also have working knowledge of one script (Python, Perl). Additionally if you like take up Lisp or Ruby.

Sesh
Those categories are apples and oranges. Desktop and web development are fields. Functional is a paradigm
Nikhil Chelliah
A: 

Each of the languages you listed has it's own area of use. It all depends what you like to do and what you envision yourself doing in the future.
If you like web development, and want to work for large corporations, go with ASP.NET, C#, JavaScripts and SQL. If you leaning more towards smaller companies and start-up, go with PHP, MySQL and JSP.
If you want to do desktop development, go with C/C++, Java and .NET. If you want to work for small innovative start-ups, go with Python, Ruby and XML.
But you'll find with experience that language doesn't matter that much, as long as you understand the basics of development, it wouldn't take you too long to pick up a new language.
But to start, I would suggest go with C++, it's the most versatile language, that can be used almost in any application, and it would give you the most inside into development process and understanding of internals of computer.

Ilya Volodin
A: 

C,C++,perl,Java,ruby,erlang,groovy

If you become proficient in those languages you'll be better off than 95% of the developers currently employed.

klyde
+4  A: 

First of all, if you're 16 and getting into programming, you're already ahead of the game. Congratulations!

Now that you have at least 5 or 6 years ahead of you (assuming you will pursue a university education), you have quite a few years to hone in your programming skills. If you get started now, you'll be quite ahead of the game.

One of the things you'll probably hear everyone say is, "write lots of code". And I agree with that. The more you code, the better you'll get at it, and at the end, it probably won't make a difference whether you learn C++ or Java -- as long as you have a mind that can understand programming concepts easily, you'll be able to easily pick up a new language. Most of the difference these days are in the standard libraries -- for imperative languages, the language constructs are fairly similar.

Also, since you have a few years ahead of you, you'll probably have enough time to learn most of the languages you've mentioned. Many will say learn a language a year -- since you have 5 or 6 years, you'll be able to learn 5 or 6 languages, if you keep at it. By the time you are ready to look for a job, you would have experience in several langauges. Imagine that!

One more important thing is to learn multiple diffierent programming paradigms -- don't only stick to imperative langauges like C# and Java. Learn a functional language and see how programming is approached in a different way. Seeing different ways to solve a problem will expand your horizon and with experience you'll be able to pick the right tool for the job, so to speak.

That said, I feel that learning C is going to be quite important. It's a language that will have you managing memory and juggling pointers. It's also a really fun language to learn data structures and algorithms in. Next, I'd probably recommend an object-oriented language like C++, Java or C#, and begin to use standard libraries, and learn not to reinvent the wheel when writing applications.

Here are a couple of articles by Joel that might be an interesting read:

Good luck!

coobird
Thanks! This is by far the most comprehensive (and encouraging) answer I've received so far!
Tyler
You're welcome. Good luck!
coobird
+1  A: 

Finish K&R. It's a good investment for any technology you will encounter later. Since you are running Linux, I also suggest to purchase a copy of Advanced Programming in the UNIX Environment and experiment a bit with Unix programming.

Once you have learned C, to stay up-to-date you should learn about object-oriented programming. In this respect I'm a fan of the Python programming language: It is simple, modern, elegant, powerful, and you already have it installed as /usr/bin/python :) Go for it!

It's usually said that to be a good programmer you should be comfortable with many languages and technologies, not only one. This said, it isn't that you've got to learn them all! Take your time to learn a low-level language (C) and a higher level language (in my case, Python), in the meanwhile you will certainly develop some specific interest (game development? web development?), and at that point you will know what comes next.

Oh, and if you want to pursue this as a career, I wholeheartedly advise to get a CS degree. Good luck!

This question may also help.

Federico Ramponi
Thanks for advice! I will definitely be looking into the book you recommended.
Tyler
+1  A: 

A good read:

Teach Yourself Programming in Ten Years

Ates Goral
Wow that's strange. I was *just* reading that.
Tyler
+2  A: 

Are you planning on going to college? If so, consider this: assuming you start college in 2 years, and then graduate in 4 years, you'd start your career in six years. Six years from now, what skills will be in demand? No one knows. Heck, even if you don't go to college and go straight into a programming career, it's hard to tell what the landscape will look like in a couple of years. Technology changes rapidly.

I taught myself BASIC and Pascal when I was 16. I learned Visual Basic in college. Now I churn out Java code to pay for my Objective-C/Cocoa habit.

Once you become competent in one or two languages, it's generally very easy to pick up new ones.

Keep on reading K&R. Write some C programs. C is not going anywhere anytime soon, and understanding it will give you a solid foundation.

Oh, and keep up the tennis.

Jeff