CourseMaker Podcast Episode 11 - Michael Pogrebinsky

Tue, 03 Aug 2021 20:28:35 +0200

Michael talks about his fascinating career at Google, Intel, and many other places, and how it informs his intermediate and advanced software development courses. He also gives great advice on how his most effective students learn.

CourseMaker Podcast Episode 11 - Michael Pogrebinsky
--:--
--:--

Show Notes

Links

Notes

Show Notes

  • Michael is an experienced software engineer and software architect. He has worked on cutting edge solutions and technologies at companies like Google and Intel.
  • Michael is the author of Java Multithreading, Concurrency and Performance Optimisation as well as a second course called Distributed Systems and Cloud Computing with Java.
  • He has also written a third course called Java Reflection - Master Class
  • Michael has always been fascinated with computers. He started programming around the age of 15.
  • Michael started with the C Programming language and it is still his favorite language to use.
  • During high school he became fascinated with Robotics, so in college he decided to major (study) in Electrical Engineering.
  • After a few years of studying, Michael started working part time at Intel as a Computer Architecture Engineer.
  • Michael says he was really lucky as he didn't just get to work with any team, he got to work with the architecture team which basically were in charge of Intel CPU cores' architecture like the ones used in your computers, laptops and servers in the cloud.
  • At that point in time they were actually working on building the Skylight architecture.
  • Michael said it was fascinating to see how many super cool tricks and all the things that chip manufacturing companies do to speed up the code and how all the high level code that is written in Java and C++ is deconstructed into the smallest pieces.
  • Michael was in charge of performance validation, that was the first point in time where he got really into high performance computing
  • Whilst working at Intel Michael was still in college, so half the week he was learning all the theoretical items like what computer architecture looks like and how compilers work etc. Then the other half of the week he was getting to see actually how it is applied in the industry - what a way to start a career.
  • Michael's first full time job was at a small company that specialised in medical simulation.
  • Michael was a full stack engineer but very quickly he found himself being in charge of very critical parts of the code and the entire system that involved video streaming, video capturing, recording, video processing, integrating different cameras' live feeds and from there on he liked the integration between software and hardware.
  • After Michael left that company he worked for a company that was in the AR (Augmented Reality) space.
  • There he also continued working on video products but in a completely different ecosystem, it was Android and Embedded Linux.
  • Michael built video solutions as well as he built drivers for them. Software that really takes the hardware to its complete limits.
  • After that experience Michael wanted to shift gears a little bit, he wanted to go into AdTech. He joined a company that ran its own data centres and ran high scale distributed systems in the AdTech space.
  • Michael was involved in a team that were victims of their own success, they were so successful that performance became their bottleneck. Michael worked a lot on concurrency and distributed systems and has stayed in Adtech since then.
  • There are two reasons that triggered Michael to create his courses. Firstly he has always loved teaching and sharing his knowledge. Secondly he wanted to make a positive impact on people's lives.
  • Whilst creating products for the companies he worked for he felt the impact was limited. He realised he could teach his knowledge and skills to thousands of other engineers, then they can go and build products for their companies and the impact is multiplied.
  • Looking at the courses that Michael has written, they cover tough topics to teach, for example distributed systems. Michael's focus was on two things which really define his general teaching approach.
  • First of all Michael focuses on fundamentals. He likes to think of it as "I teach people how to drive a car instead of teaching them what the different buttons do".
  • Michael's other focus is ensuring his courses are catered to engineers specifically. All his courses are practical, so once you have the fundamentals you learn how to apply it into real life examples.
  • In his courses he has chosen topics that are the most relevant, ones that an engineer needs to know, not just for conversational purposes, but to be successful in interviews and real life.
  • Students that really excel in Michael's courses really focus on the bigger picture and don't get carried away with detail. Detail is important but you have to understand that especially in distributed systems, you are working with a big system with many components.
  • If you look at the bigger picture you really have the potential to grow your skill set.
  • Another thing Michael has noticed with successful students is they apply their knowledge. They don't just watch the video courses as an entertaining YouTube video or series, they actually watch it, apply it and try different things to overcome problems.
  • Michael is in constant communication with his students so that he can find out what they want to learn next, or have difficulty with.
  • He is planning on creating more courses but has not yet decided on the topics.

Quotes from the Episode

I really like writing software that pushes the hardware it runs on to the absolute edge of its capacity

I focus first of all on fundamentals...I like to think of it as I teach people how to drive a car instead of teaching them what each button on the dashboard does. If you learn how to drive a car then you can rent and drive any car. The fundamentals is the most important thing for me. Before we write any line of code I talk about why we're doing what we're doing.

If you have the fundamentals you don't need to memorize anything.

The second thing which defines my teaching style is that I cater my courses towards engineers - once you have the fundamentals you learn how to apply them to real life examples.

The students that I see who are most successful in my courses really focus on the big picture and don't get carried away with details. Details are important, I'm not saying they're not, but when you're learning a topic like distributed systems [...] you have the potential to grow your skillset much better than if you're focusing on particular details like 'what Java function should I use'.

The second thing I see with successful students is that they apply their knowledge - they don't watch my video tutorials like an entertaining YouTube video. They try things, maybe they run into issues and then they ask questions and they try different things. This is basically the best way to learn engineering.

I prefer to teach advanced topics [...] I think there's a bigger gap both in online courses and the internet. Once you become experienced it's so much harder for you to take that next step in your career because there's just so much less information.


Transcript

[00:00:00] Chris: [00:00:00] Hello and welcome to the course maker podcast today. My guest is Michael Pogrebinsky, who is an experienced software engineer and software architect is worked on cutting edge solutions in technologies that companies like Google and Intel. Michael is the author of Java multithreading concurrency and performance optimization as well as a second course, distributed systems and cloud computing and a third course on Java reflection, Michael welcome.

Michael: [00:00:38] Thank you so much for having me, Chris.

Chris: [00:00:39] Great to have you here. So, yeah, I mean, as, as I was just describing, you've got three, uh, substantial courses out there at the moment. And looking forward to talking about some of those with you, but before we start talking about courses, could you tell listeners a little bit about, um, your, your technical background? How'd you get into software [00:01:00] engineering?

Michael: [00:01:01] Yeah, absolutely. Um, so I've always been fascinated with computers and I think I started programming when I was 15 or maybe sometime in high school. Uh, I started with, uh, with the C programming language. It's still my favorite language. Don't laugh at me. Um, yeah, lots of sec folds when I was a, when I was learning. But, um, yeah, so. Basically, I, I really loved it. Uh, but, um, I, I, at that point I got really fascinated with robotics. So in college I decided to major in electrical engineering and it was, it was a lot of new stuff for me later, after maybe a few years just going through the program, I started working part-time at Intel. Uh, as a computer architecture engineer and I was really lucky to go through, not just any team, but the architecture team, which basically [00:02:00] was in charge of developing all the CPU cores, like Intel course that we use. Um, wow. Okay. Yeah. In your computer and servers and cloud. And, uh, and that, by that time we were actually building the Skylake architecture. Right. Um, it was completely fascinating to just see how many super cool tricks and, and all the things that oldest, um, chip manufacturers, manufacturing companies do to speed up our code and how basically you take all this high level code that we write in, in Java C plus Blas and how it's being. Deconstructed into like the smallest pieces and, and gets through all the pipeline. So, yeah, that was just a great experience. And in particular, I was in charge of performance validation. So that was probably the first point where I got really fascinated with. With performance with high-performance computing.

[00:03:00] Chris: [00:02:59] Wow. I mean, this, this is an amazing way to begin a career, right? You, you really get the deep understanding of, uh, the lower level mechanics of, of how performance works and how to optimize it. Absolutely.

Michael: [00:03:12] Yeah, I was, I was definitely lucky and it really was a milestone for me. And yeah, the engineers that I've worked with were just super smart. And the biggest thing is at that point, you know, I was still in college. So half of the week I was learning all those theoretical things about what computer architecture looks like and then what, how compilers work and all that stuff. And then half of the other, uh, the other half of the week, you see how it's actually applied in practice in the industry. So it was definitely great. Yeah. So after that, First full-time job was at a small company, specialized in medical simulation. I was a full stack engineer, but very quickly, I, I found myself being in charge of [00:04:00] very critical, uh, parts of the code, uh, and, and the entire system that involved video streaming video, capturing recording, video processing, integrating with different cameras, you know, live feeds, and basically from. From there on, uh, first of all, I really liked the, the, the integration between software and hardware, right. And also writing software that really pushes the hardware that it runs on to the absolute agile fits capacity. After I left that company. Uh, I joined a different company that was in the AR space in the augmented reality. I actually also continued working on video products, but it was completely different ecosystem. It was, uh, Android and embedded Linux. Uh, I built video solutions for them. I built drivers for them again, very, uh, [00:05:00] very quantum software. That's really. Takes the hardware to its complete limits. And after that experience, I kind of wanted to shift gears a little bit and I went into ad tech. So I joined a different company that ran its own data centers run like really high scale distributed systems, uh, in the ad tech space. And. I was really lucky to, uh, be involved in a team that was kind of a, a victims of their own success. They were so successful that performance really became their, their bottlenecks. So, um, yeah, again, I, I basically worked a lot on the, on concurrency, on distributed systems on high-performance. And, um, yeah, I I've stayed with I've stayed in AdTech since then. It's a really fascinating field. Uh, but this is basically, uh, how I got into, [00:06:00] uh, performance distributed systems and, uh, and Java.

Chris: [00:06:05] Fantastic. I mean, there's a lot of, uh, great experience there that you've been describing and it is certainly, you know, looking at the courses you've you've created. I can see how yo you're bringing a huge amount of very relevant experience to things like performance optimization. So when did you decide to go from doing things in your, your real life job to deciding, oh, maybe, maybe I'll teach some of this stuff. What was that process?

Michael: [00:06:32] Yeah, that's a great question, actually. So, uh, there are basically two reasons that kind of trigger that. So first of all, I always loved teaching and sharing my knowledge. Even in high school, I was teaching on the side. I was teaching a robotics, math, English, and the, during my career, I really enjoyed when, um, other engineers came to me for help and advice. And I could really share some of my knowledge with them and teach them something. They didn't know. The second, [00:07:00] uh, maybe biggest reason is the impact that I wanted to make. So I think all of us, um, in the end of the day, one of the big reasons we go into this profession is we want to make positive impact on people's lives. We, we really want to build products that help people. And while doing that in your full-time job for a company, you definitely, and I personally felt that I made. A lot of positive impact on a lot of people and users who use the products that the companies I worked for created. But in the end of the day, it felt at times that the impact is somewhat limited to what users the company caters for or what kind of products you get to work

Chris: [00:07:44] on.

Michael: [00:07:47] Yeah. Yeah. And it's, it felt sometimes like it was kind of limiting what I can do with, with the knowledge and yeah. Skills and experience that I've [00:08:00] already, uh, gained over so many years. So I realized that I can teach my skills and all my knowledge to thousands of other engineers, and they can go and build products for their company. And then you get basically you multiply your, your impact. Like all those engineers can go and build thousands of products. Now that can. So many lives. So I guess the, my passion for teaching and also the, the will to make a greater impact kind of came to me one day and I decided to create my first course.

Chris: [00:08:36] That's really? Yeah. And looking at your courses, I mean, there is some kinda tough topics here. To teach. Right? I mean, if we, if we take by way of example, something like distributed systems, you know, there are loads of different architectural considerations, different technologies, algorithms. How did you go about deciding what to teach and how to kind of structure something [00:09:00] that's potentially like a very complex.

Michael: [00:09:02] Right. And that, uh, that course was actually pretty challenging because it's a huge topic. There's so much to it. Uh, and you can really spend all your life. There are people who actually spend all their life, just, just in the distributed system space. My focus was, uh, on two things, uh, that kind of maybe defines my, my general teaching approach is, uh, I focus first of all on fundament. So I like to think of it as you know, I teach people how to drive a car and instead of teaching them what those different bonds do and memorize all those things. And then when they get into a new car, they don't know what to do. I like that analogy. Yeah. If you, if you, if you learn how to drive a car, then you can rent or get into anyone's car and you know what to do. So the fundamentals is the most important thing for me before we write [00:10:00] any line of code at any of my courses, I always talk about why we're doing what we're doing and what exactly. Um, what exactly we're trying to solve here and what is the general philosophy? And, and if you have the fundamentals, you don't need to memorize anything. So in the distributed systems, uh, in cloud computing with Java course, I F I cover many topics. Each topic starts with the fundamentals and then goes into a practical application. And that brings me to the second part that I think. Defines my teaching approach is basically I cater my courses towards engineers and all my courses are practical. So once you have the fundamentals. You learn how to apply it and apply it into real life, examples, and specifically in the distributed systems and cloud computing course, I chose, uh, out of many, many topics. I chose the [00:11:00] ones that are the most relevant, the most important topics that an engineer needs to know, not just in general. You know, conversation sake, but actually be successful in interviews. Uh, but also in real life, like you can come to a company and explore what they have and you know, you understand the system and you can also improve it. You, you have the knowledge. And the skills to improve upon any system that, that you're working with

Chris: [00:11:32] makes sense. And it's interesting how you say the things that will really actually make an impact on a company, as opposed to just being, being out something to talk about. Right? Because sometimes people are sort of accumulating he's a Terike knowledge without necessarily having a good reason to. Um, in, in their day-to-day work. When, when you, when you look at students who take your courses and really excel, [00:12:00] what sort of things do they do differently? How do they approach, what, what can be like really challenging material,

Michael: [00:12:06] right? Yeah. That's, that's a, that's an excellent question. I wish I could. Yeah. Talk to my students, every, every single student before they started my course to share that knowledge, the students that I see that are the most successful in my courses, they really focus on the big picture and don't get carried away with, with details. Details are important. I'm not saying that they're not, but when you. Learning at course like distributed systems, distributed systems. You are, you need to understand that you're working with a big system of many components that have to come together and work and make the user feel like they just communicate with just a single country. Somewhere on the internet. And if you think about the big picture and how you connect all the components, so they would scale and not lose data and be available, [00:13:00] then you, you have the potential to grow your skill set. Much better than if you're focusing on particular details. Like, oh, what Java function should I use? Or what's the detail of this API or this configuration? The second thing that I see with, with successful students, they, they apply their knowledge. So they don't just watch my. My video courses, like an entertaining YouTube video or, or like a series on HBO, but they actually, they watch it and they apply it and I try it and they maybe run into issues and they ask questions and they try different things. And this is basically the best way to learn engineering is to apply to. Practically. So those type of students, uh, always succeed in my course, a hundred

Chris: [00:13:50] percent agree, I think. Yeah, that that's, that's a really nice note. Kind of wrap things up on actually. So what's next for you, Michael? What, what have you got planned?

Michael: I'm in constant [00:14:00] communication with my students. I, I really want to know always what they want to learn because I'm teaching for them. I'm not teaching just for myself. A lot of students just message me and tell me, Hey, this is something that I struggled with. This is something I would like to learn. So I gather a lot of. Data and hopefully sooner I'll be able to create more courses that will help a lot of students. Okay. It's

Chris: [00:14:24] still a little bit secret or are there any particular topics that you're considering doing more courses on? I

Michael: [00:14:30] wouldn't go into specifics because I simply haven't decided yet. Right. But yeah, I generally try to teach topics that are a little more advanced and to clarify, you don't need to be an advanced engineer. To take my courses, but the topics are a little more advanced than an average course on, you know, introduction to Java or, or web development or stuff like that. So it's [00:15:00] definitely something that I personally also enjoy teaching, but also I think, I think. A bigger gap in both an online courses in general and on the internet, once you become more experienced, it's so much harder for you to take that next step in your career, because there's just so much less knowledge and information. It's

Chris: [00:15:24] super true. Yeah. You, I mean, you, you're creating a lot more value by going after the, these sort of advanced topics, because I mean, let's face it. There's a lot of people who could teach a intro to Java course, but you've got this, this really unique set of experiences to create your courses. Uh, Zoe great, really interesting to learn about, about your background there. Where can students go to find out about you and your course?

Michael: [00:15:50] Sure. So, um, I have my own website now it's called, uh, pro developer academy.com. So pro developer academy, one word, [00:16:00] and you can find my courses. You can find some of my articles and the, hopefully I'll be able to create more content, uh, and share it on the website in a few. If you're active on you to me, you can find my courses there as well. You can just look up my name and find my courses.

Chris: [00:16:18] Perfect. I'll make sure that all of these websites and references are in the show notes. Michael, thanks very much for doing this. It was great to chat to you.

Michael: [00:16:27] Yeah. Thank you so much.

View all podcasts