What programming language SHOULDN'T you learn?

6    30 Sep 2016 04:02 by u/Omnipresent

What language do you recommend one should not bother learning, and why?

61 comments

9

Brainfuck

2

I guess this probably goes for all of the languages listed on Esolang?

7

Whitespace

4

I started out using FORTRAN. My mentor at the time said "don't ever learn COBOL".

His reasoning was that it would be too easy to get a job doing boring and stupid business programming and that I'd never do anything interesting again.

He was right. I didn't learn COBOL, but RPG instead (it's like COBOL without vowels). I've been making a good, easy, living for almost 30 years, but it is boring.

3

Perl: as stated in a recent article posted here about the while statement (which I can't find because Voat search sucks) Perl has tried very hard to offer absolutely every possible coding mechanism ever offered by any other functional language. The result is that everyone writes code in their very own way and comparing person X's code to person Y's code could make you believe they're actually different programming languages. In-line regular expressions, operator overloads and implicit variables are just a few examples out of many that makes Perl one of the hardest non-crypto languages to read.

If you're looking for a scripting language Python, Ruby and others are actually sane alternatives - Python even has as one of its core design principles that There should be one-- and preferably only one --obvious way to do it - which seems to me as a direct jab at Perl development history. For the same reasons I'd say people are better off using #!/usr/bin/python3 than BASH when doing their Linux scripts. I know I do. Lua is also a lightning fast and embeddable scripting language for your projects.

Here is an example line of Perl code, taken from their regex guide:

$_ **= $_ , / {$_} / for 2 .. 42;

PHP: If you look at PHP's premise you'd think it's all good, right? A templating language that is super fast for the web. Right? Right but it has a lot of problems. It's a way more low-level language than it should be for working with the web (many of it's core functions are just direct calls to C standard library, which is crazy and super outdated nowadays) - this alone means silly web developers will try to use it for a ton of backend processes that really shouldn't be done in a templating language.

The major problem for me is the userbase though - PHP developers (the big frameworks you'll end up using with PHP included) can't help but repeatedly choose the weird and bug-prone ways of implementing things instead of good design, which results often in hard-to-debug errors and weird situations you just can't seem to get away from. I'm not a huge PHP coder though I've done my share but it seems to me that when the entire community has to quirk around a language then that's either the language's fault for making this easier to do than to create proper code or even for allowing it at all! Also there are a ton of crash courses promising "good IT money" and will teach you basic PHP, which means the market is flooded with Wordpress projects that are crap-full of copy-pasted boilerplate code where none should be, which the creator just puts up and gets the money from the client but it's impossible to maintain later on - which means it will fall on your hands instead once it needs more work and you'll have to do it all over again and explain to the client why it's even more expensive doing so than the few hundred bucks he paid to get the site up to begin with.

Again, there are dozens of modern scripting languages and frameworks that are better alternatives to PHP. Practically every language now has a templating framework, from Java to Python - just pick one you like and let me know what's your favorite alternative since the jury for templating is still open for me. Much more flak on PHP if it's your favorite language and you're thinking welp this guy is being a bit too harsh http://me.veekun.com/blog/2012/04/09/php-a-fractal-of-bad-design/

1

How to shoot yourself in the foot using PHP:

You shoot yourself in the foot using a gun made with parts from 300 other guns.

2

Haskell, it sucks

0

I like it.

2

I'm before PHP is brought up.

But seriously listen to SamBone, he just laid out some great wisdom.

2

Basic and visual basic. They were so watered-down that they were really for, "If you're never going to learn to write software, learn this instead, and you can get along".

1

LOLCODE

1

I don't know. Lolcode is actually pretty fun.

1

Java.

It's fucking horrible.

1

What makes it horrible? How does it compare to perl, python, c?

1

Java is fine but outdated. You can do more in C# and you can generally do it far cleaner. C# played catchup for the early part of its life, but for years now Java has been playing catchup to C#. And Visual Studio is more or less built around C# and vice versa. Java, last I was using it, is severely lacking in the IDE department. As just one small thing building a GUI in Java vs one in C# is just night and day. C# also plays much nicer for those instances when you need to break out of idiomatic C# and go native, execute unsafe code, etc. Java is basically idiomatic or GTFO.

And something not at all directly related to the language, but the original style guidelines for Java suggested the god awful brackets on same line as statement/declaration style. For the life of me I cannot figure out why a single person would ever like this. You save a line of white space, which has no tangible value, in exchange for a substantial penalty to readability which has a massive value. Why? WHY?? This legacy still carries through to many projects and it makes my eyes bleed.

2

Object Oriented programming is cancer.

0

Why do you say that? Honestly asking.

2

OO was invented originally as a system of abstraction that could be used to attract people to computer science programming and that could be explained/sold to the business people who are sponsoring projects which don't understand the technical side at all (just like things like Agile and etc are now.) It was very convenient because it "solved" both these problems well, because it related abstract computational entities to RL entities like cars/bicycles and their parts.

Unfortunately like most multi-purpose solutions it is actually a poor solution for at least one of its intended problems, in my opinion it is definitely bad for the programmer, here are some examples of why I think it's bad.

Classes: They serve both as data-types and modules. It doesn't make any sense from computer architecture standpoint and little sense from RL standpoint too (which is supposed to be the selling quality.)

Yes, bicycles have wheels and stuff, but bicycles don't have "methods". "Driving" isn't a property of a bicycle it is an abstraction over its intrinsic physical properties. If the block of the bicycle class is meant to represent stuff that a bicycle has, the internal state of the bicycle should be logically separated from the functionality it's capable of.

From the technical standpoint it doesn't make sense either. The default elements of programming are datatypes and functions. Functions are blocks of data that can be executed, datatypes are look up tables into data that describes the properties of the datatypes. A Class defines both a type and functions. Functions are united together into modules which are a good abstraction over the program memory of the program. Datatypes are compile-time elements, while data objects are pieces of memory that are meant to follow the properties of the corresponding data-type. But in OO if I instantiate an object of a certain class it seems like you also instantiate the methods corresponding to that class. that would be horrible inefficient and in reality it does work the same way as in imperative or functional programming (tables of function pointers) however it doesn't change the fact that a "Class" is a concept that's overloaded it's both a data-type and a module, this makes it a bad abstraction for programming.

It is true that Interfaces are meant to alleviate this problem, but the fact that you can define method prototypes in classes and not just interfaces opens up the possibility for poor programming style.

Will continue later.

Continued: another problem with OO is that the facility for generics are abysmal. Basically the object you're calling a method on can be generic but no other parameters easily can with any useful guarantees. The reason this is a problem is ultimately because object methods have ownership over their methods, but the type parameters of the methods don't. This is a problem that interface don't fully fix either.

Subtype polymorphism or inheritance (the signature feature of OO) is also very limiting. It forces you to implement methods youll never use or to refactor inheritance hierarchies frequently, as a result its best not to use inheritance hierarchies as little as possible and just rely on interfaces which are quite limiting in comparison to some of the features other languages have like typeclasses.

2

Semantics for one. The language is not fun to program in. There's oodles of boilerplate. The stacktraces are near incomprehensible. The UI library (swing) was coded by a lunatic sadist, and when you finally manage a UI it looks like shit.

There's the overhead of the JVM too, but I'm not so concerned with that (I code in CL so I have to deal with a large compiled binary, which is kinda similar to your Java program + the JVM runtime).

Coding in Java basically feels like having an old man with bad teeth licking your ear.

1

Heh heh... "the JVM". I've seen stuff inside my org fail because not only did someone not use a very specific version of the JVM but also used the wrong brand (Oracle vs IBM).

Do you want the old man with bad teeth because half have fallen out or the old man with bad teeth because they're all a lovely shade of green?

3

Agreed. OOP is useful, so if you're going to go for it, go C++ (real C++ not just C in a C++ wrapping) or .NET. .NET took everything good about Java and left behind (mostly) everything bad about it.

2

.NET is a framework, not a language. It supports dozens of different languages. I assume you meant C#.

1

There are no .NET languages compiled into IL that are not OO.

0

Lol, the internet where you can never be wrong.

Yes there are. There are dozens of CLI languages and many are not OO. This is a non-comprehensive list of some including various functional languages like Lisp, specialized languages like Prolog, and so on.

3

I was very careful to say IL, not CLI.

0

How about IL Assembler?

Oh yeah forgot F#.

1

C++ is not OO, it's many things and OO is one of its worst things.

Using C++ like C but with the semi-automated memory management features and good libraries like Vector is a very good and may actually be the best way to use C++. Modern C++ is also ok if you know how to use its features without inducing sickening compile times.

0

Thanks for the recommendation with Vector. Manual memory management is kind of a pain (and, honestly, if I'm going to explicitly allocate and deallocate, I'm probably going C), but automatic memory management isn't really a requirement of OOP. Polymorphism is, and if you're using the C++ runtime, you're using it! That said, I'd be lying if said I never saw someone use printf inside C++...

C++ isn't without it's problems but overcoming those problems can help with pretty much anything, whereas learning to overcome Java's problems only really help for Java.

0

I prefer printfs over C++ dumb << >> overloading. In C you can achieve polymorphism for specific type instances with some boiler plate. It's definitely not optimal.

Yes, you can't have OO without polymorphism but you can have polymorphism without OO, and it's the better kind of polymorphism.

1

Basic.

#Atari4Lyfe

0

Apple Basic. Variables with only two unique letters. Oy vey.

0

I can respect this.

1

Learn languages you'll be paid to use. If you do this then you will focus on the languages you SHOULD learn as opposed to the ones you shouldn't.

But my two cents here. Certain languages are dead and are probably not worth the effort for a hobbyist. Obvious ones are PERL BASIC, etc. Less obvious is PHP. These languages are used by Greybeards or by newbies who have a Greybeard as a boss. But, it's rare to find a modern project written in PHP, PERL, etc without the influence of a Greybeard.

The standard I like to hold is "If we were recovering from a zombie apocalypse and we had to become serious about choosing a language, which languages would make the cut"

C/C++, Assembly, Python, and BASH would be in. MAYBE javascript, but that is a stretch. Ruby would be out. C# and Java would be out.

1
  • Brainfuck
  • LOLCODE
  • JSFuck
  • Chef

Along with pretty much anything listed here: https://esolangs.org/wiki/Language_list

0

Forth. For your own good: Do not use Forth!

I did it for a while, (Because I was young and needed the money.) and it broke my brain and hurt my soul.

0

Javascript

1

Everyone and their mom uses it, though. Do you have any particular language to use in Javascript's place?

3

Anything else that compiles to javascript

1

Clojurescript.

0

I got tired of Lingo a long time ago...

0

Fortran.

Also, anyone who hates OOP is a backwards-ass retard who's stuck in 1993.

0

Common Lisp 4 lyfe, niggah.

0

PHP

Mathlab

LabView

The first two are not descent with their variables, you can't define the variables and while working with them, in Mathlab's case, they will change to another data type without any valid reason.

And LabView is just weird, and overly complicated.

0

Just to nitpick, its matlab. Somebody probably copyrighted mathlab...

0

;)

-2

Multiplex Garcinia consuming small portions and cutting things down is a completely sensible idea. that is where many humans get confused and feature a hard time because they may be so used to consuming larger food. but, reducing those down will assist to cut that calorie intake down in order that the body does start to lose kilos. that is one of the very first-rate weight loss guidelines that humans have been capable of use nowadays.http://greentheorygarcinia.com/multiplex-garcinia/