What I've learned this year.
Thursday, 13. December 2007, 18:23:11
Reflection time. I've been in the IT industry for real, for almost a year. What have I learned?
Python
I've learned the Python programming language; it has taught me list comprehensions and higher order functions such as map, reduce and filter. Python has also taught me what lambda expressions and first-class functions are. Python also has a powerfull api for regular expressions, and combined with the very dynamic nature of Python, I learned to do some very neat stuff - like writing a wiki-markup parser, with tables support, in 50 lines of code.
Django
I learned Django and wrote a blogging application in it - blogging applications are the new Hello World. Django taught me how a templating engine is to work with when it's done right, and Django taught me to love beautiful URLs. Django also introduced me to the meta-class feature of Python, and I wrote some really creazy (and very ugly) code using it - so I learned that meta-classes should only be used when they really make sense (like in Django's ORM).
Haskell
I didn't manage to learn Haskell, but I did study it and poke around. I learned the roots of the higher-order functions that I used in my Python code. I also learned about the underlying foldl and foldr functions that are powering many of these functions, and I learned that we have functional patterns, just as we have object-oriented patterns. Haskell also taught me importance of managing side-effects. I also learned about currying, pattern matching and the coolness of Hindle-Milner type inferance.
Spring Framework
Many of the Java projects I work on are using Spring in one way or the other. Spring taught me the usefulness of dependency injection and gave me the power to introduce that loose coupling that I've always struggled to achive in my Java projects.
AspectJ
Caching, logging and access-checks - these are all cross-cutting concerns and primary use cases for aspect-oriented programming. AspectJ gave me the power to factor these things into their own units and I was happy to learn how clean your code can get when you don't have to think about these things.
Maven2
My relationship with Maven is bitter-sweet; it is a blessing when it works, and a curse when it don't. But fact of the matter is, that I wouldn't start a Java project without it - a dependency managing build tool is something every language should have.
Web Services
I've been a key player in a move at my workplace towards more web services in our systems, and a web service powered single-sign on solution. I've learned about WSDLs, XSD Schemas, WS-Security and WS-I Basic Profile. Since we're using a lot of Java, I've also learned a lot about a web service framework called CXF, and I have written components for it, and extended it is several ways to make it satisfy our needs.
Common Lisp
Haven't spend that much time with it, but I learned that macros are pretty cool. I also learned that networking libraries sadly aren't part of the CL standard so they are unfortinatly implementation specific. I also learned that the Emacs/SLIME combo completely redeems the otherwise liberal use of parentheses you see in Lisp code.
Ruby
I only started playing with it this month, but blocks are pretty neat. Plus, I think I can see why people might like TextMate. Oh, and Rubinus has colored stack-traces (and a cute micro-vm architecture).
Bazaar
This SCM tool showed me the wonders of offline commit and perfect-rename features. Sadly the tool support isn't up par with subversion.
Capistrano
This is the very reason I started learning Ruby in the first place. Capistrano taught me why you should also spend time on your deployment tooling in a project, and not just building and the application itself. I haven't quite gotten there myself, but I'm looking forward to being able to build, test, deploy and configure an application for multiple servers, in multiple environments, with just a single command in a console.
SQL
You wouldn't believe what I've been through with regards to SQL. I inherited a reporting application which is consisting of about 60% pure, hardcore, SQL. I hardly knew any SQL when I started in January, and now I think it's safe to say that I'm an SQL super-user. Joins, subselects, optimization, schema-design and DDL - all tools in the belt.
So that's about it. Off the top of my head, these are the most noteworthy things I've learned this year. You can't be disappointed in that, and if I keep up this pace, 2008 is going to be an interresting year.
Python
I've learned the Python programming language; it has taught me list comprehensions and higher order functions such as map, reduce and filter. Python has also taught me what lambda expressions and first-class functions are. Python also has a powerfull api for regular expressions, and combined with the very dynamic nature of Python, I learned to do some very neat stuff - like writing a wiki-markup parser, with tables support, in 50 lines of code.
Django
I learned Django and wrote a blogging application in it - blogging applications are the new Hello World. Django taught me how a templating engine is to work with when it's done right, and Django taught me to love beautiful URLs. Django also introduced me to the meta-class feature of Python, and I wrote some really creazy (and very ugly) code using it - so I learned that meta-classes should only be used when they really make sense (like in Django's ORM).
Haskell
I didn't manage to learn Haskell, but I did study it and poke around. I learned the roots of the higher-order functions that I used in my Python code. I also learned about the underlying foldl and foldr functions that are powering many of these functions, and I learned that we have functional patterns, just as we have object-oriented patterns. Haskell also taught me importance of managing side-effects. I also learned about currying, pattern matching and the coolness of Hindle-Milner type inferance.
Spring Framework
Many of the Java projects I work on are using Spring in one way or the other. Spring taught me the usefulness of dependency injection and gave me the power to introduce that loose coupling that I've always struggled to achive in my Java projects.
AspectJ
Caching, logging and access-checks - these are all cross-cutting concerns and primary use cases for aspect-oriented programming. AspectJ gave me the power to factor these things into their own units and I was happy to learn how clean your code can get when you don't have to think about these things.
Maven2
My relationship with Maven is bitter-sweet; it is a blessing when it works, and a curse when it don't. But fact of the matter is, that I wouldn't start a Java project without it - a dependency managing build tool is something every language should have.
Web Services
I've been a key player in a move at my workplace towards more web services in our systems, and a web service powered single-sign on solution. I've learned about WSDLs, XSD Schemas, WS-Security and WS-I Basic Profile. Since we're using a lot of Java, I've also learned a lot about a web service framework called CXF, and I have written components for it, and extended it is several ways to make it satisfy our needs.
Common Lisp
Haven't spend that much time with it, but I learned that macros are pretty cool. I also learned that networking libraries sadly aren't part of the CL standard so they are unfortinatly implementation specific. I also learned that the Emacs/SLIME combo completely redeems the otherwise liberal use of parentheses you see in Lisp code.
Ruby
I only started playing with it this month, but blocks are pretty neat. Plus, I think I can see why people might like TextMate. Oh, and Rubinus has colored stack-traces (and a cute micro-vm architecture).
Bazaar
This SCM tool showed me the wonders of offline commit and perfect-rename features. Sadly the tool support isn't up par with subversion.
Capistrano
This is the very reason I started learning Ruby in the first place. Capistrano taught me why you should also spend time on your deployment tooling in a project, and not just building and the application itself. I haven't quite gotten there myself, but I'm looking forward to being able to build, test, deploy and configure an application for multiple servers, in multiple environments, with just a single command in a console.
SQL
You wouldn't believe what I've been through with regards to SQL. I inherited a reporting application which is consisting of about 60% pure, hardcore, SQL. I hardly knew any SQL when I started in January, and now I think it's safe to say that I'm an SQL super-user. Joins, subselects, optimization, schema-design and DDL - all tools in the belt.
So that's about it. Off the top of my head, these are the most noteworthy things I've learned this year. You can't be disappointed in that, and if I keep up this pace, 2008 is going to be an interresting year.