views:

559

answers:

19

This time next year I'll have my A level results and hopefully a Computer Science place at a university. At the moment I'm fairly competent in PHP but I'd like to use the next year to learn something new that would help me next year.

So what languages would benefit me at the moment? At the moment I'm thinking about picking up Java, or perhaps C/C++. Any others I should think about?

+5  A: 

You should definitely know C/C++.

You can choose between Java and C#. I would recommend C#.

Python is another good choice.

Vaibhav
+5  A: 

Given the choice, go for C/C++ over a higher-level language like Java. The more you know lower on the stack, the better off you'll be.

caveat: Learning assembler in 2008 is for crazy people.

Greg Hurlman
+1  A: 

Picking up some C# would probably be a good idea, Java is probably not a bad plan. Maybe something like ruby or python? What are you goals for taking these courses? I would maybe think about that a bit (do you want to end up doing web development or more enterprise type development) those answers could help you make your decision.

jonezy
+2  A: 

I agree with the recommendations to get somewhat comfortable with c++, and one of c# or Java. Other than that, it would be good to have some experience with something along the Python/Ruby lines, to keep your mind open to these more dynamic types of languages.

Chris Marasti-Georg
+2  A: 

I started my degree (UMIST in Manchester, UK) knowing C, some C++ (the same thing really), Perl and PHP.

First year was theory and Java.
Second year was Java and some C#
Third year was C#.

Obviously they threw in some other languages for assignments etc but you'll find low level stuff great for the theory.

They do teach everything from the ground up however, so knowing more than nothing will probably put you in the top 50% from the start. The knowledge set of uni first years is very very depressing to any enthusiastic teenager. A good third of the courses seem to be people who "like playstation and heard there was money in IT".

Good luck!

(If I were doing it again, I'd pick up more C# than I knew going in.)

DavidWhitney
+3  A: 

You shouldn't bother with C++. I learned C and C++ early on, but I haven't used C++ even once, except for the short C++ course we had at Uni. C is useful however, to have a deeper understanding of the memory architecture used by computers and learn about system programming.

Java or C# are pretty neat as an introductory language, but no point in learning both really. I advice Java, but that's just because I know Java better.

wvdschel
+2  A: 

I think this depends on the type of degree you want to purse...

I have a CS degree from Purdue, I HAD to know java, c, and C++, we also used Scheme, ADA, and smalltalk...

The IS degree was more focused on business and used Java and VB.NET

I think knowing the basics of any language will get you off in the right foot, but If I had to choose one before going into university, I would try and learn C++, if you know C++ and know it well, catching onto Java and the like are easy. C++ is a powerful language, start slow, and take time to learn what you are doing...

I went into university knowing Pascal and C.

mmattax
+2  A: 

Well I taught both A level and HND in the UK and I can tell you that you are already head and shoulders above most applicants these days by having some interest in Programming. It's sad I know but true.

Personally I believe it's about getting some projects under your belt that you are proud of and can talk confidently about as part of the acceptance to your chosen university. Pick a language that makes writing that sort of application fun and is pretty modern.

Personally I'm with the majority who believe that C is a wonderful thing to understand but I'm not too sure that in the final year of A levels you need the extra pressure involved in learning C and doing something you are really proud of in it so I'd like to suggest Python/Ruby depending on what you find most interesting. They are both great choices for modern languages and are pretty flexible.

Do however take C at the first opportunity at university. Most UK universities used to use C in the first year programming options for people who want to do 'real' CS or software engineering.

sparkes
A: 

Thanks for the answers.

@jonezy Most of my experience at the moment is in web-based technologies but I'd definitely like to spread my learning into desktop applications.

I've read a bit about different languages teaching different concepts - the most obvious is Java for OOP. Are there any special concepts languages like C, Python etc. teach?

Also I've been talking about this on IRC - and now I'm not sure whether to take Computer Science with a year's work placement (4 years) or aim to take a Master's degree after the standard 3 year CS course. Universities seem to say the sandwich course is the best choice. Any comments on that?

Ross
What is a "sandwich course"? I have a MS degree and believe it is overrated. I would recommend work placement because: 1. you will get real world experience you don't get in university and 2. you will start networking with professional programmers, which is very helpful for finding a job or referral
cpeterso
Also learn OO PHP 5 by studying some systems that rely on it, if you haven't done that yet.
reinierpost
+2  A: 

I would suggest a few to pick up the basics on. You don't have to be a master, but at least understand the differences and concepts. The list is in order by what I consider most important to least important:

1) C/C++

Specifically, learn the syntax and understand the difference between the two. Be able to write a few simple command line programs and try a bit of GUI. There are many, many different tutorials out there for this.

2) Java or C#

As was mentioned above, you can choose one of the two to get a handle on. Again, you don't need to be a master, but write a few simple programs, and start looking a little more into the GUI aspect.

3) Ruby or Python

Next up is scripting. Both these languages are powerful. Learn the syntax (again; sensing a theme?), and do some data manipulation (strings and files, etc.).

4) Prolog or LISP

This is probably not as important, but I feel these types of languages help to build problem solving skills by forcing you to think differently than you would using a more "classical" language. I would recommend SWI-Prolog as a good starting point here.

5) DirectX or OpenGL

If you get through the basics for the list above, you might have time for something a bit more complex, like the above graphics libraries. I'd recommend, if you've chosen to go the C# route, to do DirectX. There's a decent starter tutorial here: ZophusX. If you want the more os-agnostic OpenGL, the tutorials at NeHe are definitely the way to go.

This gives you a rounded start on different syntax styles, plus moves towards more complex concepts.

Marc Reside
+2  A: 

Universities will usually want to give you a base in multiple areas and show you where you can learn more. The language should not be as important as the concepts it pushes forward. Prolog will give you a great look at AI programing, Haskell will show you functionnal programming, Smalltalk for pure object oriented and assembly for memory allocation.

Also I've been talking about this on IRC - and now I'm not sure whether to take Computer Science with a year's work placement (4 years) or aim to take a Master's degree after the standard 3 year CS course. Universities seem to say the sandwich course is the best choice. Any comments on that?

I'd actually recommend Comp Sci with work placement, it will give you a year of enterprise experience that you can put on your resume and tell you if you like the job. After that you can decide if you're fit to spend another 2 years to get a Masters.

Beriadan
+1  A: 

I believe you need a good foundation, but devote most of your time to learning what you will be using.

  • Learn enough assembler to add two numbers together and display the result on a console. You'll have a much better understanding of what is actually going on with the computer and it will make sense as to why we use binary/Hex. (this can be done in a day and can be done with debug from cmd.exe).
  • Learn enough C to have to allocate some memory and use pointers. A simple linked list is sufficient. (this can be done in a day or two).
  • Spend more time learning a language that you are going to use. I would let your interests steer you into which language (C#, Java, Ruby, Python, etc.).
bruceatk
+2  A: 

C and make sure you grep pointers. You don't want to be one of the guys in class that falls apart when the subject is broached.
http://plan9.bell-labs.com/cm/cs/cbook/

jms
+4  A: 

@Ross, I suspect you'll gain far more from a year's work placement than you would from an extra year spent doing a Master's. The two key benefits are:

  1. Lots to talk about when you go to graduate interviews, and the CV to get there in the first place. You need something to make you stand out from the crowd - some solid placement experience is much more likely to prevent your CV being sifted into oblivion.
  2. You get a better idea what sort of graduate opportunities to go for. Your placement may end up sucking, but it'll give you an invaluable insight into the 'real world' which you just wouldn't get in academia - and if your chosen company mixes their placement students with graduates at social events (most do), it's a great opportunity for networking and getting some ideas what approach to take after your degree.
Dogmang
+7  A: 

As you are doing A levels I'm guessing your in the UK. In that case I can almost guarantee that if you go to a UK university and study just straight BSc Computer Science that Java will be the language they use to teach pretty much everything.

Speaking from experience it is likely that your professors will prefer for you to have knowledge of other languages but no knowledge at all of Java. The reason for this is they want you to be competent at the basics of programming so trying to teach you is not like talking to a brick wall but they don't want to have to beat out of you any bad habits you may have picked up if you already know Java. (They like to teach you their bad habits instead).

I would recommend learning a scripting language like Python or Perl as it will come in handy when you need to write some small utilities for various tasks. If you are interested in game development Lua is a good one to look at as it is commonly used in the industry and will help with your second and third year projects (nearly everyone chooses to develop a game that needs some scripting element to it).

As you already know PHP I would reckon you would pickup another scripting language quite quickly. If you want to learn something that contrasts PHP have a look at Ruby - you probably won't find it that useful on your course but the different perspective it will give you will be valuable.

Chances are you will have a module on low level stuff so having a look at Assembler won't hurt. And others have already mentioned some variant of C may be useful though I never had a need for it during my own studies.

If you have an idea about which university you would like to attend then try and get in touch with some current students and chat to them about what sort of things they have been doing and what knowledge they wish they had before starting - I'm sure the list might be quite long! Going via the students union and not the university is a good idea as they will be able to offer you an less unbiased opinion.

This is of course all just answering your question about what might help you at university. My ultimate piece of advice would be to just learn what you want to learn for your own interests, you will find it much more rewarding than trying to do something just to give you a headstart at uni.

Binarytales
Do most universities only teach Java? Mine taught mostly Java but a brief look at Prolog in Computation and Reasoning and a Module on functional programming (Heskell)
Benjamin Confino
+1  A: 

Question 2 first: I agree with Beriadan. I did CS bachelor's degree first, and then went back after a bit of work in. It definitely helps to have real world experience to learn how to work with a group, and simply to see use your skills. Using what you've learned is the best way to get to the next level. If you can find a job with a good mentor (think of it like an apprenticeship), there is no better way to become a software engineer, vs. being a programmer.

Question 1: This may seem silly and a bit obvious, but before you go to university, learn the tools you're going to be using. Some shell scripting, basic tools, an editor (vi or emacs), etc. You probably have these down if you're already using this site, but I went to university with basically no computer skills and it did hamper me. A month of learning unix basics like the above would have helped immensely.

After that, get a variety of languages. Marcus has a good list. Java, LISP, , C/C++.

Good luck.

caseyboardman
+2  A: 

Look at the school you're going to and see what the curriculum reveals. Learn a language that's not in the curriculum using these posts as a guide. If your curriculum focuses on practical languages, choose something that will be less practical and teach more concepts, like Haskell or Scheme. Having a language like that under your belt will give you a different perspective to understand some of the more practical class material. Perhaps your school will focus on academic languages, in which case, most certainly pick up C++. Use Deitel and Deitel as an excellent starting point.

Mike Caron
A: 

You don't need to be an expert in any programming language when you enter university. But to start with a solid footing, I would strongly recommend reading intro books about each the following programming languages:

  1. Scheme (not Lisp) to learn about programming at a higher, algorithmic level

  2. C (without C++) to learn about memory allocation (i.e. malloc and free) and pointers

  3. then Java to learn about OOP

  4. and only then C++ to learn about C++'s (often derided) style of OOP. :) Plus you will likely need it in your classes or the real world.

cpeterso
A: 

My UK uni experience is a little dated, but I'd say that for a typical UK uni, the less you know the better. If you know Java or C++ really well, chances are that you'll be extremely bored (for the first year), because universities do not know how to cater to 'advanced' students - just your boring average.

My advice - learn C#. In my opinion, it's the most enjoyable language out there right now.

Dmitri Nesteruk