Friday, 8 March 2013
Expiry date on a developer
I'm thinking a lot about what should I learn next. It's never easy. There are so many in technology and you have to know which one is gonna be popular and useful. It also raise the question - the language or the framework you're working with at the moment it whether or not useful.
I was learning Flex and Air couple of years ago. I really loved it. ActionScript version 3 is a great language, having many cool properties. The Flex library is very wel build up and it's just fun to create a quick application and see your result almost immediately. However my licence was expired (that I've got on a conference for free) and from then I couldn't really use it. There is the SDK itself which is a full fledged compiler that can do the magic - however having no IDE it's not that easy. So I just gave up and never used again. At the same time I kinda had to stop supporting my apps that was using Flex or AS3. That's just weird, like the hip girlfriend who left you.
And with Flex I had luck. I don't have that much luck with Microsoft development tools, for example with Visual Studio, or MSSQL. Or I could mention other Adobe products, such as Fireworks or Illustrator or the Flash Professional IDE. I'm sure there are hundreds of other proprietary editors or tools I won't ever try. Only because it's just too expensive and smells like a forbidden cult.
I don't like it at all. It's a limitation for me - and maybe for the particular technology as well. I know enterprise software ofter have their enterprise customer. So they also can pay the bills and support further development. But it won't go viral. Millions of people will miss trying it out and playing with it, evaluating it in professional environments. And that's only the level of individuals. There are the ecosystem level. A technology needs players who experiment on the tool. They break the ice and shows possible ways of evolution. A project needs documenters - like bloggers, knowledge management systems, cookbooks and such. They need plugin and extension developer communities to enrich their system.
But for many other technologies there are simply no evaluation. You either already know you need it or you leave it.
And that lead to the question of developer expiration. It's a well known (or should be) fact that software developer companies shouldn't hire developers who know one language very only. That's the most dangerous knowledge ever. Great developers know development. And when you know development you will use languages and frameworks as tool.
I'm working with Drupal in the last 4 years and now I almost only can see arrays. Array of forms, menu items, entities and rules and service resources. It's like vomiting into a huge warm bathroom. It fits well but doesn't feel ok. But seriously, what happens when Drupal goes to holiday? You stand there, missing tons of hooks and arrays and then you feel expired. (Unless you're one of those lucky ones who can edit core during work time.)
Don't get me wrong, I'm sure that's more or less the case with other technologies. Like JSP, Spring and ASP and RoR. To be honest I'm hailing the proliferation of libraries but fearing them the same time. A library means you have to learn the library and it's special structure. I've never met a library that was able to teach you programming. They mostly enforce you to use their system, their API and their methodology. It doesn't matter how good it is. You learn the library, again.
So my theoretical question is - if libraries are useless to tech you programming - how good programming languages and simple pure coding challenges are to make you work effectively on a project? Because like it or not most cases you use a library. Let it be a web framework, a cms library, a ui library, a service library or an authentication library. You really don't want to reinvent the wheel all the time.
I tell you a pretty typical edge case. You may remember I was playing with CoffeeScript this week. It's a great tool and I like what it's doing with JS. It's pretty, effective and a sustainable technology (seems still). But then if we use it on a project all other devs has to learn it as well (imho that's a big plus all the time as a dev - for a manager that's a disaster). And then what happens when there is a better one? Or a limitation will be discovered? Abstraction layers are just abstraction layers - they won't be ever as flexible as native languages.
If you think rationally you already know the solution to extend your expiry date. Libraries are gonna be for us. And they will be different each time. However one thing is redundant. And that is patterns. Models, events, views, services, components, extensions, loaders, apis and such. It's just a dressed up variation of some patterns all the time. If you see the right amount of libraries you will adopt to the next one pretty soon. So as a general lesson - learn the methodology, rather than the interfaces.