I'm rather skeptical of a lot of things that claim that "XYZ language sucks so bad." Truth be told, how bad something sucks is often going to come down to someone's specific opinion, and in some cases, specific beefs. If someone thinks that using direct machine language is a disgusting, barbaric approach, they're going to think that writing code in C and/or non-managed C++ should be a capital offense with no appeal. If someone thinks that interpreted languages are basically a pile of bloated abstraction layers fit only for the lazy or grossly ignorant people who shouldn't program in the first place, they're going to think the same thing for managed systems and scripting languages. People who value mathematical precision will scoff at procedural languages, fans of speed and simplicity will say that functional languages are a pile of brain-bending gibberish. This is to the extent that some computer science professors thoroughly enmired in theory think pretty much all languages that people actually use are abominations, and then wonder why nobody takes them seriously.
No language is going to be perfect, and neither is the software that makes it manifest (e.g. compilers or interpreters). If this eludes you, you are probably going to be in for a rather rude dose of reality at some point.
...except for Prolog, that shit's just plain nasty.
First of all, there are a lot of lists like this, and most people have one language type they adhere to and may view the other language types as fit only for barbarians (and in some cases the authors are complete assholes about it, which makes me wonder if they have any idea of what they're really talking about, even if they make good points). Most, if not all, paradigms have a place, even if the author is so obsessed with their own concept of "the right thing to do" for programming that they're willfully blind to this.
Second, a lot of languages are, to some extent or another, hybridized. Sometimes this is done for efficiency, sometimes it's done because the language designers needed or just wanted it, sometimes it's there because the language was designed by committee. Just about every one I've run into has some dominating paradigm, but the others mixed in there may make sure that the dominance of that main paradigm may not be by a whole lot. So the specific languages in question the implementation of the paradigms are important, too.
Third, a lot of languages have many dialects. Some are particularly bad with this, wherein everything from modern object-oriented code to TI-82 code to line-numbered GOTO-infested code from 1977 are all considered some dialect of BASIC. So the individual implementation of the language is also important, and if there is a generally accepted standard (e.g. C99), that is also important.
Fourth, some problem domains just blatantly encourage a particular paradigm. For instance, if for some reason you want very compact code, you may find yourself going to a pure functional language, even though there may be other drawbacks such as performance and stack space penalties. Others may be more oriented towards, say, being able to be changed quickly, as well as established norms, as you'll often find with the scripting languages in web development projects. So even if a paradigm is repugnant for you in terms of regular projects 99% of the time, there is probably a 1% of the time that somewhere, nothing else will fit quite right for one reason or another, no matter how much you may hate it.
So in short this is not a simple problem to approach. Your best bet is likely to learn about the generalities and pick up some familiarity with several different language types (including assembler). Then you'll be better equipped to evaluate what a language actually is, what it's good for, how to write code that uses the paradigm rather than trying to bash it into the syntax so it fits, and have an overall idea of how it does what it's trying to do. Note also that you do not need to LEARN dozens of languages to pick up this much, although a lot of people learn a lot of languages - and understanding this stuff can go a long way to rapidly picking up enough of a language's syntax to have a minimum level of competency in a short period of time.
I actually like Java, though it's quite verbose and often annoying because of that, I think it's oddly elegant and full-featured. I enjoy coding Java. Now, fixing other peoples' Java on the other hand...
C# is one heck of a great language. But the language itself is only partially the reason. It is because of fantastics tools like Resharper that makes developing in C# really fun.
It tries to become too many things and in the end it fails in every single thing. It tries to be too generic. Java clients tends to look like created by a hobbyist compared to applications created in their native language for specific devices.
And sadly enough that is exactly what Microsoft is now doing by dumbing down their Office to these stupid apps Office thing. It tries to run on any device but it it sucks on any device.
18 comments
8 u/tribblepuncher 20 Nov 2015 06:13
I'm rather skeptical of a lot of things that claim that "XYZ language sucks so bad." Truth be told, how bad something sucks is often going to come down to someone's specific opinion, and in some cases, specific beefs. If someone thinks that using direct machine language is a disgusting, barbaric approach, they're going to think that writing code in C and/or non-managed C++ should be a capital offense with no appeal. If someone thinks that interpreted languages are basically a pile of bloated abstraction layers fit only for the lazy or grossly ignorant people who shouldn't program in the first place, they're going to think the same thing for managed systems and scripting languages. People who value mathematical precision will scoff at procedural languages, fans of speed and simplicity will say that functional languages are a pile of brain-bending gibberish. This is to the extent that some computer science professors thoroughly enmired in theory think pretty much all languages that people actually use are abominations, and then wonder why nobody takes them seriously.
No language is going to be perfect, and neither is the software that makes it manifest (e.g. compilers or interpreters). If this eludes you, you are probably going to be in for a rather rude dose of reality at some point.
...except for Prolog, that shit's just plain nasty.
0 u/fire_eyeballs 24 Nov 2015 01:20
Is there a good list of language types and their pros and cons?
1 u/tribblepuncher 24 Nov 2015 03:11
I would use Wikipedia as the starting point, with their list of programming paradigms, which seems decent on a cursory examination:
https://en.wikipedia.org/wiki/Comparison_of_programming_paradigms
However, you must keep in mind a few things.
First of all, there are a lot of lists like this, and most people have one language type they adhere to and may view the other language types as fit only for barbarians (and in some cases the authors are complete assholes about it, which makes me wonder if they have any idea of what they're really talking about, even if they make good points). Most, if not all, paradigms have a place, even if the author is so obsessed with their own concept of "the right thing to do" for programming that they're willfully blind to this.
Second, a lot of languages are, to some extent or another, hybridized. Sometimes this is done for efficiency, sometimes it's done because the language designers needed or just wanted it, sometimes it's there because the language was designed by committee. Just about every one I've run into has some dominating paradigm, but the others mixed in there may make sure that the dominance of that main paradigm may not be by a whole lot. So the specific languages in question the implementation of the paradigms are important, too.
Third, a lot of languages have many dialects. Some are particularly bad with this, wherein everything from modern object-oriented code to TI-82 code to line-numbered GOTO-infested code from 1977 are all considered some dialect of BASIC. So the individual implementation of the language is also important, and if there is a generally accepted standard (e.g. C99), that is also important.
Fourth, some problem domains just blatantly encourage a particular paradigm. For instance, if for some reason you want very compact code, you may find yourself going to a pure functional language, even though there may be other drawbacks such as performance and stack space penalties. Others may be more oriented towards, say, being able to be changed quickly, as well as established norms, as you'll often find with the scripting languages in web development projects. So even if a paradigm is repugnant for you in terms of regular projects 99% of the time, there is probably a 1% of the time that somewhere, nothing else will fit quite right for one reason or another, no matter how much you may hate it.
So in short this is not a simple problem to approach. Your best bet is likely to learn about the generalities and pick up some familiarity with several different language types (including assembler). Then you'll be better equipped to evaluate what a language actually is, what it's good for, how to write code that uses the paradigm rather than trying to bash it into the syntax so it fits, and have an overall idea of how it does what it's trying to do. Note also that you do not need to LEARN dozens of languages to pick up this much, although a lot of people learn a lot of languages - and understanding this stuff can go a long way to rapidly picking up enough of a language's syntax to have a minimum level of competency in a short period of time.
7 u/darthsuegar 20 Nov 2015 05:54
I actually like Java, though it's quite verbose and often annoying because of that, I think it's oddly elegant and full-featured. I enjoy coding Java. Now, fixing other peoples' Java on the other hand...
2 u/WhiteRonin 20 Nov 2015 06:10
Java brought a lot of cutting edge design patterns and such but Oracle owns it now so ... Burn!
2 u/darthsuegar 20 Nov 2015 06:33
Ah crap, I forgot Oracle owned them now. Dang it.
5 u/land_as_exile 20 Nov 2015 05:32
I am interested in what this guy uses? If java and .net are such garbage please tell us what what God giving programming does he use?
6 u/51rH0n3y84d93r 20 Nov 2015 05:35
Assembly of course, anything higher level is trash.
2 u/Atarian 23 Nov 2015 16:15
And even then only 6502 or 68000 assembler. 8086 is nasty.
1 u/fire_eyeballs 24 Nov 2015 01:19
This is really pushing the "anyone worse than you is a noob, anyone better than you has no life" to the corner.
1 u/51rH0n3y84d93r 24 Nov 2015 01:34
Haha, I agree. I'm of the belief, right tool for the right job, and I don't mind Java or .NET.
I'm surprised someone else didn't argue that software is crap, you need to design the hardware to do all your work!
6 u/WhiteRonin 20 Nov 2015 06:15
I'm a MS hater but C# is pretty decent from what I hear.
3 u/bbrez1 20 Nov 2015 16:17
C# is great. And it's only getting bigger each day.
2 u/WhiteRonin 20 Nov 2015 20:18
I keep hearing that. Would you say it's better than what Apple puts out? Swift / apple's objective C?
3 u/roznak 21 Nov 2015 02:21
C# is one heck of a great language. But the language itself is only partially the reason. It is because of fantastics tools like Resharper that makes developing in C# really fun.
1 u/roznak 21 Nov 2015 02:19
It tries to become too many things and in the end it fails in every single thing. It tries to be too generic. Java clients tends to look like created by a hobbyist compared to applications created in their native language for specific devices.
And sadly enough that is exactly what Microsoft is now doing by dumbing down their Office to these stupid apps Office thing. It tries to run on any device but it it sucks on any device.