 What's going on YouTube leap right here with dr. Developer today? We're going to talk about why software development is a creative endeavor Let's go Okay, so most of the time when I tell people I'm a software developer One of the first things that they say is wow you must be really smart You must be really good at math and I just I don't feel like I'm much smarter than your average person Although there's a caveat. I do meet a lot of software developers. So my my worldview may be skewed But I don't I don't feel any saw smarter than your average person and I'm not really into math or sciencey type stuff I'm not even super detail-oriented I wanted to be a musician when I was a kid. I've been playing music since junior high school, you know which is Mathematical I guess I mean I play drums. So it's a lot about time signatures and subdivisions and things like that but for the most part Music everyone can agree that music is a creative endeavor But when they think about software development, they think of it as being all about logic and math and I don't think that's the case sure there's a Mathematical logical component to it. I need to be able to create logic structures and follow that but for the most part I Feel like it's a creative endeavor at least these days Back in the day. I didn't used to be that way. I mean in the 50s and 60s They were creating programs for Computers to try and compute how much fuel I'm gonna need to get a hundred ton rocket out of the earth's atmosphere and into orbit Okay, you know, that's that's very math oriented and very science oriented and a lot of the people who are using that Software was were scientists and mathematicians And the program programming languages they were using they were making it up as they went along So most of the time they're writing an assembler And so they're very close to the metal These days computers run everything I mean back in the day computers took up an entire floor of a building Right, so a computer would be as big as one four thousand square foot floor of a building so Wasn't really practical, but now my phone is Hundreds of times more powerful than that computer and it sits in my pocket And so computers kind of run everything from e-commerce sites for business to ATMs to even my thermostat in my house is I can control it with an app on my phone I can control my lights in my house with my phone and So there's a lot more people who are not science and math nerds using computers these days and So they need to be more usable for people who are not math geniuses, right and And One of the things that we think about when we think about programming computers as software developers We think about the languages that we're using and we're not programming in a similar anymore There's probably not a lot of people programming in C unless you're writing like trading apps or Video games or something like that, but most people are probably writing in a in a 4g a language like See like C sharp or Java. They're writing in a fourth generation language That is, you know, three or four levels are removed from the actual metal and so It's a much more creative endeavor today than it probably was back then So if we think about what you kind of need to be a computer programmer now versus then Let's talk about a few things that you probably need One of the things that I think you need is you definitely need is To be able to abstract think you need to be able to like visualize chunks of functionality and pieces Especially you start talking about things like microservices, but even without microservices We are talking about components that interact with each other and This one talks to this guy and sends this message and is expecting this message back and These things have always been there at least in my lifetime It's always been that way when you're programming you need to be able to think five six seven levels deep and So when this guy sends that message to that guy That guy is going to take that message and send it to this component over here Who's going to calculate some value and send it off to him and now we're three four levels deep And I need to be able to keep track of all that so being able to think abstractly is a huge skill for for computer programmers It's also one of the things that I think is most annoying because most people aren't Aren't doing that for a regular daily job. So it's Not uncommon for someone to come to your desk and say hey, man Can you take a look at this and your six or seven levels deep in this abstract web of things that you're thinking about? So being able to like put that aside and Help them with their thing and then come back and get seven levels deep again It's a major It's a major problem but I digress So the other thing that you need to be able to do is you need to be able to think About a business you need to be able to think about business problem-solving You need to understand how the business works and how to model that abstractly in a piece of software I've always said if you can understand the flow of paper in an organization Then you understand how the organization works. So if we think about like Back to the old way of doing things before computers A customer would put in an order and someone would write it up and they would send that to the order Fulfiller and that order for filler would take the order to find all the things that go with that order Package them up send the Mac out to the customer And it happens a little bit that way now. It's just all computerized But you're thinking about the flow of paper in an organization helps you be able to model business and Understanding how business works and how business solves problems will make you a more effective software developer and That is a creative process as well because you need to be able to think about How business out in the world is working and be able to immediately change Directions if the industry changes or if some big news hits or some big new regulation hits Being able to change direction Leads back to that being able to abstractly think about something and now I've got all these Six or seven pieces and oh this one won't work anymore. So we'll just change it out with this That's being able to visualize everything in a business process and being able to swap out pieces or Figure out how these two pieces should communicate The other thing is critical thinking skills and this is probably one of the ones that I think is Most lacking in most people. It's critical critical thinking. So You need to be able to think critically about what you're doing How should this work? How does it work? Do those match up? What if it doesn't work that way? How can it break? What if it's not what the business needs even if it's what they asked for what if it's not what the business needs? because you need to be able to talk to the people who run the business the day-to-day of the business or the day-to-day of even a department in the business and extrapolate or at least extract from them How they do their job and how their their job or their piece of the Organization works and be able to fit that into how the overall organization works and you need to be able to think critically about that you need to be able to Doubt that you need to be able to say well. What about this? This comes to not only Extracting requirements from people When I first got into the business one of the things that I was told early on as far as gathering requirements is your two Two best friends in this world are the words. What else? that's That's still helpful, but it's not the only thing really You need it to be able to ask what if what if so I'm writing a piece of software that I want customers to be able to come in and order a record Okay, what if the record they want isn't in stock? What if we don't have that record? How do we handle that? What if someone else buys the last one of those records? Right before that customer How do we handle that situation? those sorts of things Thinking critically about the business process and about what you're going to be building Is one half of that but also being able to think critically about your software in general like In this goes to like testing like unit testing So I have a method here that calculates these things and takes in two variables Well, what if those one of those variables is null? What if one of those variables is a hundred million? What if one of those variables is a negative number? What if those very one of those variables is supposed to be a string, but it's an integer Coming in as a string whatever the case Those sorts of things are things that you need to be able to think about and be able to constantly Be skeptical of and that will make you a better unit tester and a better and better at dealing with the Organization, which brings me to the other thing that you need to have is people skills You need to know How people think at least to a certain extent you don't need to be like a psychiatrist or or a Psychology major you just need to be able to understand how people are going to use your software You need to understand how they do their job today And you need to understand How what you will be building will help them in the future One of the things that people get all up and arms about a lot of the time is They believe they really people really believe this that I'm going to build a piece of software that puts them out of work Never in my 23 years of building software has anyone ever been put out of work by a piece of software that I built ever Now I have actually built software that made that person's job easier I Have made it so that they don't have to deal manually with every order that comes in Only with those exceptional orders So not only do they not have to deal with the mundane routine things that the business do does But they get to actually deal with the interesting things like This is an exception to the rule of our business I have to manually get in there and handle it as a human being so You also as a software developer, you don't work alone most of the time You work as part of a team even like me. I work remote As a matter of fact, I think just about everybody on our team is remote. I'm trying to think of There's only a couple of people that actually work In an office. Everybody else works remote because we travel a lot so I I still have to deal with my team all the time. There's slack. There's text messages There's emails going back and forth all day long talking about what we're building and what we're doing and You need to be able to work with people from diverse backgrounds and people from who didn't grow up like You grew up and people who don't understand The software the way you understand it a lot of the times I found that to be super helpful when I'm working with someone else and we go to get requirements I almost never I can't imagine a ton It's been a little many many years since I went to go get requirements without another software developer with me Because inevitably I will come out of a requirements gathering session and think I've got it These are the 17 things that they need and I'll go and start discussing them with the other software developer Who was in the meeting with me and they'll go that's what you thought they meant. I thought they meant this And be like, oh, that's quite different than what I was thinking We're gonna need to put a pin in that go ask them again ask some more clarifying questions So it keeps you from building the wrong thing now. How does this all come back to being creative? So Let's take musicians as an example because it kind of fits the entire gamut, but it applies to all creative endeavors First of all, you're creating something from nothing. Okay You've got a business who Sometimes you're creating something to replace something else, but for the most part you sit there with an a blank open text editor and you start writing software But it that's akin to like a painter with a blank canvas and Or a composer with a blank sheet of sheet music, right? You're creating something from nothing and all art has constraints as a matter of fact one of the things that I Do a lot of agile coaching as well and one of the things that I always kind of turn Agile people on to our software developer people in general Is a book called managing the design factory by Donald Reinersen? And basically it's about how do you manage creatives? How do you manage people who are working on stuff? That is creative and is therefore by its very nature Non-deterministic meaning I don't know how long this is going to take. There's no way for me to tell you How long it's going to take for me to paint a painting There's no way for you for me to tell you how long it's going to take me to write a score But and it's the same way with software. There's no way for me to tell you how long it's going to take me to build this piece of software Best little side story best meeting I ever had we were meeting with a company that wanted a piece of software built and it was first startup and So we're in the meeting and there's probably five of us from my consulting company and two or three of them from this startup and They really really wanted an estimate they really really wanted a quote of how much it's going to cost and So one of the people God bless and man asks So what else is out there that's like this? What other piece of software does something similar and they were like nothing nothing There's nothing else out out there in the world like this and all this is a totally new thing And he was like well if nobody's ever built it before how could I possibly tell you how long it's going to take to build it? That's beautiful Thank God for him for asking the question, but Getting back on topic creative endeavors are generally not Deterministic and software is non deterministic. I don't care what anybody says about if you ask any software developer What's the bane of their existence besides computer bugs? It's probably going to be Estimating that's one of the things that they suck the most at it's one of the things that it's just hardest thing to do Because you just don't know you just don't know how long it's going to take And so that lines up with these other creative endeavors and so basically you're making something out of nothing You need to be able to creatively think about those those problems that you're trying to solve in the business Which mean bringing in those people skills to be able to talk to people and say hey, I'm having this problem I can't figure out how to model this This business process in my software and you need to be able to talk to them and have them give you feedback on How that should actually work and then be able to translate that into some for GL somewhere like C sharp or Java You also need to be able to Understand those business processes as they give them to you and understand the flow of paper even through a Part of an organization if you're trying to write an accounting system or you're trying to write An order entry system you need to understand how they would do it if it was on paper And so getting those understanding those business Problems that they're trying to solve and getting them out of a person takes those business problem solving and people skills and critical thinking skills and Puts them all into one creative bucket. You need to be able to creatively think about that software and I'll leave you with this Like I said, I play music and I'm in several different bands and It could be because of the people that I hang out with but I kind of have two sets of friends I have a lot of music friends and I have a lot of computer programmer friends and The Venn diagram of how much that overlaps is actually pretty large It's surprising to me when I go out and just I meet a bunch of new programmers and I tell them that I'm a drummer we immediately start talking about music and It's amazing how many times I find that this computer programmer is a Musician is a place keyboards or place guitar or paints or draws And I think that that goes to the very center of what we're talking about here and that is Building software really is a creative endeavor that doesn't mean that it's completely technical But there is a major major chunk of building software at least in today's world That is creative now is all software development creative Don't they still have to try and calculate how much fuel they need to get a SpaceX rocket out into the end of the orbit? Yes, yes, they do And I'm sure they did a lot of big math formulae To try and figure out how to land a SpaceX rocket back onto a pad. That's that's a given but There's gonna be some creative aspect of that as well Not only do you have to understand physics But you have to be able to take those physics and apply them to the real world and understand that It's not necessarily going to be a computer. That's flying this rocket. We're not Creating a rocket so that we can put a rocket into outer space We're creating a rocket so that we can put people in outer space and we can have people Driving these vehicles into outer space So they need to be able to be understood by astronauts by Pilots And they need to be as simple as possible. So there's a creative aspect of building that. What about things like? machine learning Right, you talked any talk anybody. I've talked to his any good machine learning Is I think some of the smartest people I've ever met And they are super into math and That's that's fine But one of the better Machine learning people that I know is also a really killer guitarist and singer and So I think that when you're talking about machine learning, you're trying to teach a computer how to learn you're trying to teach a software program how to learn and So you need to be able to understand creatively how the human mind works how? Humans solve problems because that's what we're doing. We're teaching computer programmers a computer programs how to learn like human beings do so you have to start with the understanding of how human beings learn and That is a very abstract and creative thing What about Big data like data analysis, right? Well, you're not just analyzing numbers, right? If I were going to go back and analyze every order that was ever placed by Amazon ever That's a lot of data But I'm not gonna I'm not going to analyze that data just so I can figure out how many clock radios were ordered. I Want to know what those trends are and I want to be able to apply them to the world so when I start putting together my formula for how I'm Analyzing that data how I'm going to group that data. It's a very creative thing of How can I get the most bang for my buck from this chunk of data? What can I give the business? How can I understand the business's needs to understand the? The analytics that I'm going to give them to help them make better business decisions so Yes, I think all software has a creative Component to it. Are there some pieces of software or some endeavors in software that are more creative than others? absolutely People who are does you know computer web designers who are designing webpages That's a much more creative endeavor than the people who are creating API's But at the same time Creating the API I still think is a creative endeavor because you it's even more creative because you have to be able to visualize What that UI is and what it's going to do with the data that you're building you're applying so you can build an API That's easy to use right? And even when we get into Identity management, we have to think about how are these people going to be wanting to log in? What's going to make it easier for them to log in and still make it secure? So yes, I think all software is a creative endeavor To certain degrees right? But yeah, I just I just want to put this out there today. I've been thinking about this for a while And mostly it starts with everybody telling me that I must be a super smart math genius because I'm a Computer programmer and I just don't feel like that's the case. I feel like I use more of my creative muscles during the day writing software Then I do my real math And logical or math and science he type things definitely logic is as part of it obviously, but That's kind of the reason that got any computers is so I didn't have to do calculating They can compute that stuff. I don't have to do math anymore All I need to know is what the formula is and the formula is usually based on real-world things so Yeah, just wanted to talk about this and I hope this is useful for everyone Hey, so if you found this useful or if it doesn't apply to you make sure you leave a comment below If you like the content make sure you subscribe to our channel hit the little bell icon right next to it So you get notified we release content every Tuesday and Thursday, so Thanks for joining us today, and we'll see you next time