It?s unshaven yaks all the way down@4am
Nothing else I've come across has quite been able to explain the last 5 years of my programming and development work than this quote ? what I've been doing personally for the last 5 years I will cover in another blog post soon, if you?ve just had the shock of your life seeing something new from me in your RSS reader. It?s that Kroc guy.
A little explanation will be needed. Firstly, ?yak shaving? is when, in order to complete one task you have to do some other minor task first, which in turn relies on another task? and before you know it, you?re standing in a field shaving yaks. It?s the process of being so far removed from your original goal that you are busy doing something seemingly unrelated and have lost all sight of progress.
Combine this with ?It?s turtles all the way down? and you have one of the most succinct ways in English to explain the phenomenon of attempting to develop a product, only to find that some dependency you rely on is not good enough and you have to replace it yourself, which then leads on to yet another dependency, and so on until you begin to consider ?how difficult would it be to develop my own CPU??. Every time you peek under the current abstraction layer, you find that ?computers are fractally awful?.
Things Have to Get Worse Before They Can Get Better
I've been away from web-development since 2013 and my, oh my, how things have gotten worse, haven?t they?
Actually, this is kind of to be expected, it happens in every industry. What we are seeing is the younger generation taking over from the old guard. Those who were doing web-development in the ?90s are retiring or moving on and we?re seeing the result of a lot of fresh blood coming in and repeating all the mistakes of the past.
What has changed ? is different than the past ? is that basic access to so much of the web is dependent on so many first-time programmers who literally don?t know the word ?security?.
What Do We Have Now?
When I last updated this site, HTML5 was still a big ?maybe?, hanging upon Microsoft dragging their feet. I could not have predicted the Microsoft we have now, back then.
Web-development news these days generally consists of: ?Here?s a chart of compatibility, Microsoft isn?t on it.?Kroc Camen, 29th October 2009
Heck, the site as it stands at the time of publishing still works in Firefox 3.0 (we?re on version 59 right now) or Camino 2.0 (do you remember that??) via specialised fall-back CSS!
What Do I Have to Prove Now?
Nothing ? you have to remember that when I first made this website, it was the most provocatively unflinching commentary on web-design at that time:
Dizzy. I?ve just read a whole damn website from A to Z, including the source code. One night and my cognition changed.@riddle 6th June 2009
view source = wow. code really can be art.@alex_gibson 19th June 2009
I was a lot more angry, inexperienced and defiant in those times. For the here and now I know that making something utterly bleeding edge that would only work correctly on 25% of devices would not prove anything these days ? It?s not bleeding edge that the world needs now, it?s better quality engineering.
The Fear That Finds Us; the Fear That Binds Us
The point is that, with the mental and physical strain I've been under for the past five years, I've been paralysed with uncertainty and ?hauptversionsnummernerhöhungsangst?: German for ?the fear of increasing the major version number?.
I got myself into a vicious-circle of being too afraid to put anything out that couldn?t be verifiably safe? and thus began the rabbit-hole that I would be falling down for the last five years.
First, my templating methodology works with XML node trees, but because XPath doesn?t just ?roll off the tongue?, we do some basic conversion of CSS to XPath. This was handled by a simple, ?dumb? search & replace function. In order to test the templating, I'm going to be relying on CSS to XPath translation, so I decide to migrate that to its own project / package and develop a fully CSS3-compliant, fail-proof CSS to XPath translator ? full test-suite and all.
But to test the CSS to XPath translator, I need to be able to both declare (in a compact, concise manner) and compare XML node trees to test the result of an XPath query against a ?correct? XML tree.
Since building, comparing, and tearing-down hundreds of miniature XML trees is anything but pleasant, I developed a very compact, highly regular (normalised) XML serialisation format (I'm actually quite proud of it, if I could finish it):
<ul <li <a @href some.url | Compact, serialized XML! >>>
It ensures that, regardless of white-space differences, an XML node tree can be serialised into a string (easy to compare) or a string example (e.g. an expected test result) can be de-serialised into an XML node tree. With this, it is very easy to compare an XML node tree in memory (perhaps the result of a search / filter query) with a short and simple string describing an XML node tree.
OK, but now we need to write a formal spec and test-suite for the XML serialisation format?
Look, I get the motivation behind Test Driven Development, but it doesn?t work for a lone hobbyist programmer who ?ain?t getting paid for this?.
Version Numbers Must Be Automated Away
Humans cannot be trusted with version numbers. Version numbers combine into one thing, two different concerns: human concerns, and machine concerns. To a machine, every API change is a major change; it?s an entirely different product as far as the machine is concerned, but you redesign the UI (without affecting any public APIs) and the machine doesn?t care.
Humans are prone to changing APIs, but not increment the version number correctly, because daft human concerns like ?marketing? and ?upgrade pricing? interferes with the predictability and reliability of software.
There are two things to take away from this:
Every time a public API is changed, compilers should automatically increment a counter and that number is what should be used for dependency / compatibility resolution, not an arbitrary human-governed number
Every time you make a commit, your software has changed.
There are no version numbers, there are only commit logs
In Which We Return, Bleary-Eyed, From the Rabbit Hole
That brings me, finally, to how I am going to get Camen Design back on its knees again. I do not need complete re-writes, paradigm-shifting breakthroughs, and holding releases back until ?ready? (whatever that means) or when the ?version number demands it?.
The only future for software is version-less, incremental improvement. I need to move away from the fear of ?incomplete? and see my code more as ?being brought to life?, in the public view.
There isn?t going to be another major, earth-shattering release of Camen Design, instead I am going to slowly polish it up. I'm going to migrate systems from one thing to another, piece by piece, rather than throwing it all out and starting again.
There is a lot to do, but it no longer has to hinge upon ?the next release?.
If you want to watch this all happening, you may want to follow me on GitHub.