Software engineers can be very opinionated about their tools, patterns, and philosophies. Let’s react to some of the most controversial opinions from elite developers on Stack Overflow. 🔥 Grab some swag https://swag.fireship.io/

🔗 Resources

Original StackOverflow question https://stackoverflow.com/questions/406760/whats-your-most-controversial-programming-opinion
Trillion Dollar Disaster https://betterprogramming.pub/object-oriented-programming-the-trillion-dollar-disaster-92a4b666c7c7

📚 Chapters

00:00 Controversial Opinions
00:45 Object-Oriented Programming
02:36 Love to Code
03:24 Lazy Programmers
04:14 Google
04:48 CS Degree
05:48 Bad Teachers
06:35 Unit Testing 
07:20 The Customer
08:19 Comments

🔥 Watch more with Fireship PRO

Upgrade to Fireship PRO at https://fireship.io/pro
Use code lORhwXd2 for 25% off your first payment. 

🎨 My Editor Settings

- Atom One Dark 
- vscode-icons
- Fira Code Font

 🤓 Topics Discussed in this Video

- Software Engineering Opinions
- Object-oriented vs functional programming 
- Java, JavaScript, Flutter, and Unity
- Coding Best Practices
- Learning how to Code
- Freelance Development
2024-02-04T05:47:13.735Z
nova-2
2-general-nova
2024-01-09.29447
30089e05-99d1-4376-b32e-c263170674af
0265576a-6571-4757-9b0b-fff35477d85d
f94b8195fc83173740c35a639a9194f8180afdae7b149c5982512ecc89ed6378
67875a7f-c9c4-48a0-aa55-5bdb8a91c34a
deprecated
Object oriented programming is absolutely the worst thing that's ever happened to the field of software engineering.
Set your feelings, you'll know it
to be true.
In today's video, we'll look at some of the most controversial programming opinions coming from highly Experienced developers on Stack Overflow, which is known for its kind, friendly, and not toxic at all community.
I'll give you my initial reaction based on my 10 years of experience primarily In web development, but in full disclosure, I only have about 5,000 rev on Stack Overflow, so my opinion doesn't really matter very much.
If you're new here, like and subscribe, then leave your most controversial opinion, and I'll choose the best one to win a free t shirt of your choice.
And I just released a whole bunch of new merch designs, so check those out to support the channel and keep This content coming.
Alright.
So let's get back to that initial opinion that basically says object oriented programming is horrible.
Developers have been hating OOP a lot in recent years, and even the legendary Edsger Dijkstra is quoted saying object oriented programs are offered as alternatives to correct ones.
The idea behind OOP has been around since the 19 sixties and allows developers to encapsulate data and logic inside of objects.
You start with a class, which is like a blueprint that can then create multiple object instances.
These classes can inherit behaviors from each other, forming a hierarchy of abstractions.
In addition, there are a bunch of design patterns to go along with it, like singleton, factory, dependency injection, and so on.
All these features and design patterns sound Sophisticated and sometimes they trick you into thinking you're making productivity gains when there's likely a much simpler way to get the job done.
A common complaint that object oriented languages require a lot more boilerplate than something that's more functional in nature, and applications end up having a bunch of mutable state that's difficult to test, refactor, and just reason about.
Personally, I do think these criticisms are valid, but a bit over Blown.
In JavaScript, I rarely implement my own classes and basically never use inheritance.
Instead, I create modules that export functions and plain objects.
That makes the code tree shakeable so that dead code can be eliminated when it's bundled together.
You also don't have to worry about things like constructors, getters, and setters, the this keyword, which in many Cases just add unnecessary complexity.
But that being said, I do come across cases where a class is a really nice way to encapsulate something and they do work really well in frameworks like Angular, Nest, did it put a lot of thought into how to work with classes in a predictable way.
And there's also other tools out there that I really like that are fundamentally object oriented Like Flutter or the Unity framework.
When done properly, object oriented programming can be very nice and intuitive, but it may not always be the best solution, So it's good to keep an open mind about procedural or functional approaches as well.
Programmers who don't code in their spare time for fun will never become as good as those that do.
The idea here is that if you're not passionate enough about coding to do it in your spare time, you're never going to reach your full potential.
Now, I actually disagree with this opinion even though I'm the type of person that Writes code in my free time.
I think the reality is that many people treat programming as a job, and there's absolutely nothing wrong with that.
There's some super talented programmers out there that can Get stuff done with a fraction of the effort that other programmers might need.
10x developers are real, and it's not because they're programming in their free time.
They're just built different than the rest of us.
Like Allen Iverson in Prime didn't even have to practice, and he was still better than pretty much everybody else.
We ain't talking about the game.
We're talking about practice, man.
Being a programmer is not just about writing code.
It's also about communication, being a good team player, vision, creativity, and a bunch of other soft skills, Which brings me to the next opinion, lazy programmers are the best programmers.
Or another way to translate it is work smarter, not harder.
I agree with this one a 100%, but I think a better word for lazy might be something like clever.
Working hard is good and all, but sometimes it can blind you to a better solution.
Like, have you ever been stuck debugging something for hours, then you take a 10 minute break and come back and solve it right away?
That's a phenomenon experienced By all developers, and has happened to me many times.
Instead of working hard, be lazy about things, take a break, and come back and look at it with a fresh set Devise.
In addition, when you suspect you're doing something inefficiently, it might be valuable to devote a few hours to learning a new skill.
Maybe you need to write a function that checks for an odd Number.
And currently, you have an if else statement to infinity.
You might actually save some time by taking a few minutes to learn how the modulus operator works.
But in some cases, learning might even be a waste of time.
The next opinion is that Googling it is okay.
One time my doctor told me that Googling stuff Online doesn't make me a doctor.
That didn't make a whole lot of sense to me because my most important skill as a developer is being able to Google things.
A better opinion I found on the same thread goes like Yes.
It's fine if you don't know, but you're fired if you can't even Google it.
I agree with this opinion because the daily work of most developers is about problem solving For the business, as opposed to more theoretical algorithm implementations that you face on an interview.
Google is not the solution to everything, but knowing how to use it Efficiently is definitely a skill that any experienced developer should have.
On a related note, another controversial opinion is that a degree in computer science does make you a more well routed programmer.
This is controversial because many influencers out there today say that you don't need a degree to be successful as a programmer.
You
don't need college to learn it learn stuff.
Okay?
Everything is available basically for free.
Uh, you can learn anything you want for free.
And many big companies have dropped their degree requirements for developers altogether.
Personally, I don't have a computer science degree.
Everything I've learned has been self taught or learned on the job, and I've met many other developers making big Salary is without a degree.
So you definitely don't need a degree to break into the industry, but that being said, if I could go back in time, I would probably pursue a computer science degree.
It can definitely fast track you by getting you internships at big companies, and I do think that foundation of knowledge would likely make you a better programmer.
But on the other hand, Is it really worth 4 years of your time and a $100,000 in student debt?
College definitely isn't a path for everybody, and one of my favorite things about The tech industry is that you can be successful without a degree, which is a good segue into the next opinion, there's an awful lot of bad teaching out there.
Whether you have a degree or not, you'll eventually find yourself on YouTube trying to learn from one of the many different teachers out there.
As a teacher myself and a supporter of my fellow YouTubers, I unfortunately agree with this statement.
In fact, plenty of people out there absolutely hate my teaching style.
You suck.
I get mean comments on almost every video saying the content Sucks and that it's too fast and so on.
What it really boils down to is that different people have different preferences when it comes to teaching style.
Ironically, the biggest turn off for me is when a teacher Sure has a highly opinionated take on something.
There are people out there who preach dogma like there's only one right way to do something.
That's almost never the case and my mind is always being blown With new ways to get things done all the time.
The only thing I really know is that I know nothing.
Speaking of dogma, people have really strong opinions about unit testing.
A controversial one is that unit tests don't need to be written upfront, and sometimes not at all.
Unit testing can be very valuable, and there's even empirical evidence to support that.
But also, in my experience, it can be a completely useless waste of time, especially in projects where the requirements aren't very well defined and Likely to change as the project evolves.
Because if you try to write your test upfront, then requirements change.
You not only need to refactor your code, But also your tests.
In addition, most developers don't really like writing tests in the first place, so when you put a requirement out like 95% code coverage, get a bunch of pointless tests just for the sake of testing and horrible code to go along with it.
I think quality is a lot more important than quantity when it comes to testing.
Or if you have the resources, Use a dedicated quality assurance person or team to validate the code before it goes out.
Another opinion that's kind of related to testing Is that the customer is not always right.
When building a new piece of software, you generally start with some requirements from a customer, project manager, or some other kind of Makeholder.
And it's not like a blueprint for constructing a building.
These requirements are very likely to change multiple times throughout the project.
For non technical people, software development seems like Black magic.
And it's very important for you, the developer, to communicate when you recognize something as a bad idea or something that's going to take a ton of time to refactor.
When I first started doing freelance work, I took the approach that the customer was always right and ended up working many hours for free just to make the customer happy.
And I really only blame myself because it's my fault for not being a good enough communicator.
But in some cases, you may end up with a very difficult client.
And for that reason, I generally recommend people do their billing on an hourly rate as opposed to a lump sum for an entire project Because it's more transparent and allows for a clean break if things go really soft.
I want
a divorce.
Divorce?
I knew we had something in common.
Hey, sign these.
And with that, we've reached the final opinion.
Most comments in code are in fact a pernicious form of code duplication.
Or on a related note, Readability is the most important aspect of your code.
For the most part, I agree with these opinions.
I think writing code that is simple and self describing is the ultimate goal we should Strive for.
The reality though is that even if you write perfectly readable code, I might be able to tell what it's doing, but not why it's there in the first place.
Comments that explain why something Exists tend to be the most valuable.
Another big question here is should you write code that is optimized for readability or performance?
In JavaScript, I can write a for Each loop, which is nice and readable, but it doesn't perform nearly as well as a traditional for loop.
When faced with a situation like that, I start by writing the most readable code, And if performance does in fact become a problem, then I may optimize it in the future.
But 90% of the time, it's too insignificant to even matter.
I'm gonna go ahead and wrap things up there.
Don't forget to hit the like button, and make sure to leave your own controversial opinion in the comments below.
Thanks for watching, and I will see you in the next one.

Speaker 0: Object oriented programming is absolutely the worst thing that's ever happened to the field of software engineering. Set your feelings, you'll know it

Speaker 1: to be true.

Speaker 0: In today's video, we'll look at some of the most controversial programming opinions coming from highly Experienced developers on Stack Overflow, which is known for its kind, friendly, and not toxic at all community. I'll give you my initial reaction based on my 10 years of experience primarily In web development, but in full disclosure, I only have about 5,000 rev on Stack Overflow, so my opinion doesn't really matter very much. If you're new here, like and subscribe, then leave your most controversial opinion, and I'll choose the best one to win a free t shirt of your choice. And I just released a whole bunch of new merch designs, so check those out to support the channel and keep This content coming. Alright.

So let's get back to that initial opinion that basically says object oriented programming is horrible. Developers have been hating OOP a lot in recent years, and even the legendary Edsger Dijkstra is quoted saying object oriented programs are offered as alternatives to correct ones. The idea behind OOP has been around since the 19 sixties and allows developers to encapsulate data and logic inside of objects. You start with a class, which is like a blueprint that can then create multiple object instances. These classes can inherit behaviors from each other, forming a hierarchy of abstractions.

In addition, there are a bunch of design patterns to go along with it, like singleton, factory, dependency injection, and so on. All these features and design patterns sound Sophisticated and sometimes they trick you into thinking you're making productivity gains when there's likely a much simpler way to get the job done. A common complaint that object oriented languages require a lot more boilerplate than something that's more functional in nature, and applications end up having a bunch of mutable state that's difficult to test, refactor, and just reason about. Personally, I do think these criticisms are valid, but a bit over Blown. In JavaScript, I rarely implement my own classes and basically never use inheritance.

Instead, I create modules that export functions and plain objects. That makes the code tree shakeable so that dead code can be eliminated when it's bundled together. You also don't have to worry about things like constructors, getters, and setters, the this keyword, which in many Cases just add unnecessary complexity. But that being said, I do come across cases where a class is a really nice way to encapsulate something and they do work really well in frameworks like Angular, Nest, did it put a lot of thought into how to work with classes in a predictable way. And there's also other tools out there that I really like that are fundamentally object oriented Like Flutter or the Unity framework.

When done properly, object oriented programming can be very nice and intuitive, but it may not always be the best solution, So it's good to keep an open mind about procedural or functional approaches as well. Programmers who don't code in their spare time for fun will never become as good as those that do. The idea here is that if you're not passionate enough about coding to do it in your spare time, you're never going to reach your full potential. Now, I actually disagree with this opinion even though I'm the type of person that Writes code in my free time. I think the reality is that many people treat programming as a job, and there's absolutely nothing wrong with that.

There's some super talented programmers out there that can Get stuff done with a fraction of the effort that other programmers might need. 10x developers are real, and it's not because they're programming in their free time. They're just built different than the rest of us. Like Allen Iverson in Prime didn't even have to practice, and he was still better than pretty much everybody else.

Speaker 1: We ain't talking about the game. We're talking about practice, man.

Speaker 0: Being a programmer is not just about writing code. It's also about communication, being a good team player, vision, creativity, and a bunch of other soft skills, Which brings me to the next opinion, lazy programmers are the best programmers. Or another way to translate it is work smarter, not harder. I agree with this one a 100%, but I think a better word for lazy might be something like clever. Working hard is good and all, but sometimes it can blind you to a better solution.

Like, have you ever been stuck debugging something for hours, then you take a 10 minute break and come back and solve it right away? That's a phenomenon experienced By all developers, and has happened to me many times. Instead of working hard, be lazy about things, take a break, and come back and look at it with a fresh set Devise. In addition, when you suspect you're doing something inefficiently, it might be valuable to devote a few hours to learning a new skill. Maybe you need to write a function that checks for an odd Number.

And currently, you have an if else statement to infinity. You might actually save some time by taking a few minutes to learn how the modulus operator works. But in some cases, learning might even be a waste of time. The next opinion is that Googling it is okay. One time my doctor told me that Googling stuff Online doesn't make me a doctor.

That didn't make a whole lot of sense to me because my most important skill as a developer is being able to Google things. A better opinion I found on the same thread goes like Yes. It's fine if you don't know, but you're fired if you can't even Google it. I agree with this opinion because the daily work of most developers is about problem solving For the business, as opposed to more theoretical algorithm implementations that you face on an interview. Google is not the solution to everything, but knowing how to use it Efficiently is definitely a skill that any experienced developer should have.

On a related note, another controversial opinion is that a degree in computer science does make you a more well routed programmer. This is controversial because many influencers out there today say that you don't need a degree to be successful as a programmer. You

Speaker 1: don't need college to learn it learn stuff. Okay? Everything is available basically for free. Uh, you can learn anything you want for free.

Speaker 0: And many big companies have dropped their degree requirements for developers altogether. Personally, I don't have a computer science degree. Everything I've learned has been self taught or learned on the job, and I've met many other developers making big Salary is without a degree. So you definitely don't need a degree to break into the industry, but that being said, if I could go back in time, I would probably pursue a computer science degree. It can definitely fast track you by getting you internships at big companies, and I do think that foundation of knowledge would likely make you a better programmer.

But on the other hand, Is it really worth 4 years of your time and a $100,000 in student debt? College definitely isn't a path for everybody, and one of my favorite things about The tech industry is that you can be successful without a degree, which is a good segue into the next opinion, there's an awful lot of bad teaching out there. Whether you have a degree or not, you'll eventually find yourself on YouTube trying to learn from one of the many different teachers out there. As a teacher myself and a supporter of my fellow YouTubers, I unfortunately agree with this statement. In fact, plenty of people out there absolutely hate my teaching style.

Speaker 1: You suck.

Speaker 0: I get mean comments on almost every video saying the content Sucks and that it's too fast and so on. What it really boils down to is that different people have different preferences when it comes to teaching style. Ironically, the biggest turn off for me is when a teacher Sure has a highly opinionated take on something. There are people out there who preach dogma like there's only one right way to do something. That's almost never the case and my mind is always being blown With new ways to get things done all the time.

The only thing I really know is that I know nothing. Speaking of dogma, people have really strong opinions about unit testing. A controversial one is that unit tests don't need to be written upfront, and sometimes not at all. Unit testing can be very valuable, and there's even empirical evidence to support that. But also, in my experience, it can be a completely useless waste of time, especially in projects where the requirements aren't very well defined and Likely to change as the project evolves.

Because if you try to write your test upfront, then requirements change. You not only need to refactor your code, But also your tests. In addition, most developers don't really like writing tests in the first place, so when you put a requirement out like 95% code coverage, get a bunch of pointless tests just for the sake of testing and horrible code to go along with it. I think quality is a lot more important than quantity when it comes to testing. Or if you have the resources, Use a dedicated quality assurance person or team to validate the code before it goes out.

Another opinion that's kind of related to testing Is that the customer is not always right. When building a new piece of software, you generally start with some requirements from a customer, project manager, or some other kind of Makeholder. And it's not like a blueprint for constructing a building. These requirements are very likely to change multiple times throughout the project. For non technical people, software development seems like Black magic.

And it's very important for you, the developer, to communicate when you recognize something as a bad idea or something that's going to take a ton of time to refactor. When I first started doing freelance work, I took the approach that the customer was always right and ended up working many hours for free just to make the customer happy. And I really only blame myself because it's my fault for not being a good enough communicator. But in some cases, you may end up with a very difficult client. And for that reason, I generally recommend people do their billing on an hourly rate as opposed to a lump sum for an entire project Because it's more transparent and allows for a clean break if things go really soft.

I want

Speaker 1: a divorce. Divorce? I knew we had something in common. Hey, sign these.

Speaker 0: And with that, we've reached the final opinion. Most comments in code are in fact a pernicious form of code duplication. Or on a related note, Readability is the most important aspect of your code. For the most part, I agree with these opinions. I think writing code that is simple and self describing is the ultimate goal we should Strive for.

The reality though is that even if you write perfectly readable code, I might be able to tell what it's doing, but not why it's there in the first place. Comments that explain why something Exists tend to be the most valuable. Another big question here is should you write code that is optimized for readability or performance? In JavaScript, I can write a for Each loop, which is nice and readable, but it doesn't perform nearly as well as a traditional for loop. When faced with a situation like that, I start by writing the most readable code, And if performance does in fact become a problem, then I may optimize it in the future.

But 90% of the time, it's too insignificant to even matter. I'm gonna go ahead and wrap things up there. Don't forget to hit the like button, and make sure to leave your own controversial opinion in the comments below. Thanks for watching, and I will see you in the next one.
Object oriented programming is absolutely the worst thing that's ever happened to the field of software engineering. Set your feelings, you'll know it to be true. In today's video, we'll look at some of the most controversial programming opinions coming from highly Experienced developers on Stack Overflow, which is known for its kind, friendly, and not toxic at all community.
software
software development
I'll give you my initial reaction based on my 10 years of experience primarily In web development, but in full disclosure, I only have about 5,000 rev on Stack Overflow, so my opinion doesn't really matter very much. If you're new here, like and subscribe, then leave your most controversial opinion, and I'll choose the best one to win a free t shirt of your choice.
And I just released a whole bunch of new merch designs, so check those out to support the channel and keep This content coming. Alright. So let's get back to that initial opinion that basically says object oriented programming is horrible. Developers have been hating OOP a lot in recent years, and even the legendary Edsger Dijkstra is quoted saying object oriented programs are offered as alternatives to correct ones. The idea behind OOP has been around since the 19 sixties and allows developers to encapsulate data and logic inside of objects. You start with a class, which is like a blueprint that can then create multiple object instances. These classes can inherit behaviors from each other, forming a hierarchy of abstractions.
software development
software
ideologies
intellectual property
In addition, there are a bunch of design patterns to go along with it, like singleton, factory, dependency injection, and so on.
All these features and design patterns sound Sophisticated and sometimes they trick you into thinking you're making productivity gains when there's likely a much simpler way to get the job done. A common complaint that object oriented languages require a lot more boilerplate than something that's more functional in nature, and applications end up having a bunch of mutable state that's difficult to test, refactor, and just reason about. Personally, I do think these criticisms are valid, but a bit over Blown.
languages
computer science
software development
software
In JavaScript, I rarely implement my own classes and basically never use inheritance. Instead, I create modules that export functions and plain objects. That makes the code tree shakeable so that dead code can be eliminated when it's bundled together. You also don't have to worry about things like constructors, getters, and setters, the this keyword, which in many Cases just add unnecessary complexity. But that being said, I do come across cases where a class is a really nice way to encapsulate something and they do work really well in frameworks like Angular, Nest, did it put a lot of thought into how to work with classes in a predictable way.
And there's also other tools out there that I really like that are fundamentally object oriented Like Flutter or the Unity framework. When done properly, object oriented programming can be very nice and intuitive, but it may not always be the best solution, So it's good to keep an open mind about procedural or functional approaches as well.
programming
software
software development
Programmers who don't code in their spare time for fun will never become as good as those that do. The idea here is that if you're not passionate enough about coding to do it in your spare time, you're never going to reach your full potential.
Now, I actually disagree with this opinion even though I'm the type of person that Writes code in my free time. I think the reality is that many people treat programming as a job, and there's absolutely nothing wrong with that. There's some super talented programmers out there that can Get stuff done with a fraction of the effort that other programmers might need. 10x developers are real, and it's not because they're programming in their free time. They're just built different than the rest of us. Like Allen Iverson in Prime didn't even have to practice, and he was still better than pretty much everybody else. We ain't talking about the game. We're talking about practice, man. Being a programmer is not just about writing code. It's also about communication, being a good team player, vision, creativity, and a bunch of other soft skills, Which brings me to the next opinion, lazy programmers are the best programmers.
programming
software development
artificial intelligence
Or another way to translate it is work smarter, not harder. I agree with this one a 100%, but I think a better word for lazy might be something like clever. Working hard is good and all, but sometimes it can blind you to a better solution. Like, have you ever been stuck debugging something for hours, then you take a 10 minute break and come back and solve it right away? That's a phenomenon experienced By all developers, and has happened to me many times. Instead of working hard, be lazy about things, take a break, and come back and look at it with a fresh set Devise.
In addition, when you suspect you're doing something inefficiently, it might be valuable to devote a few hours to learning a new skill. Maybe you need to write a function that checks for an odd Number. And currently, you have an if else statement to infinity. You might actually save some time by taking a few minutes to learn how the modulus operator works.
mathematics
But in some cases, learning might even be a waste of time. The next opinion is that Googling it is okay. One time my doctor told me that Googling stuff Online doesn't make me a doctor. That didn't make a whole lot of sense to me because my most important skill as a developer is being able to Google things. A better opinion I found on the same thread goes like Yes. It's fine if you don't know, but you're fired if you can't even Google it. I agree with this opinion because the daily work of most developers is about problem solving For the business, as opposed to more theoretical algorithm implementations that you face on an interview. Google is not the solution to everything, but knowing how to use it Efficiently is definitely a skill that any experienced developer should have. On a related note, another controversial opinion is that a degree in computer science does make you a more well routed programmer. This is controversial because many influencers out there today say that you don't need a degree to be successful as a programmer.
google
machine learning
You don't need college to learn it learn stuff. Okay? Everything is available basically for free. Uh, you can learn anything you want for free. And many big companies have dropped their degree requirements for developers altogether. Personally, I don't have a computer science degree. Everything I've learned has been self taught or learned on the job, and I've met many other developers making big Salary is without a degree.
So you definitely don't need a degree to break into the industry, but that being said, if I could go back in time, I would probably pursue a computer science degree. It can definitely fast track you by getting you internships at big companies, and I do think that foundation of knowledge would likely make you a better programmer. But on the other hand, Is it really worth 4 years of your time and a $100,000 in student debt? College definitely isn't a path for everybody, and one of my favorite things about The tech industry is that you can be successful without a degree, which is a good segue into the next opinion, there's an awful lot of bad teaching out there. Whether you have a degree or not, you'll eventually find yourself on YouTube trying to learn from one of the many different teachers out there. As a teacher myself and a supporter of my fellow YouTubers, I unfortunately agree with this statement. In fact, plenty of people out there absolutely hate my teaching style. You suck. I get mean comments on almost every video saying the content Sucks and that it's too fast and so on.
college
youtube
teaching
computer science
universities
education
academia
What it really boils down to is that different people have different preferences when it comes to teaching style. Ironically, the biggest turn off for me is when a teacher Sure has a highly opinionated take on something. There are people out there who preach dogma like there's only one right way to do something. That's almost never the case and my mind is always being blown With new ways to get things done all the time. The only thing I really know is that I know nothing. Speaking of dogma, people have really strong opinions about unit testing. A controversial one is that unit tests don't need to be written upfront, and sometimes not at all. Unit testing can be very valuable, and there's even empirical evidence to support that. But also, in my experience, it can be a completely useless waste of time, especially in projects where the requirements aren't very well defined and Likely to change as the project evolves. Because if you try to write your test upfront, then requirements change. You not only need to refactor your code, But also your tests. In addition, most developers don't really like writing tests in the first place, so when you put a requirement out like 95% code coverage, get a bunch of pointless tests just for the sake of testing and horrible code to go along with it.
I think quality is a lot more important than quantity when it comes to testing. Or if you have the resources, Use a dedicated quality assurance person or team to validate the code before it goes out. Another opinion that's kind of related to testing Is that the customer is not always right. When building a new piece of software, you generally start with some requirements from a customer, project manager, or some other kind of Makeholder. And it's not like a blueprint for constructing a building. These requirements are very likely to change multiple times throughout the project. For non technical people, software development seems like Black magic. And it's very important for you, the developer, to communicate when you recognize something as a bad idea or something that's going to take a ton of time to refactor. When I first started doing freelance work, I took the approach that the customer was always right and ended up working many hours for free just to make the customer happy. And I really only blame myself because it's my fault for not being a good enough communicator. But in some cases, you may end up with a very difficult client. And for that reason, I generally recommend people do their billing on an hourly rate as opposed to a lump sum for an entire project Because it's more transparent and allows for a clean break if things go really soft. I want a divorce. Divorce? I knew we had something in common. Hey, sign these. And with that, we've reached the final opinion. Most comments in code are in fact a pernicious form of code duplication. Or on a related note, Readability is the most important aspect of your code. For the most part, I agree with these opinions. I think writing code that is simple and self describing is the ultimate goal we should Strive for. The reality though is that even if you write perfectly readable code, I might be able to tell what it's doing, but not why it's there in the first place. Comments that explain why something Exists tend to be the most valuable. Another big question here is should you write code that is optimized for readability or performance?
quality assurance
software development
billing
software
customer support
infrastructure
customers
writing
marriage
marketing
reading
In JavaScript, I can write a for Each loop, which is nice and readable, but it doesn't perform nearly as well as a traditional for loop. When faced with a situation like that, I start by writing the most readable code, And if performance does in fact become a problem, then I may optimize it in the future.
programming
But 90% of the time, it's too insignificant to even matter. I'm gonna go ahead and wrap things up there. Don't forget to hit the like button, and make sure to leave your own controversial opinion in the comments below. Thanks for watching, and I will see you in the next one.
Object oriented programming is absolutely the worst thing that's ever happened to the field of software engineering. Set your feelings, you'll know it to be true. In today's video, we'll look at some of the most controversial programming opinions coming from highly Experienced developers on Stack Overflow, which is known for its kind, friendly, and not toxic at all community. I'll give you my initial reaction based on my 10 years of experience primarily In web development, but in full disclosure, I only have about 5,000 rev on Stack Overflow, so my opinion doesn't really matter very much. If you're new here, like and subscribe, then leave your most controversial opinion, and I'll choose the best one to win a free t shirt of your choice. And I just released a whole bunch of new merch designs, so check those out to support the channel and keep This content coming. Alright. So let's get back to that initial opinion that basically says object oriented programming is horrible. Developers have been hating OOP a lot in recent years, and even the legendary Edsger Dijkstra is quoted saying object oriented programs are offered as alternatives to correct ones. The idea behind OOP has been around since the 19 sixties and allows developers to encapsulate data and logic inside of objects. You start with a class, which is like a blueprint that can then create multiple object instances. These classes can inherit behaviors from each other, forming a hierarchy of abstractions. In addition, there are a bunch of design patterns to go along with it, like singleton, factory, dependency injection, and so on. All these features and design patterns sound Sophisticated and sometimes they trick you into thinking you're making productivity gains when there's likely a much simpler way to get the job done. A common complaint that object oriented languages require a lot more boilerplate than something that's more functional in nature, and applications end up having a bunch of mutable state that's difficult to test, refactor, and just reason about. Personally, I do think these criticisms are valid, but a bit over Blown. In JavaScript, I rarely implement my own classes and basically never use inheritance. Instead, I create modules that export functions and plain objects. That makes the code tree shakeable so that dead code can be eliminated when it's bundled together. You also don't have to worry about things like constructors, getters, and setters, the this keyword, which in many Cases just add unnecessary complexity. But that being said, I do come across cases where a class is a really nice way to encapsulate something and they do work really well in frameworks like Angular, Nest, did it put a lot of thought into how to work with classes in a predictable way. And there's also other tools out there that I really like that are fundamentally object oriented Like Flutter or the Unity framework. When done properly, object oriented programming can be very nice and intuitive, but it may not always be the best solution, So it's good to keep an open mind about procedural or functional approaches as well. Programmers who don't code in their spare time for fun will never become as good as those that do. The idea here is that if you're not passionate enough about coding to do it in your spare time, you're never going to reach your full potential. Now, I actually disagree with this opinion even though I'm the type of person that Writes code in my free time. I think the reality is that many people treat programming as a job, and there's absolutely nothing wrong with that. There's some super talented programmers out there that can Get stuff done with a fraction of the effort that other programmers might need. 10x developers are real, and it's not because they're programming in their free time. They're just built different than the rest of us. Like Allen Iverson in Prime didn't even have to practice, and he was still better than pretty much everybody else. We ain't talking about the game. We're talking about practice, man. Being a programmer is not just about writing code. It's also about communication, being a good team player, vision, creativity, and a bunch of other soft skills, Which brings me to the next opinion, lazy programmers are the best programmers. Or another way to translate it is work smarter, not harder. I agree with this one a 100%, but I think a better word for lazy might be something like clever. Working hard is good and all, but sometimes it can blind you to a better solution. Like, have you ever been stuck debugging something for hours, then you take a 10 minute break and come back and solve it right away? That's a phenomenon experienced By all developers, and has happened to me many times. Instead of working hard, be lazy about things, take a break, and come back and look at it with a fresh set Devise. In addition, when you suspect you're doing something inefficiently, it might be valuable to devote a few hours to learning a new skill. Maybe you need to write a function that checks for an odd Number. And currently, you have an if else statement to infinity. You might actually save some time by taking a few minutes to learn how the modulus operator works. But in some cases, learning might even be a waste of time. The next opinion is that Googling it is okay. One time my doctor told me that Googling stuff Online doesn't make me a doctor. That didn't make a whole lot of sense to me because my most important skill as a developer is being able to Google things. A better opinion I found on the same thread goes like Yes. It's fine if you don't know, but you're fired if you can't even Google it. I agree with this opinion because the daily work of most developers is about problem solving For the business, as opposed to more theoretical algorithm implementations that you face on an interview. Google is not the solution to everything, but knowing how to use it Efficiently is definitely a skill that any experienced developer should have. On a related note, another controversial opinion is that a degree in computer science does make you a more well routed programmer. This is controversial because many influencers out there today say that you don't need a degree to be successful as a programmer. You don't need college to learn it learn stuff. Okay? Everything is available basically for free. Uh, you can learn anything you want for free. And many big companies have dropped their degree requirements for developers altogether. Personally, I don't have a computer science degree. Everything I've learned has been self taught or learned on the job, and I've met many other developers making big Salary is without a degree. So you definitely don't need a degree to break into the industry, but that being said, if I could go back in time, I would probably pursue a computer science degree. It can definitely fast track you by getting you internships at big companies, and I do think that foundation of knowledge would likely make you a better programmer. But on the other hand, Is it really worth 4 years of your time and a $100,000 in student debt? College definitely isn't a path for everybody, and one of my favorite things about The tech industry is that you can be successful without a degree, which is a good segue into the next opinion, there's an awful lot of bad teaching out there. Whether you have a degree or not, you'll eventually find yourself on YouTube trying to learn from one of the many different teachers out there. As a teacher myself and a supporter of my fellow YouTubers, I unfortunately agree with this statement. In fact, plenty of people out there absolutely hate my teaching style. You suck. I get mean comments on almost every video saying the content Sucks and that it's too fast and so on. What it really boils down to is that different people have different preferences when it comes to teaching style. Ironically, the biggest turn off for me is when a teacher Sure has a highly opinionated take on something. There are people out there who preach dogma like there's only one right way to do something. That's almost never the case and my mind is always being blown With new ways to get things done all the time. The only thing I really know is that I know nothing. Speaking of dogma, people have really strong opinions about unit testing. A controversial one is that unit tests don't need to be written upfront, and sometimes not at all. Unit testing can be very valuable, and there's even empirical evidence to support that. But also, in my experience, it can be a completely useless waste of time, especially in projects where the requirements aren't very well defined and Likely to change as the project evolves. Because if you try to write your test upfront, then requirements change. You not only need to refactor your code, But also your tests. In addition, most developers don't really like writing tests in the first place, so when you put a requirement out like 95% code coverage, get a bunch of pointless tests just for the sake of testing and horrible code to go along with it. I think quality is a lot more important than quantity when it comes to testing. Or if you have the resources, Use a dedicated quality assurance person or team to validate the code before it goes out. Another opinion that's kind of related to testing Is that the customer is not always right. When building a new piece of software, you generally start with some requirements from a customer, project manager, or some other kind of Makeholder. And it's not like a blueprint for constructing a building. These requirements are very likely to change multiple times throughout the project. For non technical people, software development seems like Black magic. And it's very important for you, the developer, to communicate when you recognize something as a bad idea or something that's going to take a ton of time to refactor. When I first started doing freelance work, I took the approach that the customer was always right and ended up working many hours for free just to make the customer happy. And I really only blame myself because it's my fault for not being a good enough communicator. But in some cases, you may end up with a very difficult client. And for that reason, I generally recommend people do their billing on an hourly rate as opposed to a lump sum for an entire project Because it's more transparent and allows for a clean break if things go really soft. I want a divorce. Divorce? I knew we had something in common. Hey, sign these. And with that, we've reached the final opinion. Most comments in code are in fact a pernicious form of code duplication. Or on a related note, Readability is the most important aspect of your code. For the most part, I agree with these opinions. I think writing code that is simple and self describing is the ultimate goal we should Strive for. The reality though is that even if you write perfectly readable code, I might be able to tell what it's doing, but not why it's there in the first place. Comments that explain why something Exists tend to be the most valuable. Another big question here is should you write code that is optimized for readability or performance? In JavaScript, I can write a for Each loop, which is nice and readable, but it doesn't perform nearly as well as a traditional for loop. When faced with a situation like that, I start by writing the most readable code, And if performance does in fact become a problem, then I may optimize it in the future. But 90% of the time, it's too insignificant to even matter. I'm gonna go ahead and wrap things up there. Don't forget to hit the like button, and make sure to leave your own controversial opinion in the comments below. Thanks for watching, and I will see you in the next one.
Object
object
oriented
oriented
programming
programming
is
is
absolutely
absolutely
the
the
worst
worst
thing
thing
that's
that's
ever
ever
happened
happened
to
to
the
the
field
field
of
of
software
software
engineering.
engineering
Set
set
your
your
feelings,
feelings
you'll
you'll
know
know
it
it
to
to
be
be
true.
true
In
in
today's
today's
video,
video
we'll
we'll
look
look
at
at
some
some
of
of
the
the
most
most
controversial
controversial
programming
programming
opinions
opinions
coming
coming
from
from
highly
highly
Experienced
experienced
developers
developers
on
on
Stack
stack
Overflow,
overflow
which
which
is
is
known
known
for
for
its
its
kind,
kind
friendly,
friendly
and
and
not
not
toxic
toxic
at
at
all
all
community.
community
I'll
i'll
give
give
you
you
my
my
initial
initial
reaction
reaction
based
based
on
on
my
my
10
10
years
years
of
of
experience
experience
primarily
primarily
In
in
web
web
development,
development
but
but
in
in
full
full
disclosure,
disclosure
I
i
only
only
have
have
about
about
5,000
5,000
rev
rev
on
on
Stack
stack
Overflow,
overflow
so
so
my
my
opinion
opinion
doesn't
doesn't
really
really
matter
matter
very
very
much.
much
If
if
you're
you're
new
new
here,
here
like
like
and
and
subscribe,
subscribe
then
then
leave
leave
your
your
most
most
controversial
controversial
opinion,
opinion
and
and
I'll
i'll
choose
choose
the
the
best
best
one
one
to
to
win
win
a
a
free
free
t
t
shirt
shirt
of
of
your
your
choice.
choice
And
and
I
i
just
just
released
released
a
a
whole
whole
bunch
bunch
of
of
new
new
merch
merch
designs,
designs
so
so
check
check
those
those
out
out
to
to
support
support
the
the
channel
channel
and
and
keep
keep
This
this
content
content
coming.
coming
Alright.
alright
So
so
let's
let's
get
get
back
back
to
to
that
that
initial
initial
opinion
opinion
that
that
basically
basically
says
says
object
object
oriented
oriented
programming
programming
is
is
horrible.
horrible
Developers
developers
have
have
been
been
hating
hating
OOP
oop
a
a
lot
lot
in
in
recent
recent
years,
years
and
and
even
even
the
the
legendary
legendary
Edsger
edsger
Dijkstra
dijkstra
is
is
quoted
quoted
saying
saying
object
object
oriented
oriented
programs
programs
are
are
offered
offered
as
as
alternatives
alternatives
to
to
correct
correct
ones.
ones
The
the
idea
idea
behind
behind
OOP
oop
has
has
been
been
around
around
since
since
the
the
19
19
sixties
sixties
and
and
allows
allows
developers
developers
to
to
encapsulate
encapsulate
data
data
and
and
logic
logic
inside
inside
of
of
objects.
objects
You
you
start
start
with
with
a
a
class,
class
which
which
is
is
like
like
a
a
blueprint
blueprint
that
that
can
can
then
then
create
create
multiple
multiple
object
object
instances.
instances
These
these
classes
classes
can
can
inherit
inherit
behaviors
behaviors
from
from
each
each
other,
other
forming
forming
a
a
hierarchy
hierarchy
of
of
abstractions.
abstractions
In
in
addition,
addition
there
there
are
are
a
a
bunch
bunch
of
of
design
design
patterns
patterns
to
to
go
go
along
along
with
with
it,
it
like
like
singleton,
singleton
factory,
factory
dependency
dependency
injection,
injection
and
and
so
so
on.
on
All
all
these
these
features
features
and
and
design
design
patterns
patterns
sound
sound
Sophisticated
sophisticated
and
and
sometimes
sometimes
they
they
trick
trick
you
you
into
into
thinking
thinking
you're
you're
making
making
productivity
productivity
gains
gains
when
when
there's
there's
likely
likely
a
a
much
much
simpler
simpler
way
way
to
to
get
get
the
the
job
job
done.
done
A
a
common
common
complaint
complaint
that
that
object
object
oriented
oriented
languages
languages
require
require
a
a
lot
lot
more
more
boilerplate
boilerplate
than
than
something
something
that's
that's
more
more
functional
functional
in
in
nature,
nature
and
and
applications
applications
end
end
up
up
having
having
a
a
bunch
bunch
of
of
mutable
mutable
state
state
that's
that's
difficult
difficult
to
to
test,
test
refactor,
refactor
and
and
just
just
reason
reason
about.
about
Personally,
personally
I
i
do
do
think
think
these
these
criticisms
criticisms
are
are
valid,
valid
but
but
a
a
bit
bit
over
over
Blown.
blown
In
in
JavaScript,
javascript
I
i
rarely
rarely
implement
implement
my
my
own
own
classes
classes
and
and
basically
basically
never
never
use
use
inheritance.
inheritance
Instead,
instead
I
i
create
create
modules
modules
that
that
export
export
functions
functions
and
and
plain
plain
objects.
objects
That
that
makes
makes
the
the
code
code
tree
tree
shakeable
shakeable
so
so
that
that
dead
dead
code
code
can
can
be
be
eliminated
eliminated
when
when
it's
it's
bundled
bundled
together.
together
You
you
also
also
don't
don't
have
have
to
to
worry
worry
about
about
things
things
like
like
constructors,
constructors
getters,
getters
and
and
setters,
setters
the
the
this
this
keyword,
keyword
which
which
in
in
many
many
Cases
cases
just
just
add
add
unnecessary
unnecessary
complexity.
complexity
But
but
that
that
being
being
said,
said
I
i
do
do
come
come
across
across
cases
cases
where
where
a
a
class
class
is
is
a
a
really
really
nice
nice
way
way
to
to
encapsulate
encapsulate
something
something
and
and
they
they
do
do
work
work
really
really
well
well
in
in
frameworks
frameworks
like
like
Angular,
angular
Nest,
nest
did
did
it
it
put
put
a
a
lot
lot
of
of
thought
thought
into
into
how
how
to
to
work
work
with
with
classes
classes
in
in
a
a
predictable
predictable
way.
way
And
and
there's
there's
also
also
other
other
tools
tools
out
out
there
there
that
that
I
i
really
really
like
like
that
that
are
are
fundamentally
fundamentally
object
object
oriented
oriented
Like
like
Flutter
flutter
or
or
the
the
Unity
unity
framework.
framework
When
when
done
done
properly,
properly
object
object
oriented
oriented
programming
programming
can
can
be
be
very
very
nice
nice
and
and
intuitive,
intuitive
but
but
it
it
may
may
not
not
always
always
be
be
the
the
best
best
solution,
solution
So
so
it's
it's
good
good
to
to
keep
keep
an
an
open
open
mind
mind
about
about
procedural
procedural
or
or
functional
functional
approaches
approaches
as
as
well.
well
Programmers
programmers
who
who
don't
don't
code
code
in
in
their
their
spare
spare
time
time
for
for
fun
fun
will
will
never
never
become
become
as
as
good
good
as
as
those
those
that
that
do.
do
The
the
idea
idea
here
here
is
is
that
that
if
if
you're
you're
not
not
passionate
passionate
enough
enough
about
about
coding
coding
to
to
do
do
it
it
in
in
your
your
spare
spare
time,
time
you're
you're
never
never
going
going
to
to
reach
reach
your
your
full
full
potential.
potential
Now,
now
I
i
actually
actually
disagree
disagree
with
with
this
this
opinion
opinion
even
even
though
though
I'm
i'm
the
the
type
type
of
of
person
person
that
that
Writes
writes
code
code
in
in
my
my
free
free
time.
time
I
i
think
think
the
the
reality
reality
is
is
that
that
many
many
people
people
treat
treat
programming
programming
as
as
a
a
job,
job
and
and
there's
there's
absolutely
absolutely
nothing
nothing
wrong
wrong
with
with
that.
that
There's
there's
some
some
super
super
talented
talented
programmers
programmers
out
out
there
there
that
that
can
can
Get
get
stuff
stuff
done
done
with
with
a
a
fraction
fraction
of
of
the
the
effort
effort
that
that
other
other
programmers
programmers
might
might
need.
need
10x
10x
developers
developers
are
are
real,
real
and
and
it's
it's
not
not
because
because
they're
they're
programming
programming
in
in
their
their
free
free
time.
time
They're
they're
just
just
built
built
different
different
than
than
the
the
rest
rest
of
of
us.
us
Like
like
Allen
allen
Iverson
iverson
in
in
Prime
prime
didn't
didn't
even
even
have
have
to
to
practice,
practice
and
and
he
he
was
was
still
still
better
better
than
than
pretty
pretty
much
much
everybody
everybody
else.
else
We
we
ain't
ain't
talking
talking
about
about
the
the
game.
game
We're
we're
talking
talking
about
about
practice,
practice
man.
man
Being
being
a
a
programmer
programmer
is
is
not
not
just
just
about
about
writing
writing
code.
code
It's
it's
also
also
about
about
communication,
communication
being
being
a
a
good
good
team
team
player,
player
vision,
vision
creativity,
creativity
and
and
a
a
bunch
bunch
of
of
other
other
soft
soft
skills,
skills
Which
which
brings
brings
me
me
to
to
the
the
next
next
opinion,
opinion
lazy
lazy
programmers
programmers
are
are
the
the
best
best
programmers.
programmers
Or
or
another
another
way
way
to
to
translate
translate
it
it
is
is
work
work
smarter,
smarter
not
not
harder.
harder
I
i
agree
agree
with
with
this
this
one
one
a
a
100%,
100%
but
but
I
i
think
think
a
a
better
better
word
word
for
for
lazy
lazy
might
might
be
be
something
something
like
like
clever.
clever
Working
working
hard
hard
is
is
good
good
and
and
all,
all
but
but
sometimes
sometimes
it
it
can
can
blind
blind
you
you
to
to
a
a
better
better
solution.
solution
Like,
like
have
have
you
you
ever
ever
been
been
stuck
stuck
debugging
debugging
something
something
for
for
hours,
hours
then
then
you
you
take
take
a
a
10
10
minute
minute
break
break
and
and
come
come
back
back
and
and
solve
solve
it
it
right
right
away?
away
That's
that's
a
a
phenomenon
phenomenon
experienced
experienced
By
by
all
all
developers,
developers
and
and
has
has
happened
happened
to
to
me
me
many
many
times.
times
Instead
instead
of
of
working
working
hard,
hard
be
be
lazy
lazy
about
about
things,
things
take
take
a
a
break,
break
and
and
come
come
back
back
and
and
look
look
at
at
it
it
with
with
a
a
fresh
fresh
set
set
Devise.
devise
In
in
addition,
addition
when
when
you
you
suspect
suspect
you're
you're
doing
doing
something
something
inefficiently,
inefficiently
it
it
might
might
be
be
valuable
valuable
to
to
devote
devote
a
a
few
few
hours
hours
to
to
learning
learning
a
a
new
new
skill.
skill
Maybe
maybe
you
you
need
need
to
to
write
write
a
a
function
function
that
that
checks
checks
for
for
an
an
odd
odd
Number.
number
And
and
currently,
currently
you
you
have
have
an
an
if
if
else
else
statement
statement
to
to
infinity.
infinity
You
you
might
might
actually
actually
save
save
some
some
time
time
by
by
taking
taking
a
a
few
few
minutes
minutes
to
to
learn
learn
how
how
the
the
modulus
modulus
operator
operator
works.
works
But
but
in
in
some
some
cases,
cases
learning
learning
might
might
even
even
be
be
a
a
waste
waste
of
of
time.
time
The
the
next
next
opinion
opinion
is
is
that
that
Googling
googling
it
it
is
is
okay.
okay
One
one
time
time
my
my
doctor
doctor
told
told
me
me
that
that
Googling
googling
stuff
stuff
Online
online
doesn't
doesn't
make
make
me
me
a
a
doctor.
doctor
That
that
didn't
didn't
make
make
a
a
whole
whole
lot
lot
of
of
sense
sense
to
to
me
me
because
because
my
my
most
most
important
important
skill
skill
as
as
a
a
developer
developer
is
is
being
being
able
able
to
to
Google
google
things.
things
A
a
better
better
opinion
opinion
I
i
found
found
on
on
the
the
same
same
thread
thread
goes
goes
like
like
Yes.
yes
It's
it's
fine
fine
if
if
you
you
don't
don't
know,
know
but
but
you're
you're
fired
fired
if
if
you
you
can't
can't
even
even
Google
google
it.
it
I
i
agree
agree
with
with
this
this
opinion
opinion
because
because
the
the
daily
daily
work
work
of
of
most
most
developers
developers
is
is
about
about
problem
problem
solving
solving
For
for
the
the
business,
business
as
as
opposed
opposed
to
to
more
more
theoretical
theoretical
algorithm
algorithm
implementations
implementations
that
that
you
you
face
face
on
on
an
an
interview.
interview
Google
google
is
is
not
not
the
the
solution
solution
to
to
everything,
everything
but
but
knowing
knowing
how
how
to
to
use
use
it
it
Efficiently
efficiently
is
is
definitely
definitely
a
a
skill
skill
that
that
any
any
experienced
experienced
developer
developer
should
should
have.
have
On
on
a
a
related
related
note,
note
another
another
controversial
controversial
opinion
opinion
is
is
that
that
a
a
degree
degree
in
in
computer
computer
science
science
does
does
make
make
you
you
a
a
more
more
well
well
routed
routed
programmer.
programmer
This
this
is
is
controversial
controversial
because
because
many
many
influencers
influencers
out
out
there
there
today
today
say
say
that
that
you
you
don't
don't
need
need
a
a
degree
degree
to
to
be
be
successful
successful
as
as
a
a
programmer.
programmer
You
you
don't
don't
need
need
college
college
to
to
learn
learn
it
it
learn
learn
stuff.
stuff
Okay?
okay
Everything
everything
is
is
available
available
basically
basically
for
for
free.
free
Uh,
uh
you
you
can
can
learn
learn
anything
anything
you
you
want
want
for
for
free.
free
And
and
many
many
big
big
companies
companies
have
have
dropped
dropped
their
their
degree
degree
requirements
requirements
for
for
developers
developers
altogether.
altogether
Personally,
personally
I
i
don't
don't
have
have
a
a
computer
computer
science
science
degree.
degree
Everything
everything
I've
i've
learned
learned
has
has
been
been
self
self
taught
taught
or
or
learned
learned
on
on
the
the
job,
job
and
and
I've
i've
met
met
many
many
other
other
developers
developers
making
making
big
big
Salary
salary
is
is
without
without
a
a
degree.
degree
So
so
you
you
definitely
definitely
don't
don't
need
need
a
a
degree
degree
to
to
break
break
into
into
the
the
industry,
industry
but
but
that
that
being
being
said,
said
if
if
I
i
could
could
go
go
back
back
in
in
time,
time
I
i
would
would
probably
probably
pursue
pursue
a
a
computer
computer
science
science
degree.
degree
It
it
can
can
definitely
definitely
fast
fast
track
track
you
you
by
by
getting
getting
you
you
internships
internships
at
at
big
big
companies,
companies
and
and
I
i
do
do
think
think
that
that
foundation
foundation
of
of
knowledge
knowledge
would
would
likely
likely
make
make
you
you
a
a
better
better
programmer.
programmer
But
but
on
on
the
the
other
other
hand,
hand
Is
is
it
it
really
really
worth
worth
4
4
years
years
of
of
your
your
time
time
and
and
a
a
$100,000
$100,000
in
in
student
student
debt?
debt
College
college
definitely
definitely
isn't
isn't
a
a
path
path
for
for
everybody,
everybody
and
and
one
one
of
of
my
my
favorite
favorite
things
things
about
about
The
the
tech
tech
industry
industry
is
is
that
that
you
you
can
can
be
be
successful
successful
without
without
a
a
degree,
degree
which
which
is
is
a
a
good
good
segue
segue
into
into
the
the
next
next
opinion,
opinion
there's
there's
an
an
awful
awful
lot
lot
of
of
bad
bad
teaching
teaching
out
out
there.
there
Whether
whether
you
you
have
have
a
a
degree
degree
or
or
not,
not
you'll
you'll
eventually
eventually
find
find
yourself
yourself
on
on
YouTube
youtube
trying
trying
to
to
learn
learn
from
from
one
one
of
of
the
the
many
many
different
different
teachers
teachers
out
out
there.
there
As
as
a
a
teacher
teacher
myself
myself
and
and
a
a
supporter
supporter
of
of
my
my
fellow
fellow
YouTubers,
youtubers
I
i
unfortunately
unfortunately
agree
agree
with
with
this
this
statement.
statement
In
in
fact,
fact
plenty
plenty
of
of
people
people
out
out
there
there
absolutely
absolutely
hate
hate
my
my
teaching
teaching
style.
style
You
you
suck.
suck
I
i
get
get
mean
mean
comments
comments
on
on
almost
almost
every
every
video
video
saying
saying
the
the
content
content
Sucks
sucks
and
and
that
that
it's
it's
too
too
fast
fast
and
and
so
so
on.
on
What
what
it
it
really
really
boils
boils
down
down
to
to
is
is
that
that
different
different
people
people
have
have
different
different
preferences
preferences
when
when
it
it
comes
comes
to
to
teaching
teaching
style.
style
Ironically,
ironically
the
the
biggest
biggest
turn
turn
off
off
for
for
me
me
is
is
when
when
a
a
teacher
teacher
Sure
sure
has
has
a
a
highly
highly
opinionated
opinionated
take
take
on
on
something.
something
There
there
are
are
people
people
out
out
there
there
who
who
preach
preach
dogma
dogma
like
like
there's
there's
only
only
one
one
right
right
way
way
to
to
do
do
something.
something
That's
that's
almost
almost
never
never
the
the
case
case
and
and
my
my
mind
mind
is
is
always
always
being
being
blown
blown
With
with
new
new
ways
ways
to
to
get
get
things
things
done
done
all
all
the
the
time.
time
The
the
only
only
thing
thing
I
i
really
really
know
know
is
is
that
that
I
i
know
know
nothing.
nothing
Speaking
speaking
of
of
dogma,
dogma
people
people
have
have
really
really
strong
strong
opinions
opinions
about
about
unit
unit
testing.
testing
A
a
controversial
controversial
one
one
is
is
that
that
unit
unit
tests
tests
don't
don't
need
need
to
to
be
be
written
written
upfront,
upfront
and
and
sometimes
sometimes
not
not
at
at
all.
all
Unit
unit
testing
testing
can
can
be
be
very
very
valuable,
valuable
and
and
there's
there's
even
even
empirical
empirical
evidence
evidence
to
to
support
support
that.
that
But
but
also,
also
in
in
my
my
experience,
experience
it
it
can
can
be
be
a
a
completely
completely
useless
useless
waste
waste
of
of
time,
time
especially
especially
in
in
projects
projects
where
where
the
the
requirements
requirements
aren't
aren't
very
very
well
well
defined
defined
and
and
Likely
likely
to
to
change
change
as
as
the
the
project
project
evolves.
evolves
Because
because
if
if
you
you
try
try
to
to
write
write
your
your
test
test
upfront,
upfront
then
then
requirements
requirements
change.
change
You
you
not
not
only
only
need
need
to
to
refactor
refactor
your
your
code,
code
But
but
also
also
your
your
tests.
tests
In
in
addition,
addition
most
most
developers
developers
don't
don't
really
really
like
like
writing
writing
tests
tests
in
in
the
the
first
first
place,
place
so
so
when
when
you
you
put
put
a
a
requirement
requirement
out
out
like
like
95%
95%
code
code
coverage,
coverage
get
get
a
a
bunch
bunch
of
of
pointless
pointless
tests
tests
just
just
for
for
the
the
sake
sake
of
of
testing
testing
and
and
horrible
horrible
code
code
to
to
go
go
along
along
with
with
it.
it
I
i
think
think
quality
quality
is
is
a
a
lot
lot
more
more
important
important
than
than
quantity
quantity
when
when
it
it
comes
comes
to
to
testing.
testing
Or
or
if
if
you
you
have
have
the
the
resources,
resources
Use
use
a
a
dedicated
dedicated
quality
quality
assurance
assurance
person
person
or
or
team
team
to
to
validate
validate
the
the
code
code
before
before
it
it
goes
goes
out.
out
Another
another
opinion
opinion
that's
that's
kind
kind
of
of
related
related
to
to
testing
testing
Is
is
that
that
the
the
customer
customer
is
is
not
not
always
always
right.
right
When
when
building
building
a
a
new
new
piece
piece
of
of
software,
software
you
you
generally
generally
start
start
with
with
some
some
requirements
requirements
from
from
a
a
customer,
customer
project
project
manager,
manager
or
or
some
some
other
other
kind
kind
of
of
Makeholder.
makeholder
And
and
it's
it's
not
not
like
like
a
a
blueprint
blueprint
for
for
constructing
constructing
a
a
building.
building
These
these
requirements
requirements
are
are
very
very
likely
likely
to
to
change
change
multiple
multiple
times
times
throughout
throughout
the
the
project.
project
For
for
non
non
technical
technical
people,
people
software
software
development
development
seems
seems
like
like
Black
black
magic.
magic
And
and
it's
it's
very
very
important
important
for
for
you,
you
the
the
developer,
developer
to
to
communicate
communicate
when
when
you
you
recognize
recognize
something
something
as
as
a
a
bad
bad
idea
idea
or
or
something
something
that's
that's
going
going
to
to
take
take
a
a
ton
ton
of
of
time
time
to
to
refactor.
refactor
When
when
I
i
first
first
started
started
doing
doing
freelance
freelance
work,
work
I
i
took
took
the
the
approach
approach
that
that
the
the
customer
customer
was
was
always
always
right
right
and
and
ended
ended
up
up
working
working
many
many
hours
hours
for
for
free
free
just
just
to
to
make
make
the
the
customer
customer
happy.
happy
And
and
I
i
really
really
only
only
blame
blame
myself
myself
because
because
it's
it's
my
my
fault
fault
for
for
not
not
being
being
a
a
good
good
enough
enough
communicator.
communicator
But
but
in
in
some
some
cases,
cases
you
you
may
may
end
end
up
up
with
with
a
a
very
very
difficult
difficult
client.
client
And
and
for
for
that
that
reason,
reason
I
i
generally
generally
recommend
recommend
people
people
do
do
their
their
billing
billing
on
on
an
an
hourly
hourly
rate
rate
as
as
opposed
opposed
to
to
a
a
lump
lump
sum
sum
for
for
an
an
entire
entire
project
project
Because
because
it's
it's
more
more
transparent
transparent
and
and
allows
allows
for
for
a
a
clean
clean
break
break
if
if
things
things
go
go
really
really
soft.
soft
I
i
want
want
a
a
divorce.
divorce
Divorce?
divorce
I
i
knew
knew
we
we
had
had
something
something
in
in
common.
common
Hey,
hey
sign
sign
these.
these
And
and
with
with
that,
that
we've
we've
reached
reached
the
the
final
final
opinion.
opinion
Most
most
comments
comments
in
in
code
code
are
are
in
in
fact
fact
a
a
pernicious
pernicious
form
form
of
of
code
code
duplication.
duplication
Or
or
on
on
a
a
related
related
note,
note
Readability
readability
is
is
the
the
most
most
important
important
aspect
aspect
of
of
your
your
code.
code
For
for
the
the
most
most
part,
part
I
i
agree
agree
with
with
these
these
opinions.
opinions
I
i
think
think
writing
writing
code
code
that
that
is
is
simple
simple
and
and
self
self
describing
describing
is
is
the
the
ultimate
ultimate
goal
goal
we
we
should
should
Strive
strive
for.
for
The
the
reality
reality
though
though
is
is
that
that
even
even
if
if
you
you
write
write
perfectly
perfectly
readable
readable
code,
code
I
i
might
might
be
be
able
able
to
to
tell
tell
what
what
it's
it's
doing,
doing
but
but
not
not
why
why
it's
it's
there
there
in
in
the
the
first
first
place.
place
Comments
comments
that
that
explain
explain
why
why
something
something
Exists
exists
tend
tend
to
to
be
be
the
the
most
most
valuable.
valuable
Another
another
big
big
question
question
here
here
is
is
should
should
you
you
write
write
code
code
that
that
is
is
optimized
optimized
for
for
readability
readability
or
or
performance?
performance
In
in
JavaScript,
javascript
I
i
can
can
write
write
a
a
for
for
Each
each
loop,
loop
which
which
is
is
nice
nice
and
and
readable,
readable
but
but
it
it
doesn't
doesn't
perform
perform
nearly
nearly
as
as
well
well
as
as
a
a
traditional
traditional
for
for
loop.
loop
When
when
faced
faced
with
with
a
a
situation
situation
like
like
that,
that
I
i
start
start
by
by
writing
writing
the
the
most
most
readable
readable
code,
code
And
and
if
if
performance
performance
does
does
in
in
fact
fact
become
become
a
a
problem,
problem
then
then
I
i
may
may
optimize
optimize
it
it
in
in
the
the
future.
future
But
but
90%
90%
of
of
the
the
time,
time
it's
it's
too
too
insignificant
insignificant
to
to
even
even
matter.
matter
I'm
i'm
gonna
gonna
go
go
ahead
ahead
and
and
wrap
wrap
things
things
up
up
there.
there
Don't
don't
forget
forget
to
to
hit
hit
the
the
like
like
button,
button
and
and
make
make
sure
sure
to
to
leave
leave
your
your
own
own
controversial
controversial
opinion
opinion
in
in
the
the
comments
comments
below.
below
Thanks
thanks
for
for
watching,
watching
and
and
I
i
will
will
see
see
you
you
in
in
the
the
next
next
one.
one
success
The speakers discuss the negative consequences of programming and the need for more efficient development. They suggest working smart and being lazy about things, rather than rushing to completion. The importance of practice and learning is emphasized, along with the need for a degree in computer science. Workflow and self-allocation are emphasized as key factors for developers, and writing simple, self-focused code is suggested as the best approach for readability and performance.
Reacting to Controversial Opinions of Software Engineers
Object oriented programming is absolutely the worst thing that's ever happened to the field of software engineering. Set your feelings, you'll know it to be true. In today's video, we'll look at some of the most controversial programming opinions coming from highly Experienced developers on Stack Overflow, which is known for its kind, friendly, and not toxic at all community. I'll give you my initial reaction based on my 10 years of experience primarily In web development, but in full disclosure, I only have about 5,000 rev on Stack Overflow, so my opinion doesn't really matter very much. If you're new here, like and subscribe, then leave your most controversial opinion, and I'll choose the best one to win a free t shirt of your choice. And I just released a whole bunch of new merch designs, so check those out to support the channel and keep This content coming. Alright. So let's get back to that initial opinion that basically says object oriented programming is horrible. Developers have been hating OOP a lot in recent years, and even the legendary Edsger Dijkstra is quoted saying object oriented programs are offered as alternatives to correct ones. The idea behind OOP has been around since the 19 sixties and allows developers to encapsulate data and logic inside of objects. You start with a class, which is like a blueprint that can then create multiple object instances. These classes can inherit behaviors from each other, forming a hierarchy of abstractions. In addition, there are a bunch of design patterns to go along with it, like singleton, factory, dependency injection, and so on. All these features and design patterns sound Sophisticated and sometimes they trick you into thinking you're making productivity gains when there's likely a much simpler way to get the job done. A common complaint that object oriented languages require a lot more boilerplate than something that's more functional in nature, and applications end up having a bunch of mutable state that's difficult to test, refactor, and just reason about. Personally, I do think these criticisms are valid, but a bit over Blown. In JavaScript, I rarely implement my own classes and basically never use inheritance. Instead, I create modules that export functions and plain objects. That makes the code tree shakeable so that dead code can be eliminated when it's bundled together. You also don't have to worry about things like constructors, getters, and setters, the this keyword, which in many Cases just add unnecessary complexity. But that being said, I do come across cases where a class is a really nice way to encapsulate something and they do work really well in frameworks like Angular, Nest, did it put a lot of thought into how to work with classes in a predictable way. And there's also other tools out there that I really like that are fundamentally object oriented Like Flutter or the Unity framework. When done properly, object oriented programming can be very nice and intuitive, but it may not always be the best solution, So it's good to keep an open mind about procedural or functional approaches as well. Programmers who don't code in their spare time for fun will never become as good as those that do. The idea here is that if you're not passionate enough about coding to do it in your spare time, you're never going to reach your full potential. Now, I actually disagree with this opinion even though I'm the type of person that Writes code in my free time. I think the reality is that many people treat programming as a job, and there's absolutely nothing wrong with that. There's some super talented programmers out there that can Get stuff done with a fraction of the effort that other programmers might need. 10x developers are real, and it's not because they're programming in their free time. They're just built different than the rest of us. Like Allen Iverson in Prime didn't even have to practice, and he was still better than pretty much everybody else. We ain't talking about the game. We're talking about practice, man. Being a programmer is not just about writing code. It's also about communication, being a good team player, vision, creativity, and a bunch of other soft skills, Which brings me to the next opinion, lazy programmers are the best programmers. Or another way to translate it is work smarter, not harder. I agree with this one a 100%, but I think a better word for lazy might be something like clever. Working hard is good and all, but sometimes it can blind you to a better solution. Like, have you ever been stuck debugging something for hours, then you take a 10 minute break and come back and solve it right away? That's a phenomenon experienced By all developers, and has happened to me many times. Instead of working hard, be lazy about things, take a break, and come back and look at it with a fresh set Devise. In addition, when you suspect you're doing something inefficiently, it might be valuable to devote a few hours to learning a new skill. Maybe you need to write a function that checks for an odd Number. And currently, you have an if else statement to infinity. You might actually save some time by taking a few minutes to learn how the modulus operator works. But in some cases, learning might even be a waste of time. The next opinion is that Googling it is okay. One time my doctor told me that Googling stuff Online doesn't make me a doctor. That didn't make a whole lot of sense to me because my most important skill as a developer is being able to Google things. A better opinion I found on the same thread goes like Yes. It's fine if you don't know, but you're fired if you can't even Google it. I agree with this opinion because the daily work of most developers is about problem solving For the business, as opposed to more theoretical algorithm implementations that you face on an interview. Google is not the solution to everything, but knowing how to use it Efficiently is definitely a skill that any experienced developer should have. On a related note, another controversial opinion is that a degree in computer science does make you a more well routed programmer. This is controversial because many influencers out there today say that you don't need a degree to be successful as a programmer. You don't need college to learn it learn stuff. Okay? Everything is available basically for free. Uh, you can learn anything you want for free. And many big companies have dropped their degree requirements for developers altogether. Personally, I don't have a computer science degree. Everything I've learned has been self taught or learned on the job, and I've met many other developers making big Salary is without a degree. So you definitely don't need a degree to break into the industry, but that being said, if I could go back in time, I would probably pursue a computer science degree. It can definitely fast track you by getting you internships at big companies, and I do think that foundation of knowledge would likely make you a better programmer. But on the other hand, Is it really worth 4 years of your time and a $100,000 in student debt? College definitely isn't a path for everybody, and one of my favorite things about The tech industry is that you can be successful without a degree, which is a good segue into the next opinion, there's an awful lot of bad teaching out there. Whether you have a degree or not, you'll eventually find yourself on YouTube trying to learn from one of the many different teachers out there. As a teacher myself and a supporter of my fellow YouTubers, I unfortunately agree with this statement. In fact, plenty of people out there absolutely hate my teaching style. You suck. I get mean comments on almost every video saying the content Sucks and that it's too fast and so on. What it really boils down to is that different people have different preferences when it comes to teaching style. Ironically, the biggest turn off for me is when a teacher Sure has a highly opinionated take on something. There are people out there who preach dogma like there's only one right way to do something. That's almost never the case and my mind is always being blown With new ways to get things done all the time. The only thing I really know is that I know nothing. Speaking of dogma, people have really strong opinions about unit testing. A controversial one is that unit tests don't need to be written upfront, and sometimes not at all. Unit testing can be very valuable, and there's even empirical evidence to support that. But also, in my experience, it can be a completely useless waste of time, especially in projects where the requirements aren't very well defined and Likely to change as the project evolves. Because if you try to write your test upfront, then requirements change. You not only need to refactor your code, But also your tests. In addition, most developers don't really like writing tests in the first place, so when you put a requirement out like 95% code coverage, get a bunch of pointless tests just for the sake of testing and horrible code to go along with it. I think quality is a lot more important than quantity when it comes to testing. Or if you have the resources, Use a dedicated quality assurance person or team to validate the code before it goes out. Another opinion that's kind of related to testing Is that the customer is not always right. When building a new piece of software, you generally start with some requirements from a customer, project manager, or some other kind of Makeholder. And it's not like a blueprint for constructing a building. These requirements are very likely to change multiple times throughout the project. For non technical people, software development seems like Black magic. And it's very important for you, the developer, to communicate when you recognize something as a bad idea or something that's going to take a ton of time to refactor. When I first started doing freelance work, I took the approach that the customer was always right and ended up working many hours for free just to make the customer happy. And I really only blame myself because it's my fault for not being a good enough communicator. But in some cases, you may end up with a very difficult client. And for that reason, I generally recommend people do their billing on an hourly rate as opposed to a lump sum for an entire project Because it's more transparent and allows for a clean break if things go really soft. I want a divorce. Divorce? I knew we had something in common. Hey, sign these. And with that, we've reached the final opinion. Most comments in code are in fact a pernicious form of code duplication. Or on a related note, Readability is the most important aspect of your code. For the most part, I agree with these opinions. I think writing code that is simple and self describing is the ultimate goal we should Strive for. The reality though is that even if you write perfectly readable code, I might be able to tell what it's doing, but not why it's there in the first place. Comments that explain why something Exists tend to be the most valuable. Another big question here is should you write code that is optimized for readability or performance? In JavaScript, I can write a for Each loop, which is nice and readable, but it doesn't perform nearly as well as a traditional for loop. When faced with a situation like that, I start by writing the most readable code, And if performance does in fact become a problem, then I may optimize it in the future. But 90% of the time, it's too insignificant to even matter. I'm gonna go ahead and wrap things up there. Don't forget to hit the like button, and make sure to leave your own controversial opinion in the comments below. Thanks for watching, and I will see you in the next one.
The speakers discuss the negative consequences of programming and the need for more efficient development. They suggest working smart and being lazy about things, rather than rushing to completion. The importance of practice and learning is emphasized, along with the need for a degree in computer science. Workflow and self-allocation are emphasized as key factors for developers, and writing simple, self-focused code is suggested as the best approach for readability and performance.