What are the characteristics of a low level language? Some people consider bit twiddling and managing memory to be low level issues and C by that definition is a low level language. Others say the more declarative the language the more high level it is. Again, by that definition C is a low level language and languages like Java, Scala, Prolog, and Haskell are not. I disagree. Continue reading
How hard is it to make sum types in Ruby? Not very hard at all. Continue reading
In the previous post I covered deep copying and override merging two hash maps. This time I want to do something a little different. Instead of copying keys and values I’m going to provide a class definition that does look-ups without merging anything. Let’s begin with a skeleton and fill things in as we go along Continue reading
The motivation for this one is that configuration for various development and production environments is often expressed in some kind of key/value format. Yaml and Json are the popular choices. You can also imagine at some point thinking that you can provide some kind of override mechanism for taking a development configuration and turning it into a production configuration by providing overrides for the keys you want to change in production. I’m not convinced this is a good way of doing things but let’s follow along anyway. Continue reading
What is a compiler? It’s many things but the one thing it’s not is a dynamically extensible structure transformer. The reason you write code is because the compiler can only understand certain structures and you have to specify everything in terms of those structures. Static type systems are an excellent example of those fixed and rigid structures. A type system baked into a language is forever and can only be extended by modifying the compiler code directly. Now think about that a little bit: all the code you write is to teach the compiler how to perform new structure transformation in terms of the ones the compiler already understands. What if your compiler could be extended to work with those structures directly? Wouldn’t that be something? In that world all abstractions would be zero-cost instead of the ones the compiler writers thought should be zero-cost.
Update: Patrick McKenzie, Erin Ptacek, and Thomas Ptacek actually have a pretty good way of hacking the problem. I recommend heading their way and signing up for whatever it is they have in the works because there is no way it will be as bad as the usual technical interview process.
I’ve been trying to hack around the technical interview process but so far I’ve been unsuccessful. That’s not to say the experience has not been worthwhile. My ability to discriminate between professional software shops and amateur ones has increased a little bit. Here are the criteria I’ve settled on. Continue reading
It is possible to do configuration management right but it is also possible to do it wrong. One way to do it wrong is to combine the provisioning and deployment logic into various cookbooks and isolate them from the applications that depend on them. The reason this is wrong is because to understand how the application works in production you now have to chase down dependencies somewhere else and once you get there the cookbooks will not make much sense because they will make assumptions about the application. This is all a long-winded way of saying you are keeping track of two contexts when in reality there is really just one context, the application and its associated infrastructure logic. Continue reading
Please stop using the phrase “full-stack developer”. The phrase “full-stack developer” is completely devoid of any meaning because as you can see above no one can be a full-stack developer given the complexity of the modern stack. In fact hearing the phrase makes me think that the place putting out the job advert is full of amateurs. Instead just spell out exactly what your stack looks like and specify you want people that have a certain level of expertise with that stack.
If your entire web presence is controlled by and contained within walled gardens like Facebook and Linkedin then you’re doing it wrong. Continue reading
Monads don’t compose and they’re a kludgy solution for structuring effectual computations. To solve the composition problem people have tried many things, e.g. monad transformers, free monad co-products with associated interpreters. If you have any aesthetic sense about theory then it is obvious none of those are the right solution. There is an excellent stackoverflow question that gets to the heart of the matter.