The Long Road Home - From Microsoft to Linux(58bits.com)
58bits.com
The Long Road Home - From Microsoft to Linux
http://www.58bits.com/blog/2011/11/10/the-long-road-home-from-microsoft-to-linux/
A post about my thoughts and experiences as a software developer, leading up to my use of Linux and building my first non-Microsoft based Web application.
5 comments
The "community" observation is interesting, but I'm curious how much of it is a function of time.
I started with PHP in 1996. While the community was not as large as it is today, it felt... a bit more alive. People were discovering this 'underground' tech, and to use PHP on a project was slightly rebellious, when you were supposed to be using Perl or ASP or maybe even ColdFusion or Java.
But the community changes as more people who are using the tech get involved. More people end up using the tech not by choice, but by mandate. Current infrastructure is LAMP, so new hires have to use LAMP, etc. PHP is no longer a rebellious underground choice - it's a/the standard.
Similarly, I was doing VB stuff in 1993. Rather revolutionary in many ways, and it felt like a whole new world. People were jumping ship from other platforms to be more productive in VB. I don't think it was ever 'underground' like PHP was, but certainly an active, vibrant community of people who wanted to be using that tech.
Fast forward to the mid 2000s - Rails becomes the new hotness, and people jump all over MVC. The people who are joining these communities in the beginning are there by choice. Lots of progress and rapid iterations are possible because of the passion and focus. A couple years from now, loads of people will be doing maintenance Rails projects, and the community of Rails people will be less active and less passionate about things than they are today. Many of the 'best and brightest' are moving on to node.js and other new hotness.
The cynic in me will point out that the newer members of the community coming in later will be stuck maintaining "first drafts" of attempts at Rails projects, that won't have benefitted from updates. I say this as someone who was shown a Rails 1.1 project in 2010 that had been started 3 years earlier, but never upgraded. I'm sure that's not the only one.
But... this is also the nature of tech communities. People come and go, but the people 'going' are often 'going' to the new-fangled stuff, and leaving behind a mixed-bag that the maintenance generation has to deal with. This skews the 2nd generation's view of the tech (not always, but some). I know people who left PHP for Rails, complaining about all the stuff PHP couldn't do. But they also left behind piles of poorly written PHP - there's nothing in PHP forcing you to write bad code, they just didn't have the discipline which something like Rails seems to force.
Long story long... the .NET community seems at a cross-roads, and the MS corporate involvement in the tech decisions isn't a spanner-in-the-works that most other tech communities have to contend with. Other tech - PHP/Perl/Python/Ruby/etc - tend to live and die outside the directives of one particular company. But the 'top down' community comment was spot on - it's hard to 'force' community on a group, and I suspect the reason most of the .NET users don't behave like other communities the OP compared to is that most of those .NET users don't want to be there. Not saying they hate .NET, but they just don't have the passion for tech that motivates the visible community members in other tribes.
I started with PHP in 1996. While the community was not as large as it is today, it felt... a bit more alive. People were discovering this 'underground' tech, and to use PHP on a project was slightly rebellious, when you were supposed to be using Perl or ASP or maybe even ColdFusion or Java.
But the community changes as more people who are using the tech get involved. More people end up using the tech not by choice, but by mandate. Current infrastructure is LAMP, so new hires have to use LAMP, etc. PHP is no longer a rebellious underground choice - it's a/the standard.
Similarly, I was doing VB stuff in 1993. Rather revolutionary in many ways, and it felt like a whole new world. People were jumping ship from other platforms to be more productive in VB. I don't think it was ever 'underground' like PHP was, but certainly an active, vibrant community of people who wanted to be using that tech.
Fast forward to the mid 2000s - Rails becomes the new hotness, and people jump all over MVC. The people who are joining these communities in the beginning are there by choice. Lots of progress and rapid iterations are possible because of the passion and focus. A couple years from now, loads of people will be doing maintenance Rails projects, and the community of Rails people will be less active and less passionate about things than they are today. Many of the 'best and brightest' are moving on to node.js and other new hotness.
The cynic in me will point out that the newer members of the community coming in later will be stuck maintaining "first drafts" of attempts at Rails projects, that won't have benefitted from updates. I say this as someone who was shown a Rails 1.1 project in 2010 that had been started 3 years earlier, but never upgraded. I'm sure that's not the only one.
But... this is also the nature of tech communities. People come and go, but the people 'going' are often 'going' to the new-fangled stuff, and leaving behind a mixed-bag that the maintenance generation has to deal with. This skews the 2nd generation's view of the tech (not always, but some). I know people who left PHP for Rails, complaining about all the stuff PHP couldn't do. But they also left behind piles of poorly written PHP - there's nothing in PHP forcing you to write bad code, they just didn't have the discipline which something like Rails seems to force.
Long story long... the .NET community seems at a cross-roads, and the MS corporate involvement in the tech decisions isn't a spanner-in-the-works that most other tech communities have to contend with. Other tech - PHP/Perl/Python/Ruby/etc - tend to live and die outside the directives of one particular company. But the 'top down' community comment was spot on - it's hard to 'force' community on a group, and I suspect the reason most of the .NET users don't behave like other communities the OP compared to is that most of those .NET users don't want to be there. Not saying they hate .NET, but they just don't have the passion for tech that motivates the visible community members in other tribes.
Many open source projects tend to grow because of passion, exploration, and having fun.
Can't really say the same thing when it comes to .NET or Java.
If we go back to the early 1996-2003, when the web was still "young", there are plenty Perl/CGI or PHP open source project to explore the capability of the web. Having said that, if you look at the tools the era produced, are mostly Forum, Blog, CMS for niche market (games, anime, manga, etc). People were having fun.
If we go back even further during the 1980-1995 during the UNIX, Linux era, people were writing command-line tools to explore the OS and writing X11 desktop app for fun.
Move forward to today's open source project: SugarCRM, Drupal (semi-serious), osCommerce, Magento, Maven, Ant, Cassandra. They're less fun. They tend to be more serious and "Ready for Business".
Sometime I wish I was old enough to be in the 1980-1990 era. Unfortunately I was not even in an egg-shaped form yet.
Can't really say the same thing when it comes to .NET or Java.
If we go back to the early 1996-2003, when the web was still "young", there are plenty Perl/CGI or PHP open source project to explore the capability of the web. Having said that, if you look at the tools the era produced, are mostly Forum, Blog, CMS for niche market (games, anime, manga, etc). People were having fun.
If we go back even further during the 1980-1995 during the UNIX, Linux era, people were writing command-line tools to explore the OS and writing X11 desktop app for fun.
Move forward to today's open source project: SugarCRM, Drupal (semi-serious), osCommerce, Magento, Maven, Ant, Cassandra. They're less fun. They tend to be more serious and "Ready for Business".
Sometime I wish I was old enough to be in the 1980-1990 era. Unfortunately I was not even in an egg-shaped form yet.
Terrific and insightful comment - possibly one of the best I've seen on the topic. Thanks!
[deleted]
Funny - I went exactly the other way, from PHP to Ruby to C#.
The .NET environment is amazing. Its open source community is really picking up speed lately, the framework docs are top-notch, and, most importantly: C# is a great modern language with excellent editor support - a unique combination (possibly barring F#).
Java has good editor support (IntelliJ, Netbeans) but, well, it's Java. Ruby and Python are nice, but can never get the support for maintainability and refactoring that a statically typed language can. After my Ruby years, I never want to have to guess what I can do with an object passed to some method I'm maintaining anymore. And then I didn't even mention all the framework magic circling Ruby, making it even more difficult to understand what the code you're looking at does.
The ability to type "varname." and get a list of what I can do with it is so powerful. I can use a (well designed) open source library that I just NuGet'ed in, without ever even looking at its docs. Can you write PHP without alt-tabbing to the manual all the time? Can you do it with Ruby?
I'd even choose Java over Ruby for that if I had no other option; I'm no Microsoft evangelist. I'd probably do Scala if the editor support became better (which I hope it does), but C# comes pretty damn close to what I'd want to use Scala for anyway (closures, LINQ, properties, extension methods, even currying is no problem).
The .NET environment is amazing. Its open source community is really picking up speed lately, the framework docs are top-notch, and, most importantly: C# is a great modern language with excellent editor support - a unique combination (possibly barring F#).
Java has good editor support (IntelliJ, Netbeans) but, well, it's Java. Ruby and Python are nice, but can never get the support for maintainability and refactoring that a statically typed language can. After my Ruby years, I never want to have to guess what I can do with an object passed to some method I'm maintaining anymore. And then I didn't even mention all the framework magic circling Ruby, making it even more difficult to understand what the code you're looking at does.
The ability to type "varname." and get a list of what I can do with it is so powerful. I can use a (well designed) open source library that I just NuGet'ed in, without ever even looking at its docs. Can you write PHP without alt-tabbing to the manual all the time? Can you do it with Ruby?
I'd even choose Java over Ruby for that if I had no other option; I'm no Microsoft evangelist. I'd probably do Scala if the editor support became better (which I hope it does), but C# comes pretty damn close to what I'd want to use Scala for anyway (closures, LINQ, properties, extension methods, even currying is no problem).
I am a C# refugee, so I feel I can respond with some authority.
Yes, the enhanced auto-complete capability that static typing enables is a great feature (I should note that dynamic languages can offer completion too, just not as comprehensively). But it must be weighed against the tradeoffs. I believe many of these language features like static vs. dynamic typing are not "one is better than the other", but simply characteristics that make certain tradeoffs.
A decent comparison of static vs. dynamic typing can be found here: http://batsov.com/articles/2011/05/08/jvm-langs-scala/ (scroll down)
For all C#'s strengths, you've got to also consider the negatives. For starters, you're dependent on Windows; for the development environment and the server. I don't know if you also do server administration, but let me tell you: running Windows servers is an exercise in pain.
Second, in an age when many wonderful programming environments are available as open source, I question the wisdom of marrying yourself to something that is deeply proprietary. When you're first starting with .Net, you might not think about this. But years in, you may find that you are stuck in a system outside your control, dragging your code and livelihood along with it. As I did.
C# has many strengths and I have great respect for its architect Anders Hejlsberg. That said, I am very much glad to be free of it!
Yes, the enhanced auto-complete capability that static typing enables is a great feature (I should note that dynamic languages can offer completion too, just not as comprehensively). But it must be weighed against the tradeoffs. I believe many of these language features like static vs. dynamic typing are not "one is better than the other", but simply characteristics that make certain tradeoffs.
A decent comparison of static vs. dynamic typing can be found here: http://batsov.com/articles/2011/05/08/jvm-langs-scala/ (scroll down)
For all C#'s strengths, you've got to also consider the negatives. For starters, you're dependent on Windows; for the development environment and the server. I don't know if you also do server administration, but let me tell you: running Windows servers is an exercise in pain.
Second, in an age when many wonderful programming environments are available as open source, I question the wisdom of marrying yourself to something that is deeply proprietary. When you're first starting with .Net, you might not think about this. But years in, you may find that you are stuck in a system outside your control, dragging your code and livelihood along with it. As I did.
C# has many strengths and I have great respect for its architect Anders Hejlsberg. That said, I am very much glad to be free of it!
Thanks for sharing. Genuine interest: Mono didn't work for you? How so?
Mono didn't work for me. I think it might be okay if you targeted it specifically as your official runtime. But it is not, and I don't think ever will be a drop-in replacement for the MS stuff. I summed up my thoughts here: https://news.ycombinator.com/item?id=2777025
I'm in agreement with wes-exp, even though I still have to make the "long walk home", mono currently offers a workaround or perhaps a false reassurance that when the requirement comes up, you can still run your apps on Linux. Truth is it's lagging behind, it does not enjoy good community support (everybody in the *nix community is against it) and to top it Novell was acquired recently and the new management put a lid on mono. Miguel has started a new company but it seems their priority is standing on their feet first ( making money and being profitable). So, no. Mono is not a good alternative for .net at this point.
> The ability to type "varname." and get a list of what I can do with it is so powerful. I can use a (well designed) open source library that I just NuGet'ed in, without ever even looking at its docs. Can you write PHP without alt-tabbing to the manual all the time? Can you do it with Ruby?
I usually don't need any documentation with Ruby. I remember how the libraries I use work. But I'm that kind of guy, who first reads the source from Github and then start programming the thing by my own. I hated with Microsoft libraries, that I had to use reflector to see inside the library, when it didn't work like it should've been. Now I'll hit the fork button if the library contains a bug and I need a fast fix right now.
I usually don't need any documentation with Ruby. I remember how the libraries I use work. But I'm that kind of guy, who first reads the source from Github and then start programming the thing by my own. I hated with Microsoft libraries, that I had to use reflector to see inside the library, when it didn't work like it should've been. Now I'll hit the fork button if the library contains a bug and I need a fast fix right now.
Reading code seems like a crazy inefficient way to understand libraries. Maybe you're just a much better code reader than anyone I've ever met -- in which case, more power to you.
I see this attitude of "read the library source" most often from Ruby people, but some advocates of larger PHP frameworks advocate that approach as well, and I just don't buy it. At least, not across the board. Sure, if there's a bug, I can try to track it down, maybe submit a patch, but if something can't be bothered to be documented, I'm not sure I want to spend my time depending on that library.
I've certainly made exceptions to that - we probably all have - but treating that as the defacto way to approach using third party libraries is wholly inefficient (as you said).
One might take a better approach by saying "read and learn from the test cases". I've often found that for the libs I try that with, that have tests, they're often rather... what's the word? I can't easily figure out how to apply the library to the problem I have at hand. Sometimes it's because my problem is ill-defined, and sometimes it's because the tests only cover superficial cases, and even if the lib docs say "can do xyz", it's not tested not documented.
Such is software...
I've certainly made exceptions to that - we probably all have - but treating that as the defacto way to approach using third party libraries is wholly inefficient (as you said).
One might take a better approach by saying "read and learn from the test cases". I've often found that for the libs I try that with, that have tests, they're often rather... what's the word? I can't easily figure out how to apply the library to the problem I have at hand. Sometimes it's because my problem is ill-defined, and sometimes it's because the tests only cover superficial cases, and even if the lib docs say "can do xyz", it's not tested not documented.
Such is software...
I can understand your point. But for me the short documentation has never been such a problem. There's usually some example cases how to use the library in the README.md, and that is mostly everything I need. Sometimes it is necessary to read through the code for better understanding, and I really like to be able to do that.
Without Github though, the situation would be much more annoying.
Without Github though, the situation would be much more annoying.
While developer productivity is important, I tried to avoid suggesting that one set of tools were better than an other - for reasons that I hoped would be evident. That said - not sure - but I think the IntelliSense overload in VS2010 gets in the way as often as it helps. The great thing about learning other languages and frameworks, is that you discover what works (or not) and why. In my case - it was liberating to be able to build and deploy a complete solution - for free. Linux and FOSS gave me that choice.
Hm, I don't remembering the "for free" argument in your article :) (but might've read over)
I completely agree with your point on learning other languages and frameworks, btw - the story on your journey was an interesting read. I'm just a bit staggered on how your journey ends with you choosing what I consider to be vastly less powerful tools (e.g. vim) when you know that there's tooling out there that, well, in my opinion is just plain better.
If money is really the main argument, then, well, fair enough. Even then I'd choose Java, once again for the refactoring/maintainability support, but people have called me an idiot for less so I guess that's just me :)
I completely agree with your point on learning other languages and frameworks, btw - the story on your journey was an interesting read. I'm just a bit staggered on how your journey ends with you choosing what I consider to be vastly less powerful tools (e.g. vim) when you know that there's tooling out there that, well, in my opinion is just plain better.
If money is really the main argument, then, well, fair enough. Even then I'd choose Java, once again for the refactoring/maintainability support, but people have called me an idiot for less so I guess that's just me :)
I tried a few programming languages (was with Python for quite some time, nowadays I'm learning, doing, researching more modern JavaScript techniques than ever).
At the end of the day, somehow I get drawn back to Java. Eclipse and IntelliJ are the 2 editors out of this world that it blew my mind.
Here's a use-case that I stumbled upon a few times:
1) Download a 3rd party library via Eclipse - Install m2clipse (Maven plugin)
- Open the pom.xml and add the libraries you need
- m2clipse will download the final JAR version (without the code)
2) Use the 3rd party library downloaded by m2clipse to access JavaDoc
- All you have to do is to utilize the intellisense and m2clipse will download the javadoc JAR
3) Navigate to the 3rd party library internal source code
- Hit the shortcut key to go to the actual implementation of the class
- m2clipse will download the source JAR of that library (provided the 3rd-party provider also upload the source jar to whichever Maven repository it exist)
You can't do that with NuGet. At least not yet.
Many people, to this day, have this hatred against Maven yet from time to time again I have not seen a good substitute of Maven that integrates well (albeit some slowness) with the IDE.
While C# has all the syntax goodness, this is something that I noticed, not many people are actually exploiting them. Only a tiny fraction of C# community that probably use it to the fullest. At the end of the day, C# is just like Java.
At the end of the day, somehow I get drawn back to Java. Eclipse and IntelliJ are the 2 editors out of this world that it blew my mind.
Here's a use-case that I stumbled upon a few times:
1) Download a 3rd party library via Eclipse - Install m2clipse (Maven plugin)
- Open the pom.xml and add the libraries you need
- m2clipse will download the final JAR version (without the code)
2) Use the 3rd party library downloaded by m2clipse to access JavaDoc
- All you have to do is to utilize the intellisense and m2clipse will download the javadoc JAR
3) Navigate to the 3rd party library internal source code
- Hit the shortcut key to go to the actual implementation of the class
- m2clipse will download the source JAR of that library (provided the 3rd-party provider also upload the source jar to whichever Maven repository it exist)
You can't do that with NuGet. At least not yet.
Many people, to this day, have this hatred against Maven yet from time to time again I have not seen a good substitute of Maven that integrates well (albeit some slowness) with the IDE.
While C# has all the syntax goodness, this is something that I noticed, not many people are actually exploiting them. Only a tiny fraction of C# community that probably use it to the fullest. At the end of the day, C# is just like Java.
With Smalltalk you can have your cake and eat it too! Its refactoring and IDE support is better than those of other dynamic languages and only slightly lagging behind statically typed languages(due to its relative obscurity, its ecosystem isn't as huge as Java/C#'s).
If you want decent Scala support with IDE code completion try IntelliJ community ed with scala plugin. Eclipse is okish but Scala plugin rather slow
Netbeans has decent PHP support. JetBrains has a good PHP editor out now too. Zend Studio and PDT - both Eclipse-based.
Given the dynamicness of PHP, the editor support may never be as comprehensive as VisualStudio/C#, but it's better than it was a few years ago.
And if you come back to Java, give Grails a spin :)
Given the dynamicness of PHP, the editor support may never be as comprehensive as VisualStudio/C#, but it's better than it was a few years ago.
And if you come back to Java, give Grails a spin :)
> Given the dynamicness of PHP, the editor support may never be as comprehensive as VisualStudio/C#,
Exactly my point.
But indeed, you're right - used Netbeans for PHP a few years ago, and it was awesome compared to the text editor I used before (but not like Visual Studio with C# by far).
Exactly my point.
But indeed, you're right - used Netbeans for PHP a few years ago, and it was awesome compared to the text editor I used before (but not like Visual Studio with C# by far).
I was reading the article and the list of three letter acronyms such as WPF, WWF, WCF, and realizing we should just group these together under the name Windows Technology Frameworks or WTF.....
On the other hand, the article brought back a lot of thoughts on projects gone right and wrong. Very insightful and informative. In the end though, I have learned one thing that was reinforced by this article: if it ain't fun, it ain't worth it.
Let's face it: that which inspires us is fun. And when we are inspired, even the largest problems are overcome, but when we lack that inspiration and the fun that comes with it, it's not only drag, but little problems become impossible to solve.
On the other hand, the article brought back a lot of thoughts on projects gone right and wrong. Very insightful and informative. In the end though, I have learned one thing that was reinforced by this article: if it ain't fun, it ain't worth it.
Let's face it: that which inspires us is fun. And when we are inspired, even the largest problems are overcome, but when we lack that inspiration and the fun that comes with it, it's not only drag, but little problems become impossible to solve.
I think that's right - it has to be fun. There might be not-so-fun parts in every project - but overall, it has to be fun. Thanks for positive feedback.
WebKit uses the WTF acronym for its Web Template Framework.
Man looked at PHP after C# and was happy with that. I feel suspicious.
Not very suspicious if you look at how .NET evolved and continues to evolve. They have had massive changes in their offerings which is a good thing but frustrating if your a dev strongly invested in what they offer. Often you have to rewrite your code with each new offering they push. Then ASP.NET Webforms slow death in favor of MVC, another major rewrite again. Along with the rewrites you are giving up a huge investment you've made in webforms ( their previous offering).
From asp.net 1.0 to 2.0 required a rewrite to take advantage of 2.0 featureset. From linq2sql to EF where linq2sql was dropped in favor of EF and we still have no proper assurance. winforms 1.0 to 2.0 then wpf. Moving to wpf as you may guess requires a major rewrite. Then the rumors that wpf is dead. SL is the next best thing. Now they say SL is dead but your skillset will carry over to building metro style apps.
Perhaps he can avoid all this frustration now!
From asp.net 1.0 to 2.0 required a rewrite to take advantage of 2.0 featureset. From linq2sql to EF where linq2sql was dropped in favor of EF and we still have no proper assurance. winforms 1.0 to 2.0 then wpf. Moving to wpf as you may guess requires a major rewrite. Then the rumors that wpf is dead. SL is the next best thing. Now they say SL is dead but your skillset will carry over to building metro style apps.
Perhaps he can avoid all this frustration now!
Why are you doing rewrites? I still have 16bit MASM code in use. Why would you rewrite an ASP.NET webforms app because MVC is out? I guarantee you that you'll want to rewrite your website for some completely unrelated reason before ASP.NET isn't supported -- I mean they did just ship a new version in the past year.
I think junior devs feel like everytime something new comes out they have to rewrite everything to use it. After you've been around the block for a while you realize that you can pick and choose technologies and maintainance plans. Once you realize that, you suddenly see a lot of this is just hot air.
I think junior devs feel like everytime something new comes out they have to rewrite everything to use it. After you've been around the block for a while you realize that you can pick and choose technologies and maintainance plans. Once you realize that, you suddenly see a lot of this is just hot air.
the reason to rewrite depends on the project your involved in and what features you want to make use of moving forwad. A simple example when .net 2.0 came out, simply upgrading to the latest version of the framework didn't give your older apps all the benefits of latest features included in 2.0 (new controls, master pages, provider model support out of the box etc) ; A rewrite was inevitable. When MVC was introduced everybody in the .net community felt it was their sacred mission to promote it over webforms. If you wanted to stay current skillwise and evovle with the community you either rewrote if this was even feasible or used MVC for the next project ( for most this really meant a new investment in learning and also not being able to reuse a vast array of controls and component that were already written for webforms and available, instead we were reinvesting our efforts in rewriting in such a way that this was consumable from an MVC paradigm). I agree with you that a lot of this is just hot air, but not if you are seriously invested as in someone writing tooling for webforms for instance and your business depended on it, your customer base dimishes quickly and you have to quickly adapt and rewrite. This is the same for winforms/wpf/silverlight. People seriously invest in these technologies after going through a lot convincing top management and what not because MS promised at some point that they are committed to seeing this through.
Consider having a product developed in silverlight. Now MS is saying they are backing html5 but fear not, you can still rewrite it for metro because sadly IE10 on metro will not support plugins. This is their own plugin on their own operating system. Not supported! Which is not the same thing because SL atleast worked on the mac cross platform. Your metro app wont. So, html5? even still your developing a metro app so forget cross platform or perhaps you can reuse a lot of the code base but some effort is still required and we're really hoping for the best. In the end we are rewriting again.
Consider having a product developed in silverlight. Now MS is saying they are backing html5 but fear not, you can still rewrite it for metro because sadly IE10 on metro will not support plugins. This is their own plugin on their own operating system. Not supported! Which is not the same thing because SL atleast worked on the mac cross platform. Your metro app wont. So, html5? even still your developing a metro app so forget cross platform or perhaps you can reuse a lot of the code base but some effort is still required and we're really hoping for the best. In the end we are rewriting again.
Well, I agree with inconsistency in microsoft technology stack. But heck, it's PHP! PHP is evolving even more, it had only recent futures like namespaces, simple things like a()[0]. But that's not the main problem. The main problem is clean API. PHP has just a ton of inconsistent functions that you must hold in your head. From this point of view C# is one of really small number of languages that has really clean API.
Maybe I just can't understand something, but even sitting on linux for last 6 years and seeing all the great technologies I find C# really great and clean language.
Maybe I just can't understand something, but even sitting on linux for last 6 years and seeing all the great technologies I find C# really great and clean language.
I guess I cannot argue that. all summed, at the end of the day, C# is quite nice indeed :P
Im sure they are going to drop metro too, shortly after all their customers hate it even more than vista.
This article brought back lots of memories. I also used to work in chemistry, started doing programming (because I somehow knew how to do it in the first place) and I worked in Microsoft business for years. I didn't want to be a programmer and I was looking for alternative job options all the time. Then I met a friend who showed me a bit of Haskell, SICP stuff and I also started doing projects with Rails.
Now, years later, I love every day being in the business. I'm learning new stuff every day, like Arch Linux, Vim, Git, EventMachine, Xmonad, the list goes on... It might not be the same for everybody, but open source world was a cure for me to start loving my profession. I'm really thankful for that.
Now, years later, I love every day being in the business. I'm learning new stuff every day, like Arch Linux, Vim, Git, EventMachine, Xmonad, the list goes on... It might not be the same for everybody, but open source world was a cure for me to start loving my profession. I'm really thankful for that.