One of the most important lessons I learned early in my career as a SWE was that exceptions are good. The way they were taught in college, I felt like my job was to make sure nothing ever threw an exception and halted so I ended up with try/catches and log messages everywhere. No: if something goes wrong, you want to throw a good exception and let it break
When do you decide to not let it break? Also do you think that the software education you got in college was poorly taught? And did the professors usually have no industry experience?
@@skyhappyyou don't let the code break when there's scenarios in which you know it's gonna break so you want to control what happens after the errors come knocking. That's why it's called error handling, blindly catching any and all errors is just a debug nightmare
If you're going into development you'll eventually deal with some application that has a server, and many clients. In this scenario you'll have to make everybody talk to eachother, and it's not about if, it's about when a connection error will happen. At that point based on the reason of the error happening you might want to have the code try again, notify the user and ask them to check their connection, or kindly tell them that your app is facing some challenge and they should come back at another time
@@Templarfreak What kind of niceties do you have in mind? Most of the ones I can think of aren't necessarily tied to interpreted languages, but I'm very possibly forgetting some.
@@arobie92 nothing is tied explicitly to any particular interpreted language, no, but that's because any language can be runtime interpreted if you are ballsy and brave enough. at which point, any language can have the benefits of doing so. you get advantages like VERY fast feedback, possibly even basically instant if you can reload the code without needing to reload an entire program.
@@TemplarfreakAh so the primary benefit you're getting at is a managed runtime? I'll definitely agree that hot reloading of modules, while technically doable in compiled code, is significantly easier in managed languages.
Tbf, I could say the same about declaring the var typeOf on init. Or having to allocate memory. You and I live on strange worlds, but the other is far stranger.
@@12Fakeaccount you don't need to allocate memory always its when you want more control over it that you do C/C++ really allow you to access/fu*k up, lower levels of the system you can divide by 0 and it continues the program for ever (Alhtough compilers and windows can now catch it) both have their uses JS for web C for Win native applications etc
My personal go-to: use "const" for everything unless you need to mutate/set the value - then use let; even then consider using a new const if you can. Don't touch var like it's got an infection, I can't remember the last time I had to use it.
Technically that actually does delay your code a bit. I'm not sure if it's a microtask or having it to somewhere else in the queue. But there is a whole set of things that occur when you set timeout to zero and promise and immediately resolved it. Those like an entire algorithm for how to handle those things
I once fixed buggy code at a new job. Previous Dev tried to fix issues by using multiple timeouts. Page ended up loading 3 seconds faster. I got a 13k$ bonus that year. :) So I guess I have to thank guys like you.
@@Lumither-404 There is only one thread in a browser. Using setTimeout will put its callback function in the event loop stack to be called later. Sometimes this delay is sufficient for code this callback function depends on to be evaluated. Search for "Race condition in JavaScript".
The TDZ is temporal, as opposed to scope-based. i.e. You can use your variable before it's defined in code order, as long as by the _time_ hou need it, it's been defined. function logX() { console.log(x) // ☝️ refers to the x below thanks to hoisting } let x = 15 logX() // prints 15 just fine
one javascript snippet a day keeps the motivation to do webdev away 😭 wth is that shit how can a closure capture a variable before it is defined (i know you explained why but who tf though it’s a good idea lmao)
@@adam7802 You're misunderstanding. This applies _specifically_ to scoped variables (TDZ only applies for let and const variables). And it's _more_ relevant if you use arrow functions. e.g. console.log(plus(5, 3)) // prints 8 function plus(a, b) { return a + b } Compare to: console.log(plus(5, 3)) // TDZ error const f = () => console.log(plus(5, 3)) const plus = (a, b) => a + b f() // works fine
I started learning JS a few months ago and initially would only use var. I thought it was very convenient to make everything of global scope. But I stopped using it completely in a month or two because I realized its actually more convenient to have variables only take local scope. Been using const almost exclusively since then. Btw, I like JS. I liked it from the start. Yes, its very messy and you get the impression that it got more features without being made 'neater', but its really versatile and powerful. And yes, my code does suck. I make things too difficult. Whatever practice/learning I'm supposed to do, I think of some way I can make it ten times more complex, just to do some extra stuff.
Good one, I knew the var would hoist but I didn't know the value assignment would be executed after the log. I think even with a 100 years of JS experience one can be surprised from time to time.
Not really "after the declaration" but "after the declaration has run" If you have a function above the declaration but it only gets called after the declaration, it works fine
Repeat with me: Javascrip was created to interact with the DOM of html web pages in that context this makes sense. We should not use forks to drink soup even if we managed to make with one of those spoons that have fork like heads
@@lgasc while both of your points are very true, there are some key things to consider. saying it is "common sense" is pointless and meaningless. "common sense" is different for every person and thus doesnt really exist. scoping is done all over the place in all kinds of different languages and sometimes it can be hard to keep track of how all your scoping is set up and is working within the rules of whatever language you are using. and that's what this is, it's a scoping issue. but this also is just a bad idea to ever have in a coding language, period. it literally only creates unintuitive and completely hidden behavior that you basically have no way of figuring out without pure trial and error or having someone else explain it to you if you have no idea what is going on. it should never be a thing because all it is is a pointless barrier to entry as it is a small but annoying piece of information to know about javascript that is also largely useless information to have other than to just avoid it, as hoisting in general is an extremely situational thing to take advantage of
I only use var. That's because I'm awesome at writing software and don't use variables before I've declared and assigned them a value. Your code might suck though.
Ngl the TH-cam shorts interface is shit. I didn’t realize the difference cuz “var” was partially covered, and there’s no way to hide the buttons over the video
I respect and greatly appreciate your work so much. I'd love to have a countless number of these as I start my journey into JavaScript. Either way, THANK YOU!
I do angular and typescript. And did a JS interview and failed it… cause a lot of the questions, are situations i wouldn’t run into when i use typescript.
Wait, what??? Why did I never learn that it moves the declaration? It hasn’t really affected anything for me, but that’s more happenstance than because I am a good dev.
a general rule, scopewise, const > let > var > global. but var and global do have their use cases. the example is so simple that const is the "right answer" and both samples "suck" 😜
A situation where sucky code is made possible by a sucky language/environment. Imagine if learning to drive, and driving itself, was injected with random problems such as your engine blowing up if you ever make the mistake of shifting the radio station too fast. And god forbid you ever pump the brakes twice.
I'm fully convinced that people who like JS are all people who started their programming journey with JS and refuse to try literally any other language in existence
@@ra2enjoyer708Go, Python, C, Zig, sh Even shell scripting, which is known for being hard to debug makes way more sense than the stupid rules of JavaScript
Wait but JS is a top to button language so how it is possible that it's knows there is vat there and put it on top it's jot suppose to give error too ?
console.log(x); Uncaught ReferenceError: x is not defined console.log(window.x); undefined When you access global variable through a property access expression it doesn't throw error
There's a very annoying class of JavaScript developers who internalized the lack of errors and will insist that the fewer incorrect code samples produce errors, and the later those errors surface, the better.
You forget that Javascript was a hack to enable dynamic functionality in a web browser. Functionality that probably should never have existed. Oh, BTW, I use var.
Pausing to see if my knowledge is still expert level: the var hoists the declaration, meaning the variable should be null when logged. Edit: crap! Undefined. It has been a while since I have used JS much. Well, thats why I never use var.
IMO, JS had a deserved reputation for being an anus' deepest part until ES6. Let and const and all the scoping and cleanup options that it brought made it viable. Typescript later made it reliable. Modern JS doesn't deserve to be called crap for the most part.
Thats also the reason, why "let" was introduced. ja ist full of Bad design decisions, but you cannot change them, without breaking existing code And yeah, many bad developers rely and this bad decisions... So js must constantly introduce new constructs
Something that had me almost strangle myself for contributing to a JS project, were default exports. Who the fuck wants to import a function or class and assign it another name so you won't ever find the right definition when searching by text. FFS
You had me at "does your code suck".
Yes it does.
if you don't know than say it so i can skip you
This is the sign of true maturity in software engineering
I gave it a 50/50 till he followed up with JavaScript. Then 100% yes.
But if you know it sucks then you are better than half of the coders
Hired.
I mostly watch JS videos like this to continue validating why I don’t do web development.
Then what do you do ?
@@spunzel851 internal desktop and CLI tools development, mostly.
Same 😂
But web dev is fun. Though I can't seem to get hired
@@hikari1690where are you located?
One of the most important lessons I learned early in my career as a SWE was that exceptions are good. The way they were taught in college, I felt like my job was to make sure nothing ever threw an exception and halted so I ended up with try/catches and log messages everywhere. No: if something goes wrong, you want to throw a good exception and let it break
When do you decide to not let it break?
Also do you think that the software education you got in college was poorly taught?
And did the professors usually have no industry experience?
@@skyhappyyou don't let the code break when there's scenarios in which you know it's gonna break so you want to control what happens after the errors come knocking. That's why it's called error handling, blindly catching any and all errors is just a debug nightmare
If you're going into development you'll eventually deal with some application that has a server, and many clients.
In this scenario you'll have to make everybody talk to eachother, and it's not about if, it's about when a connection error will happen.
At that point based on the reason of the error happening you might want to have the code try again, notify the user and ask them to check their connection, or kindly tell them that your app is facing some challenge and they should come back at another time
I've avoided using var without knowing what it does, but this really helped me understand, thanks!
This is not the only reason why it's awful. It also has some real awful scoping issues.
@@CottidaeSEA I think the scoping issue is what the video was talking about
@@michawhite7613 It was only about one of the scoping issues.
Use const until you absolutely can't.
@@michawhite7613 Unsure if I just can't see my reply, but basically, the video doesn't go into all of the scoping issues.
Gotta love getting a runtime error for something which can be statically checked.
That's just interpreted languages though?
@@arnerademacker yeah, it's an unfortunate but necessary evil in order to have all the other niceties that runtime interpreted languages have.
@@Templarfreak What kind of niceties do you have in mind? Most of the ones I can think of aren't necessarily tied to interpreted languages, but I'm very possibly forgetting some.
@@arobie92 nothing is tied explicitly to any particular interpreted language, no, but that's because any language can be runtime interpreted if you are ballsy and brave enough. at which point, any language can have the benefits of doing so. you get advantages like VERY fast feedback, possibly even basically instant if you can reload the code without needing to reload an entire program.
@@TemplarfreakAh so the primary benefit you're getting at is a managed runtime? I'll definitely agree that hot reloading of modules, while technically doable in compiled code, is significantly easier in managed languages.
As a C/C++ guy that's a big "Holy shit people live like this?!" thing.
Tbf, I could say the same about declaring the var typeOf on init. Or having to allocate memory. You and I live on strange worlds, but the other is far stranger.
No, we just don’t use var lol. I’d much rather this than C/C++ 🤢
@@12Fakeaccount you don't need to allocate memory always
its when you want more control over it that you do
C/C++ really allow you to access/fu*k up, lower levels of the system
you can divide by 0 and it continues the program for ever (Alhtough compilers and windows can now catch it)
both have their uses
JS for web
C for Win native applications etc
@@RealNaisuCinema C/C++ makes you a powerful wizard though
Fr
My personal go-to: use "const" for everything unless you need to mutate/set the value - then use let; even then consider using a new const if you can. Don't touch var like it's got an infection, I can't remember the last time I had to use it.
I wish more C/C++ writers were const correct whenever possible.
Unless you need to mutate?
You can mutate arrays and objects even if they are const,
const arr = [10,20]
arr.push(30) works
@@adityaanuragi6916just becaude you can, doesn't mean you should. Const keyword tells something to the code reader.
This. Like kids game. You ever write var you die. Never ever do it.
Rust programmers be like
Ah, the good old days of tricky js interview questions.
It’s still used for entry level interview. I remember having a hard time explaining “why var sucks” just because I proactively chose not to use it lol
Yes very tricky. Using variable before defining it. Would just spit on the face, laugh and leave if that wouldn't be the sought answer.
that is not tricky lol. most js interview questions are harder than this
Thanks for letting me know before I end up messing up in the future 😅
just never use var, i've never found a reason to use it.
@@squidy2902yup there is no legitimate reason to use it, if anyone at any point tells you that there is, they are wrong 😂
Var and future)))
don't worry you'll still mess up, all is well : D
i love to use const first and then adjust later with let, if needed (like in Rust, having immutability first and then adjust).
You can't override a const. Const means constant. As in cannot change. You have no idea what you're talking about.
@@Dylan_thebrand_slayer_Mulveiny i never said that i can override const :D i've just said that i would use const first, and adjust later with let.
Well try this:
For placeholder variables like arr, obj etc use let because along the way they'll be updated
const for like loops or callbacks fxns
Praise Cthulhu, and his favorite programming language, JavaScript.
ah that makes sense. this feature probably only works for a being such as Cthulhu who doesnt care about the constraints of spacetime at all.
"does your code suck"
I fixed a display issue the other day by adding a 0ms setTimeout.
Technically that actually does delay your code a bit. I'm not sure if it's a microtask or having it to somewhere else in the queue. But there is a whole set of things that occur when you set timeout to zero and promise and immediately resolved it. Those like an entire algorithm for how to handle those things
I once fixed buggy code at a new job. Previous Dev tried to fix issues by using multiple timeouts. Page ended up loading 3 seconds faster. I got a 13k$ bonus that year. :)
So I guess I have to thank guys like you.
"I have no idea WHY this works, But it does, So just don't touch it"
So basically running code in new thread ?
@@Lumither-404 There is only one thread in a browser. Using setTimeout will put its callback function in the event loop stack to be called later. Sometimes this delay is sufficient for code this callback function depends on to be evaluated. Search for "Race condition in JavaScript".
The TDZ is temporal, as opposed to scope-based. i.e. You can use your variable before it's defined in code order, as long as by the _time_ hou need it, it's been defined.
function logX() {
console.log(x)
// ☝️ refers to the x below thanks to hoisting
}
let x = 15
logX() // prints 15 just fine
one javascript snippet a day keeps the motivation to do webdev away 😭 wth is that shit how can a closure capture a variable before it is defined (i know you explained why but who tf though it’s a good idea lmao)
That's very interesting, thanks for sharing this
@@LosFarmosCTL Thankfully scoped variables and arrow functions exist so you can just pretend this doesn't.
@@adam7802 You're misunderstanding. This applies _specifically_ to scoped variables (TDZ only applies for let and const variables). And it's _more_ relevant if you use arrow functions. e.g.
console.log(plus(5, 3)) // prints 8
function plus(a, b) {
return a + b
}
Compare to:
console.log(plus(5, 3)) // TDZ error
const f = () => console.log(plus(5, 3))
const plus = (a, b) => a + b
f() // works fine
@@kebien6020 I meant more in general rather than this specific issue. Although I didn't know that would work... Javascript is such a mess.
No, my code does not suck. Javascript does.
I can't tell because I can barely see the screen when TH-cam puts buttons, labels, and other bs all around and blocks everything.
How small is ur phone?
@@redrush-hp9li size is not important
@@andreujuanc tell this to your GF
Someday the video will just be an animated background for a grid of buttons.
i have the same problem both on the phone and on the computer
I know nothing about javascript and just guessed that var does something funky based on my minimal Rust experience.
Not me realising this was the error I spent several hours on a couple of months ago (and gave up on).
Thanks Fireship, very cool.
currently this comment section is the only thing that is worse than var.
On second thought-
It’s not the code that sucks at this point it’s JavaScript itself
It's the necessity for backwards compatibility that makes it suck. Programmers just didn't know how to write clean code back in the early days :)
have a decent linter and you'll stick to a subset of js that doesn't suck
Always has been
What do you mean ? the code is non-sense but JavaScript handled it quite well throwing reasonable output.
It's bad, but I had a C++ class and it felt like 80% of the language is forbidden territory.
I started learning JS a few months ago and initially would only use var. I thought it was very convenient to make everything of global scope. But I stopped using it completely in a month or two because I realized its actually more convenient to have variables only take local scope.
Been using const almost exclusively since then.
Btw, I like JS. I liked it from the start. Yes, its very messy and you get the impression that it got more features without being made 'neater', but its really versatile and powerful. And yes, my code does suck. I make things too difficult. Whatever practice/learning I'm supposed to do, I think of some way I can make it ten times more complex, just to do some extra stuff.
Thats the way my friend. We all had this journey until we get to know stuff better ^^ In coding, skill comes with experience
The error is not 'a is not defined' it will be ' can not access a before initialisation '
Good one, I knew the var would hoist but I didn't know the value assignment would be executed after the log. I think even with a 100 years of JS experience one can be surprised from time to time.
Except for the part where javascript errors occur only at run time, so if that code is rarely executed, its gonna be a pain to fix
Not really "after the declaration" but "after the declaration has run"
If you have a function above the declaration but it only gets called after the declaration, it works fine
what are these comments man 🙏
Right? Lmfai
I like and doslile js at the same time. It's easy but it also lets a lot of no go stuff go through until it breaks at some point.
No one uses var anymore anyway there's nothing it provides over let or const to justify it's usage.
" that can easily debug" get me😅
When a language is less consistent and more confusing than literal undefined behaviour, you know you've messed up somewhere.
Does your code suck ❌️
Does your programming language suck ✅️
Brother this isnt "does your code suck"
Its "does Javascript suck ?"
And ill be proud to answer YES YES IT SUCKS
Seems like you know almost nothing about js, am i right?
Repeat with me: Javascrip was created to interact with the DOM of html web pages in that context this makes sense. We should not use forks to drink soup even if we managed to make with one of those spoons that have fork like heads
Lol. Thanks for articulating why I stopped using var. I got hoisted too much for my liking and tossed that out a while back.
you can still debug the undefined thing (at least in Firefox, I don't use chrome)
What's really bad is that some people thought it's a feature and used this intentionally to write their code.
This is cool. I know JS and understand hoisting. I just subconsciously never use 'var' and instead use 'let' or 'const' depending on what I need.
how about not using a variable before declaring and initializing it like a normal person? when did common sense leave JS?
Mistakes happen. Code may have moved. The partial hoisting is bonkers anyway.
@@lgasc while both of your points are very true, there are some key things to consider.
saying it is "common sense" is pointless and meaningless. "common sense" is different for every person and thus doesnt really exist. scoping is done all over the place in all kinds of different languages and sometimes it can be hard to keep track of how all your scoping is set up and is working within the rules of whatever language you are using. and that's what this is, it's a scoping issue.
but this also is just a bad idea to ever have in a coding language, period. it literally only creates unintuitive and completely hidden behavior that you basically have no way of figuring out without pure trial and error or having someone else explain it to you if you have no idea what is going on. it should never be a thing because all it is is a pointless barrier to entry as it is a small but annoying piece of information to know about javascript that is also largely useless information to have other than to just avoid it, as hoisting in general is an extremely situational thing to take advantage of
I always use let ever since it became popular, but now I see why it got popular. I probably don't even realize how many headaces I've dodged
Not many actually. You just avoid 1 concept
2005 called and he wanted his var back
"does your code suc-"
yes it does
This explains the time i fixed something by switching let to var 😂
I don't quite get how it's a nightmare to debug. You get what you see
i still remember i had a very very strange bug that fixed itself through using var rather than let
i cant remember what the bug was
but jesus christ
Aha!! I got it right! I’ve been studying JavaScript for like 7 hours total! I am so fucking smart!!!
I only use var. That's because I'm awesome at writing software and don't use variables before I've declared and assigned them a value. Your code might suck though.
Ngl the TH-cam shorts interface is shit. I didn’t realize the difference cuz “var” was partially covered, and there’s no way to hide the buttons over the video
i cant see the second code because of the shorts text lol and now im struggling to send this message because the message button dissapeared. I love yt
Imagine running this abomination of a programming language not only in the browser but also server-side. Oh…wait…
Ya know… when I hear JS being a trash fire of weird language mechanics, I used to think they were exaggerating.
I respect and greatly appreciate your work so much. I'd love to have a countless number of these as I start my journey into JavaScript. Either way, THANK YOU!
Bruh swift is like: THE ERROR IS *RIGHT THERE* do you SEE IT???!!!!!???!?!?!??!!!???
Good to know this.
I knew it was B
Simply because var is automatically stupid
JavaScript's lava flow quirks are what make it fun. Especially compared to C++, where template metaprogramming has made everything just...just awful.
Is your code JavaScript? Then it sucks.
How in the living fuck do I make my websites function then?
@@RealUniCat Static HTML content. As mother nature intended. That's how.
@@privacyvalued4134 ??? What if I wanna make a game in JavaScript?
Totally quitting var keyword and using typescript is one of the best decision in my life
Nah I'm good. I have never in my life expected a variable to hold a value before declaring it
One shouldn't even use "var" anymore. The keyword "let" is more cool.
Yet, someone's job is to de-bug these lines of code that they copy and paste in. Starting wage with 10,000 years experience = 100k
JS will disappear soon.. WASM is future🎉
I do angular and typescript. And did a JS interview and failed it… cause a lot of the questions, are situations i wouldn’t run into when i use typescript.
You may want to look into it; Typescript is not always available.
Wait, what??? Why did I never learn that it moves the declaration? It hasn’t really affected anything for me, but that’s more happenstance than because I am a good dev.
but what kind of dev put his declarations at the end of his code? Var is neat, all you need is good practice...
What is confusing about a not being 1 before "a = 1"!
You live like this?
(Python and C++)
Programming is something, i will never feel secure to say im good at it. Like literally never.
I didn't know the difference between _let_ and _var_
Good to know. Another reason why JS sucks
Difference is simple. You should use let and should not use var
I'm new... dont make me feel bad before i learn more.
JavaScript's errors are neither nice nor clear.
Hoisting is important in jetpack compose in Native Android
It's crazy people I've worked with still use var 💀
Funny when we talk about js code sucking, we mostly talk about runtime errors and not compile time.
Because js isn't compiled language
@@SirusStarTV Yeah frick that actually makes sense. After so much of using TS, I forgot that little tiny detail...
Simply using var is already bad.
a general rule, scopewise, const > let > var > global.
but var and global do have their use cases.
the example is so simple that const is the "right answer" and both samples "suck" 😜
I like this
JS is such a horrible language.
you can rename to Let's Play: Do you use ESLINT
and why exactly would you WANT to initialize a variable somewhere in the middle of any given scope?
If you use a variable only for a short part, it is simpler to put the variable before it rather than all the way to the top.
Bruh
the bottom part, cant really read anything because of this great gui by youtube covering about 60% of the acreen
if anyone still uses var these days, that's a skill issue
Using javascript IS the issue
A situation where sucky code is made possible by a sucky language/environment.
Imagine if learning to drive, and driving itself, was injected with random problems such as your engine blowing up if you ever make the mistake of shifting the radio station too fast. And god forbid you ever pump the brakes twice.
What language do you write at?
I'm fully convinced that people who like JS are all people who started their programming journey with JS and refuse to try literally any other language in existence
@@ra2enjoyer708Go, Python, C, Zig, sh
Even shell scripting, which is known for being hard to debug makes way more sense than the stupid rules of JavaScript
Bro, I don't even know JavaScript but I chose the B because it had var and I thought it said variable.
hoisting is fine and useful and not confusing at all, it's just zoomers, everything is confusing to these people
The semicolon left the chat
Wait but JS is a top to button language so how it is possible that it's knows there is vat there and put it on top it's jot suppose to give error too ?
Every programming seems to come with these puzzling, unintuitive configurations.
Let's play, does your language suck? Is JS one of Biden's approved languages?
the error itself sucks : 'a is not defined' yet the language itself has an 'undefined' value which basically means the variable is not defined
console.log(x);
Uncaught ReferenceError: x is not defined
console.log(window.x);
undefined
When you access global variable through a property access expression it doesn't throw error
I answer wrong because I don't use JS (it's bad and I use python to make webs)
Just don't use var! We have let and const now! Just forget it exists!
Your code DOES suck.
ALWAYS
There's a very annoying class of JavaScript developers who internalized the lack of errors and will insist that the fewer incorrect code samples produce errors, and the later those errors surface, the better.
You forget that Javascript was a hack to enable dynamic functionality in a web browser. Functionality that probably should never have existed. Oh, BTW, I use var.
That's why it's always suggested to either use let and const
I knew which one was bad because of lint :) But I didn't know why!
And you also have to write "use strict".
I would like to see JS gone forever
But we are a little too far from that now
Pausing to see if my knowledge is still expert level: the var hoists the declaration, meaning the variable should be null when logged.
Edit: crap! Undefined. It has been a while since I have used JS much. Well, thats why I never use var.
IMO, JS had a deserved reputation for being an anus' deepest part until ES6.
Let and const and all the scoping and cleanup options that it brought made it viable.
Typescript later made it reliable.
Modern JS doesn't deserve to be called crap for the most part.
Thats also the reason, why "let" was introduced. ja ist full of Bad design decisions, but you cannot change them, without breaking existing code
And yeah, many bad developers rely and this bad decisions... So js must constantly introduce new constructs
Something that had me almost strangle myself for contributing to a JS project, were default exports. Who the fuck wants to import a function or class and assign it another name so you won't ever find the right definition when searching by text. FFS