Senior software engineer. Continuous learner. Educator.
I write code for a living. You might say I’m a professional software engineer, but really software engineering is much more than just a profession — it’s a lifestyle. The hoodies, the ping pong, the endless snacks and soda… it’s all true. And yet, as rewarding as this field can be, I have a confession to make:
Sometimes I wish I never learned to code.
Ever since I started learning to code, browsing the web has never been the same. No longer can I simply accept the errors I encounter on other sites as I use them. Whenever something strange happens, curiosity gets the best of me, and I have to open up the browser’s developer tools and start debugging.
Please don’t use Comic Sans
If you think those browsing habits are bad, just wait until you hear about the kinds of conversations I have with other software engineers. As a whole, engineers tend to be fairly opinionated. Pedantry runs in our blood. Do you indent your code using spaces or tabs? Are you more of a Vim or an Emacs fan? Chrome or Firefox?
In wiser circles, these conversations will ultimately lead to someone asking “Does it really matter?”. Bikeshedding is a real phenomenon and needs to be carefully kept in check.
As more and more companies adopt agile methodologies, from time to time we have to weigh the comparative trade-offs between using Waterfall, Scrum, or Kanban development lifecycles. We all enjoy bashing on Waterfall as an artifact of the past used by old-fashioned and inefficient corporations. However, the Scrum versus Kanban war rages on.
“You’re a believer in Scrum, you say? I’ll bet you love your artificial time boxes that cause hurried code to be imprudently shipped in order to meet an imaginary deadline before the sprint ends.”
Speaking of agile, what is a story point, anyway? A measure of time? Effort? Complexity? Risk? All of the above? You and I could likely spend hours debating the merits of each definition without coming to a mutual understanding.
At some point, this may devolve into more bikeshedding, but being able to understand one another and communicate effectively is critical, and that includes having a shared understanding of the terms we use throughout the day.
Frontend development opens up a whole other world of talking points, most notably: “When are we finally going to drop support for Internet Explorer?” I have to walk the fine line between hating on Internet Explorer and wanting to drop it and simultaneously understanding the need to support it for those of our customers that are stuck using it. (Those poor unfortunate souls…)
The outside observer probably thinks I’m making stuff up when I tell them I spent my day configuring Webpack, Rollup, and Babel in order to use the latest ES6+ syntax. Or that Angular and AngularJS are two vastly different things. Or that LitElement, Svelte, and Stencil seem like promising web component solutions. Or that Deno could be the new Node.
When someone asks me what I do for work, it’s hard to respond without spewing acronyms at them: “I usually work with frontend technologies, so things like HTML, CSS, and JS. Occasionally I have to use PHP or SQL, but I’m more of a MEAN/MERN stack developer. Sometimes I use PaaS technologies like Heroku, but other times I’m using IaaS providers like AWS or GCP.”
In my free time, I read books with really dry titles like Clean Code, Refactoring, and Domain-Driven Design. When I’m not reading a textbook, I’m reading articles online that often contain questionable hit-and-miss advice or watching someone’s coding tutorial. Podcasts about programming are even more enjoyable, because what could be better than listening to someone talk about code on my commute to work where I then get to spend the day also talking about code?
In addition to consuming content online, software engineers also spend a good portion of their personal life creating content online. My personal hobby is building simple apps and games no one will ever see, like Crossy Block, this Flappy Bird knock-off, or this corporate BS generator. Is this a waste of time? Maybe. But does it bring people joy for about two minutes when they see these apps? Absolutely.
Corporate BS Generator app
The Truth Is…
And yet, the truth is, coding gives me an opportunity to create and to be creative. It helps me bring ideas to life, almost quite literally building something out of nothing. Software engineering allows me to solve interesting and difficult challenges, ideally to make people’s lives easier in some small way. My profession helps me stretch and grow intellectually. I have the opportunity to be continuously learning, and I even get paid to do so!
The truth is, I love to code.