I’m excited to announce that the 3rd edition of “Effective C#” is coming out this month. Just in time for a Christmas gift for that developer on your list.
This is the first major milestone in a large project: I’m updating both “Effective C#” and “More Effective C#”. The first edition of “More Effective C#” was released in 2005, coinciding with the release of C# 3. A number of the items covered LINQ and related language features. The second edition of “Effective C#” came up a few years later with C# 4. The new areas were dynamic support, and the PLINQ libraries.
Then, I waited. I did not want to make more updates until Roslyn came out. The switch to the Roslyn compiler came with C# 6. Both books are somewhat out of date. They also aren’t organized for developers who did not start using C# with one of the earliest versions. The existing versions were organized based on the version that was current when the book was released.
I took the opportunity afforded by updating both books to reorganize the content (all 100 items in both books). I believe that Effective C#, and the upcoming edition of More Effective C# are more approachable to experienced developers whose C# experience is only with the more recent versions.
Yes, that does mean I’m currently working on updating More Effective C#. I’ll announce it here when it is ready.
I had the opportunity to speak at Tech O Rama in Mechelen, Belgium last week. It was my first trip to continental Europe. Belgium is a wonderful country, and I’m very impressed with the conference that Gill, Pieter, Kevin, and the other volunteers put together.
My talks were on C# 7, and using the Roslyn APIs. Those talks were both updates form my NDC talks. The repositories contain the updated presentations and code. I also substituted for Martin Woodward, giving his talk on the .NET Foundation. And appearing in an upcoming .NET Rocks show discussing Open Source.
The C# 7 story has moved forward since I spoke at NDC London. There’s now preview bits. (Preview 2 came out this week). Using that build, you can try out three of the upcoming C# 7 features: Nested Local Functions, Pattern Matching, and Ref Returns. The release notes explain how to turn on each of these language features. Some of the other features initially discussed may not be in the next release (but may make a later release). Note: pay careful attention to ‘may’ as the verb. Watch the team’s announcements on GitHub for the official announcements.
Preview 2 also contains updates to the Analyzer SDK. These updates make it simpler to create analyzers that focus only on code semantics (as opposed to syntax models). I haven’t updated my NDC and Tech O Rama samples for that model yet, but I will.
I would recommend any of my readers that can should try and attend Tech O Rama. It’s a wonderful conference in a great location. The recent events made travel a bit of a challenge, but people in Belgium responded and made it as safe and convenient as possible.
I’ve been self-employed for quite some time. I’ve started three companies, including building one of them into a 2 time Inc. 5000 awardee. I’ve enjoyed all the time as an independent consultant, entrepreneur, and business owner.
At my core, though, I love software. I enjoy building software. I enjoy helping other developers learn new tools, and new skills. Since selling SRT Solutions, I’ve spent my time teaching developers to use .NET and C#. I’ve been teaching classes for corporate clients, bootcamps for people just learning to develop software, speaking at seminars and at conferences. That’s been great fun. It’s also been somewhat limiting. There’s only so many people I can reach as an independent consultant.
So it’s time to continue this mission as part of a larger organization.
This last week, I accepted a full time position with Microsoft on the .NET Core content team. I’ll be part of a team building learning resources for developers that are new to the .NET Core platform. One audience is experienced .NET developers that want to learn what’s different as they start working with .NET core. Another important audience is developers that are experienced with other platforms and want to investigate .NET Core.
One key reason why I accepted this position is the exciting future for the .NET platform. Running on Linux, MacOS, Android and iOS opens many new possibilities for the platform, the languages, and the framework. Seeing the rapid pace of innovation in the C# language now that the team is building on the Roslyn platform is equally exciting. I’m glad that I’ll now have a role as part of the team responsible for helping developers use these tools.
Equally important is the respect I have for the team members. Both the engineering team and the content team are filled with awesome, smart people. I’ve worked with many of them as an MVP and RD over the past several years, and I’ve got immense respect for the people that will be my co workers.
The final motivator is to continue creating content for all the different styles of learning that exist. Some people enjoy reading, some enjoy watching video based content, others want guided labs to help them explore. I’m excited that the .NET Core content team is exploring all of these ideas, and more different ways to help developers learn the platform, the libraries, and the languages.
I’m excited to work with a much larger audience to learn more about .NET and C#. It’s going to be fun.
I spent this past week at the 10th annual CodeMash conference in Sandusky OH. Every single event has been enjoyable, envigorating, and a great way to kick-start the year.
The event has changed dramatically over the past decade, but it still has the same core values from when it was started. It’s a group of people passionate about technology in many incarnations, and willing to share and learn from each other. Looking back at 10 years of CodeMash, several larger trends appear.
Early on, the languages discussed most were Java, C#, VB.NET, and Python. Over time, more and more interest in Ruby grew. Java waned for a time. Functional languages like F#, Haskell, and Erlang became more popular. There were a few Scala sessions.
Interesting, for me, is that C# and .NET have always had a presence, and continue to be relevant and modern. Some of the most popular talks this year were on C# 7 and the upcoming ASP.NET 5 release. I’ve given a talk at every CodeMash. I’ve spoken on C# 3, LINQ, dynamic support in C# 4, async and await in C# 5, TypeScript, and C# 6 features. I’ve had a great time, and I hoe that the attendees have learned and enjoyed by talks.
I remember some of the amazing people that have been speakers at CodeMash: From Scott Guthrie, to Bruce Eckel, to Mads Torgersen, to Scott Hanselman, to Jon Skeet to Jesse LIberty to Lino Tadros to Katlhleen Dollard. I’m also sure I’m missing several prominent people that have spoken over the years. Carl Franklin and Richard Campbell have recorded several .NET Rocks! shows while in Sanduskey.
The attendance has grown from around 200 to roughly 2000. That still amazes me. It’s lost som of the feel of those early events. In the first few years, it always felt lie you knoew everyone. But, the current event does have the same culture, the same caring community, and the core group of friends are still there year after year.
Over the years, I’ve driven through ice, snow, and in some years Sptring like weather for CodeMash. My family has enjoyed the waterpark on the weekend after the event.
I want to congratulate the crazy dreamers that started CodeMash, and made it happen. It’s amazing to see what you’ve built, and how much fun the first 10 years have been.
I’m teaching a second .NET bootcamp in Detroit this spring. It’s quite a rewarding experience. Like the previous cohort, these students are all adults that are motivated to make a career shift. I always think I learn as much as the students do when I teach one of these groups. I’ve got four important lessons for all my readers based on the first few weeks of the bootcamp experience.
My first surprise was the experience that some of the students have coming into the class. Everyone has been successful in different fields, from business to medicine to finance. And they all want to be developers. Developers are in serious demand everywhere. This may be an exaggeration, but I believe the unemployment rate among developers is approaching 0. Every growing company I work with wants to hire skilled developers. It’s become a barrier to their growth.
Investing in yourself by learning to code will pay off. It opens doors.
There’s a corollary to this lesson: Having other skills also pays off. As we’ve been discussing next steps, we discuss where everyone’s past experience will also pay off. Several of the students have very strong backgrounds in different vertical businesses. Those skills will help to set them apart from other entry level developers.
I’ve been really happy to see this result. There are too many people that have the world view that someone is “born with” the skills or the mindset necessary to be a developer. These classes, and the students that have attended, prove that’s bunk. Most of the students enter with no programming experience at all.
8 weeks later, they can develop code, and feel comfortable with the .NET framework.
Now, I don’t want to overstate this: they are all still beginners, and ready for entry level jobs as developers. They don’t yet have the experience many of my typical readers do. But, that’s a function of time, not innate ability. I was beginner once, as were all of you, dear readers. These students will continue to grow, as they keep coding.
Anyone can learn to code. It takes motivation, some help, and a path. If you know someone interested in learning, get them involved. Point them in the direction of learning resources. Encourage them to try and build something. We’ve all enjoyed developing software. There’s plenty of room for more. And, anyone can learn.
There’s a corollary here: I continue to be impressed by just how fast new folks pick up the core skills. There’s so much vocabulary and concepts that we work with. We have learned a lot and have a lot of experience behind us. I am truly impressed by how quickly I see these new developers learn and grow the skills we’ve already internalized. It does seem very frustrating for a day or two, until they get past that “Hello World” stage. Thankfully, within a week, they are building classes, understanding core concepts, and creating real code. It’s great to see.
This has been the most interesting piece to observe. There’s the famous quote from Joseph Joubert: “To teach is to learn twice”. I’m finding that students really go through four distinct phases of understanding: reading code, doing guided labs, working independently, and helping peers.
In that first phase, they can see code that I’ve written and begin to understand what it does. They don’t yet have the vocabulary, and they are kind of unsure exactly what they are reading. But, they certainly beginning to understand.
The second phase is where students can work with a guided lab, and understand what’s being added. They can follow the instructions, type in the code, and do the debugging and proofreading necessary to make a guided lab work.
The third phase is when they can create their own code and their own algorithms to build software that does something useful. It’s where a lot of entry level developers spend much of their time. Their code works, but they may not be able to completely understand and articulate how it works.
That fourth phase is the key to mastery: Once students get to the point where they can explain what they’ve built, how it works, and how it uses the underlying libraries, they have achieved a new level of mastery.
I’ve truly enjoyed working with new developers and helping them join this career. There are large numbers of people that want to write code. Can you help? It would be a great opportunity for you learn twice. Maybe it’s not beginners, maybe it’s mentoring junior developers in your organization.
I’m thrilled to have been nominated and accepted as a member of the .NET Foundation Advisory Board.
I’m very excited about the role we can play in growing the Open Source ecosystem around .NET. We’ve just gotten started, so there is not a lot of progress to report, but I’m excited by the potential. Our role is to provide a channel between the .NET Foundation Board of Directors and the .NET developer community. We will be helping to refine policies to accept new projects, grow and nurture the projects under the .NET Foundation, and overall, make .NET Open Source Development better and richer for everyone.
Shaun Walker is the chairman of the .NET Foundation Advisory Board, and his announcement here is a great description of the rationale and thought process that went into creating the advisory board.
I’m excited to participate in growing Open Source development around .NET and the great languages and frameworks that are coming from the developer teams. This is a large and important initiative. It covers everything from the Roslyn compiler projects, to the TypeScript compiler to ASP.NET vNext to the Core CLR and core .NET Framework releases. And that’s just the major projects from inside Microsoft. There are so many tremendous projects (like ScriptCS, just to name one) that are part of a growing .NET ecosystem.
We’ve got quite a bit of work to do. The Foundation is a new organization, and we need to advise the board on everything from what kinds of projects we’ll accept, to the process for accepting new projects, to the governance of the advisory board. It’s a lot of work, but it’s also a lot of fun.
It’s an exciting time to be a .NET developer. I’m glad to be in the middle of it.
I’m excited to announce that I’ve been renewed for the Microsoft Regional Director program.
It’s an exciting time in technology, and especially in the Microsoft space. Since the last RD renewal cycle several big innovations have happened:
It’s an amazing time. I’m excited that my continued involvement in the Regional Director program can help my customers navigate all these changes. I can’t wait to see what the next two years brings.
I’m also excited to welcome many new RDs to the program. This latest wave recognizes many changes in the global technology industry in recent years. As I look at the list of new RDs, I have a number of observations:
It’s been a great ride for my first 10 years in the program. I can’t wait to see what comes next.
I’m teaming up with Grand Circus to deliver another .NET developer bootcamp this Spring. This bootcamp will teach the core skills necessary to build modern web applications using ASP.NET and the core .NET framework.
For most of my regular readers, this bootcamp is probably too introductory for you. It does not assume that your have any prior knowledge of C#, or ASP.NET. We start at the beginning, and move as fast as possible to learn the core skills needed.
However, if any of you have friends or associates that are interested in making a career change and learning to be a developer, this is a great way to start. During the 8 weeks, students learn the core skills needed to make that transition. In addition, Grand Circus will be providing placement assistance to help students land that first developer position.
If anyone you know wants to become a developer, and be part of Detroit’s Renaissance, tell them to sign up here. We had great success with the first bootcamp (over 80% of those students have landed developer jobs), and I’m anticipating the same outcome this time.
I’m a bit late this year, but here are my thoughts on the Software industry as we move into 2015.
I’ve said it before: The talent war is over, and the talent won. Software developers are in high demand everywhere. My readers probably know this. You likely get as many recruiter emails as I do every week. I don’t see this changing. All the demographic and economic information available indicates that demand for software developers will continue to outpace the supply of people with those necessary skills.
But, like all shortages, economics will change this situation as well. More and more people are entering the software field because there is such high demand for developers.But, unlike a generation ago, you will need to compete against people everywhere in the world. If you want to stay in demand, you need to have more skills besides core software development.
There are many directions to go here in addition to the traditional advice of learning the business and adding soft skills. Are you good at explaining software development to others? Help mentor teams. Do you have some of the specific skills that are in high-demand? (Read on for my thoughts on what those might be.) Are there particular verticals you want to explore?
Whatever it is, become a multi-dimensional asset. One day, “folks that can code” will not be as in demand as they are now. But, high-quality software people will still be in demand.
And with that, on to some more technology based thoughts.
I’m lumping these together because Big Data analysis requires a lot of resources, and cloud computing puts those resources in the hands of many more organizations.
I’m amazed at the amount of information that can be discovered using big data analysis. While it’s not an area I work in extensively, the innovations there are amazing. I expect this trend to continue as more and more data is online for analysis and research.
If it hasn’t already, 2015 spells the time when Cloud Computing is mainstream. I’m firmly convinced that I will never buy a server again. Furthermore, I’m certain all my hosting will be at a cloud provider, not a traditional hosting service. My current choice is Azure, but this is an area of strong competition. I believe this trend will accelerate as companies need to retire and replace existing servers. That will drive more cloud adoption. Faced with the choice of buying a depreciating asset, or migrating to the cloud, the cloud will win.
To paraphrase Mark Twain, “The reports of .NET’s death have been greatly exaggerated.” The last year saw preview releases of the Roslyn compilers, Visual Studio 2015, ASP.NET vNext, and more. License and language changes, along with major investments from Xamarin make the .NET and C# ecosystems cross-platform.
There’s more interest in the C# language, including all the new features coming soon in C# 6. Now that the Roslyn codebase has gotten to the point where the existing C# features were supported, the language team is working hard to add new features to the language. It’s an incredibly powerful and expressive language, and getting more so every release.
An important driver or that resurgence is that the .NET ecosystem is becoming Open Source. The Roslyn compilers are on Github, along with the core .NET framework, ASP.NET vNext, Entity Framework, and more. The licenses governing these releases have been updated to address platform concerns. (Namely, the new licenses allow these projects to be used on non-Windows platforms; that had previously been disallowed).
At this time, C# and .NET provide a real cross-platform open source strategy for backend, mobile, web, and tablet applications.
That fact makes the .NET resurgence real, and important for all developers, not just those targeting Windows.
The web is programmable, and users, customers, and software decision makers expect modern applications to run in a browser.
It’s dangerous to make predictions, especially about the future. There’s one thing I’m confident in: No one is sure what the right mobile strategy is. There are just too many options. You can use browser based applications for everything. You can use a cross-platform web based framework like Cordoba. You can use a cross-platform native framework like Xamarin. You can also create separate apps for each platform. They all have different advantages and disadvantages. And, different teams have different existing skillsets, which means that the cost of each strategy is different.
Personally, I’ve created apps using the first three. I really don’t know which I prefer. I like the native feel of using the Xamarin tools. And yet, the web only versions do mean more portability.
It’s still going to take time for better answers to become clear.
I’ll close this with a brief look backward. Last year was a pretty big change, and I enjoyed every minute of work. I had the pleasure to teach developers in multiple countries, and different continents, and at different skill levels. I’m excited by the response so many people had learning new skills.
And, at Humanitarian Toolbox, we kept building software to support humanitarian efforts. We got official 501(c)(3) approval, and we are now ready to build more this year.
I spent last week in Seattle / Redmond at the Microsoft MVP Summit. As is the case every year, this year’s event was primarily NDA content. I’ll be blogging about the technical content at the summit as the NDA restrictions are lifted.
However, I can talk about the experience. The MVP summit is one of my favorite events of the entire year. I get to meet super smart people from all over the world that share the same love of software development. It’s a huge community, and I’m always amazed at the people I meet. This year was no exception.
I got to meet the folks that build Friendly, a very powerful and interesting test library for test automation. I got a great demo on the evening of the MVP Showcase event. It’s really quite impressive. The main site for their company is here: English, or Japanese.
While at the Showcase, they asked me to sign copies of my book, which has been translated into Japanese. We all posed for a picture after that:
It was also the first time I’ve been asked to sign an electronic copy of my book. If I get a copy of the picture,I’ll post that as well.
It was a great opening to the Summit, and I’m happy to have met new people that appreciate what I’ve written. You should check out their project, it’s really cool and quite powerful.
I’m glad that I was selected to speak at self.conference, coming to Detroit this May.
The speakers and sessions are a strong mix of the technical community in this area. In addition to quite a few local speakers, other super smart folks from the midwest are apeaking.
I also want to point out Tony Surma’s talk on “Apps that work when nothing else does.” Tony is a fellow board member for Humanitarian Toolbox, a charitable organization that creates Open Source applications for disaster relief. I’m the president and a board member as well. We’d love to have your help developing these applications. And, as you’ll learn from Tony’s talk, there’s a lot of software product skills you’ll learn developing apps that have to run in a disaster zone.
Self.Conference promises to be a great, great event. Go to http://selfconference.org/ and register today. See you in May.
Today, I’m formally launching my new venture to help companies grow and retain software talent. I’ve spent the last 15 years growing the talent pool at SRT Solutions, the firm I sold last August. I know first hand the challenge of hiring and retaining software developers. I also know the investment needed to grow talent, and ensure that developers always have the skills that are needed for modern application development.
The classes I’ve developed are on the same topics where I mentored the great developers at SRT Solutions: C#, LINQ, ASP.NET web development, and Lean Development Practices. The material leverages successful talks and seminars I’ve given at national and international conferences. And, of course, some of the material comes from my Effective C# books. You can see the full list, and the current course catalog here.
I’m limiting the class size to 20 people so that I can spend enough time with each attendee throughout the course. I’m also teaching all the courses myself. I’m not licensing the material to others, or hiring other instructors. Every class will be taught by me personally.
If your organization could benefit, please let me know.
I'll be giving three different sessions:
Monday at 3:45: Modern C#
Too often, we teach C# by explaining features version-by-version. That practice leads developers to believe that they should prefer the C# practices we used at the turn of the millennium. It's time to teach C# 5 without taking students on a journey of the idioms we used in all previous versions. Instead, this would teach the language from the perspective of C# 5, and leveraging the idioms we use today throughout the material. Encourage developers to follow the practices we use now, for the reasons we use them now. Encourage your peers to leverage the best of modern C# instead of reaching for the classic answers.
Tuesday at noon: If TypeScript is the answer, what was the question?
Tuesday at 2:15: LINQ in Practice
LINQ idioms can be used to write more readable code for many everyday problems. Yet many developers reach for the familiar imperative idioms instead. This session shows developers how to recognize common practices where LINQ would create more readable, maintainable, and extendable code. You'll learn to recognize imperative code smells and replace those with LINQ queries. You'll learn to write those queries in ways that help other developers understand and leverage the LINQ queries you've created.
I'm excited about all three of them. It's a good mix of super new unreleased technology, new technology, and everyday practices that could be improved.
But wait, there's more. When I'm not speaking, I'll be writing code at the Humanitarian Toolbox Hackathon. We've made quite a bit of progress on a few different apps since last Spring when we held our first hackathon at DevIntersection. In fact, our first app is almost ready for trials with relief organizations. If you're at DevIntersection, take some time between sessions and stop by. Write some code for an open source project that will have a positive impact on the lives of people affected by natural disasters. Contribute, and learn something.
Oh, and we may have some surprise guests stop by during the hackathon.
If you haven't registered yet, there's still time. The conferences are co-located, so you can register for either Angle Brackets , or DevIntersection. You can attend sessions listed under either conference, and attend the hackathon as well.
I hope to see you there.
This will be the first time I’ve spoken at the Boston Code Camp, and I’m looking forward to meeting developers in the New England community. I’m spending more time on the East Coast now and I’d like to become more involved with that community.
Between my sessions, I’ll be splitting time between web sessions and Windows 8 sessions. There’s a great set of content on both topics, and it will be a good chance for me to pick up some knowledge on both of these areas.
I hope to see you there.
Well it's been heaven, but even the rainbows will end.
Now my sails are fillin' and the wind is willin'.
And I'm as good as gone again.
I'm still walkin', so I'm sure that I can dance.
Just a Saint of Circumstance, just a tiger in a trance.
- John Perry Barlow
My last post was looking back, this one looks forward. I am truly excited about how I spend my time now.
I'm concentrating my time on the activities I enjoy the most: creating software that helps people, and helping developers become better at what we do. There's four different activities that are part of this plan.
First, I'm working with a set of awesome colleagues to launch The Humanitarian Toolbox. We are working with the global developer community to create, deploy, maintain and support software applications that aid humanitarian relief efforts. These are especially important in times of crisis. I've been doing volunteer work with them since February. I've been learning about current disaster response practices, and how software can enable relief workers to spend more time on what's really crucial: helping the people affected by the disaster. We're working with global relief organizations to identify needs. We're scheduling events to launch teams on the most pressing needs. We're working on the deployment and maintenance plans. I'm truly inspired to work with such a great group of dedicated people with one simple goal: Save lives and reduce the impact of disasters.
Second, I'm creating courses for Pluralsight. I'm excited to be part of Pluralsight. I've spent my entire career developing software and teaching software development to others. Working with Pluralsight gives me a new way to reach developers world wide and help them become better software developers. But what's more exciting to me is the community of Pluralsight authors. The list of Pluralsight authors contains people I've known and respected for much of my career. It also contains many of the smartest, most energetic rising stars in our industry. I get incredible energy from this group. It's the most gifted, intelligent and hard-working community I've ever been a part of. Every morning I log into the Pluralsight Yammer network, and join a group of great minds. There are amazing conversations about everything related to software development. If you're not already a Pluralsight subscriber, you should be. It's a great way to learn from our industry's best minds.
Third, you'll see me at more conferences. Both activities (Humanitarian Toolbox and Pluralsight courses) enable me to attend and speak at more conferences. At many of them, I'll be running Humanitarian Toolbox hackathons. At many, I'll be speaking on developer topics I believe that will help you be a better developer.
Fourth, I'm not done writing books. I think books and online training are both valuable resources to learn software development. And, I enjoy creating both. I haven't signed a book contract at the moment, but I'm working on a couple outlines for topics.
I'm excited about the wealth of opportunities ahead. I'm going to spend more time on technology, and on helping other developers improve their skills. I get to spend almost all of my work time on the activities I'm most passionate about. I'll continue blogging here regularly, and I'm inviting my readers to join the conversation. What do you want to learn? Are you interested in helping humanitarian toolbox create software? Let me know in the comments.
All of these projects are Open Source (using the Creative Commons license for content, and the MIT license for code). If you would like to contribute, visit our GitHub Repository. Or, if you have questions, comments, or ideas for improvement, please create an issue for us.