tags:

views:

288

answers:

10

I've had a few CS classes in Java, C# and VB and have learned a good bit of PERL, Python, Javascript, WPF and RegEx's for my current job. I've applied to the CS dept at the University of Washington and am still waiting to hear if I've been accepted.

My question is, what should I be doing now, during the summer months before I hopefully go to UW to start my degree? I'm trying to learn as much C# and WPF as I can at the suggestion of my supervisor. But is there anything that I should learn, or at least be familiar with before "officially" starting my CS degree?

Thanks in advance.

Edit: I feel like I left out a crucial part of my background in that I've already been going to a community college and have a 2 year degree from there, which will skip over my GUR's when I attend a four year university. So I already have several of the basic classes out of the way, logic, history, english, math etc.

+2  A: 

Find something that interests you and do as much as you can with it. Contribute or create an open source project, take up something you've never done, etc.

It's summer before college, so relax and enjoy yourself. Put as much of yourself into side projects as you like (they should be fun!), but know that there will be plenty of time in college to argue over whether you should use vi or emacs.

Eric
or neither (they both suck, just in different ways :-)
Blank Xavier
+2  A: 

Looks like you have a lot more programming background and experience than most of your classmates, so I think you're well ahead of the curve :)

One suggestion I have is that rather than trying to learn new programming languages or improve your knowledge of existing languages, I would suggest for you to re-examine what you already know and try to frame that knowledge in a more academic, conceptual light. Remember, you will be starting a program in Computer Science, not a training program in computer programming.

Here are some ideas of things you might want to explore further, given your current background:

  • Which of the languages you already know are dynamically typed, and which are statically typed? What are the advantages/disadvantages of each style? From which languages did they originate?

  • How does the performance of programs written in each of these languages differ? What are some possible causes for such differences?

  • What are the theoretical limitations of regular expressions? e.g., can you write a regexp that will match sets of balanced parentheses? Why or why not?

Of course, perhaps the best course of action would be to just relax and chill before starting college. have fun!

pgb
So I shouldn't worry that I've never worked in C/C++ or programmed using Duck-Typing?
jb
no, don't worry at all! you'll be able to pick up these languages on-demand when you need them. i agree with JDany (see his post) that you should strive to learn some Computer Science and not simply more programming language details, if you have the energy :) otherwise enjoy your summer!
pgb
+3  A: 

Try to learn a little bit of theory too. Such as Mathematical Logic, Object Oriented Concepts, Recursion, Design Patterns, Data Structures, Algorithms, etc... Because there are tons of languages and technologies now and no one will be a sure thing, but the fundamentals of computer science will always stand true.

http://en.wikipedia.org/wiki/Computer_science

JD
Brushing up on Computational Theory and Mathematics is very important +1
Perpetualcoder
+1  A: 

You are already pretty much ahead of roughly most of the students getting enrolled in CS departments (generally). If you want to, you could probably spend the summer learning some of the stuff that people have suggested to you over here, but if you ask me, most of that is what you would be learning as part of the CS curriculum during your CS education. It is nice to have a head-start into things, but I don't think it is absolutely necessary. It may of course help you lessen the burden you will face during your semesters, where you have to tackle a number of courses per semester (which doesn't span all that long). However, I do believe that that fosters an ability in students to learn new things under pressure and in a limited time span, some of which may not be related to other new things, and I think that that is an important skill to learn and tune.

I remember that I used to spend a lot of time participating in discussions on tech newsgroups on USENET during summers. I can safely say that doing so has helped me immensely. Not only does it allow for a gradual increase in your knowledge, but it also helps improve your writing abilities (especially from a technical point of view, where you get to read how people explain technical stuff in the midst of discussions, and how you can go about doing the same when asking for help or more often helping others out). You also end up learning the proper etiquette, and how and where to ask for help when you need it.

ayaz
A: 

I spent my first summer and subsequent ones working as a programmer for a small ISV, if there is one thing they don't teach at college/university is how to handle customers/bosses etc. so any experience you can pickup from doing some programming jobs is a great plus - your CV will also look better when you later apply for your first "real" job. The pocket money earned is also a plus - even if it is only to buy a few more kegs of beer :)

Anders K.
A: 

Buy a coffee machine!

Crashworks
i would, but i dont like the taste, i'll stick with the Dew :)
jb
+3  A: 

It sounds like you've already given yourself a good grounding in the language side of things. If you're keen to spend your time getting ahead of the curve then consider looking into some of the following domains:

  • Design Patterns
  • Application Blocks (Enterprise Library, User Interface Process)
  • References Architectures (Smart Client Software Factory)
  • Unit Testing
  • Build automation, Continuous Integration
  • Security
  • Static code analysis
  • Code coverage

You may also watch some of the sessions from last years PDC which can give you a good insight into where things are going.

You might also want to explore the different platforms (Web, desktop, mobile devices) and see if you have a preference for one of them.

Mark
+1  A: 

I’d say it really depends on what direction of Computer Science you want go off in.

Are you interested in software engineering? Databases? Human Computer Interaction? Artificial Intelligence?

They all fall under the banner of computer science, but they all have a different skill set.

You might not know yet. You’ll know when you find that sweet spot of something you want to do in Computer Science. Something that you’re passionate about.

You mention you’ve had experience with a few languages. I would keep it that way. Don’t focus on just C# or a Microsoft specific platform.

I’d say it’s more important to learn the theory than master any one language. You’ll move around from language to language over your career, but actually learning what’s happening under the hood (and why), can be a lot more valuable. Learning about the theory of computer science can give you a really solid foundation.

Learn about abstraction. This can give you a head start among your peers too.

It depends on what level you’re at too. For example the basic stuff -

In C# – do you know the difference between a value type and a reference type?

Do you know the difference between ASCII and Unicode?

Or have you already got an excellent grasp of all this?

Read about dynamic languages, functional programming, OO Programming.

Java and C# have a lot in common. So why not have a play with something different? Give Haskell a try. Play with Erlang. Try doing something in Lisp. They’re all slightly different.

Don’t just stick to the “middle tier” languages either. Brush up on SQL (not just mySQL or SQL Server, but the ISO/ANSI standard SQL). Brush up on presentational logic – HTML / CSS, perhaps flash too.

You don’t have to master all these languages, just gaining an understanding of them is useful.

Doing a project in the area / language your interested in is valuable. Working through labs in a book is one thing, but actually doing a full project is another. Could you do a project / website over the summer holidays one of your interests?

Why not branch out from software? Experiment with an Arduino!

A lot of the advice given to this thread so far has focused on the software element of computer science. For general career stuff, I would say don’t forget the people skills. Learning how to interact / deal with other people can give you that extra bit of edge or advantage.

Also wear sunscreen.

NekoJoe
A: 

My suggestion would be to look over the graduation requirements and see what kinds of topics are covered in various first year courses and see how well you know those topics. If you believe you know enough to skip a course this may be worth exploring. For example, at the University of Waterloo, it is possible to change what first year Computer Science course one gets depending on previous experience. It is handy for letting those who already know some programming concepts to skip what may be a very boring course to get to the more interesting things.

Another thought here is what first year courses outside of CS would you have and are you prepared for those courses? Could you map out what second, third and fourth year courses seem to give you a "I gotta take that!" feeling so that you could be prepared for it. Do you know much about the campus, student organizations that may be of help like a CS Club or other technical folks that may gather over a common interest.

Do you know how you learn best? If someone asked you to learn about some gobbledgook subject, do you know how you'd approach it and get it done?

I think many here have covered various technical suggestions, so I'll not repeat those here.

JB King
A: 

Speaking as somebody who has completed first year university working towards a CS Degree, I can provide a different viewpoint.

My advice would to just relax and no necessarily hit the books about the topics which are going to be covered. You are going to be ahead of the curve and probably going to feel very cocky in class. You just need to get yourself prepared to learn new things in a classroom environment.

There would be no real 'point' to learn things in the summer before first year, first year serves both as a 'weeder' and an 'equalizer', being ahead of the curve means that you won't be weeded out and you'll be bored while being equalized.

When you start go to school, make the effort to take electives. There's really no other place in your life where you can take philosophy, linguistics and other fun stuff.

Brohan