To me there is something extremely satisfying in transforming a concept, an idea, into something that works.
The advantage of programming over more physical expressions of engineering creativity is that there are almost no limits to what can be achieved. I used to build electronic circuit boards for fun, but while the process of making something with your hands was also very enjoyable, it was long and messy and often terribly frustrating: finding suitable parts took a long time, then the slightest error could make them unsuable; testing without good instruments was a hit-and-miss process. Software programming brings you almost instant gratification: code a bit, test it and enjoy adding stuff, bit by bit.
Programming is also a very social activity, in a broad sense. A lot of social activism is built upon the idea that programming is a way to improve society and bring some form of power back to the people. Of course, not everyone can, want or should learn programming, but if you consider software the embodiment of certain ideas, then keeping these ideas free and available for all can make an impact.
This is pretty much the underlying theme under most of the Free Software/Open Source movement: people donating their time, intelligence and efforts to build infrastructures that are available to all.
It's also a counter-model to strict capitalism that believes that people's greed is utlimately balanced for the benefit of all: donating your work and letting other people build upon it can have at least as much impact and has the built-in advantage of allowing those who need technology the most to access it.
I learnt C programming at school, back in the early nineties, when assembly languages were still considered sexy. I then went a few time through dipping my toes in C++ and Windows programming, but never really dug into the language: since I'm not a full-time programmer, I find it too vast and unwieldy to really tackle it seriously enough to be productive in it.
Back in 1997, I got very interested in the technologies of the Internet and wanted to build web-sites. HTML was simple enough, but building dynamic and configurable sites needed something else. I also wanted to learn a cross-platform scripting language that would allow me to build small utilities quickly, without having to worry about memory allocation and low-level stuff that's so interesting, but so time-consuming.
I considered both Python and Perl and after careful review, I found Perl more to my taste: its force and main drawback is its lack of enforcement of any programming style, which means that if you are sloppy, the language won't help you to get better. What attracted me most to Perl over Python though was the fact that the former was built by a linguist and incorporated into programming natural language constructs that were both intuitive and powerful.
I'm still very much in love with Perl and never cease to learn something new and amazing about it. It allows me to write an application on Linux and just use it without change on Windows; it has the most comprehensive and wide-ranging library of ready-made modules that can tackle everything, from managing your bank account online to sequencing the human genome.
Perl is wonderful, but while it's not used much for building Graphical User Interfaces. It's possible though, but there is a lack of professional tools and infrastructure to help you do that well.
Since the initial announcement of the .Net Framework by Microsoft, I thought that this had the potential to change the way we build applications. In a move that still makes a lot of people suspicious, Microsoft decided to make most of .Net a public standard. There are now three implementation of .Net and ASP.Net:
- The Microsoft .Net Framework
- The DotGNU project, from the Free Software Fundation
- The Mono project, from Ximian, now a Novell company.
.Net is a language-independant general framework for building cross-platform graphical and Internet applications. In that regard, its objectives go beyond Java since any programming language can be adapted to integrate within the .Net infrastucture. This means that you write modules containing classes that encapsulate data and functionalities that can be used by any other programming language. It's a nice way to maximize your programming efforts: use the best programming language for the task, then package the whole thing into an assembly that can be used by other people using other languages more adapted to their tasks. It's neat, clean and it makes things a lot more productive by emphasising integration and reusability.
Microsoft not only developped the framework, they decided to also invent a new language to make the most of it. C# was born of the brain of Anders Hjelsberg, the inventor of Delphi, the hugely popular programming language from Borland. Being an early fan of Borland Products since they started with Turbo Pascal on CP/M, it's easy to see the influence of the Borland-way on the .Net framework: the way you build applications is very much like Borland user's have been building applications for nearly a decade (some even think there is conspiration there).