Let’s Get Emulating!

So to get started playing with an Amiga the easiest thing to do is install an Emulator. The UAE Emulator is available for all kinds of platforms. You can even run it on a Raspberry Pi, I use a Mac, so that’s what I’m going to talk about here.

FS-UAE

You’ll want to head to https://fs-uae.net and click on the “latest version”

The choose the recommended download.

Drag the FA-UAE icons to the Applications shortcut and you’re done. You can close and delete the DMG. I haven’t used the arcade app. I assume its for games and I don’t much care about them so you can probably save a few Mb by just copying the launcher.

Kickstart and Workbench

The Amiga stored a bunch of its operating system on ROMs inside the machine called Kickstart. This allowed the OS to load up from an 880K floppy disk because lots of what was required didn’t need to be on the disk.

Those ROMs are proprietary and the easiest legal way to get them digitally is to buy an AmigaForever CD. Instructions are available on the FS-UAE page. You’ll see on that page that they tout an MSI installer as an advantage which does show the general windows bias I’ve found when trying to get this all working.

If you are unconcerned with illegality, or plan to buy a physical Amiga which would give you the ROM anyway, you can probably find what you are looking for here. For the purposes of these posts, cause that’s the physical machine I will be emulating, we’re going to want a Kickstart3.1 ROM for the Amiga1200 and while you’re there, grab the 6 WB3.1 floppy images.

Workbench is windowing UI for the Amiga.

I stress that if you go this route to get started, you should resolve the legality somehow (I bought a licensed physical Kickstart3.1 / WB3.1 on eBay but used the downloads to get going).

Either way, you should end up with the following files available to you somehow.

Lets Build an Amiga1200

OK. We have our emulator, and we have our Kickstart ROM image and we have 6 floppies that represent the Workbench disks. Lets make a machine.

Start up FS-UAE

The first thing we’re going to do is import the Kickstart ROM. Whether you just have the 3.1 ROM I mentioned above or you bought the AmigaForever DVD with a bunch of ROMs, we can click that blue square in the top left and choose “Import Kickstarts”.

Navigate to the parent folder of the ROM files and click import. You should see something like this:

In my case, its just a single ROM for the A1200, you may have ROMs for other machines too. Close the windows so you are back at the main screen.

I still haven’t figured out what the dark grey strip at the bottom is for. I’ve never seen anything useful in it.

OK, lets make an A1200.

Go to the text field where it currently says “Unnamed Configuration” and change that to “A1200”.

Move up and right to the Amiga Model where we’ll switch the first combo to A1200 and the second to “3.1 ROM, 68020 CPU”. Dont be tempted by the accelerators as they need their own ROMs which we haven’t downloaded yet.

We’re going to move along the icons on the top bar, setting where we need to. We’ve been on the “Home” icon, lets move to the floppy icon.

We’re going to set Drive Count to 4. This pretends we have 4 floppy drives attached to the amiga and will make out workbench installation a little easier.

For each of the four disk drives, use the document icon at the right to choose one of the workbench 3.1 ADF files we downloaded earlier. Ensure the first drive contains the Install disk, then add Workbench, Extras and Locale to the other three. This simulates those four disks in those four drives when the machine boots.

Now, in order to be able to “fake insert” other floppies while the system is running, we need to tell FS-UAE in advance that we’re going to need them. We do that by adding the ADF files to the Media Swap List below.

In the “Media Swap List” section, add *all* the floppies, even the ones we already picked. I found out the hard way if you eject one of them you can’t reinsert unless its in the swap list. Order is not important, but hit the + button and add all of the ADF files.

I don’t know what the save disk is, I’ve never used it.

We can skip the CD-ROM tab for now. The next section is Hard Drives.

FS-UAE supports a few different hard drive types, but by far the easiest is a “folder”. Here we tell FS-AUE to use a folder (by default created in ~/Documents/FS-USE/Hard Drives/…) as a hard disk. This is super flexible as it allows us to drag and drop files to and from the amiga using the Finder.

In the first entry, select the folder icon to the right. That will open a File dialog in the right place. Hit new folder and call our new folder “System3..1”.

WHDLoad is a system for loading floppy based games from the hard disk, and we’ll ignore that for now.

The next tab is for memory. To mimic a maxed out A1200 from 1994 we’ll select 2Mb of on-board “chip” RAM that the custom chips can access, and 8Mb of Fast RAM that we would have installed in the trapdoor expansion slot. If we were pretending to be a desktop amiga we could add motherboard ram, and if we had ROMs for an accelerator we could add more there, but for now its a stock A1200 + expansion.

We’ll disable the joystick, otherwise FS-UAE steals our cursor keys to use as a fake joystick.

The expansion card tab stays empty. On the last tab, the one concession we’ll make for modernity is to up the “Floppy Drive Speed” to Turbo so we’re not waiting for the fake floppy to read at real floppy speeds.

With that, we’re done. We can save the configuration we made by pressing the little red arrow over on the left.

And that’s it! We have a fully configured Amiga with a Hard Disk, and 6 floppy disks, 4 of which are sitting in drives, with the install disk in the first drive.

Lets Install Workbench!

We boot the amiga using this Start button in the lower right. The button beside it toggles from Window to Full screen. The mouse capture is a little funky and its super hard to move the window around once it exists, but for now we’ll leave it windowed so we can Cmd-Tab out of the emulator and leave it visible if we need to.

Click the start button and enjoy your Amiga’s Fancy Hi Res display! It’s booting from the Install floppy, but thanks to out sped up floppy drive speed it should happen pretty quickly.

You can see the four floppies, plus the System3.1 Hard Disk (with a wrong icon) and the RAM disk, a fake drive that Amiga creates for us to store scratch files.

Double Click on the Install3.1 disk, the Install folder, and then the English installer (other languages are available so feel free to go your own way).

We’ll click Proceed, and then “Install Release 3.1”, You can choose a different installation mode if you’re curious but just going with Novice gets us there with the minimum of fuss.

I chose English for the language and did not bother with any printer drivers, and the British keymap.

And we’re off!

At some point you’ll see a dialog like this, which means its time to swap a floppy. (6 disks, 4 drives).

We access the magic menu for this using F12. On a desktop Mac keyboard there’s a magic setting in system preferences->keyboard to turn your function keys into function keys. On a laptop Mac, just use the Fn key to make F12 be something other than volume.

When you hit F12 you’ll see this.

Once this menu is open we need to use the cursor keys to navigate up and down. Lets go down to extras and hit return.

We can just eject the disk, or replace it with another from our “Media Swap List”. Lets go down and select Fonts. The menu disappears and if you give the Amiga a second it will recognise the new disk and resume without you clicking proceed.

Same again, F12, cursor down to Fonts, hit return, select the storage floppy and let the Installer continue.

And we’re done!

Hit F12, cursor down and select the Install disk, and Eject.

Click Proceed to reboot the Amiga from the hard disk!

Behold your new Amiga!

One last cleanup step. Cmd-Tab to the launcher app and go to the floppies tab. We want to eject all the floppies here and use the little yellow button to clear the media swap list.

Now when we next boot the Amiga, we’ll have our hard disk and no floppies around to confuse us.

In the next post we’ll talk about adding a second Hard Disk, a C compiler and the system headers for building Amiga programs!

The Future Was Here

A long time ago, in a galaxy far, far away, there was a home computer called the Amiga and I owned a couple.

The Amiga was machine from the future. In the early 90s when I and my friends owned them, when Windows 3.1 was barely stumbling along with overlapping windows, the Amiga had a full multitasking operating system with incredible sound and graphics due to custom processors that kept its meagre 8MHz CPU and 1Mb of RAM clipping along nicely by handling most of the work of drawing and making music.

I started with an A500 with exactly that spec, though I replaced the CPU to a 10MHz 68010 and thought I was king of the world. That was mostly just for games. Later I bought an A1200 with 2Mb of RAM and a 68020 CPU to which I was able to add a 20Mb Hard Disk and a universe striding 8Mb of additional RAM.

It was on this machine I that wrote the first program I’d ever written just for me, not for an assignment, or typing something in from a magazine, but to scratch a real itch.

I connected the Amiga1200 to my 386 Windows PC using a null modem cable to join their serial ports, and I wrote a small Windows program and a small Amiga tool to allow me to drag and drop files onto an icon and transfer them between computers. On the PC I used TurboC and on the Amiga, I used a C compiler called DICE.

That Amiga, along with all the boxes, disks, accessories and expensive developer documentation ended up in the attic of my then girlfriends father. I assume it’s still there, hidden in an attic in a council flat in Musselburgh. And life moved on. PCs got bigger and better, I got a job, and I forgot all about that machine.

Until last month, when I saw this on my friend Graham’s blog:

It’s Smalltalk. For Amiga. It was made by following the instructions in the Blue Book: Smalltalk-80: The Language and Its Implementation.

Graham Lee

I love Smalltalk. I’ve never had cause to use it for anything real but its always occupied a huge space in my brain as something fundamentally different and perspective-altering on my journey of learning about programming. So writing a new Smalltalk implementation seemed interesting, but on an Amiga? Suddenly it all came rushing back and I remembered everything I had loved about it.

So I have been playing along on an Amiga Emulator, I had one abortive attempt with an A1200 I bought on eBay and then passed on, and I’m now awaiting a cleaned up and refurbed Amiga1200 from AmigaPassion.

I’ve spent a bunch time fiddling with various bits and pieces and figured maybe that gives me a good excuse to try and restart this blog.. to document what I’ve been doing. Along the way I’ve learned how to use a CompactFlah card as a hard disk for the Amiga, and I’ve learned how to use that same CompactFlash card with the emulator on my Mac. I’ve played with a few different C compilers and discovered that sometimes its just easier to use the new thing instead of being nostalgic for the old. I’ve struggled to remember that cd / is what you type on AmigaDOS to go “up”, not cd .. and that AmigaDOS predates posix.

But mostly I’ve tried to steer a line between recreating the Amiga experience I remember, while taking advantage of newer technology where I can.

I’m going to try and start at the beginning and the next post will be about setting up FS-UAE on the Mac (because most of the articles I could find used the windows version and there’s some differences).

Model vs View

I started my post-college career as a Microsoft Windows developer, building a visitor centre application for Scottish Nuclear’s “Come and See” program in 1995.  Microsoft’s Visual C++ and the MFC framework meant it was relatively easy to make an app “look and feel” like Windows.  You really had to go out of your way to make a really bad UI, but obviously that didn’t stop everyone.

My code back then wasn’t great.  Wasn’t the cleanest.  Didn’t have much attention lavished on its internal structure.

By 2000 I was a Java developer and developing client side apps for Windows was an exercise in frustration, so I welcomed the switch to serverside – servlets and JSP.  On that team we had front end people and designers to build the HTML and CSS, so I was able to concentrate on building a good model and controller layer.  This was the era of TDD and patterns, refactoring.  Complete focus on the structure of the code.  Beautiful on the inside was all I cared about.

Around 2006 I switched to Ruby and Rails, but still I had people to worry about the UI.  I could keep my head clear for refactoring, code smells, classes and methods and structure and not be worrying really about how the app looked.  This was immensely satisfying in the dayjobs, where the front end team could be relied upon to take care of stuff.  It was, however, immensely frustrating in personal side projects. Sure I could build a basic little app to store comics, or run a conference, but I lacked any of the skills to make it look good enough to release to the public.  I quickly gave up.

Then, in 2008, the iPhone.

A return to my days of Windows.  A standard platform look and feel.  An IDE that allowed one to make HIG compliant, clean UIs.,  Again you had to work hard to make something horrible, it was easy to make something look decent.  Satisfying.  My little home projects looked reasonable.  I didn’t feel like I needed a designer to do the front end stuff.

Now, looking at these three phases – Windows, web apps, iOS it strikes me that in each case I’m saying I don’t have to worry too much about the UI.  Either because the tools make it easy for me, or because someone else is worrying about it.  In all three cases I should be free to focus on the internal quality of my code.  To do the things I love, looking for places where code belongs elsewhere, or theres an abstraction that will clear up a ton of code (I’m much happier refactoring code than I am writing it :).

What I notice though is that even though the UI is “easy” (very simple little apps remember, I’m not saying all UI/UX work is easy, just that its easy to make something thats not horrible) having to write those classes at that level means I take my eye off the ball.  I sacrifice a lot of model-level awareness and attention because I’m building the app one ViewController at a time instead of thinking of a domain model.

Maybe I need to get back to server side development, or build command line apps.  🤔

 

 

Personal Failures and Resilience

Apologies for how rambly this post will likely be, but I’m resolved to try and write more and worry less about whether its good writing or not.  I’ve had a bit of a crash recently, and one of my realisations is that I essentially work at my job, do chores around the house and then “veg out” in front of TV or Xbox.  Thats it.  Just those three things.

I’m not sure when I stopped having hobbies, but it seems to me its been a while.

Actually I don’t even mean a hobby, I’m trying to call it creative relaxation instead of “hobby”, because a hobby seems to me a thing like building models, or playing golf, and those aren’t the kinds of thing I’m talking about. What I mean is that in my “time off” I am doing nothing creative or useful.  I’m not exercising, I’m not building or making or learning stuff, I’m simply vegetating in front of the TV.

This should be an easy problem to solve.  Go for a walk every saturday morning.  Sign up for a course every tuesday night.  But yet I find that I naturally rebel against structure and schedules.

Anything I decide to do on a scheduled basis I will find a way to screw up.  I have to skip this tuesday because Hope has a show or Jane has a class and so once I miss one, I have failed so I just give up.

It’s like giving up your web business the first time you have an outage instead of being proud of “4 9s” reliability.

Also, I realise I’m sort of blaming my family for making it difficult to carve out time for myself to do some creative relaxation, but in the end it’s nobody’s fault but mine.

When I used to travel I’d tell myself it will be nice to get away and have evenings to myself with nothing to do but work on some interesting coding project. Inevitably all I’d do is watch TV and sleep.

I think I hit rock bottom yesterday. Jane and Hope were in Edinburgh and Isaac was visiting a friend, I didn’t know for how long, all a bit vague. So I’m in the house, alone, with all the time to do something interesting. I told myself that I couldn’t start anything big or go anywhere cause Isaac could call for a lift home at any point. End result, between 2pm and 7pm I ate fried egg rolls for lunch, Domino’s for dinner and spent the rest of the time playing Xbox or watching Star Trek on Netflix. Thought about renting an actual interesting movie but decided not to as I was sure I’d just get interrupted.

I had 5 hours and I did nothing but burn time between eating bad food as some kind of “woo I’m alone!” treat. It wasn’t even a treat. The food didn’t make me feel happy, just the idea of eating bad food because nobody could stop me made me happy.

So what can I do? How can I motivate myself into a routine. How can I get a little exercise, or do something a little creative every day?

I don’t know any trick to it other than trying again and (most importantly) not getting discouraged if I miss a day.

So I’ve set up the Streaks app for the following:

1) complete my Apple Watch activity rings every day

2) 8000 steps a day, which is my current goal in Pedometer++ and I know I can hit it by doing an entirely reasonable amount of exercise.

3) don’t eat bad food.

4) write something every day.

I’m also trying to figure out whether to dust off my electric piano or get myself a guitar as both of those are things I have tried (and failed) to learn before. That will become number 5 once I figure out what I want to do.

2 exercise things, 2 creative things and 1 food reminder.

This is the first day (managed 12,000 steps) The key will be to see how resilient I will be in the face of inevitable failure.

micro.blog

I’m writing this all out here, mostly so I can point to it from a micro.blog post and ask for some suggestions.

What I Want

I like the idea that I post what I’m going to continue to call my ‘tweets’ to My Own Thing and that they are just mirrored into twitter (Someone Else’s Thing).  There’s some confusion there around replies.  If someone on twitter replies to my tweet and I go into twitter to reply back, thats not going to be on My Own Thing, but in general I like the idea of my posts, both long and short, being My Own Thing.

What I have

  • I have an existing blog, here, on WordPress.  Its available as both alancfrancis.com and alancfrancis.wordpress.com.
  • I have a twitter account @PossiblyAlan.  I haven’t switch micro.blog to mirror to it yet.
  • I have registered for micro.blog as acf.  I have a paid plan which gives me acf.micro.blog, which is not My Own Thing, its Manton’s Thing.
  • I have created a GitHub pages repo and sent micro.blog to mirror into it (though its not jekyll-configured yet).  So currently I post to Mantons Thing and then mirrored into My Own Thing.
  • I have the micro.blog apps for iOS and Mac, which can post to micro.blog or WordPress.
  • I have the WordPress iOS app for posting to WordPress.

Questions I Have

It seems like I should ditch the hosted micro.blog as it runs against the idea of posting to My Own Thing.  I’m currently just posting to Mantons Thing instead of Jack Dorsey’s Thing and then mirroring into Githubs Thing.

That means that I’d essentially just post to wordpress and have hit be mirrored into Mantons Thing which would then mirror it into Jack Dorsey’s Thing.

Does that then mean that all micro.blog would be is a way to put my WordPress posts into the micro.blog audience and the twitter audience?  I can’t see why I’d need the apps then?  They say they can post to WordPress, but I can already do that with more complete tools.  This feels like I must be missing something.

Maybe I’m confusing a bunch of use cases ?

Perhaps one use case is you stop using twitter, and you switch to using the micro.blog apps and a hosted micro.blog and you swap Jack’s Thing for Manton’s Thing, but you know you can get at Manton’s Thing via RSS or export it.  Thats one use case for someone, but not me as it’s still not My Own Thing, its just a safer and more open Someone Else’s Thing.

The other use case where I post to WordPress ( My Own Thing )  and just use a micro.blog username to consume the RSS and cross post to the micro.blog TL and the twitter TL is a separate thing that doesn’t require the micro.blog apps at all?

Assume I post direct to WordPress, then.  I am ignoring the micro.blog app and hosted solution and just posting to My Own Thing.  Do I keep posting short and long form posts to alancfrancis.com ?  Will micro.blog show short form posts inline and link to long form ones?  Maybe I should create a second WordPress blog micro.alancfrancis.com which is just the micro.blog?  That means its always ‘tweets’ and they can be duplicated into the micro.blog timeline and twitter, but it does mean its entirely separate from the main wordpress blog.

*sigh*

Anyway, analysis paralysis and thoughts welcomed.

UPDATE: I just cancelled my subscription.  The only story I could actually understand was the hosted one which mean I was just posting to Mantons’ Thing instead of Jack’s Thing and that didn’t seem worth the effort.  I’ll just keep tweeting on twitter and blogging here on WordPress.

 

I was looking for a job and then I found a job

Well.

Having written a couple of times about what kind of things I wanted and didn’t want to do, and having decided to really take my time an opportunity came along that ticked pretty much every box I had.

I won’t be starting right away.  I’m going to finish up my contract and LS work at the end of June, and then I promised myself and my family that I’d take all of July off.  Kids are on holiday so its a chance to spend some time together as a family.  Its also the anniversary of Jane’s accident so we’re not sure how that will affect us… whether we’ll want to go away or stay home.

But this post isn’t about that.  Its about the job that I’ll start formally on August 1st.

I’m absolutely delighted to say that I’ll be joining Bohemian Coding to work with the team on the award-winning Sketch.

So what kind of job is it?  How does it manage to tick my various boxes ?

My key goal was to find a place where I could parlay my “senior” skills in one area to allow me to be a junior in another, and I think I specifically mentioned Mac development as a thing I hadn’t done much of and would like to do more of.  Thats what I’m going to get at Bohemian.

The role isn’t quite defined yet, and that’s by design.  I’ve described the kind of work I do as the spaces in between the moving parts of a team.  Sometimes its oil to reduce friction, sometimes its glue to increase cohesion, but in both cases its moving through the people who do the real work and figuring out ways to make the whole better than the sum of its parts.  Thats the kind of thing I’m going to be doing with Bohemian.  Not really quite a project manager.  Not really quite a team lead.  Not even quite a coach. Luckily Bohemian doesn’t have job titles so I don’t need to even give it a name.

I’m going to be asking a lot of questions, trying to understand whats working and what isn’t, and how to help this amazing team be even better.  Thats my day job.  I couldn’t ask for a better one.  I’m also hoping that by being involved in the day to day operations of a Mac development team I get a chance to try a few small stories, or pair a little on some larger ones.

Bohemian is distributed by design, with people all over the world.  This means that the day to day practicalities of my job won’t change.  I keep my small office a couple of miles from the house.  I’m close to Jane’s work and the kids schools in case I’m needed (which I am more post-accident).

I’m glad I waited.  I’m glad I didn’t panic.  I’m glad I took the time to have a lot of conversations and be sure about what I was looking for.  I’m glad I didn’t go into a single interview desperate for a job at any cost.

I was looking for a job and then I found a job, but heaven knows I’ve never been less miserable.

 

 

 

Hunting High and Low

So while I figure out the longer term career stuff (conversations are ongoing) I thought I’d take the time to build a couple of apps I’ve had on my mind.  I’m procrastinating by writing, but also I’m trying to write more and this is whats on my mind.

I know what I should do is put Xcode away and try and think about what I want to build.  I should be making app definition statements (though I notice that idea is gone from the Apple developer site, but available in the wayback machine ) and thinking about designs and all that good stuff.  I should be way up high in the clouds, looking down at the landscape, trying to figure out if the app makes sense and how it might work.

What I’m doing instead is hacking on a model layer to support the first app I thought about building.  I’m down in the trenches building an engine in a framework that the app (and notification centre and the watch) can use.

This has the advantage that coding is something I’m good at, and product design isn’t.  It also has the advantage of the illusion of progress.  I feel like I’m busy making something.

Unfortunately without all that other stuff, I can’t really tell if I’m building the right model layer for the app.  I have a rough idea of the objects involved, and CRC lets me figure out pretty well the responsibilities of each in any given operation, but who knows if the operations make sense?  I can’t see enough to know if what I’m building makes sense in context.  I can’t see the wood for the trees.

I think I’m going to force myself to stop.  Just like the larger career questions, I don’t need to hurry.  I don’t need to demonstrate progress to anyone.  I can take my time and stay in the clouds where the view is better.

Know Thyself

One thing I’ve always been guilty of is honesty.

That might sound a bit weird, but essentially I am alway happy to be clear at what I’m not good at.  This is often interpreted as imposter syndrome, or typical scots self deprecation, but its not.  I’m also pretty clear on what I am good at.

I’ve been trying to find a nice clear way of summing it up, but I can’t really do better than “I’m a coach, not a manager” and like so much of the XP/Agile terminology, that can really confuse or irritate people, so I’ll try and explain.  This will certainly be rambly.  As Ron Jeffries has said “how do I know what I think until I hear what I say?

In the much maligned Myers-Briggs Type Indicator I come out consistently as INFP/ENFP, which is quite different from a lot of programmers who are often ISTJ/ESTJ.  I am intuitive.  I make a lot of leaps and guesses and many of them turn out right.  To quote Mr Jeffries again “I’m not smarter than other people, I just make mistakes faster“.  I try things.  I talk about how I feel about things, rather than how I think about them.  I worry about people.  The intangible is very important.

I like a tutorial rather than lecture setting when I’m teaching.  I’d prefer people to ask questions and see where the discussion goes, adjusting my answers to the same questions for different people.  Looking them in the eye and seeing if I’m making sense.  This jibes with using XP to build software.  Small steps, feedback informing the next steps.  Lectures feel too much like Waterfall and I suck at that.  If I have no immediate feedback I will overthink and worry and panic and never get anything concrete done.  There will be no software because I’m trying to make sure I get the design just right before I start,  There will be no lecture because I’ll rewrite and revisit the content over and over, aware I have to get it right before I start, rather than adjusting as I go.

I like short or multiple choice exams rather than essay questions, because I get bored planning an essay out and want to just write all the things I know and move on.

In many of my consulting engagements I have been glue, helping to bring disparate parts of an organisation together to share a single vision.  In others, I have been oil, providing a layer to ease the interface between parts that rub up against each other.

I’m a starter, not a finisher.

I don’t mean that I just want to have crazy ideas and not see them through, I mean that I enjoy being one of the guys running along behind your car, pushing, shouting, telling you whats worked on other cars, helping you get started on whatever journey you want to go on, then move on to the next car.  I like building teams that build software.

I feel naturally entrepreneurial, but my family responsibilities override that and keep me (rightly or wrongly) essentially risk-averse.

As a programmer I work best alone when in the early stages of a codebase.  I like to get something working in a hacky, spiky way, then refactor until its good enough to share.  I think thats a good model for the exploration phase of a project. Let individuals own a piece they’re playing with.   On more mature projects, during the expansion phase, safety is paramount and lots of pair programming and testing is a good way to spread that knowledge around.  (phase names courtesy of Kent Beck’s 3X theory)

The most productive I have ever felt is using IntelliJ to build Java code.  It perfectly fit my “just code it up till it works, then do the actual work of extracting and renaming and parameterising” mode.  Once you have the guts of the thing, thats the best time to start designing.  What makes sense here or there, is this thing a new object, how could these two similar bits be merged to eliminate duplication?  All these  questions are better answered once you have working software.  Then you’re making exactly the right design for the software you have.  Proper, reliable, natural refactoring tools entirely change the way you can write software.

I suck when I’m bored.

My first manager at Panasonic, Don Grant, once had me in a performance appraisal and said “I wish I could give you two marks for everything.  When you’re interested, you’re amazing.  When you’re not interested, you’re terrible“.  I was fresh out of college and horrified.  “Well“, he said, “its not necessarily a problem.  The question is are you only interested in doing things you’re good at?  Or are you only good at doing things that interest you?  If its the former, thats an issue for you.  If its the latter it’s just my job to keep giving you things that are interesting“.   Its definitely the latter.  I’ll have a go at anything as long as its caught my interest.  I might suck initially, but I’m good at figuring stuff out with limited information because of the aforementioned making mistakes fast.

I was the third independent signatory on the Agile Manifesto.  I was knee deep in XP for ObjectMentor when Agile became a thing, back in 2001 and as soon as Ward allowed people to sign up, I did.

My favourite thing I have ever achieved is bringing Zoe Keating to play at the Scottish Ruby Conference.  Twice.

I have nothing concrete to point to.  No big open source projects, no books written. My name is in a couple of the original XP books as a reviewer, but my one attempt to write a book for the prags failed because I’m an overthinker.

I’ve organised six Scottish Ruby Conferences and 4 NSScotland conference but I’ve only ever given two conference talks (one of them twice).  My entire career is based almost entirely on word of mouth recommendations.  “I worked with him and he added value”.

From one perspective I feel like thats what I’m proudest of.  It should count for the most.  From another it makes it hard in situations like now where I’m considering “cold calling” for something new.  If you don’t know me, or know someone who does, how can I convince you I’m a good hire?”.

I got into the ThoughtWorks interview because I put Kent Beck and Martin Fowler on my CV as references.  At one stage I listed a reference for every single job.  These days my CV is too full of jobs, so I just say “references available on request” and wonder who I’ll call if I get a request.

I don’t really have an ending to this.  I’ve just kind of run out of things to say.  I did mention I suck at planning and finishing.

 

Where do we go from here?

I will soon be made redundant from a job I’ve held for 6 years.  Thats the longest I’ve ever been anywhere.

The last time I found myself without a job, I was terrified.  How will I keep a roof over my family’s head?  What if I couldn’t ever find another job?  The fear of the unknown was enormous, mostly because the financial pressure felt crushing and imposter syndrome loomed large.  No-one will hire me because I have no idea what I’m doing.  Perhaps I should go talk to McDonalds.

This time round however, I find myself in the enviable position of having enough of a redundancy package to keep me afloat for 6-8 months.  If I find a job right away, thats a nice lump sum that I could do something useful with, either personally or socially, but if not, 6 months should be plenty of time to find something.  Anything.  So thats the financial fear taken care of.

And so we come, as we inevitably do, to imposter syndrome.  What am I worth?  The last time I did anything other than iOS development was about 10 years ago.  My Ruby/Rails skills are out of date, my Java is ancient history and my work consulting and training with XP/Agile process is almost certainly too old school.  I have, in 10 years buried in Apple tools and technologies, failed to keep up with pretty much anything else. The changes in web technologies, in process, in buzzwords and frameworks seem all too massive.

When I did C++ for money, I did Java for fun.  When I did Java for money, I did Ruby for fun.  When I did Ruby for money I did iOS for fun, and then I kind of stopped.  Family life meant there was little time for programming outside of work, so I stopped having an eye on the new things, and which of them might be interesting as a future direction.  Back then, each transition seemed obvious.  I knew what I was interested in before I had to look for a job doing it, and each time, because I was interested and made friends in that space, I didn’t have to look hard to find a place to do it for money.

This time though I find myself a little lost.

How can I find a job with skills so out of date and irrelevant ?  I don’t know any of this stuff?  I need to buy books on Elixir and Go and a 10 volume set of Javascript frameworks.

But wait, I know how to build good software.

I know how to build good software and I’ve done it in FORTRAN and C and C++ and Java and Ruby and Lotus Notes for goodness sake and C# and ObjectiveC and Swift.

I know how to build good software and I’ve done it with UML and XP and DDD and Scrum and using Jira and Pivotal Tracker and Rational Rose and index cards.

I know how to build good software and I’ve done it for banks and startups and research labs and electrical retailers and power stations and Coca Cola and telecoms.

I know how to build good software in anything.

So.  The imposter syndrome is kicked into touch this time too.

I feel strong.  I feel ready.  I have no idea where I’m going or what I’m going to do next, but thats a blessing, not a curse.

It might, as I’ve said, be lovely to spend the next 6 months as a junior Mac developer or Project Manager or devops engineer and be the worst guy in the band.  To focus on the small and the specific.  It might also be lovely to finally take a step up into technical leadership across a small organisation.  To think bigger and work harder out of my comfort zone.

Its a magical world, Hobbes ol’ buddy.  Let’s go exploring.