tags:

views:

708

answers:

19

So, I have just started grade 12, and after I graduate I plan on going to University and major in Computer Sciences, and eventually make a career out of it. I am looking for advice on what direction I should be heading to make the most out of things. :]

Currently, I know some PHP, Java, and C++. Nothing too advanced for any of these, but I am not a beginner either. I haven't done anything outside of the console in C++, so I figure that should be my next step.

Anyways, I'm just looking for any advise on what I should be doing. Any suggestions on what language I should be working on improving (or learning), any projects that should help me get a bit of experience, etc.

Anything, really. :]
Thanks.

A: 

First of all you should do what you like.

Take what they give you during classes and try to push it always further. Discovering new things is the key.

Robit
A: 

Some people think that programmers need to have some experience with C. Although it may not be necessary, it certainly does provide a foundation for understanding many other languages.

JonathanMueller
+10  A: 

Languages are easy to pick up, and in 20 years the hot langauges aren't likely to be any of the ones you're learning now, so don't sweat it.

The most important thing is to work on good projects. Student projects. Internships. Open source. Doesn't matter. They will give you the most experience, and the best employers know to look for them.

As for what KIND of projects to work on-- this doesn't matter either! Pick the one that gets you excited. That's the one that will be best for you.

Aaron
I was going to respond, but Aaron's got my number. The only other thing I'd mention is that you'll end up spending more time with your fellow students than with your professor. Make sure that you surround yourself with good programmers and you'll only get better.
kooshmoose
A: 

Learn to use a debugger. You might start with Visual Studio's.

antik
A: 

I would say you should mostly practice and advance your practical skills in those languages you know (Java, C++, ...). It will come in handy when you are introduced to more advanced theory in college.

mrlinx
+1  A: 

Get involved. Join an open source project. Experience is far more important than learning any given language, development model, or such.

Dark Shikari
+2  A: 

Hey Coal,

Consider getting involved with an open source project. You'll have an opportunity to learn a TON and communicate with other developers on a project (kind of like on-the-job experience).

I write a lot of C# and think it is great but there are others too. I'd encourage you to learn about databases, at least at some level, because it can't hurt to know about them.

There's lots of cool stuff out there in the open source community and that experience will be invaluable when you do go looking for a job.

Best of luck!

itsmatt
+1  A: 

Well you already will know more than a lot of your classmates I bet. I went into University knowing Turing. I didn't even know what a compiler was!

You have the basics of programming down so I say your next step should involve looking into the theory behind computer science. This includes algorithm design and analysis, automata theory, Big-Oh notation, software engineering theory, etc.

I am willing to bet your previous programming experience will give you a good headstart in your programming classes. So if you want to get ahead of the game now, I would start looking into theory and advanced mathematics.

Matthew Ruston
+1  A: 

Definitely get involved in a multi-person project of some sort. Learn about the software development process, version control tools, bug trackers, testing, etc. Those are the kinds of things that they don't spend a lot of time on in most Computer Science schools.

hallidave
A: 

Some stuff I've had success with.

  • Open Source projects
  • University Projects
  • Internships

Depending on your location, you can find some professor's at the local universities who will be willing to let you contribute to there projects. Sometimes you can get into REU (Research for Undergraduates) programs when your still in high school, or when you graduate high school/in college. Open Source projects are great too, especially at learning how to work with different kinds of people all over the world.

Just work on something, just for learning experience and it looks great to future employers that you've been at this since long before College.

Brian Gianforcaro
A: 

Programming language is just 'media', what you need to have, is a good foundation on what is programming, e.g. conditional, loop, function, etc. If you have good understanding on this, you can use any programming language. Other additional things like know how to write a good code, follow new technologies, since it grows rapidly nowadays, etc.

ChRoss
A: 

First and foremost, that is pretty badass for 12th grade. You have a serious leg up. This means you will totally fly through your college courses. You have the opportunity to use four whole years of free time to become an absolute beast of a programmer. Want to? Then:

  1. Learn a language that's fun and easy, and that you can use to put together really simple programs. I suggest Ruby, with Shoes for user interfaces.
  2. Start looking for practical problems that you can solve by programming. If you keep your eyes open, opportunities are everywhere. This will give you a constant supply of new things to build.

You'll have a lot of fun, so you won't get sick of it. You'll have a lot of ideas, so you'll keep coding. So so so, you'll increase your skills crazy-fast.

Kevin Conner
Knowing languages does not automatically make one "totally fly through [one's] college courses". Being able to think in an abstract, structured manner is far more helpful.
Thomas
A: 

So, you know enough to get by, and can probably do a few interesting, practical things with your current skillset. That's great. So think of college in these terms: what can you get there that you can't as easily pick up on your own?

  1. Concepts, algorithms, and (dare I say it) math. Especially discrete math.
  2. A chance to work with and learn from interesting, intelligent people. Your profs usually have really cool research work going, ask about it.
  3. A well-rounded education. I knew plenty of folks in CS who complained about every non-major class they had to take and talked about other subjects like they didn't matter. That's not the path to an interesting, rewarding career. Most programming jobs require domain expertise or the ability to learn about different subjects or industries quickly. You're in college to learn how to learn - and it really helps if you learn how to write and speak in front of groups, too.

Hope this help.

Jason Morrison
A: 

Computer science is a very large field, and it is much more than writing code. You should learn about its many sub-fields, such as theory of computation, algorithms, software engineering, operating systems, compilers, databases, computer vision, computer graphics, machine learning, etc. This way you can see what you may want to specialize in.

As many people here have pointed out, knowing a particular language is far less important than the fundamentals, such as understanding different programming paradigms (functional, logical, object-oriented), being able to come up with good designs, and understanding algorithmic complexity. Having said that, it definitely does help to know a few languages really well, and to be able to pick up a new language quickly.

Mathematics is also very important. You may get away without knowing calculus if you write business software, but to do really cool things, like graphics, computer vision, AI, robotics, or games math is absolutely essential. Some of the relevant topics are calculus, linear algebra, and probability.

Dima
+6  A: 

If you know some programming and you like doing it, you are fine. You've got 4 years of concentrated CS instruction ahead of you, don't sweat it, they'll take care of you. Do what's interesting right now, that's the important bit.

Here's some advice for being a CS undergrad student:

  1. Now and then, when you are at school, you will hate the sight of your laptop. That's normal and healthy,go out and kick a ball around, or whatever you do that's not in any way cerebral. Don't burn yourself out, you have a full career of doing this ahead of you.

  2. When your prof says, "start this project early", start that project early. All nighters are fun for a while, but they wear you out. Save that for the finals.

  3. Remember that programming is fun. Now and then, do stuff that's not for school, and not for any real reason.

  4. Get summer internships at companies to get practical experience. School will teach you computer science. There is a completely different skillset which is software engineering, and you will need both. You'll likely have a class on the latter, but a single class is not enough. Plus internships are a good way to feel out different companies.

  5. Have faith -- what they are teaching you is useful, even if it doesn't seem so. They will be teaching you stuff that seems lame, irrelevant, old, and/or boring. "But I am never going to write a compiler! But cloud computing is a paradigm shift! Who cares about 17 kinds of sort, I just say collection.sort!" Lisp, wtf? Matrices?? How does that help me build Ruby on Rails websites with Ajax and AdSense?" ... etc, etc, etc. Well, trust me, if you stick with it for the long haul, and you are any good, a couple of years after you graduate, you will curse every time you uttered one of those sentences :-).

Good luck, it's a lot of fun.

SquareCog
A: 

Make sure you choose an excellent college or university. The field is competitive, and if you are not well-educated, you will be less able to find a job doing what you want. You definitely need to look for a school that has achieved a regional accreditation; that is true for all academic disciplines. Some other criteria that may help you include:

  • Look for a computer science-specific accreditation agency in your region of the world. Consider its standards, and take that into account as you look at universities.
  • Read what smart, successful people like Joel Spolsky say about education and hiring. http://www.joelonsoftware.com/items/2007/12/03.html
  • Ask people working in the field what the best computer science schools are in your country or region, and check them out. For the United States, I again refer you to Joel.
  • Have realistic options in mind in case your top choices do not work out.
  • Do not forget to take into account your physical well-being, living conditions, and broadness of education as you look for a university. There is more to life than programming!

It sounds like you have a sincere interest and that you have put in a lot of time studying already--so much so that you may want to spend less time on independent study of computer science topics and focus fully on finishing your high school career well and finding a great university that is right for you. Best wishes!

Jay Michaud
A: 

You will learn a lot of theory in school. Focus on experience outsise of school. Make websites, make small games, write a program to help you be more productive. Seek out internships, especially as you get into your junior and senior year. If you are interested in a particular area, get to know the faculty that are doing research in that area. Read up on current trends and technology. Subscribe to RSS feeds from websites about programming, web development, and technology.

A: 

Programming is the easy part of Computer Science, and of professional development practice. What you need is

  • experience working with other talented developers,
  • experience reading and understanding other people's code, and
  • experience with a wide variety of "ways of thinking" about building useful abstractions.

If you already know a language like Java, then learn Lisp or Prolog or Haskell (Python and Ruby both take many ideas from Lisp, but it's actually easier to see what they are good for if you know some Lisp). It will stretch your mind and make it much easier to learn the next new thing quickly when it comes along.

A: 

man, you guys all missed the most important aspect!!!

your in high school, take ALL the math courses you can, and try to take the AP stuff so u don't have to do it in college. Calculus in a high school AP class will be WAAAAAYYYY easier than taking it in college from a Doctor who got his phD in finding limits at infinity!

and that will give you more time to take the cool robotics electives!!!