This past weekend, I was honored to speak at Boston Code Camp 24. I had two different talks.
The first was on creating Angular 1.x applications using TypeScript. It was a great audience, and I enjoyed the conversation that went along with the discussions. The slides and demos for this talk are available here on github. As always, the branches are labeled using the steps in the demo. You can follow along as the application grows.
The second talk was on creating Diagnostics and CodeFixes using the Roslyn APIs. This one had a smaller audience (which I expected). I was quite happy that the people who did attend were very interested in the topic. Slides and demos are here (on github again). The branches walk through the tasks of building a diagnostic and a codefix. The specific diagnostic was for Item 24 in More Effective C# (“Create only Non-Virtual Events”).
That brings me to my call to action for attendees. I’ll repeat it here: Would you be interested in a Roslyn based analyzer that enforced the rules in Effective C# and More Effective C#? Leave me a note here, and let me know what you think.
Standard business advice is “network, network, network”. I disagree, and in this article I’ll tell you why you should concentrate on building communities instead. Let’s begin with the definitions (both from Webster’s).
network (n) as, “a usually informally interconnected group or association of persons (as friends or professional colleagues).”
community (n) as “a unified body of individuals as: a body of persons of common and especially professional interests scattered through a larger society.”
Community is stronger. Networks are informally interconnected. Communities are unified, of common and especially professional interests. Communities take longer to build, but are much more valuable. There are three communities that I’m especially proud to be a part of.
Yes, our regional community of software developers has a name. We are the heartland. This is an amazing group of people that builds the software that builds new companies in our region. We create CodeMash, we run GiveCamps, we host, run, speak at, and attendmanyoftheusergroupsinourarea. We spend time together learning more about software development, and teaching others what we have learned. I’ve spoken everywhere in our region from Traverse City to Dayton, OH. I also have asked for topics and received offers from speakers to come to Ann Arbor and help our developers learn new topics. The answers come from all over the region.
Many of the developers in our region are self-employed or independent consultants. Being a member of this community means I’m never more than a couple emails away from the right person to help us on a project, or help our local developers learn something new.
Passion for software development, and our region are the bonds that hold this community together.
I’m also a C# MVP. The C# MVPs are a community within the larger MVP community. The MVP community is a world-wide group of people with very deep knowledge of the C# programming language. These are other authors, speakers, and developers that help others learn more about the C# language. As a community, we help each other by reviewing book manuscripts, draft talks, articles, and new product ideas. As a world wide community, we grow friendships around the globe. The team Canada hockey jersey I sometimes wear is a gift from a C# MVP from Ottawa. Some days in Ottawa, he’s wearing a Michigan football jersey I gave him in return. The technicalreviewers for my books, members of the C# MVP community, span three continents. All had comments and feedback that made the books better. I’ve made similar comments on friends manuscripts from around the globe.
We meet together in person at conferences, like the recent MVP Summit. Between these major events, we chat through social networks or email.
A common desire to create great software using C#, combined with the knowledge to do so bonds this community together.
The Regional Directors are a smaller, and more close knit community. They are a group of 115 of the most influential software developers in and around the Microsoft Developer Community. These are business owners, C – Levelexecutives, investors, entrepreneurs, and softwarearchitects that span 6 continents. We regularly communicate via an email list that generates between 20 and 50 emails per day. We get together regularly at conferences around the globe. The wealth of knowledge, insight, and friendship among us is truly amazing. I’ve asked questions about topics ranging from finance, to angel investing, to business plans to software market trends. I’ve answered my share about growing a business, being an author, what the business climate is really like in our region, and some of the markets we’ve been involved with.
A common desire to make our individual regions better places to live, work, and succeed binds this community. It’s the most energetic, successful, and fun group of people I have ever associated with. It’s got world-wide reach, and an incredible wealth of knowledge.
I discuss those three communities above with some pride. That’s not to brag, but to point out how much stronger a community is than a network. If you’re involved in strong communities, you surely have similar experiences in your own community. If you don’t feel these strong bonds, you haven’t formed a strong community.
A community is bound together by a common purpose or mission. The best communities will outlive any or all of its members. It grows into something that can sustain itself beyond its original charter. I know that if I ask anyone in my communities a question, I’ll get help, knowledge, and guidance. I also know it’s my responsibility to do the same for others in those communities. That’s much more powerful than any network.
Other area business people have questioned SRT Solutions put so much emphasis on community. The communities we belong to help us make positive contributions to our region. There’s no better way to find the people that will help us succeed in our mission to build great software for our growing companies. People that network are very common. People that can build great communities are incredibly valuable. That’s who we want on our team.
No, not the Beatles song.
This is my single most important recommendations for speakers. If I devote an hour of my life to attend your talk, answer the ‘why?’ question.
We’ve all heard that there are only a few important questions to answer in a presentation, article, blog post, or anything else:
I’m going to make the bold assumption that most of you are developers, and therefore most of your presentations are technical talks. If you are going to present something, tell me why I should be interested in your talk:
Why should I spend more time learning this topic?
Why will this topic help me do my job better?
Why will this topic change my life?
Concentrate on Why because it’s all you have time for. In most talks, you have an hour. You can’t make the audience experts in a new topic in an hour. Your goal should be to pique their interest enough to motivate them to learn more. If you concentrate on Why? you’ll touch many of the other questions as well. You’ll probably show me how the technology works. You’ll demonstrate what it is. If it’s a beta, you’ll tell me something about when it will be available. And, you’ll almost certainly tell me what it is.
Answering why will also make it easier for you to tell a story. You won’t just be spouting disjointed facts, you’ll be creating the situations around when your topic will help me.
Answer that important Why question. You’ll be a better speaker, and you’ll get your attendees to take action.
CodeMash is next week. My favorite feature of CodeMash is that there is great content from start to finish. Because there is so much great content, it’s not possible to give others recommendations that are universally correct. Instead, I’ll say where I’m going to be. I’ve annotated some of my choices with alternative sessions and I’ve said why.
You’ll note that most of Thursday was spent on the .NET platform. Friday, I’m exploring other areas. (but see annotations)
I have enjoyed reading other posts about how much people enjoyed CodeMash. It is my favorite yearly conference. The people are brilliant, and energized about technology. It’s also one of very few events that embrace people with very different views.
I use CodeMash to learn about technologies I don’t get much time to use during my regular work. This year, that was Ruby, and Silverlight.
First ruby. I took a crazy route. I went to the pre-compiler with Joe O’Brien and Jin Weinrich on the Ruby Koans. But I did it with a twist: Instead of the reference Ruby implementation, I used IronRuby. After some initial hiccups that worked quite well. The test harness used by the Ruby Koans makes use of an END block in the test code. An END block (in Ruby) is code that is executed as the interpreter exits. It’s rather common as a test harness: load all the tests, and have the END block reflect on all tests, and execute them. It took me a while to get over that hump, but once I did, I learned quite a bit about ruby during the rest of the morning.
During the main conference, I went to some other .NET and Ruby talks (see My CodeMash Schedule). I’m impressed with the integration story for dynamic languages and the rest of the .NET stack. I am not a Ruby expert by any means, but I’ve whetted my appetite for more Ruby learning. And now, I feel like I can be somewhat productive in the language.
I went to both of Jesse Liberty’s Silverlight talks. Going into a .NET topic may not seem like stretching my horizons, but I don’t have a lot of background in Silverlight (Mike Woelmer knows quite a bit more than I do).
Jesse gave two talks: One was very basic, and the other a bit more advanced. Jesse is a great speaker, he’s very engaging, and provides a great amount of information in a small amount of time. He provided a great foundation for someone starting in Silverlight, with or without a .NET development background. I’m much more equipped to dive into the richness that is Silverlight. Jesse helped me get over that initial hurdle of working in a new environment.
It’s the rest of CodeMash that makes the conference special: The time outside of sessions was filled with great conversations about all kinds of technologies. That’s what makes CodeMash special. Hey, it was such a mixing of different views that the Java Posse even invited Chris Smith and I to be on their CodeMash panel. It was CodeMash, so no one came to blows.
Of course, after the tech talk was over, I spent the weekend at the Kalahari with the family in the water park.
As promised, here are the slides and demos from my CodeMash Talk: Going Dynamic in C#.
Please note that the demos are compatible with VS2010 Beta 2. They will not load (or run) on VS2008. I believe they will be compatible with future VS2010 builds, but predicting the future is very hard.
Thanks to the CodeMash committee for letting me speak again. It’s a great experience, and I’m proud to be a small part of the conference.
A friend of mine asked me for some pointers relating to giving technical talks recently. We had a great discussion and I thought that some of the advice was general enough that I would share it here. Many of us are involved in user groups, and we (as a community) owe it to our other members to help everyone learn.
Of course, I’m not the world’s authority on speaking, and I have quite a bit to learn. I want to hear your speaking tips as well.
View your talk as a story, in the literary sense. This has a lot of implications in your talk. First, think about books you really like (or even a movie). The very beginning hooks the audience immediately. You may not know much about the story yet, but you are hooked. You need to know more. OK, I admit that very few tech talks have the same hook as “Raiders of the Lost Ark”. But still, work on the hook as much as you can.
Next, continuing the ‘story’ analogy, consider the different components of your talk as characters in the story. Your story (at least for this talk) revolves around one topic. All other topics. are supporting characters. They are part of the story, but they have supporting roles. Do not spend more time on these supporting roles than they deserve. That limits your ability to tell the main story. These supporting characters can be covered, but only in such as these supporting characters tell your main story. Look through your slides, and your samples and look for opportunities to focus on your main story rather than these supporting characters. For example, if your talk is about C# 4.0, you may use a Silverlight application to demonstrate the features. Concentrate on C# 4.0, not Silverlight. (Of course, if your talk is about Silverlight, you do exactly the opposite).
Listen to yourself. Do you have an verbal tics? ‘Um’, ‘So…’, Most of us have them. Work on minimizing those tics. They will hurt your delivery.
Mix up the slides and demos. Almost all great speakers split up the cadence of their talk. They do some discussion. Then some demos. Back to slides, or a story, and onward. Staying in any one of those styles for too long will lose the audience.
Let’s talk about demos. That is the hardest part. It’s hard because we usually don’t speak while we are coding, and no one likes ‘dead air’. That’s why I use the trick of saying what I’m coding. It avoids ‘dead air’ and I’ve never been able to code one thing while saying something else. It’s usually something like:
“I’ll new up a List of Employees so that I can run a few queries. We’ll have to initialize it with some data. (see note one below). Now that we’ve got a collection let’s find the most expensive employees. That’s a query from emp in employees where salary is …”
By talking through the code, you can keep your focus.
Note: some code is not relevant to your talk, like initializing a collection with a bunch of values. Use a snippet, or already have that written. When you practice, you’ll spot these. They are the bits of code that you don’t want to talk about, because they aren’t part of the story. Just put them in place, and move on. It will give you more time to talk about your main story.
There are two crutches I have ready all the time:
Finally, you have to use the big font. And, you have to practice with it because that will make sure you format code so it looks good on the big screen.
The more you practice, the better you’ll be. Talk to any experienced speaker, and you’ll hear stories of when that person gave a talk that felt like a failure. They are great speakers because they learned from that experience. Everyone can do it, but it does take practice.
Yesterday, a number of community leaders and Microsoft employees gave a series of presentations for developers working for the State of MI.
We spent the better part of the day discussing the current and future trends for developers on the .NET framework.
My talk was on leveraging tools to improve the quality and timeliness of your work.
We’ve got a great treat for Ann Arbor .NET this week. Mark Mydland, from the Visual Studio Test edition, is coming through our region to speak at a variety of user groups. (Thanks to Jennifer Marsman for setting this up). It promises to be a fun evening, because in addition to the talk, Mark wants to know as much as possible about issues customers have with the product.
As always, AADND takes place on the second Wednesday of every month, at 6:00, at SRT Solutions office in downtown Ann Arbor (206 S. Fifth Ave, Suite 200). Please stop by.
Here’s the abstract and bio:
The phrase “drive quality upstream” has been abused so badly by ALM software vendors that it has to be relegated to the platitude junk pile along with such all time favorites as “work smarter not harder,” “Think outside the box,” and “Synergistic leveraging of code reuse.” Before we drive quality anywhere we need to give quality a seat at the table. VSTS Rosario release will do this by automatically gathering critical information about the project and code and making that data available when, where and to whom it is needed. During this discussion we will examine how Rosario impacts quality across the application lifecycle by:
• Allowing testers to provide developers with details about what the code did instead of just providing the details about what the tester did.
• Allowing development leads and architects to visualize and understand their current code (not the code they wish they had, but the code they really have) so that they can minimize the impact of changes; and
• Allowing developers to understand the impact of their changes in terms of affected tests, concurrency and bounds checking.
The Rosario release of VSTS will bring all project stakeholders together to allow richer information to be shared across every role to make software quality accessible and achievable.
Mark Mydland is the Principal Group Manager for the Visual Studio Team Edition for Software Testers product at Microsoft. In the past 12 years, Mark has worked as a developer and consultant across a wide variety of applications and industries. Mark first joined Microsoft in 2001 working as a member of the Natural Interactive Services Division (NISD). During his time in that group, Mark was the development manager for a team focused on analytics for assessing the efficacy of natural language interpreters with a particular emphasis on driving authoring simplification and relevance quality for user assistance. Based on this work, Mark filed numerous patents and coauthored a paper for the SIGIR journal. In 2004, Mark left Microsoft to work as a Director of Development at Getty Images where he led a change in process from a traditional waterfall methodology to a scrum-based agile approach which brought the release frequency from 12-18 months down to 1 month. Since Getty made extensive use of VSTS, it seemed a natural fit for Mark to join VSTS on his return to Microsoft in 2006. Mark received his B.S. from West Point in 1991. He has also held positions with USWeb/marchFirst and Andersen Consulting/Accenture. ec
OK, here's the deal: Those of us working on organizing the Ann Arbor Give Camp have been reaching out to charities for the past month or so.
There's good news, and a challenge. We've had more than 35 local and regional charities respond with requests for software. The good news is that means Ann Arbor GiveCamp can help a lot of worthy causes. The challenge is that we need roughly 175 developers / designers / dba's / all around software people to help make this happen.
Are you up to it? The event is July 11 - 13th, and you can signup here: http://annarborgivecamp.org/DevRegister.aspx
Let's see how many groups we can help.
Chris Woodruf did quite a few interviews during CodeMash last week. They've started to go live. You can see the list of the latest podcasts here
It's a good taste of the kind of content we had at CodeMash. I can't wait for next year.
The advantage of writing my recap of CodeMash a little later is that I can start by pointing at one everyone else has written. To begin, Jim Holmes shows the strain of organizing CodeMash. After a break, he discusses what happened at CodeMash.
As is usual, Scott Hanselman chooses just the right phrases to describe CodeMash. He gave a fantastic keynote, but what was more impressive was that he spent the entire conference just meeting with people and discussing everything with everyone. He even interviewed Dustin Campbell on F# for Hanselminutes. Dustin gave a great talk on F#. I didn't attend his talk, but I did get a preview of it in the speaker room before hand. He does a great job of presenting a new concept, and getting everyone to feel comfortable.
Sara Ford came from Redmond, and had the guts to show up wearing an LSU sweatshirt. She did open spaces talks on Visual Studio tip of the day and CodePlex. Sara is also one of those people that put a very human face on a very large company. If you spend any time with her, you can tell she enjoys what she builds, and has blast every day she creates something new.
Dave Donaldson was only there one day, talking about RESTful Web Services. Of course, I had to get him to show his OSU tattoo to Sara.
I really like Jay's recap. He discusses what he learned, how the communities built around different technologies differ, and what we can learn from each other. I missed his Castle Project talk, but I hope to hear more about the project during lightning talks at our office.
Patrick Steele wrote about his experience teaching about Monorail, and using it. (You'll not a thread here that Jay discussed the Castle Project, of which Monorail is one component.)
Well, what about my experience? Well, I had two talks. One was on building an IQueryProvider implementation. That didn't turn out as well as I'd hoped. The more I did research on that topic, the more it was clear that there is just too much infrastructure to build in order to make a worthwhile implementation. That always makes a talk difficult. You can't build it there; you can only discuss code you pre-built. The danger in that is that you give people the impression that something is easier than it is. I hoped to avoid that without completely scaring them away from building an IQueryProvider, if it's the right thing to do. (It often isn't, but sometimes it can be worthwhile.) That's a blog post in itself, so I'll leave that for another day.
My second talk, "Real World C# 3.0" was much more fun. I was the first morning session after the keynote. I showed up with a deck containing 10 slides (including the title, agenda, about me, and questions). This was a 70 minute conversation where I spent the whole time building code and discussing the advantages and disadvantages of different solutions you can build for different problems. I hope everyone there enjoyed that style of talk. I got lots of great questions, so it was clear that most of the room was thinking and engaged.
The rest of the time, I was trying to learn new things. I know more about Python than I did last Wednesday (but I'm by no means proficient with it). I know a bit more about Silverlight.
My favorite thing about CodeMash is seeing first hand just how much technical brainpower we have in this region, in many different technologies. I learn a lot by talking to other folks in our area. I learn what they are working on, what the challenges are, and how they are trying to overcome those challenges. Regardless of the tools they are using, we are trying to solve similar problems, and we can learn from each other.
I'm already looking forward to next year.
As I finish my talk preparation for CodeMash, I'm putting together my schedule.
You can view the silverlight page here: http://codemash.org/sessionscheduler/?1=2&2=28&3=4&4=7&5=3&7=42&8=14
However, that doesn't let me annotate the agenda, and discuss some of the other items at CodeMash. So, here's my take, including some alternative recommendations:
Wednesday evening: 7:00 Experts Panel: Talking Technology to humans. I've been trying to find the answers to this for years. If you're in technology, and your actually interested in making money occasionally, or even just convincing the business folks why your latest technology idea has merit, you need to attend. A number of technology leaders that actually get suits to listen to them will give you ideas on how to get your technology initiatives understood and adopted by your company.
Thursday 9:30: I'm going to be in the Experts Zone during most of the first session, but if I weren't, I'd be at the Coding in Silverlight talk.
11:00: This is a tough one. I want to learn Python, so I'm going to Catherine Devlin's "Crash, Smash, Kaboom Course in Python." Otherwise, I'd be in Jay Wren's Castle talk.
3:30: I'm going to be at my LinqTo<T>: Implementing QueryProvider talk. I don't have much choice here. If I weren't giving a talk now, I'd be going to Dianne's "Introduction to Scala" talk.
4:45: I'm going to Dustin's talk on "Putting the Fun into Functional with F#". Dustin is a great speaker and the topic is pretty cool.
Friday gets really interesting:
9:30: I'm giving my "Real World C# 3.0" talk here. It's a talk about how all the .NET 3.0 and 3.5 code work together to increase your productivity. However, this is a stacked time. I want to see Bruce Eckel's "Why I Love Python" talk. I also wanted to see Dick Wall's "Introduction to Android" talk.
Later in the morning, I'm taking a break.
At 1:30, Patrick Steele is doing a vendor session on "Introduction to MonoRail" that will be interesting. He's showing how he did a non-profit project and MonoRails was the quickest path.
2:30 is the Advanced Silverlight session. This is one of my goals this year: To learn move about Silverlight. If I weren't interested in Silverlight, I'd be doing the Continuous Integration talk.
The last session includes Jim Holmes' "Story Driven Testing". I very intrigued by that topic. It promises to show the way to build test cases that actually include how to create and use tests to validate customer (or user) expectation.
I'll be missing part of that session to head over to the experts zone for more Q & A.
CodeMash has become an embarrasement of riches. There are already too many great sessions, and no matter what I do, I will be missing something interesting.
Steve blogs about it here: http://aspadvice.com/blogs/ssmith/archive/2007/11/02/Speaking-in-Ann-Arbor-November-14th.aspx. He'll be up in Ann Arbor, discussing ASP.NET caching and performance. I'm on a couple email lists with Steven and I know he's got a tremendous amount of information on the subject. If you do anything with ASP.NET, this is a presentation you need to see.