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?
Shannon: Awww...
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-
Shannon: Congratulations.
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.
Lou: Yeah.
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.
Shannon: Yay!
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.