Tuesday, July 15, 2008

Brian Sullivan tagged me with the latest ongoing meme. I’m really sort of excited because I’ve missed out on all the other memes going around. Jeff Atwood probably wouldn’t even consider me a real geek because of that. (I haven’t updated a Wikipedia page either! Gasp!)

How old were you when you started programming?

I didn’t write my first “Hello World” until I was 18 in COMP 170. I created my first personal website when I was 15 I think, but my primary tools were Netscape Composer and Paint Shop Pro. :-) I think I had figured out by that point some very basic Javascript, but I really had no idea what I was doing.

How did you get started in programming?

I remember when my dad got a new PC with Windows 3.1 on it. Prior to that, I knew how to ‘cd’ between directories and how to run ‘dir’. All of these commands were, of course, to get to the directory where my games were installed. :-) I never really stayed in Windows at the time, because all the games were still DOS-based. I didn’t really have much to do with Windows (except for the Hot Dog theme), until Windows 95 came out. That’s when I started becoming more of a computer enthusiast. I remember troubleshooting Dial Up Networking so that our 14.4 modem would connect up. I also remember buying my first piece of hardware, the 3dfx Voodoo card.

As I mentioned, I started doing some basic web pages when I was in high school. This was the time of animated GIFs and tiled backgrounds, if you’re interested. This was also back when 56K modems first came out and there wasn’t yet a clear standard on how 56K modems would talk (you could either go with US Robotics or the cheap brands) and I worked as tech support at a local ISP. It wasn’t hard to do tech support because I had been troubleshooting my own Dial Up Networking problems for a few years already.

Coming from a tech support role, I didn’t really have any programming knowledge. I knew how to build a computer and I even knew about msconfig, but programming??? Nah… not really. Just WYSIWYG HTML.

When I graduated high school, I either wanted to be a musician or work with computers. Seeing as how I didn’t really want to teach high school band, I decided to go to school to learn about computers. I didn’t really know what Computer Science meant, but hey, my grades were pretty good so why not? So, I chose a major of Computer Science and the rest is history.

What was your first language?

Unlike the rest of the programming populace, my first language was actually not BASIC, but C++. I didn’t actually write a line of BASIC until my junior year of college! I would say that I currently prefer C# over VB.NET, but it has more to do with terseness than it does with braces. For the same reason, I’m a fan of Ruby as well.

What was the first real program that you wrote?

Are you saying Hello World doesn’t count? C’mon!

I’m going to define “real program” in this case as something that I could show my parents. I couldn’t show them “Hello World” or a command line application to create a binary search tree because they couldn’t relate to it. However, I could show them a GUI maze application that I wrote in Java. It had four players (one of which could be human controllable) and then each player raced to get to the exit. I also wrote a Solitaire program in C++, a networking Tic Tac Toe game in C++, and a Paint program in C++ (using the Windows API).

My first team application, like Brian’s, was created in the capstone course at Harding. We wrote a version of Othello that had to be networked with an AI. I wrote the networking code in C#. It even had threading code, which of course was written completely wrong. I’m still not entirely convinced that I can write threading code correctly today. :-)

What languages have you used since you started programming?

In college, I primarily used C++ and C#, but I also had some exposure to some Assembler, Java, VB.NET, Perl, and even LISP! My work experience includes a (thankfully short) period of COBOL and JCL on an IBM mainframe, but primarily has been in VBScript (both classic ASP as well as scripts), Javascript, PowerShell, C++, C#, and VB.NET.

In my personal projects, I’ve used C#, VB.NET, JavaScript, PowerShell, PHP, Python, and Ruby. I’m sure I’ve missed something in there.

What was your first professional programming gig?

I got hired out of college to work at Data-Tronics, Corp. where I still am to this day. My role has changed significantly now, where I’m trying hard to push out 40 years of IT practices with more modern methodologies (down Waterfall, down!) and technologies (down Mainframe, down!).

If you knew what you know now, would you have started programming?

You bet. I’m a geek to the core.

If there was one thing you learned along the way that you would tell new developers, what would it be?

I’d have to agree completely with Brian – get involved in the community. Do not let programming become just the job you perform. Like JP, get passionate about developing. If you don’t enjoy what you do, there isn’t any point in doing it. Start reading blogs and going to user groups. You’ll be overwhelmed at how much you didn’t know, but remember that no one else knows it all either. We’re all learning together.

What's the most fun you've ever had... programming?

I can’t think of any one specific instance, but I think one of the best feelings is, after having spent literally hours trying to debug some problem and then giving up and going home, waking up the next day and having the light bulb come on with the solution to this problem. I love solving problems with software.

Tag, you’re it!

Colin Neller, come on down!
Randy Walker, you too!

I’ve got other tags if anyone else is interested. I might even give some out!

posted on Tuesday, July 15, 2008 11:36:10 AM (Central Standard Time, UTC-06:00)  #    Comments [3]
 Monday, July 14, 2008

Here it is, final day wrap up.

The first session of the day was with Glenn Block and Brian Noyes on Composite WPF (the framework formerly known as Prism). You can think of the Composite WPF1 library as the WPF version of the Composite UI Application Block (CAB), but it really is a lot more than that. Something to note regarding Composite WPF is that they didn’t start with the CAB codebase, but instead began writing their StockTrader reference application and pulled the framework out of their implementation instead of the other way around. The entire framework was written in a TDD manner. Honestly, it really shows, too. I’ve been using the framework on one of my projects at work and it is one of the first examples from Microsoft of a well decoupled (and useful) piece of software that I’ve seen. I’m a huge fan.

The next session was by Dustin Campbell on “Hardcore Reflection.” Of all the sessions I attended, I think this was the one that started at exactly where my knowledge ended and built entirely on what I already knew. In other words, I learned a lot in this session! Dustin covered topics like RuntimeMethodHandlers, reflection-only assembly loading, and DynamicMethods (via IL generation). I had never really looked at anything under System.Reflection.Emit (frankly because it was scary), but it really isn’t all that bad. An interesting note is that DynamicMethods are what the DLR is using for its high performance in languages like IronPython and IronRuby.

After lunch, I stopped and watched a little “Speaker Idol” from the DotNetRocks guys.

 Speaker Idol at Tech Ed

Next, I attended a session with Roy Osherove on Design and Testability. I would sum this talk was on how good code design and architecture allow for unit testing, which assists in maintenance because products spend far more time in maintenance than they do in the initial coding phase. (this is where a lot of the RAD ideas fall down - “Look, I’ve got an application written in a day! Look, I’m spending a week debugging this thing because I can’t find anything!”) If you’re unfamiliar with ideas like Dependency Injection, I would encourage you to check them out. If you have code that relies on external dependencies (shared components, services, other classes, whatever), don’t have your code be in charge of creating it. Instead, pass that dependency (the interface, not the actual implementation) in via the constructor. In doing so, your constructor declares everything that it needs in order to run. It also allows you to override dependencies for testing or plug in fake services so that you can verify UI functionality without hitting databases or whatever. I’m glossing over details, but thinking in terms of breaking dependencies apart will change the way you think about code and, particularly, what abstraction really means.

The final session of the day was by John Lam on IronRuby. I am very excited about the IronRuby project. Ruby as a language intrigues me and being able to use it in the .NET Framework (and thus with projects I’ve already got) is very appealing. Something that was very exciting was getting to see the “world premiere” of IronRuby running on ASP.NET MVC. Note that I didn’t say Rails, but ASP.NET MVC (Rails being the MVC framework on Ruby, while ASP.NET MVC is the… MVC framework on ASP.NET :-)).

All in all, I really enjoyed the conference. Something I didn’t quite expect (having never been to Tech Ed), was that there was very little that I saw that was completely new to me. This is likely a sign that my feed list is far too long, but you can stay relatively current if you will just spend an hour or so a day reading blogs! More and more, I’m beginning to feel that the actual face to face communication is where the real value in conferences comes from. Being able to talk to people who face the same problems you do every day or getting to speak with the people who work on the .NET Framework every day carries a lot more value. Blogs provide plenty of very current and relevant information, but text can communicate only so much. If you’re a developer, there are plenty of other resources outside of expensive conferences like Tech Ed that are available like user groups (hi FSDNUG!) and local conferences (hi DevLink!) that can give you a lot of the value. If you’re not already participating, why not? Get involved2!

1 Composite Application Guidance for WPF? Composite Application Library (CAL)? Why couldn’t we have stuck with Prism, guys?2 I didn’t realize this post would turn into a call to action to get involved, but that’s what stream on consciousness writing does I suppose.

posted on Monday, July 14, 2008 7:20:58 AM (Central Standard Time, UTC-06:00)  #    Comments [0]
 Thursday, July 10, 2008

I was going through some code today and stumbled across the following:

Mmmmm... that was a good exception

Hilarious.

posted on Thursday, July 10, 2008 9:09:37 AM (Central Standard Time, UTC-06:00)  #    Comments [6]
 Wednesday, July 09, 2008

After a short hiatus, I’m back with yet another day review of Tech Ed. Just one more after this!

The first session I attended on Day 3 was with Luke Hoban and Ted Neward and was entitled “the Busy Developer’s Guide to F#.” If you haven’t heard about F#, it is a product of Microsoft Research that “[combines] the efficiency, scripting, strong typing and productivity of ML with the stability, libraries, cross-language working and tools of .NET.” If that didn’t make sense, the gist of it is that F# is a functional language built on top of .NET. Look at the Getting started with F# page for details. The really interesting thing about F# is that the plan is that it will actually graduate from Microsoft Research and become a full blown product from Microsoft. The session itself was great – Luke did the demos while Ted did the talking basically. I’d really like to look into this more. I’ve got the latest version installed, but I haven’t written anything substantial yet.

The next session was with Jeffrey Palermo and was entitled “Architectural Concerns for ORM.” While the session was on ORM, what I really got out of it was effective communication of topics like separation of concerns and true decoupling of architecture. I’ve understood the concepts, but I am very ineffective at communicating those concerns to my coworkers. Jeffrey did an excellent job of communicating this and I appreciated that.

One of the most random things that occurred while at Tech Ed was at lunch on day 3. I sat down for lunch and a few guys sat down at the table. Every one of them had Sun badges on. Yes, Sun Microsystems, the guys who make Java. I was curious, so I asked what was going on. :-) They were there basically to see what Microsoft was up to. Makes sense I guess. I personally hadn’t coded Java since college, but it was still really interesting to talk to them. We all geeked out on Java, dynamic languages (like JRuby and IronRuby), mainframes, and horror stories about hardware (like when the sewage backed up into our computer room).

After lunch, I attended a session from James Newkirk on Unit Testing. If I were to summarize the session in a sentence, I’d call it “Reasons Why I Wrote xUnit.” James’ story is interesting because he is also one of the original authors of nUnit, which was heavily influenced by jUnit. After James left the nUnit, he decided that current thinking on testing frameworks was a little off and he and Brad Wilson created xUnit. The session was very interesting and, as a result, I’m now trying out xUnit on one of my current projects. Easily my favorite thing about xUnit is the change from the [Test] attribute to [Fact] attribute. Unit Testing, or more accurately Test Driven Development, is not really about testing, but creating specifications and design (see Behavior Driven Development which is also an attempt to drive this point home).

After the session, I went up to ask James some questions, but he needed to head down to an “Ask The Experts” session he was giving on TDD. I ended up walking down with him and Peter Provost and talked to them about testing, TDD, design, etc. for a good hour. It was really informative and I got some great advice.

posted on Wednesday, July 09, 2008 6:47:30 AM (Central Standard Time, UTC-06:00)  #    Comments [0]
 Thursday, July 03, 2008

Continuing in my never-ending (at least until day 4) review of Tech Ed, this post will talk about how the second day of the conference went.

At breakfast, I got to sit down at the same table as Sara Ford, a PM at Microsoft on the CodePlex team and a well known for her Visual Studio Tip of the Day series. That experience sort of reinforced the fact that you really do get to interact with the people who are working on the tools that we use every day.

The first session from that day was entitled “Nine Essential Tools for Every Developer.” I left early because I didn’t notice the subtitle that told me the session was actually about Office Power Tools. I don’t currently develop any Office interop applications, primarily because we’re still supporting Office 2000 (if not 97). It wasn’t exactly the most accurate session title.

I attended a session by Drew Robbins on hosting WCF in IIS7. I am seriously excited about IIS7 and it really makes me want to move my development machine from XP to either Vista or Server 2008. It won’t really make a difference because we’re still targeting Server 2003 (and thus IIS6), but it is still awesome. I got a lot more out of this session on IIS7 than I did on WCF hosting. The best part of the session for me was the demo of the IIS7 PowerShell provider.

At lunch, I got to hang out with the TwitterTribe.

TwitterTribe lunch (includes Colin Neller, Scott C. Reynolds, Alan Stevens, and others)

I didn’t catch everyone’s name, but the picture above has (from left) Colin Neller (http://twitter.com/cneller), Scott C. Reynolds (http://twitter.com/scottcreynolds), and Alan Stevens (http://twitter.com/alanstevens) (after the guy in the blue shirt). The guy on the right just out of the picture is Dan Hibbets (http://twitter.com/MobilityMatters). Keith Elder (http://twitter.com/keithelder) swung by later as did Cory Smith (http://twitter.com/DualBrain). I apologize to those that I missed (leave a comment and I’ll add you in, too). We had a lot of fun geeking out and thanks to Alan for organizing it. Alan even put together a poster with the “Twitter is having problems” image so we would know where to meet up. :-)

After lunch, I attended a session by Scott Hanselman on Dynamic Data in ASP.NET. Scott is a great presenter, but you already knew that if you’ve watched any of his sessions or screencasts. This session served as a part 1 to a two part session, but I skipped out on part 2, because I had to catch the session on the Managed AddIn Framework.

The session on MAF with Jesse Kaplan was very exciting to me. Some of the readers will know that the primarily application that I work on dynamically hosts other application in it. I deal with things like Assembly Binding, Assembly Loading, versioning, etc. every single day. I am really excited about System.AddIn. Having the ability to load up addins in separate AppDomains to have isolation from your host to your addin is a great feature. Honestly, I know this could be done before, but the real benefit for us is the ability to host our addins (that have a UI) in a separate AppDomain. Through some very nasty hacking, I was able to get WinForms UI to run in a separate AppDomain from the host WinForms UI, but it was not ideal by any means. If you want to do this sort of thing, look at System.AddIn. I’d like to present on MAF at the user groups in the area at some point, so if you’re at all interested in this, let me know and I’ll see about putting some information together.

That pretty much finishes up my second day of Tech Ed. Just two more days of review left!

posted on Thursday, July 03, 2008 9:26:06 AM (Central Standard Time, UTC-06:00)  #    Comments [0]
 Wednesday, July 02, 2008

I’m continuing my review of Tech Ed from yesterday. Yes I still realize that I’m a month behind. :-)

So, after breakfast, I imagine what everyone will be interested in is the keynote by Bill Gates. Here’s the view I had after sitting down:

Getting ready for Bill Gates' keynote

Woohoo! Below is my great picture of Bill Gates, too. I tweaked the image slightly so that you can spot him.

Tech Ed 2008 2008-06-02 004

Anyway, keynote… yeah. Sort of boring. They started off with the Bill Gates Retirement Video. I think there might have been a little bit more content than the first time it was released, but still, nothing new. There was talk about Oslo, but I wasn’t really interested. I don’t really want modeling tools to improve architecture, when the drag/drop designer tools are leading me away from good architecture anyway. If you’re interested in any more regarding the keynote, check out Herding Code’s overview of the keynote announcements.

The first real session I attended was by Grigori Melnik and he covered Enterprise Library 4. Honestly, my feeling regarding EntLib is way too much XML configuration. I’m also not a fan of the config editor for the configuration. I’d really rather configure it in code or using some DSL support or something. I’m interested in Unity (the one release from Microsoft that got to keep its cool name!) somewhat, though. Unity is Microsoft’s offering in the IoC/DI space. It has gotten some flak, but it really isn’t all that bad from what little I’ve used it. I do like that it is very lightweight and the fluent interface it provides for component registration is pretty good. The session itself was mainly demos, though, so not much content.

I walked into a session by Sara Ford on CodePlex, but I didn’t stay too long because it seemed to be a walkthrough on how to use the CodePlex site itself.

Another session I attended that day was by Jimmy Schementi entitled “Dynamic Languages and the Web.” You can probably guess that this one was primarily on IronRuby. As you might guess, a lot of the talk revolved around how dynamic languages will work with Silverlight. Jimmy pointed out the Silverlight Dynamic Languages SDK which provides tooling for running dynamic languages under Silverlight, including IronRuby, IronPython, and other DLR based languages. It was pretty cool seeing a Rails app running on IronRuby. Jimmy also showed us an IronRuby version of Try Ruby, which runs in the browser with Silverlight instead of having to ship the Ruby commands back to the server to be executed. (note – if you haven’t tried out Ruby, go use the Try Ruby site. It is an excellent introduction into an awesome language)

I spent the rest of that day in Hands on Labs (see my Virtual Labs post to get an idea of the what the HOLs were like) and talking to the Microsoft guys. I spent time talking to a couple of developers on the .NET Framework team (whose names I unfortunately missed) and asked them a little bit about the MAF (Managed AddIn Framework). Their advice on that was to check with Jesse Kaplan (does Jesse have a blog I can link to?) so I did exactly that later in the week. I also spent time talking to them about versioning headaches and how we attempt to deal with breaking changes. It was interesting.

Afterwards, they told me that the MSDN documentation guys were looking for feedback, so I swung by there. I didn’t get much information from them, but I tried to give them a lot of personal feedback on my feelings towards MSDN documentation. I currently still use Google to get to most of the MSDN help. I told them I used the local MSDN help up until Visual Studio 2005, at which point the help application because too slow to use. They seemed very welcome to hear feedback and I really think they’re trying to improve.

All in all, it was a pretty good first day. That night was the vendor party where you basically sold yourself and your contact information for t-shirts and other swag. :-)

posted on Wednesday, July 02, 2008 8:16:40 AM (Central Standard Time, UTC-06:00)  #    Comments [0]
 Tuesday, July 01, 2008

I’m guessing it has been so long since Tech Ed that no one will be interested in hearing how it went, but you know – I’m going to post about it anyway.

I’m planning on doing a blog post per each day of Tech Ed so that I can (hopefully) give each session its due. The first day was the preconference session. The session I attended was entitled “Building Great Web Applications with Silverlight” with Jeff Prosise. The session covered both versions 1 and 2 (only beta 1 though). It was unfortunate that beta 2 wasn’t announced until later that week, so Jeff just got to hint at differences that would be coming out with the next release… which came out a week later. The hints were actually sort of funny, because Jeff was officially under NDA, so he would say things like, “this might change soon… hint, hint.”

The first half of the session was almost entirely getting most people up-to-date with WPF, so it turned into a review session for me. The bulk of what was new for me was better coverage of the network and I/O stack that Silverlight provides, which filled the rest of the session. Silverlight 2 brings a portion of the CLR to the browser (called the CoreCLR) so you have access to WCF and System.Net functionality as well as file I/O access via isolated storage. Threading is also provided so that’s nice. Something interesting to note is that Silverlight won’t provide any synchronous versions of methods that also have asynchronous methods. For example, the System.Net.HttpWebRequest will only provide the BeginGet* methods, not the synchronous Get* methods. The reason for this is because they’re trying to trim everything out that isn’t needed to cut the size of the CoreCLR down. Makes sense to me.

Well, that’s about it for the preconference. Like I said, more of a review than a lot of new information. I did get to have lunch that day with Colin Neller and Robertjan Tuit. Rob was telling us about the hair styling convention that was going on at the same time as Tech Ed. What a combination of conferences – geeks and hair stylists.

That night I attended Party With Palermo. While there, Jay Smith and I talked about a potential ALT.NET Open Spaces event that Raymond Lewallen is planning. I’m not so sure it will be happening in mid-July seeing as it is already July, but who knows? If it does, I’m in! I also got to see Scott Hanselman from across the room. I was telling Colin that I wanted to go up and say hi, but I didn’t really know how to approach Scott without, as Colin put it, “feeling like a groupie.” I mean, seriously, “hey Scott, I read your blog and listen to Hanselminutes and watch your videos and… man, you are awesome!” Missed opportunity I guess.

That does remind me of a funny occurrence that happened that night that I heard about secondhand. The three other guys I went to Tech Ed with were all sitting around at the party and Scott came over to sit by them. As you might imagine, everyone had name tags on. One of the guys sees “Hanselman” on Scott’s name tag and asks Scott if he is any relation to Scott Hanselman. “Uhh, yeah, I’m Scott.” “The Scott Hanselman?!?” Sure am glad I didn’t look like a groupie. At least I recognized him. :-) I told this unnamed individual that he later should have asked Scott to sign one of his books as “the Scott Hanselman.” Yet another missed opportunity! :-)

I’ll see about getting my overview of the rest of Tech Ed up later.

posted on Tuesday, July 01, 2008 7:35:32 AM (Central Standard Time, UTC-06:00)  #    Comments [0]