Click to See Complete Forum and Search --> : Help choosing a programming language


Bevel
January 13th, 2010, 01:03 AM
I'm looking to start learning to program, and I would like some help choosing the best programming language for me.

While I would love to start with C++, for the speed and power, I think it's a little too complicated for me to comfortably stick with in the beginning. So, I'm looking for a higher level language that ideally is not managed or dependant on anything. In other words, I want to be able to compile an application that can run completely on its own without needing .NET or any other components seperately installed on the O/S. If there's no way to get around that, so be it, but I would prefer a language that didn't need this.

I'm interested in programming apps for Windows, so speed, power, and flexibility is important - as is 64 bit support.


From what little I know, Visual Basic (not VB.NET) would have been perfect, except Microsoft is no longer supporting it, and it doesn't natively support 64 bit apps.


So, what would be the best choice given the remaining options?

thomus07
January 13th, 2010, 09:19 AM
If you combine C++ and MFC, it's complex and probably not the wisest place to start for now when MS is pushing .NET upfront.

So, Qt (http://qt.nokia.com/downloads) . It's C++, but way easy. You can build commercial application for free (under LGPL) that targets Windows, Linux and Mac.

Never skip C++ as your start up language of learning. It's always good for your programming career to have some level of understanding in low level programming. High level languages does all the stuff under the hood without letting you know what it had done. That said, if you have a project that can be easily done with a higher level language, then that's the way to go. :)

PeejAvery
January 13th, 2010, 10:23 AM
First off, why even consider Visual Basic non .NET? It's a deprecated language. VB.NET would be a great place to start if you wanted to only develop basic apps for Windows only. Anything C based will give you doors to other operating systems. The only difficulty is that you will need to learn memory management. Not difficult once you get used to it. In fact, once you get that down other languages are a breeze.

However, determining what language to learn really should be based off of your future intent. What do you plan to develop? Start with that...then choose the language that best fits your first need. Some people try to learn a language and then implement it. This is all wrong...it's like trying to create a need when needs already exist.

Bevel
January 13th, 2010, 02:56 PM
If you combine C++ and MFC, it's complex and probably not the wisest place to start for now when MS is pushing .NET upfront.

So, Qt (http://qt.nokia.com/downloads) . It's C++, but way easy. You can build commercial application for free (under LGPL) that targets Windows, Linux and Mac.




I have to say, I'm not thrilled with being limited by Nokia. I'd rather something less risky (Nokia has made some abrupt and nasty changes in the past).




Never skip C++ as your start up language of learning. It's always good for your programming career to have some level of understanding in low level programming. High level languages does all the stuff under the hood without letting you know what it had done. That said, if you have a project that can be easily done with a higher level language, then that's the way to go. :)




Oh, I know that C++ is definitely valuable. But better to learn another language well than to not learn anything at all (if C++ is too complicated for me to stick with at first).

Bevel
January 13th, 2010, 03:01 PM
First off, why even consider Visual Basic non .NET? It's a deprecated language. VB.NET would be a great place to start if you wanted to only develop basic apps for Windows only. Anything C based will give you doors to other operating systems. The only difficulty is that you will need to learn memory management. Not difficult once you get used to it. In fact, once you get that down other languages are a breeze.

However, determining what language to learn really should be based off of your future intent. What do you plan to develop? Start with that...then choose the language that best fits your first need. Some people try to learn a language and then implement it. This is all wrong...it's like trying to create a need when needs already exist.




It's not always easy to know at the very beginning what path you might end up on later down the line. I want to be able to develop apps for Windows - that being said, I want maximum flexibility insofar as type of apps. I don't want something limited to internet apps, or anything like that.

C++ is flexible enough to be the closest thing to universal in scope at the moment - you can use it to program anything from operating systems and hardware drivers to games. Are there no high level languages with a similar level of flexibility? (I know you'd never use a high level language to program an O/S, but everything else?)

PeejAvery
January 13th, 2010, 03:37 PM
Are there no high level languages with a similar level of flexibility? (I know you'd never use a high level language to program an O/S, but everything else?)
That's like asking for a glue that will hold parts together firmly yet bend for flexibility. It just doesn't work. Sorry,but if you want extreme flexibility in your developing, you better just dive in and start swimming in some C/C++/C# derivative.

Bevel
January 13th, 2010, 04:09 PM
That's like asking for a glue that will hold parts together firmly yet bend for flexibility. It just doesn't work. Sorry,but if you want extreme flexibility in your developing, you better just dive in and start swimming in some C/C++/C# derivative.




I know that nothing is going to come close to C++, but are all higher level languages *that* far behind it? Is there no such thing as a flexible high level language? Are they all that narrowly focused?

PeejAvery
January 13th, 2010, 05:12 PM
C#

nuzzle
January 19th, 2010, 03:57 PM
I know that nothing is going to come close to C++, but are all higher level languages *that* far behind it? Is there no such thing as a flexible high level language? Are they all that narrowly focused?

I think your best option is to go for either Java or C#. They're both modern easy to use widespread languages.

Out of these I would pick Java, not because it's better than C# but because it's more widely used in education. I suggest you download Java Technology and NetBeans IDE here,

http://developers.sun.com/students/free_software.jsp

Or both together (JDK 6 Update 17 with NetBeans 6.8) here,

http://java.sun.com/javase/downloads/index.jsp

Both languages need a runtime environment on the computer to run programs. I don't know about C# but for Java there exists a so called native compiler which allows you to compile a Java program to run alone. The drawback is that you got to pay for it,

http://www.excelsior-usa.com/

These are the platforms supported by Sun for Java,

http://java.sun.com/javase/6/webnotes/install/system-configurations.html

There are more platforms available but then you need to check the specific platform owner like IBM or HP. Java is platform independent which means a Java program can run on all of the supported platforms without recompilation, at least in theory.

nuzzle
January 19th, 2010, 04:48 PM
While I would love to start with C++, for the speed and power, I think it's a little too complicated for me to comfortably stick with in the beginning.


I've suggested Java in a previous post and that's a good choise for many reasons but if you feel for C++ I don't think you should drop it too easily. C++ simply is the best language (in my humble view) and not very hard to learn if you approach it in the right way. It's actually easier in many ways than both Java and C#. And there's evidence to boot that people who learn C++ first become better programmers (and I'm not joking here, tests have shown that).

If I were you I would get Programming, Principles and Practice Using C++, by Bjarne Stroustrup (the inventor of C++). Then I would get the free Visual C++ product from Microsoft and work myself through the book from cover to cover. Make sure Visual C++ compiles in native mode because then your programs become stand-alone and don't need any fancy .NET environment to run.

Arjay
February 2nd, 2010, 02:27 PM
@Nuzzle, I'm wondering what your thoughts are with regard to the tool/environment support in Java vs. C#.

I don't have much experience coding with Java (about 8 months experience 5 years ago), but at the time, it seemed that the environment I used (Ecllipse) lagged Visual Studio. Tools such as proxy generators didn't seem to be on par with the .net tools either.

Since I haven't coded in Java in quite a while, I'm wondering if this has changed.

nuzzle
February 2nd, 2010, 11:26 PM
@Nuzzle, I'm wondering what your thoughts are with regard to the tool/environment support in Java vs. C#.

I don't have much experience coding with Java (about 8 months experience 5 years ago), but at the time, it seemed that the environment I used (Ecllipse) lagged Visual Studio. Tools such as proxy generators didn't seem to be on par with the .net tools either.

Since I haven't coded in Java in quite a while, I'm wondering if this has changed.

I have only used Visual C++ and Eclipse for Java extensively. But if I compare those I'd say Eclipse is ahead. These are the Eclipse features I value the most. They make programming so very much simpler. I wouldn't mind having them in Visual C++.

1. Meta-compiler checks.

In addition to ordinary language errors you can tell Eclipse to check for about 50 additional potentially dangerous constructs for you. This makes it easier to enforce good style.

2. Refactoring.

You can change the name of a symbol or move things around and the whole application is updated to reflect the change. All implications of the change is taken care of automatically.

3. Instant error checks.

Eclipse checks for errors and indicates them as you type so you instantly know if and where something is wrong and can correct it immediately.

4. Automatic error fixing.

When there's an error Eclipse shows you a list of possible fixes. When you select a suggestion it gets done for you automatically.

5. Automatic import management.

Eclipse tells you exactly what imports (include files) you need.