Thanks a lot for your comments and valuable contributions to this discussion thread. Thanks for the deep thoughts and support that are reflected in your valuable answer; I salute you, Sir.
1. In my point of view, Python is better than Java and C.
2. For students it is easy to start with Python because many libraries are available in Python. But I will suggest students to start with C, just to have a basic idea about programming. Actually, in C we have to write everything in detail so students will have a clear idea about the mathematical logic behind programming. After having a basic knowledge of C, I will suggest students to shift to Python. I know C is a little bit complicated compare to Python but it will be helpful for them in the future.
3. For developers and professionals, Python is the best. As I said above, it is very easy to write a complicated simulation in just a few lines using the Python libraries.
4. Actually, I work with large matrices (images) and it is easy to handle these large data sets in Matlab. So for my research work (image processing), I prefer Matlab.
5. I have very limited experience with Java, so it is difficult for me to comment on this point.
Thanks to Sayantan Dutta for making the first valuable contributions to this discussion thread! Really thanks for his deeply thought and support that are reflected in his words.
The question is far too broad without adequate context. Then the giveaway is that it expects some sort of linear "better" scoring of Java, C, and Python.
There's no question that Python is becoming very successful for general learning and with its ability to use high-performance libraries is a factor in the scientific and technical usage in data-mining and machine-learning applications. It may or may not be a candidate in a High-Performance Computing setting, and one might need to ask whether serious Software Engineering processes are required and why R might not be part of it and, for that matter, whether multi-processor FORTRAN might be in use in a particular HPC setting involving super-computers.
The giveaway here is that there is no indication of in what way large-scale and performance-critical constraints are intended. So as much fun as it is to flog some tools and evangelize others, the question is lacks specificity and there can be no specific answer.
Dear colleague Jehan-Antoine Vayssade and Dennis Hamilton,
Let me thank you for your collaboration and support for your contributions to this discussion. I very much appreciate this mark of solidarity. However, you make me more confused on what to select for large scale projects. I always try to build my students such that they are close to the market as the first priority and then the researching as the second one. I will be very please if you can highlight this point of view.
So are you asking for what you should recommend to students? That's even less specific. What do you use as an example case of a complex, high-performance situation? Then it is possible to assess how such applications are built and maintained. With a variety of cases, they might discern how flexible they will need to be.
1) Asking which is better and giving a list of just 3 languages when there are 100s available unreasonably limits the conversation. Also the development and runtime environments are just as important as the languages when considering large performance projects.
Large scale high performance systems require reliable/bug free code collected into extensible libraries that can be release controlled, module tested and benchmarked. This is not a language specific thing rather an implementation environment. Think about DevOps not syntax for performance and reliability.
2) The first computer languages that students learn have a fundamental impact on how they subsequently visualise/model/write programs in the future. When reviewing written code in the '90s you could see who started life out on Basic, Fortran, C and assembler. A persons first language influences subsequent thinking so go for a modern full featured syntax such as Python(maybe) or Swift(better) or even Go that naturally builds safe code and structured algorithmic thinking. Provide a better set of building blocks using a modern full featured language (not C). Think Mechano rather than Lego.
Consider when learning to drive motor cars is is better to start on a simple tractor in a field or in a modern hatchback in a quiet suburb ? Some folks learn by crash and restart others only by building on past successes. Just as important as the language is having flexible and inclusive learning plan and environment. IT folks are notorious for thinking different and being both unexpectedly brilliant and fallible. A teaching plan needs to cover the full spectrum of thinkers not just the digitally gifted.
3) Whatever pays the bills and gets the job done on time and on target.
4) It has taken me 6 months to convert my brain's thinking from C/Perl hacker into Swift advanced thinking. I have learnt so much in the process and will now always promote Swift or similar advanced languages.
1. Comparing Java, Python and C is like comparing a screwdriver, pliers, and a hammer. Those tools are different, but you need them all in a workshop. For computer science students I recommend to start from C, then try C++, then try C# or Java, then try Python or JavaScript innovation.
2. Which is better for students as a good and easy start? An easy start is not always good one. My recommendation is above. But do not prohibit creativity. Each person is unique. Let them choose.
3. Which is better for developers and professionals? They need some basic skills in a number of programming languages. And then they specialise and become experts on one or two according to personal preferences and real project needs.
4. I started from FORTRAN, PL/1, and Pascal for big projects on mainframes, then had projects in Prolog, C/C++, Java, Python, C#, Visual Basic, JavaScript, and currently work on three projects using C/C++ (expert), C#, Visual Basic, and JavaScript. I really like C++ because it’s a working horse of modern software engineering.
5. Do you believe that Java is a 100% Object-oriented programming (OOP)? Yes, of course. C# is similar, but better designed.
Python is a good programming language for engineering software. However, it is very slow. If the performance matters, then C++ is better choice. If your program is not an object-oriented program, then try C or Fortran (they are the fastest programming languages ever). Java and C# are good choices for developing GUIs or multi-platform programs, but not scientific programming languages.
For performance-critical programs (as you mentioned in your question) I strongly recommend "Intel Parallel Fortran" that comes with lots of powerful mathematical and numerical computing libraries. However, it is expensive and may take time to learn it. If it is not available, then C/C++ is the best.
Are you trying to start a war?! People have very strong opinions about programming languages and there is no "one true" language. In VERY general terms:
Python is a good learning language (like BASIC or Pascal was back in the 80s) but slow execution.
Java has the advantage of cross-platform compatibility ("write once, run anywhere").
C is the most efficient with low level memory access (which also makes it dangerous for beginners).
Scientists like R and Fortran. Business people continue to use COBOL. There are specialized uses for Lisp, Swift, Go, AWK, Forth, etc. As technology changes, more languages will emerge. Whatever your first language is, it shouldn't be your last.
Thanks a lot for all the comments and the valuable contributions to this discussion thread. Really thanks for the very deep thought and support that are reflected in these answers.
Since the doors are still opened wide, comments, views, and contributions are most welcomed.
Which is better Java, Python, or C? For critical real time systems C/C++ is for sure the best, but the knowledge of this language implies to know a lot of about hw works, it is a low level programming language that means very close to hardware resources and of course you need also to couple it with a very good OS (so a good RTOS is the best choice)
Which is better for students as a good and easy start? My opinion is C++ with a good compiler (as example Visual C++) but then they have to switch to a more professional RTOS
Which is better for developers and professionals? for critial missions C/C++ for sure
Which is your preferable choice? I think you realized it.. C/C++
Do you believe that Java is a 100% object-oriented programming (OOP)? yes it is, it is good to understand the OO concept but if you need to make serious things then you have to swith on C++
For teaching students I prefer Processing. It has syntax like Java/C++, but simpler, and very very easy graphics, that give students quick feedback when they make mistakes.
Question is poorly formulated, because it assumes that Python, Java or C# share the same development space as each other. They don't.
More over, despite the fact that C++ provides native implementation for the target platform, it does so from the perspective of an executable which is compiled based on a fixed configuration at the time of compilation.
C# and Java present the option to scale based on an evolving virtual machine infrastructure (32 -> 64 bit), with the option for JIT (just-in-time) compilation, where such optimizations are possible relative to modified CPU ISA's (instruction Set Architectures).
Look at it this way: If a Java assembly can be complied to native code exploiting the most recent optimizations on the CPU as identified the compiler implementation, would the Java artefact be faster or slower than native code created for a different system, some time ago?
- this is an interesting observation - I was working with SUN shortly after they introduced Java (yes.. I'm old) - the premise that they pushed at the time being "It's not possible to create a unit of code outside of a class" - what's strange is that this same rationale is applied to C# even today - regardless of functional, procedural, event or declarative behaviors (i.e. "Comprehension syntax for linq").
So ultimately their definition of a 100% OOP language is "Unable to ground valid code in any other paradigm" - so it's not so much 100% OOP, just 100% incompatible with any alternate paradigm / metaphor.
Thanks a lot for your comments and valuable contributions to this discussion thread. Thanks for the deep thoughts and support that are reflected in your valuable answer; I salute you, Sir.