Sexy Technologies
Here is my current round-up of technologies that are still getting my blood pumping. The irony here is kind of intentional because not many of these are widely considered to be that sexy. Hint: From an engineering perspective I believe best practices usually trump new and shiny.
1. GNU/Linux.
No explanation required.
2. Perl
Perl was the first ever programming language (apart from BASIC) that I ever laid eyes on. Back in the day, around 1999, when I had first started to tinker with web technologies in my spare time I had figured out that I could upload publically available Perl/CGI scripts to my shared hosting account and give my sites instant functionality such as a guest book or form-to-email processing. I didn’t really imagine at that time that one day I would be able to write Perl code myself because it looked pretty nuts. However as a high-level programming language that people still use it’s clearly had the longest amount of time to grow on me. Also, CPAN.
3. PHP
During the foundation year of my degree in 2003, which I started as a mature student but didn’t finish (yes I said foundation year - I had to learn and subsequently forget calculus at some point, right?) I bought a book on beginning to develop using the LAMP stack. So it was basically a simple cookbook of PHP and MySQL recipes. I had already started to use Linux as my main desktop OS. (Slackware/Redhat 9.) Following the steps in this book I was suddenly able to make CMS-driven websites from scratch. I hadn’t learnt C, C++ or Java at this point but when I did I became big into PHP 5 and Object Oriented Programming, which was then a brand new feature. I also started to become interested in frameworks starting with Ruby on Rails. In 2005 I got my first part-time programming job thanks to hookups through the Greater London Linux User Group (GLLUG) mailing list. I still like PHP because, apart from it’s foibles, it’s basically a C-like specialist language for backend web development and it happens to have matured as I have as a backend developer and probably at about the same rate.
4. PostgreSQL
I believe PostgreSQL is the king of the relational database world. There isn’t anything I’ve seen any other RDBMS do that postgres can’t handle. I believe in the notion that it’s more true to the official SQL spec than most others and I still feel there’s lots for me to learn about it. Also I’ve seen horrible things done with it but not as horrible as MS SQL.
4. RedMine
I love RedMine because of it’s simplicity despite being a RoR app. My experience tells me that if you really care about adopting an Agile software development process the most important thing is applying a KISS (Keep It Simple Stupid) mentality all the way. I understand there may be more comprehensive Agile tools out there but if your organisation isn’t even doing Continuous Integration properly then who cares.
5. RedBean
I don’t know of a non-NoSQL technology as cool as Redbean, especially when combined with the above (Postgres) due to performance. During development stages it forces you to keep your database schema in your head the entire time and it has the rare quality of wanting to stay out of your way as much as possible while also actively encouraging you to keep a normalised database design. The only thing that’s probably better is Perl’s DBIx::Class but I don’t get to use that enough.
6. PHPUnit
The unit testing framework that taught me unit testing before I properly started to learn about software testing as more of a discipline. What excites me about PHPUnit currently is that I know that it supports lots of different styles of testing and it’s very extensible. I haven’t found the time yet or quite the need to get it to perform the myriad of things it can do but I’m sure it will be very satisfying when I get around to it. Also the code coverage extension works well and look great.
7. JavaScript
I love JavaScript mostly because of JSON. There’s something pretty exciting about creating a PHP based REST-ful API/web service that speaks JSON especially when it’s based on all of the above technologies (apart from RedMine and Perl) including using PHPUnit from which to perform system testing.
Also Node.js is pretty cool. Node.js is a backend technology by the way. It’s amazing how often that gets confused. I’d definitely like to be involved in some more projects that use it but I'd be quite fussy about having strict coding conventions, a TDD approach and a system architecture - especially if complex - that was geared around an "event-hub" style design. Otherwise the benefits of using the technology would probably feel lost. Also apparently you can do some quite cool stuff with JavaScript on the front-end too. I just wish I had got to learn MooTools properly before it went out of fashion!