Recorded live on twitch, GET IN / theprimeagen MY MAIN YT CHANNEL: Has well edited engineering videos / theprimeagen Discord / discord Have something for me to read or react to?: / theprimeagenreact
No matter how smart or experienced you are, a lot of people are just trying to render HTML or put something on a screen at the end of it all. Worth remembering!
Didn't expect something this based from the guy who made people use JS for the backend. As if it wouldn't be bad enough that it has to be used for frontend. Insane.
I really hate it, like the deeper you learn programming, the more you get disgusted on every software, libraries, etc.. Like its a cursed knowledge especially if youre someone that wants to build something with quality in mind.
This has honestly been my single favorite programming-related blog post on all of the Internet. I reread it from time to time for a cathartic experience which it never fails to deliver.
I work on a large e-commerce site, redoing everything in React. The complexity is mind-numbing. Components chasing other components, passing props around like candy at a Xmas parade. It sucks hard.
yeah react is a mess of plugins and overcomplicated garbage. I personally have been enjoying svelte lately while it has a its fair share of complexity its way less than react and sveltekit has everything I personally need/want built in
It's the same with Angular. It's absolutely mind blowing how much overhead is required to do simple things, and that's just for core app development. When you get to spec testing, you're in the ninth circle of hell. But it pays the bills!
In school my operating systems prof always used to say "we're teaching you how to write good software, not how to use bad software." She would say that when using literally any piece of software, usually written by microsoft.
@@heraldarnold437 oh? When was the last time, as a windows developer, you had to worry about autoconf versions? $LD_LIBRARY_PATH? There's a million bits of Linux garbage that Linux devs are blind to "because that's how it works", that just don't exist on other platforms. Instead, you have other problems, of course, that's why I said "the grass is always greener"
You want to know what real rage is? Two days ago, I was watching a video on CZcams and happened to notice that I had like, 267 updates that needed to be installed. So naturally, I popped up the terminal, and did the pacman update ritual. As I'm watching the video, gstreamer *freezes my whole pc.* This is a normal thing. Usually only after like, 10-15 videos. The only solution is a hard reboot. And guess what sudo was updating when gstreamer decided to crash my pc? The kernel. A bug in gstreamer caused my fucking kernel to be deleted. I had to reinstall my entire operating system. I could beat the gstreamer devs to death with a stick of salami.
I'd have lost my mind by now if I didn't spend some of my free time coding the way I like. At work it literally takes 3 hours of dependency hell to get a web project running on a clean system. I had stuff break because a library version ended in x.x.10 instead of x.x.5 and apparently the developers don't understand their own versioning. And then I get home, sit down and compile my project in three seconds in release mode because it has no dependencies and just solves a specific problem without extra sauce. feelsgoodman
What makes all of this worse is that they don't teach you any of this shit in school. And because of bootcamps, they just expect you to know it all already, or no job for you. I graduated with a CS degree months ago, and am now learning web dev just so I can get out of my shitty construction job and hopefully find one in coding. It's getting fucking ridiculous.
@@ipodtouch470 Because I have a child and a full time job that's an hour drive each way. Not a lot of extra time. Any time I started to learn web dev on my own, I'd have to take big breaks in between and would forget most of it.
CS is not meant to teach you these things, and quite frankly it shouldnt asides from extra classes. CS is for having a fundamental understanding of how a computer works, algorithms, data structures, some math and the general conceptual framework that defines it. Besides, learning how to use a library ain't that hard after you've written a couple in something like C or C++. Although seeing how beautiful computing can be (regardless of having a degree) will make you despise the web with all your might
@@marcs9451 I understand that's not what it's for. I prefer the stuff I learned through my degree. But nobody is hiring someone that's a wiz at making CLI programs. Learning web dev isn't hard, and I could be better than any bootcamp graduate within a week of doing it full time. But they don't give you the opportunity without already having the skills, because of bootcamp people. It's annoying that these non-technical recruiters just look for things to check off and decide who gets an interview and who doesn't based on the wrong shit. It takes a day to learn HTML and JavaScript. I know C, C++ m, and Java. Another C based language, like JavaScript or C#, would be easy af to learn on the job. But they don't know that. So I don't even get the interview until I take a couple months of my free time to properly learn these skills and use them to create a new portfolio. I have a job. I have a kid. I'm tired of grinding with no ROI.
Way back in the day medical Drs would be like, "We don't know why she's not getting better, throw more leaches on her." That's where were at in the software dev discipline.
Where I work, we now have to rewrite C# programs because they're infested with multithreaded bugs. Last time, I spent 4 hours trying to understand a bug and my conclusion was: rewrite the 3 programs involved because they all have concurrency bugs. the guy who wrote these programs (and who resigned a long time ago) underestimates the problems that multithreaded programming and distributed computing can create. he doesn't seem to be aware of the consequences of the code he writes.
Damn, it's almost like adding incomprehensible layers of abstractions brings with it an inherent level of complexity that can be completely overwhelming and infinitely more obnoxious to deal with than a more simplistic starting point that requires more time to build with. Like sure, abstraction's not inherently evil, but my god does it suck when something breaks on a level you're not intimately familiar with and you have to PRAY someone else knows what's fucked up and how to fix it.
This is easily the best blog post ever written on the reality of programming. Newer devs below 10 years of experience won’t _feel_ this full force. The more you know the more you wonder it’s a miracle it works at all to be honest.
the thing I hate most about the programs I have to maintain is multithreaded, buggy code, in the end, we're forced to throw them in the garbage can and re-code something simple and clean. for god 's sake, use message passing to communicate between threads and don't let them touch the same resources (with or without locks, isolate stuff please). and no c# async stuff are not a good tool they are harmful.
I think this situation is more serious in C/C++ ….Some issues are historical I had computer science background but I mostly work with high level language in the past such as C# and JavaScript. Then I help C/C++ graphic team to build the webserver for different OS platform and bring them to the cloud. The amount of technical complexity and technical detail you have to deal with literally blow my mind, static library/shared library, different compiler and platform behaviour (e.g. wstring), I completely feel what the plain is….🥲🥲 At the end what the server does, it parse different file format of a drawing into geometry data, all code and library are written in C++, each file format is handled by dynamic link library. The code have a really long history and just work, rewriting it in another language is never a choice. In the modern world with a lot of high level abstraction which can make things just work (in most case). It is very difficult to explain to people even the boss why some issues takes a lot of effort to develop and tackle, for example why text encoding issue keep happening…..
Good software is dependent on managing complexity, but often the things that are created to ostensibly manage complexity add to it instead. For example Java projects with multiple different dependency injection frameworks in a single app that magically inject things so it's hard to track down what is actually connected to what.
The only reason I'm ever studying anything coding related is for job interviews and that's the dumbest shit ever. "I could solve this simpler, but I know these people are more likely to like this completely unnecessary project hierarchy and unnecessary abstraction for these classes that are literally ever used once, but wOuLd Be UsEd MoRe LaTeR"
One problem is also that we often get bored and want to do some more advanced solution which is marginally better but its more interesting and fun. This drives up the complexity of simpler problems instead of doing simple solutions.
In our web course at university, they forced us to learn Javascript prototypal inheritance. Classes in JS have been a thing since 2015. 2015!!! That is 8 goddamn years!!! And when supporting older browsers, just use a damn transpiler!
1. Classes use it, it’s just prettier so you don’t see it. 2. Are you naive enough to think that you won’t ever have to work with legacy code? 3. What’s the big deal? The fact that they want you to learn how things work? In university? Lol
Honestly, it's good to know things work in the background. I'm sure you got something out of it whether you realize it or not. In my web course, they said they would teach JS, but instead, they taught Jquery.
Good now you know how objects really work. The class keyword is just syntactic sugar anyway and if you have used classes in the past takes about a few minutes to figure out.
If the computer just gave me direct access to audio/video memory, I could write a 3D game with basic music sequencing in like, a day. But no. I have to install a half dozen different libraries that have horrible documentation and require hundreds of lines of code just to put a fricken triangle on the screen. If a GUI framework just let me create a simple message handling loop for my own unique elements and gave me a pixel buffer so I could draw my own crap, I could create my own custom GUI. But no. Every GUI framework designer thinks that they can create every GUI element you will ever need to use and makes creating a new GUI element pure hell. Remember when GUI frameworks had form editors instead of requiring you to write XML? Pepperidge Farm remembers.
It's like the typical reaction when you are trying to build something good and end up in a mess. And it happens 100% of the time. You can't just simply plan everything ahead and stick to the plan(like in construction, for example). Everybody is hating on waterfall methodology, but it looks like a much more healthier alternative to agile in terms of psychological health. You just plan and stick to it. Anytime something happens you just revise your plan, adjust it and continue. Jumping through the hoops of agile is just burning me from inside.
This is because soft-dev has yet to become an actual discipline. Oh people will opine that it is but it has no where near the rigor of engineering, medicine , accounting or law. And it will continue to be that way until it's gets it's own Hyatt Regency walkway collapse disaster. So schools and the culture itself skips a ton of sanity checks in the pedagogy of building our virtual world on heaps of garbage made with productivity in mind for creating the code not for the usage of what the code does. Though considering rocket sizes were limited based on the widths of horses from centuries ago if even a discipline like engineering is borked by past intractable decisions software will always be like this and when I press shift+right_arrow in a text box it will always be coin flip whether selects the new word or even it does anything at all and if it works when I paste it I can get invisible characters that ruin my day.
There's something really relevant here that I like to point out whenever it's tempting to think of the inevitability of it all: Software is one of the youngest industries on the planet. We probably aren't anywhere close to knowing what's best.
@@redcrafterlppa303 to be fair, they are a good choice for certain domains. Interpreters allow rapid development relative to batch compiling. GC is optimal for certain allocation patterns. You shouldn't use them for everything, but I wouldn't web dev in C just as I wouldn't rewrite unix in python.
For the time being we basically just have to work with this current situation and use whatever makes sense for the purpose. The future, however, will be defined by those who dare to challenge the status quo and actually try to do something about it.
@@colemanroberts1102 but you can do both in rust so 🤷 I feel like gc always brings more problems than it solves. It also hides memory from the developer making them unaware of it. The results are memory hungry calculator apps that take 4gigs of memory. Rust really killed the binary world of Segfault or gc with making the idea of a 3rd way mainstream. Interpreters just push flimsy buggy code "without errors". In my opinion both gc and interpreters are a huge misstep for the world of programming and should be banished as fast as possible.
@@redcrafterlppa303 Oh, are you using rust for frontend without invoking _any_ JavaScript? And for projects of the same scope? There are a bunch of options for handling memory, not just GC or manual. Linear types are just one, and they tend to be inflexible. Malloc-free, stack allocation, static allocation, arena allocation, reference counting, and GC are all options with different levels of flexibility and performance tradeoffs. For high numbers of allocations with unknown final scope where latency is acceptable, GC outperforms any other strategy, to the best of my knowledge. Also, GC'd doesn't mean it needs huge chunks of memory. That depends on the size of the data you're working with and whether you make the runtime give memory back to the OS. Yes, simple runtimes don't, but production systems tend to. I think you're confusing "interpreter" and "dynamic typing". Most SML descendents have an interpreter and are as strict or stricter than rust. Most dynamically typed languages do have error checking facilities, but delay them till runtime, as is appropriate for exploratory programming. Rust could benefit from an interpreter so you could test functions individually.
Same could be applied with current hardware (not all hardware but mostly the states of needing drivers and not following standard for it to work is simply another level of complexity)
I despise software and this is why i get a kick out of mass-deleting useless lines of code all day, i don't lead my team in anything on the statistics page on Github except most deleted lines of code lol
The web-tech stack being used to build desktop/mobile apps trend is garbagio. Use the tools that best work on the target platform, not the tools that kind of work on many platforms. Lazy coders gona lazy code though.
Industry standards are often a good thing but the overcomplicated frameworks and useless architectures we have today are just that overcomplicated and useless. I worked myself down from Java in the hunt for more control and less arbitrary restrictions. Today I officially hit rock bottom writing my stuff in assembly and writing my own language being fed up by this whole confusing mess software is in the current day. I would love to say the best thing is that you are the only source of error and you can only blame yourself. But sadly even at the bottom of the world of programming you are still slave to arbitrary restrictions and bugs from the holy operating system. If I go any deeper I might as well built my own processor. The question is then where is the holy middle ground where you have the least bull crap without reinventing breathing. If you ask Linus Torvalds his answer will be C. I'm not to sure yet.
The reality is your thinking doesn't help build productive software. You have to learn to accept abstraction and opinions of the community at large. You don't like how something is written? Write it yourself or use another implementation. You don't like how the syntax of a language? Use another. None of this childish intolerance will help you build anything useful.
@@jel1951 sure it isn't the most efficient solution to role everything yourself and in business time is money. But in spare time I often do most of the stuff myself as many solutions do not fit my requirements for something. For example I roled my own DI framework in java and it was like 5x faster and a lot less awkward to use than something like spring. It sure wasn't as feature rich as spring but all the features required for the project where easier to use and more modern. If I write something that benefits from DI in the future I have my own version ready to go.
I only hate software when it starts to smell. A beautifully written, well thought codebase is actually one of the best things in life. Only second to knowing exactly how to arrive at said code right away, as opposed to speding days looking for the right approach.
The problem is that this is subjective. There’s no objective way to classify what is a beautifully written code, just like there’s no objective way to judge if something is a beautifully written novel. And code doesn’t start to smell as it’s not evolving like a biological product 😂It’s stagnant in time - and that’s good code, written once and it does what it needs to do. But that seems to be a list art also in companies. Some companies change code just to to change code in order to keep having a job. Back in the good ole days we had two updates a year and they were new features. We rarely had bugs because we took the time to properly test - in healthcare, finance and energy you simply can’t “just fix it with an update” let alone back in the 90s when updates were done with floppies and code size mattered (arguably still should!). A little app that does close to noting already being 90MB in code and 900MB RSS memory because it has an embedded browser is just ridiculous. Those devs should be publicly named shamed and made sure to never even touch a computer again 😂
@@CallousCoder By "starting to smell", the experience I had in mind is when you've been successful implementing a certain pattern then a small feature gets requested that doesn't fit with the pattern and you'd figure out how to integrate it without introducing breaking changes, but most the time, you're just not going to have enough time and end up with a half-assed solution that you don't feel satisfied with. And ofc, the result would be an inconsistent codebase which I think we can all agree is not "beautiful". Also, you'd be surprised by how many codebases out there where developers don't respect even basic human coding rights like single responsibility, KISS or even DRY which are each indicators of not so beautiful codebases.
@@parlor3115 I see and agree. However if you write or as I call it engineer your code then you are always only one abstraction away to solving a problem. And yeah my post on this video was that IT branch is infantile. Because nobody studying CS is taught engineering. And thus developers tend to do everything quickly and satisfy the request as soon as possible. I’m the last generation that didn’t have a dedicated CS program on BSc level it was packed in with EE. And electrical engineering teaches you to think in a different way than CS does. Not the least to not go for the easy and quick solution 😊But for the best solution when you know it prolongs the life span, serviceability, components and costs. And you need to build something that you can’t patch and needs to run usually a minimum of 5 years (more often 10-15) with the least amount of service. It’s a whole different mindset and I’m push that mindset at the devs at my clients. I get really ticked of when they say: “oh but that only goes wrong every now and then so we fix it by hand.” I’m often trying to contain my anger: “No… if there’s an error or problem every now and then, then the product isn’t ready for release. We are fricken bank! Find the root cause and solve it in a proper way.” -“but that can take many weeks” “So be it! Because you can count on it that this will occur when you have a disaster recovery or an audit or expiration or keys or certificates and then you have production down time and the one ‘who knew how to d it by hand has forgotten it or things have changed, or doesn’t work her anymore.’ They always find me a pain and I go to the managers and explain them why we have a slow down and all of them are like: “I rather push back a few more weeks and know we have guaranteed working and compliant solution especially when they shit hits the fan! Than a rush job to meet an arbitrary deadline.” And the thing is this was taught in Engineering, you do not release something that isn’t perfect. Btw I do love the single purpose functions and often raise attention that IO should not be part of the business logic. But there are exceptions to the rule. Where I’ve broken that role. And that’s in small systems. Especially the old C64 where I did demos, having jumps and rets to different functions wasted too many cycles. You only had ~19k cycles for each frame. And sometimes you were even racing the beam. And in microcontrollers I’ve had to do that too. But on non-embedded systems unless it’s game or simulation engines there’s indeed no need.
@@CallousCoder Can't say much for embedded programming since it's a completely different stack from what I do (web development), but "one abstraction away", while true, usually entails a huge amount of modifications for medium to large projects. And ofc, with so many modfications, you're bound to introduce breaking changes. I guess integration tests help you make sure, those aren't felt by the client, but refactoring is still a huge investment that can cause a lot of delays which no management will be content with, especially if they expect you to write the good code from the start.
Maybe its a sign of my inexperience, but this kind of got me triggered a bit "If you think it would be cute to align all the equal signs ..." I don't think it would be cute, but it can help readability and editability (keyword: Block-Select) "If you spend time configuring your Window manager or editor ... " So I'm not even allowed to configure the font sizes in my IDE because of poor eyesight then? Am I SOL when the sun shines on my monitor and the IDE manufacturer decides that Dark must be the default color scheme so that all the Hipsters can be happy? "Sorry boss, can't do. The guy who invented Node said it is bad for the User if I can see what is on my monitor." "If you do anything beyond just solving the problem ... " Pointless customization is pointless, I agree. However, there are also reasons for customization beyond wanting to be hip. Otherwise, how am I supposed to solve a problem in Code I physically can't read?
It's a point about how too many software engineers spend nearly all their time on things that don't really matter. There are even serious meetings and discussions about these things that waste time.
I bet he never had to work in a project were there was no planning at all, where all the code was made by "just solve the problem" one piece at time. In the end? Oh boy, you dont want to see, YOU DONT WANT TO EVER TOUCH a project where all the problems were just "solved" one at time. The bigger problem is outside your vision when "just solving the one problem".
once you get some experience, you tend to stick to patterns and prefer this new own way of doing things, and keep this ideal in the head. It's just how our brains work
And yet he proposed file descriptors and processes orchestrated with C as the solution? Great, let's put the possible failure cases of I/O into every part of the system, and completely lose sight of the problem domain by breaking it down to the 1972 idea of portable assembly…
I think saying "the only thing that matters is the user experience" may also not be the correct take, cause it can make nightmare code to work on. It's not that different from "if it works, it's not bad code".
I know it's just a joke but I think people genuinely start to hate node because of the constant criticism and how much your channel has grown. Yes it's not efficient but how many tasks have been automated and gone towards helping global warming and making people's lives better because node is so much simpler to get started than, well, literally any other language. I see so many more people parroting what you say on reddit, must use vim, must learn go or rust and it makes me chuckle. I know a lot of good software engineers that started as javascript front end and who got exposed to backend via node/express and are now moving on to compiled languages and pushing the boundaries of efficiency at their companies. In my opinion node, obviously not perfect has done way more good than bad and we should appreciate it.
The real problem is those snobby developers with OCD. That's why we end up with a lot of unnecessary complexities that serves no purpose. My rule is: if you're not solving a problem, you're creating one.
Yo Prime, real talk, where did you get the skin and keycaps for your 360? I love mine, but that looks absolutely incredible and i need something like it in my life
I've never felt so vindicated about being a script kiddie. I can't believe something as pitiful as instancing paths and variables can make people go this nuts. Maybe I should give C a try, but honestly, bash alone is more than enough for my luckily happy experience of computing with a purpose in the last decade.
My take on this I wrote/writing my first mobileapp with c# and Xamarin done most of the phone stuff my businesses logic/model also database with Nhibernate and when I reached client-server implementation I ended up in a maze. What I read fist were suggesting WCF or gRPC. WCF Didn't worked out the way because of wrong version of NET on the other side but by reading up it seems client server communication technology change every 2-3 years and each iteration becomes increasingly complex to setup = more frustrating .
The guy ranting about bad architecture... same guy go and build node to fuck things up 10x??? Omg.... Lately I am doing IFC so can relate... was drawing boxes on paper for 1-2 days to exactly see how to properly generate file for a single wall piece "properly". Not so bad format because at least it has a specification unlike dwg and things like that, but still "design by comittee" kind of thing really..
Because most of the guys in the CSC, engineering, and programming fields, should not be in it. I was lucky. I saw the good WW2 veteran computer inventors that literally made this stuff from the ground up. I could ask questions and they would talk about laying wire on the bottom of the sea and then making motorola after the war was over. Or why everybody pitched in to invent the mouse controller. Or why Discrete Plasma screens were made. I had 1.5 years of training from WWii vets and soldiers; well three-semesters. They taught us to make software easier as time goes on. But the boomer generations (and onward), never suppressed that internal crooked motivation of cash-flow by creating new bugs and features purposely to break stuff and stifle creativity which forces a consumer to depend upon some company (like a feen and their drug dealer). I clearly remember alot of the WW2 guys hating the newer professors because they reminded them of communism and OOP. I used to inside laugh when they would rant about Bill Gates OS. I mean .... how many times, do I need to learn a new programming language just to print pixels and wave-forms to a screen, speakers, printers, and disk storage. Then one day, you realize you don't have to do it, .... if you make your own 5h1t. We should have reached the point where everybody is making their own VMs and Compilers and freely sharing them via USPTO. But colleges and universities make sure to never do that; the dean needs tenure and more (useless) humanity and psychology classes (that are funded by engineering undergrads seeking student loans). P.S. All software is an interface to a filesystem and||or a (multi-threaded or concurrent) database.
All we're doing as software developers is directing the flow of electrons on silicone chips. We've had all the tools we will ever need since 90s C++ all these modern bloat frameworks do is ensure that computers run as slowly as they did back then 😂 we've gone backwards. All the best software was from the 90s when hardware constraints meant programmers had to actually care about it now they're college grads who just want money and don't care about the craft they're not even interested in it!
Ryan changed his mind after meeting Tom and learning JDSL
Tom is a genious
Who is Tom?
PRAISE JDIESEL
@@davidbriggs8109 in case you took it seriously, it's a joke
@@goawqebt6931 how dare you?
Node is clearly a demonstration of that hate
No matter how smart or experienced you are, a lot of people are just trying to render HTML or put something on a screen at the end of it all. Worth remembering!
It's amazing how far modern web design has come.
@@TheRighteousDawn learning web dev now... wish that i could just learn Jquery, PHP and MySQL.
@@rj7250a What's the point ?
just moving 0s and 1s
@@TheRighteousDawn... and how bloated (try running document.all.length 💀)
Didn't expect something this based from the guy who made people use JS for the backend. As if it wouldn't be bad enough that it has to be used for frontend. Insane.
I really hate it, like the deeper you learn programming, the more you get disgusted on every software, libraries, etc.. Like its a cursed knowledge especially if youre someone that wants to build something with quality in mind.
"If software wasn't a tragedy, it would be a comedy"
The _only_ difference between the two is merely perspective.
I now realize that Ryan Dahl is an accelerationist
This has honestly been my single favorite programming-related blog post on all of the Internet. I reread it from time to time for a cathartic experience which it never fails to deliver.
I work on a large e-commerce site, redoing everything in React. The complexity is mind-numbing. Components chasing other components, passing props around like candy at a Xmas parade. It sucks hard.
"Thank you for choosing Spaghetti Airlines, we hope you will enjoy and never forget this enjoyable time wasted with us!"
yeah react is a mess of plugins and overcomplicated garbage. I personally have been enjoying svelte lately while it has a its fair share of complexity its way less than react and sveltekit has everything I personally need/want built in
It's the same with Angular. It's absolutely mind blowing how much overhead is required to do simple things, and that's just for core app development. When you get to spec testing, you're in the ninth circle of hell. But it pays the bills!
How tf does christams shorten to Xmas
@@goawqebt6931 i'm not even English speaker but understand how. Or it's some joke i didn't get? :D
In school my operating systems prof always used to say "we're teaching you how to write good software, not how to use bad software." She would say that when using literally any piece of software, usually written by microsoft.
based
Grass is always greener: everything complained about in this post is the Linux land garbage you don't have to worry about on windows.
@@SimonBuchanNz Umm...Yeah, sure, bud...
@@heraldarnold437 oh? When was the last time, as a windows developer, you had to worry about autoconf versions? $LD_LIBRARY_PATH? There's a million bits of Linux garbage that Linux devs are blind to "because that's how it works", that just don't exist on other platforms. Instead, you have other problems, of course, that's why I said "the grass is always greener"
@@SimonBuchanNzok but the grass actually is greener on linux
You want to know what real rage is? Two days ago, I was watching a video on CZcams and happened to notice that I had like, 267 updates that needed to be installed. So naturally, I popped up the terminal, and did the pacman update ritual. As I'm watching the video, gstreamer *freezes my whole pc.* This is a normal thing. Usually only after like, 10-15 videos. The only solution is a hard reboot.
And guess what sudo was updating when gstreamer decided to crash my pc? The kernel. A bug in gstreamer caused my fucking kernel to be deleted. I had to reinstall my entire operating system. I could beat the gstreamer devs to death with a stick of salami.
I'd have lost my mind by now if I didn't spend some of my free time coding the way I like. At work it literally takes 3 hours of dependency hell to get a web project running on a clean system. I had stuff break because a library version ended in x.x.10 instead of x.x.5 and apparently the developers don't understand their own versioning.
And then I get home, sit down and compile my project in three seconds in release mode because it has no dependencies and just solves a specific problem without extra sauce. feelsgoodman
Preach.
amen
What makes all of this worse is that they don't teach you any of this shit in school. And because of bootcamps, they just expect you to know it all already, or no job for you. I graduated with a CS degree months ago, and am now learning web dev just so I can get out of my shitty construction job and hopefully find one in coding. It's getting fucking ridiculous.
How did you finish a comp sci degree without looking into web dev? I’m not even talking about taking a course I’m talking about you self learning.
@@ipodtouch470 Because I have a child and a full time job that's an hour drive each way. Not a lot of extra time. Any time I started to learn web dev on my own, I'd have to take big breaks in between and would forget most of it.
CS is not meant to teach you these things, and quite frankly it shouldnt asides from extra classes. CS is for having a fundamental understanding of how a computer works, algorithms, data structures, some math and the general conceptual framework that defines it.
Besides, learning how to use a library ain't that hard after you've written a couple in something like C or C++. Although seeing how beautiful computing can be (regardless of having a degree) will make you despise the web with all your might
@@marcs9451 I understand that's not what it's for. I prefer the stuff I learned through my degree. But nobody is hiring someone that's a wiz at making CLI programs.
Learning web dev isn't hard, and I could be better than any bootcamp graduate within a week of doing it full time. But they don't give you the opportunity without already having the skills, because of bootcamp people.
It's annoying that these non-technical recruiters just look for things to check off and decide who gets an interview and who doesn't based on the wrong shit. It takes a day to learn HTML and JavaScript. I know C, C++ m, and Java. Another C based language, like JavaScript or C#, would be easy af to learn on the job. But they don't know that. So I don't even get the interview until I take a couple months of my free time to properly learn these skills and use them to create a new portfolio. I have a job. I have a kid. I'm tired of grinding with no ROI.
Try software engineering, computer science is a program for computer scientists
Way back in the day medical Drs would be like, "We don't know why she's not getting better, throw more leaches on her." That's where were at in the software dev discipline.
so true
Where I work, we now have to rewrite C# programs because they're infested with multithreaded bugs. Last time, I spent 4 hours trying to understand a bug and my conclusion was: rewrite the 3 programs involved because they all have concurrency bugs. the guy who wrote these programs (and who resigned a long time ago) underestimates the problems that multithreaded programming and distributed computing can create. he doesn't seem to be aware of the consequences of the code he writes.
Based
That's why Tom is a genius
Damn, it's almost like adding incomprehensible layers of abstractions brings with it an inherent level of complexity that can be completely overwhelming and infinitely more obnoxious to deal with than a more simplistic starting point that requires more time to build with.
Like sure, abstraction's not inherently evil, but my god does it suck when something breaks on a level you're not intimately familiar with and you have to PRAY someone else knows what's fucked up and how to fix it.
This is easily the best blog post ever written on the reality of programming. Newer devs below 10 years of experience won’t _feel_ this full force. The more you know the more you wonder it’s a miracle it works at all to be honest.
the thing I hate most about the programs I have to maintain is multithreaded, buggy code, in the end, we're forced to throw them in the garbage can and re-code something simple and clean. for god 's sake, use message passing to communicate between threads and don't let them touch the same resources (with or without locks, isolate stuff please). and no c# async stuff are not a good tool they are harmful.
I bet Tom also hates all software, except his own, he's a genius
especially his own, he's a genius after all
JDSL is peak software
He understands that comments aren’t needed. Unlike those worthless interns!
Yeah, I mean, he IS a virtuoso after all
Who's Tom?
Strong Jonathan Blow vibes here
I think this situation is more serious in C/C++ ….Some issues are historical
I had computer science background but I mostly work with high level language in the past such as C# and JavaScript. Then I help C/C++ graphic team to build the webserver for different OS platform and bring them to the cloud. The amount of technical complexity and technical detail you have to deal with literally blow my mind, static library/shared library, different compiler and platform behaviour (e.g. wstring), I completely feel what the plain is….🥲🥲
At the end what the server does, it parse different file format of a drawing into geometry data, all code and library are written in C++, each file format is handled by dynamic link library. The code have a really long history and just work, rewriting it in another language is never a choice.
In the modern world with a lot of high level abstraction which can make things just work (in most case). It is very difficult to explain to people even the boss why some issues takes a lot of effort to develop and tackle, for example why text encoding issue keep happening…..
Good software is dependent on managing complexity, but often the things that are created to ostensibly manage complexity add to it instead. For example Java projects with multiple different dependency injection frameworks in a single app that magically inject things so it's hard to track down what is actually connected to what.
The only reason I'm ever studying anything coding related is for job interviews and that's the dumbest shit ever. "I could solve this simpler, but I know these people are more likely to like this completely unnecessary project hierarchy and unnecessary abstraction for these classes that are literally ever used once, but wOuLd Be UsEd MoRe LaTeR"
Surely he doesn't hate Tom's JDSL
"Making the same mistake twice ~ let's go baby"! Legendary
Thank you for the healing session. Laughter is the best medicine. :)
One problem is also that we often get bored and want to do some more advanced solution which is marginally better but its more interesting and fun. This drives up the complexity of simpler problems instead of doing simple solutions.
Ryan Dahl man, not the hero we deserve, but the hero we need.
Imagine a doctor saying I hate all medical procedures.😂
At one point there was a dr who did and because of him we now understand germs and drs processes have changed
I imagine that would actually happen if doctors endlessly argued with each other about "incision patterns" and scalpel extensions
@@sbditto85 who?
Yeah, US medical procedures
@@xslashsdas scientists may do that and over the decades we get new things
The idea of Deno is giving us a good and usable vertical integration based on TypeScript. I think he knows what he does.
In our web course at university, they forced us to learn Javascript prototypal inheritance. Classes in JS have been a thing since 2015. 2015!!! That is 8 goddamn years!!! And when supporting older browsers, just use a damn transpiler!
Classes are still using prototypal inheritance, it's just syntax sugar.
JS classes are shit. Don't use them. Write an object.
1. Classes use it, it’s just prettier so you don’t see it.
2. Are you naive enough to think that you won’t ever have to work with legacy code?
3. What’s the big deal? The fact that they want you to learn how things work? In university? Lol
Honestly, it's good to know things work in the background. I'm sure you got something out of it whether you realize it or not.
In my web course, they said they would teach JS, but instead, they taught Jquery.
Good now you know how objects really work. The class keyword is just syntactic sugar anyway and if you have used classes in the past takes about a few minutes to figure out.
Someone once said that comedy is a tragedy that happens to other people (or sth like this) so basically software is both 😂
My feed all your videos I love it ❤
😂😂😂
lets go!
@@ThePrimeTimeagen thank you sharing your knowledge and perspective with us 😊
same, best algo
If the computer just gave me direct access to audio/video memory, I could write a 3D game with basic music sequencing in like, a day. But no. I have to install a half dozen different libraries that have horrible documentation and require hundreds of lines of code just to put a fricken triangle on the screen. If a GUI framework just let me create a simple message handling loop for my own unique elements and gave me a pixel buffer so I could draw my own crap, I could create my own custom GUI. But no. Every GUI framework designer thinks that they can create every GUI element you will ever need to use and makes creating a new GUI element pure hell. Remember when GUI frameworks had form editors instead of requiring you to write XML? Pepperidge Farm remembers.
GUI design peaked with VB6
It's like the typical reaction when you are trying to build something good and end up in a mess. And it happens 100% of the time. You can't just simply plan everything ahead and stick to the plan(like in construction, for example).
Everybody is hating on waterfall methodology, but it looks like a much more healthier alternative to agile in terms of psychological health. You just plan and stick to it. Anytime something happens you just revise your plan, adjust it and continue. Jumping through the hoops of agile is just burning me from inside.
This is because soft-dev has yet to become an actual discipline.
Oh people will opine that it is but it has no where near the rigor of engineering, medicine , accounting or law.
And it will continue to be that way until it's gets it's own Hyatt Regency walkway collapse disaster.
So schools and the culture itself skips a ton of sanity checks in the pedagogy of building our virtual world on heaps of garbage made with productivity in mind for creating the code not for the usage of what the code does.
Though considering rocket sizes were limited based on the widths of horses from centuries ago if even a discipline like engineering is borked by past intractable decisions software will always be like this and when I press shift+right_arrow in a text box it will always be coin flip whether selects the new word or even it does anything at all and if it works when I paste it I can get invisible characters that ruin my day.
There's something really relevant here that I like to point out whenever it's tempting to think of the inevitability of it all:
Software is one of the youngest industries on the planet. We probably aren't anywhere close to knowing what's best.
People defending (mainly) interpreted and gced languages are the best example
Coth coth python coth coth
@@redcrafterlppa303 to be fair, they are a good choice for certain domains. Interpreters allow rapid development relative to batch compiling. GC is optimal for certain allocation patterns. You shouldn't use them for everything, but I wouldn't web dev in C just as I wouldn't rewrite unix in python.
For the time being we basically just have to work with this current situation and use whatever makes sense for the purpose.
The future, however, will be defined by those who dare to challenge the status quo and actually try to do something about it.
@@colemanroberts1102 but you can do both in rust so 🤷
I feel like gc always brings more problems than it solves. It also hides memory from the developer making them unaware of it. The results are memory hungry calculator apps that take 4gigs of memory.
Rust really killed the binary world of
Segfault or gc with making the idea of a 3rd way mainstream.
Interpreters just push flimsy buggy code "without errors".
In my opinion both gc and interpreters are a huge misstep for the world of programming and should be banished as fast as possible.
@@redcrafterlppa303
Oh, are you using rust for frontend without invoking _any_ JavaScript? And for projects of the same scope?
There are a bunch of options for handling memory, not just GC or manual. Linear types are just one, and they tend to be inflexible. Malloc-free, stack allocation, static allocation, arena allocation, reference counting, and GC are all options with different levels of flexibility and performance tradeoffs. For high numbers of allocations with unknown final scope where latency is acceptable, GC outperforms any other strategy, to the best of my knowledge. Also, GC'd doesn't mean it needs huge chunks of memory. That depends on the size of the data you're working with and whether you make the runtime give memory back to the OS. Yes, simple runtimes don't, but production systems tend to.
I think you're confusing "interpreter" and "dynamic typing". Most SML descendents have an interpreter and are as strict or stricter than rust. Most dynamically typed languages do have error checking facilities, but delay them till runtime, as is appropriate for exploratory programming. Rust could benefit from an interpreter so you could test functions individually.
Same could be applied with current hardware (not all hardware but mostly the states of needing drivers and not following standard for it to work is simply another level of complexity)
i've been saying this for years and my coworkers look at me like i have two heads.
I despise software and this is why i get a kick out of mass-deleting useless lines of code all day, i don't lead my team in anything on the statistics page on Github except most deleted lines of code lol
Yep. Software does, indeed, suck. Believe it or not, for nearly 2 decades, I've been working on a solution for *all* of this sh!t. ALL of it.
The web-tech stack being used to build desktop/mobile apps trend is garbagio. Use the tools that best work on the target platform, not the tools that kind of work on many platforms.
Lazy coders gona lazy code though.
truly spoken from the heart
Industry standards are often a good thing but the overcomplicated frameworks and useless architectures we have today are just that overcomplicated and useless.
I worked myself down from Java in the hunt for more control and less arbitrary restrictions. Today I officially hit rock bottom writing my stuff in assembly and writing my own language being fed up by this whole confusing mess software is in the current day. I would love to say the best thing is that you are the only source of error and you can only blame yourself. But sadly even at the bottom of the world of programming you are still slave to arbitrary restrictions and bugs from the holy operating system. If I go any deeper I might as well built my own processor.
The question is then where is the holy middle ground where you have the least bull crap without reinventing breathing.
If you ask Linus Torvalds his answer will be C.
I'm not to sure yet.
Welcome to my world, brother
it probably is C
Jon by Jai Blow
The reality is your thinking doesn't help build productive software. You have to learn to accept abstraction and opinions of the community at large. You don't like how something is written? Write it yourself or use another implementation. You don't like how the syntax of a language? Use another. None of this childish intolerance will help you build anything useful.
@@jel1951 sure it isn't the most efficient solution to role everything yourself and in business time is money. But in spare time I often do most of the stuff myself as many solutions do not fit my requirements for something.
For example I roled my own DI framework in java and it was like 5x faster and a lot less awkward to use than something like spring. It sure wasn't as feature rich as spring but all the features required for the project where easier to use and more modern. If I write something that benefits from DI in the future I have my own version ready to go.
I only hate software when it starts to smell. A beautifully written, well thought codebase is actually one of the best things in life. Only second to knowing exactly how to arrive at said code right away, as opposed to speding days looking for the right approach.
All software eventually smells.
The problem is that this is subjective. There’s no objective way to classify what is a beautifully written code, just like there’s no objective way to judge if something is a beautifully written novel. And code doesn’t start to smell as it’s not evolving like a biological product 😂It’s stagnant in time - and that’s good code, written once and it does what it needs to do. But that seems to be a list art also in companies. Some companies change code just to to change code in order to keep having a job.
Back in the good ole days we had two updates a year and they were new features. We rarely had bugs because we took the time to properly test - in healthcare, finance and energy you simply can’t “just fix it with an update” let alone back in the 90s when updates were done with floppies and code size mattered (arguably still should!). A little app that does close to noting already being 90MB in code and 900MB RSS memory because it has an embedded browser is just ridiculous. Those devs should be publicly named shamed and made sure to never even touch a computer again 😂
@@CallousCoder By "starting to smell", the experience I had in mind is when you've been successful implementing a certain pattern then a small feature gets requested that doesn't fit with the pattern and you'd figure out how to integrate it without introducing breaking changes, but most the time, you're just not going to have enough time and end up with a half-assed solution that you don't feel satisfied with. And ofc, the result would be an inconsistent codebase which I think we can all agree is not "beautiful". Also, you'd be surprised by how many codebases out there where developers don't respect even basic human coding rights like single responsibility, KISS or even DRY which are each indicators of not so beautiful codebases.
@@parlor3115 I see and agree. However if you write or as I call it engineer your code then you are always only one abstraction away to solving a problem. And yeah my post on this video was that IT branch is infantile. Because nobody studying CS is taught engineering. And thus developers tend to do everything quickly and satisfy the request as soon as possible. I’m the last generation that didn’t have a dedicated CS program on BSc level it was packed in with EE. And electrical engineering teaches you to think in a different way than CS does. Not the least to not go for the easy and quick solution 😊But for the best solution when you know it prolongs the life span, serviceability, components and costs.
And you need to build something that you can’t patch and needs to run usually a minimum of 5 years (more often 10-15) with the least amount of service.
It’s a whole different mindset and I’m push that mindset at the devs at my clients. I get really ticked of when they say: “oh but that only goes wrong every now and then so we fix it by hand.” I’m often trying to contain my anger: “No… if there’s an error or problem every now and then, then the product isn’t ready for release. We are fricken bank! Find the root cause and solve it in a proper way.”
-“but that can take many weeks”
“So be it! Because you can count on it that this will occur when you have a disaster recovery or an audit or expiration or keys or certificates and then you have production down time and the one ‘who knew how to d it by hand has forgotten it or things have changed, or doesn’t work her anymore.’
They always find me a pain and I go to the managers and explain them why we have a slow down and all of them are like: “I rather push back a few more weeks and know we have guaranteed working and compliant solution especially when they shit hits the fan! Than a rush job to meet an arbitrary deadline.”
And the thing is this was taught in Engineering, you do not release something that isn’t perfect.
Btw I do love the single purpose functions and often raise attention that IO should not be part of the business logic.
But there are exceptions to the rule. Where I’ve broken that role. And that’s in small systems. Especially the old C64 where I did demos, having jumps and rets to different functions wasted too many cycles. You only had ~19k cycles for each frame. And sometimes you were even racing the beam.
And in microcontrollers I’ve had to do that too.
But on non-embedded systems unless it’s game or simulation engines there’s indeed no need.
@@CallousCoder Can't say much for embedded programming since it's a completely different stack from what I do (web development), but "one abstraction away", while true, usually entails a huge amount of modifications for medium to large projects. And ofc, with so many modfications, you're bound to introduce breaking changes. I guess integration tests help you make sure, those aren't felt by the client, but refactoring is still a huge investment that can cause a lot of delays which no management will be content with, especially if they expect you to write the good code from the start.
Maybe its a sign of my inexperience, but this kind of got me triggered a bit
"If you think it would be cute to align all the equal signs ..." I don't think it would be cute, but it can help readability and editability (keyword: Block-Select)
"If you spend time configuring your Window manager or editor ... " So I'm not even allowed to configure the font sizes in my IDE because of poor eyesight then?
Am I SOL when the sun shines on my monitor and the IDE manufacturer decides that Dark must be the default color scheme so that all the Hipsters can be happy?
"Sorry boss, can't do. The guy who invented Node said it is bad for the User if I can see what is on my monitor."
"If you do anything beyond just solving the problem ... " Pointless customization is pointless, I agree. However, there are also reasons for customization beyond wanting to be hip. Otherwise, how am I supposed to solve a problem in Code I physically can't read?
I also like to align my equal signs. I'm a fan of 'Tidy' code.
It's a point about how too many software engineers spend nearly all their time on things that don't really matter. There are even serious meetings and discussions about these things that waste time.
The point -> .
You:
I bet he never had to work in a project were there was no planning at all, where all the code was made by "just solve the problem" one piece at time. In the end? Oh boy, you dont want to see, YOU DONT WANT TO EVER TOUCH a project where all the problems were just "solved" one at time. The bigger problem is outside your vision when "just solving the one problem".
once you get some experience, you tend to stick to patterns and prefer this new own way of doing things, and keep this ideal in the head. It's just how our brains work
Lowkey suspect this is the reason SerenityOS has gotten a decent amount of traction
The more I learn about code, the more I feel dis way
Hold my TempleOS
Thankyou for introducing me to this content. Deno is breath of fresh air but yea, everything is still completely fucked.
And yet he proposed file descriptors and processes orchestrated with C as the solution? Great, let's put the possible failure cases of I/O into every part of the system, and completely lose sight of the problem domain by breaking it down to the 1972 idea of portable assembly…
The primegan after reading not but the title: "ah yes. I too hate all software."
Primesian is the DrDisrespect of dev
Frum tha depthz of thy hearrt ..
If I created Node, I would hate software too...
If Portal taught me anything, it's that Comedy = Tragedy + Time
web developer discovers the depression that is sysadmin
It seems like an honest sprint retro, BTW he forgot to reflect on "rm -rf node_modules"
I think saying "the only thing that matters is the user experience" may also not be the correct take, cause it can make nightmare code to work on. It's not that different from "if it works, it's not bad code".
Good architecture + good organization -> easy(er) development -> better user experience
The thing is simple... If you dont hate software, you didnt code enought software yet...
6:46 I just get one user over 5 seconds.... it's going craaaaazyyyyyy
I need to build an app for 2 users, and I DO NOT, want to install 5 things to be able to do it. HOLY
I know it's just a joke but I think people genuinely start to hate node because of the constant criticism and how much your channel has grown. Yes it's not efficient but how many tasks have been automated and gone towards helping global warming and making people's lives better because node is so much simpler to get started than, well, literally any other language. I see so many more people parroting what you say on reddit, must use vim, must learn go or rust and it makes me chuckle. I know a lot of good software engineers that started as javascript front end and who got exposed to backend via node/express and are now moving on to compiled languages and pushing the boundaries of efficiency at their companies. In my opinion node, obviously not perfect has done way more good than bad and we should appreciate it.
I know you've scoped some of Muratori's vids, have you seen "the thirty million line problem" from the molly rocket channel circa 2018?
I am sure he (Ryan Dahl) more agrees today with his article than ever before 😊
At the same time I agree with him I also acknowledge that people aren't THAT nerd, and most of the complexity is there for a reason.
The real problem is those snobby developers with OCD. That's why we end up with a lot of unnecessary complexities that serves no purpose. My rule is: if you're not solving a problem, you're creating one.
It was definitly fun to watch it, even if its so sad that it makes it fun.
The worst is some free users will come and say your free app has too much ads and how the price for the paid version is unjustifiable.
Yo Prime, real talk, where did you get the skin and keycaps for your 360? I love mine, but that looks absolutely incredible and i need something like it in my life
I've never felt so vindicated about being a script kiddie.
I can't believe something as pitiful as instancing paths and variables can make people go this nuts.
Maybe I should give C a try, but honestly, bash alone is more than enough for my luckily happy experience of computing with a purpose in the last decade.
My take on this I wrote/writing my first mobileapp with c# and Xamarin done most of the phone stuff my businesses logic/model also database with Nhibernate and when I reached client-server implementation I ended up in a maze. What I read fist were suggesting WCF or gRPC. WCF Didn't worked out the way because of wrong version of NET on the other side but by reading up it seems client server communication technology change every 2-3 years and each iteration becomes increasingly complex to setup = more frustrating .
nodejs...mistake on the world global warming and then recreated it with Deno..same mistake twice ,baby! dang. that's a deep cut.
gotem
The guy ranting about bad architecture... same guy go and build node to fuck things up 10x??? Omg....
Lately I am doing IFC so can relate... was drawing boxes on paper for 1-2 days to exactly see how to properly generate file for a single wall piece "properly". Not so bad format because at least it has a specification unlike dwg and things like that, but still "design by comittee" kind of thing really..
Because most of the guys in the CSC, engineering, and programming fields, should not be in it.
I was lucky. I saw the good WW2 veteran computer inventors that literally made this stuff from the ground up. I could ask questions and they would talk about laying wire on the bottom of the sea and then making motorola after the war was over. Or why everybody pitched in to invent the mouse controller. Or why Discrete Plasma screens were made. I had 1.5 years of training from WWii vets and soldiers; well three-semesters.
They taught us to make software easier as time goes on. But the boomer generations (and onward), never suppressed that internal crooked motivation of cash-flow by creating new bugs and features purposely to break stuff and stifle creativity which forces a consumer to depend upon some company (like a feen and their drug dealer). I clearly remember alot of the WW2 guys hating the newer professors because they reminded them of communism and OOP. I used to inside laugh when they would rant about Bill Gates OS. I mean .... how many times, do I need to learn a new programming language just to print pixels and wave-forms to a screen, speakers, printers, and disk storage.
Then one day, you realize you don't have to do it, .... if you make your own 5h1t. We should have reached the point where everybody is making their own VMs and Compilers and freely sharing them via USPTO. But colleges and universities make sure to never do that; the dean needs tenure and more (useless) humanity and psychology classes (that are funded by engineering undergrads seeking student loans).
P.S. All software is an interface to a filesystem and||or a (multi-threaded or concurrent) database.
Flip needs his Yerba Mates!
Money spoils good engineering.
Ryan's revolted with Tech Twitter Community 😂😂😂
Quick note Comedy = Tragedy + Time ;)
"when this happens, all of this shit will be trashed"
god i hope so
"Urbit fixes this"
My biggest takeaway is wtf, you didn't get the Advantage Pro?!
The post-Web 2.0 state of web design is why I never want to touch web design ever again.
Everyone should read Ryan's post about Optimistic Nihilism.
I agree with Ryan on everything he's ever said and done, inclusive of the work he did on Node.
All we're doing as software developers is directing the flow of electrons on silicone chips. We've had all the tools we will ever need since 90s C++ all these modern bloat frameworks do is ensure that computers run as slowly as they did back then 😂 we've gone backwards. All the best software was from the 90s when hardware constraints meant programmers had to actually care about it now they're college grads who just want money and don't care about the craft they're not even interested in it!
I just wish software could actually work
Since when it doesn’t? I guess you typed it on a device running software. Right?
Even hardware doesn't work lol
Did you saw any of Rich Hikey's presentations?
Mr Prime could you give me a warning before licking the keyboard. I was not prepared to see that.
Pro - to - type - al (pro′to·typ′al)
07:28 how many keyboards is that?
Can someone please share article link?
Is this why we're all participating in the DIC on his github?
anyone know what kind of keyboard he has? thanks
you can extend this to vim and neovim setups :P
Comedy = Tragedy * Time
why cant i stop watching your videos
/tenor stare feet agree