This summer, I started my first engineering internship at Percolate, tasked with building the mobile automation framework for our iOS and Android apps. As a double-major in computer science and philosophy, I’m struck every day by how my work reflects what I’ve been learning, both directly and indirectly. I came to realize that the two areas of study (one obvious, one not-so-obvious) have serious implications on how I think about what I do.

As far as computer science goes, my internship looks nothing like the projects I submit to my professors. I don’t spend my days dealing with linked lists and binary trees, and I haven’t had to solve any of the problems I face at work with greedy algorithms or dynamic programming. In other words, it’s not a quick one-to-one application of the typically theoretical subject matter within a computer science major. Philosophy’s even more of a stretch—shockingly enough, my work at Percolate rarely involves lengthy conversations about Nietzsche’s theory of perspectivism or dissections of Kant’s argument for synthetic a priori judgments.

Where they do come into play is the thought process for writing code. Computer science explicitly teaches you to think about how to structure modular, scalable projects that follow a specific logic and encompass edge cases—in my role developing tests and a broader framework for creating them, that’s key. Code should be organized, easy to understand, and reusable, particularly in a framework.

While my classes at Columbia never even touched on software engineering on a practical level, they did instill the fundamental approaches that I use daily. For my project this summer, each activity in a Percolate mobile application (for instance, posting to social media in the Community Manager app or taking a photo in Photographer) gets its own class, populated with the elements and functions that consolidate processes within the activity, and tests interact with the elements by accessing their classes. Everything is built into simple, logical components.

Philosophy, on the other hand, enhances the kind of thinking required to be clear, analytical, and concise. Similar to addressing engineering problems, you break down vast, intractable problems into smaller parts and develop methodical solutions, typically working on a level of abstraction. Beyond that, you constantly need to question the most basic assumptions to build better ones—a practice that’s pretty great for tech, too. Even the basis for Percolate comes from the idea that the way that people have approached marketing, what’s been accepted as the only way, can be much, much better, and that outlook impacts every feature we ship.

A recent Forbes article, That ‘Useless’ Liberal Arts Degree Has Become Tech’s Hottest Ticket, proposed that Stewart Butterfield, who founded Slack and majored in philosophy, needed his degree to create a successful product, noting, “Hard-core engineers have been trying to build knowledge-management software for at least 15 years. Most of their approaches are so cumbersome that corporate users can’t wait to quit. Slack makes everything simple.… Considering that Butterfield spent his early 20s trying to make sense of Wittgenstein’s writings, sorting out corporate knowledge might seem simple.”

In my experience, there’s a surprisingly strong parallel between building and testing arguments and doing the same for products. Combining the skills taught in a technical major with the mode of thinking developed in a liberal arts one is powerful—and, in an era of thoughtful technology companies like Percolate, it makes sense.