Sign inGet started
← Back to all guides

What is exploratory programming?

By Nick Barth

Updated on June 4, 2024

Exploratory programming, a concept rooted in the early days of artificial intelligence research, is a distinct programming paradigm designed for exploration and experimentation. Unlike traditional software engineering methodologies, it allows for the evolution of the end goal throughout the process.

Though a lesser-known term in the world of data science, you can trace its rise back to the early days of artificial intelligence, precisely in 1956. As the need for a distinction between building and exploring within computer science became evident, Beau Shiel, a manager at Xerox’s AI Systems, coined the term 'exploratory programming'.

In 1983, Shiel put forth the term in his paper titled 'Power Tools for Programmers', encapsulating his experiences working with uncertain outcomes and undefined steps in AI, much like the situation many data teams face today. Shiel's revolutionary idea was the spark that ignited the rise of data science, heralding the era of the spreadsheet, and shaping the role of the modern data analyst. His very definition of exploratory programming, "the conscious intertwining of system design and implementation," has become foundational in the field.

Building on this, Mary Beth Kery and Brad A. Myers from Carnegie Mellon University's Human–Computer Interaction Institute proposed two key features of exploratory programming in their 2017 paper 'Exploring Exploratory Programming':

  1. Writing code for the purpose of prototyping or experimenting
  2. Flexibility in the end goal of an analysis/project

These are universal experiences for data teams who often have to delve into unchartered territories without a definitive goal in mind.

This story of exploratory programming then brings us to the present day. The ethos of exploratory programming as we know it today is grounded in five key characteristics:

1. Exploration use cases

Exploration is crucial when venturing into uncharted territories, such as data analysis or the development of a machine learning model. By embracing exploration, we open ourselves up to new possibilities and opportunities for growth. It allows us to delve deeper into the unknown, uncovering valuable insights and pushing the boundaries of what is possible.

In the realm of data analysis, exploration enables us to discover hidden patterns, trends, and correlations that can lead to actionable insights. It allows us to ask the right questions, test hypotheses, and uncover meaningful connections within the data. Without exploration, we may miss out on valuable information that could potentially drive innovation and decision-making.

Similarly, in the field of developing machine learning models, exploration plays a vital role. It involves experimenting with different algorithms, parameters, and approaches to find the most effective solution. Through exploration, we can fine-tune our models, optimize their performance, and uncover novel techniques that enhance accuracy and efficiency.

In summary, the need for exploration stems from the recognition that there is always more to discover and learn. It fuels our curiosity and drives us to push beyond the boundaries of what is known. By embracing exploration, we can unlock new insights, drive innovation, and make significant advancements in the fields of data analysis and machine learning.

2. Tradeoffs in code quality

When considering tradeoffs in code quality, the primary emphasis is on the speed of obtaining insights rather than refining the code itself. This means that the priority is to quickly generate results and gain valuable insights, even if it means sacrificing some aspects of code quality or elegance.

For example, in data analysis or machine learning projects, the focus may be on rapidly prototyping and iterating models to extract meaningful insights from large datasets. This could involve using less optimized code or taking shortcuts in order to expedite the development process and obtain results faster.

Another example is in the context of software development for startups or time-sensitive projects. The goal may be to deliver a functional product quickly, even if it means temporarily compromising on certain aspects of code quality such as code readability or maintainability. This approach allows for faster feedback and iteration cycles, enabling the team to respond more effectively to changing requirements or market conditions.

It is important to note that while tradeoffs in code quality can be acceptable in certain situations, it is still crucial to maintain a balance and revisit the code quality aspects as the project progresses. As the system matures or the project transitions into a different phase, it becomes necessary to invest time and effort in refining the code to improve its maintainability, scalability, and overall quality.

In summary, tradeoffs in code quality often arise when the focus is on quickly obtaining insights or delivering a functional product. While these tradeoffs can be acceptable in certain contexts, it is essential to strike a balance and periodically revisit code quality to ensure long-term sustainability and maintainability.

3. Ease of exploration

One factor that can significantly impact the time spent on exploration is the difficulty or ease of exploration. The tools and resources available to you play a crucial role in shaping your exploration experience. 

For example, if you have access to advanced technologies and comprehensive databases, it becomes easier to gather relevant information and insights. This can streamline your exploration process and save you time. On the other hand, if you lack the necessary tools or rely on outdated resources, exploration can become more challenging and time-consuming.

Furthermore, the complexity of the subject being explored also influences how difficult exploration will be. Some topics may have vast amounts of information available, requiring more time to sift through and analyze. Conversely, simpler subjects may be explored relatively quickly.

In summary, the availability of tools, resources, and the complexity of the subject all contribute to the time spent on exploration. By utilizing advanced tools and focusing on relevant information, you can optimize your exploration process and make the most efficient use of your time.

4. Exploration processes are non-linear

The exploration process in data analysis is seldom a straightforward, linear path. It involves various stages of modifications, iterations, and revisions as a means to uncover insights and patterns. These iterations are crucial for refining the analysis and gaining a deeper understanding of the data.

For example, during the exploration process, an analyst may start by examining the overall trends and patterns in the dataset. However, upon closer inspection, they may notice inconsistencies or outliers that require further investigation. This may lead to additional data cleaning or preprocessing steps to ensure the accuracy and reliability of the analysis.

Furthermore, the exploration process also involves trying out different techniques and approaches to uncover hidden relationships or correlations within the data. This may include visualizations, statistical tests, or even machine learning algorithms. By experimenting with various methods, analysts can gain new perspectives and insights that may have otherwise been overlooked.

In summary, the exploration process in data analysis is a dynamic and iterative journey that requires adaptability and curiosity. Through continuous modifications, iterations, and revisions, analysts can enhance the quality of their analysis and uncover valuable insights from the data.

5. The collaboration behind exploration

The Communal Aspect of collaboration involves the coordination and sharing of findings and learnings among team members. It emphasizes the importance of open communication, knowledge exchange, and collective growth.

For example, in a research project, team members need to regularly share their findings and insights with each other. This allows everyone to stay updated on the progress, identify potential challenges or opportunities, and collectively come up with solutions. By sharing learnings, team members can build upon each other's expertise and avoid duplicating efforts. This collaborative approach fosters a sense of unity and synergy within the team, leading to more efficient and effective outcomes.

In another scenario, in a software development team, sharing learnings can involve code reviews and knowledge-sharing sessions. Team members can review each other's code, provide feedback, and share best practices. This helps in identifying potential bugs or improvements, enhancing the overall quality of the codebase, and promoting continuous learning and growth among team members.

Overall, the communal aspect of collaboration underscores the significance of teamwork, open communication, and the collective pursuit of knowledge and growth. It encourages team members to actively share their findings and learnings, fostering a collaborative environment that drives success.

The need for the right tools in exploratory programming

A considerable challenge that data teams face is the lack of proper tooling for exploratory programming. The software engineering toolkit does not directly complement the unique workflow of data teams, which often hampers their progress and limits findings.

Data notebooks play a crucial role in the exploration process for data scientists. They serve as compasses by providing a comprehensive platform for running queries, writing code, visualizing data sets, and documenting thought processes. With data notebooks, data scientists can navigate their exploration journey with ease, gaining insights and making discoveries along the way. These notebooks act as a central hub, guiding users through the vast landscape of data analysis and empowering them to effectively explore, analyze, and interpret data. By encapsulating various functionalities in one place, data notebooks streamline the exploration process and enhance productivity, ultimately helping data scientists uncover valuable insights and drive informed decision-making.

In conclusion, embracing the spirit of exploratory programming and making use of the right tools can empower data teams to carry out their day-to-day tasks efficiently. It's time to break away from the rigidity of traditional software engineering methods and explore the potential of data science freely and fruitfully.

Nick Barth

Product Engineer

Nick has been interested in data science ever since he recorded all his poops in spreadsheet, and found that on average, he pooped 1.41 times per day. When he isn't coding, or writing content, he spends his time enjoying various pursuits leisure.

Follow Nick on LinkedIn and GitHub

That’s it, time to try Deepnote

Get started – it’s free
Book a demo

Footer

Solutions

  • Notebook
  • Data apps
  • Machine learning
  • Data teams

Product

Company

Comparisons

Resources

  • Privacy
  • Terms

© Deepnote