Programming language advice

Hi,

I want a programming language which gives me these abilities:

  • to create GUI applications
  • to be high performance,like doing intensive calculations (maybe compiled programs)
  • to be reliable
  • to be able to create environment simulations (graphic simulations), and at the same time communicate with a physical device, like Arduino
  • to be able to make image recognition with maximum performance (this would need to handle all cores and much memory)

Sincerely, I looked on the Google, and some say Java is the way to go, others say C#, others say that I should use multiple programming languages. Till now, nothing conclusive.
What do you think, what programming language(s) should I learn and why, considering what I have told?

Thank you very much,
RobertEagle

EDIT: Windows OS, but I'm open to any other PC OS if it's more efficient

I would say no single language would be ideal for all those tasks.
You didn't mention the platform by the way - C# might* be a good at GUIs, but utterly useless on your Android phone.

  • I only said "might".

Multiple platform support needed? If so, go with Java. If not, go with C#.

I know that C# can be used to create GUIs, is highly reliable (well, as reliable as any Windows software can be...), and can display pretty pictures.

Doing intensive calculations involves programming techniques and hardware, not a specific language. Doing image recognition is also not about a specific language. Generally, you won't be writing image-processing software, or you'd know a lot more about choosing a language than you know. At most, you'll be calling functions in an image-processing library. Linking external libraries is a linker issue, not a programming language issue.

this would need to handle all cores and much memory

What does this mean?

Me, I'd use C and SDL, or C and GTK+ depending on what style of GUI I was after.

But then I'd be doing that on a Linux machine, not Windows.

If you have to ask what programming language you should use, then the answer is Visual Basic. If you have enough programming knowledge to know how to find out what a programming language can do, or what might be suitable for your needs, then the answer to your question is "Anything but Visual Basic" :wink:

At the end of the day all programming languages produce machine- or byte-code1. So it's then really a case of choosing the language that provides the interface that suits you. Pretty much any (sensible) language can do anything you want, it's just a matter of a) how easy it is to do it, b) what libraries / add-ons are available to make your life easier, and c) what languages you are proficient at programming in.

Languages can be grouped in many ways, but one common grouping is "Object Oriented / Procedural". OO languages like C#, VB, C++, Java etc make programming easier at the cost of greater overheads as regards memory management etc. They often include facilities that, while they make the writing of a program easier, they also make the programmer more lazy - things like garbage collection, etc. Procedural languages, like pure C, are generally faster and leaner, but they take a lot more skill to get to grips with properly.

Then of course you have the interpreted / compiled grouping. Interpreted languages, like Python, can be very rapid for development, but they can also be a little slow compared to compiled languages. But they are great for smaller projects where development time is at a premium but execution speed isn't critical. With no compilation phases to worry about you can just make a change and run it and instantly see the difference.

So it's impossible to say "this language is better than that language", but it is possible to say "This group of languages fits your requirements better".

From your scant information I would err towards the "Visual Studio" style languages more - Visual C#, Visual Basic, etc. At the end of the day, regardless of the actual programming language in use for each of those, they all interface to the same routines (mostly .NET) in just the same way, so the only real difference is the language syntax.

1: Java produces byte-code which is then re-compiled at run-time to produce machine code by the "JIT" (Just In Time) compiler

I don't care how stylish is the GUI, I just want to make a GUI application so I can understand better what happens.

Let be more explicit about this project of mine:

Arduino would be and intermediate, a bidirectional bridge between the PC and a bigger device. It's highly likely I would need more than one Arduino, because there would be hundreds of inputs/outputs, sending data very fast.

Then, the data coming from the Arduino goes into the simulation and vice versa.
At the same time a high resolution camera takes several dozens of pictures, combines them, and then recognize certain patterns in the image and outputs some data, in no more than a minute. This process is repeated continuously.

The data from the Arduino and simulation is then combined with the data from image recognition process and then stored in the computer.
After all this processes come to an end, all the data stored in the computer must be rebuild graphically.

This entire project will be designed to work for a couple of weeks, nonstop.

RobertEagle

EDIT: related to the programming language, I'd like to have some libraries to work with, not build them from scratch. I have a little more than 3 year since I started C++ (and a little HTML and C). All I learned was from books and a lot of practicing.
The PC now has Windows, but I can accept other OSs if they are more efficient

If you use something like visual studio, the dialogue editor makes it very easy to get quick c++, c#, vb apps up. If you are comfortable with C++, stick with that as its the Arduino language too.

For your fine tuning of CPU control, the windows api has a load of functions for process/thread control, including what core to run your code on. This is available through many languages.

At the end, I think I'll use C++ and C# on a Linux platform. Therefore I'll learn c# language and Linux API functions.

One more thing: Since pattern recognition is such a broad question, with what should I start? Aren't there libraries for patter recognition? Is C++ a good choice? Literally, I am a newbie in pattern recognition.

Thank you again,
RobertEagle

At the end, I think I'll use C++ and C# on a Linux platform.

Good luck installing Visual C# on your Linux platform.

PaulS:

At the end, I think I'll use C++ and C# on a Linux platform.

Good luck installing Visual C# on your Linux platform.

Dare I say "Mono" ?