Recently, I’ve been working on a new course offering in Enthought Academy titled Software Engineering for Scientists and Engineers course. I’ve focused on distilling the software engineering best practices that we use at Enthought with our clients, with the twist of “what parts are most useful for a scientist who writes software for R&D?” After all, we don’t want to simply replicate an academic 12-week course in software engineering; instead, we want to teach the subset of ideas that will make the most impact on scientific programming projects in the least amount of time. Unfortunately, I lost track of time and ran into my deadline for this blog. Panic time? Not this year.
This year, I have a trusty assistant who can draft an article for me!
Since software engineering was on my mind, I asked my new assistant to do the following:
Write a 1000 word article on software engineering with the following sections: introduction, usability, maintainability, reliability, and scalability; conclude with a discussion on how all of these aspects of software engineering layer together.
My assistant gamely went off and, about 10 seconds later, live-typed to me:
Software engineering is a field that deals with the design, development, testing, deployment, and maintenance of software. It is a crucial aspect of modern technology, as software is a fundamental part of almost every aspect of our daily lives. From the operating system on our phones to the software that controls the traffic lights, software engineering is a critical aspect of building reliable and efficient software.
Usability is an essential aspect of software engineering, as it ensures that the software is easy to use and navigate for its users. A usable software program has a user interface that is intuitive and straightforward, making it easy for users to interact with the program. In software engineering, usability is often achieved through the use of user-centered design methodologies that prioritize the needs and expectations of the user.
Not bad. The article was pretty complete. It was coherent and informative; it summarized a lot of information. However, it wasn’t exactly what I had in mind.
After all, at Enthought we work primarily in the Python ecosystem, and I wanted something focused there—something about how to make good use of the various standard Python tools for software engineering: documentation, testing, performance, etc. The basic outline matched what I had asked for, but was too generic.
So, I went back to my assistant and asked for some modifications:
Rewrite this article with a focus on the Python programming language.
My assistant took off and immediately provided me with a complete rewrite:
Python is a widely-used programming language in software engineering that emphasizes code readability, simplicity, and ease of use. It is an interpreted, high-level programming language that supports multiple programming paradigms, including object-oriented, functional, and procedural programming. Python is used in a wide range of applications, from web development to data analysis to artificial intelligence and machine learning.
Python’s readability and ease of use make it a popular choice among developers who value productivity and code simplicity. Its clean syntax, dynamic typing, and automatic memory management make it easy for beginners to learn and for experienced developers to write code quickly and efficiently. Python’s standard library includes a wide range of modules and tools, which reduces the need for developers to write code from scratch and streamlines the development process.
This revision was again coherent and informative, but strayed away from the original software engineering topic. Still, it had a lot of good information about Python and did emphasize some of the main good points of Python as a language vis a vis general software engineering problems. I decided to try for another revision. After all, at Enthought our focus is really on scientific R&D software, not general software development. The article needed to have some focus on the special problems that turn up in the science R&D context, such as: small teams of collaborators working in different organizations and places; the open source sharing of tools; messy and incomplete data; and rapidly changing understanding of the problems being worked on.
This time I asked:
Rewrite this article with a focus on software written for solving scientific research problems.
Again, my assistant provided a sub-minute, quick turnaround:
Software engineering plays a crucial role in scientific research as it enables researchers to develop software solutions for solving complex research problems. Scientific software development requires specialized skills and knowledge, as it often involves processing large datasets, running simulations, and implementing complex algorithms. Python is a popular programming language in scientific research, as it provides researchers with a range of tools and libraries for data analysis, visualization, and machine learning.
In scientific research, software usability is critical as researchers need to focus on their research rather than struggling with complex software interfaces. Python’s simplicity and ease of use make it an ideal language for scientific research. Its clean syntax and dynamic typing make it easy for researchers to write code, while its extensive libraries and tools provide a range of solutions for data analysis, visualization, and modeling. Additionally, Python’s Jupyter Notebook provides researchers with a user-friendly environment for interactive data analysis and documentation.
Yet again, my assistant provided a good response, although still not exactly what I was after (this content have been a better draft for another blog I wrote: Why Python?). It could be that my requests (prompts) were not precise enough. Still, there was a lot of good, summarized information in ChatGPT’s responses.
The next steps could be to continue experimenting with getting the right query to ChatGPT. Or, I could take the responses I have received and use them as solid drafts to craft an article that did match what I envisioned—something about the craft of software engineering that would be useful for scientists who collaborate with each other, who create useful tools for other researchers, and who see software as much about communication as solving complex problems.
However, I will leave it as is. I invite you to get a free account with ChatGPT and explore this latest marvel of the digital world. Ask it about software engineering. Starting with a general query and then refining, and adding layers of complexity seems to be a good approach. The responses are interesting. If nothing else, they provide you with a solid summary of ideas related to your query; they can also help you refine your thinking by getting you to focus your queries more precisely on the questions you really wanted to ask, but didn’t.
In the meantime, I will go back to working on a new Enthought Academy course, Software Engineering for Scientists and Engineers. If you are interested in creating solid software, you’ll find our human-crafted course—which allows us to work directly with you and answer the questions you have about software engineering—more useful.
Enthought Academy Software Engineering for Scientists and Engineers. By Humans. For Humans.
Author: Eric Olsen, Director, Training Solutions, holds a Ph.D. in history from the University of Pennsylvania, a M.S. in software engineering from Pennsylvania State University, and a B.A. in computer science from Utah State University. Eric spent three decades working in software development in a variety of fields, including atmospheric physics research, remote sensing and GIS, retail, and banking. In each of these fields, Eric focused on building software systems to automate and standardize the many repetitive, time-consuming, and unstable processes that he encountered.
Making the Most of Small Data in Scientific R&D
March 9, 2023|Life Sciences, Materials Science, Transformation Making the Most of Small Data in Scientific R&D For many traditional innovation-driven organizations, scientific data is generated…
ChatGPT on Software Engineering
Recently, I’ve been working on a new course offering in Enthought Academy titled Software Engineering for Scientists and Engineers course. I’ve focused on distilling the…
What’s in a __name__?
if __name__ == “__main__”: When I was new to Python, I ran into a mysterious block of code that looked something like: def main(): …
Why Python? Of all of the questions that I have been asked as the instructor of an Enthought Python course, this has been one of…
3 Trends for Scientists To Watch in 2023
As a company that delivers Digital Transformation for Science, part of our job at Enthought is to understand the trends that will affect how our…
Accelerating Science: the Classical Mechanics Perspective
When thinking about enhancing R&D processes, Newton’s second law of motion provides the perfect framework. Classical mechanics teaches us that putting a body into motion…
Retuning the Heavens: Machine Learning and Ancient Astronomy
What can we learn about machine learning from ancient astronomy? When thinking about Machine Learning it is easy to be model-centric and get caught up…
Announcing Enthought Academy
Dear Students and Friends of Enthought, I am pleased to announce Enthought Academy—the culmination of over twenty years of teaching Scientific Python. Since our founding…
Extracting Target Labels from Deep Learning Classification Models
In the blog post Configuring a Neural Network Output Layer we highlighted how to correctly set up an output layer for deep learning models. Here,…
True DX in the Pharma R&D Lab Defined by Enthought
Enthought’s team in Japan exhibited at the Pharma IT & Digital Health Expo 2022 life sciences conference in Tokyo, to meet with pharmaceutical industry leaders…