Friday 23 May 2014

The ergonomics of a statically typed language

Moving from a statically typed language like java on the backend to a dynamically typed language presents its own set of challenges, there are new paradigms to master and habits to unlearn become effective in the new language.

One unexpected outcome is the shift in ergonomics. Simply put in dynamically typed language you need to type more code because you can't lean as much on the ide to figure out what you want to do and give you all boiler plate code with a few well placed keystrokes. Intellij is great ide, webstorm is a great ide derived from it, but it is inherently less capable as an ide on its own due to not being able to assume as much about what your intention is when you are coding.

Statically typed languages are easier to predict intention from due to the strict rules from the compiler, dynamic languages are a lot looser allowing you to do your own thing at  pretty much any time so the ide has less opportunities to be smart and complete what you are doing for you. Thankfully the amount of boiler plate code you have to write is pretty small in javascript and you really save a lot in not having to do alot of marshalling code when you couple node and mongo together and go JSON all the way through. You do however have to write alot of code with very little smart code completion and more complex refactoring like extracting methods is spotty at best.

This realisation makes the editors of choice for dynamically typed languages easier to understand, if the ide doesn't give you that much benefit then you may well be better off going with something that exists everywhere like vim or emacsso you can learn once and code everywhere but holding that many keystrokes in the fingertips is a long journey, that sometimes feels like a backward step.

It would be great to see an emperical study of the amount of typing required by two pro users across dynamic and statically typed languages, but my own anecdotal evidence has me typing alot more, but also looking for more ways to optimise input which is an interesting project in itself.

Sunday 18 May 2014

Zenimax vs Programmers

Zenimax, the owners of ID software recently filed suit against Oculus Rift claiming that their Chief Technology Guy John Carmack took their Intellectual Property with him when he left ID to pursue a dream of virtual reality with the garage born device from Palmer Luckey and the team at Oculus. The suite was filed soon after the two billion dollar acquisition of Oculus by Facebook. The timing of the filing indicates someone at Zenimax decided the time was right to pursue its case due to the improved economics of the Oculus project.


ID Software back in the day.

John Carmack is a pioneer in the world of 3D gaming, he is credited with discovering many of the techniques for getting computer game software to push the polygons required to render 3D worlds. The engines he wrote while at ID software invented the state of the art in 3D even if the playability of the games was on the decline since the glory days of doom and quake. He was more than an employee at ID, he founded the company and along with John Romero and their small team defined PC gaming through the late 80's and into the 90's, eventually the partnership between the two Johns fractured with John Carmack continuing his work at ID and John Romero pursuing other game projects. As with alot of game studios, ID software got bought by bigger publishers and at some point Zenimax acquired the keys to the IP kingdom that John and John had built.

Does a programmer own their own thoughts ?

The interesting question for software developers is do we own our thoughts ? If you invent something in your own time that is not related to your work for a company can that company later claim to own the IP ? Also does this create a chilling effect for future employment ? Does someone like John become unemployable due to his canon of existing programming work influencing his future work? Any software project John works on in the future is bound to be influencd by all the lessons from his preceding projects, is his only option going forward to move away from his field of expertise in 3D software and start writing code for banks? (it would still be some great banking software no doubt!)


Michelangelo's Sistine Chapel

Writing code is often likened to creating art, this situation is akin to an early patron of Michelangelo claiming ownership of all subsequent works because they look similar and use some of the same colors and themes as the works he did for them. It would create a form of indentured servitude for people in creative fields. There is a strong view within the open source community of which John Carmack is a contributor that ideas are meant to be free. Early in his career he threatened to quit at ID due to someone wanting to patent some of his work, reportedly his reasoning was that if he hadn't been able to benefit from all the work, ideas and innovations of the programmers that came before him he wouldn't have been able to accomplish what he had. To paraphrase Isaac Newton, "If I have seen further than others it is because I have stood on the shoulders of giants".

In an ideal world companies would own the source code of the work that programmers do for them but the ideas would belong to the coders who came up with them assignable either to the company or the community or to themselves as they see fit. Often the ideas are claimed by the companies, due to aggresive wording of employment contracts or the context in which the idea evolved.