Why You Should Learn To Program The Hard Way

Video Statistics and Information

Video
Captions Word Cloud
Reddit Comments
Captions
about a year ago i received a mildly discouraging comment on one of my youtube videos at the time i had been working on my indie game and game engine for about a year i made some progress but it wasn't totally obvious how far along i had come so the guy writing the comments seemed justified in what he was saying at least in some way here's what he said what's wrong with just using a commercial game engine i have a feeling you will have great great grandchildren before a game is ever done with this now i don't mean to bag on him i actually think he's coming from a fairly common place most of us aren't encouraged to take the harder path and so it's pretty normal for many to assume something is too difficult before ever trying it and in fact at that time my game really didn't look like much of anything it was just kind of a white square sort of bouncing around if you were looking at it you wouldn't have thought much of it if all you ever did was pay attention to mainstream programming articles and top page google results i think you would be pushed into a similar mindset basically anything that is mainstream in the programming world you're presented with a view which highly emphasizes being convenient and using tools and not reinventing the wheel as much as you possibly could and this is the dominant mindset but i actually want to argue that this easy way of doing things this um always use someone else's tool mindset is actually to your own detriment and that doing the opposite of that is probably the best thing for your career and i mean that not only in terms of the financial success that you will get which you will you will actually get more money if you do things the hard way but you will also be able to pursue more interesting creative projects and ideas that you wouldn't otherwise be able to pursue so in the course of this talk i just simply want to argue what this mindset is and i want to actually show you what you can gain by learning how to do software the hard way after listening to this i believe you will have a totally different outlook and you will welcome new challenges in programming that will help you grow and advance your career and it really doesn't matter if you're just starting out or have been in software for a long time and would consider yourself a senior engineer i have benefited tremendously from the time i have spent in lower level programming not only do i view software engineering problems from a completely different perspective my investment in acquiring these difficult to attain skills has led to me getting paid more which has ultimately put me in a position where i can consider pursuing independent game development full time i'll show you how you can build your skills in this way and fully pursue whichever path and software most interests you so why reinvent the wheel what's wrong with software in the way that it's currently built this is the first objection you will hear whenever you tell someone you are writing a game engine from scratch if you're doing any kind of generic tool like a compiler anything that is perceived to be a bigger ambitious project this is usually the first thing you will hear indeed this is the question that was asked of me why do this couldn't you save time by using an existing framework and in many ways it's difficult to argue with a statement like this because it's true you will usually save time in the short term by using an existing tool or framework that said i think an argument like this falls flat in a few ways and i think it's because it presupposes that you have the same goals as the person asking the question i want to frame this question in a slightly different way imagine asking a professional mma fighter a similar question why do this why do you think training to punch others with your bare hands is better than firing a rifle or having a drone carry out a strike why lift weights when you can use your car to haul things around town why ride your mountain bike when you can drive anywhere you want to go why cook your own meals when you can just order takeout all of these save time and accomplish what is assumed to be the goal and that's what i want to get at what is this assumed goal which is buried inside of the question i believe the question assumes your goal is to get something to market as quickly as possible to spend the least possible amount of time making your game wear product under certain circumstances this goal can make a lot of sense if you are employed by someone else and they're paying you to get something rough out on the market as soon as you possibly can saving time is your number one priority you really don't have much leverage or or flexibility there but people don't lift weights go mountain biking or train in martial arts because they're just trying to save time people do these things because they are valuable in and of themselves and because people enjoy pushing their own limits people challenge themselves because they like to get smarter faster and stronger if your only goal in software is to make money i think you'll end up feeling pretty hollow after a while you'll eventually arrive at a place where you don't feel like you are challenging yourself properly like there's no forward momentum in your life even though you're making gobs of money challenge makes life interesting and worthwhile we thrive when we go past our limits and learn new things doing things the hard way makes you realize what's possible for you it opens up new horizons after challenging myself with the prospect of building a game engine i'm surprisingly not against using libraries or third-party code the only thing that has changed is the way i view using those libraries i have a better idea of what i am looking for in a library and i know which sorts of libraries will make me less productive it's valuable to program the hard way because it's the only way you can truly learn and grow it's supposed to take lots of time because that's how learning feels you aren't doing it for a quick win in the present you're doing it to become a more skillful person for the long run of your entire career how many times have you felt totally stuck in some programming problem you're trying to solve oftentimes the character of building an app or a game is such that you go through one big obstacle after another when you're stuck in the thick of solving a difficult programming problem it can oftentimes feel like everything hinges on your ability to get past it indeed this has happened throughout the development of my own game i got stuck figuring out how to use the gpu to draw colored squares onto the screen this week i got stuck working on an audio mixer based on a two second circular audio buffer on the mac platform when you're stuck it seems like everything is going to take so much more time than it really does but once you're past the obstacle it's surprising how quickly the various remaining pieces snap together this certainly happened to me recently i hired an artist to do an aesthetic overhaul of my games world and boy oh boy did he deliver he gave me this huge 200 tile sprite sheet and i had to somehow incorporate all of this new art into my game interestingly the hardest part of all of it was writing an algorithm to load the png file and to sample into the various tile and player character textures once i wrote that code the rest was smooth sailing and i had new graphics in the game after about two weeks of work the hard way is only hard at the very outset once you get past those initial obstacles you will be surprised with how productive you can become because i know my game engine inside and out it was very easy to integrate the new graphics into it once i had them loaded into memory i didn't have to fight with any third party libraries with closed source code i can't read often times in life you will struggle early on in order to reap rewards later that is the philosophy of programming the hard way struggle now so you can build the skills necessary to do great work and become even more productive later on so at this point you're probably following along and thinking okay ted that's great and all but i don't ever get any time to do any of this sort of stuff in my job why would this be valuable to me in a career where we never touch any of this lower level stuff and i have one word for you it and that word is confidence an uncanny thing happens when you come back for air after tangling with a sea monster or any difficult problem you become more confident in your own abilities things which used to seem scary to you no longer do and this is reflected in so many aspects of the way you carry yourself in the world i'll draw an analogy from snowboarding one of my favorite pursuits before i got into snowboarding i didn't quite carry myself with the same degree of confidence it's kind of difficult to describe but it's like i was less physical in some way i wouldn't have been willing to engage in a fight or even know what to do if i got into a situation like that now i'm not saying i want to get into a fight or in any way interested in that but before snowboarding i didn't have a way to understand how i might interact in a seriously dangerous situation and then for several years i did nothing but snowboarding and i intentionally put myself into some pretty hairy situations i've crashed on all parts of my body sustained some minor concussions witnessed my blood filling with adrenaline and my heart racing i faced my fears and walked away from it i've done a few noteworthy things but mostly had a good time and made some lifelong friends i can say without hesitation that snowboarding has made me a more confident person it changed me in a deep and irreversible way because of snowboarding i'm more situationally aware i have a sharper sense of how things work physically i carry myself differently i have experienced a similar thing with lower level programming after wrestling with writing a custom audio mixer i can more confidently speak about audio in apps and games this confidence immediately comes across when i'm talking to other people oftentimes it's like i'm having a totally different conversation about the topic because i now view it from a deeper level you can't fake confidence like this the only way to get it is to wrestle some sea monsters there's another wonderful thing about confidence it is a predictor of long-term financial success if you are confident in the way you speak about your domain of expertise people will want to hire you they will pay you more because they know you've got a greater chance of getting them to where they want to go i have no doubt that my experience in lower level game engine programming is a reason i was able to keep one of my more lucrative software contracting gigs longer than many of the other people on that team even though it didn't seem like it at the time wrestling that beast has made me more wealthy by making me more confident in my abilities confident people make more money tackling hard problems makes you more confident therefore programming the hard way makes you rich even if it doesn't seem like it at first so you've convinced me where do i start how can i do what you do well i would advise you to pick anything you don't understand deeply enough and dive deeper into it maybe you've been making iphone apps for quite some time and you've been relying on frameworks like ui kit or av foundation maybe you made a game with spray kit but want to dive deeper and understand how spritekit does its rendering using metal take anything you've worked on before and try to do something similar but without using a library or using libraries very sparsely let's take my game engine as an example earlier on i tried to make games with apple's sprite kit i found it fairly frustrating due to the lack of control you have and i wanted to make something better that's how i got introduced to handmade hero a youtube video series where casey muratory tackles the ambitious project of building a game and game engine from scratch casey taught me the basics of lower level game engine design and i eventually learned how metal works i now have a game which uses metal as its renderer on the mac platform and a game engine which could be the foundation of something like spray kit if i ever wanted to make something like that i took on a fairly ambitious project but you could start with some smaller goals if you want to here's an easy one if you have been using a client app for get source control try learning how to use git from the command line it's a small thing you can do that will give you deeper knowledge of how git source control works and learning it will make you way more confident when dealing with source control problems on your own team as a result you will be the go-to gal or guy who can wrestle with complicated and hairy source control problems when the need arises and your value will almost certainly be known when it comes time for the person who controls the purse strings to decide who to keep who to promote and who to cut you won't be among those who get cut you will be among those who get promoted because you can solve problems in ways others simply can't you don't really know what muscles you can build until you try to build them as it turns out the guy who wrote that youtube comment was wrong i have a game that isn't too far from being shippable and i don't yet have great grandchildren i'm very much alive and and still quite young better yet i now have an improved skill set i can use to tackle even more ambitious projects i have my own game engine and code i can repurpose for the next thing muscles get weak if you don't use them and it's the same thing with programming skills doing things the hard way gets your mind into shape and it prepares you to do rewarding and challenging deep work you don't do it because it pays in the short term you do it because it has long lasting benefits try programming the hard way just a small amount of time invested could make you more confident in your abilities confidence makes you more employable which increases your pay i can say with zero hesitation that the time i have invested has been worthwhile and it is responsible for taking me as far as i have gotten in my career i wish you all the best with your struggles and see monster slaying if you have a story to share about overcoming obstacles and programming just leave it below i'd love to read about it
Info
Channel: Theodore Bendixson
Views: 245,368
Rating: undefined out of 5
Keywords:
Id: Qf56xUKbx24
Channel Id: undefined
Length: 15min 42sec (942 seconds)
Published: Wed Mar 31 2021
Related Videos
Note
Please note that this website is currently a work in progress! Lots of interesting data and statistics to come.