In an effort to spare you a bit of reading, here is my summary up front:
I would say the best language for beginners to learn is Python. It's a powerful language geared towards clean and rapid development and it's very easy to learn. To really understand how to write efficient Object Oriented programs, I would recommend starting with C/C++ as a first language to give you a good solid foundation, even if it's tougher to get your feet wet. In your situation (since you only have two weeks left and need to use it for your studies) my advice to you is to just experiment as much as you can with C#. This
tutorial should help you get started.
If you are still reading this, then here are my thoughts:
First off, I have never heard the phrase "
going to Uni" before, but I assume it means going to a University and the rest of what I have to say is based on this assumption. If not, then it's clear that I live under a rock, and I would appreciate the clarification.
Secondly, I just finished a four-year bachelor's degree in Computer Science (which is why I live under the aforementioned rock
), so keep in mind that my only experience with programming is in-class/homework assignments and personal projects. I have no "in-industry" experience yet, but I am hoping that will change soon.
I wonder if they still teach Assembly?
Yes. They do. And for good reason. The less you understand about how the hardware is executing each line of your program, the more inefficient your code will be. If put side by side, here are the relationships between a few languages:
(More control over hardware) Assembly ----- C ----- C++ ----- Java/C#
(Easier development)C# will be a nice language to get your feet wet with. You will learn all the other stuff later.
I agree, but it comes at a price. To really understand the strength of Object Oriented Programming, I feel like there is no better place to start than C (or possibly C++). Admittedly, it will take longer to learn these languages, but they will force you to understand the fundamentals of OOP and give you much more control over your program's behavior. One prime example is memory allocation, which is an extremely important concept to understand. With programs written in languages like C/C++, you control how much memory your program is using at any given time. With C#, you need to trust a garbage collector to pick up anything you've left behind. I, personally, don't like the fact that no one knows when a garbage collector in C# is called (except for Microsoft
) and I also don't like how it's discouraged to call it yourself for performance reasons. Anyways, my point is it's harder to go from C# to C/C++ than the other way around.
I totally agree with what bomtond wrote and recommend that you consider everything that was mentioned. But, I do disagree with one thing:
The basics of programming, the thought process, is universal across all languages
This may be true for all Object-Oriented languages (dare I say the majority of the popular languages) in use today, but certainly not ALL languages. When I was introduced to Functional programming languages (ML, Scheme, etc.) for the first time, it blew my mind. It forced me to think of the problem in an dramatically different way, and helped me develop new ways of thinking about problems that come up with OO programming. The same can be said about Logical programming languages (Prolog) and many others. I admit you would be hard-pressed to find any of these types in a job description, but learning to think about a problem in a different way is always helpful to anyone in software development. Show me a good programmer and I will show you an even better problem solver.
Don't get me wrong. I am not trying to put C# down as a language. One of my favorite hobbies is programming games in XNA (Microsoft's application framework for writing PC/Xbox games using C# and .NET). It's just that I am an advocate of understanding how things work before you start to use them. It's much more difficult for me to explain what C# is doing with every line of code than it is for C/C++.
There are some questions that have been in the back of my mind since I started writing this. What are you studying which requires you to use C# first? Is it some kind of specialized degree or certification of some sort which focuses on .NET programming? If not, then I am confused why the curriculum doesn't start out with a more fundamental language.