Podcast

032 - Becoming a better developer with Filip Ekberg

June 09, 2020

Jeremy chats with Microsoft MVP and Pluralsight author Filip Ekberg about C#, .NET and how to improve as a developer.


If you enjoy this episode, please consider leaving a review on Apple Podcasts or wherever you listen.

Please send any questions or comments to [email protected].

Transcript

00:00:07.0 Jeremy Morgan

Hello and welcome to All Hands on Tech, where today's leaders talk tomorrow's technology. I'm Jeremy Morgan. I'm excited about today's episode. Today I'll be talking with Filip Ekberg, a Microsoft C# MVP, Pluralsight Author, and Consultant. He's a great teacher, developer, and overall nice guy. We're going to talk about what's going on in the world of C# and .NET. We'll also talk about being a good programmer, what that means, and what new people can do to become a better programmer. 

Let's welcome Filip Ekberg. How are you today, Filip?

00:00:40.4 Filip Ekberg

I'm very good, thanks. It's one of the few days where it's sunny here in Sweden, in the spring. So, it's been really good getting some sunlight and making the best out of the situation.

00:00:51.5 Jeremy Morgan

I'm very jealous. It was raining so hard here, earlier, that I was wondering if it was going to come through on this recording. That was just outside of Portland, Oregon, which is very well known for rain, so not a surprise for me. But yeah, I'm jealous of the sunshine for sure. Can you tell us a little bit about yourself and what you do?

00:01:12.0 Filip Ekberg

Sure. So, for the past... Since 2013, I think, I've been doing some Pluralsight videos on the side of normal consulting and working as a Software Engineer. I've been mainly focusing on .NET technologies, both for the consulting work and I've been building apps, and web, and Azure, all of the things that a .NET developer seems to jump on, right? And, then on the side of that, I've been doing the Pluralsight courses and, lately, I've been trying to focus a lot more on that. So, I actually do less client work and focusing more on both the videos that I do for Pluralsight and then my YouTube channel as well, and I'm trying to just build my online presence and share my knowledge. I love technology, I love programming.

00:01:54.3 Jeremy Morgan

Yeah. I totally understand that. I love C#. That's why I decided to wear my C# shirt.

00:01:59.4 Filip Ekberg

I think I have the same shirt.

00:02:01.4 Jeremy Morgan

Yeah, I think I got it at some Microsoft event of some type and kept it. It's my favorite language. Is that also your favorite language?

00:02:11.1 Filip Ekberg

Yeah. Well, yeah, I would say so. Especially since they seem to take things and features from all the other languages, that are pretty good. Everything is good in C# and they take things from F#, and Java, and Python, and Kotlin and Swift, and all of those languages. If you find one thing that you love about those other languages, it'll eventually end up in C#. It's a living language and I think it's my favorite one. Definitely.

00:02:36.1 Jeremy Morgan

Nice. How did you get started in development, in software development?

00:02:42.1 Filip Ekberg

That's a very good question. I actually don't really know exactly what put me on to studying for software engineering. I was really inspired to move over to the US, back when I... prior to going to University. I really wanted to go to the US, and I loved doing computer things. I love playing games and I did some networking for smaller companies in the city, when I was 15-16. So, I helped out with that and then, eventually, I started tinkering a little bit with PHP and Java and I took some courses during high school and then I felt like I have a thing for this. But at the same time, I wanted to follow my dad's footsteps, who was an electrician. So, I wanted to just jump on that and do the three-year course for that. 

But then after a few weeks, I felt like this is not the thing I want to do. I want to do more computer things. I want to jump on... to build more software. And I still had the idea of I want to move somewhere outside of Sweden when I grow up. So, in order for me to do that, I had to graduate as a Software Engineer and the passion for building software, and learning everything about how a program works, and all of that just grew on me. Even since my childhood. I had some friends just showing me QBasic and VB and other things like that and just playing around with computers. But it really settled when I'm between 15 and 20 years old. I'll just... I found a passion for just building software and just exploring languages and frameworks.

00:04:17.1 Jeremy Morgan

Nice. Yeah, that sounds pretty cool. So, there's definitely the hobbyist that gets into it and then there's the people that are pushed into it. So, I was also a hobbyist. As a teenager, I did programming and I wasn't very good at it, if I'm being perfectly honest, I struggled a lot and then I decided to get into networking and that's what I went to college for, was Network Administration. Things like that. And then I ended up becoming a programmer. So, it slowly moved to that and then became better at it, thankfully.

00:04:52.2 Filip Ekberg

Well, there's always going to be developers that are better than yourself. It's this constant Imposter Syndrome, right? So, you come into a client's work and there's always this other person that's so much smarter and know so much more about the current framework or the current language features. What is this? I find that I love learning from others and love learning what they know and just grasping their knowledge. I can listen to other developers for hours, just talking about their passion. You don't always have to be the brightest one in the room to succeed and I think that's one of the things I love about software. You can just learn new things every day.

00:05:30.7 Jeremy Morgan

Oh, yeah. I always try to encourage beginner software developers more now because when I started out, it was in the 90s, there wasn't social networking, internet, any of that. And, I dug into Linux source code and I was trying to be a C or C++ developer. And, so, I'm jumping into Linux source code, thinking I'm never going to build anything like this and it's very intimidating. So now, fast forward decades, we've got a lot more social interaction. So, when I meet new beginners and they're overwhelmed, it's like "Oh, I know exactly what you're feeling and just keep pushing through it, eventually you'll start surprising yourself".

00:06:10.1 Filip Ekberg

Yeah, I remember when I started out. I started Uni after the internet came out, and all of that, so we had some really great resources. But back then, they still didn't want us to have internet connection during the exams, right? They didn't want us to read the manuals for solving framework things, things that you do in your normal work life. But then again, when I wanted to learn things myself or when I wanted help others, you jump on Stack Exchange, or at that time when Stack Exchange was... What's the name? It's the... Experts Exchange. That's the one. That's the one before Stack Exchange. So, Stack Overflow and all the Stack Exchange network... I remember when I studied for my Software Engineering degree, I sat on Stack Overflow all night, just answering questions, learning everything, trying to be Jon Skeet to answer C# questions. And, it was a game to me and that's how I learn more about the language and learn more about building software. I still see people do that. It's awesome.

00:07:17.2 Jeremy Morgan

Yeah. I think Stack Overflow has changed software development in just immense ways. And, when I was a manager, the tech manager, doing interviewing, I'd have other managers that were turned off by the idea when someone says, "Well, I would go to Stack Overflow.". And, for me that was like a light would come on and be like, "That's what I want. I want somebody that's going to go to Stack Overflow to solve the problem rather than sit and churn on it for hours on end".

00:07:43.5 Filip Ekberg

You don't always have to build the thing yourself. If you can bring in a NuGet package, if you can pay someone that's built a library for you, just do that. That's going to save you a lot of money and you save a lot of time. There used to be this... People tend to look down before... It's been a change in culture, right? Before, it felt more like people looked down on you if you took something from the internet and used that in your code. But nowadays it's more common, with NuGet and all the other package systems. It's so much more common to bring in other people's work. We have the open source community to thank for that.

00:08:22.9 Jeremy Morgan

Absolutely. I think that's been a positive cultural change. I would say, in the early 2000s, when I started with development that attitude was prevalent. I remember bringing in something like jQuery and people saying, "What? You don't know JavaScript? You don't know how to do this?". No, they've done all these things for us and they've solved all these neat problems and there is still that attitude, like, "Why do we need to bring this thing in? Why don't we just learn what we're doing?". And, now there's definitely a different culture.

00:08:51.8 Filip Ekberg

Totally agree with that. jQuery is still the thing that I go to when I need to build something that's Ajax on the web and people still look down on the jQuery developers, which is a little bit sad. It's now we need to jump on the next thing, that's even better than jQuery.

00:09:06.5 Jeremy Morgan

I still like jQuery.

00:09:08.9 Filip Ekberg

I think a lot of people do. I think what's a take away from that is, that you should just use the frameworks and tools that make your life easier, and make the product better, and let you get the product out faster, or as quick as possible to get to a product. I think that's something that new developers need to keep in mind, that it's okay to use frameworks that you know. You don't have to use the thing that everyone else is using, just as long as you can solve the problem as quick as possible and get a good product out in the end. That's what matters.

00:09:40.0 Jeremy Morgan

Yeah, absolutely. And, sometimes it comes down to problem solving. Just a couple of years ago, I was working on a project where we had really limited bandwidth between the hub and a client, it was kind of a hub-client architecture. And, we were using Angular for it and we broke it down, and we're talking really small bandwidth, it was a really weird case, but we broke it down. We were like, "We shouldn't be shipping Angular all the way across here" when we can do X-number... We're talking probably five or six methods that we were able to recreate and do in Vanilla JS and I met with a lot of resistance. There's like, "Why are we doing this? Why are we not using the new cool thing?". It’s trying to solve it as simply as possible.

00:10:25.6 Filip Ekberg

Exactly. The same goes for... I see a lot of projects where not necessarily new developers come on, but you have developers that might have a long experience that just learned about a new framework. And, they want to refactor your entire solution to now use this new framework, with this new pattern, or something like that. And, that's not always the best approach in software and it's okay to build something that's not the perfect thing. You can gradually improve things, I think.

00:10:52.1 Jeremy Morgan

Yeah. Absolutely. I've been that developer before, I'll admit it. I've come across something and be like, "We need to use it. We need it. Is it here?". That's fine for your personal projects if you want to rewrite everything in .NET Core. For your personal stuff it's great, but when you're in an organization or a business it tends to get a little costly, without good reason.

00:11:14.3 Filip Ekberg

Yeah. Definitely. As I mentioned, you just use the frameworks and tools that work for you. If it takes more time for you to rebuild an entire solution, then don't do that. But, if it's going to save you money and time in the end, then it's perfectly fine. I spent four years with a client that were heavily invested in one of the Microsoft mobile technologies, which was Xamarin, and then it just didn't work anymore. We couldn't find any developers. We had problems building the solution. Now, Microsoft were awesome trying to help us out, but eventually the client just said, " Let's drop this. Let's do a proof of concept. Bring in some native developers", and we just rebuilt the entire application in a few months, and it was good for them. That worked but that's not necessarily what you need to do for all of the other situations that you're in. I do a Xamarin application now, for a client, and it works great for their purpose and their application. I'd really have to use the tools and the technologies that work for the situation you’re in.

00:12:13.4 Jeremy Morgan

Yeah, absolutely. So, what do you think prepared you for being so good at what you're doing now?

00:12:19.1 Filip Ekberg

That's a hard question. I don't see myself as being the brightest person in the room. So, I know I just like to Google a lot, I like to spend time on Stack Overflow, and read the documentation. And, I have a, I don't know if I would call it a talent but, I know how to talk to people and I think that helps when I talk to the business and then I can also talk to the tech people. And, I can communicate what I want to build in software and then I can Google the rest. So, even if I don't know the framework or know how to build something, I can just find it out in a matter of minutes or hours. And, I don't have to know how to balance a binary tree. I don't have to know how to search super quickly through a large set of data. I don't have to know how to write that on a whiteboard. That's not my type of thing. I love consulting because it lets me be picky about the projects that I'm passionate about. It also means that the clients know that they get my expert knowledge and the way that I build software, I can find the answers quickly for them and I don't rebuild things from scratch. I think that's what people tend to think makes me good, right? Does it make sense?

00:13:25.5 Jeremy Morgan

Yeah. Absolutely. I like that answer, actually. I think it gives people encouragement. Because at a certain point in your career, when you've been doing it long enough, your ego will start to go away. You would think it would be the opposite, right? You'd think it's like I've been doing this so many years, and I've got so many things under my belt, that every year I think I'm better and better. And, for me at least, and for most people I know, it goes backwards. I think it's great to hear someone admit, "Hey, I'm not a wizard". I've said that before, several times: "I'm not Donald Knuth. If I were, you would already know it. But I could solve this problem for you and I will make this good". So, yeah, I think that's a great answer.

00:14:05.1 Filip Ekberg

And, I've been turned down by big companies before, because I didn't know how to balance a binary tree and write the code for that in Notepad. It's not my type of thing, but there are people that love that and are really passionate about making algorithms faster, and that's the type of job that they should go for. I love consulting and the different types of problems. And, also the people problems, right? Because that's what you end up having to work with, as well. Especially being independent and being the only point of contact for the Dev Teams.

00:14:39.0 Jeremy Morgan

Oh, yeah. One of the questions I had was, how do you feel about whiteboard interviews?

00:14:44.2 Filip Ekberg

Well, we can probably spend an hour talking about that. So, I don't think I have ever landed a job where I had to do anything on a whiteboard. Maybe that was intentional. I don't know. I just don't find… it doesn't appeal to me. And, when I interview someone, I never ask them to write something out on the whiteboard. It doesn't really tell me anything about their capabilities of what they're going to do in a real world. Especially because I'm mostly working consulting. So, when I do something for a client, and they want me to help out with the recruitment, I just sit in in the interviews and I ask a few basic questions. If it's a mobile app developer they're looking for, I just ask a few things about, "What do you think about testing? Have you tried any testing frameworks? How would you structure your application? Have you heard about MVVM?", something like that. Just to give me an idea of what they like to talk about and to talk about the technology instead, and give me the feel of how are you as a person? Can we have a conversation rather than do you know the manual out of the box? Or, do you know everything about the frameworks in the... Do you know what everything compiles down to in MSIL? You don't have to know that. I rather just want a good person to work with, that knows how to find good answers.

00:15:59.3 Jeremy Morgan

Yeah. Absolutely. I think that's one of the skills that's becoming far more important in tech, year-over-year, is the ability to communicate. The ability to not be a jerk. These things are really important.

00:16:13.0 Filip Ekberg

It's important even outside of tech. Don't be a jerk ever.

00:16:16.8 Jeremy Morgan

That's probably every job. I know when I first got started, early, years ago, the culture was definitely different. There were definitely people that were almost unbearable to be around but incredibly brilliant in their way. That was acceptable and people would say, "Well, it's a tech person. Of course, they're grumbly and cranky. They're a tech person", and now I think the whole image of a tech person is entirely different and that's good. It's a good thing.

00:16:44.2 Filip Ekberg

I think we still need the balance. So, we still need the people that you generally refer to as the cellar developers, that just sit around in their basements and code all day, right? So, they just code on their own problems and they just solve that really quickly and they do write really efficient code, but then they don't really look outside of the box. So, I think you need the balance. You need both of the different types, or all of the different types, in a team to make it good. But it's really hard and getting someone onto the team that doesn't really fit there is going to be more costly than finding someone that you can upskill, right?

00:17:22.6 Jeremy Morgan

Yeah, and that's always tricky. I think finding a cultural fit, sometimes, can be a lot more difficult than finding a skill fit. So, that's why, the newer programmers, I tell them, "Work on your communication skills" because I didn't have as great communication skills in the beginning, and I would go and talk to set of stakeholders and come back with an impression, and come back to the team and be like, "This is what they want". And, we start working on it and then later they're like, "That's not at all what we asked for". And, then I'm frustrated and I'm like, "Oh". So, eventually, start learning to communicate a little better and start making relationships with people. Start asking the right questions so that you save yourself all of those cycles.

00:18:05.4 Filip Ekberg

Yeah. And, having been in a tech lead role for a few years now, I love that you can get the ideas from the customer of what they want to build. You help and translate that into tech terminology and then you communicate that back to the team. But then, sometimes, you work with people that are very narrow-minded that really want it their way: "There's no other way to build this than the way that I want it. Doing that UX thing, it sucks. So, we're not going to do that in our application". Then you have to go down on the same level and try to talk to them: "This is what the customer wants. They pay you by the hour and just build what they want. It doesn't really matter what you think". It's all about communication. So, you have to help the developer understand, as well as the client understand why the developers think what they do. And, then you have to teach the developers why the managers, or the business, think like they do. 

So, I find that the Tech Lead role is becoming more about... previously, was more about architecture. Now, it's more about people, and architecture a little bit, and then a little bit of coding. At least, that's what it's ended up being for me. And, I think that's a fun combination of the roles. We're no longer the people that are down in the basement doing all the coding. We're actually a part of the business, and we're talking to stakeholders and helping them build better software. There's a change in the culture and the way that we build things.

00:19:31.4 Jeremy Morgan

Yeah, definitely. And, I think it's a positive change. 

What does the C# landscape look like right now? I know I'm obviously somebody that follows the language, and I know that there have been certain times where there have been groundbreaking things like; now we're pulling in generics and now we got this new thing called LINQ, we'll see how that works. You know? I know there have been some big changes. Is there anything really big like that, that you've seen recently?

00:19:56.6 Filip Ekberg

Yeah. There's been a bunch of big changes. There's bunch of big changes coming along, as well. If we look at C# over the last five years, they announced that they were doing the compilers as an open source project. That means that they rewrote all the C# and VB compilers in C# instead, which also means they compiled the new C# compiler with the old one. So, that's a little bit mind-boggling, but that's pretty cool. That also meant that they have the capability of more easily adding more functionality, or language features, in the language. What they've actually done is that they've added a few things that are really interesting. They've added a first-class citizen, Tuples, in the language. You used to be able to use Tuples in the language but now they are a first-class citizen and look really nice, syntax is really good. 

And, together with that, they've introduced pattern matching, which is something that's been available in F#, and Kotlin, Swift, Haskell, and a lot of other functional programming languages. It's one of those ways where you can write really beautiful code to match on particular traits of an object. So, you can say that I have this object but now I want to make sure that it matches these different criteria. And, based on those different criteria, we can do different things. That's something that they're gradually improving. So, with C# 7, one of the 7 releases, they released a first version of the pattern matching, and then they improve that in C# 8, and then they are going to improve it a little bit more in C# 9, 10, 11, 12, and so forth. 

What's interesting with the language now, is that it's the cadence of the release cycles. They're releasing new language features a lot quicker than they have previously done. Mainly because it's not really coupled to Visual Studio, it is but it's not really, they're doing the development open source on GitHub. So, they can send you out a new compiler and you can just play around with the new features, but that also means that they rely on the community and they rely on the Visual Studio teams to do the integration with the new compiler features, and so forth. 

But what's interesting with C# 8 is that it requires .NET Core 3.0. So, you have to jump onto the new runtime to be able to leverage some of the new features. That's one of the things they've really not done in the past, where it's been a very long time since they required you to jump on a new version of the runtime to get new language features. But I think you're going to see more of that as well. And I think it's good. I think it makes sense because now you can have the .NET Core runtime side by side... You can have multiple different runtimes on the same machine. No problem. That was a little bit trickier in the past.

00:22:39.3 Jeremy Morgan

Yeah. I think it's a weird transition period because, if I understand it correctly, there isn't going to be a .NET Core or .NET Standard anymore. They're going to merge together, and it'll just be .NET. I think, right now, there's that struggle time, like the Python 2 and 3 struggle that's been going on for years. People should just expect the struggle.

00:23:00.0 Filip Ekberg

I have to be very careful how I phrased that, but I would say that they're no longer doing anything on .NET Framework, and .NET Core is now becoming .NET 5. They're just scrapping the Core out of it and just making it feature compatible with Framework. I don't know how you would explain it, but you can't just upgrade the Framework version to the .NET 5 version, from what I understand. But from now on, what you want to install on a new machine when you do new development... You want to install .NET 5.

00:23:33.1 Jeremy Morgan

Yeah. That's how I've understood too. I think pattern matching is probably one of my favorite new features. As soon as you said earlier, stealing from F#, it wasn't very long ago that that's what F# was doing in applications that I was working with I remember working on a very big project and there was a lot of pattern matching. It was moved off to an F# team of a few people who are doing that, and the rationale is basically, "F# for pattern matching. We don't want to deal with it. We don't want to try to replicate what they're doing in C#". Hearing that it's come in and is being implemented is pretty cool. I imagine they stole a lot of patterns from F# for that.

00:24:17.3 Filip Ekberg

They certainly did. There's still things that they want to improve and can improve upon but it's still one of those things that people have really been missing from F#. I think it makes the code a lot more beautiful. It certainly makes it less chatty and that's what most of us want. We want to write less code as well as expressing ourselves the same way we did before. I think that's one of the reasons VB developers might be moving on to C# instead, because they want to be less verbose in their code.

00:24:46.5 Jeremy Morgan

Yeah. It's very intuitive, the way it works. When you look at it, it's not super confusing. Even LINQ, that I mentioned as the big cool thing, it's still the big cool thing but when I first started working with it, it wasn't very intuitive for me. It was like, "This doesn't make a lot of sense" but eventually I figured it out and then it starting to come together. But I think with pattern matching, it and looks intuitive right from the start. At least for me. When you're using it, it's like "Yeah, that's pretty much how this should be written out".

00:25:20.4 Filip Ekberg

I totally agree with that. Another feature that they're introducing as well, is the null reference types. I think that's really worth mentioning as well. One of the most expensive problems that have ever occurred is a null reference exception. That's something that's probably occurred in most applications out there. What they're trying to do now, is to warn you that there are potential problems when you compile the app. Actually, when you code it in Visual Studio, or in Visual Studio Code, they will just tell you that you have a potential null reference exception here. You should probably go ahead and fix that. That makes a lot of sense and it's something that I hope that they are going to enforce later on. We're going to get more immutability. We're going to make sure that people stop using null in their language and use something else. Probably fall back to something like a default value, which is pretty much the same thing, right? Other problems, but it won't crash. It's going to be a, probably, a better experience. I think that's worth mentioning as well. There's a ton of other things in C# 8, and C# 9 and so forth. What's interesting with the compiler and language is that it's evolving. Even though C# has been around for such a long time, it's a language that's still not done. It's still taking features from other languages. It's trying to get developers from other languages, to make it easier for them to transition into C#. I think it's good.

00:26:44.6 Jeremy Morgan

Yeah, definitely. I think it seems like they're going more towards compile-time checking too, like you just mentioned, where there's a little bit more compile-time checking. I think we've all been guilty of building something in it compiles, and even the unit tests pass, and you're like, "Cool. This thing is rock solid. This is awesome", then it's out in production and it's, "How did that happen?". A lot of that stuff can be solved with more compile-time checking or the compiler says, "Hey, this thing might happen one of these days. Maybe it won't, maybe it will but here it is". That's pretty exciting stuff. 

What kind of development do you do, most of the time? You mentioned some Xamarin and I know you do some WPF stuff. What kind of development do you do mostly, with C#?

00:27:33.0 Filip Ekberg

Lately, it's been mostly towards Xamarin. It's a little bit of Azure and web. I've been heavily invested in building things using IdentityServer and setting up secure ASP.NET websites and helping out with that. I have some clients that I've done that for. I am really passionate about pretty much everything that's on .NET and I try to both do the web stuff and I try to still do the mobile application development as well. Because I reckon that once you're on the .NET stack, it's not too hard to move across the different techs. It's pretty similar if you've done it for a while. It's really good to have a little finger in the game, in all of them. Even if you're not an expert on all the different subjects, right? I try to do web, little bit of mobile, do scalable things in Azure. I'm a normal .NET consultant.

00:28:25.4 Jeremy Morgan

Yeah, sounds like it. That is one of the things I do like about the .NET ecosystem is, a lot of it comes back to that C# language. I spent years building C# web API and system apps and then, when I got thrown into a WPF project, there's certainly a learning curve but it was made easier by knowing how the framework works already, knowing the language. Then it just came down to finding all the XAML stuff and things like that. It's one of those things where, if you start to learn the core parts of the .NET Framework, when you move to other things, like right now with Blazor coming out, I find I'm able to build things in Blazor fairly easily because 75% of this is stuff that you know from building other kinds of .NET app. It's pretty cool, and I like to call it an ecosystem.

00:29:17.7 Filip Ekberg

Yeah, exactly. I think that the fact that they introduce things like Blazor, and they are evolving on XAML, and still using flavors of XAML in different places, and they're doing Razor, and using that as well like in Blazor. I think it's great. I think it's good that you can come from, do I dare say Silverlight, and still know how to push WPF, and you still know a little bit about how to do things in Xamarin. Even if you've been burnt by building Silverlight apps, you still have the same type of idea of MVVM, a little bit of XAML, and how things are sticking together, and just learn how it's applied in Xamarin for instance. Then, we build web apps in Razor, you probably know a little bit about how to do that in Blazor as well. It's nice to see that you can transition between the different types of paradigms and the different types of applications, and still build applications that are pretty good.

00:30:08.9 Jeremy Morgan

Yeah, definitely. What do you think the future looks like for the .NET ecosystem in next few years? Where do you think things are going? This is always a tricky question because I always ask people to grab their crystal ball.

00:30:22.8 Filip Ekberg

If you would have asked me 5 or 10 years ago, I probably wouldn't have predicted everything being open source, everything running on all the systems, and all of that. I think that the development of the .NET Framework and .NET is going to be pretty much the same going forward. You're going to see it run on more types of platforms. It's going to be faster. You'll see more native compilation, I think, so that it becomes really quick on devices like IOT devices and devices with less cores and less memory, so they're really efficient everywhere. 

We're going to see, probably, some alternatives to Xamarin, I think, for mobile development. That's going to be the next big thing, because mobility is shaping so quickly. Like PVAs, or Blazor, maybe take over that platform. We'll see what happens with that. I just think that it's going to continue on this path and we're going to see that... You can choose whatever flavor of the language you want. You'll have language features from Kotlin, Swift, Java, and you can come into C# and build web apps. You can build mobile apps. You can run them everywhere. I think they're going to continue working on the performance and the stability, I think. That's going to be the main goal for the next five years, but who knows? I don't have a crystal ball.

00:31:40.5 Jeremy Morgan

Yeah. I think it's going to make more inroads into the Linux community. I might get eggs thrown at me for saying that, but that was one of the I was really excited about with .NET Core; I started out as a Linux programmer. Then I got into .NET development. I really liked a lot of things about .NET development and I really like things about the Linux system. When they merged together, I was stoked. Now I'm even starting to see it more where people, who I know are hardcore Linux developers and hated Microsoft at one point in time, are now like, "Well, this .NET Core is working really well for us". That's cool. I think it's going to make a lot of inroads into that world.

00:32:24.4 Filip Ekberg

Yeah, hopefully. I think that maybe it'll make the .NET developers that run on Windows jump a little bit on Linux as well and explore other types of operating systems. When I did Xamarin I had to buy a Mac and learn how to work with macOS, which is something that was outside of my comfort zone. Then, as a part of that, when we decided to rewrite the entire apps in native Kotlin and native Swift, I had to learn those languages as well. I think as a software engineer you have to just adapt and it's nice to be able to learn some new platforms, learn more about how developers on these types of platforms build software. What are their problems? Can we learn from them and take that onto Windows, for instance, or into Visual Studio and build better things together? I think it's great if we can grab the Linux community as well. See what happens.

00:33:13.0 Jeremy Morgan

Have you tried WSL at all?

00:33:17.4 Filip Ekberg

Nope.

00:33:18.9 Jeremy Morgan

It's pretty cool. It's a good little crossover, I think, to get into Linux things because it will run in Windows Terminal. That's how I prefer to do it, but you can download...

00:33:28.2 Filip Ekberg

Oh, the subsystem? Oh, sorry, sorry.

00:33:30.9 Jeremy Morgan

I probably should have spelled it out.

00:33:34.9 Filip Ekberg

Sorry. Yeah. What's the full name? Is it Windows Subsystem for Linux?

00:33:42.3 Jeremy Morgan

Yeah. Windows Subsystem for Linux, which doesn't make a lot of sense as a term.

00:33:48.5 Filip Ekberg

Now, that's true. I've got it installed but I do prefer using PuTTY to get in to one of my Linux boxes for one of my virtual machines that are running Linux. I don't know why, but I just like that workflow better.

00:34:05.1 Jeremy Morgan

Yeah. That makes sense, but it is a cool thing to... I think to get .NET developers more familiar with Linux by saying... I prefer virtual machines, or PuTTYing like you said, but, for some people, to be able to pull Linux on to their system, play around with it, and not worry about breaking everything, because that's always the number one thing with Linux; change something and then your computer doesn't work.

00:34:31.2 Filip Ekberg

I guess it makes it easier to build cross-platform C apps as well, or C++ apps, because you can try them out right? That's a different type of application development than I'm used to, but I think it's great that you have the capability of doing that on your own Windows box as well without having to worry about the virtual machines.

00:34:49.5 Jeremy Morgan

Yeah, definitely. What do you think some of the challenges are with people learning C# and .NET right now? Some of the biggest challenges?

00:35:00.3 Filip Ekberg

I think that is also a very good question. How do I phrase this correctly? There's always been this community that don't like Microsoft, and don't like Microsoft technology. I think there's still the M$ people...

00:35:21.7 Jeremy Morgan

The M$ people, that's perfect.

00:35:25.6 Filip Ekberg

The M$ people. I think they still collar a lot of new developers that want to come onto Microsoft and the Microsoft platform. There's this is community that just hates on technology for no obvious reason at all. Just because it's something might have happened 25 years ago; it doesn't mean that Microsoft is not a changed organization. I think that that's one of the challenges. To get people trying out the Microsoft products and just don't care about what anyone else thinks. Just build something in C#. Build a web application. Honestly, it's one of the easiest things to learn. 

I think Microsoft's done a lot of good effort in building good learning paths and good learning tools to get into the language. Both for adults and for kids to learn programming. I think it's really not that hard to just start with a "Hello World" project. Then, once you've done that, of course, Visual Studio can be a little bit overwhelming, once you get into that. It really depends on what type of application you want to build. I think the challenges are probably not tech-wise. It's probably more towards the culture of the languages and what other people in your environment are doing. You can jump on and learn C# if you're on Mac, or if you're on Linux as well, and Windows. There shouldn't be any problems doing that. People might be afraid of installing something that's from Microsoft, for Visual Studio, for Mac they haven't done that in the past.

00:36:59.5 Jeremy Morgan

Yeah. I would agree with that. I refer people to an article online that Scott Hanselman wrote, years ago actually. It's "Microsoft killed my Pappy". I send that to a lot of people because I run into some resistance sometimes, online, because I have followers that are from both camps. I'll post something they'll be like, "Well, you'll be stuck with the Microsoft thing" and it's like, "They've done so many good things lately". I mean, I understand, 15 years ago things might have happened that people didn't like, but they've been really good with open source, and really helpful, and putting out a lot of good content and information for learners, I think.

00:37:40.2 Filip Ekberg

They should definitely have credit for that. I think they've done a lot of good work on getting people onboard, on learning software, letting them play around with Visual Studio, downloading virtual machines for free and running that with Visual Studio pre-installed. They're doing a lot of things just to make it easier for you to get onto the products, to then pay for it.

00:38:01.0 Jeremy Morgan

I think Azure is the endgame.

00:38:03.7 Filip Ekberg

It is yeah. I was going to say that. They just want people to build Azure-powered applications. They don't care if you run it on Linux, or Mac, or whatever as long as you build it in Azure, as long as you have your back end in Azure, as long as everything is in Azure. Nothing bad about Azure. It's a great product and it's really scalable. The tooling around how Azure works, compared to others like Amazon... I just had a client a while back, where I had to do some Amazon work as well, or AWS work, and the portals... If you compare AWS to the portal for Azure, it's not even on the same planet. It's so different. Maybe it's because I prefer having a UI, to just click around and try new things. Meanwhile, in AWS, you might automate everything. It depends on what type of developer you are, I guess.

00:38:57.2 Jeremy Morgan

Yeah. I definitely like the text base and automation thing, but I what I like about Azure is I can go in and see that UI, see how everything is put together, put something together, and then, when I get what I want, I'm like, "Okay, this is exactly what I want". Then I can go back and script it later. Whereas with Amazon, it's like you might as well start with the script because you're not going to figure out as much from the UI. I feel like pretty much anyone can jump into Azure and spend a little time with it and figure out what's going on. It's not terribly confusing and I appreciate that about Azure.

00:39:35.8 Filip Ekberg

That's one of the things they do with all Microsoft products, right? They try to spend a lot of time and effort into making it understandable for someone that's not even supposed to be in that environment. I think that's pretty impressive. The Azure portal is really great, anyone can jump in there and just create a website or create a back end for your application. Just click around. Meanwhile, I probably wouldn't be able to send someone that doesn't know any tech into AWS. It's different and I think it's nice to see that they're putting a lot of effort into making things understandable for the less technical people that work in those environments, as well. We were all beginners at some point. We all need some help to get over the line.

00:40:17.6 Jeremy Morgan

Yeah, absolutely. What does your learning process look like? If you wanted to learn something new like, say, Blazor, how would you go about learning that? If you decide "I want to learn this" at such-and-such level, what does your learning look like?

00:40:32.9 Filip Ekberg

I start by just Googling. I will start off by searching for "How to build an app in Blazor". I'll start from there. I'll try to start a project. That's the first thing that I'd try to do. Google for how to get started, then try to set up the same project, or just tinker around a little bit with that. Then just go from there. I might have an idea of I want to build something, or I might actually have a client that wants me to build something on the technology. That's the best way to do it because then I would get paid for learning the technology, but that doesn't always happen. When I want to learn something new, I just Google for how to get started. Then I tinker around a little bit. Eventually, when I run into problems, I'll have to learn how to fix them and then just end up on Stack Overflow, read the documentation, maybe watch a course on Pluralsight, or just skim through that. It really depends on the technology that I want to learn and how fast I want to get there.

00:41:28.5 Jeremy Morgan

Yeah. Nice.

00:41:29.8 Filip Ekberg

I've got a bit of experience. I've been working a lot of different types of applications. I kind of understand how, most of the applications that I want to build, how they would work. So, when I need to jump on a new technology, I kind of know where the pieces would have to fit in order to get it to work. If that makes sense. I know where to find the answers for what I'm looking for. But, when I started out, I didn't have that luxury, so I spent a lot of time on Stack Overflow. I asked questions. I tried to look for what other people asked, and I tried to find answers for what they wanted to learn. I learned things that I might not need right now but things that I might need in a few months, or a few years, from now.

00:42:10.4 Jeremy Morgan

Yeah. That's pretty good. I've been asking this question to people on the podcast for a while and, so far, every single person has said, "Find a project". I think that's the best approach. That's what I've always done. I have this thing I call "Turkey Time" that I actually use. It's this thing that's built, and it's been built in 10 different languages now, but all it is is a thing that you send out to your family members before Thanksgiving, or Christmas, or a holiday, saying what they're going to cook and bring. Like: "I'm going to bake stuffed potatoes" and "I'm going to bring the turkey". It's just a freeform, simple app that you can build in 10 minutes. I've rebuilt it in several different languages because I use that as my learning thing. I'm like, "Ok, I want to learn how to do a Python web API", so I'll do Turkey Time and I'll make a Python web API for it. The current version is in Blazor, that our family is using right now, because that's how I wanted to learn Blazor: this simple little app. Yeah. I think it's pretty good advice.

00:43:13.3 Filip Ekberg

Find an application for your product or your project. Find somewhere where I can utilize that in your daily routines or whatever. Otherwise you will never jump onto it. You will never learn something that's on your to do list if you don't build a to-do app, right? You need to find something to build, for you. You'll learn the technology. As an example of that, I wanted to learn some hardware and soldering. I bought the soldering iron but never found anything to build. Then I found this project on GitHub, where they had built an automation for the thing that controls the heating and the water in my house that also connected to the electricity company, so I can penny pinch on how much I pay for the electricity. Then I could get the soldering iron and learn how to put everything together. It was a great learning experience, then try to get the hardware to work with the software and all of that.

00:44:07.8 Jeremy Morgan

That's pretty cool. I have one final question for you, and it might throw you off guard. If you were going to name a programming language, what would you name it and why?

00:44:21.2 Filip Ekberg

Can I use one that's already existing?

00:44:25.1 Jeremy Morgan

Yeah, I guess. Sure. There's no real rules to the question.

00:44:30.5 Filip Ekberg

I would obviously go for F# because my name is Filip and it starts with an "F". That would be the obvious choice for me. Otherwise, if I couldn't choose F#, I will go with M# which would be for my daughter, which is Mila.

00:44:46.4 Jeremy Morgan

Nice. That's pretty cool. Awesome.

00:44:50.2 Filip Ekberg

Anything with #.

00:44:51.8 Jeremy Morgan

Something with #. Yeah, got to have # in it. I'm not even sure how C# got its name. Do you know how it got its name? I know C and C++ named were named after the musical note, but then C# is actually a musical note.

00:45:07.1 Filip Ekberg

Yeah. I've seen an article on that. I believe it's on Wikipedia, but I can't remember. There's a long story on how they named it C#. It was supposed to be named something else, but I can't remember. I'll have to read up on that again because that's an interesting story. For those listening, you should go and check it out because it is interesting how it got its name.

00:45:29.0 Jeremy Morgan

Thanks. Is there anything that you wanted to talk about that we didn't talk about?

00:45:34.9 Filip Ekberg

I think we covered a lot of interesting tech stuff. We talked about the programming language, and how C# is evolving, and how people can learn, and that it's okay to not be the best developer out there, the first year of you working. I think we covered all the bases.

00:45:53.4 Jeremy Morgan

Thank you very much for doing this with me. It's been lot of fun.

00:45:56.5 Filip Ekberg

Thank you. It's really fun. I'm a little sad though, that we couldn't do this in person, because we were scheduled to do this during the Summit in London. We'll eventually meet in person as well, I'm sure.

00:46:11.6 Jeremy Morgan

Next year, hopefully we're able to do that. That'll be cool. Thank you very much.

00:46:18.5 Filip Ekberg

Thank you so much for having me here.

00:46:27.3 Jeremy Morgan

That was a great conversation with Filip, about everything C# and being a better developer. You can check out his blog at filipekberg.se or on Twitter, @fekberg. 

Thank you for listening to All Hands on Tech. If you like it, please rate us. You can see episode transcripts and more info at pluralsight.com/podcast.