An Architect's View

CFML, Clojure, Software Design, Frameworks and more...

An Architect's View

How I got started in ColdFusion

August 2, 2011 ·

I took a rare vacation day yesterday - and was truly away from the computer all day - so when I caught up with my daily Refynr feed, I found I'd missed How I Got Started in ColdFusion Day. Since I'm probably the odd one out, based on the stories I've been reading on various blogs this morning, I figured I'd throw my story out there, a day late...

Short version: I was working at Macromedia when they bought Allaire. I created an engineering team to rebuild the e-commerce parts of the site, expecting to use Java / JSP on the newly acquired JRun application server. We were told by "the management" that ColdFusion was the strategic product in the acquisition and we were to learn CFML and use that instead. That was 2001.

Long version: Many folks telling their "How I Got Started..." stories have begun with their computing history and since I'm an old fart, I figured I would at least summarize the decades before I was exposed to ColdFusion. I got started with programmable calculators back in 1970's when I was a young teenager, first with the Sinclair Cambridge Programmable and then the Texas Instruments' TI-59. My school offered an elective in computer programming where you wrote your Algol-60 program on a coding sheet and mailed it off to a local technical college where data entry folks typed it in and got it running and then mailed you back a print out of the results a week later. I picked my university based on which one had the best computing facilities - Surrey University had multiple networked Prime minicomputers and became one of the test sites for their brand new Unix-based operating system Primix (Primos 19). The Math Department had its own computing lab with a Commodore Pet and lots of green screen terminals connected to the minicomputers across campus. I spent a lot of time in there. I learned BASIC and Pascal and a little assembler as part of my courses, and taught myself about a dozen programming languages over the next four years.

My university had a placement year program where you got a job for the third year of your degree and reports from your managers contributed to your final degree. I worked at Sun Alliance writing COBOL and IBM 8100 assembler. I worked on a hierarchical database engine, writing the job dispatcher, helping with the two-level locking manager and designing and implementing a recursive tree-walking routine - all in assmbler. I wrote a network adaptor application that connected their 8100 minicomputers and their 370 mainframes, using IBM's SNA network protocol (that was fun because IBM said it was impossible - so I had to write a disassembler in order to figure out how some of the 8100 O/S worked). Back to Surrey and my final year project was to develop an APL interpreter while a friend of mine developed a Lisp interpreter - my first exposure to functional programming.

I stayed on to do PhD-level research into the design and implementation of functional programming languages. My supervisor was interested in the theory of functional programming but I was more interested in implementation and spent a lot of time investigating time-distributed garbage collection algorithms and language expressiveness (for example: doing type inference in a "typeless" language to improve performance; designing and implementing structural type matching). My supervisor and I disagreed so much on the direction of my research that I never wrote up my thesis but the work led to my first job: a small company that specialized in compilers and interpreters!

I worked for Knowledge Software Ltd for four years, developing a portable Virtual Machine in C for the UCSD p-System, porting the Microfocus COBOL compiler to the Sun 4 chipset (aka SPARC) and the Motorola 88000, co-developing one of the first ANSI-validated C compilers and doing a lot of work on static code analysis and optimization. We used a lot of C and various assembler languages. My next job was to write a compiler for actuarial formulae down to parallel C code for farms of Inmos Transputer chips. Then I moved on to Programming Research who had purchased the front end of the C compiler I'd worked on at Knowledge Software, so I worked on enhancing that and also developed their first C++ source code analyzer. It was during that time (1992 onward) that I joined the ANSI X3J16 C++ Standards Committee and represented the UK on the ISO committee. That decade saw OO go mainstream and FP (functional programming) stay resolutely on the sidelines.

I left PR:QA and became a freelance C++ developer, working on the world's first pay-as-you-go cell phone system at Vodafone, and then starting to do web development in 1997 (in C++, using Broadvision). That was also the year I picked up Java. I started with 1.0 and switched to 1.1 when that was released a month later! Fourteen years later, we have Java 7.

In 1999, I moved to California, still doing web development with Java and C++, and a year later took a job as Senior Architect for the IT Division at Macromedia (who I really hadn't heard of before then). In 2001, they bought Allaire, and my new team of Java and C++ developers cross-trained to this strange, tag-based language that was being rewritten to run on the JVM and was just starting to get object-like features. Over the next decade I wrote a lot of OO CFML code and contributed to a lot of open source projects. After Adobe bought Macromedia, I worked in the hosted services group for a year but there was so much push back against ColdFusion from the deeply entrenched Java developers that I quit in 2007 and went freelance again, this time as a CFML developer!

I worked at Broadchoice for a year, doing Flex and Groovy work, alongside CFML. In 2009 I joined Railo and started consulting on a project that allowed me to add Scala to a CFML project. In 2010, I started learning Clojure, to use that alongside CFML and in September I took on a full-time role as Lead Developer at World Singles, where I'd been consulting on and off since mid-2009. We have a large ColdBox / ColdSpring / Reactor application that is slowly moving away from ColdBox and Reactor, as we simplify and reorganize and use more and more Clojure alongside CFML.

With four years of hybrid CFML / {insert other language here} projects under my belt, I expect that to be my preferred combination for the foreseeable future, leveraging the rapid application development capabilities of CFML for the View-Controller portion of my applications, supported by a Model that blends cfscript-based components alongside other JVM languages for heavy lifting or specialized data processing (mostly Clojure, I expect, since that offers concise, thread-safe code that is especially suited to data processing).

Tags: coldfusion · personal

4 responses

  • 1 Jas Panesar // Aug 2, 2011 at 10:59 AM

    Never too late. Thanks for sharing your story Sean.

    It wasn't until I read your post that I understood why I put my own history with computing before speaking about CF.

    It goes a long way to show that there's a huge variety of folks in the CFML world that came from hugely educated and experienced backgrounds, as well as the self taught developers who are doing remarkable things.
  • 2 billythekid // Aug 2, 2011 at 11:12 AM

    Heh, thank goodness for short versions!

    Only joking. That's brilliant. The early days of computing are so interesting to me. I'm only just getting into it these days when what seems like all the hard work is done. The standards are written, the punchcards binned. Don't know we're born really.

    Real interesting post!
  • 3 Mingo Hagen // Aug 2, 2011 at 1:46 PM

    Hi Sean,

    Thank you for sharing such a great story! What are your thoughts on the intellectual challenges comparing writing recursive trees in assembly vs web development in CFML?
  • 4 Sean Corfield // Aug 2, 2011 at 7:13 PM

    @Mingo, I think a lot of the "old-school" computing stuff relied a lot more on Comp Sci theory / knowledge than most (web) application development requires these days - but there's still a lot of systems programming being done (compilers, virtual machines, operating systems) as well as the extremely high-scale end of the market (massive data storage / data analytics).

    With the best will in the world, I'd hope no one would disagree that the vast majority of web applications being built are pretty much CRUD / form-based stuff but we all enjoy something more challenging, regardless of what language we use :)