Actually Throwing One Away
Most programmers have heard about the idea that the first version of any system design will, consciously or not, be thrown away, once the lessons of the first system have been learned through construction. I've been going through that particular process lately and I'm going to put down some of the internal and external observations I've made throughout the first part of a multi-week process.
In the first iteration of this particular project, I was just getting back into Ruby, and I knew this project was going to be primarily a learning experience. However, once the code actually ended up in production use, I was (of course) reluctant to go and rework the internal structure for fear of missing some vital encapsulated knowledge from the first iteration, as I did discover a lot when working on it. This was my first fear.
I had come back to Ruby primarily out of my disillusionment with developing in PHP. While the tools available to PHP programmers to test & analyze code were getting more and more sophisticated with each iteration, I always found myself writing more lines of code to support tests than the lines of actual code tests. So when I came back to Ruby I discovered tools like RSpec, reek, rcov, and Cucumber, and I went nuts. After a while, though, getting 100% coverage and low reek scores were not actually improving the structure of my code -- only the superficial parts of it. Too-long methods, tight coupling between components, and other signs of poor design and unmaintainability started to creep in, and I became scared to touch this fragile structure I've built, for fear of it all coming crumbling down and necessitating that rebuild anyay.
In between the time of the first commit and the moment I found a rewrite necessary, I had also learned a great deal about the tools I was using. After a year, my tests were getting tighter, my design skills were improving, I was decoupling where necessary, and I understood more of the performance issues that plague Ruby software in particular. The new code I had put into this project was shiny and wonderful in comparison to the bit-rot it was sitting next to. Eventually, when a particular feature started to become too problematic when using this older code, I decided to get over my fears and declare that enough was enough. I needed a rewrite.
When I decided to rework this project, I started with a small part I could easily extract out.
See what else is here...
- Jasmine and Vim, a happy pairing
- Fast JavaScript and CoffeeScript Unit Testing with jasmine-headless-webkit
- Actually Throwing One Away
- Slice and dice Cucumber run-times
- Site migrated and future plans
- Bash magic: convert a high-res PNG to a small PDF with convert and sam2p
- Bash magic: Get the chronological Originals contents from an iPhoto library that will fit on a CD
- What's the deal with "johncoswell"?
- Flex 3: Better SWF Embedding
- Ustreaming your desktop on Ubuntu Intrepid Ibex
- Mom's Delicious Pizza Dough Recipe
- LVPE: Avidemux and JPEG Photo AVI files not working?
- Guest strip!
- Dawn's Dictionary Drama is back!
- Video: The DC Conspiracy at Beyond Comics for Free Comic Book Day
- Joining the cartoon party: Myself as a Teen
- Quick Drying Paint: Profiling Inkscape using Valgrind
- LVPE: Encoding High Bitrate 24p Footage for DVD
- LVPE: Rendering and Exporting Video & Audio from Cinelerra
- LVPE: Processing a Bunch of Photos for Cinelerra
- LVPE: Color Correction in Cinelerra
- LVPE: Capturing & Deinterlacing DV Footage
- A Linux Video Production Experience
- Tons of .msp files in C:\Windows\Installer?
- A Moment of Inkscape Screenshots!
- The Amelia Rules! Charity Auction this Veterans Day
- PayPal and Visa: One card per account, ever?
- A Moment of Clarity Volume 2 Chapter 1 Reviewed!
- The Inkscape Perfect-Bound Cover Template Generator
- Freedom Dance wins in the 2007 Peer Awards!
- Untwisting the Spine of Perfect-Bound Books
- Small Press Expo 2007
- AMoC in Prismacolors and Brush Pens!
- Xinerama/TwinView + Single Screen + GTK = FAIL
- Baltimore Comic-Con
- ImageMagick: A simple, and kind of overkill, way to resize and pad an image
- Comics and Time Management
- Practical Inkscape for Comic Artists: The Right-Handed Illustration Keyboard Layout
- Red Hat High 2007 Update
- Cinelerra DV Rendering Problems? Try JPEG Photo
- Red Hat High 2007
- Freedom Dance!!
- One Reason Why Drawing Comics in Vector is Better Than in Bitmap
- Ogg Theora/Vorbis Conversion Information
- Linux iPod Video Conversion Information
- Libre Graphics Meeting 2007 - Creating Comics in Inkscape Presentation Video
- More Cinelerra and Mencoder fun!
- Libre Graphics Meeting 2007 - The Coswell Productions Report
- Libre Graphics Meeting 2007 - Wallpapers and Shirts!
- Indy Comic Review reviews A Moment of Clarity Volume 1
- Libre Graphics Meeting 2007
- Comics in Inkscape 0.45 with John Bintz
- Cinelerra Hints for Rendering
- Automating WinTV-PVR/ivtv captures in Ubuntu Edgy
- Inkscape 0.45 About Screen Content Entry
- Staircase Visualization for Volume 2
- Digital Minicomic Production - Using Free Software to Do Inexpensive Digital Paste-Up
- Blue Dot Television Commercial - A New Face
- Marylanders in Snow (Animation)
- Slippie Slide
- Blue Dot Television Commercial - Warm Up with Blue Dot
- TP Monitor
- Virus