Podcast Episode 5:

Podcast Episode 5: What Do We Wish We’d Known?

Writen by Ben Ehrlich
Oct 02, 2020

Today we talk about what we wish we’d known when we started programming and give some advice to people just getting started. Jake tells us about his misadventures with Action Replay, and we all discuss the plight of the game developer.

Podcast Transcript

This transcript is automatically generated. If you notice any errors, please contact the the guy who still thinks you should learn JavaScript.

Jake Rowen
…do things in Roblox and Minecraft, which is totally cool by the way, like that’s what you think would be fun, great!

Ben Ehrlich
Learn Java!

Jake Rowen
Or whatever Roblox uses I don’t actually know.

Jake Rowen
You have to learn C to make anything in Roblox.

Jake Rowen
you have to learn Algol 68.

Intro music plays.

Matthew Baptist
Hello everyone and welcome to this week’s episode of the summer tech podcast. Today we are joined by Steven Fink, the founder of summer tech and codedom. Ben Ehrlich, our wonderful tech director, and Jake Rowen Academic Director.

Jake Rowen
Hello!

Steven Fink
Hello!

Matthew Baptist
Hey, so to get us started off, have you guys sort of seen anything in the news about tech or gaming or anything that you’d like to talk about

Jake Rowen
Cyberpunk 2077. The creators of it, CD Projekt RED, said far out in advance that they were going to, like, this was going to be the game, where they would not have a big crunch, a big mandatory crunch at the end of it, everyone was going to be able to just work their normal hours, the entire time and then the game would come out, because crunch is really bad for everyone and it’s a really bad industry standard. And just very recently, they announced. “Yeah, actually, now we’re in crunch time everyone has to work an extra day of the week, and extra hours”.

Ben Ehrlich
Yeah, it’s, I guess it’s not at all unique to have an industry that produces things people love that does bad things behind the scene. I think it’s in some ways unique, how much people want to be involved and how much they’ll be willing to give up to be a part of that industry.

Matthew Baptist
It’s interesting how different game development is from almost every other software engineering job where it’s programming and software engineering almost have this reputation of being a really good job right now for good reason. And so people expect that carries over into game development and stuff like that and it’s just so not the case in that one subfield. Typically–there are companies that have really good work environments absolutely in the gaming industry but it’s just the overall trend is towards crunch days and low pay long hour.

Ben Ehrlich
It’s so easy to abuse people who so badly want to be in the industry, and when it’s so competitive there’s so many people who want to make games, and are willing to give up a lot to do it.

Jake Rowen
I’m really hoping–it seems like change is happening like at least at least the people at CD Projekt RED were like, “oh no. All right, we’re we really messed this one up”. Like, they were, they were trying, they like they at least felt like they had to say that they weren’t supposed to do that, you know, five years ago, they wouldn’t have even said that.

Ben Ehrlich
That’s kind of a low bar.

Jake Rowen
I mean, we’re moving in the right direction just not very quickly is what I’m saying. Video games are getting more popular I could understand that moving in the wrong direction,

Matthew Baptist
Well that’s an optimistic start to this podcast. Moving into our main topic of this podcast. I wanted to ask you guys what do you wish you knew when you started out programming or what tips would you give yourself now having done this for many years, when you were just starting out and whenever that was, there’s one thing that.

Jake Rowen
I think I really needed to know when I was starting that I just really didn’t get, which is when I was programming, when I, when I first started for honestly the first couple of years, like what the computer did to my code that made it run was this complete mystical process. And so a lot of code that I wrote only ended up correct through pure trial and error, and like very simple code would end up correct only through pure trial and error and I thought that that was just what programming was like, I thought, trial and error was just part of the programming process I mean it’s certainly something that a lot of programmers talk about it seemed like that’s just how it worked, but now that I’m a lot more experienced, the whole point of programming is that it’s supposed to be very simple to understand what the computer actually does with your code, you actually can understand things like how a for loop is actually interpreted. That’s not arcane knowledge that only the elders know that’s something you can actually just know and it’s not even that complex. I mean, it’s not the easiest thing to learn, but you’re way better off learning that than just assuming that the computer does some extreme calculus every time you make a for loop, and you’re better off just guessing every time you need a for loop. The thing that the computer does with your code is not magic. But if you don’t know the fundamentals, it may as well be, you’re gonna have a lot of trouble doing things with your code. If you don’t understand the fundamentals and then you’re also going to miss out on how to do things well, if you don’t know the fundamentals so everything that you’re doing is just kind of fiddling around until it magically works.

Matthew Baptist
You know sometimes you give that kind of answer and people will say okay I mean sure if I want to understand it but I don’t care about that I just want to be able to do it right so what’s the obstacle to just being able to do it if you don’t?

Jake Rowen
if you have that limited understanding of programming, you’re basically only going to be able to do things that someone else has already done, you’re going to be able to repeat the exact things that you were given as examples, and then maybe, mix it up just a little bit, depending on how much you’re willing to trial and error. But mostly, you’re not going to get very far. And I can really speak to that directly because I have gone through that exact process before I actually learned anything about programming. I decided that it’d be fun to use something called an Action Replay to alter the game Mario Kart DS. The game Mario Kart DS seemed like a fun game to just like make little mods or hacks that would change the game a little bit to make me faster or slower bigger or smaller something like that. Action Replay is a device that lets you add some code in to the game that makes it run a little differently, it’s it’s a cheating device.

Matthew Baptist
I want to say say that summer tech does not condone cheating.

Jake Rowen
Cheating is the wrong word you know it’s not like it wins you the game, it does weird things to the game that I thought were funny was really the goal,

Ben Ehrlich
It targets and modifies things in the games memory,

Jake Rowen
Maybe maybe a modding device might be a more modern way of describing it. Anyway, before I knew anything about programming, I was looking at these Action Replay codes that already existed. And it was a bunch of complete nonsense to me, but I decided, you know I really wanted to try doing some of my own stuff. And so I just stared really really hard at every example code that I could find. And I just stared at it and stared at it, and then I was like, Okay, what if I change this little bit to this thing. And then my game would crash, I’d be like okay not that. Alright, if I change this a little bit to this little thing, then the code did absolutely nothing and nothing happened. I did eventually make codes that didn’t exist, my crowning achievement in that was I made one where the cart was driving under the track instead of riding on top of the track, and that was my crowning achievement.

Ben Ehrlich
Well done. Very good.

Jake Rowen
There were tons and tons of codes that I looked at, and I was like, I have no idea how they did anything like this and if I wanted to make anything like this I will literally never be able to do that.

Jake Rowen
If you had learned how to program first, you wouldn’t have been completely lost you would have understand what was going on and how to make new changes how to do things that weren’t already provided to you.

Jake Rowen
And then I would have been able to do those really fancy codes that the good people were doing, where they, they didn’t just affect their game locally on their own cartridge but they could go online and have codes that affected online play as well.

Ben Ehrlich
Well…

Jake Rowen
And then I could have driven under the tracking online way and confused people.

Matthew Baptist
And now we’re really getting into the territory of things that summer tech does not condone

Ben Ehrlich
SummerTech: Get banned by Nintendo.

Matthew Baptist
We’ve gotten banned by Club Penguin before it’s…

Jake Rowen
We’ve gotten banned by Pokemon showdown before.

Matthew Baptist
We did get IP banned, but that wasn’t because of any bad conduct that was just because we had so many people trying to play the game at the same time it looked suspicious. Ben, did you have any any kind of similar experience when you were starting out programming, with, maybe not understanding exactly what it was the computer was doing when it was reading your code.

Ben Ehrlich
Um, yeah, but I wouldn’t say for me that it was necessarily a bad thing. I think the trial and error and fumbling around period for me was very valuable. I’m someone who likes to learn by making mistakes, and for me that experience of just not knowing what I was doing until I knew what I was doing–I thought it was pretty valuable for myself as a programmer and as a debugger and as a model citizen.

Matthew Baptist
Does any web developer really know what it is their codes doing?

Ben Ehrlich
Matt, that’s very disrespectful.

Matthew Baptist
I feel like that is actually like a bit of a fundamental difference, like the, the kind of programming that I do now, incentivizes knowing exactly how the computer handles every single part of it, because I program very often at a very low level, whereas if you’re mostly doing things like web development, you’re not really incentivized to understand exactly how the interpretation and then compilation pipeline works for that.

Ben Ehrlich
It’s a very long pipe.

Matthew Baptist
It’s too many layers of abstraction it’s not worth your time.

Matthew Baptist
Right. You know I said that is a bit of a joke but there is sort of a reality with specifically web development, just that the environment and the technologies that you’re using are so, so complex and built on top of each other. It really is hard to unpack every single level of the code you’re writing, there is a some amount of okay this part is just there because I need to use XYZ library to make this work, you know, and you don’t necessarily always unpack that because it’s changing so fast and it’s always being updated, Steve, what are the common questions you get from kids who are just starting out or maybe have done a week of something like summer tech or coding and don’t know what comes next.

Steven Fink
Well, you know, being the elder statesman of the group. I don’t really get that a lot from kids I get it more from parents. Parents think they know what they know, or they don’t know, and what I get a lot is “how long should they be on this language before they switch to this language?” and then I always have to explain well, “Why would they switch?” And they just assume well, this is what you do right? I mean, “this is the beginner language and this is the advanced language.” And so you have to explain a lot of that and explain that, you know, we’re not here to teach languages, we’re here to teach programming. You’ll learn languages.

Matthew Baptist
You know, and I actually think that’s something that fits really well into our topic looking at it from the programmer side I mean I know when I was just starting out, a lot of beginner programmers put a lot of emphasis on the language that they’ve learned and then, “Oh, well how many languages do you know?” and stuff like that. It seems to be a common question among people who know a little bit about programming but not that much. Whereas, once you get a bit more experienced you realize it’s not about, oh I can program in 15 languages, it’s about okay what can you do in those languages are you not just a beginner proficient, can you do you understand the libraries can you apply them, can you use them for their strengths and things like that? It’s really easy to learn how to write code badly in a new language learning the, the actual tools of the trade and new language is what’s really important.

Jake Rowen
I mean, depending on the language it’s not necessarily that hard but that’s really what people want from learning a new language. You know I’ve spent about 25 minutes, learning Perl, and just from that because I have such general programming knowledge. I can accomplish many tasks in Perl, my code would just be very unoptimized for Perl, and it would look like code from another language that was hastily put into Perl, because that’s what it would be. I’m not a Perl programmer.

Ben Ehrlich
Why were you working in Perl?

Jake Rowen
Someone asked me to write a quick program in Perl, and that someone was a professor but, you know, it was in a class. I don’t know I said someone. A class asked me to–

Ben Ehrlich
Some mysterious person.

Jake Rowen
Yeah, a class asked me to make a quick program in Perl because the point of the class was showing how easy it is to write in a new language, if all you have to do is write like one program once. Yeah, honestly it was trying to explain this point that we’re talking about right now. It was very relevant

Matthew Baptist
Ben, do your friends not ask you to program quick programs in Perl?

Ben Ehrlich
I have never been asked to program in Perl, I’ve been asked to program in Ruby, to which I politely declined, but never in Perl. Nothing against Ruby. I was just not gonna help that person, write scripts for RPG Maker.

Matthew Baptist
Across the, the four of us we’ve all programmed in a number of different programming languages, then built experience in, I think different areas of strength among us for someone who’s just getting started. What would you say maybe are what they should be looking for in a programming language, like what kind of clarity could you provide to them about why they should potentially consider one programming language over another?

Ben Ehrlich
Let’s fight about typed versus untyped languages.

Jake Rowen
I think there are, in my experience and opinion, two relevant things for a starting programmer. To that end, one of them is if they’re learning to code for only for some particular purpose, like they’re learning to code, specifically because they have spreadsheets that they need to figure out or they’re learning to code specifically because they want to learn how to do this one particular thing in unity, but they’re usually a 3d modeler like they, they need to learn how to do this one thing. In that case, you should learn the language that is meant to interact with the thing that you’re that you need to do. If that’s all you’re going for. That sounds like it should be a rare case but it’s actually more common than you might expect. The second thing that’s relevant, assuming that the first thing is not relevant in terms of like educational value, you’re better off learning, whatever programming language seems intuitive to you. And a really good test for that, is to look at code written in that language, and if it seems orderly to you–you don’t have to understand what it’s saying or doing–but if it seems like something that makes you feel like you could be comfortable with it, just visually, that’s a pretty good sign that it’s language for you. And I would say, for most people, that ends them up with Python. And then for some people that ends them up with other languages that have specific structural components that Python doesn’t have.

Matthew Baptist
I think you’ve just scared, everyone away from JavaScript with that description.

Jake Rowen
Pretty much. I really have a hard time understanding why someone would want to start programming in JavaScript, unless they’re going for the particular use case of JavaScript to the first point.

Ben Ehrlich
So for me, there’s two different things. One: am I the one who’s going to be teaching them that language, in which case I will teach them JavaScript, or are they just looking for general advice, and people who have come to me for general advice, have generally been game developers. So, I went to an art school. And we had a game development group. And we had speakers come in, some of whom were programmers, some of whom were designers, and one of the programmers said, “yeah I didn’t go to school for code, but I said if I want to be a game developer I have to learn a programming language. And so I learned C, and I think all of you should go and learn C,” and that was, I thought maybe the worst advice you could give a roomful of art students.

Jake Rowen
Yep.

Ben Ehrlich
Because of what C is and what C is for. For the people in that room, I would have said, maybe you learn JavaScript just to introduce yourself to the concept of programming. Maybe we learn C sharp, because it’s used in so many game development tools, or just learn Java I think that’s a great holistic introduction to real programming, and it will set you up to better understand the ecosystem of programming in general.

Jake Rowen
There’s definitely… That that person who said that that everyone should learn C that definitely sounds like survivorship bias to me. For those of you don’t know, survivorship bias is a particular kind of fallacious bias in which someone who beat the odds is unaware of the fact that what they’ve done is unlikely, and so recommend that people do the same thing that they did, or think that what they did was the right thing to do. Common example, it’s extremely unlikely that you will ever win the lottery, but someone who has won the lottery might suggest it to you, because from their perspective, it looked like a good rational decision.

Matthew Baptist
And so in this context, someone who learned C and it didn’t necessarily kill their desire to get more into game development would recommend it as a programming language whereas, that might not be the best first choice if you’re an art student or interested in like game development or game design for the creative aspects of it as opposed to the coding.

Jake Rowen
Yeah.

Matthew Baptist
Which to be fair, there are enormous creative opportunities on the coding side but that’s not necessarily what someone who’s coming at game development with that inclination would be interested in potentially the creative coding sides of it. A question that I get a lot or an obstacle that I had when I first started programming is, I learned the fundamentals of coding and I completed, what we would call now modules one through five, you know your fundamentals, and I was all excited that I had this knowledge of how to program, but what I didn’t know how to do is I didn’t know how to turn that into something useful. What I what I didn’t understand–what seemed like kind of this Herculean task is, okay, well, “how do I take these fundamentals and actually build Microsoft Word or how do I build something that actually does something?” How do you–what would you tell someone who has just starting to learn their basics about how to sort of fill that gap into the world of the more practical like how do they take their knowledge and start to apply it.

Jake Rowen
The simple answer from my perspective is, I remember being the exact same position. I remember being like, “alright, I feel like I know all these fundamentals,” but when I look at the programs on my computer, I think I have literally no idea how these were made right like how, why is there such a disconnect between me knowing all this good stuff, and the programs on my computer being something that I feel like I could never make, pretty late into my knowledge of programming like I knew some more than the fundamentals and I was still feeling that way. So I just went through and decided to look at just a program that I thought was cool. That was open source. And then I went to their GitHub page and just looked at their code. What does that mean for a program to be open source, a program that’s open source is a program that has all of its code, and similar assets, open to the public. Anyone can look at them. So, the classic example would be most distributions of Linux or open source, you can go look at all the code for them. In my case, I think I went and looked at the code for GIMP, which is like an open source version of Photoshop.

Matthew Baptist
I knew you’re gonna say I don’t know why that was the program that came to my mind, but I just knew you were gonna say GIMP. Sorry, go ahead.

Jake Rowen
So you know that’s a pretty sizable program that does a lot of stuff. And it seems very well made and complex. So I thought, all right let’s see how they did that. And the answer that I found is mostly the difference between what I knew how to do and what was in GIMP was GIMP had a lot more of it. There’s a lot of lines of code that make up GIMP. That’s one thing. And then the other thing is, what I knew was general programming stuff. To make something that is like a whole industry level piece of software what you need is a bunch of libraries, and to build on top of existing tools that do the stuff, like, graphics, and making menus and interacting with the Windows File System, you know so that you can save your files in a convenient way, all that stuff is just libraries, you can learn that are not that complicated once you understand all the fundamentals, or at least not that complicated to use. If you wanted to make your own that would be complicated. Once I realized those two things. My confidence actually went way up, and now like I feel like in the right circumstance, and given enough time to look all the things up, I feel like I could make a program that size and that kind of industry level or at the very least work on a team that is doing that, because those programs are big and it would take a long time to write one by yourself.

Matthew Baptist
There’s a–just sort of building off of what you were saying they’re one of the concepts that you learn when you’re writing code, are about code reuse and things of the form of functions and classes and code that you write that’s designed to be reused over and over again. And I think one of the sort of the little leaps in understanding you start to get is how most of what is built commercially and commercially and professionally is just built off of many of those kinds of libraries which are just code that was written to do some of those common tasks as building blocks designed to go into larger pieces of software and you’re composing more and more complicated programs out of those things that exist, and Ben I’m really interested to hear your input on this because you are someone who’s built a lot of things from scratch that are commercial software that’s out there in the world and being used by people right now.

Ben Ehrlich
Yeah, I guess I came at software, in a very different way, because I got into programming because I was interested in game development so for me it was never, how do I build this, it was just, what should I build. The challenge was “I don’t know what to do” not, “I don’t know how to do it,” partly I guess just because I was cocky and overconfident. And there’s, I think a huge amount to say for that as a very young programmer, not feeling inhibited.

Matthew Baptist
How did you, I guess the question is, did you feel like there was a gap between the fundamentals that you’ve learned, and then sort of the software that you saw out in the world that you would potentially want to build and then what would you say to someone to kind of get them in the right direction of filling that gap in their knowledge and getting to the point where they’re building things they want to make?

Ben Ehrlich
I guess I always felt like, I might not have the skills of these people, I might not have the know-how to build something as elegantly as them. But I do have the creativity. And I know that I can leverage that creativity to build something that has the functionality of what I want to build. And I guess I would say to people starting out, don’t feel daunted by like what Jake said, something that feels magic something that seems opaque. Don’t be afraid to just build something that works, regardless of if it feels inelegant right now.

Matthew Baptist
Is there anything sort of I’ve missed in how I’ve steered the conversation that you really think is important advice that you want to give yourself, eight or 10 years ago when you were just starting out programming?

Ben Ehrlich
Don’t do it.

Jake Rowen
There’s always the classic, “And remember, have fun with it!” I could have used that at certain points there.

Matthew Baptist
In what way was young, Jake, not having fun with it?

Jake Rowen
I quickly figured out that I would become a better programmer if I enjoyed each step of the way, but there was a point there when I was just frustrated and just trying to not be frustrated instead of trying to proceed. I guess.

Ben Ehrlich
It was the opposite for me, the advice would be “it’s not always going to be fun.” And you need to be okay with that.

Jake Rowen
So the the goal–if you if you put those two pieces of wisdom together–the goal is to have fun with things that aren’t fun. And if that’s not programming I don’t know what it is.

Matthew Baptist
Thank you guys so much for tuning in to this week’s edition of the summer tech podcast. If you would like to register for classes or read more about any of the things that we offer you can head to www.coditum.com.