Why you should become a “domain-driven” computer scientist
How focusing on a domain-of-interest can make you a better, happier, and more successful computer scientist
There are several different approaches someone could take to learn or build a career out of computer science. For example, you can focus on software engineering, data science, information systems, etc. You can also work in different environments such as an academic, industry, or startup environment. However, I have noticed two general approaches computer scientists can take: a “technology-driven” or “domain-driven” approach. Preferably a strong merge between the two approaches is ideal, but for this blog post I will mainly discuss the latter “domain-driven” approach and what this could mean to you. As a computational biologist PhD at Harvard Medical School focused on using computer science to generate insights in health and biology, I will bring personal examples to what a domain-driven career can look like. By the end, I hope that I can convince you to become more domain-driven in your computer science education and/or career and how this could possibly make computer science more enjoyable for you.
Technology-driven vs. Domain-driven
The “technology-driven” approach simply means that the focus of your education or career is on learning or developing new technologies with minor regard to the domain or area of application (or having the consideration of the domain delegated to someone else like a subject-matter expert). For web developers, this could mean that the majority of education is placed in learning new web frameworks. For data scientists, this could mean a focus on learning new scientific computing libraries or statistical methods.
The standard technology-driven approach to computer science is the common approach by computer scientists, especially students. This is not to say that this approach is wrong; people can have genuine interests in the practice of learning technologies and building new ones without much regard to the domain. In fact, there is a need for people who specialize in technology-driven areas to develop new theories or software that is important for a wide area of application (such as many open-source projects or theoretical research in academia).
However, there is currently becoming a stronger demand for domain-driven computer scientists in the market. Rather than solely putting attention on learning new technologies, the focus instead shifts to gaining expertise in a domain-of-interest. The demand mainly comes from how domain-driven computer scientists are exceptionally well at understanding which computational work is valuable (as well as having better interdisciplinary communication, domain-specific problem solving, etc.). Becoming domain-driven is not only about gaining expertise in a domain (albeit a big part) but also on better understanding which technologies and methods are most applicable for your domain thereby becoming more effective in knowing what technologies to learn or apply.
Examples of domain-driven computer science
Let’s provide specific examples on what it means to be domain-driven, first starting with a personal example.
I started computer science “technology-driven” by becoming a software engineer and specifically focusing on learning full-stack web technologies. After asking myself how I wanted to provide value using computer science, I decided that I wanted to better push our understanding on how biology works especially in regards to disease; this was the domain I wanted to apply myself towards. After this, my approach in computer science then shifted from technology-driven to domain-driven. My spare time shifted from learning new web technologies and working on side projects to learning everything I could about biology and bioinformatics. My work experiences shifted from software engineering internships to performing academic research in bioinformatics labs and interning at a pharmaceutical company. My undergraduate coursework shifted from taking extra courses in application development to courses in biology and biostatistics instead. And lastly, my post-undergraduate job shifted from a planned software engineering position to a PhD in bioinformatics at a medical school, and I couldn’t be happier. Becoming domain-driven completely changes the approach that someone can take in computer science and could possibly provide more fulfillment and passion in your career by wholeheartedly committing yourself to a real-world discipline.
For example, perhaps as a data scientist you have a passion in social media, then focusing on learning about social media and the common statistical methods used in social media data analytics would be domain-driven approach. There are other domains that computer science can be applied to such as physics, chemistry, cyber security, gaming and graphics, finance, e-commerce, and of course many more.
Why take the domain-driven approach
Becoming domain-driven could potentially add more time and effort on an already strenuous computer science curriculum, so why is it still worth it to invest in this approach? Because this approach could be critical for your computer science career…
It helps you become a more ambitious and problem-driven programmer. At some point, continuing to learn new technologies or working in jobs without much interest in the domain-of-application can make programming feel stale over time. The excitement of novelty when initially learning computer science can fade away as you progress in your education and career. Becoming interested and invested in the domain you want to contribute to will add a deeper context to programming that will keep reinvigorating you throughout your career. The topics you can study also expands from just computer science to including the domain-of-interest, thereby never running out of interesting things to learn. Additionally, the topics involving how computer science and the domain-of-interest integrates with each other adds even another layer of excitement; there will be specific methods, tools, and reoccurring challenges on how computer science is applied to your domain.
It helps you have clearer direction on what technologies to learn. The choice of what technologies to learn or use is not just influenced by personal interest or work responsibilities, but rather on what technologies are needed to solve a problem of interest in your domain. Therefore you gain more clarity in what technologies you need to learn to become most effective.
It helps you land more jobs especially in specialized areas. As mentioned previously, there is a large demand for computer scientist with knowledge in the domain-of-interest especially in specialized areas. Even making a switch to a different domain would not be as problematic since previous experience in domain-driven work improves your general problem-solving skills that are valuable for any domain.
Take the initiative to start
By becoming domain-driven, you are inherently willing to pursue an interdisciplinary field between computer science and some other domain. Rather than solely focusing on computer science during college and choosing a domain based on the company you end up working for (or the internships you’ve done), I believe that a more proactive approach to contributing to an area you’re passionate about is to learn a domain alongside computer science during your education. Sometimes there are college programs that specialize in an interdisciplinary field of interest. You may need to taste several different fields and how they integrate with computer science to have the most informed decision before committing to a domain.
This may take a bit of time away from your computer science education, but it is definitely worth the investment. Finding a domain that you are passionate about can make you a better and more fulfilled computer scientist. After all, the field of computer science was inherently designed to be applied to other domains to solve real-world problems, so it is logical that learning a domain could improve your career outlook.
For more content like this, feel free to follow me on Twitter @BasheerBecerra. You may also DM me if you have any questions about the content!
Thank you for reading! ~Basheer Becerra