Join devRant
Do all the things like
++ or -- rants, post your own rants, comment on others' rants and build your customized dev avatar
Sign Up
Pipeless API
From the creators of devRant, Pipeless lets you power real-time personalized recommendations and activity feeds using a simple API
Learn More
Search - "pointless arguments"
-
Okay, story time.
Back during 2016, I decided to do a little experiment to test the viability of multithreading in a JavaScript server stack, and I'm not talking about the Node.js way of queuing I/O on background threads, or about WebWorkers that box and convert your arguments to JSON and back during a simple call across two JS contexts.
I'm talking about JavaScript code running concurrently on all cores. I'm talking about replacing the god-awful single-threaded event loop of ECMAScript – the biggest bottleneck in software history – with an honest-to-god, lock-free thread-pool scheduler that executes JS code in parallel, on all cores.
I'm talking about concurrent access to shared mutable state – a big, rightfully-hated mess when done badly – in JavaScript.
This rant is about the many mistakes I made at the time, specifically the biggest – but not the first – of which: publishing some preliminary results very early on.
Every time I showed my work to a JavaScript developer, I'd get negative feedback. Like, unjustified hatred and immediate denial, or outright rejection of the entire concept. Some were even adamantly trying to discourage me from this project.
So I posted a sarcastic question to the Software Engineering Stack Exchange, which was originally worded differently to reflect my frustration, but was later edited by mods to be more serious.
You can see the responses for yourself here: https://goo.gl/poHKpK
Most of the serious answers were along the lines of "multithreading is hard". The top voted response started with this statement: "1) Multithreading is extremely hard, and unfortunately the way you've presented this idea so far implies you're severely underestimating how hard it is."
While I'll admit that my presentation was initially lacking, I later made an entire page to explain the synchronisation mechanism in place, and you can read more about it here, if you're interested:
http://nexusjs.com/architecture/
But what really shocked me was that I had never understood the mindset that all the naysayers adopted until I read that response.
Because the bottom-line of that entire response is an argument: an argument against change.
The average JavaScript developer doesn't want a multithreaded server platform for JavaScript because it means a change of the status quo.
And this is exactly why I started this project. I wanted a highly performant JavaScript platform for servers that's more suitable for real-time applications like transcoding, video streaming, and machine learning.
Nexus does not and will not hold your hand. It will not repeat Node's mistakes and give you nice ways to shoot yourself in the foot later, like `process.on('uncaughtException', ...)` for a catch-all global error handling solution.
No, an uncaught exception will be dealt with like any other self-respecting language: by not ignoring the problem and pretending it doesn't exist. If you write bad code, your program will crash, and you can't rectify a bug in your code by ignoring its presence entirely and using duct tape to scrape something together.
Back on the topic of multithreading, though. Multithreading is known to be hard, that's true. But how do you deal with a difficult solution? You simplify it and break it down, not just disregard it completely; because multithreading has its great advantages, too.
Like, how about we talk performance?
How about distributed algorithms that don't waste 40% of their computing power on agent communication and pointless overhead (like the serialisation/deserialisation of messages across the execution boundary for every single call)?
How about vertical scaling without forking the entire address space (and thus multiplying your application's memory consumption by the number of cores you wish to use)?
How about utilising logical CPUs to the fullest extent, and allowing them to execute JavaScript? Something that isn't even possible with the current model implemented by Node?
Some will say that the performance gains aren't worth the risk. That the possibility of race conditions and deadlocks aren't worth it.
That's the point of cooperative multithreading. It is a way to smartly work around these issues.
If you use promises, they will execute in parallel, to the best of the scheduler's abilities, and if you chain them then they will run consecutively as planned according to their dependency graph.
If your code doesn't access global variables or shared closure variables, or your promises only deal with their provided inputs without side-effects, then no contention will *ever* occur.
If you only read and never modify globals, no contention will ever occur.
Are you seeing the same trend I'm seeing?
Good JavaScript programming practices miraculously coincide with the best practices of thread-safety.
When someone says we shouldn't use multithreading because it's hard, do you know what I like to say to that?
"To multithread, you need a pair."18 -
I seriously wanna fucking knofe this guy who says JS is shit and Kotlin is superior well NEWS FLASH YOU FLYING PIECE OF WANK, every fucking language has its pros and cons
If you still think JS is supposed to be in browser well I say to you fucktard this isnt the 80s anymore and we ain't using Java applets and Flash for some limp dicked stuff JS has covered today. A language might have its dark sides but they are all fucking good. There is no superiour language there's only Mother fucking preference. I swear to god this is the worse limp dicked argument I've heard and I have to argue that JS has matured over the years11 -
!tech
recently i have been realising that i am utterly lonely. their isn't a group of people in life (apart from my parents) who aren't either paid to be with me (i.e office colleagues) or i am paying to be with them (i.e gym) and its very sad.
i don't have any siblings. the relatives are on sour terms, so no one visit. my parents are mostly loveless and the whole family is just focusing on sustaining than living or enjoying. i recently had some arguments with my friends and now they too are not on talking terms. .
I am a 25 year old, short , somewhat chubby guy in the most boring and safe field with no interesting interests except an average guy stuff ( cars, stocks, tech, career, sports... things that guys usually discuss).
I have been told on face that my vibe isn't interesting and i can honestly accept that . i myself wouldn't want to be with someone like me. if you are girl, then i will probably be talking to you for 30 seconds of joke-cum-fun-cum-serious-cum-caring stuff( i usually have 1-2 lines of witty stuff prepared) before going all silent and boring you the fuck out.
the next convo will be followed by an even dumber sentence but i will try to end it with a geeky joke or reference and a small laugh prompting you to also smile or fake laugh. and if you did that, then i will be desperate to keep you laughing, but my sentences will keep on getting more dumber and boring until you leave and categorise me as the most boring idiot/ "nice guy" you met. ( and meanwhile i am at the mental stage where i love you as the most precious thing of my world and imagining kids and life with you)
I can't care for anyone. I have seen too much parent fights, empty walls, money issues to understand how to care for anyone . my life is focused and sad.
shall i go on giving chocolates to everyyone in office to be popular? shall i ask a random gorl on the stret for her phone number? shall i start strolling in the park and try to talk to people? honestly, if i were a girl and someone does this to me, i would be shit scared and creeped out than falling for that guy.
then how the fuck i land myself into someone who wants to be with me? do i even want someone to be with me? or is loneliness the only thing i want?
i feel pretty okay for the most part of the day in this loneliness, except at some weird times like when am eating a platefu9 of chinese alone in some shop, or at night when i lock the door of a 9x9 large room and realise that i am the only one here.
i was once excited to grow up and do grown-up stuff like drive a car, take a solo tour, goto vaccination in every few days, be adventurous . but that has changed . i did all these things when i had people in my life. i somewhat felt motivated to do those, seeing that there were people who wanted to be with me during/after these things and care about me. now it just feels pointless.9 -
The IDE discussion started again today. I am not an advocate of Eclipse but I didn’t find any compelling reason to switch to IntelliJ either. Maybe...just maybe I should try but that would mean just trying to be cool and I don’t know if it actually makes sense. So here’s how it went:
Me: okay give me one big reason why you want me to switch out of Eclipse.
Guy: slams desk and screams: Because Eclipse is slow! IntelliJ is fast and the community edition rocks
Me: in what way
Guy: oh come on. In every single way. I would rather choose notepad than Eclipse.
**curls into a ball and dies**2 -
Important thing I learned is not to listen to devs who suggest to learn a framework because its pointless
If i ask should i learn react or angular, some will say angular some react, and both have valid arguments why
When i branch to react and ask if i should learn nextjs or nuxtjs the same thing will happen
No matter if the arguments are valid or not people will prefer a framework they have been biased towards
All frameworks have cons and pros there is no such thing as "the one" perfect framework
No matter how framework is good people will always find a reason to take a shit on it
So from now i wont ask IF i should learn framework X, I'll ask for the order in which to learn it
For example i Know i want to learn A for whatever reason, should i first learn framework B or C?
I dont need your subjective opinion to tell me how B or C sucks and i should do D instead of A4 -
I hate arguments for the following reasons:
1) I suck at them
2) they can get out of hand
3) their context may be pointless
4) they cause unnecessary pain
5) they end unresolved (sometimes) -
I'm starting to gain a dislike for OOP.
I think classes make it easy for me to think of the entities of a problem and translate them into code.
But when you to attempt to test classes, that's when shit hits the fan.
In my opinion, it is pointless to test classes. If you ever seen test code for a class, you'll notice that it's usually horrible and long.
The reason for this is that usually some methods depend on other methods to be called first.
This results in the usual monolithic test that calls every goddamn method on the class.
You might say "ok, break the test into smaller parts". Ok. But the result of that attempt is even worse, because you end up with several big tests cases and a lot of duplicate code, because of the dependency of some methods on others.
The real solution to this is to make the classes be just glue: they should delegate arguments onto functions that reside on its own file, and, maybe afterwards emit events if you are using events.
But they shouldn't have too much test code classes though. The test code for classes should be running a simple example flow, but never doing any assertions other than expecting no exceptions.
For the most part, you'd be relying on the unit testing that is done for each delegated function.
If you take any single function you'll see that it's extremely easy to write tests for it. In fact, you can have the test right next to the fuction, like <module>.xyz <module>.test.xyz
So I don't think classes shouldn't be used at all, they should just be glue.
As you do normal usage of this software this way, when a bug is discovered you'll notice that the fix and testing code for this bug is very usually applied to the delegated functions instead of being a problem of classes.
I think classes by themselves sound sane in paper, but in practice they turn into a huge fucking messes that become impossible to understand or test.
How can something like traditional classes not get chaotic when a single class can have x attributes and y methods. The complexity grows exponentially. And sometimes more attributes and methods are added.
Someone might say "well, it's just the nature of problems. Problems can have a lot of variables".
Yeah, but cramming all of that complexity into a single 200 lines class is insanity.12