22. 9. 8.
The Author's Code... with Phil Japikse
Q: What compelled you to take on the authoring of Pro C# with .NET?
Before I directly answer the question, I little background is necessary. When the .NET Framework first came out, I was already pretty deep into the Microsoft stack. There were a lot of problems with the offerings pre-.NET, but you could still be very productive and solve the problems that businesses faced.
When .NET F/W first came out as early betas, I saw how the .NET framework addressed many of the shortcoming of the current stack, so I wanted to dive in deep to see how this new technology would help my customers.
The problem was getting good, useful information. If you recall the blitz by the MS field teams, MS was calling everything “.NET”, from servers to development stacks. And the documentation for MS products wasn’t nearly as good as it is today with .NET (Core). I didn’t feel like I was fully taking advantage of the new capabilities.
Along came this book from Apress by Andrew Troelsen: C# and the .NET Platform. I read it cover to cover and was immediately immersed in everything that the .NET Framework could do. Although it didn’t cover the entire depth, it pretty well covered the entire breadth. This gave me an understanding of what C# and the .NET F/W could do, and also gave me enough information to dive deeper where I needed to. This usually meant getting another book from Apress for the deep dive into the particular stack (remoting, WCF, ASP.NET, etc.), but Andrew’s book always pointed me in the right direction.
Through this process, I was able to provide the right solutions for my customers, taking full advantage of what C# and .NET F/W had to offer. In short, it enabled me to find the right tool and/or approach for the job, instead of just having a hammer and pretending every problem was a nail.
I took this new-found knowledge and applied it not only to my consulting work, but also to my teaching—from conference talks to hands-on labs. First for customers and prospects that wanted to move to .NET, then at local and regional events, then expanding to the national and international stage. Through each release of the .NET Framework, I would get the next edition from Andrew, study it cover to cover, and apply the new capabilities into my professional work and my teaching.
Fast-forward to the upcoming C# 6.0 release. I had already worked with Apress on some titles, and my publisher reached out to me about a new opportunity. Andrew wanted to move away from the Pro C# franchise and was looking to hand it off to someone. Andrew and I talked, we both agreed I was a good fit, and I split the C# 6.0 book work with him. Andrew covered the language centric pages (and their updates), and I handled all of the application framework chapters (ADO.NET, EF, WPF, ASP.NET), including adding new chapters on WPF-MVVM, ASP.NET MVC and ASP.NET WebAPI. I took over completely with the C# 7 book and the rest, as they say is history.
So, to finally answer the initial question: this is the book franchise that I built my C#/.NET career on, and I wanted to make sure the book remained that impactful for all of the current and future developers who want to work in C# and .NET.
Q: How many editions have you contributed to?
I initially split the C# 6 book with Andrew, then took over entirely for the C# 7 edition. I have continued to be the sole maintainer for the C# 8, C# 9, and C# 10 editions. Shall we call it four and a half? There were a couple of really significant changes along the way. The first was the introduction of .NET Core, now just referred to .NET. I introduced .NET Core along with the C# 7 edition, which meant chapters on ASP.NET and ASP.NET Core, plus EF and EF Core. Since C# 7 still lived in both worlds (.NET F/W and .NET Core), the book needed to support .NET F/W and .NET Core. C# 8 changed that, requiring .NET Core 3.1 to fully take advantage of the features introduced in that version. This meant moving all of the content (and code samples) to .NET Core.
The second big change was in C# 10. File scoped namespaces and global/implicit using statements might seem like small changes for a developer, think about how many code samples, snippets, and classes are in this book. We changed all of the examples to take advantage of the space saving features, and the C# team was right about one thing for sure – those features cut down on vertical waste. On average, each chapter was shortened by 1-2 pages just by using file scoped namespaces and global and implicit using statements!
Q: What do you love about .NET and C#?
One thing I always stress to my employees and students is that our job, first and foremost, is to solve problems for the business. Whether they are internal or external customers, the vast majority of the time, they don't care about technology, as long as what we provide them makes their job easier/more efficient/more enjoyable/etc.
C# and .NET make it easier to solve those problems. C# and .NET provide what you need to solve those problems without being locked into a specific path. By providing web, client, and services architecture, running locally, or backed by the power of Azure, I can focus on finding the best solution to the problem without worrying about how to make the technology fit.
Q: Why do you enjoy teaching it?
I have had great teachers and mentors throughout my entire career. It would be extremely selfish if I didn't pay if forward. That was my motivation for sharing what I've learned with a broader community. It has grown so far beyond that, though, as I can think of few things that compare to watching students suddenly grok a concept, light up, and start writing code that they didn't think they could when they entered the classroom.
Teaching (and writing) also forces you to be really deep into the tech that you are teaching. Developers are a smart group of people and can spot someone "faking it till they make it" from a mile away. This has kept me right on the bleeding edge. Sometimes you get cut when you are that far out, but that is also something that I share with my students, to help them avoid those pitfalls as I discover them.
Q: What is it about the book that has kept it relevant for so long?
It's immense coverage of C# and .NET and the related frameworks allows it to be used as a book to read sequentially (for those new to C# and .NET), but also as a reference manual for the experienced. To the latter point, beginning with the C# edition, I add version annotations into section headers (e.g., "New in 10" or "Updated in 10"). This allows someone to quickly look through the new edition, find the content of the new/update features, and read up on them in a focused manner. The section headers are detailed enough that when you use the book as a reference manual, you can quickly find the section you need to explore the text and code samples.
For those just starting out, it's a really (and I mean really) big book. We (Apress and I) have gone back and forth with *every* edition to try and find content to cut to make it shorter. I keep going back to where I was when I started with C#. I didn't know what I didn't know and leaving out solid content would be a disservice to our readers. I also don't know what your position entails. For example, if your job is to build web applications, you can skip the WPF chapters.
Q: What is your advice to people who want to become .NET developers?
My first piece of advice is for anyone who wants to become a developer, not just a .NET developer. You need to find your passion. This world of technology is changing so fast that you need to find what you really enjoy about this field so that you are motivated to stay current.
The second piece of advice is to develop muscle memory with the tech stack that you work in. It's hard enough to make sure you are providing the solution to the right problem without having to fight the technology as well. Do some programming katas, have side hobby projects (like organizing your music collection) to let you explore, learn, and fail at your own pace without the pressures of deadlines and bosses. Remember there is no such thing as failing as long as you fail fast. A fast failure is really just learning that you need to try a different approach.
Although it's good to understand everything .NET has to offer, it's not necessary, especially in the beginning of your journey. I provide a copy of each edition of my book to my employees. I expect them to read it, but not all at once. Focus on the chapters that line up with your current assignments. Like the old cliché, how do you eat an elephant? One bite at a time.
Phil Japikse is an international speaker, Microsoft MVP, ASPInsider, Professional Scrum Trainer, and passionate member of the developer community. Phil has been working with .NET since the first betas, developing software for more than 35 years, and heavily involved in the agile community since 2005. He is the lead director of the Cincinnati .NET User Group and the Cincinnati Software Architect Roundtable, founded the CincyDeliver (cincydeliver.org) conference, and volunteers for the National Ski Patrol. During the day, Phil works as the CTO/Chief Architect for Pintas & Mullins. He enjoys learning new tech and is always striving to improve his craft. You can follow Phil on his blog (skimedic.com) or on Twitter (@skimedic).