Many roles claim to be full stack. Teedy Deigh shares a day in the life of a full stack developer.
06:00
Uh... what... Snooze
06:15
Snooze
06:30
Snooze
06:45
Falls out of bed
Why did I set my alarm for this time of night... morning... whatever...?
Oh yes. Full-stack development. Read and watched some stuff on it yesterday. Couldn’t find anything of substance. Sure, a whole load of stuff on web development – JavaScript, HTML, CSS and the occasional database – but nothing on the rest of the stack and how to do it properly.
So, thought I’d better explore it for myself. Full stack, full day, full on!
07:03
OK, dragged a comb across my head, found my way downstairs, drank a cup. Now I’ve looked up, I’ve noticed I’m late.
I said was going to get my head down and online by 06:30. Time for another cup.
07:54
OK, someone on the internet was wrong, but I’ve fixed that now. Where shall we start? Oh yeah, that JavaScript framework I was looking at yesterday – Anglia? Nod? Mithrandir? Whatever. If we’re gonna code the full stack properly, we’re going to need to write our own framework. Can’t just go around reusing other people’s stacks – they don’t call it partial-stack development, amiright?!
09:47
OK, that’s the first version of OverReact.JS pushed. No tests, no docs, but still enough to show these so-called full-stack developers how it’s done.
Let’s just try it out on a pet store example. No, that’s not very ethical... mmm, OK, something else that’s enterprisey... FizzBuzz it is, then!
09:58
Hmm. Something’s not working. There’s a bug. Not sure what it could be.
10:58
OK, still don’t know what the problem is – and that’s after five cups of coffee! Like looking for a needle and thread in a call stack. Bloody legacy code.
Time for a rewrite – OverReact.JS2 ! Maybe this time I’ll write some tests. Gonna need a testing framework.
12:03
Right, that only took three more coffees, but now the Jitters unit-test framework is good to go.
Hmm... must be time for breakfast, then the
OverReact
rewrite.
12:29
Well, I must confess, I’m a little surprised that that person on the internet is still wrong, especially after all the suggestions I offered!
Anyway. Onward to OverReact.JS2 !
15:11
OK, that took a little longer than expected, but given what I can now see are the glaring deficiencies of the first version, it’s important to account for all possible use cases and make everything more configurable. I think I once heard someone say that it was important to try to please all the people all of the time... or something like that.
15:33
I don’t believe it! A bug. Again.
Hmm... perhaps I should have used my Jitters framework to write some tests with?
Is it time for lunch? Must be time for lunch.
15:57
The plan was to write some tests, but I’ve changed my mind as that will just slow me down, and I’m trying to be Agile™. ‘Responding to change over following a plan’ is the mantra I’m following today.
The OverReact.JS2 code doesn’t look like it has any issues – in fact, it looks quite happy from where I’m sitting: emoji identifiers FTW! I chose an uncompromisingly minimal coding style that shuns the excesses of commenting, indentation, long identifiers and clunky, procedural control flow. So the problem can’t be there, right? Must be somewhere else on the stack.
Perhaps the JavaScript engine is at fault?
18:12
Writing Veg.JooS, my new JavaScript engine, seems to be going well so far, although I suspect that I might be looking at an all-nighter. That, however, is not my main concern: my reliance on an existing C compiler, regardless of its long-standing open-source pedigree, may be a weak link in my tool chain.
Rather than stand on the toes of giants, it may be wiser to write my own compiler.
19:49
Occurs to me that it might be time for lunch... or something.
20:01
Well, this is turning into something of an odyssey, but I can’t believe I overlooked an obvious step: I need to create a compiler compiler to save time and trouble in future!
OK, back to food... and, can you believe it, that person on the internet is still wrong?
20:15
The patterns I’m going to use to create YakShavR are clear in my head, but there’s a couple of things I think I’m missing.
Ah yes, coffee’s what I’m missing!
20:59
It’s clear that what I’ve been missing is the right language. No, I don’t mean “@#$%&!” – although there’s been plenty of that today – I mean for implementing YakShavR. I started writing it in C but, you know, chickens and eggs!
I’ve also decided that maybe C is not the right way to go for Veg.JooS. I need a better systems programming language, something with less historical baggage, unsullied by popularity and compromise. Think I might call it ToldUSo, and will post a repo link to the person – now people! – on the internet who is wrong.
Anyway, how to break the chicken-and-egg cycle? Lisp! Pure and simple, and no need for tests as it’s already functional.
21:49
Two pomodoros later (minus the wasteful five-minute breaks) and I’ve got the core Lisp eval function written out on my whiteboard. Or evil, looking at the way I’ve written it – well, scribbled – which does highlight a bit of a problem: I was going to code it up, but I’m not sure I can read it now. Looks like it was written by a caffeinated spider.
Caffeine. Coffee. Yup, that’s the problem. Gonna need more of that if I’m to crack this code.
22:41
OK, I think I’ve almost got it. Must be time for... a meal.
23:45
Perhaps, a little unbelievably, the people on the internet who are wrong might actually be right. They pointed out that I don’t seem to be willing to compromise. Damn straight! Uncompromising is my middle name (albeit one I had to get changed by deed poll, as my parents originally chose Davina).
Andrew Koenig observed that “ People who brook no compromise in programming languages should program in lambda calculus or machine language .” I need to bootstrap the Lisp interpreter and the answer has been staring me in the face. Time to get back to the metal.
01:23
More coffee. Things are going well.
02:11
More coffee. Things are not going well.
Working at this level is high RISC; I need to go high Church. Alonzo Church, that is. Lambda calculus is the purest of the pure. It’s so pure that it makes Haskell look like JavaScript. So pure, in fact, that it doesn’t even have numbers – there are only lambdas. Using Church numeral encodings, you define your own numbers.
This is perhaps the truest expression of the software craft movement: hand-crafted, artisanal integers. There are no Booleans, so you make your own truth. Mind-blowing. Want a list? You can define a pair, and then nominate roles for each element – first blow your mind out in a car, second cdr be used as the tail – and cons everything up from there.
02:56
Food? Coffee? Am I hungry? Am I thirsty? What am I doing? Who am I?
03:14
Definitely jitters – no, not the testing framework. Hallucinations? Hallucinations.
04:53
Wuh! Must’ve dozed off. Went into a dream.
Progress so far: I’ve got zeroes and ones. Lots of them. Frolicking lambdas ready to be crafted into a full stack.
Instead of FizzBuzz, I’m going to work on some more ambitious and algorithmic: a highly configurable, reusable, general-purpose algorithm that counts anything from sheep in a field, a semiring or a group, to holes in Blackburn, Lancashire (even if they’re rather small).
Feeling a little strange. And I’m out of coffee.
06:00
Uh... what... Snooze
plans to retire somewhere nice. It is said, however, that no plan of battle survives contact with the enemy. In the meantime, you’ll find her hoarding zeroes and ones and toilet paper.