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.
Well, it’s been too long since I blogged regularly. That’s because of a large teaching project I was working on over the summer: Experience IT.
The goal was ambitious: Teach more than 40 aspiring developers the skills they would need to succeed in entry level jobs as .net web developers with companies that are growing in Detroit. My role was to develop the curriculum and act as one of the instructors for an 8 week intensive learning experience.
Our first major challenge was to teach such a diverse group. We had to keep the more experienced students engaged while not leaving the least experienced lost. We did that by splitting up into smaller groups quite often. Thankfully I had a team of instructors that really knew the technology stack and the material. They also had a wealth of industry experience and could relate everything we were teaching to the real world tasks developers do everyday.
The students spent the final two weeks building group projects of their own choosing that demonstrated what they’d learned. All of us enjoyed these two weeks the most. The students had to plan out their projects and scope them appropriately. They needed to assign work to each of the team members. They had to make use of the ALM tools we use everyday: source control, scrum boards, deployments and bug tracking.
Overall, I think the experience was almost as intense for the instructors as it was for the students. We really enjoyed the energy of the last two weeks. All the teams stretched themselves beyond the scope of what we taught. They were using the introductory knowledge we taught and adding to it by doing their own research, and figuring out new libraries and techniques. As instructors, we were busy helping them learn and expand their horizons.
After the class ended, the students started working on their job searches. Several have already landed positions. A lot more are going through second interviews with many of the growing companies in Detroit this month. I hope to hear that many more have started new careers in the coming weeks.
I’m very pleased with the outcomes so far. I can’t wait for the next eager group to get started. The other instructors and I are making a few tweaks to the curriculum so that we can do even better. One change I do want to make is to have students spend some of their time reading and explaining code. I think that would be a great way to improve their skill at joining larger projects.
I’ve been lucky enough to have been very successful in this career. This has been a great opportunity to help others find their own success. I can’t wait to see how far they can go on this journey.
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 really enjoy the ASP.NET MVC Route Debugger that Phil Haack wrote. It’s even cooler now that it’s deployed as a NuGet package.
I was having trouble getting error redirection working in an ASP.NET MVC site deployed on Azure. I could not figure out why I could still get to the yellow screen of death.
I added the route debugger, and the answer was quickly obvious. I’d forgotten an Index method on my ErrorController class. I added that method, redirecting to my error page method, and all was great. I turned off the route debugger in web.config and deployed to Azure.
It didn’t work at all!
I’d originally written the site using MVC 2, and the route debugger needed a new version of ASP.NET MVC (which was installed on my developer box.) To fix the problem, I needed to deploy the latest version of ASP.NET MVC in Azure along with my site. There are a fewposts that explain how you can do this. However, for ASP.NET MVC now, there is an easier way. Right-click on the web site node in Solution Explorer, and select “Add Deployable Dependencies”. You’ll see the following dialog:
Just check both boxes, and the add in configures a _bin_deployableAssemblies directory with everything you need. I deployed this version to Azure, and everything is fine. I can modify my web.config online and see any route errors either on the Azure fabric, or locally.
When you’re working in Azure, you need to remember that you almost certainly won’t have the same environment you have on your local box. You’ll be missing dependencies. You need to manage those when you first deploy to Azure. You may be missing things.
Last week, three Microsoft Vice Presidents coauthored this post to clarify Microsoft’s position on HTML5 and Silverlight. The answer isn’t too surprising: both are very important. This is consistent with two requirements we developers have heard since we first started writing software:
Of course, now, we’re adding a new requirement: users may have more than one device of choice. People carry smart phones, tablets, and laptops for different times in their lives. It’s important to me, as someone that spends much of my professional life using C#, that the choice between the reach of HTML5 and the richness of Silverlight is mine; Microsoft is not making one a better choice than the other. In some product scenarios, I can also choose to invest extra development time and money to support both. Each application is different, and it’s important for us to evaluate each scenario and each application to determine the right choice for our customers.
My own application usage (and yours too) shows what kind of a world we live in: On my phone, I use a facebook app to keep up with friends. At home, I visit the facebook website. I have specific client applications for twitter on my laptop and my phone. We use a chat application (which can be run in a browser) to communicate with co-workers. I’ve got a desktop mail client, a phone mail client, and I occasionally visit the web interface for email. All those experiences are important. The specialized applications provide a simpler and better experience for that single purpose. They also work much, much better on those occasions where I cannot get an internet connection. That’s where Silverlight shines. The websites are available on more different devices. They are easily accessible from a public computer, or a friends computer. That’s where HTML5 shines. Both are important.
Our customers expect us to help them make those same decisions. We need to assess their expected customer base. We need to make serious, thoughtful recommendations about how to provide the best experience for the greatest number of users at the least cost. Those tradeoffs are what engineering is all about. We’ll continue to create applications that use HTML and leverage a browser for the user experience. We’ll continue to create apps using Silverlight. We’ll create apps using Flex or Air for non-windows devices. The decision depends on variables that are specific to the application, and the expected audience.
In the same way, Microsoft is making investments in both HTML5 and Silverlight. They know that some customers will need the reach of HTML5 based applications. Some customers will need the richness of a Silverlight application. Some customers will need both. I expect that we’ll hear more about the HTML5 tools at MIX, because the Silverlight tooling is more mature, and already satisfies many application needs. I’m glad to see the HTML5 investment grow. In today’s world, it’s expensive to create an HTML5 application. The tools are not very mature, and the cost of development is greater than it should be. As the tooling improves, HTML5 will be less expensive. We can recommend a technology stack based on customer needs instead of development costs.
HTML5? Silverlight? Flex? How about all three? In the near future, it will depend on the market for the application, not the cost of development. That’s good news for us as software users and as software developers.
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.
I recently got a question that had a lot to do with the order that events are processed in an ASP.NET page. There was an article on this topic on 15 seconds that covered the topic rather well.
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.