How An Open Source Developer Transitioned To .Net


kick it on DotNetKicks.com

Intro
Let me be the first to point out that I haven't always done .Net. No one really has since it has been around for only a few years, let's be honest.  For all practical purposes the technology is still fairly new.  Before .Net I was primarily developing web-based applications using LAMP (linux, apache, php, mysql).  The $1,000,000.00 question is how does one transition from LAMP to .Net?  And more important is why?  After all, aren't those technologies left and right brian technologies?  These are the questions I hope to answer in this article. 

My Background
Let's first start out back in 1993 when I was in college.  In 1993 most computers were  Windows 3.1 and a few people were holding onto their Amigas while others were running a Mac.  486 computers reigned supreme and Doom 2 was the big hit.  I was bored with my Windows 3.1 486 computer though.  I had read just about every help file in the whole system and knew all the command line switches to programs that the average computer user didn't even know existed.  I then got introduced to Linux by the primary Unix Administrator at the college.  I remember the day vividly because he called me into his office because I had taken over the X11 terminals in the lab and he wanted to know how I did it.  Sitting in his office he had a Gateway P133 machine running X11 (the primary graphics front-end to unix operating systems).  I of course questioned how he was running it on a standard PC because up until this time, standard PC equipment couldn't be used.  Even though I was in trouble I was still curious.  He explained it was a new unix like operating system that was free.  He then showed me how he was using it and I was hooked.  The thought of running multiple programs at the same time on my PC and using the same tools the college was using (mainly so I could hack my friends shell accounts) was appealing.  I immediately went out and bought 50 floppy discs, download Slackware and started compiling.  Trying to get things to compile and work were just fun.  I spent 6 months just getting my Trident 1MB video card to work with XWindows.  I have no idea why at the time but looking back on it I guess this more challenging than the assignments I was getting from the teachers.

By 1994 I was working for the college IT department and we setup one of the first known Linux labs.  I think it was the first Linux lab in the country but I don't have any proof, let's just say we were an early adopter.  In the lab students could browse the web, write papers, all within their shell accounts on the cluster, or they could dual boot the computer into Windows.  Pretty cool stuff for 1994.  After I graduated college with a music degree and a computer science minior, I continued playing with Linux and open source software.  When my wife and I moved to Ann Arbor, MI, I joined a local Linux User Group.  It wasn't long after joining I started presenting at the group with topics ranging from how to get your TV Tuner card to work in Linux to "Migrating Business Processes to the Web Using Open Source Technologies".  I spent a lot of time coding and doing system administration in the open source world and in 1997 started my own web hosting company which I still have today.  Most everything I did after 1997 was based on what the community calls the LAMP model (Linux, Apache, Mysql, PHP).  I didn't even have a Windows PC, except for my wife's computer.  After doing so many Linux presentations and becoming somewhat of a go to guy based on my professional experience I was invited to teach at a local college.  There I taught four classes on Linux which led students to a Linux Certification.  The classes included an introduction, system administration, networking and security.  I also taught the first PHP class at the college and continued to do so until it got taken over by another professor. 

After using Linux for years, I had taken the OS just about as far as I could take it.  I was growing tired of reading Howto's, compiling code, posting to newsgroups, loading untested software and drivers and bringing down my PC for days at a time.  For me the experience was about learning.  In other words, why break a production server when I can break my own?  I was growing tired of this routine nevertheless.  Using a computer with Linux on it was like, well, work.  Using Linux on servers I was happy as a lark.  But, for my personal day to day machine, it was work.  Why couldn't I just plug something into my personal PC  and it work?  Why did I have to touch the command line all the time?  Why did I have to compile or hack a driver just to plugin a digital camera and transfer a picture to the PC? 

Once Apple announced Mac OS X I started watching it pretty closely.  I was waiting on the moment their new operating system (which was unix based) was ready for prime time.  In 2002 I decided to switch from Linux as my primary OS to OS X.  I acquired a Powerbook and an Ipod and was very pleased.  OS X was such a blessing over Linux.  I was a true convert even though my attempts to get into the switch commercials at the time failed.  I was shouting OS X from the roof tops.  I no longer had to fight Linux on a laptop to get work done and was able to do so much more.  During my Mac OS X switch I was working for a consulting company who focused on building web applications using the LAMP model. We held PHP User Group meetings at the company and several other members were moving to OS X as well.  It was a great combination.

In 2004 I was hired as a PHP developer for Quicken Loans.  When I joined the company I was given a dual processor Mac running OS X and told to write PHP code.  This was great!  I was working for one of the best companies in the country and getting to do what I loved.

As you can see I was an open source developer.  It's the only thing I really knew and the only thing I had ever really done. 

The Conversion Begins
After working at Quicken for several months I started to change.  Call it whatever you want but working for a larger company changed how I started to view things.  I can't explain it but I started to somehow think differently about the technology I was so passionate about.  Was I maturing?  I don't know.  In retrospect I think once you absorb a technology so deep, two things happen.  One is you get bored.  The otherthing that happens is you know all of the strengths and weaknesses of the technology and you find yourself looking at other technologies to plug into the holes. 

Early in 2004, I started playing with .Net while researching Sharepoint Portal Server for the company's intranet.  The company intranet was written in PHP and I was assigned to the intranet.  We were having lots of problems with single sign on and other things like integrating with Active Directory.   Without giving too many details away, let me just say that our intranet is huge.  Thousands and thousands of pages, applications, content, data, etc.  Basically if you want to know anything, you go to the intranet.  I started researching Sharepoint because I was asked to look at it.  It wasn't something I would have started looking at on my own given my background that's for sure.  As I researched Sharepoint and Asp.Net, the more I read, the more I became intrigued by it.  As I mentioned earlier I had become bored and disgruntled with PHP.  I felt I had done just about everything there was to do with the language and the platform.  And, let's face it, PHP is just for the web.  I wanted something more.  Something that challenged me mentally while also making my life easier.  Something that I could learn that would provide me a one stop shop for whatever I wanted to write as a developer.  I was looking for a Swiss Army Knife. I wanted to be able to learn the ins and outs of one technology and then write either a web application, desktop application,  mobile application, smart phone application or anything in between. 

While investigating .Net I decided I was going to take my open source advocate hat off and place it in the floor. I then approached .Net as if I was an unbiased "architect" who had to make a decision which technology he was going to recommend.  Once I made this conscious decision I started to notice how well thought out the platform was.  .Net wasn't just a scripting language like PHP, this an entire platform full of swiss army knives!  I finally managed to get my hands on Visual Studio and this is where I became even more impressed!  But wait, this is a Microsoft technology!  This can't be good.  I mean after all Macs rule supreme and open source rocks.  What was going on?  Could it be I was turning to the "dark side" after all of these years of avoiding it?

All the while I was researching .Net I was still writing PHP applications.  This is where I started to differentiate the technologies and this is important.  I started to catch myself saying things like, "I could have done this a lot easier in Asp.Net", or "Man I wish I could debug this better", or "Why do I have to build my own session object or cache object and waste my time?".  I could feel the dark side coming over me as I added more features to our intranet and built additional one off applications.  Writing code in VIM or Zend Studio on my Mac started to become more of a chore or a task and I found myself fighting the tools I had used for years. 

Defending the "Dark Side"
Obviously by this point I was at a crossroad.  Then one day I got into a discussion at the water cooler with a coworker.  I found myself in the middle of a .Net vs PHP dual.  My coworker had his PHP pistol drawn and was firing away at me.  Every shot my coworker hurled at me I was able to deflect.  This surprised me.  Speed he mentioned for example.  Asp.Net code is complied I said unlike PHP which is just a scripting language.  I can compile my PHP code to byte code he added, and then I said yes, but you have to purchase Zend's compiler.  I don't have to purchase anything I continued adding.  He then drew back his open source pistol and hurled another bullet at me and said, well, PHP is free.  I then said, so is .Net.  Anyone can download the .Net framework, install it and start writing .Net apps.  I then added there was even an open source project called Mono that is taking the .Net framework and building it cross platform.  My coworker had fired two shots and my .Net shield had deflected them.  What was going on?  Why was I defending the technology I had used for years?  He then had one shot left in his open source barrell.  He pulled the trigger and "security" was fired at me.  This was the one I knew he was going to bring up and  I had researched this very topic and was shocked at what I found.  So he states, "well, that doesn't matter, PHP is still more secure than .Net".  By this point in the dual he was getting frustrated and had starting moving from fact based arguing to emotional based arguing.  I could just tell by his tone.  Then I said, "That's interesting you say that because I did some research on it and comparing the .Net framework to PHP since .Net's first release, it has only had 3 security holes.  PHP has had 43.".  My coworker then dropped his open source gun and said, "hmm, really?". 

Conversation Complete
At this point I knew my conversion to the "dark side" was complete.  I had evaluated both technologies.  One I knew extremely well, the other I was just scratching the surface but it didn't matter because the more I dug into .Net the more I moved away from PHP.  By this point my love affair with .Net was starting to spread internally.  When one of your coworkers on the Unix Team starts calling you "Syth Lord Elder", you know you have turned (true story, and he still calls me this to this day but he's trying to find a word higher than Syth) to the "dark side".  To my coworker's credit who was at the water cooler the day I defended the "dark side" he started researching .Net. Today I am proud to report he and I were founding  members of our internal .Net team. 

Since my "re-birth" as a programmer as I like to call it, I've done quite a bit with .Net.   I spend most of my time building a Smart Client at work along with a lot of web services and web applications.  I am also building mobile applications and working on a mobile CRM product for all of our bankers in my spare time.  I also spend a lot of time training and mentoring to other programmers who are moving from various languages to .Net too.  I enjoy the training and mentoring since I have an education degree.  I need to use it for something right? 

Word of Advice
That's it.  Now you know how an open source LAMP developer made the transition to .Net.  It has been a long road for me needless to say.  Getting out of your comfort zone and learning new things can be frustrating.  Trust me I know. Things that would take you two minutes, now take you twenty minutes because you have to read how to do it within the new platform.  My recommendation for anyone that wants to learn .Net that is coming from another background as I did is this:  

  1. First and foremost throw yourself into a really good C# book.  Don't bother reading anything else.  Learn the basics of the language first, then learn what the .Net framework provides you as a developer.  Remember that the language and the framework are two seperate things. 
  2. Second, dive head first into the framework on MSDN.  Dig into the namespaces of System.Data, System.Collections, System.XML and those type of things that you are going to use all the time. 
  3. After that, download Visual Studio Express for free and learn how to use the IDE.  This is where you'll really start to see how complex things turn into simple drag and drop operations.  
  4. Lastly, don't get discouraged or overwhelmed at the amount of information on .Net.  There is tons of information about .Net on the Internet and it is easy to get overwhelmed.  Remember that Microsoft is a big company and they have 1,000's of developers pumping out code everyday.  Don't let it discourage you.

Drop me a Line
I was speaking to one of the Microsoft reps in Jackson, MS at the launch event and he says I'm the only person that he knows of doing .Net programming in Hattiesburg, MS.  That doesn't surprise me, but by the slim chance that someone from Hattiesburg reads this for the love of a good framework contact me!  Just take my first name and this domain and you've got my email address (decrypt that spam engines!).

posted @ Monday, January 01, 2007 9:55 AM

Print

Comments on this entry:

# A Seven Year Blogger Recounts His Blogging History

Left by Words of Wisdom From The Elder at 1/6/2007 10:35 AM
Gravatar

A Seven Year Blogger Recounts His Blogging History

# re: How An Open Source Developer Transitioned To .Net

Left by Jason Remisoski at 9/29/2007 6:32 AM
Gravatar

Hi Keith,

I went to one of those Logicreate classes TapInternet was sponsering. I was with the Ave Maria Foundation at the time. Anyway, I have interviewed with a couple companies now, and half of them ask if I've heard of LogiCreate. I interviewed at Rock Financial once - great group of folks there! They said you had gone to .Net and I replied, "What?!"

Anyway, I'm using your LogicCreate to write code for an automotive supplier. Its not a bad framework, and we're thinking of taking it to another level and contributing to the project (i..e. adding a controller class, and making it PHP 5 compatible).

Funny about the lack of .Net programmers out your way. I live "downriver" in Michigan, and I think the big money jobs are luring any remaining talent out of the state - definitely out of my area. Ann Arbor/Ypsi was a great area to work and meet folks.

# re: How An Open Source Developer Transitioned To .Net

Left by Mark at 10/5/2007 9:23 AM
Gravatar

Whoa, still using LogiCreate! Awesome. It might be time to upgrade to Cognifty... BSD licensed... PHP5 compatible... ZF library compatible..

Anyways, zorka's post... Transition to .Net is easy... why does it need an article written about it. Let's see, the libraries are structured better than PHP, it has Namespaces, um.. it has a nice IDE.

Write about transitioning to ASP 2.0, that would be worth reading about.

I think the only reason all PHP developers don't move to .NET is that they want to be able to run their programs on any platform, and PHP with XAMPP can let their stuff run on Windows. Blah blah, etc etc. If ASP.NET stuff worked all over... (and I mean really all over), the only argument would be over which has more pre-installations.

This argument about languages and platforms is so funny... who cares about how the network functions are named, or how easy it is to open a socket. The only real question is, is the chosen platform correct for your application.

Keith, it would be nice to mention in your "transition from open source PHP guy to .NET guy" story that you went from "guy who writes apps that other people install and use" to "guy who only supports internal company apps in a homogeneous environment".

# re: How An Open Source Developer Transitioned To .Net

Left by Michael Kimsal at 10/5/2007 9:29 AM
Gravatar

Just a bit harsh, Mark? I get your point. The "LAMP" market and the ".NET" market are separate fields, with some overlap, but they have different appeals.

http://www.lullabot.com/blog/why-not-asp-net has a rather recent discussion about the pros and cons of each platform, and IIRC highlights some of the mindset differences. One of the things pointed out (in that article I hope) was that the .NET job market plays out better on the east coast, and the LAMP job market (extended to include RoR, Python, etc) plays out better on the west coast (silicon valley especially).

# re: How An Open Source Developer Transitioned To .Net

Left by Mark at 10/5/2007 9:33 AM
Gravatar

That last paragraph wasn't meant to sound harsh at all. Sorry, if it did. I was just trying to point out the differences between the all these different platforms. Some are easy for people to get and install and some aren't.

Take Wordpress for example, yes it's written like crap, yes it has/had some security problems. But, someone on a Mac can download XAMPP-lite for mac osx and have apache/php/mysql ready to go. Then it's just a matter of grabbing the zip code of wordpress and click through some installations.

Now, look at subtext (which recently had a security hole to patch). The same mac user is left with what options to install it? None.

Does that mean one platform is "better" or "worse"? No. Better or worse to an end-user on a mac, maybe. Better or worse to a developer who has to type in the code, no. That's left up to the individual language syntax and IDE's etc etc.

I know you're all sick of this whole platform vs. platform debate, but make no mistake... programming in a controlled, homogeneous environment is a lot different than trying to gain popularity by reaching the widest possible audience.

# re: How An Open Source Developer Transitioned To .Net

Left by CJ at 10/20/2007 5:39 AM
Gravatar

Excellent article! Thanks for sharing.

I am working on .NET technology now. I like the excellent IDE. I like MSDN library. I like the community support in Southern California. In my opinion, any technology that can help me to make money faster..., uh, I meant to finish projects faster, is my good friend. :)

The only concern I have so far is..., can I take the advantage of Virtualization platform like VMWare ESX or Amazon E2C to make my infrastructure more flexible?

.NET is free. True. However, Windows license is not. To host a .NET app costs money to obtain the licenses. If I want to clone a couple Windows web server VM's to scale out my web apps, then I need to go through whatever process needed to obtain the required licenses first. If using Linux, then I can just clone it, resolve the problem without worries.

Of course, there is Mono. I am not sure if the components I used are all supported on Mono, but that's on my to-do's to explore that.

Virtualization seems to be able to make the infrastructure more flexible and scalable. When I choose a development platform, this is also my big concern. If Microsoft does not respond to it well, then I am considering switching. Just my two cents.

# re: How An Open Source Developer Transitioned To .Net

Left by Derek at 10/25/2007 7:18 AM
Gravatar

For the past few years, I did most of my development with ColdFusion and JSP, with a little PHP sprinkled in. I recently got a job as an ASP.NET developer and I haven't enjoyed it too much. Working with ASP.NET's controls is a hassle, to say the least. I think I spend more time figuring out which events to handle and hack around existing controls than I do actually designing a site or some functionality.

Plus, out of the box, ASP.NET is not web-standards friendly. First, the default rendering of controls is all tables-based and alot of useless markup is thrown in when someone uses a "label" to display text. Also, ASP's excessive use of POST violates whole meaning of what POST really is. When I want to add some JavaScript to manipulate the form controls, I have to worry about ASPs wacky naming scheme for each control. A text field isn't just named "FirstName", it's named "ctl_01_content_FirstName" or something like that that I have to get by evaluating the control's internal ID.

It's like, if you want to do it the crappy, plain Microsoft way using their built in controls, it's as easy as driving down an open freeway. If you want to do anything special it's like driving on a gravel road over a mountain.

I've been getting into Ruby on Rails - a great open source alternative without the amateurishness of PHP and with a respect for web standards.

# re: How An Open Source Developer Transitioned To .Net

Left by Keith Elder at 10/25/2007 8:17 AM
Gravatar

@Derek It sounds like you are "learning" Asp.Net still and going through the learning process. Remember that .Net is not just Asp.Net. That is merely one slice of the pie.

In terms of web standards, a lot of the controls like login do render themselves in table format. I've ask the same question to Microsoft and the official answer I got is "Look, if we built the control so it rendered CSS and div tags, how do we handle the CSS? Where do we put it? We are trying to provide a better design time experience so the developer can see what their output is going to look like. If you were to drag and drop a control onto the designer, there is too much other stuff for us to handle just to render standards compliant html."

The follow up response to that is most people are going to build their own controls for public facing web sites and control every single ounce of HTML that is spit out. If you don't believe this is possible, then go look at sites that do just that that are written in Asp.Net. The other thing about the controls is you can create CSS Control Adapters and override the out of a built in control thereby using the built-in functionality yet rendering the HTML in a more complicant fashion.

Also think about the 10,000 feet view that Microsoft has to balance with this product. They understand that businesses typically have more web sites internally than externally. I think at our company we have like 5 external web sites. Internally we have a gigantic Intranet and thousands of line of business applications. From a get it done now and quick standpoint this is where those controls that you complain so much about really shine and come in handy because in the Intranet where you only have to write your site to your internal standard you can create these type of line of business web applications extremely fast.

In terms of control IDs and post backs remember that you are the developer and you are in control. If you don't want that behavior then TURN IT OFF!

# re: How An Open Source Developer Transitioned To .Net

Left by Keith Elder at 10/25/2007 8:54 AM
Gravatar

@CJ

Thanks first of all. Good questions so here we go.

As far as VMWare and virtulization 100% yes. We use ESX a lot where I work and I know other people are using Virtulization as well. Recently Jeff Atwood wrote a whole article on how he moved web hosts using virtulization. Article is here:

http://www.codinghorror.com/blog/archives/000984.html

As far as Mono, it isn't ready for prime time yet. Not even close in my opinion. As a Linux hosting provider there are major security concerns running Mono in a shared environment. That's why we haven't seen hosting providers that run Linux try to host Asp.Net apps yet. Obviously if they could do it reliably and securely they would be doing it and shouting from the roof tops. You don't see that today though and that is why.

As someone who has been around the block several times with Linux I know that in a lot of cases it is cheaper to simply pay the few hundred dollars for a Windows license than spend 12 man hours trying to figure something out. Not to mention all of the value add you get embracing the Windows platform. See this article for more thoughts about that:

http://keithelder.net/blog/archive/2007/10/23/Open-Source-to-.Net-Transition--Mac-or-PC.aspx

Like you I wish Mono would just get to a point to where it was usable and we would have a lot more options.

# re: How An Open Source Developer Transitioned To .Net

Left by Healy at 10/25/2007 3:16 PM
Gravatar

Wow. Just painted that bullseye on your chest, didn't you? Carpe developers....

# re: How An Open Source Developer Transitioned To .Net

Left by Onur at 10/27/2007 5:29 AM
Gravatar

you are full of bs. If you want to use .net you need not to leave OS community. You can do it with mono on linux

# re: How An Open Source Developer Transitioned To .Net

Left by Scratch at 10/27/2007 4:32 PM
Gravatar

@Onur

Onur, you are the one obviously full of BS and also have complete blinders on. Are you kidding me? Have you actually looked at Mono from the stand point that only 2, count it, 2 web hosting companies support Mono? Beyond that Mono doesn't support the entire .Net platform. Maybe one day it does, but today it doesn't. Before you speak about something at least know what the hell you are talking about. It is open source zealot idiots like you that kill your hole open source dreams of ruling the world. Give the rest of us a break and go choke on a README or a HOWTO.

-Scratch

# re: How An Open Source Developer Transitioned To .Net

Left by eileen rumwell at 2/7/2008 10:01 PM
Gravatar

I like what I read! How about coming to work for Microsoft on the .net Framework?

Your comment:






 
 
 
Please add 5 and 4 and type the answer here:
 

Live Comment Preview:

 
«July»
SunMonTueWedThuFriSat
2829301234
567891011
12131415161718
19202122232425
2627282930311
2345678