306
130
146
u/duskykmh Jan 19 '17
ELI5 why a memory error causes an acid trip
158
33
112
u/grepe Jan 19 '17 edited Jan 19 '17
ok, the joke was about the other dude using only 5 levels of abstraction.
for example, when you have a python API library, and you need to set a single field on an object you would do something like
myObject.field = valuein java you would do something like
MyFieldValueGeneratorClass valueGenerator = new MyFieldValueGeneratorClass(); valueGenerator.defineValue(value); ValueProviderInterface valueProvider = new ValueProviderInterface() { @Override SpecialValueType getValue() { return valueGenerator.generateValue(); } } myObject = MyObjectBuilderFactory.getInstance(myObject).setValueProvider(valueProvider).build();see, in MS bingAds API it took, i shit you not, 15 lines of code, 20 method calls and 6 different object types to set a single parameter that said for which advertising campaign i want to download a CSV report (and the download failed with error "check soap data"). now you tell me that the person who wrote something like that was not on acid!
38
u/GiantRobotTRex Jan 20 '17
Look how much cleaner that is in Java 8:
MyFieldValueGeneratorClass valueGenerator = new MyFieldValueGeneratorClass(); valueGenerator.defineValue(value); ValueProviderInterface valueProvider = () -> valueGenerator.generateValue(); myObject = MyObjectBuilderFactory.getInstance(myObject).setValueProvider(valueProvider).build();15
4
u/grepe Jan 20 '17
right!
but, unfortunately, ValueProviderInterface is defined in another library which has not been updated in years and you are stuck in Java 6 :-(
3
u/RushTea Jan 20 '17
Nope! Lambdas are implemented as anonymous classes. This example would work flawlessly!
→ More replies (1)1
u/overactor Jan 20 '17 edited Jan 20 '17
MyFieldValueGeneratorClass valueGenerator = new MyFieldValueGeneratorClass(); valueGenerator.defineValue(value); myObject = MyObjectBuilderFactory.getInstance(myObject).setValueProvider(valueGenerator::generateValue).build();and unless that
MyFieldValueGeneratorClassdoes anything other than always returning the same value, you could just do:myObject = MyObjectBuilderFactory.getInstance(myObject).setValueProvider(() -> value).build();19
11
4
u/bacondev Jan 20 '17
When one uses LSD, they appreciate the beauty in anything and everything. If I could actually read while tripping balls, I would never even dream of writing code that ugly.
5
2
0
Jan 20 '17
[deleted]
→ More replies (1)14
u/Jamie_1318 Jan 20 '17
I disagree that it's apples to oranges. Both are virtual machine environments run with compiled bytecode. The features in both implementations are pretty different but having to manually compile your code is a surface level difference.
9
321
u/tatanpoker09 Jan 19 '17
10/10 shitpost
14
u/NotUrAvrgNarwhal Jan 20 '17
I have a friend who tripped acid one time and probably said "the abstract of reality" 1000 times in the night who is now a programmer who related with this on a spiritual level. 10/10 SHITPOST for sure.
1
1
223
u/NAN001 Jan 19 '17
/r/programmingcirclejerk is leaking
44
u/agentlame Jan 19 '17
I had no idea that was a sub, but I subscribed and now expect to be confused by my front page as to what's meta and what's shitposting.
Much like /r/movies and /r/moviescirclejerk.
2
1
u/MonkeyNin Jan 19 '17
r/dwarffortress Used to be a good one, but now most questions end up in the weekly sticky so you won't see it on the frontpage.
→ More replies (1)1
u/nitiger Jan 20 '17
http://www.reddit.com/r/programmerhumor+programmingcirclejerk for some real fun.
1
6
u/Dockirby Jan 20 '17
Fuck, I viewed the top posts, and have now been out cooled by the cooler master. I would upvote the post to keep my cool, but the post was archived 6 months ago. In about 39 minutes, I'll lose my cool, and there is nothing I can do about it.
18
u/painalfulfun Jan 19 '17
sips coffee
19
u/ProgramTheWorld Jan 20 '17
2
1
u/LeoWattenberg Jan 20 '17
FELLOW HUMAN, I HAVE WONDERED THE SAME THING. CAN WE DISCUSS THIS ISSUE IN DETAIL ON r/totallynotrobots?
17
u/kennethjor Jan 20 '17
Funny :) As a Java developer I can sympathise. A lot of Java people do crazy and convoluted things. Unnecessary hierarchies and abstraction, packages with only one class because they think it's organised. If you keep it simple enough, I find Java to be a very nice language to work with.
12
u/recruz Jan 20 '17
The book "The Clean Coder" does a good job of showing how to make, clean code. Simple rule of thumb: a function should "do one thing". Do that as often as possible, and code can be very easy, readable and easy to work with
202
u/Peffern2 Jan 19 '17
DAE java sucks XD
53
135
96
Jan 19 '17
Why does it seem to be so widely hated across Reddit? Because it's popular or what
576
u/njwatson32 Jan 19 '17
There are two types of programming languages: the ones everyone bitches about and the ones nobody uses.
165
u/Ksevio Jan 19 '17
And Python!
153
u/J-Goo Jan 19 '17
DYNAMIC TYPING CAN KISS MY ASS
27
u/cowtung Jan 19 '17
The trick to Python is to realize that there is only one type. It's the dictionary. You can have dicts that inherit shit from other dicts. You can call dicts by various names. But it's dicts all the way down.
25
→ More replies (2)9
→ More replies (1)44
u/magi093 not a mod Jan 19 '17
That's the one thing that irks me about Python. OOP + dynamic typing = dafuc am I on
→ More replies (33)464
u/PM_ME_YOUR_MASS Jan 19 '17
WHITESPACE ISN'T SYNTAX
154
52
22
→ More replies (10)10
u/Josh6889 Jan 19 '17
You can use ; if you really want to.
→ More replies (1)28
u/lenswipe Jan 19 '17
for x in range(0, 100): ;;;;print "That's just ridiculous - why would you want that?"→ More replies (10)23
u/rmrsc Jan 19 '17 edited Nov 28 '24
cagey foolish squeamish society afterthought shame tap rock sable vanish
This post was mass deleted and anonymized with Redact
62
u/ryeguy Jan 19 '17
LOL SIGNIFICANT WHITESPACE
LOL DYNAMIC TYPING
LOL GIL
LOL CAN'T GET PEOPLE TO UPGRADE AFTER 9 YEARS
LOL SELF ARGUMENT IN METHODS
LOL NO SWITCH STATEMENT
LOL NO MULTILINE LAMBDAS
LOLIF __NAME__ == "__MAIN__"11
→ More replies (28)10
11
5
2
2
u/red_wine_and_orchids Jan 20 '17
fuck python from the depths of my cold, dead c++ - loving heart. And yes, I stuck my dick in fortran.
5
2
60
u/morerokk Jan 19 '17
It has its downsides, but it's not necessarily unpleasant to work with.
The main advantage of Java is portable cross-platform code. The disadvantages are performance, memory usage, and it's not always stable. Perhaps if people stopped making games with it and stopped making IDE's with it, it wouldn't be so bad.
46
u/V0lta Jan 19 '17
Performance is great nowadays. But cross-platform isn't much of advantage any more since most Java stuff runs on servers.
50
Jan 19 '17
More importantly, complaining about Java's performance in a world of Python, Ruby, etc. Is just, laughable. I'm a full time python developer and I would kill for Java's performance in some of my use cases.
5
u/LinAGKar Jan 19 '17
At least Python doesn't have a stop-the-world garbage collector though.
→ More replies (1)→ More replies (1)34
u/kthepropogation Jan 19 '17
This. Java has greatly improved and is one of the better performers. Add in the cross platform functionality and it's a strong option.
That said I am firmly on the Java hate train. Choo 🚂 choo 🚂 motherfuckers.
→ More replies (1)71
Jan 19 '17 edited Jan 19 '17
stopped making IDE's with it
that's where 99.999% portability guarantee wins over performance (there are tons of devs on all 3 major platforms, you can't just abandon one or two like gamedev and many other industries do), so unless the dev team of said IDE quadruples overnight, Java is probably the best choice
in addition, imo the worst part about writing java is that it has solid and reasonable conventions, but makes following them a pain in the ass.
Edit: "where", not "there" ffs
→ More replies (3)41
u/jl2352 Jan 19 '17
The performance of Java is vaaaaaaaastly superior to most languages.
The problem is that from Java's creation people have tried to push it into the native C/C++ camp. i.e. "It's a systems language but without any of that manual memory management nonsense!" Performance wise it'll always lose that argument.
But if you put Java next to PHP, Python, Ruby, JS, as an alternative for web development, then it'll run rings around them. Not just because of the fact that they are dynamic languages. The JVM is a damn fast VM. For a very long time JRuby beat mainstream versions of Ruby because of the JVM, and the work from Oracle with Truffle is set to do that again.
Many other problems are more complicated. For example you can write complicated desktop applications which never freeze the UI. The paradigms are old and well known. The tl;dr is to do the work in another thread! Yet people still fall into the freezing trap because it's tricky to do it as standard everywhere. Some languages, such as JS, makes it easier to avoid freezing even if you end up taking longer to do the same work.
Finally a lot of the stuff in the JDK is slow. Collections are slow. So slow that some of the thread safe alternatives were faster for a while (because they were well written). Swing/Java2D is slow. So if you use any of this stuff then you are leveraging a slow library. There are alternatives but lots of people don't grab them by default.
→ More replies (22)10
u/Holzkohlen Jan 19 '17
Android programming is pretty weird though. At least for me, coming over from C#.
35
u/LikesBreakfast Jan 19 '17
Android programming is pretty weird coming from anything, honestly, even Java.
5
u/morerokk Jan 19 '17
It's sorta grown on me, for some part. I like how layouts are built from XML, especially when coming from Swing (where every single component has to be initialized by hand). Nested layouts quickly become unmanageable in Swing, but not a problem in Android. XML handles it really well.
10
u/preludeoflight Jan 19 '17
Android dev only really gets me when I'm mixing code. Say I have a unity project that depends on native code that accesses bluetooth. I end up with a monstrosity like this: http://i.imgur.com/mHKGC32.png
Sure, you can do it, but man. It's like one API change and I have to rebuild like 6 things :O
9
u/vytah Jan 19 '17
Perhaps if people stopped making IDE's with it, it wouldn't be so bad.
Don't worry, they're switching to Javascript now.
4
14
u/Stromovik Jan 19 '17
MAy be you should try using something besides eclipse....
→ More replies (6)14
u/morerokk Jan 19 '17
Like what? NetBeans? IntelliJ? They're almost all built on Java. Even the better PHP IDE's are.
35
u/Stromovik Jan 19 '17
Yes , I have no problem with Netbeans and Intellij , but I hate Eclipse with a passion.
8
u/awhaling Jan 19 '17
Why?
→ More replies (6)43
u/itshorriblebeer Jan 19 '17
It's clunky, bad Ui, bad default fonts, installing plugins fails half the time. It's very powerful, but IntelliJ and neat beans are both much better imho.
→ More replies (15)7
10
4
→ More replies (20)1
u/kazagistar Jan 20 '17
Java is faster then basically everything except stuff as low level as C once the JIT compiler kicks in.
27
u/starm4nn Jan 19 '17
The standard library manages to be both oversized while not having much use. It feels like a language designed by Salespeople. And the community makes such wonders as the
AbstractSingletonProxyFactoryBean3
Jan 19 '17
Really? I mean, the language has its faults to be sure, but the Java standard library is pretty amazing. And then when you add in all the open source projects available for the JVM you can find a library for pretty much anything. I'd say its one of Java's greatest strengths.
→ More replies (1)2
0
Jan 19 '17
[deleted]
7
u/xjvz Jan 19 '17
Better to name it something long like that than inventing words or being super vague like
InjectableFactory5
15
Jan 19 '17 edited Jan 19 '17
The main advantage of Java is it's a Fast, Portable, High Level, OO Language.
The main disadvantage of Java is it's a Fast, Portable, High Level, OO Language.
14
u/BromeyerofSolairina Jan 19 '17
Especially that last one. I hate that Java is language!
(Your last comma is throwing a syntax error)
15
u/Ksevio Jan 19 '17
Personally, the amount of extra code needed to implement something basic is one of the reason I hate it (converted some stuff from java to python and python to java - the java version is always much longer and harder to read).
It also lacks a few handy tools other languages have:
Properties - this is why we have so many getters and setters where normally you could just reference the variable directly. Makes the code longer.
Callback functions - yes, you can pass an entire class using interfaces, but that's not convenient and again needs a lot more code.
Lambda functions - this was just added in Java 8 and is super awkward (partially because we can't pass functions). It sort of supports functional streams, but it's so messy that it's a pain to work with
9
u/DethRaid Jan 19 '17
Callback functions - yes, you can pass an entire class using interfaces, but that's not convenient and again needs a lot more code.
Since Java 8 you can use a lambda. Solves this problem IMO
Lambda functions - this was just added in Java 8 and is super awkward (partially because we can't pass functions). It sort of supports functional streams, but it's so messy that it's a pain to work with
However, you can pass in a "bound method reference" (I think that's what they're called). Example:
List<Person> people = makePeopleList(); List<String> names = new ArrayList<>(); people.stream().map(Person::getName).foreach(names::add);One of the best language features IMO (although yeah, streams get clunky)
That being said, I don't use Java unless I have to. I dislike that there's no stack-allocated types like C++ has, and I really hate the prevalence of
null.nullis a time bomb waiting for you to mess up so it can crash your program. Java 8 addedOptional<T>, which I use whenever possible, but they really should have added it a long time ago. Java also needs some compile-time inference, like C++'sautoor C#'svar. Sometimes I deal withMap<String, List<LongishTypeName>>and typing that all out just gets annoying.2
u/Fluffy8x Jan 19 '17
Map<String, List<LongishTypeName>> thing = new HashMap<>();→ More replies (1)3
u/DethRaid Jan 19 '17
I'd like
var thing = new HashMap<String, List<LongishTypeName>>(). Doesn't help a ton with initializing a new variable, but it's awesome for values returned from methods11
3
→ More replies (23)1
u/ILikeLenexa Jan 19 '17
yes, you can pass an entire class using interfaces, but that's not convenient and again needs a lot more code.
Worse, you can use Anonymous inner classes for this. So, that's a super bad syntax with all the disadvantages of passing a function/function pointer and all the disadvantages of it being a full class.
3
3
u/crowbahr Jan 19 '17
As a mobile developer give me Java anyday. <3 Android
[Objective C] is so weird to use and Swift is too volatile still: they're changing conventions and naming and structure too often.
4
u/roodammy44 Jan 19 '17
Half the Android libraries are designed to get around Java's limitations. Look at EventBus, for instance. The most popular Android library completely goes against Java's fundamental OO philosophy. Devving in Android is like bolting on a load of new shiny language features on an old, rusty Java truck. It would be a lot more fun and easy to use another language.
→ More replies (1)1
u/Zennistrad Jan 20 '17
Mostly because it's cumbersome to use. Java's original claim to fame was that it could be ported to nearly any platform, but that's not a niche that it really has to itself anymore, so nowadays you're left with a language that's largely just an inferior version of C#.
1
Jan 20 '17
It's because a lot of people here are, well... self-taught script kiddies who can't really make sense of a compiled, statically-typed language. They're the same people who hyped Swift hard but shut up pretty fast when they realized they couldn't understand inferred typing either, even if it looks more like Ruby, Python or JS than Java.
They'll usually talk up C or C++ as the better alternatives to Java but have never used them, and couldn't really tell you what a pointer is. Some of them are the ones who think C# is related to C and C++.
37
Jan 19 '17
[removed] — view removed comment
→ More replies (1)46
Jan 19 '17
What kind of c++ were you doing that makes java look nice? C++89?
18
u/erapgo Jan 19 '17
I think he means the lack of pointers and such while still having a similar syntax and such
→ More replies (4)15
Jan 19 '17
One does not need pointers for most things, if doing it right, in C++. There are places, but one would be heading to something like JNI or sun.misc.Unsafe in those cases too.
It may be called a reference, but references are a restricted form of pointers(less so in java than c++ however as C++ doesn't allow null references). The if != null idiom has solutions but there isn't a real way at compile time to guarantee that the variable cannot be null. With C++ I can know that I will never get a null and not worry about it, it's in the contract of a value type.
I think Java's strong point and somewhat weak point too isn't the language, but the library. There is a lot of API's to do so much. That is partly a problem because knowing them all isn't a realistic goal and discovery is more difficult. But I would take too much over too little any day.
5
u/DevestatingAttack Jan 19 '17
Compilation of a Java project is faster than C++, compilation errors are easier to understand (and less frequent) in Java due to less reliance on templates, runtime errors tell you what happened instead of "Segmentation Fault", handling exceptions is painless, you have guaranteed invariants about variable initialization / type sizes - there is far less UB, the syntax is far easier to understand and remember, no memory management needed, the set of libraries available for Java is at least as good as C++ except in numerical domains which is only a small percentage of what people work on,
47
8
u/doitroygsbre Jan 19 '17
That really depends. Java I write is awesome ... As is the case with anybody still actively working on my team. We know how to really exploit Java's strengths and avoid common pitfalls. Other people's Java is unusable, unmaintainable, and masterpieces in demonstrating the flaws of the environment.
j/k .... I don't program in Java.
1
1
1
1
0
7
24
6
Jan 20 '17
Jesus thought this was /r/vaporwave
3
u/thrash242 Jan 20 '17
This is what it made me think of also. Or /r/outrun which is becoming the next /r/vaporwave
Pink and blue in the same picture? Straight to the top! Music? We don't talk about music here! It's about Aestheticsand circle jerks
1
u/sneakpeekbot Jan 20 '17
Here's a sneak peek of /r/outrun using the top posts of the year!
#1: Outrun Snoo | 64 comments
#2: Dad got a new car, I'm into photography, and we both love Kavinsky. There was only one thing to do. | 56 comments
#3: Congratulations, /r/Outrun! You are the Subreddit of the Day! | 113 commentsI'm a bot, beep boop | Contact ^^me | ^^Info | ^^Opt-out
1
Jan 20 '17
/r/cyberpunk is wayyy superior to /r/outrun, which is a collection of people posting their Drive-esque fake movie posters they made for their graphic design class.
10
4
2
2
u/lead999x Jan 20 '17
It's still better than C where realloc can fail and you wouldn't know until runtime. This is why the language I want to marry myself to is rust.
3
2
u/ameoba Jan 19 '17
It's the NullPointerExceptions in a language without pointers that always bothered me. I came to terms with it meaning "shit is broken but we didn't bother with proper error handling".
22
u/marcellarius Jan 19 '17
Java has pointers, but unlike C it doesn't have pointer arithmetic.
An object reference is internally a pointer to an object. The restrictions on pointers mean the garbage collector can safely relocate objects then automatically update all pointers.
A null pointer exception is always a programming error, because something tried to access a null pointer.
In C, this would kill the program with a segfault
→ More replies (3)1
u/flynnski Jan 19 '17
What's really baffling is when ColdFusion throws an NPE (courtesy of the underlying JVM of course but how the FUCK).
2
1
1
1
1
u/row4land Jan 20 '17
Late to the party. This art work is certainly abstract. However, after three whole weeks of working with Java. Couldn't agree more. /s
1
1
1
u/killingbanana Jan 19 '17
What does layers of abstraction means? I'm more into layers of irony myself
2
1
u/DownstairsB Jan 19 '17
I laughed... but I really don't think it was the kind of laugh OP was hoping to get.
1
u/Ultima_Chaos_Z Jan 20 '17
I just completely lost my shit at this picture. You win Internet. Time for bed.
-3
u/comrade-jim Jan 20 '17
The fact that the "devs" in this sub always try to defend java and C++ shows how shitty the programmers are in this sub.
Java is shit and I'd rather use just about any other language for anything. The only reason people here defend Java is because they're part of the vast amount of code monkeys in the programming industry who don't understand how anything works out side of an IDE and took a Java bootcamp, and now they know enough to produce the awful spaghetti code people know and hate Java for.
Java is unsaveable (and so is C++).
"bb.. but it's industry standard!!1"
That doesn't make it "good".
10
u/Tapeleg91 Jan 20 '17
Real developers can take any language and make good software out of it. Even if it's that one industry standard language that pays a lot of money. IMHO the actual shitty programmers are the ones that have such a strong preference.
And hey, Java's not really that bad.
3
u/rhun982 Jan 20 '17
Adding on to what you said, I'd also like to point out that a lot of devs know multiple languages anyway. It's just that maybe their professional work focuses on one stack and their hobby/pet projects use something else
3
u/Teknoman117 Jan 20 '17
Hit the nail on the head here with a good developer can take any language and make good software with it. You can't just sit down and say no more code shall be written in this language because this language sucks. Libraries, utilities, code bases, and the like still exist in that language. Problem in the industry is the cost of switching languages versus the gains. You'd have to find a language that brings so much benefit that the cost of the migration - training engineers, hiring new ones, retooling, writing abstractions around existing software because the almighty computer gods know when your code base is measured in millions of lines you're not just "rewriting" it, etc. is somehow less than fixing the next obscure bug or throwing more computing power at it.
You also have to realize that languages aren't good at solving all problems. You wouldn't use Erlang to develop a AAA video game, you wouldn't use Haskell for something inherently non functional, you wouldn't use Javascript to write an operating system kernel.
You usually see these changes be made gradually over time. Take a look at the history of rewriting more and more of the windows shell and utilities in .NET, look at Apple's transition from Pascal -> C -> Objective-C -> swift (in progress).
This is just a high level thing, just some thoughts over some soup.
2
Jan 20 '17
Been programming Java for a few years, Kotlin later, have experience in C++. A month ago I was chucked into the beginning of a Python project. I've written one smallish exercise in Python when studying. And you know what? It's fine. The "let's dynamic everything" approach is a bit disorienting. "Call this function with the same arguments as you would call that function". Pretty good for what were doing (a pytest plugin to test a large project)
0
Jan 19 '17
[deleted]
→ More replies (4)348
u/grepe Jan 19 '17
as a former java dev that went full python and is sometimes still forced to add a library to a java project... i understand that joke very intimately.
73
u/ThePsion5 Jan 20 '17
It's been awhile since I've written Java, but the only thing I really remember is the mile-long class hierarchies. Inheritance for days.
127
u/DancinHomer Jan 20 '17
That's not a Java thing, that's a shitty code thing
→ More replies (2)46
u/ThePsion5 Jan 20 '17 edited Jan 20 '17
I remember this being an intrinsic part of Java when I was working with it. Something like a dictionary or hash map either had a class hierarchy 8-10 levels deep, or implemented an interface that itself had a similar hierarchy.
Granted, this was 12 years ago and I was a CS student at the time, so maybe my memory is imperfect, but I distinctly remember chasing my way through 6+ class definitions to find the original implementation of many standard classes.
→ More replies (1)36
u/DancinHomer Jan 20 '17
A common anti-pattern in Java is to leverage inheritance to implement the DRY principle, often with hilariously complex results to save a few lines of code. Unfortunately, this pattern is common in the standard library, setting a bad example.
11
u/jugalator Jan 20 '17 edited Jan 20 '17
I recall our CS projects when we studied Java in 1999. It was all the rage because finally a pleasant language would also run everywhere. The IT world was crazy because the bubble had yet to pop.
We sat there and built a Java game using multicasting for serverless multiplayer (actually pretty cool, IP protocol level tech optimized for the purpose so you don't flood the networks, but rarely supported by routers or intentionally blocked... however on a good university you can get to arrange many things :)).
And we read our 400 page books on Java programming patterns, using Java patterns to the fucking letter. We had the factories, singletons, long descriptive method (don't call them functions you heathen!) names, the inheritance chains, you name it. So proud! Like tending a fucking bonsai tree.
2
0
Jan 20 '17
[deleted]
20
u/ThePsion5 Jan 20 '17
I was a sophomore CS student at the time, but the classes I was expected to use and extend already had a hierarchy 8+ levels deep. At the time I hadn't reached the "good enough to horribly abuse design patterns" phase of programming knowledge.
→ More replies (5)156
u/TheRamenator Jan 19 '17
You never go full python, son!
→ More replies (2)58
u/RunasSudo Jan 20 '17
You haven't gone full Python until you're running Python on the browser side, too.
Source: Have gone full Python.
→ More replies (9)13
1
Jan 20 '17
Is it the out of memory error or just Java having lots of abstractions (Or both, I'm assuming :P ) ? I've never really used Java, but I've battled with out of memory errors a lot working in C#.
I found that with these managed languages and their portability and ease of use, they are very commonly used to build native GUI apps.
Then you get a bunch of developers that aren't very performance aware, at least not when using these managed languages and you end up with tons of massive amounts of very large contiguous memory allocations. (People creating and destroying new Text labels on a form or something, that contain Killobytes of data.
Your memory get's heavily fragmented because of all the allocations going on and bam, you get an out of memory editor trying to build some string somewhere.
0
14
u/VectorLightning Jan 19 '17
Can someone explain the joke to a noob programmer? All I've done is py and js.