I just came off a day at work, a week at work, that was legendary in frustration and triumph. I'm pretty sure that most of the details of what I struggled through, heroically, are confidential at worst and tangential to an NDA at best, so I'll gloss over things in generic but jargon laden terms.
As most of you probably know, when left to my own devices for a software project my first thought is usually to use the python programming language. I find that most of the software that isn't already written out there requires a higher order of thought, or a higher level of abstraction to write comprehensively and with some level of correctness. If your software is something like 7 years old, then maybe "dirtier" languages (and by that I mean languages that have side effects, force you to get in the trenches, and have libraries where you must initialize externs or globals, or prepare inputs, strip outputs, call functions in a certain order beyond the normal init and shutdown are concerned, know idioms in order to accomplish simple tasks, etc.) are going to work just as well. But I try to pick the right tool for the job, and it just so happens that a lot of times my job fits Python pretty well.
My work environment is both colorful and diverse in personality and language of choice. Me, an italian-american redneck in training (Greg), and two frenchmen (Cheech and Nico) have been battling it out with editors, compilers, virtual machines, interpreters, kernels, packaging, and just plain old getting things done for weeks now. We started this endeavor with an idea, a proof of concept, and a 2 year history of knowing that both of them worked in practice. What we've done since April is plain and simple mercenary programming, pounding out a system built from the ground up to work with reliability, stability, and extensibility in mind, delicately balancing academic techno-mathematical purity with necessary engineering tradeoffs so as not to wind up with a beautiful piece of slow code 8 months too late. And this week, we finally landed on the moon.
Our 4-part architecture fit our 4-man team quite well. Greg (a Java guy) tackled the part where we knew Java had been used historically, and knew that Java was a good fit. I (a Python and generic 'systems' guy) tackled the tough integration and communication glue problem. Our pieces are designed to dance delicately in some geeky wet-dream of function and semantic decoupling, and by now they are pretty damned good at it. But we got communication and logistics problems out of the way a long time ago. I spent over a week working on a mysterious bug in a library we were using that caused segfaults (of all things) from python code from only one linux distribution (of 4 that I surveyed). But we had it pretty much down and functional about a month ago. But the past two weeks have been something else altogether.
We were tasked with porting old working code from the legacy "demo" days to the new API we had been developing. No more exceptions, cheap 3 line profiling, or even sane string types for us, oh no. The new task for this pair of mercenaries was untangling a twisted web of casts and somehow building something connection based on top of a broadcast/receive foundation that was prone to crumbling and still very much in flux. And for almost 3 weeks, armed only with our confusion, gdb, and our constant badgering of cheech, we struggled (off and on, occasionally revisiting the sanity of our self-architectured products and cleaning them, perfecting them) to make this work. And today; today, our efforts were finally vindicated.
Greg, always colorful, had many epithets locked and loaded to describe the week. It was pretty exhausting mentally, but we're done. Kinda. We have the smallest, working system that enables us to move forward. Smallest there is actually quite important: there are two types of large software systems, those that evolve from small systems and those that don't work. We plan on making ours work.