Theory vs. practice and my first days as a developer

1 September 2013

This has been the start of my first week as a Software Engineer. I work at a real company doing things with code that people actually use. It is awesome, terrifying, thrilling, challenging, and hands down the coolest thing I’ve ever done. I’ve only been poking around in the code base for a few hours a day, but I’ve come to realize that I am going to learn more at this job than I expected.

At my first job, I expected to become more proficient at Ruby, Rails, and JavaScript (among other things). I didn’t expect to see languages and frameworks being used in ways I had never conceived of. I didn’t expect to be working with such a complex app and equally complex models. Models that actually, truly model the real objects they’re representing. It’s a big code base with complex database models, but it’s big and complicated because the problem it solves is also big and complicated. The relationships represented in this database, while confusing to a newcomer, make sense after you have the big picture.

This contrasts greatly with my previous (albeit limited) experience developing web apps. At Dev Bootcamp, there is a lot of theory. They did a really good job about instilling that theory in us as practice. Object-oriented design and the “Rails way” weren’t just textbook theories, they were actual ground rules for developing applications. I had never developed an app or worked with an app that veered too far from those principles. While my implementations of OO principles and the Rails way may not have been perfect, they were pretty damn good considering that I’d only been doing it for a few months. The apps we built were not overly complicated, nor were we proficient enough with the tools we were using to efficiently and expertly use them.

In short, the apps we built at Dev Bootcamp were sheltered from the “real” world of users, continued development, and maintenance. Partly because of our skill level and partly because they’re not designed for mass-consumption. Legacy code wasn’t a thing we had to deal with because our oldest projects were only ever 9 days old. If we ran into a problem we could always drop the database and start over. We could hack together a provisional solution for something until we figured something else out because deployment didn’t impact users (we had none). I encouraged my team to consider our data and dummy users as real objects that had to survive migrations, refactoring, and complete code base changes. But, I would be lying if I said that we never succumbed to temptation and dropped the database anyways. So I won’t lie: we did it. We rake db:drop’ed it like it was on fire.

And now, I work with an app that’s real. It has real users (lots of them), real data (tons of it), solves real problems in an elegant manner, and it actually helps people. The little things I do to our code base will, in some small way, impact the education of the app’s users.

So it’s only the end of my third day. I haven’t pushed any changes to the app (yet). I’ve poked around the API, played around with dummy data, and familiarized myself with the app.

Lots of the theory that we tried to practice at Dev Bootcamp has suddenly become real for me. The practice of principles is never the same as the theory, but being an academic, I’m always inclined to hope that theory and practice are mirrors of one another. In the “real” developing world, they’re not. And that’s making me a better programmer. It’s making me more inventive, it’s making me question things more, and it’s making me more comfortable with the things I don’t know.