Introduction to Scientific Programming with Python
()
About this ebook
"Introduction to Scientific Programming with Python" offers an immersive exploration into the dynamic field of scientific programming using Python. We cater to a diverse audience, serving as an entry point for novices and a valuable resource for seasoned practitioners in scientific computing.
Python's popularity in scientific circles stems from its readability, versatility, and extensive libraries for numerical computing, data analysis, and visualization. We cover fundamental programming concepts and gradually introduce advanced techniques specific to scientific applications.
From mastering Python basics to exploring advanced topics like machine learning and symbolic mathematics, each chapter provides a structured and hands-on learning experience. Real-world case studies, practical examples, and exercises ensure readers grasp theoretical concepts and gain practical skills.
Throughout the book, Python becomes a tool of empowerment, enabling readers to unravel complex scientific data, model intricate phenomena, and contribute meaningfully to their fields. "Introduction to Scientific Programming with Python" is an invaluable companion for harnessing Python's potential in scientific inquiry and discovery.
By the end, readers will have a robust foundation in Python and the confidence to apply scientific programming methodologies to real-world problems. This book unlocks the door to a world where Python drives exploration, discovery, and innovation in science.
Related to Introduction to Scientific Programming with Python
Related ebooks
NumPy Essentials Rating: 0 out of 5 stars0 ratingsIPython Notebook Essentials Rating: 0 out of 5 stars0 ratingsData Science with Python: From Zero to Machine Learning Rating: 0 out of 5 stars0 ratingsData Science with Python: Unlocking the Power of Pandas and Numpy Rating: 0 out of 5 stars0 ratingsPython Made Simple: A Practical Guide with Examples Rating: 0 out of 5 stars0 ratingsPython Programming: General-Purpose Libraries; NumPy,Pandas,Matplotlib,Seaborn,Requests,os & sys: Python, #2 Rating: 0 out of 5 stars0 ratingsMastering Python: A Comprehensive Guide for Beginners and Experts Rating: 0 out of 5 stars0 ratingsMastering Python: Learn Python Step-by-Step with Practical Projects Rating: 0 out of 5 stars0 ratingsPython for AI: Applying Machine Learning in Everyday Projects Rating: 0 out of 5 stars0 ratingsPython for Engineers: Solving Real-World Technical Challenges Rating: 0 out of 5 stars0 ratingsData Manipulation with Python Step by Step: A Practical Guide with Examples Rating: 0 out of 5 stars0 ratingsMastering Python Programming: From Basics to Expert Proficiency Rating: 0 out of 5 stars0 ratingsPython The Complete Reference: Comprehensive Guide to Mastering Python Programming from Fundamentals to Advanced Techniques Rating: 0 out of 5 stars0 ratingsMastering Algorithm in Python Rating: 0 out of 5 stars0 ratingsBeginner's guide to mastering python Rating: 0 out of 5 stars0 ratingsMastering the Craft of Python Programming: Unraveling the Secrets of Expert-Level Programming Rating: 0 out of 5 stars0 ratingsScientific Computing with Python: Mastering Numpy and Scipy Rating: 0 out of 5 stars0 ratingsPython Algorithms Step by Step: A Practical Guide with Examples Rating: 0 out of 5 stars0 ratingsMachine Learning with Spark and Python: Essential Techniques for Predictive Analytics Rating: 0 out of 5 stars0 ratingsPython and SQL Bible: From Beginner to World Expert: Unleash the true potential of data analysis and manipulation. Rating: 0 out of 5 stars0 ratingsMastering Python Algorithms: Practical Solutions for Complex Problems Rating: 0 out of 5 stars0 ratingsPython 3 Fundamentals: A Complete Guide for Modern Programmers Rating: 0 out of 5 stars0 ratingsMastering Python: A Journey Through Programming and Beyond Rating: 0 out of 5 stars0 ratingsUltimate Python Libraries for Data Analysis and Visualization Rating: 0 out of 5 stars0 ratingsAdvanced NumPy Techniques: A Comprehensive Guide to Data Analysis and Computation Rating: 0 out of 5 stars0 ratingsPython Machine Learning Illustrated Guide For Beginners & Intermediates:The Future Is Here! Rating: 5 out of 5 stars5/5
Software Development & Engineering For You
The Hard Thing About Hard Things: Building a Business When There Are No Easy Answers Rating: 4 out of 5 stars4/5Python For Dummies Rating: 4 out of 5 stars4/5How to Write Effective Emails at Work Rating: 4 out of 5 stars4/5Coding with AI For Dummies Rating: 1 out of 5 stars1/5Hand Lettering on the iPad with Procreate: Ideas and Lessons for Modern and Vintage Lettering Rating: 4 out of 5 stars4/5Coding All-in-One For Dummies Rating: 0 out of 5 stars0 ratingsRelayd and Httpd Mastery: IT Mastery, #11 Rating: 0 out of 5 stars0 ratingsHow to Build and Design a Website using WordPress : A Step-by-Step Guide with Screenshots Rating: 0 out of 5 stars0 ratingsLearn to Code. Get a Job. The Ultimate Guide to Learning and Getting Hired as a Developer. Rating: 5 out of 5 stars5/5SQL For Dummies Rating: 0 out of 5 stars0 ratingsLearning R Programming Rating: 5 out of 5 stars5/5Beginning Programming For Dummies Rating: 4 out of 5 stars4/5Level Up! The Guide to Great Video Game Design Rating: 4 out of 5 stars4/5Introduction to Canva : A Beginner's Guide to Designing Beautiful Graphics: Course, #1 Rating: 0 out of 5 stars0 ratingsBeautiful Landscapes AI Image Prompts: 600+ Stable Diffusion Dalle-3 Midjourney AI Art Generation Examples Rating: 0 out of 5 stars0 ratingsPhotoshop For Beginners: Learn Adobe Photoshop cs5 Basics With Tutorials Rating: 0 out of 5 stars0 ratingsThe Photographer's Guide to Luminar 4 Rating: 0 out of 5 stars0 ratingsProgramming Problems: A Primer for The Technical Interview Rating: 4 out of 5 stars4/5Kodi Made Easy: Complete Beginners Step by Step Guide on How to Install Kodi on Amazon Firestick Rating: 0 out of 5 stars0 ratingsMaking Money By Selling 3D Models Online Rating: 5 out of 5 stars5/5How To Make Money With 3D Printing: The New Digital Revolution Rating: 3 out of 5 stars3/5PYTHON: Practical Python Programming For Beginners & Experts With Hands-on Project Rating: 5 out of 5 stars5/5System Design Interview: 300 Questions And Answers: Prepare And Pass Rating: 0 out of 5 stars0 ratingsHacking for Beginners: Mastery Guide to Learn and Practice the Basics of Computer and Cyber Security Rating: 0 out of 5 stars0 ratingsTeach Yourself VISUALLY iPhone 16 Rating: 0 out of 5 stars0 ratingsOneNote: The Ultimate Guide on How to Use Microsoft OneNote for Getting Things Done Rating: 1 out of 5 stars1/5DevOps Handbook: What is DevOps, Why You Need it and How to Transform Your Business with DevOps Practices Rating: 4 out of 5 stars4/5
Reviews for Introduction to Scientific Programming with Python
0 ratings0 reviews
Book preview
Introduction to Scientific Programming with Python - Pankaj Jayaraman
Introduction to Scientific Programming with Python
Introduction to Scientific
Programming with Python
By
Pankaj Jayaraman
Introduction to Scientific Programming with Python
Pankaj Jayaraman
ISBN - 9789361526268
COPYRIGHT © 2025 by Educohack Press. All rights reserved.
This work is protected by copyright, and all rights are reserved by the Publisher. This includes, but is not limited to, the rights to translate, reprint, reproduce, broadcast, electronically store or retrieve, and adapt the work using any methodology, whether currently known or developed in the future.
The use of general descriptive names, registered names, trademarks, service marks, or similar designations in this publication does not imply that such terms are exempt from applicable protective laws and regulations or that they are available for unrestricted use.
The Publisher, authors, and editors have taken great care to ensure the accuracy and reliability of the information presented in this publication at the time of its release. However, no explicit or implied guarantees are provided regarding the accuracy, completeness, or suitability of the content for any particular purpose.
If you identify any errors or omissions, please notify us promptly at [email protected]
& [email protected]
We deeply value your feedback and will take appropriate corrective actions.
The Publisher remains neutral concerning jurisdictional claims in published maps and institutional affiliations.
Published by Educohack Press, House No. 537, Delhi- 110042, INDIA
Email: [email protected] & [email protected]
Cover design by Team EDUCOHACK
Preface
Welcome to A Primer on Scientific Programming with Python.
This book serves as an accessible gateway into the dynamic world of scientific programming, leveraging the versatile capabilities of the Python programming language. Scientific programming is a vital skill for researchers, engineers, and students across various disciplines.
With its simplicity, readability, and a rich ecosystem of libraries, Python has emerged as a preferred language for scientific computing. This primer is meticulously crafted to cater to a diverse audience, from beginners seeking an introduction to programming to seasoned practitioners aiming to enhance their scientific computing skills.
Each chapter unfolds progressively, combining theoretical foundations with practical applications, ensuring a holistic understanding of Python's role in scientific pursuits. Join us on this enlightening journey, where you'll not only grasp the essentials of programming but also witness how Python transforms data manipulation, visualization, and mathematical modeling in the scientific realm. This primer is more than a guide; it's an invitation to explore the exciting intersection of Python and scientific programming.
This primer is structured to accommodate readers with varying levels of programming experience. Whether you are a novice or an experienced coder, each chapter builds on the previous one, providing a progressive learning experience. The hands-on exercises and case studies are designed to reinforce your understanding and encourage practical application.
Dive in, explore, and embark on a journey to master scientific programming with Python. Your adventure into the world of scientific computing starts now!
Happy coding!
Table of Contents
Chapter 1
Introduction to Scientific Programming 1
1.1 What is Scientific Programming 2
1.2 Overview of Scientific Programming 2
1.3 What can We do with Scientific Programming? 2
1.4 More Real-World Examples of
Scientific Programming 3
1.5 Using Scientific Programming and
Social Media to Respond to Disasters 4
1.6 Importance of Python in Scientific Computing 4
1.7 Setting Up Your Python Environment 5
1.7.1 The Initial Illustration: Hi,
Everyone! 5
1.7.2 Different Ways to Use Python 6
1.8 The Future of Scientific Programming 7
1.9 Conclusion 7
Chapter 2
Python Basics for Scientists 8
2.1 Python Data Types and Variables 9
2.2 Control Structures: Loops and
Conditionals 13
2.3 Functions and Modular Programming 15
2.4 Python Libraries for Scientific
Computing 17
Conclusion 18
Chapter 3
NumPy: Foundation for Scientific Computing 19
3.1 Introduction to NumPy Arrays 19
3.1.1 Introduction to NumPy Arrays: Unveiling the Core of Scientific Computing 20
3.2 Essential Operations with NumPy 21
3.3 Linear Algebra with NumPy 25
3.3 Linear Algebra with NumPy 26
3.4 NumPy’s Random Module for
Simulations 29
3.4.1 NumPy’s Random Module for
Simulations 29
3.5 Conclusion 32
Chapter 4
Data Manipulation with Pandas 34
4.1 Introduction to Pandas DataFrames 37
4.2 Data Cleaning and Preprocessing 42
4.3 Analyzing and Visualizing Data with Pandas: 42
4.4 Conclusion 43
Chapter 5
Scientific Plotting with Matplotlib 44
5.1 Creating Basic Plots with Matplotlib 44
5.2 Advanced Plotting Techniques 47
5.3 Customizing and Enhancing Plots 50
Conclusion 53
Chapter 6
Introduction to Scientific Computing with SciPy 55
6.1 Solving Mathematical Problems with
SciPy 55
6.2 Numerical Integration and
Differentiation 57
6.2.1 Numerical Integration and Differentiation with SciPy:
Bridging the Analytical and Computational Realms 57
6.3 Signal Processing and Image Processing with SciPy 59
6.3.1 Signal Processing and Image Processing with SciPy: A Symphony
of Computational Sensibility 60
Chapter 7
Symbolic Mathematics with SymPy 63
7.1 Introduction: Symbolic Mathematics
with SymPy 63
7.1 Performing Symbolic Computations 68
7.2 Solving Equations and Algebraic Manipulations 69
7.3 Symbolic Calculus and Differential
Equations 71
Chapter 8
Scientific Programming in Practice 74
8.1 Introduction to Scientific Programming in Practice 74
8.2 Best Practices in Scientific Programming 75
8.2 Version Control and Collaboration with
Git 79
8.3 Writing Efficient and Readable Code 83
8.4 Conclusion: Navigating the Realms of Scientific Programming in Practice 84
Chapter 9
Introduction to Machine Learning with
scikit-learn 86
9.1 Introduction to Machine Learning
with scikit-learn: Bridging Theory and Practice for Data-driven Insights 86
9.2 Overview of Machine Learning Concepts: Unveiling the Foundations of Intelligent Systems 89
Chapter 10
Case Studies in Scientific Programming 109
10.1 Real-world Examples and
Applications 109
10.1.1 Astrophysics: Simulating Stellar Evolution 110
10.1.2 Healthcare: Personalized
Medicine through Genomic
Analysis 111
10.1.3 Manufacturing: Optimizing
Industrial Processes 112
10.1.4 Environmental Science: Climate Modeling 113
10.1.5 Finance: Algorithmic Trading Strategies 114
10.2 Reproducible Research Practices 115
10.2.1 Computational Biology:
Transparent Genomic Analyses 116
10.2.2 Physics: Simulating Quantum
Systems 117
10.2.3 Social Sciences: Transparent Data Analysis 118
10.2.4 Earth Sciences: Reproducible
Climate Modeling 119
10.2.5 Data Science: Transparent
Machine Learning Models 120
10.3 Showcasing the Impact of Scientific Programming 121
10.3 Showcasing the Impact of Scientific Programming 122
10.3.1 Interdisciplinary Collaboration:
The LIGO Project 123
10.3.2 Drug Discovery Acceleration: Computational Chemistry 124
10.3.3 Precision Agriculture: Optimizing
Crop Yield 125
10.3.4 Epidemiology: Modeling Disease Spread 126
10.3.5 Space Exploration: Navigation and Data Analysis 127
Chapter 11
Beyond Basics: Advanced Topics 130
11.1 Metaheuristic Hybridization 130
11.2 Coevolutionary Systems 132
11.3 Human-in-the-Loop Evolutionary
Systems 133
11.1 Parallel Computing and Distributed Computing 133
11.2 GPU Computing with Python 135
11.3 Introduction to High-Performance Computing 136
Conclusion 137
Chapter 12
Future Trends in Scientific Programming 139
12.1 Emerging Technologies and Tools 140
12.2 The Role of Python in Future Scientific Computing 142
12.3 Opportunities and Challenges Ahead 154
Conclusion 156
Chapter 13
Appendices 158
A. Installing and Configuring Python and Libraries 158
B. Glossary of Terms 160
C. Additional Resources for Scientific Programming 161
Index 163
Chapter 1
Introduction to Scientific Programming
Introduction to Scientific Programming
Scientific programming is a dynamic and interdisciplinary field that leverages computational tools to analyze, model, and solve complex scientific problems. In an era where data-driven insights and numerical simulations play a pivotal role in research and innovation, mastering the art of scientific programming is essential for scientists and engineers alike. This introductory chapter serves as a gateway to the world of scientific programming with Python, shedding light on the fundamental principles and tools that form the backbone of computational scientific exploration.
Introduction to Scientific Programming serves as the gateway to a world where computational methods intersect with scientific inquiry. This opening chapter of the book lays the foundation by elucidating the fundamental principles and significance of scientific programming, especially within the context of utilizing Python.
Readers are introduced to the symbiotic relationship between programming and scientific research, where computational tools become indispensable for solving complex problems, analyzing vast datasets, and simulating intricate phenomena. The chapter provides an overview of the role Python plays as a versatile and accessible language in scientific computing, emphasizing its widespread adoption in academia and industry. Setting the stage for subsequent chapters, this introduction invites readers to embark on a journey where programming becomes a dynamic instrument for exploring, understanding, and advancing scientific knowledge.
Scientific programming represents the fusion of computational techniques with the pursuit of scientific understanding and discovery. In this introductory chapter, we embark on a journey into the realm where programming becomes a powerful tool for researchers, engineers, and scientists.
We delve into the fundamental principles that underpin scientific programming and explore its pivotal role in solving complex problems, conducting simulations, and analyzing data. At the heart of this introduction is an exploration of Python’s role as the programming language of choice in scientific computing.
Python’s readability, versatility, and an extensive ecosystem of libraries make it an ideal companion for those seeking to leverage the computational capabilities in their scientific endeavors. As we navigate through this introductory chapter, readers will gain a holistic perspective on the symbiotic relationship between programming and scientific exploration, setting the stage for a comprehensive exploration of scientific programming using Python in the chapters that follow.
1.1 What is Scientific Programming
Scientific programming has a definition that, while simple, covers an immense number of applications and industries. Technically, scientific programming is any time a computer program is used for science research.
Most scientists can benefit from scientific programming, ranging from geologists to zoologists. Using scientific programming, a researcher can increase the rate and reproducibility of their work exponentially. While humans are certainly better at some things than computers, doing massive calculations, storing data, and analyzing results are exactly what computers were designed to do. Scientists can use computers to automate processes that could otherwise be incredibly time-consuming, tedious, error-prone, and difficult for human researchers.
Importantly, computers don’t make mathematical errors. Of course, mistakes can still happen, but these mistakes are usually rooted in a human-based error—computers just follow directions, so if there is a mistake in the calculation, the computer is not going to catch it. That being said, a computer can, in the matter of a few minutes, do a series of calculations that would take a human researcher months or even years. Even better, it will perform the calculations exactly the same way each time the code is run.
1.2 Overview of Scientific Programming
Scientific programming involves the use of computer programming languages to formulate, simulate, and analyze scientific problems. This section provides an overview of the key concepts, methodologies, and applications that characterize the intersection of programming and scientific inquiry.
Scientific programming provides a systematic approach to applying computational methods in scientific research and problem-solving. This overview serves as a compass, guiding readers through the landscape of techniques, tools, and methodologies employed in the convergence of programming and scientific exploration. At its core, scientific programming harnesses the computational capabilities of programming languages to model, analyze, and simulate complex phenomena, facilitating a deeper understanding of scientific principles.
This chapter provides a panoramic view of the essential concepts underpinning scientific programming, elucidating its pivotal role in diverse scientific domains. As we navigate this overview, readers will gain insights into the interdisciplinary nature of scientific programming, its applications in real-world scenarios, and the transformative impact it has on advancing scientific knowledge. This sets the stage for a more in-depth exploration of Python as a versatile and effective language in the subsequent chapters.
1.3 What can We do with Scientific Programming?
Scientific programming can benefit scientists and researchers in a number of different ways. Without being field specific (we’ll give you a few Earth data science examples below), the most important scientific programming superpowers are to:
1. Automate time-intensive tasks: You can use scientific programming to automate tasks that might take you weeks, months, years, or simply be impossible to do by hand. For example, if you wanted to track the number of tweets surrounding a recent natural disaster, it would be miserable to go through tens of thousands of feeds one-by-one. Using code, this task might only take a few minutes.
2. Modify and update research: If you write clean code, it can be modified and rerun over and over. Let’s pretend you’re studying how socio-economic data relates to air pollution in the Denver area. If you write a clean, well commented script, it will be easy to incorporate the next year’s census data into your results.
3. Share methods with the public and other researchers: Code is easy to share, making science more open and reproducible. As a researcher, it allows you to share your exact methods with both other scientists and with the public.
4. Document workflows: Code allows you to easily document your workflow. You can use comments to explain every step of the process (to your future self or to others), so if you need to update or change something later, it is fast and simple.
5. Enable collaboration: Code makes collaborating easier. Going back to the previous example, if you’re studying air pollution in Denver, and a colleague is studying air pollution in San Francisco, you can compare models, exchange scripts, and work together.
This is a pretty incredible list. It pushes science forward in powerful ways not only because of the speed of computation and calculation, but also the ease of collaboration and modification. From helping biologists to sequence the human genome, to allowing social scientists to make better economic predictions, to the Earth science examples below, scientific programming has been and continues to be revolutionary.
1.4 More Real-World Examples of Scientific Programming
Using Scientific Programming to Study Fire Pollution and Respiratory Health
We have several scientists at Earth Lab that specialize in studying wildfires across the United States. Our research team investigates many aspects of fire including the plants that burn most commonly like invasive cheatgrass, ways to defend communities from the increasing number of wildfires, how social media can be used to aid in wildfire response, and how different forest disturbances like insect invasion, wind events, and logging can influence the frequency of fires.
A large and commonly overlooked danger of wildfires is the toll they take on human respiratory health. Smoke from fires is related to a number of breathing and lung problems because it drastically increases the amount of fine particulate matter in the air. Fine particulate matter is one of the most dangerous pollutants from wildfires and has been linked to lung cancer and heart and lung problems.
As an airborne pollutant, the effect of these fine particles on local populations can be difficult to predict and track—respiratory illnesses have many causes and are influenced by economic, lifestyle, and demographic factors as well as air pollution. Separating the effects of wildfire related pollution on a population from vehicle exhaust or industrial pollution requires a lot of data and complex modeling.
Scientific programming offers a solution to this challenge. Researchers can combine data sources and identify confounding variables
(variables that cause the same health response as the wildfire smoke and will negatively impact the accuracy of the model).
Earth Lab researchers use a combination of hospitalization and emergency visit data, U.S. Census data, meteorological data, and imagery from geostationary satellites to create models of how these particles impact respiratory health. By finding algorithms, or mathematical rules, that best fit the data, the models can accurately predict the effect of smoke from future wildfires on vulnerable populations.
Scientific programming is vital for creating these complex models—a human cannot combine and understand all of the data types without machine assistance. In addition, while it may be possible for a researcher to compute the algorithms explaining the patterns in the data by hand, it would take an impractically long time. Thus, the models relating wildfire smoke pollution to negative respiratory health impacts could not exist without scientific programming.
1.5 Using Scientific Programming and Social Media to Respond to Disasters
One of the greatest strengths of scientific programming is that it can do an amount of work that would be impossible for a single individual or even a team of people. That superpower is displayed clearly in this example from Earth Lab scientist Lise St. Denis’ research.
Lise uses twitter to help first responders identify developing and in progress emergency situations that they may not be aware of.
When disaster strikes, people call the police and other officials, but they also reach out to their online community, sometimes with vital information. In addition, during disasters hotlines can easily be overwhelmed by callers. Social media may be the only line of communication.
This means that sites like Twitter can have vital information that disaster response teams need, but there are far too many tweets for a person (or team) to sort through and still get information to response teams fast enough. Lise St. Denis knows this from first hand experience. She was part of a team during the 2014 Carlton complex fire who was tasked with sorting tweets and forming a nightly report. While their report was useful, Lise’s team couldn’t keep up with the flow of tweets, and responders needed the information faster than the team could provide it. The solution was clear to Lise—they needed to enlist the superpowers of scientific computing.
For the last few years, Lise has been working on creating a filtration algorithm that scrapes data off Twitter and sorts it by importance. This code can do the work of an entire team of humans by looking at
and categorizing every single tweet as it comes in. These tweets are sorted by the algorithm into messages that the human team needs to look at, and those the algorithm has safely identified as unimportant for first responders. Looking
at a massive amount of fast moving data and putting it into categories is one of the strengths of scientific programming.
1.6 Importance of Python in Scientific Computing
Python has emerged as a preferred language for scientific computing due to its simplicity, versatility, and a rich ecosystem of libraries. This subsection highlights the distinctive features of Python that make it a powerful tool for scientists and introduces its role in the broader context of scientific programming.
Python has emerged as a preeminent language in the realm of scientific computing, redefining the landscape for researchers, engineers, and practitioners alike. The importance of Python in scientific computing can be attributed to several key factors.
First and foremost is Python’s readability and simplicity, which enables users to express complex scientific ideas in a clear and concise manner. Its syntax closely resembles pseudo-code, facilitating rapid development and making it an accessible language for both beginners and seasoned professionals.
Python’s robust ecosystem of scientific libraries further cements its significance. Libraries such as NumPy, SciPy, and Matplotlib provide powerful tools for numerical computing, scientific analysis, and visualization, offering a seamless and comprehensive environment for scientific programmers. The community-driven nature of Python ensures that these libraries are continually evolving, incorporating cutting-edge techniques and staying abreast of advancements in scientific research.
Interdisciplinary collaboration is another area where Python shines. Its versatility allows researchers from diverse domains to converge on a common platform, fostering collaboration and the exchange of ideas. Additionally, Python’s integration capabilities enable scientists to interface with other languages and tools seamlessly, enhancing the interoperability of scientific workflows.
The open-source nature of Python aligns with the ethos of scientific inquiry, promoting transparency, reproducibility, and the sharing of knowledge. Researchers can easily access, modify, and distribute code, contributing