Has the Java programming language grown to include too many features to support too many different paradigms? Does a typical developer really use much of the language?
1. "Without using these benefits, you might just stick with the good old C++ or even C# with .Net if you are not a very good programmer and want a lot of copy pasting to work out of the box".
Comment:
But I want to observe that chronologically C# (First Version: C# 1.0, Date: January 2002, .NET Framework 1.0) was developed from Java (see, e.g. a phrase "James Gosling, who created the Java programming language in 1994, and Bill Joy, a co-founder of Sun Microsystems, the originator of Java, called C# an "imitation" of Java; Gosling further claimed that "[C# is] sort of Java with reliability, productivity and security deleted" from "C Sharp (programming language)" on the link
http://en.wikipedia.org/wiki/C_Sharp_(programming_language) ) . Thus, in my opinion, your phrase "with the good old C++ or even C# with .Net" must be corrected as "with the good old C++ or even Java".
2. I personally like C# as a language, but for web apps, I'd never use ASP.NET. Also, I'd never use JSP either. PHP or Python would be preferable because of speed of execution and development flexibility. .NET and JSP are just way to closed and strict, while in PHP there are many different MVC frameworks.
4. Data structures like Gas, Light, Bathroom Equipment, and so on
5. Algorithms like ACTIVATING Gas, Light, and so on.
6. Programming like PAINTING OF WALLS
Using the proposed terminology, we can say that our discussion is about PAINTING OF WALLS. The question "What computer language should be used?" is same that if we ask about "What color should be used to paint walls?" The question "What language to use: Java or C# ?" is same as to ask: "What color to use: LightBlue or LightGreen ? This question is dietary preferences. Users and practitioners are not interested to know about any computer language. They want to use the programs as tools to solve their problems. Using this opportunity, I want to remind about my main proposal. I'm an active follower of Donald Norman's conception from "Designing For People" http://www.jnd.org/dn.mss/the_research-practice_gap_1.html
"There is an immense gap between research and practice. I'm tempted to paraphrase Kipling and say "Oh, research is research, and practice is practice, and never the twain shall meet, ...". My main proposal is Developing Online Programs (Web Applications on a server) for users and practitioners ( see the link
https://www.researchgate.net/post/Why_dont_developers_use_the_best_research_on_software_development ). Solving this problem is very important (many times more important) than developing Offline programs in Java or other computer languages. If you prefer PHP or Python than ASP.NET, please, developing your Web Applications in PHP or Python. This question is your choice. I want to underline again, users can never know about your computer languages. They will evaluate your programs as users without special knowledge. Currently,
there are very many Online Games in the Internet, are not any Online Programs available for users practically. Thus, my main proposal is "To create a Database of Online Programs available for users". Are there any ogranization (e.g., a well-known Journal or others) would be interested to solve this problem? If the answer would be YES, then I would be interested to share my experience.
3. Of course, writing scientific simulators in C# is almost ludicrous. I mean, why would I allow myself to have a 10MB (package, dependency libraries and the executable itself) when I can have one written in C++ and have it weight less then 500kB.
Comment.
My offline main C# program (as WindowsFormsApplication) had a size 2,73 MB of Source Text. But my WindowsFormsApplication.exe program was only 419 KB. It is true, to run this program correctly, before we should install .NET environment.
The language itself is actually simple and very straightforward.
The problem with Java is that there is an incredibly large library collection on the Internet and that all those classes in all those libraries is impossible to keep track of.
As for programmers who code in Java, they typically use a fixed number of libraries and class sets that they have written themselves or are developed by the company they work for or they just found it on some public code hub and have grown fond of them :)
No one expects a Java developer to know every method for every object of every class in every package in every library.
So my answer would be "No". Java isn't too complicated, it is just very well structured and as a result it had grown to immense sizes and no one can ever "learn all there is to it", but one can "learn to understand it completely" and if the code one reviews is written according to all conventions and standards it is easy to adapt to anything new someone could throw at you.
Currently, I develop my online programs in ASP.NET with C# and I very pleased with the ASP.NET service. There are some power Linkedin Groups in the Internet about ASP.NET. In my view, ASP.NET is more advanced program tool than Java. As an example, I developed my "Bin Packing Online Tool ( on the link http://www.fedulov.ge ) in ASP.NET with C#.
Gennady, everybody reading this question will probably have his own favorite language.
Any language has advantages, disadvantages and limits. Without knowing the application or the ease of the potential user in learning languages, we cannot suggest any or say one is better than another.
For me for instance ASP.NET is completely useless, as I develop scientific software with no need for web, no need for huge libraries or for forced MS software, and need for computing speed. I could easily work in Java though as it is flexible enough and it could simplify several tasks (plus it has a garbage collector...) but I prefer to work in C++/Fortran/Assembly to use the best part of each. But I would never ever suggest this solution to anyone working on a different topic, nor to the average 2013 programmer usually more interested in ease to write, reuse and adapt to a new project
Gennady.. sorry but I do not fully understand your point...
Try to write a molecular dynamic software running on the Titan or a massively parallel GPU routine in ASP.NET, or try to modify any scientific code knowing just Java... conversely try to create an interface to a database with an online display in Assembler... My point can be "yesterdays' day" but this is the reality in science. And I still believe that language and application (and hardware as well) are tightly bound.
For long time I am looking for a good programmer able at least to implement new algorithms to be fast (I don't want to wait or 2 years before getting a result)... and I am still waiting for a good one (able to sole the task with the proper tools) to show up.
I personally like C# as a language, but for web apps, I'd never use ASP.NET. Also, I'd never use JSP either. PHP or Python would be preferable because of speed of execution and development flexibility. .NET and JSP are just way to closed and strict, while in PHP there are many different MVC frameworks.
As for Java, I'd stick with it for all sorts of mobile applications. Be it Java ME or Android applications.
Of course, writing scientific simulators in C# is almost ludicrous. I mean, why would I allow myself to have a 10MB (package, dependency libraries and the executable itself) when I can have one written in C++ and have it weight less then 500kB.
Just as Matteo has said, every language has its advantage in a certain field or on a certain platform.
As for Java, it really is a better structured language then C# (which I have been writing programs in since 2005), but the whole problem is that you can't really know if something you need already exists and whether or not you need to write it anew, while Microsoft's .NET used for writing C# programs provides you with a lot of automation while you have to sacrifice flexibility and speed.
Again, I'd say that neither C# nor Java are complicated. Both are actually simple, it just comes down to whether you want to write Windows programs (C#.NET, ASP.NET) or universal platform independent programs (Java). I skipped over the fact that there is MonoDevelop and QT app programming in C# on GNU/Linux operating systems, because I've never actually seen a serious commercial application written in C# for UNIX-like systems.
my answer on "yesterday's day" was related with a problem about "Online acceptance for users". Today, this problem is tragedy for users: most of researcher's programs are not accepted for users to solve their problems.
Now I want comment your last phrase:
"For long time I am looking for a good programmer able at least to implement new algorithms to be fast (I don't want to wait or 2 years before getting a result)... and I am still waiting for a good one (able to solve the task with the proper tools) to show up".
If I understood you correctly, you want to find "a good programmer" in order to develop "new algorithms to be fast". If it is true, I'm interested to know about problem description: please, give me your problem description (it would be better as a mathematical model). My area of interest is Combinatorial Optimization.
Java is not at all complicated. Actually no language is complicated every language has some positive & some negative points, all that matters is what you want to do. Java has number of libraries for many types of application same thing with C#. I personally don't find any difference between these two but i love to program in java as i have learned java first & then c#.
Interfaces, Generic programming, Complex enumeration types, collections and object serialization... all of this is what you normally use when you develop even a close-to-a-serious system for a company or whatever other purpose.
Without using these benefits, you might just stick with the good old C++ or even C# with .Net if you are not a very good programmer and want a lot of copy pasting to work out of the box.
All of those mentioned additions to Java don't make it complicated. Those are universally available concepts in many programming languages. They are not unique to Java.
1. "Without using these benefits, you might just stick with the good old C++ or even C# with .Net if you are not a very good programmer and want a lot of copy pasting to work out of the box".
Comment:
But I want to observe that chronologically C# (First Version: C# 1.0, Date: January 2002, .NET Framework 1.0) was developed from Java (see, e.g. a phrase "James Gosling, who created the Java programming language in 1994, and Bill Joy, a co-founder of Sun Microsystems, the originator of Java, called C# an "imitation" of Java; Gosling further claimed that "[C# is] sort of Java with reliability, productivity and security deleted" from "C Sharp (programming language)" on the link
http://en.wikipedia.org/wiki/C_Sharp_(programming_language) ) . Thus, in my opinion, your phrase "with the good old C++ or even C# with .Net" must be corrected as "with the good old C++ or even Java".
2. I personally like C# as a language, but for web apps, I'd never use ASP.NET. Also, I'd never use JSP either. PHP or Python would be preferable because of speed of execution and development flexibility. .NET and JSP are just way to closed and strict, while in PHP there are many different MVC frameworks.
4. Data structures like Gas, Light, Bathroom Equipment, and so on
5. Algorithms like ACTIVATING Gas, Light, and so on.
6. Programming like PAINTING OF WALLS
Using the proposed terminology, we can say that our discussion is about PAINTING OF WALLS. The question "What computer language should be used?" is same that if we ask about "What color should be used to paint walls?" The question "What language to use: Java or C# ?" is same as to ask: "What color to use: LightBlue or LightGreen ? This question is dietary preferences. Users and practitioners are not interested to know about any computer language. They want to use the programs as tools to solve their problems. Using this opportunity, I want to remind about my main proposal. I'm an active follower of Donald Norman's conception from "Designing For People" http://www.jnd.org/dn.mss/the_research-practice_gap_1.html
"There is an immense gap between research and practice. I'm tempted to paraphrase Kipling and say "Oh, research is research, and practice is practice, and never the twain shall meet, ...". My main proposal is Developing Online Programs (Web Applications on a server) for users and practitioners ( see the link
https://www.researchgate.net/post/Why_dont_developers_use_the_best_research_on_software_development ). Solving this problem is very important (many times more important) than developing Offline programs in Java or other computer languages. If you prefer PHP or Python than ASP.NET, please, developing your Web Applications in PHP or Python. This question is your choice. I want to underline again, users can never know about your computer languages. They will evaluate your programs as users without special knowledge. Currently,
there are very many Online Games in the Internet, are not any Online Programs available for users practically. Thus, my main proposal is "To create a Database of Online Programs available for users". Are there any ogranization (e.g., a well-known Journal or others) would be interested to solve this problem? If the answer would be YES, then I would be interested to share my experience.
3. Of course, writing scientific simulators in C# is almost ludicrous. I mean, why would I allow myself to have a 10MB (package, dependency libraries and the executable itself) when I can have one written in C++ and have it weight less then 500kB.
Comment.
My offline main C# program (as WindowsFormsApplication) had a size 2,73 MB of Source Text. But my WindowsFormsApplication.exe program was only 419 KB. It is true, to run this program correctly, before we should install .NET environment.
Dear Magel, you might want to skim right to the * * * * * at the bottom of my post.
I have make a "short" one-time-only off-topic. It is nothing bad, just a healthy discussion-sake post written longer then it could have been, mostly because of my laziness to review and optimise it right now.
Dear Mr Gennady,
I agree with you that C# as a language was loosely based on Java object oriented model approach and has since then forked away a bit, but compared to many other languages still is more similar than the others.
As for my comment there, I did make a mistake in expressing myself, so I will note the correction here. By the "good old" part I meant C++ and in regards to C# I wanted to link it to the "copy pasting" - not because I believe that is how coding is done, but because there really is a very big set of snippets, tutorials and a lot of discussions on StackOverflow regarding C#.Net code.
I've coded in C# for some time, as I have mentioned, and I have no disrespect for people who prefer it over anything else, but in my experience, I've seen limitations when it comes to design, implementation and deployment. Not to mention that the lack of cross platform support was one of the main killers in successfully selling a product and having clients who ordered it be satisfied (because they had to rent expensive servers instead of using those they already use to host their applications - non-Windows OS platforms).
As for comment number two, I cannot agree.
Have one server architecture in mind. Imagine any you regularly come across in shared hosting environments. Keep it in mind and keep in mind its resources.
Now, have that server run a GNU/Linux, or BSD or any other UNIX like OS with an Apache Web server with PHP and MySQL DBMS and have it run just one e-commerce website with 10k hits per day. Let's say that the server is good enough to handle this kind of traffic (shouldn't be a problem really), but for argument sake, assume that 10k in these software installed conditions is its maximum.
Now, imagine the same hardware running Windows Server 2008, an IIS server, Microsoft's SQL Database Server and have the e-commerce website be written in ASP.NET. Can you really guarantee that the server (hardware) will be able to survive for a long period of time running all that and being hit 10k. We are talking about hardware the same as for the previous case scenario. I know people who run hosting and housing businesses and I know for a fact that you need at least as twice as powerful machine to have its maximum be at the peek of the described ASP.Net application.
Measure just the response time for the first hit (first ever hit's response time) for a PHP script page and a ASP.Net page.
So, in the end it is not really down to the programming language, but to the framework, platform and compilation etc. Because C# doesn't have to be used in combination with .Net at all. .Net is the one to blame for applications being slow, but imagine C# without .Net. It makes things simple to develop, but it is resource costly.
Java is almost the same. It makes a lot of things simple to develop, because there are a lot of libraries.
Personally, I like to make clear distinctions regarding which framework, which library set should be used for something. Java comes in many flavours.
Java SE, Java EE, Java ME, Java embedded, Java Card, Java TV etc. There are many distinct fields for which Java has been ported for.
I teach Java EE at my University, and one part of the course are Web services. I teach it, but I never recommend my students to write their website in JSP. I even tell them not to when they have PHP, a lot of support, a lot of tools and a lot of cheep deployment platforms all over the web. How many good hosting plans can one name of the top of one's head that provide Tomcat or Glassfish servers? I can't name any, really. Not without asking Google. And those that I have looked up earlier aren't really cheep.
I'm sorry to Magel for making this somewhat an off-topic discussion in the last few days. I won't be making any more attempts to prove my point, because I believe that my arguments are valid in the same sense as one would say that the colour green is more suitable for painting the pedestrian pavement then blue, or yellow or white are.
* * * * *
Meaning, when it comes down to choosing a programming language, I fully agree with you Mr Gennady, when it comes to generic PC application programming. However, when it comes to specific platforms like:
- The web (hosting of any kind - dedicated or shared)
- The cloud (dedicated, VPS, etc.)
- Intranet (business IT architecture)
- Embedded development
- Industrial machine programming
- Mobile development
- etc.
When it comes to those specific platforms, it isn't really a "whichever" choice when it comes to picking a language, because for every language there is a small or big set of additional tools, libraries, support, compilation optimisation, architectural awareness and optimisation, optimal vs unreasonable use/waste of computing resources etc. These all have to accounted for.
1. Let people read the texts from the Internet using key phrases:
a) "Java vs ASP.NET"
b) "ASP.NET vs Java"
c) "Java or ASP.NET"
d) "ASP.NET or Java"
to have personal opinion.
2. How do you think what is complexity of step "6. Programming" of all steps. In my view, about 1-2%. I want to repeat again, problem of using language is your personal problem. From the point of view of practitioners, this problem is not interested for them. Users must click only a link to use a Website to solve their tasks. This comment is related closely with problem of using Website by practitioners. Currently, my "Bin Packing Online Tool" (in ASP.NET with C#) is hosted with AccuWebHosting (USA, Colorado, Denver) as Shared Windows Hosting platform for $4 / month.
3. Comment on your phrase
"I'm sorry to Magel for making this somewhat an off-topic discussion in the last few days. I won't be making any more attempts to prove my point, because I believe that my arguments are valid in the same sense ..."
Please, making any more attempts to prove your point again and again.
In my opinion, the ResearchGate discussion is very useful for people, in particular, for young researchers and developers, many times more useful than any conference.
In question of preference, I agree. Some prefer C++, Some prefer Java, some prefer Python, some prefer C#.
But for the question in this topic "is Java complicated", my attempt was to explain that it is no more complicated then C++ is, or then Ada is, or any other language.
Every has it's basic syntax and semantics, and therefore they are all equally "complicated" to learn. Read this as "equally easy to learn".
What sets them apart and differentiates them with something we could call "overall language complexity" is the number of existing libraries, their organization and usefulness to developers.
So in that sense, Java is very well organized and useful, the set of .Net libraries (be it used in VB, C#, J#, C++ etc.) are in my opinion way to generalized, but are still useful to developers.
So in that sense was my argument positioned so to put Java in a more preferable place then C# (as a language primarily using .Net), not in a sense that as a "language" it is in some way defective and less preferable. Not as a language caused by its specification, but as a language that mainly deals with a third party extensions such as class libraries, and only for that reason.
Java is not A,B,C,D to learn easy its a programming language first u learn C,C++ then learn java,Java is not a complicated its depends on understanding power for any human being...is it right.
Anything we learn in life is complicated at first during the learning steps ... e.g. learning to walk, learning to speak, learning to read and write. Can we say that Chinese is more difficult to learn than English? It depends on the Kindergarten you went to ...for a Chinese, English is very difficult while we think it is the converse. Where am I going with this ... it depends on the language you learnt first, how you take subsequent attempts to learn something else programming or not.
Even if it is complicated, it can be explained and taught in simple way, but you should have good logic and think as engineer. Complicated things can be explained in a simple way if we understand them better.
If you have good algorithmic thinking, no language is complicated, it's just more syntax to learn. The problem is who teaches you or what book you use to learn.
If anyone wants to learn java, they have to learn the core first. Everything else are just like choices. If you want to develop web apps, you have to learn servlets, jsp and so on.
But core is a must if you want to continue with java.
If you are good with atleast one IDE, java is the best language.
There's a saying, "Computer Science has as much to do with computers as Astronomy has to do with telescopes."
Computers, and all the languages that are used to develop software for them are really just a means to an end. Computer Science really deals with the SCIENCE of COMPUTING, which is not limited to any one particular language or technology.
Instead it deals with a fair amount of theory. It focuses on two main areas: How data is represented and how data is manipulated. Both of these categories are very broad and a good CS program will educate the scholar in all the different methods and principles.
So, to answer your question (so to speak):
Data Representation: Data is really just a bunch of 1's and 0's but how you interpret that is what makes it useful. Depending on how the data will be used (do you need a space saver, or something that can be found very quickly?) will have a big influence on how it is stored.
User Interface Design: There's another saying "Being a doctor would be great if it wasn't for the patients." Often times, it's very difficult for a programmer to develop software that is easy and intuitive to use. How do you arrange your interface that allows the user to accomplish his job as quickly and easily as possible?
Software Engineering: Ah, modern marvels. How to write software that runs fast (certain algorithms are better than others), uses the least amount of memory required, and correctly performs the tasks required (bugs suck!)
Finally, Java. I would say that most modern programming languages are easy for a beginner these days. Generally speaking, the more difficult a language the more control you have over your programs. Learning Visual Basic might have a small learning curve, but you really can't accomplish much with it, compared to, say C++. Java isn't the easiest language, but it certainly isn't the hardest to learn.
Java has become a bit complicated. It is complicated than Visual Basic. Yes it has become a general purpose language so have a lot of constructs related to different domains as Networks, Web, Concurrency, etc.
But it has a large learning Curve, so very helpful for understanding a lot of concepts.
To "say more by saying less" does not make a complex language;
But "say less by saying a lot" makes a complex language.
Now with "saying more":
I wouldn't say that any language is complicated. A language may have a syntax with many different constructs, a lot of rules, features, maybe even a language that accepts more than one dialect (for example PHP where you can use many different ways of saying the same thing). But that does not make it complicated, but rather it may put it along side a bunch of other languages that are considered complex (offer a lot of stuff) opposed to languages that are not complex (will not say "simple") that offer a reduced syntax with less rules. To be honest, I'd call a language like that one "complicated" because it takes a lot of time to "say" to the compiler what you want it to prepare for the CPU (a translation). A typical example would be Assembler where there aren't many "rules" and the syntax is not complex all, but doing something meaningful in it is very "complicated" and that is what I'd label as a complicated language.
Java is in a sense simple, but offers a lot of features. I'd compare this with a natural languages vocabulary.
A Complex language would be that which has a less developed vocabulary (in CLangs one that DOES NOT have a lot of libraries, classes, functions) and
A Simple language would be that which has a more developed vocabulary because with it you "say more by saying less".
java is not complicated . but we are understanding later java . java is a beauty of language of programming. read and do practice of programming. you get full confidence in java.
definitely bloated;0), keeping everything you don't need out is very hard, it's very simpler to stuff it with everything you think you may need in the future and also at the moment!~, i think Common Lisp may be a good example besides Java (Language not its platform)...