Coding 101 19 (Transcript)
Shannon Morse: Today on Coding 101 we heard your feedback and we decided to bring back somebody very special from module one, stay tuned.
Netcasts you love from people you trust, this is TWiT! Bandwidth for Coding 101 is provided by Cachefly, at cachefly.com.
Fr. Robert Ballacer, SJ: Hello and welcome back to Coding 101. It's the show where we show the secrets of the code monkeys. I'm Fr. Robert Ballacer...
Shannon: And I am Shannon Morse and for the next 30 minutes, we are going to get you all learned up on somebody who is very special and who has a very special place in our hearts.
Fr. Robert: He does, he does. Yeah.
Shannon: We missed him.
Fr. Robert: We did miss him. Shannon, you were talking about him earlier, a man we hold near and dear to our hearts, we did listen to you and we know that you missed him. You may remember from this.
(*Slow and sad piano playing while this Power Point is displayed* Lou Maresca: Code Warrior Extraordinaire @LouMM
Coding 101 Episode 00 - 08
He's totally NOT dead... But he reminds you never to forget... Your C# Lessons)
Fr. Robert: That's right ladies and gentlemen, we welcome back to the show Mr. Lou Maresca! Lou, it's so great to see you!
Lou Maresca: Great to see you guys, how's it going?
Fr. Robert: Pretty good. Now Shannon, you remember when we first started the show right?
Shannon: I don't know, that was a long time ago.
Fr. Robert: I know, we're on like episode 19 or something like that.
Shannon: Yeah, I remember.
Fr. Robert: And one of the things that we decided was that we wanted this sort of 'wild card' period in between the modules because we didn't want to jump straight from one language to the next-
Shannon: Right, we wanted to give you some breathing room. So we decided to do two episodes in between each module where we interview really interesting people. People that are programmers and that's what they do for a living.
Fr. Robert: Exactly, and the idea was to give people who are watching the show a little of incentive, you know? Let them see what you actually can do once you get learned up, and once you are a code monkey, and once you are a code warrior. So that's why we've asked Lou to come back onto the show. Because Lou, when you were here being our code warrior- And by the way, you were fantastic. You were absolutely the trail blazer for what the code warrior does. -We never got a chance to talk to you about how you got into coding and why you chose the languages that you did. Are you willing to talk to us today?
Lou: Oh yeah, definitely. It depends on what time you've got though.
Fr. Robert: Well, we've got all the time you want. Lou, let's start off with this: What's your background? What got you into computer science? What got you into programming? Why did you decide to head into the software, the computer science side of the computer revolution?
Lou: So, back in the '80s, I think my first thing was the Atari 2600. I loved the Outlaw game at that time, which allowed me to do multi-player and so on. But from there, I found that you could put these programming cartridges into this thing too and I was pretty young at the time so I had friends that would go and bring them over and they would throw these cartridges that contained small pieces of code on them and run them on the screen. A little bit later, I think it was 1984, but it was of massive relevance to me because that's when my dad won an IBM 5170 I believe. At the time, even as an organic chemist geek he thought, you know I had this thought that this new Apple PC came out called the Apple Macintosh and I think it's probably a little bit more user-friendly than this IBM PC. So he traded it in for I think it was like around $25-$100 at the time, and he traded it in to get this Apple Macintosh. I think it's back behind me right now, yeah you see it back there?
Fr. Robert: Is that the 2SE or...?
Lou: No, that's the original right there yeah.
Fr. Robert: I'm saying now, don't let Brian touch that. The last classic Mac he touched, he broke.
Lou: Yeah, and it still works. It's kind of crazy. But at the time, my dad had gotten all of these 3 1/2 floppy disks, you got a whole bunch of them along with Deja-Vu, Airborne, and Typing Tutor... Man, I was hooked on that thing.
Shannon: Oh my gosh, that reminds me of when I was a little kid... My dad also got me into programming and into being on a computer day by day in the '80s with all of his 3 1/2 inch floppies.
Fr. Robert: What language were you programming in, Lou? I mean, way back then.
Lou: So back then, it was the Mac Basic. I think they had Mac Basic, Mac Pascal, and then some other development system which was a special board you had to plug into the serial port but at that time it was Mac Basic and so I started learning Mac Basic from the ground up. For many years after that I did Mac Basic. I had Apple 2GS after that, from there I started doing bolt in board systems from the 2GS and then Prodigy and AOL and scripting for them and from there I just kept building up. Then I think that it wasn't until the '90s that I actually got my IBM PC. At the time I think it was 46 that was running in the 2GS and I think they offered the Pentium chip so I started getting really obsessed with hardware and how fast things were and bus speeds and horse power. Because I found that the modems were actually getting faster than the PC that I had and so I was like, it's time for me to move off of this thing and move onto something that will match these current things.
Shannon: So were you in school at the time?
Lou: Yeah, well I was in what they called middle school at the time, which was just like 6th or 7th grade. Then as I move on to high school I started understanding hardware and understanding that it was a big ecosystem of building PCs so that's when I thought, it's time for me to jump over to IBM so I can start building stuff and changing I/O cards and all that stuff. So that's where I found out that Basic was also transferable over to that too, so I took some classes there. Even in high school they offered some electives that were based around this sort of thing and I started doing Basic. I think my first application in Basic there was a dice game that actually was a console app that would roll the dice on the screen and randomly choose numbers and stuff, it was pretty cool.
Fr. Robert: Yeah. Now do you remember when you first started programming for the PC- Like you, I was drawn to the PC because I liked the ability to change the hardware. I loved working with my hands and it was one thing to be able to program something, but that tactile feel is like none other. -But when you were writing those first programs, do you remember what were the biggest challenges for you?
Lou: So the cool thing about Basic was, it was more like a trial-and-error. It was like procedural meaning, you just wrote the code, you tried it out, watched to see if it broke, then you'd go back and fix it. And so I would put little statements in there to say if an error code got returned from the system, I'd go and do something else. So it was mostly just lots of trial-and-error, but in order to do other things like talk to hardware it became very complex because then you'd have to work with IRQ's, interrupts and all of this other stuff that had to do with the operating system so I didn't really understand any of that. It wasn't until actual college that I actually had to start learning that stuff, but yeah that was the most challenging part. I got limited by what was on the screen and when I wanted to connect to BBS's or do other things over the modem, or the internet I guess, at the time, I had to learn to program against Dzire key ports and IO ports and stuff. It was a little bit over my head at that time but one thing that I also started in high school once I started building PCs was that it was actually cheaper to get a wholesale or a vendor's license so I got one of those and my good friend Adam Jackson- Which some of you might know him, he's the founder of the Doctor's on Demand Program with Dr. Phil's son. -He and I started building PCs for little companies in town, Mailbox Etc., and I built some for Money Mutual of New York. That's where I just started getting into hardware in general and when I went to school- I actually went to school for electrical engineering. -I got into VLSI, I don't know if you guys know, it's Very Large Scale Integration, building processors on the screen, VHDL, which is a hardware language and I went to Co-Op at Intern at Intel where I did spice simulations and stuff. Then when I got back to school, I really liked the fact that I could simulate things on the screen. So I could simulate physical hardware on the screen using these simulation programs and so I thought, well what would it take for me to go and get Computer Science too? Because then, I'd have the ability to program and I found out it was only an additional semester. And at that time, they didn't even have computer engineering. So I was like, okay well I'll go do both, and I was going to do minor but then I found out that if I sent another semester, I could actually get both. So I got Electrical Engineering and a Computer Science tutoring, but I did some really cool things that really got me into programming there. I got to do SAE Car, which was- I don't know if you guys have heard of SAE Car. -But basically, it's like the automotive engineering society and they got to build a car and I got to do all the electronics for the car-
Shannon: Oh, that's cool.
Lou: -Yeah, but I got to do all the electronics for the car and I got to program all of the accelerometers and everything in it. At the time, I think they had these small accelerometers that were just starting out, so we built a lot of things for that. I even got to do something called Pumpkin' Chunkin' if you guys have ever heard of that.
Fr. Robert: Yes, of course.
Lou: I did that and that was awesome because I got to build a rail gun. The first rail gun in the competition but we could never get it out of the laboratory because it had so much current that it would just fry the pumpkins and so we would just have like pumpkin pie.
Fr. Robert: Wait, this was like a sabo enclosed pumpkin that could be fired down a rail gun?
Lou: Yeah, it was like on this little carriage that was made of carbon, so it wasn't conductive and we would put this pumpkin on this thing, it would be this massive copper rail. We spent a couple thousand dollars, the university actually gave us money for it. But we never got to take it out, like I said, there was so much current. We had like the first battery series system, which is all these boat batteries plugged together and it was just frying these pumpkins, the couple thousand currents.
Fr. Robert: I remember making a rail gun and the problem we would have with it, is we would pass so much current through it that it would actually collapse the structure if you didn't use the right material, it's such a strong electromagnetic field.
Lou: Oh, yeah. That's why we used copper.
Fr. Robert: Let me ask you this though, we have a lot of people who watch Coding 101 and they get their first bit of programming, their first bit of knowledge and jump into whatever language it is they're going to use; C#, Python, Java but then they don't go any further. I'd say 90% of the people who will watch this show and start programming will eventually get enough knowledge to understand what's going on and maybe write simple programs but they don't go into that next level where they say, I want this to be my career this is what I want to do every day. What attracted you to the field where you thought, you know this problem solving or this idea of taking something from the real world and turning it into a series of if, then, else statements... Why would you suddenly say, this is what I want to do with the rest of my life?
Lou: You know, I think it was just that part of the age of computing when it started getting to micro electronics, I was just fascinated by- I mean, I worked for companies like Annheiser Bush where I got to program little robotics that would pick like beer pallets up and stuff. I was just completely sold on these things that I get to program like AI and artificial intelligence to pick up beer pallets and put them in a truck for Christ sake so I was just sold on programming. And as you said, what really got me interested was the synergy between not only just PCs, in fact I could care less about computers I actually got bored of them and stopped building them. So I moved onto other things like IC circuits that I could program even before they had Arduino and Nigerino and all of that stuff. So I just got into that, making this stuff do something for me, that would benefit me at that time. And so that's what really what got me into doing this is just trying things out and nowadays it's so much easier. I mean, you've got Arduino boards and Nigerino boards and Android and C#. Nigerino let's you use C# on these little boards and you can program on different processors and different types of platforms and it's just an unlimited zone for you to try stuff out. That, for me, really sold it.
Fr. Robert: Let's talk a little bit about that because I remember, like you, back in the day when I was programming on my IBM PC or my trash 80, one of the most challenging things to do was make it interact with things in the real world. Get through that serial port, get through that parallel port and actually trigger something. Like you said, I always had difficulty playing with interrupts and figuring out how do I actually access something that's not inside the computer’s memory. But then we've got this revolution of all these integrated products, these circuit boards, things like the Arduino, which now have people programming in a dedicated platform that is designed to do nothing else but interact with the real world. That's another jump right? Embedded programs is nothing like working in say C# or Python.
Lou: Yeah, what I would've given to have something like that 20 years ago. Like you said, it's just so easy now, like you can even do a simple program like C or whatever. You can even use, like you said, C#. But you can use these boards and they've got special interfaces and IDE's for you to just plug in easy code. Just like we were writing in the Coding 101 samples. But then you can go in and talk to other things, like you can go in and have like a temperature and a monitor and an accelerometer and all of these different things. You can talk and get information back really easily just using these little interfaces. It makes it so much easier nowadays, it's just unlimited possibilities. I'm always so blown away by that little dial you can buy for your house, the Nest. I always wondered why there aren't more things like that because it's so much easier to build things nowadays. To me, that's not innovative anymore. People can build things that can drive cars by themselves now, they can build a little Nest thing right?
Fr. Robert: You, your background with Hack 5 and you're going off to Defcon in a couple of weeks here. You deal with a lot of people who do nothing but embedded.
Shannon: Oh yeah, absolutely.
Fr. Robert: Because that's the way that they've chosen. They think that those specialized devices are easier to program for, easier to work with, easier to design than general purpose computers made to do a single thing.
Shannon: Yeah, I feel like a lot of times when you run into some people at Defcon, they want to show you a thing. They want to show you a physical thing that they have coded in some sort of way and a lot of times they have more fun with that sort of thing.
Fr. Robert: Right. What about that? Do you think, obviously you're big on embedded devices, but let's say we were to offer an embedding programming module on Coding 101- And actually we would probably have to offer a few, we would probably have to do Arduino-
Shannon: We should do it.
Fr. Robert: And something that Motorola's series maybe show off the Propeller but how would that be different? We've got people like 8bitsteve in the chatroom who is saying, look embedded device programming is nothing like purely software languages. And I understand but what's different? How do you have to think differently to program for a specific embedded device rather than sort of a general use compiler?
Lou: Yeah, I mean some of them you have to use special compilers for, some of them special languages. Like when I said Nigurino, for me, you can program in C# just like you're programming a console application and talk to special interfaces and then the compiler compiles it down using a special compiler switch and link will compile it down to machine code or whatever and you can run it on these little devices. There's pretty much unlimited possibilities, but most of them again, like you said some of them are special languages, some of them require special compilers that will only work on these special platforms or these special CPU or processors that are on them. But again, they're not that difficult to setup and you can use things like what you've used in the past like VisualStudio and some of the other smaller ones like Eclipse, Java and stuff like that. And some allow you to program Java on them, so I mean, there's a lot of possibilities. There's not just one environment and you're not stuck doing one thing.
Fr. Robert: We've got M5 in the chatroom who says, well is it like dealing with an API? Not really. Again, one of the things I've noticed about doing programming for embedded devices is because the instruction-set is typically much simpler than you would get for a general-purpose computer, you know which hardware you have to work with and you know what it's capabilities are. So programming for that device isn't nearly as complicated as, oh well I have to use this API or this API or trigger this, I have to bring in this package. It's typically what you see is what you get, right?
Lou: Yeah, it's pretty limited. It's limited to like the interfaces, and interfaces is meaning they describe what the CPU can do and there's usually a very limited set of stuff. Once you figure out what it can do, you can build off of that. Then again, you can talk to a lot of IO stuff too, so they give you very simple interfaces to talk to IO as well and so that makes it modulized, and that lets you plug stuff in, which gives you unlimited possibilities.
Fr. Robert: We've got Maxwave3 in the chatroom who is saying, I notice that Lou MM has an old Mac in the background and he works for Microsoft. I think this is a good time to go to the fact that you work for Microsoft, right? I mean you're a Microsoft programmer.
Shannon: How'd you get involved?
Lou: That's a good question. So yeah, I've worked for Microsoft for almost 11 years now. The 10 year anniversary was this past January so-
Lou: Thank you. But it's crazy while I'm doing all of this stuff I've even worked for a subsidiary of Ford for a while called Dana Corporation, in fact I have a couple of patents from them. Then, all of a sudden, I got a job with a tax software company and that was weird because I had been wanting to try something else. So I went and got a job with a tax software company called Creative Solutions and they did a package called Ultra Tax, which is not very exciting-
Shannon: That sounds super boring.
Lou: Yeah, it was not very exciting for anybody. But the funny thing that I got excited about was that I got to talk to customers at that point, I got to talk to people and CPA's are the most eccentric people you could possibly ever meet. I hate to stereotype them, but they really are just crazy people. And they want to do crazy things, but I got a chance to talk to these people and change the software- I think now, it's owned by Thompson Reuters. -But I got to change the software to do that. And like you said, it was kind of boring so I went back to school since I was on an internship and at the time, Microsoft was just starting their MBS division, which is the Microsoft Business Division, and they had bought a company called Great Plains in 2001. And I went to a Career Fair up at the University of Michigan and they had a Microsoft Recruiter there and so I went through my 30 second pitch of all of the things I had done in the last 6 years at college or whatever and he was just like, oh my God. We've got to get you over to- You know, because I did some wacky stuff. -And they were like, yeah we've got to get you over to interview and maybe 2-3 months later I got a call and was sent over and interviewed for, at the time it was MSN, Office, and the MBS division and to be honest with you, I wasn't very impressed with Microsoft because working at Intel at the time-
Fr. Robert: You do know that this episode is going to go out over the internet, right?
Lou: Yeah, I've been there for ten years. Obviously I've got nothing to worry about.
Fr. Robert: Okay, okay.
Lou: So, at the time I worked for Intel, which at the time was Digital Corp but they were bought by Intel, but I interned there and they were just not impressed with Microsoft because it was itanium processors at the time and there wasn't much support for it so they were just freaking out. I worked for other companies that didn't use Microsoft technologies, they used IBM AIX, and Linux machines and Unix machines, and some Microsystems so there wasn't much Microsoft, for me at least that I came into contact with so I wasn't very impressed. When I heard about C# and .net at the time, I think it was 1.0 at the time, they were saying, oh it's so slow and doesn't do anything, they're coming out with technologies that just don't make any sense anymore. So I went there with like, I had no expectations whatsoever. I just went there to kind of see what was going on, and I wen through this grueling interviewing with them where they asked me all types of questions from Algorithm questions to just programming common stuff and working through trees, stuff like that with you know, software trees. And then they asked me six different things about problem solving like, if you had a rubber band and a piece of wood and you needed to cross a bridge... It was like really strange stuff.
Shannon: What? That's weird.
Lou: So, yeah. Yeah, yeah... I went through like, I don't know 12 hours of just interviewing with all these three different teams and I was just exhausted because i had no expectation. In fact, I went back to school and I was finishing off my final year and went 11 months without hearing anything from them. I just thought, ah Microsoft... Bleh. And then my senior year, I accepted another job and I got a call and they said, we want you to work for MSN or the MBS division, you have a choice. And I said, well I don't like MSN because I don't know what MSN is and I don't care. So maybe I'll try the MBS stuff, so I went to work for MBS and found out there was just massive possibilities doing things like this. I learned things about- I was the Developer Tools division of their Great Plains software which is the ERP, we talked about it on TWiT. But it's Enterprise Resource Playing Software, it does everything from sales, customers to invoicing and general ledger financials, HR, it does everything for you for your business. So I got to learn about things like Sequel Server and C++, I programmed a little bit of that in college but not to the length that they did. Visual Studio, proprietary scripting languages, and I also learned about .net there, so at that time I think it was 1.1 that they were getting to so...
Shannon: I would consider you being very well-rounded when it comes to different code languages. Did Microsoft require you to get any kind of certification or anything like that beforehand?
Lou: Yeah, that's a good question and they did actually. At the time, Visual Studio was still getting picked up really well as IDE so they wanted you to get in with that and of course, the .net languages were starting to come along too. They started their whole MSDN and Tech Net stuff so they wanted you to get what they called Microsoft Certifications at the time and it was around .net and C# and Visual Basic too, and then at that time the stack just kept growing and growing and the certifications just kept growing and growing and now I think those certifications on the network inside, the Cisco certification, the Microsoft certifications are just as big as those today so you can get a pretty good job just getting Microsoft Certified.
Shannon: You know, for a lot of the experts that we talk to it seems like the more languages you know, the better chance you have at getting a job at your dream company.
Fr. Robert: Right, that's actually one of the things that we have really been pushing on Coding 101, which is, don't get wedded to a language. It's okay to have your favorite language but you need to learn all languages. You need to figure out the different ways to complete any given problem. And Lou, that's something I want to throw over to you because you talk about this transition into visual languages, which was very different from what came before. I remember the very first time I touched a visual language, I realized wow, I'm not going to have a lot of those interrupt problems, I'm not going to have a lot of trouble interacting with hardware that's connected to the computer, that's all taken care of in the back end. This is a high enough language where I could really, once I get my basic vocabulary down, work on problem solving rather than fighting the language. What was your first visual language?
Lou: So, I started on Visual C++ and that was a little bit in college but mostly when I started at Microsoft. In fact, I got the job at Microsoft programming in just straight C so I just wasn't fine with coding in straight C. But when I went there, they obviously want all of their software mostly developed in C++ or actually, there was some Fortran.
Fr. Robert: Wow.
Lou: You'd be surprised. I wish I could tell you what was, but you would laugh if you knew what it was. Anyways, there was a lot of things in C++ so I had to learn that pretty quickly and so I learned that. And even C# at the time was growing so I learned those two in parallel and at the time, .net was kind of slow. Nowadays people think that .net is still slow, for some reason. I don't know if you guys have heard of .net Native, it's some of the new things where they actually compile the C# code down to machine code now instead of intermediate language or IL code and so now it's becoming almost the same performance as your native languages and so now, visual languages like that make it real easy for you to build gooeys and drag and drop things and like you said, to talk to hardware I can just drag and drop a module into my program and it will pull in a bunch of libraries that I can then talk to the hardware pretty easily. So yeah, working at Microsoft, mostly Visual Studio and Visual C and Visual C++.
Fr. Robert: The other guy in the chatroom wants to know about the language, that program that was in Fortran, he says, it's clippy.
Lou: Could be, could be.
Fr. Robert: We've actually got another really good question from JayJay in the chatroom. He asked, how many languages should one learn? And my thing is, what you want is you would want a spread of languages.
Shannon: I don't think it would be a set amount.
Fr. Robert: Yeah, it's not a set amount but you definitely would want a compiled language, an interpreted language just so you understand the difference between the two. Would you suggest someone ever learn Assembly?
Lou: You know what, it all depends. Like, I know a guy at work- Working at Microsoft for ten years, you tend to meet these crazy or eccentric people but super smart genius people too, like Raymond Chen, I don't know if you guys have ever heard of him but he's like from the original Microsoft Windows MT days and he swears that- Sometimes he will inline code in his C++ assembly just so he can do things faster, than he could do in C++. And so like, there are still people that do that. Some of the Azure stuff, storage, some of it might even be coded in assembly, a lot of the hardware. I'm sure that stuff in Xbox or like in the Surface, I'm sure there is some Assembly in there so it all depends on what you want to do or what you're interested in. If you want to go into hardware and understand that low-level stuff, Assembly is where it's at. But then again, learning Assembly will actually help you become a better C++ or C coder too because obviously, it gets compiled down to that and you could actually debug an Assembly or machine codes. So, the understanding of those low-level things make you a commodity in this market from a programming standpoint.
Fr. Robert: That's interesting, because that's actually a really good hint. That's one of the ways that you can set yourself aside from the rest of the market is to say, I know Assembly. I know a language that very few people are willing to pick up because it's such a pain in the butt. I remember when I was in college, the only time we ever did Assembly was when we needed something to run more quickly, the compiled language was just not running fast enough. Realistically, would the advent of crazy fast super-computing in your phone- I haven't had the need to switch anything down to Assembly probably in 20 years.
Lou: Yeah, like 8BitSteve just said in the chatroom he said, oh yeah learning Assembly is like learning how computers work. And he's like 100% correct. That is really learning how these massive processors with all of these instruction sets on them today, like what they do and how they do it. How Arm processors do it differently than X86 processors or MD64 processors do and how they do it differently and how they load things into memory and how they have caches and all this stuff. I mean, once you start to learn that low-level, then doing the what they call higher-level languages, like C, C++, even interpretive languages even higher-level, you tend to understand what's going on under the cover. So when you write something you can understand like, oh well I'm creating a whole bunch of things in memory and then I'm creating multi-threaded programs which let the CPU think at different times on different threads and I'm enforcing the CPU with 1 core or what they call context switch so it has to switch back and forth and I know the registers are getting overloaded, and blah blah blah blah, on and on and on. And that's because you learned the lower-level language and understand really how the CPU and the machine works. I think that if you're really serious about understanding that and perform it sometimes, it's better to learn those lower-level languages.
Fr. Robert: Something else I think the lower-level languages give you is, it really helps you at the beginning. I'm not talking about for experts, I'm talking about for people at the 101 level, is when you pick up something like Assembly you understand what a high-level language is and what a low-level language is. And you understand what the high-level language has to do in order to be understood by the machine. I know, for me when I was in college, that was sort of the lightbulb moment. When I started doing Assembly and I realized what a pain in the butt it was, I was like, oh! That's what my compiler does, duh! No wonder why we're learning this.
Lou: And it really bothers me because a lot of the universities today are just teaching just the high-level stuff. The university I went to get my Master's Degree at for Computer Science, they only taught- Like they were teaching people Java, and not that Java's bad but Java is a-
Fr. Robert: No, no Java is bad. We can say that.
Lou: Well it's a runtime language, right? Which would mean you write some code and it compiles it down to what we call intermediate language, and then that gets, what they call jidded, at runtime and then there are lots of abstraction layers in between your code and what the machine actually reads. So really, you have not a whole lot of understanding about what's going on underneath the hood. When it comes to performance and that kind of thing, you aren't going to get the rubber to the cement, rubber to the tar or whatever you call it, type speed. You're just not going to get it out of those things. And they're getting better now, obviously with the new runtimes and all of that stuff but they're still not there.
Shannon: They still do offer Java in college, like that's one of the major electives that you can choose from, especially if your major doesn't end up being in computer technology. I have a question for you, Lou.
Shannon: Sometimes when I get really really frustrated, I have to come up with a way to just escape from my programming. I have to leave it for a day and then come back the next day and I can usually solve whatever problem I might have. Now you've been programming for over ten years, have you come up with a routine or some way to keep yourself from getting so frustrated that you just want to quit?
Lou: So, yeah that goes back to- And you're going to laugh. -But I actually will switch. I'll be doing something in one language, something really monotonous at times in a coding language and then I will go and switch to something... I wouldn't say much simpler, but a much higher-level language and I'll go do something fun. Like my son and I have been messing with embedded type things and we will mess around with and create little robotic things. So fun stuff that's easier to do, that takes my mind off of these other harder and monotonous tasks that I've been trying to do. Some people will actually do something else, like they'll go fishing or something, but for me I just change technologies and that helps me.
Shannon: You fix your aggravation by switching from one program to another program.
Lou: Yeah, exactly.
Fr. Robert: I think I've ignited a miniature war in the chatroom with the Java comment. And Lou, I actually think we could bring you in on this because you probably have a decent point of view on this. Whenever experienced programmers start lamenting about Java, it's typically not because of the language. It's because it's so easy to get things running in Java that it's also incredibly easy to get things running poorly in Java. Like 90% of the Java code base out there is just horribly put together code that works, but if you had been programming in any other high-level language, you never would have assembled it that way. Has that been your experience? I mean, do you hear Java backlash every once in a while?
Lou: Yeah, we should definitely clarify because when I said Java, I was talking about the Java of the time years ago when Sun had it or all of these different- When they kind of, I wouldn't say bastardized it, but they made it really slow. Like you said, you could make things really bad very quickly. But to be honest with you, I code in a little bit of Java because we actually have we're working on some Android-based things at Microsoft so we definitely code in Java but it's getting a lot better. And a lot of times, just like C#, there's misconceptions about C# and .net being slow now when it's actually really, really fast. In fact, sometimes faster than native code, but Java's the same way. The misconception is you can get or do things- It really depends on the runtime too, Google has done a great job at their runtime and just really optomized it to where now it's running pretty darn good, especially on Arm processors but they've done a really fantastic job. But if you still use the older versions, or some of the versions have been kind of bastardized by other companies, then they tend to- Like you said, you can get in between a rock and a hard place pretty easily.
Fr. Robert: Right. Lou, let's get into some of your programming experience. Let me confess, here. One of the reasons why we wanted you on was not just because we missed you and wanted to see you again, but also because you offer a unique perspective. We've had guests on Coding 101 before and what you give us that's different is that you are coding every single day and you are switching languages a lot. You tend to be language agnostic, I mean you have your personal favorites but I've seen you program in other languages. So, break it down for me. When you are presented with some sort of challenge, either handed down to you by a team leader or given to you from up above, saying we need something that does this. What's your process? I mean, how do you decide, what language am I going to use, how am I going to program this, how do I break it down, how am I going to partial this out to my team? Coming from someone who is actually working in the industry today, some of the most useful programming to us, how do you do it?
Lou: That's a load of questions, I'll try to simplify the answer. So like, normally what happens, especially in the division that I work in, is we work on tools that are not only platforms... So like other developers externally have to build on top of that but we also work for just normal consumers too so we need to enable them to use it just by using a gooey or a UI that they can just click and drag and stuff. So we have to be able to do both, so when I'm brought a problem, most of the time it's, how can we get this to the most broadest audience? Like if I wanted to do both a developer type thing, as well as, a consumer type thing- For instance, a lot of things we're doing internally is, we do a lot of things in Type Script, which I don't know if you've heard of before. But Type Script is just a version of Java Script. Another language that compiles down to Java Script, but allows us to compile it and run it through special checkers and stuff. But we code a lot of things in that and then we'll wrap it with like C++ or native shell that just does very simple things, and then we allow developers to encode all their logic and business logic and stuff in Java Script, and then we make it just very easy. Then there's other places where we need just raw speed. Like when we need large amounts of data import into a database, Java Script just isn't going to do it for us. So we're going to need to do something else where maybe we use .net Native or native code to get the data from a stream like a rest service or web service or something and then we go in and run some validation logic on it and we just shove it into a table. So that would require a different language, so it's really dependent on what the requirement is. When they come to us they'll give us a requirement saying, we need it to do this we need it to import data from salesforce.com and shove it into dynamic CRM, Microsoft CRM kind of thing and we need it to do that fast and we need it to do performance well. They'll have listed requirements that they give you and you take those requirements and you manifest them into what they technologies are required for. So, that's really how I do it from a high-level, at least.
Fr. Robert: Okay, is it safe to say that really any complex software system today is not going to be written in a single language? Like that just doesn't happen anymore. Every problem is going to have a language that handles it better, and if you're a good developer, you're going to be able to know where you should slide.
Lou: Yeah exactly. Our software is- Just the software that I own, right now I own Desktop Client and it's coded in native, C++, C#, Java Script, Type Script, you name it. It's got a whole bunch of languages and they're just pieced together by the operating system pieces them together using these libraries and so you can give them different runtimes running at different times and doing different things. And like I said, each piece of it has a different purpose. So like, some of it's only for developers and some of it is for making sure that the UI is really fast and responsive so there's just XML, scripting, all that stuff. There's just a ton of stuff under the hood and most languages are like that. I mean, if you were to ever see the code for Word, I mean it's many different languages too in just the Word application. Even in an application on the internet today, if you wanted to build a cloud service up in Azure in Amazon web servers, you'll be coding in whether it's Python or it's Java Script with no JS, there's many different things. You just have to look at what the problem space is and then once you know about different languages you can kind of piece together the right technologies.
Fr. Robert: We do have to wrap it up but we do have some great questions from the chatroom, one of the thing that's really popping up right now is Go. It's kind of a hot language at the moment. Google Go is a language that they've created and it's supposedly very easy to access for people who are starting out. Have you had any experience with Go yet or have you played with it?
Lou: You know, I haven't. To be honest, I haven't looked at it yet. I've read a little bit about it and I've seen a little bit about how they've brought in some students to try it out but I haven't actually read about if it's a compiled language, if it's an interpreted language I really don't know very many specifics on it.
Fr. Robert: Lou Maresca, we want to thank you again for spending your time with the Coding 101 audience, it's always great to have you back and we promise, at some point we will swing back around to you because- I mean, Shannon....
Shannon: We will.
Fr. Robert: Yeah, I mean, we aren't going to let Lou go.
Shannon: Everybody loves you.
Fr. Robert: Sorry, that's just how things are going to work.
Lou: Thanks, guys.
Fr. Robert: Before you go, I want to give you a chance to tell people where they can find you and also, if you could pass on some of your guru wisdom because you didn't really get a chance to do this when you were our Code Warrior. What would you want to tell the young programmer out there? The young man, the young woman who is getting into the game and is perhaps, seeing what different languages could do. What would you tell them if they actually wanted a career in this, that they should do to make sure that they've got the boxes checked off.
Lou: So I think what I've learned over the past ten years, is the best thing to do to learn something is to reach out to someone who either, knows it already or is willing to offer up a little information on what they do and there's always somebody willing. I work with people, I mean, at a big company whether they work at Apple or Google or Microsoft or any big company, they have people that are very very good at what they do. Some people are willing to share and some people are not willing to share, and you find more people are willing to share about their experiences than the people that are not. So if you want to learn how to gain program, reach out to somebody. There's plenty of forms and sites out there with people willing to share. They want the credit of sharing information. Just go out there and ask questions like, what technologies to I need to learn to build a game or what technologies do I need to build a telemetry system for weather. Whatever you want to do, think about what you want to do and just go and find somebody who is trying to do it, or has done it before. I mean, just look at some of the Kickstarter projects out there. I've emailed people in Kickstarter before and was just like, how did you do that? I'm just curious, you don't have to give up any secrets but how'd you do it? And they'll be like, oh here's the technology go check out this library or go check out this processor that we got from China or whatever. They'll give me very specific details, not like how they did it but they'll give me technologies and I'll go and research it and be like this stuff is pretty cool. So, I mean you just have to reach out to people because nowadays, I think there are a lot of books on some things but they're not as specific. So you can go to Amazon and find a bunch of books on some things but they're not specific enough. So I think that's why you need to reach out to somebody to get that information. I think that's the key in today's world, especially with the internet, it's much easier.
Fr. Robert: Ladies and gentlemen, Mr. Lou Maresca. He will always, always be our Code Warrior. Lou, where can the people find you if they want to find out more about what you're doing or what projects you're working on.
Lou: Sure, you can always find me on Twitter at @Loumm and all the work I'm doing is at crm.dynamics.com and again, look out for some more projects for me and of course, on Google+ as well, Louis Maresca on there. And look out for some personal stuff, I'm working on some personal stuff that's coming out soon, too so check out my Twitter feed for that.
Fr. Robert: Lou, we love you. Thank you for coming back.
Shannon: Thank you.
Lou: Thanks, guys, for having me.
Fr. Robert: Now Snubs, I know this was a lot of information to throw in, we don't typically do show notes like we do for our regular programming lesson because we are not programming Lou, but if they wanted to find notes about all the programming that we've done, where can they find it?
Shannon: You can go to twit.tv/c101 and our get hub is also on there where you can download all the code that we go over every week.
Fr. Robert: That's right, it's also a really good place to get back episodes and perhaps, find that lesson that you've missed. Yeah, if you go to the get hub we separate them out by our individual programming modules so you can always find all the code that we use on the show. That's very important because it means you can imitate anything that we do so you can learn on your own. Again as Lou said, that's one of the things that you really want to do, get in there and tinker and ask questions.
Shannon: Break things.
Fr. Robert: Break things, then fix them. Also, you can find us on iTunes, please subscribe and we're still a hot podcast in iTunes, which I love.
Fr. Robert: But you can also find us and hopefully you join us in our G+ community, which I believe is g+.to/twitcoding101. Now, we've got over 1,000 members of this community right now and one of the cool things about this community is we've got people who are starting, intermediate, advanced and we've got experts. So if you've got a question about coding or a question about a language, even if you've got a question about a lesson, that's the place to go, because again, if you're part of a community you'll learn that much faster.
Shannon: Guess where else we are?
Fr. Robert: Where?
Shannon: We're on Twitter.
Fr. Robert: No way.
Shannon: Yeah, if you're not a big Google person that's okay because we are both on Twitter as well. I'm twitter.com/snubs.
Fr. Robert: And I'm @Padresj.
Shannon: And we also do the show live over at live.twit.tv and you can join our chatroom, which you saw during this show we do take some questions from you guys, the viewers and that is irc.twit.tv.
Fr. Robert: And it's all part of the experience of what it means to be part of the twit.tv network. This isn't TV folks, this is an interactive form where we reach out and find out what you want, what you need, and we try to give it to you.
Shannon: This is fun stuff!
Fr. Robert: It is, until next time, I'm Father Robert Ballacer...
Shannon: I'm Shannon Morse.
Fr. Robert: End of line.
Shannon: End of line.