What programming languages should I learn?

I think determining what technologies one should use to solve a problem is a very important part of designing good software. C++ IS faster and more performant than those few languages I stated in my previous post-- but I hold what I say-- it is not necessarily always the right thing to go for.

If the benefits of C++ do NOT apply to the solution you need to develop, I don't see why you would use it over languages that might have other advantages that suit the needs of what you need better (barring personal preferences for personal projects and such). e.g. Why wouldn't I use C# to develop a windows app that pulls and push data from a DB and displays it to its user? It sure as hell will be faster to write and easier to maintain simply due to the fact that a lot of shit you'd have to do manually is abstracted / black boxed.

Like I said, determine what you need, then pick what fits your needs-- there isn't ONE end all be all.

Anyways, that's my take on this "C++ is best everything else is inferior" way of thinking.

1 Like

You are right that when talking about applications such as writing programs specifically for the windows platform, that the use of a language like C# makes a lot of sense.
However Java has very few applications outside of android apps where it really excels at anything. Memory management in particular is an nightmare when using Java. GC is an utter mess.

Nor do I believe C++ to be a fix-all solution to everything. I referenced C++ above since Java takes so much inspiration from C++, and would therefore be among the easiest language alternatives for people to pick up.

Situational awareness when it comes to knowing what languages to use IS extremely important.
You are absolutely right about that.
HOWEVER.
Java is all too often used in situations where other languages would get much better performance.
I would encourage people to look at other options first before choosing Java.

That's like saying "Because a toddler behind the wheel of a Lamborghini Aventador is slower than a rally-car racer behind the wheel of a VW Beetle, the Beetle is the better car."

As a web developer myself, I concur with @Tjj226_Angel's comments on the state of web development.

I am a freelancer, so much of my job pretty much is just making stuff in WordPress because that is what people want, I hardly do any proper coding.

Now if you worked for a company, especially a bigger one, you would be doing stuff from scratch most likely, or if you are using a framework like WordPress, you would be doing a lot of customization resulting in coding.

MySQL/MariaDB still has a lot of value to learn, with FB, Amazon and a lot of other corps using it.

Because of the above, I am learning C, C++ and Python on the side. Gotta be careful not to saturate though.

You can have the fastest car in the world, but if your driving skills are lacking then you'll get surpassed. No matter what car you have.

The point I was trying to make is that the compiler can optimize your code up to a certain point, the people or person that's writing the code makes the real difference.

Just because C++ is usually faster, doesn't mean that particular implementation will be faster in C++.

There is a TINY number of Java programs that really gain any kind of performance boost because they are written in Java.

Again, I feel my car-metaphor is appropriate here:
2 equally skilled and experienced drivers, one driving a VW Beetle, the other a Lamborghini Gallardo, compete in a race.
If both drivers suck, then the performance will be poor regardless of the car they're in.
However, if both of them are experienced, professional drivers, then the Lamborghini will absolutely destroy the Beetle.

I was more focused on the case where we have two different drivers, one sucks, one is really good and two different cars (Beetle and Lamborghini Gallardo).

The low skilled driver drives the high performance car and he's like: "Damn my car is so more powerful than his, I'm going to win for sure!".
While the skilled driver drives the "slow" car and knows that is able to beat the other driver by using his experience.

My whole point is that it takes a good driver (or at least one that knows how) to take advantage of the features offered by the fast car.

That's a given. I agree, and I've never said the opposite.

There are inherent limitations to using Java, especially when comparing it to something like C, or as you put it "C/C++ rubbish".

Let me stop you right there.
For starters, C and C++ are used for vastly different things.
C++ is Object Orientation and deals with much more high-level features compared to C, which is much more concerned with low-level management of resources.

Combined with the poor modern performance of Java (Hell, even JS runs faster than Java) due to an almost Windows-esque cooperate management of the language, I cannot see how Java won't be outperformed in the overwhelming majority of cases, both in terms of performance and accessibility by other languages.

Since you seem intent on defending Java, can you perhaps show me something that only Java can do that will make it the best possible choice in terms of performance OR accessibility in a scenario?

EDIT: (It doesn't matter if Michael Schumacher is driving the Beetle, any average joe driver would outperform him in the Lamborghini)

I chose Java as a mere example. I don't know where you get that I'm defending Java. I'm the first one that doesn't like it :D. I am not defending nor shitting on any language here, mine was more of a general discussion.

I'm aware of the limitations that Java has. By "C/C++ rubbish" I mean a good portion of the code written by most unexperienced C/C++ programmers who don't usually focus on the efficiency of their algorithms.

I'm not trying to diminish the value of C or C++. In fact I'm using C right now.

I am fully aware of the differences between the two. I'm not the type of person that speaks without knowing the subject.

I'll give you an example of what I meant. Let's say two programmers have to implement a priority queue using two different languages, one of them is faster than the other one.

The first programmer who is using the faster language implemented it in a naive way (unordered linked list, ordered linked list, or ordered array, doesn't matter).

The second programmer that is using a slower language implemented it using heaps.

Guess who's algorithm is faster given a large input?

You misunderstand.
What is something that only Java can do, that no other language can do better?

Again I'm not trying to defend Java. But for the sake of replying I'll give you what I think Java does better.

  • Faster build/deploy time with something like JRebel.

  • easier to debug code

  • Less headache managing memory and people do make mistakes in managing memory. We can argue with that I know. But this is a hot topic.

  • comes with a standard library.

This leads to productivity improvements because you don't have to be as careful while writing your code, nor spend a lot of time at run-time chasing down errors that made it through the compile process. This is especially useful in big projects, where a single bug can hold the entire development process and slow down the other phases.

Java and let's say C++ are two differents beasts (tools) used for different things. In an industry where real time response is required and when you only have limited memory, C++ is better. It provides both the speed and the memory management (if done right).

Java is for easy cross-compatibility on most standard platforms today, when you care less about exactly how your code runs, but in return I get a simple, maintainable, easy to understand code that's portable.

I'm not for "Java for life" or "C++ for life". I select which language depending on different factors.

*"Faster build/deploy time" On a paid-for 3rd party builder... but ok, valid point.

  • "Easier to debug code."
    How so? Error messages or exceptions are nothing that only Java does.
    If anything, debugging code is an absolute nightmare in Java. Java's design decision to use both null and exceptions for errors means you have to do all the work in C to detect errors, plus all the work in C++ to properly declare your exceptions.

  • "Less headache managing memory"
    Have you USED the GC in Java? It's abysmal.
    Nothing against GC's in general. For a lot of people they're useful (or even necessary) components. But the one in Java is terrible.

  • "comes with a standard library."
    ...
    You DO know standard libraries exist within other languages, right? C++ has a standard library, for example.

Right now Java is around because of it's many libraries, that allow for it to be ported over and run (if poorly) on almost anything.
HOWEVER.
Having an abundance of libraries is no reason for people to continue to use a language.
Only ask the Perl community.
Not to mention, LLVM IS a thing.

For example eclipse provides very useful debugging tools, plus there are other 3d party tools both for debugging and testing.

You are less likely to make horrible mistakes that aren't always easy to spot especially when buried under tons of code. It does makes sense if you don't want to spend a lot of time to find silly mistakes. See what I wrote in my previous post after the 4 bullet points.

I guess I should have said that Java has a wider centralized (all in one place) library. I'll agree that it's bloated.

I'll point once more that I'm not defending Java, that was not my purpose.

2 Likes

Just you can start your career in java. Its one of the top most programming language.Most of them it companies using this technologies in software field. In Java has lot of platform modules - java web services, java spring and hibernate is one of the trending platform modules in software area. once completion of this course and finally you will be offered in top companies with high package.

Check out this :
Java Web Services Training

1 Like

First u have to decide in which language u are going to start your career..
Check this out it will be useful..
C Programming http://fresh2refresh.com/
C++ Programming www.cplusplus.com/doc/tutorial/
Java Programming http://www.javaprepare.com/java-tutorial/

Since the discussion turned into what has faster performance I have to ask:

How frequently is performance optimization a job requirement (as in a skill to have)?
How frequently is a problem solved by writing better code that runs faster?
And how frequently are programming languages chosen based on how fast they can be once executed?

Two year necro thread is locked.