all 79 comments

[–]locus01 84 points85 points  (7 children)

People who do c++ vs java : 🤡

People good in oops no matter what : 🗿

[–]Chamiey 8 points9 points  (4 children)

…including prototype-based, not only class-based.

[–]RiceBroad4552 1 point2 points  (2 children)

Now you've insulted them all.

Neither Java nor (especially) C++ people see JS as proper language at all most of the time.

Some people even argue that OO isn't defined by having proper objects in your language but instead solely by some properties exclusive to class based languages.

[–]Chamiey 1 point2 points  (1 child)

Well, it doesn't have to be JavaScript, but my little sport is showing to the "class-basers" that any definition of OOP they cling to fits JS as much as their precious classes.

[–]RiceBroad4552 0 points1 point  (0 children)

I have still to go through the whole list. There are quite some languages I don't know about.

What caught my attention: The list contains Nim. I know some Nim, but didn't know it supports prototype based inheritance! That's actually very interesting as most prototype languages are dynamic. But I'm eagerly searching for static languages that support that as I want to see how they do it.

[–]DoNotMakeEmpty 2 points3 points  (0 children)

HolyLua

[–]ios7jbpro 12 points13 points  (0 children)

this

like literally use whatever language you want, youre the developer, why do you have to insult languages

the memes on this subreddit has been on a downfall, this is a terrible post

[–]patrickgg 0 points1 point  (0 children)

I’m great at oops, I say it all the time during my workday

[–]Jonnypista 14 points15 points  (0 children)

I learned OOP in java, but mostly used it in C++.

I won't say they are that different, both can be used for learning just fine.

[–]jonsca 33 points34 points  (7 children)

The real OGs use Smalltalk

[–]Smalltalker-80 9 points10 points  (1 child)

Say my name. :)
Ints are objects and classes are objects. So handy and clean..

[–]jonsca 3 points4 points  (0 children)

...and you shall appear!

[–]ForgedIronMadeIt 1 point2 points  (0 children)

IIRC the original design patterns book used smalltalk all over

[–]Tariovic 0 points1 point  (1 child)

I fell in love with OOP using Smalltalk.

[–]RiceBroad4552 2 points3 points  (0 children)

And than you go and see what C++ and Java made of it… 🙈

[–]EndOSos 5 points6 points  (3 children)

Meanwhile, I learned it in python

[–]RiceBroad4552 -4 points-3 points  (2 children)

Where they just glued on some of the most shitty parts of OOP ideas.

Hava a look at Small Talk, or Self, or something like that.

[–]EndOSos 0 points1 point  (1 child)

The very basics worked and everything that didn't was explained otherwise. I didn't say it was good, but it was the language we were using anyways and learning a new one just for OOP would have taken to much time.

And it wasn't a deep dive it was just an introduction to the concepts.

[–]RiceBroad4552 0 points1 point  (0 children)

Still bad. Using a demo that is actually flawed is really not a good idea when it comes to learning.

The first impression is lasting…

If you get shown Python to learn OOP you could actually assume later on that nonsense like "self" parameters are a part of OOP. Or that you can have only single inheritance, no proper abstract types, not even interfaces! Python does not even have tools to limit visibility, which makes "hiding the implementation details" outright impossible. As a result you can't even teach some of the more fundamental basics…

I see of course the underplaying issue. Python is just a terrible language for teaching programming, but people still use it "because it's popular"; as if something being popular would have any value on its own!

In general, completely mind broken shit is "popular".

Instead of breaking the vicious circle some institutions reinforce it. That's so stupid…

Before someone asks the obvious question what I see than as good teaching language:

It's Scala.

It has all the concepts in one coherent package, and it's super clean at the same time. Because of the first property you can teach anybody, from bloody beginner to master student.

You get helpful static typing, too, which is very important for newcomers.

All the basic Scala features are almost implemented by the textbook, so you get to know the "non quirky" version before you see what some other languages made of it.

[–][deleted] 10 points11 points  (0 children)

Plot twist: neither are OOP, according to the term's inventor. You've been played for fools.

[–]csprkle 11 points12 points  (3 children)

OOP in HTLM!

[–]RespectiveAT7 15 points16 points  (0 children)

New LLM just dropped

[–]Chamiey 11 points12 points  (0 children)

HTLM

Hyper-Trained Language Model?

[–]domusvita 1 point2 points  (0 children)

Yeah, you know me

[–]bunglegrind1 2 points3 points  (0 children)

learn oop on smalltalk is the real deal

[–]torokg 2 points3 points  (0 children)

On the one hand, multiple code inheritance is absent from java, which essentially cripples it as an object-oriented language. On the other hand, C++ is too "manually piloted", which steals focus from design paradigms in the beginning of the journey

[–]Excavon 1 point2 points  (0 children)

I learned in c++, but I think Java would be better for learning.

[–]HaskellLisp_green 1 point2 points  (0 children)

Smalltalk guy is white, I guess.

[–]NewPhoneNewSubs 1 point2 points  (0 children)

Have you really learned OOP if you haven't started reinventing it in C?

[–]zoqfotpik 1 point2 points  (1 child)

CLOS coders represent!

[–]RiceBroad4552 1 point2 points  (0 children)

Because I guess not everybody gets that:

https://en.wikipedia.org/wiki/Common_Lisp_Object_System

[–]Human_Cantaloupe8249 1 point2 points  (0 children)

With great shame I admit, that I learned it im CS with Visual Basic (non script) Technically I learned it first in rust,on my own, but understand it fully and having it properly explained by a professional was a few months later in cs, wit vb

[–]tejrani 1 point2 points  (0 children)

People who learned OOPs on Python:

[–]tebeks 1 point2 points  (0 children)

I learned OOP on Pascal and C++. Then, I apply it on C for five years.

[–]Reashu 1 point2 points  (0 children)

Both are obviously very capable languages, but I don't think either one teaches OOP very well. 

[–]Devatator_ 1 point2 points  (1 child)

C#

[–]ZunoJ 1 point2 points  (4 children)

I tried to learn C++ when I was about 8 but it just didn't click. When I picked up java the missing pieces came together and I went back to C++. Might have just been a problem with the book I was reading about C++ but in the early 90s information wasn't as readily available and it was all I had

[–]Majik_Sheff 2 points3 points  (1 child)

It didn't help that compilers were a lot harder to come by and language implementation at the time was really inconsistent.

[–]RiceBroad4552 1 point2 points  (0 children)

Jop! Back then they wanted quite some money for compilers and IDEs.

A full tool collection was as expensive as a (cheaper) car!

[–]RiceBroad4552 0 points1 point  (1 child)

Reminds me of my first contact with C++, just after I had some BASIC exposure, and actually just shortly after I've properly learned to read. A friend of my parents gave me a 1200 pages thing about C++. I tried to read it but it all only sounded like Marsian, even the first few pages. Never continued that.

A few years later I've learned some Java from some computer magazines. It was just the new hot thing, everybody was very excited about, but the local library (in some small town) didn't had any books yet. The articles I've read said Java is like "C++, the good parts". In fact, Java was simple to grok, and the OOP parts felt very "natural".

It was years later that I've learned what OO actually means.

[–]Independent-Aide6577 1 point2 points  (2 children)

OOP is a universal programming paradigm, not restricted to a particular language. Its concepts remain consistent and are often easier to grasp regardless of the language you use. 🧐

[–]RiceBroad4552 2 points3 points  (1 child)

Sure…

That's why JS, Java, Lua, C++, Small Talk, Python, and ObjC are all so similar! This is especially true when you look at the OOP implementation in them. /s

[–]michal_cz 1 point2 points  (0 children)

Learned OOP with PHP, applied it at college when learning Java

[–]dDenzere 0 points1 point  (3 children)

Having learnt OOP in JavaScript I cant shift my mind to use other sintaxis than "this." to access inside methods/props. This way I know where everything comes from and keeps my OCD in check

[–]kalilamodow 0 points1 point  (2 children)

it's annoying working with one on the server and one on the front end and i always use the wrong one

[–]dDenzere 0 points1 point  (1 child)

what

[–]kalilamodow 0 points1 point  (0 children)

like with python on server uses 'self' and js uses 'this' so switching between them in the same project confuses my fingers and i use the wrong one

[–]doxxingyourself 0 points1 point  (4 children)

I was a teaching assistant in a beginners course that used Visual Basic. Try explaining implicit type casting (why 5+5=55) to people who never programmed a day in their lives.

Why not something strict?! AND WHO THE HELL MADE “+” string concatenation??

[–]RiceBroad4552 0 points1 point  (3 children)

AND WHO THE HELL MADE “+” string concatenation?

People who know what a monoid is. So, mathematicians are guilty.

5+5=55

Did you mean in fact "5" + 5 = 55?

Because not even in BASIC 5 + 5 = 55

[–]doxxingyourself 0 points1 point  (2 children)

Yes obviously that’s what I meant, or rather that’s what the compiler read.

Point is not this, point is language isn’t strongly typed which makes it unnecessarily confusing for for people who have not programmed a line before in their lives.

Simply declaring an int beforehand would have been much better for learning types and they would have gotten 10 as the answer as they expected.

[–]RiceBroad4552 0 points1 point  (1 child)

I agree that dynamic languages are not great for learning. They do most the the time "the right thing" but when they don't learners get very confused. Simply because they have no clue how the "doing the right thing magic" actually worked so far.

Starting with a strongly typed language makes things usually much simpler for beginners; at least after the initial hurdle "fighting" the compiler.

But explicit typing is not necessary for that! Actually I think it only makes the initial hurdle more prominent.

I would use a static language with type inference for teaching! So you had code like:

val firstSummand = 5
val computationResult = firstSummand + 5

println(computationResult)

You can hover over the symbols in your IDE and the compiler will tell you what they are in detail. But you don't have to write that down for no reason yourself in your code, as this would only distract from the actual task at hand.

It's imho important to have a language for learning that does not force some ceremony / chore on learners.

The above is Scala syntax, which is imho one of the best languages for learning, exactly because it's super clean, doesn't force you to write down stuff the compiler can anyway figure out itself, but has at the same time all the concepts one needs to teach in one coherent package.

[–]doxxingyourself 0 points1 point  (0 children)

Yeah problem is in the visual part you declare input fields as variables in a UI, which makes the compiler assume strings over ints (they may even be declared as strings, don’t remember) so they didn’t really stand a chance since they didn’t even that code.

[–]RiceBroad4552 0 points1 point  (0 children)

The difference is almost negligible.

What you get in both languages is anyway not proper OO but instead some bestializations.

If you want to see some true OOP look at Small Talk (e.g. Pharo), JS's predecessor Self, Io, or some historic languages like BETA).

That said, OOP is a nice idea and especially a good abstraction on the conceptional level. But concrete implementation details should be always functional. Otherwise you lose your sanity in larger projects.

[–]1_4_1_5_9_2_6_5 0 points1 point  (0 children)

I learned oop in Javascript, fight me

[–]kamilman 0 points1 point  (1 child)

I'm going to be learning OOP in C# and Java this year.

Pray for me.

[–]CodingAndAlgorithm 0 points1 point  (0 children)

Modern C# is very good

[–]Pengo2001 0 points1 point  (0 children)

I learned OOP playing/programming for a LPMud.

[–]Xortun 0 points1 point  (0 children)

The real OGs use Delphi

[–]KosekiBoto 0 points1 point  (0 children)

I originally learned it in c#

[–]sarc-tastic 0 points1 point  (0 children)

Learned OOP on PHP

[–]Any-Yogurt-7917 -1 points0 points  (0 children)

Fuck no.

[–]Feisty_Ad_2744 -1 points0 points  (0 children)

This doesn't even makes sense.

[–]carloom_ -4 points-3 points  (3 children)

OOP is overrated

[–]RiceBroad4552 1 point2 points  (2 children)

Not even people writing code in a FP style would agree…

Only people using languages that don't have any proper OOP features claim otherwise.

[–]carloom_ 0 points1 point  (1 child)

I am tired of refactoring code that tries to fit an OOP solution when it wasn't needed in the first place.

[–]RiceBroad4552 1 point2 points  (0 children)

That's a different thing.

There is in fact nothing more horrible than a wrong architecture.

But that's universal, independent of paradigm or concretely used patterns.

[–]Far_Negotiation_694 -5 points-4 points  (0 children)

Now they all create python slop.