Posted on 9/30/2008 7:25:25 PM by Justin Etheredge
I recently made yet another career move and joined the team over at Dominion Digital. It seems that my career has had many tumultuous changes over the past few years, and so why did I make yet another one? I thought about that quite a bit, and it isn't the easiest question to answer, but I think it all comes down to wanting change. I almost felt as if I should say needed change, but I think that "need" is just a bit too far. I really wanted something different, something new, something that was a challenge.
I just get burned out working on the same software and on the same job. After a few years of doing it, I just start to dread looking at the same thing day in and day out. I craved some sort of change. I think that getting into consulting will allow me to stay on the top of my game and get to work with new technologies. I picked Dominion Digital because I think that they believe very strongly in having a good work life balance, which is extremely important to me. I am very active in the community and I am very busy blogging and I run my own user group so I need to have some time left over to hang out with my wife. They are also a small company and so they seem to have a "family" feel to them.
To sum it up, I am really excited about the move and if you are a smart and passionate .net developer (in Richmond VA) who is looking for a new opportunity then contact me through twitter or the contact form on this blog.
Posted on 9/28/2008 7:07:12 PM by Justin Etheredge
I don't know about you, but I can say with certainty that I am excited again about the Microsoft platform. With today's announcement that they are going to be making jQuery a core part of the Microsoft development platform I can finally say that I think they are "getting it". Or at least Scott Guthrie and DevDiv gets it. I think that the last time I felt this excited about working on the Microsoft platform was back when the first rumblings about .net were starting to make their rounds. And guess what, back then I wasn't even working with Microsoft development tools. I was working with Borland tools, and made the switch over to .net as soon as I was able to get a job working with it. Back then my goals were to work with a powerful platform which allowed me to do what I wanted to do, and most importantly, allowed me to find work.
Over the years my priorities have changed a good bit. Thankfully I am no longer as concerned about finding work on a particular platform. I have been developing on the Microsoft platform for a many years now, and I honestly haven't had too hard of a time finding gainful employment. I am very thankful for that. What has changed from many years ago is that I am no longer as enamored about what platform I am working on. I no longer care who makes my tools, I just want the best tool for the job. I don't care what OS runs my application, as long as it is fast and stable. Just as I don't care who writes my libraries, as long as they are robust and flexible.
This is why it has been hard for many Microsoft web developers over the last few years. Those of us who really cared about writing good, standard, and usable web sites were mostly left out in the cold by Microsoft. The ASP.NET framework, while powerful, abstracted away web development to the point where it was extremely hard to work with other tools that our JSP, Python, PHP, and Ruby brethren were foaming at the mouth over. We couldn't use Prototype, Scriptaculous, and worst of all jQuery. I mean honestly, we could barely use CSS. Now, to say that we "couldn't" use these tools is a bit of a misnomer, so let me say that we could use the tools as long as we smacked them around for a few hours, put a bunch of javascript into strings, did a rain dance, and then spit it all out into our pages with injected control names.
And all of this was so that we could drop a bunch of controls on an html page without knowing any html. We sacrificed standards, interoperability, and control for an abstraction that actually kept us from learning the underlying platform. I'm not pointing any fingers here, I was guilty myself. I remember when I finally started getting serious about exploring other web development frameworks and I came to realize how bad I was with HTML! Here was a technology that I dealt with on a regular basis, that I could read and understand, but I had a very hard time writing by hand. How embarrassing! But we also have to realize that this is what the ASP.NET platform set out to do. It was trying to move developers from winforms to webforms and allow them to use some of their skills that they had attained. The web was so different from desktop development that Microsoft wanted to span the gap, and they actually did a damn fine job doing it.
But then something happened. Suddenly many of these developers that had switched over to ASP.NET started becoming real web developers. They started *gasp* writing their own javascript and trying to write xhtml compliant pages. And they found that it was a royal pain in the ass. Many Microsoft developers shunned these things as fluff, saying that there was no reason to write compliant html or roll your own javascript, it was just too hard. But Microsoft saw many good developers getting fed up with the platform and moving on to things like Ruby on Rails or Django. On the CSS front Microsoft started making things much better in ASP.NET 2.0, allowing us much more control over css class names on many controls. Things were better, but the framework still spit out tons of ugly html and inline css, which was really hard to style and work with. Many web developers were left writing their own custom controls or simply spitting out strings of html into pages.
Microsoft also started up the ASP.NET AJAX project which would allow Microsoft developers to work more easily with Ajax, and even had some decent javascript libraries for html manipulation. But many developers still felt like this wasn't enough, there were other libraries out there that they liked better, and they just wanted to be able to use them with ASP.NET. Sadly, the reality was that ASP.NET just wasn't designed with these other frameworks in mind, and therefore it would likely always be hard to use them.
Microsoft found itself in an interesting situation. On one hand, they had a framework (ASP.NET) which was being heavily adopted by many enterprises and was pretty darn easy to use for your standard CRUD web applications. But they had a smaller portion of web developers who wanted to write fast, lightweight, javascript heavy, web applications and didn't want to be bogged down by the heavy ASP.NET framework (and that freakin' page lifecycle). Even though these were a smaller portion of developers, these people were also the thought leaders and Microsoft knew that if they drove them away, then the rest of the market would be only a few years behind.
So, in steps ASP.NET MVC. Microsoft knew that they had an excellent platform in .NET and they knew that the ASP.NET framework worked for a large number of developers, but they needed a framework that worked in concert with the web. ASP.NET MVC gave Microsoft developers an alternative framework on which to build real web applications. And it allowed you to do this by getting out of the way. It let you actually write your own html if you wanted to. This was a big step for Microsoft because they had to admit that ASP.NET was not a one-size fits all solution. It was an even bigger step because they released it open source under the Microsoft Public License. And they decided to release regular source drops throughout the development cycle in order to get the community involved in evolving the platform! This was not your grandfather's Microsoft!
But while they were releasing the source code for the .net framework and releasing very good OSI certified open source licenses, they were pulling a Jekyll and Hyde. They were also releasing frameworks like Unity and MS-Test. Unity, which is Microsoft's dependency injection container, and MS-Test, which is Microsoft's NUnit clone, looked to many people as a Microsoft "me too" frameworks which added very little to the development stack and were just wasted effort because they duplicated the community efforts. Many developers were puzzled why Microsoft would go through all of the effort of creating these frameworks when they could have just supported the open source tools and even included them in their development offerings. Many people, myself included, thought that we might never see the day when Microsoft would start shipping non-Microsoft open source tools as part of their development platform.
When ASP.NET MVC was released we saw a tiny glimmer of hope in Microsoft's unwavering effort to not ship open source tools in their development offerings, and that came in the form of the Unit Test Project creation form which supported NUnit, MbUnit, xUnit and any other unit testing framework that wanted to get in on it. This was a pretty big step, because they were actually supporting the integration of open source projects that compete with one of their own tools. This is basically the equivalent of them letting the Visual Studio built in unit test runner to run any unit testing framework. But this was still pretty small compared to what was coming next.
When Microsoft announced today that they were going to include jQuery as part of the Microsoft development platform, I was totally taken aback. At first I thought that they were saying that they were going to ship jQuery with ASP.NET MVC, but they weren't, they are planning on shipping it with Visual Studio in the future! They are even going to provide support for jQuery. jQuery is slated to be a core part of their future web development platform. I think that this represents a colossal shift in Microsoft's stance on open source, and I am hoping that it leads to many more open source projects being brought into the Microsoft fold in the future.
In the end I think that Microsoft still does a lot of things that makes me shake my head, but Microsoft's announcement that they are going to include jQuery with Visual Studio, along with their impending release of ASP.NET MVC and IronRuby has me more excited about the Microsoft platform than I think I have ever been. I'm glad to see that Microsoft is making huge strides in the right direction and I think that there are countless others in the community who are excited about this as well.
Posted on 9/28/2008 11:23:56 AM by Justin Etheredge
If you are in the mid-atlantic region (or further if you love to drive), then come on out to Richmond Code Camp 2008.2 this Saturday October 4th! There is going to be almost 40 different presentations (by around 35 different presenters) spread across 7 different tracks. Those tracks are as follows:
Application Development
Career and Profession
Database and Business Intelligence
Development Methodology
Emerging Languages
Mobile Application Development
SharePoint Development
There is going to be a little bit of something for everyone! I am giving a talk in the Emerging Languages track on IronRuby called "Microsoft N' Ruby Sittin' in a Tree". It is going to be an overview of the Ruby language in order to give you a bit of an idea about what Ruby can do for you. I will hope to touch on many of the best parts of Ruby and hopefully leave you wanting to learn more. Isn't that what good presentations are really about? I mean, honestly, what can you really learn in an hour? You can get a good overview, but what presentations do for me is to get me started in the right direction so that I can explore and learn further.
If you would like to attend, then please sign up! The Code Camp leadership and I would love to see you there!
Posted on 9/27/2008 6:35:34 PM by Justin Etheredge
I gave a presentation Thursday at the Richmond Meet and Code. This presentation covered Microsoft's new web app framework "ASP.NET MVC". My presentation was actually quite short, but one of the things I wanted to show was the flow of a request into System.Web.Routing and through System.Web.MVC. I looked around on the web and I could not find one, so I ended up creating one. I decided to go ahead and reformat it to fit on the blog.
This graphic shows the user sending in a url, and a Route being matched inside of the RouteCollection. I glossed over this part a bit, but what I wanted to highlight was the Url and RouteHandler that the Route class held. This is the way in which the request is passed from System.Web.Routing over to System.Web.Mvc. Once it gets into System.Web.Mvc I tried to show all of the major classes involved and the method that is invoked on each.
I hope that this helps someone out!
Posted on 9/20/2008 10:40:28 PM by Justin Etheredge
This post is my first post about you. Yes, you. I have been thinking a lot recently about what I can do in my everyday practice in order to make myself a better developer. I had thought up a few ways in which I can better myself on a day to day basis, but they all seemed a bit shallow and cliche. So, this is where you come in. What can we, as developers, do on a day to day basis to improve ourselves as developers? What small changes in our habits can we make that will have lasting impacts on us?
Since I started this blog in order to make you and I better developers, let's take this chance to collaborate and come up with a truly awesome list of things that we can do in order to improve ourselves. Please, feel free to add a comment with a suggestion or pass this question along on your blog and let me know what your readers come up with. I am going to take all of the feedback that I get and try to create a list with the best ideas on how we can be better developers. If you blog about it, make sure you provide me a link to your post so that I can link to it! Just don't call it a meme or my friend Scott will kill me! (he thinks that a special place in hell is reserved for people who use the word "meme")
I have wanted to get create a post like this for a while now, but I wanted to make sure that my readership was large enough to get some good feedback. Well, I recently passed 1000 blog subscribers (yeah, I know, tooting my own horn :-) and so I feel like I should be able to get a few responses. Don't prove me wrong dear readers!
Now, I am not completely going to cop out and leave this up to you guys. I am going to put two of my ideas on here, and then let you guys take it from there.
1) Emulate - I am not talking about emulating code, but I am talking about emulating programmers. There are always going to be programmers around you that are better than you. And if you think that is not the case, then you are probably just seriously deluded, or you are on a team of one. If you do have some great programmers around you, watch what they do and how they work and you might pick up a few tips that you never thought of!
2) Involve yourself in your local developer community - For me, this has probably been then most important thing I have done in order to make myself a better developer. There is something about surrounding yourself with other smart, driven, and dedicated developers that just keeps the fires of learning going. I know that since I have been involved in my local user group I have made more great friendships and met more awesome developers than I could ever count. Just for kicks I am going to call out a few right now, so cheers Kevin Hazzard, Andy Leonard, Kevin Israel, Harper Trow, Andrew Duthie, James Avery, Jeremiah Ivan, Al Tenhundfeld, and many many more.
So, is there a tool, technique, or habit that gives you that edge? Well then share it with us!
Oh, and I just decided this, but I am going to throw in three copies of "The Pragmatic Programmer" (affiliate link) to the top three best ideas that are submitted. This is one of the best development books I have ever read and it certainly made me a better developer. I will pick the ideas that I think are close to the top and then put a poll up at the end to decide the best of the best. If anyone in the top three already has copies of the book, then let me know so that someone further down the list can get it. Remember, this is all about making you a better developer!
Update: I may have started this off on the wrong foot by throwing out some very generic ideas, but I do want to see some specifics. For example, Rick below said "Read" and Angel said "Practice" which are both excellent suggestions. But is there a specific blog or book that you have read which has made you a better developer? Even better if it is outside of the normal books that most people can think of. Is there a specific paper that you read, or algorithm that you have learned? Was there a specific project Euler task that you completed which turned on a light in your head? Was there a blog post that inspired you? On top of broad suggestions, I also want to see specific things that you did or experienced which made you a better developer!
Update: I am going to start putting links here to other people's posts who have replied to this: