Eevee is a programmer who writes long posts on programming languages, Unicode, CSS, music theory and game development.
Commenters repeatedly call "PHP: a fractal of bad design" one of the best blog articles ever written, and recommend the rest of the blog.
As eevee put it https://eev.ee/blog/2016/02/15/everyones-offended-these-days/ :
>I love Stephen Fry, really I do, but this oft-repeated quote is bullshit and he is perfectly demonstrating why that is. What he’s really saying is this: everyone else’s feelings don’t matter, but his do, because he frames them as universal rules of discourse rather than feelings.
>Look at his post again — that’s exactly how he words his point of view. “Too many people have peed in the pool.” “Now the pool is stagnant, …frothy with scum.” Fry’s feelings aren’t feelings — they are a universal and objective standard of behavior, which everyone else is violating. All those angry people, yelling that Fry has violated a universal and objective standard of behavior? Ah, they’re just perpetually offended, you see. Totally different.
You may be interested in eevee's story:
https://eev.ee/blog/2015/06/09/i-quit-the-tech-industry/
My partner left finance to work in medicine. She makes a lot less money and likes it a lot better. I dunno where you live, but becoming a physician assistant can be a pretty good gig: much less school, pretty good salaries, pretty defined hours, very little debt.
Personally, I worked at a series of toxic startups and needed two years away to not loath programming. I regret nothing about leaving tech the first time, and after returning, my biggest regret is waiting so long to start my own company. Closely followed by tolerating so many shitty bosses. It helped me to have friends that did things besides work; workaholics are very common in sfbay. Dunno if that helps, but good luck.
As a programmer studying music, I found the "music theory for nerds" article [1] very helpful to get started, and then kept noticing how many general music learning materials for beginners skip the fundamentals/justification, suggesting to just remember many non-arbitrary things that can be deduced, without explaining why they are that way. As the article itself mentions, the hard part is to figure which parts are arbitrary and which ones are not quite so arbitrary, but pretty sure an engineer can get an easy start by studying those bits first.
Playing an instrument is nice and fun too, of course, but I think it's more helpful for intuition rather than actual understanding -- and those are usually best to combine.
[1] https://eev.ee/blog/2016/09/15/music-theory-for-nerds/
"Reusable integers" is a real fail - it violates the principle of least surprise and introduces a nasty inconsistency - all integers should logically be (refer to) the same integer object, not just the first 100.
Assert is a statement, not an expression, so do not use it as an expression.
One should never compare floats. This is taught in any freshman CS course. The limitation is due to the standard encoding of floats - IEEE 754 - not Python's fault.
Everything else are features of a truly dynamic language, designed for a really quick prototyping. Python3.x got rid of many inconsistencies and caveats of 2.x
Shall we re-read the classic now?
https://eev.ee/blog/2012/04/09/php-a-fractal-of-bad-design/
Because MySQL is the PHP of databases. Much like PHP is designed to just carry on truckin' whatever problem it encounters (https://eev.ee/blog/2012/04/09/php-a-fractal-of-bad-design/), MySQL was too. It's easy to slam some data into it and get it back without having to think too hard about what you're actually storing (https://grimoire.ca/mysql/choose-something-else). It's ease of use made it pervasive, much like PHP.
Following on from that, I suspect a lot of large companies use MySQL because they always have, not because it's actually any good. For example, Basecamp used MySQL while I was there, but I never met a single Sysadmin there who would use it over Postgres if they were to start a new project.
It's type system and automatic casting/comparing is a nightmare.
Although there are namespaces now, the idea of everything being in the global scope was insane (and still even with namespaces, much is still in the global scope).
mysql_real_escape_string
There are no type-safe comparisons for greater or less then (You have ===, but no <== or >==).
This article: https://eev.ee/blog/2012/04/09/php-a-fractal-of-bad-design/
This subreddit: https://reddit.com/r/lolphp
The number of bugs that are closed as not-a-bug/wontfix.
I'm not sure how much of this has been fixed, but I've moved on to different languages and career choices and don't really want to look back that way.