Introduction to Computer Programming for Musicians
Now more than ever, it’s important to be able to understand how to write computer software. Being literate in code opens a number of doors, any of which can be important new destinations for a modern musician. Many pieces of software only fully come alive if you’re able to write automation scripts.
Introduction to Computer Programming for Musicians will be like a brand new set of power tools for your profession, giving you a range of know-how in everything from developing a web page to helping you fix computer problems you may have never even noticed before. We’ll focus on code literacy, empowering you to pick up pieces of code from around the Internet, understand what these codes do, and modify them to suit your needs. Instead of focusing on a single language or platform, our goal with this course is to prepare you to understand code in general. By recognizing the concepts that are universal in computer programming, you’ll be better prepared to understand any code you come across, a skill that’s extremely important when dealing with different scripting languages.
By the end of the course, you will be able to:
- Understand how programs are structured
- Comprehend the major constructs common to all programming languages
- Read and modify code in languages you haven’t yet seen
Lesson 1: Hello Cleveland!
- Programming: Why Is It Useful in the Music World?
- What Is Software Development?
- How Does a Program Work?
- How to Read Pseudocode
- Boolean Operators
- Think Like a Programmer: Style and Whitespace
- Discussion: Useful Code
- Assignment 1: Pseudocode
Lesson 2: Harder, Better, Faster, Stronger: Modular Code and Reuse
- Reusing Code
- "For" Loops
- Functions and Variables
- The Stack
- Functional Programming and Side Effects
- Refactoring and Decomposition
- Think Like a Programmer: Software Development Life Cycle Basics
- Discussion: Code Reuse
- Assignment 2.1: Pseudocode as Functions
- Assignment 2.2: Refactoring Code
Lesson 3: Hello Cleveland! Part 2
- How Do Interpreters Work?
- Variables and Identifiers
- Why So Many Rules about Identifiers?
- Ifs and Elses
- "While" Loops
- Escaping a Loop
- "For" Loops
- Variable Scopes
- Discussion: Optimization
- Think Like a Programmer: Documentation and Maintainability
- Assignment 3: Sample Code
Lesson 4: Dangerous Type: Complex Data Types
- Arrays, in Practice
- Stacks and Queues
- Loops and Arrays
- Advanced Looping
- Even More Arrays
- Hashes, aka Objects
- ES2015 Collections
- Think Like a Programmer: Version Control
- Array Practice
- Discussion: Coding Errors
- Assignment 4: Expanding Our Vocabulary
Lesson 5: La Vida Loca: Programming in Other Languages
- Pseudocode, Imperatively
- Declarative Languages
- Anatomy of a Web Application
- What the HTML Was That?
- Sonic Pi
- Think Like a Programmer: Agile vs. Waterfall Development
- Discussion: Language Evolution
- Assignment 5: Expressing Commonalities
Lesson 6: The Object of My Affection: Object Oriented Programming
- You Down with OOP?
- Classes and Instances
- Contracts and Interfaces
- Class Methods and Variables
- Object Reuse
- Composition and Inheritance
- Designing with Objects
- Think Like a Programmer: Unit Testing
- Discussion: OOP
Lesson 7: My Back Pages: Web Pages and Interaction
- Introducing HTML
- The Script Tag
- DOM Manipulation
- Event Driven Programming
- CSS Basics
- Discussion: Practical Use
- Assignment 7: The Inspector
Lesson 8: What is Data?
- What is Data?
- Types of Storage, or, The Why of Databases
- Tables, Rows, Fields
- Relational Data
- Discussion: Data Sets
- Creating a Database
- SQL Basics: CRUD
- Assignment 8: Data Connection
Lesson 9: Putting the Data to Work
- Introduction to Services
- Reading from APIs
- Writing to APIs
- Discussion: Common Nomenclature
- Discussion: Planning a Project with APIs
- Assignment 9: A World of APIs
Lesson 10: What is Asynchronous Code?
- Timing is Everything
- Think Like a Programmer: Collaboration
- Discussion: Collaboration
- Assignment 10: Beta
Lesson 11: A Brand New Bag: Apply the Principles of Previous Lessons into a Music-Specific Application
- Logic Recap
- Introducing ChucK
- Input and Output
- Make Connections
- Think Like a Programmer: Ship It Good
- Assignment 11: Submit Code for a Piece of Music
Lesson 12: Hello Goodbye: Final Project and Beyond
- SDLC in Teams
- Feedback and Bug Tracking
- Open Source Software (Gratis vs. Libre)
- Keep Going!
- Discussion: Challenge in Your Final Project
- Assignment 12: Analyze the Code and Refactor
No Required Textbooks
- A text editor, such as Atom ( https://atom.io)
- Node.js (to be installed during an early lesson)
- 2 GB RAM (4 GB recommended)
- 500 MB hard drive space
- Speakers or headphones
Internet connection with at least 4 Mbps download speed (http://www.speedtest.net to verify or download the Speedtest by Ookla app from your mobile app store)
Author & Instructor
Patrick McNeill is the Manager of Software Development for Berklee Online, and has been a part of the team working on the online school since its inception in 2002. Patrick is what’s often called a “maker”: he designs and builds gadgets. This includes creating parts with a hand-crafted 3D printer, designing and soldering together the electronic components, and writing the software to put them all together. He is often the only person in his house who knows how to turn on the lights. He’s also an avid photographer, with his dogs, all whippets, being his most frequent subject.
Author & Instructor
Luke Stevens is the Director of Technology and CTO for Berklee Online. He leads the teams responsible for creating and maintaining the technology that powers the online learning experience and the supporting business. While not working, Luke has been a church music director, jazz trumpet enthusiast, volunteer coordinator, studio melodica player (one time) and a country preacher.
When taken for credit, Introduction to Computer Programming for Musicians can be applied towards these associated programs: