We may earn an affiliate commission when you visit our partners.
Course image
Michael Eramo

Hello, my name is Michael Eramo.  I am an experienced educator, life long learner, and a self-taught programmer.  I hold official Bachelor's Degrees in Music Industry, Education, and Physics, a Master's Degree in Mathematical Science, and a certificate in Software Development from Microsoft.  While I owe my extensive knowledge base in Music, Physics, Mathematics, and Education to the many great educators I have worked with, my understanding of Computer Science is all my own.   

Read more

Hello, my name is Michael Eramo.  I am an experienced educator, life long learner, and a self-taught programmer.  I hold official Bachelor's Degrees in Music Industry, Education, and Physics, a Master's Degree in Mathematical Science, and a certificate in Software Development from Microsoft.  While I owe my extensive knowledge base in Music, Physics, Mathematics, and Education to the many great educators I have worked with, my understanding of Computer Science is all my own.   

I have never taken an "official" computer science course; I am completely self-taught.  However, do not let that deter you from taking this course.   Instead, let it motivate you that you too can learn anything you want to.  Not only have I done it, but I've come to realize what works best for the self-taught programmer, and I have perfected the process.

See, I had this deep fear right after my son was born that I was done growing as an individual; that the person I was at 30 was going to be the same person I was at 55.  I felt that there was literally ZERO time in the day to do anything other than go to work and be a dad.  That is, until I bought a book on Computer Science, and a sense of wonder was woken.  I've read countless books, watched hundreds of videos, and put in thousands of hours exploring and writing code.  I would routinely wake up at 3:00 AM to learn for a few hours before I had to go to my full time job, teaching high school, before I went to my part time job of teaching college.  Days were long, but getting up at 3:00 AM to read, to learn, or to code benefited me more than a few extra hours of sleep.  It helped me realize that I was never done learning; never done growing.  To me, that is what defines a life long learner.   

I have years of classroom experience as a high school Physics teacher, Computer Science teacher, and college Mathematics professor.  I am part of the New York State Master Teacher Program; a network of more than 800 outstanding public school teachers throughout the state who share a passion for their own STEM learning and for collaborating with colleagues to inspire the next generation of STEM leaders.  Most importantly, I know what motivates people to learn on their own; to find a way to create time to learn, when there is no time to be had.  I understand that time is valuable and that all learning should be engaging, meaningful, and have purpose. 

Combining my expertise as an educator and my own personal interest in self-taught computer science led me to a telling realization;  most educational material for the self-taught programmer is  Instead, it falls into one of two categories:

  • Writing small "snippets" of programs that taken out of context, seem to serve no purpose at all and frankly, are beneath the user.  Prime examples include using a for loop to print out all even numbers from 1 to 100 or using if statements to respond to generic user input.  Here, users are bored and aren't challenge to create anything with meaning.  There is little purpose other than gaining what is essentially factual level knowledge.  It is a waste of your time.   

  • Watching others code whole "applications" without a true understanding of what is going on.  These are programs whose scope is beyond the user in which there is no clear guide to walk the user through the thought process without just giving them the answers.  Here, without proper support and guidance, the user just defaults to letting someone else unfold the solution for them.  There is little engagement in watching someone else work and rarely a thought generated on one's own.  It is a waste of time.   

Yes, I will admit that some learning does take place in doing simple tasks or watching others complete complicated tasks.  In fact, much of how I learned was done this way.  However, I'm telling you it pales in comparison to the learning that takes place by DOING meaningful and appropriately challenging work.  This is the art of doing.

The art of doing is the art form of transforming oneself from a passive learner who watches, to one who sees the process of learning for what it truly is; a mechanism to better oneself.  In "The Art of Doing", I have worked very hard to put together 40 meaningful, engaging, and purposeful "Challenge Problems" for you to solve. 

Each challenge problem is differentiated for 3 levels of learning. 

  • First, you are given a description of the program you are to create and example output.  This allows users an opportunity to solve well defined problems that are meaningful and appropriate in scope.  Here, all of the solution is user generated. It is engaged learning.

  • Second, you are given a comprehensive guide that will assist you in thought process needed to successfully code your program.  This allows users appropriate assistance that tests their knowledge and forces them to generate the thoughts needed to solve the given problem.  It is meaningful learning.   

  • Third, you are given completed code, with comments, to highlight how to accomplish the end goal.  This allows users to reference a working version of the program if they are stuck and cannot solve a portion of the problem without assistance.  Rather than grow frustrated, the user can quickly reference this code to gain intellectual footing, and work back to solving the problem on their own.  It is purposeful learning. 

Engaging, meaningful, and with purpose.  These challenge problems are vehicles that not only teach computer science, but teach you the art of doing.  I guarantee that after completing them all you will consider yourself a life long learner and be proud to call yourself a self-taught programmer. 

Throughout the scope of this book and its 40 challenge problems, you will get exposed to numerous ideas, theories, and fundamental computer science concepts. By working through all 40 challenge problems, you will gain a mastery level understanding of the following topics:

Data Types:

  • Strings: A series of characters

  • Integers: Whole numbers

  • Floats: Decimal numbers

  • Lists: A mutable collection

  • Tuples: An immutable collection

  • Ranges: A sequence of integers

  • Booleans: A True or False value

  • Dictionaries: A collection of associated key-value pairs

Control Flow:

  • For Loops

  • If Statements

  • If/Else Statements

  • If/Elif/Else Statements

  • Break

  • Pass

  • Continue

  • While Loops

  • Def

  • Return

Assignment, Algebraic, Logical, Members, and Comparison Operators

  • = Assignment

  • += Compound Assignment

  • -= Compound Assignment

  • + Concatenation (strings)

  • + Addition (ints and floats)

  • - Subtraction

  • * Multiplication

  • / Division

  • Exponentiation

  • % Modulo Division

  • And

  • Or

  • Not

  • In

  • Not in

  • Equal to

  • . = Not Equal to

  • < Less than

  • > Greater Than

  • <= Less Than or Equal

  • >= Greater Than or Equal

Over 20 Built In Python Functions:

  • print()

  • type()

  • str()

  • int()

  • float()

  • input()

  • round()

  • sorted()

  • len()

  • range()

  • list()

  • min()

  • max()

  • sum()

  • zip()

  • bin()

  • hex()

  • set()

  • bool()

  • super()

String Methods:

  • .upper()

  • .lower()

  • .title()

  • .strip()

  • .count()

  • .join()

  • .startswith()

  • .replace()

  • .split()

Lists Methods:

  • .append()

  • .insert()

  • .pop()

  • .remove()

  • .sort()

  • .reverse()

  • .copy()

  • .index()

Dictionary Methods:

  • .items()

  • .keys()

  • .values()

  • .most_common()

And External Libraries:

  • math

  • datetime

  • cmath

  • random

  • collections

  • time

  • matplotlib

  • tkinter

Enroll now

What's inside

Learning objectives

  • Fundamental concepts of computer science that are transferable across all programming languages.
  • Foundations of the python language as well as how to import and work with 8 libraries such as random, matplotlib, and tkinter.
  • How to actually write your own programs. you will not sit back and watch. you will do!
  • 40 "challenge problems" that include, a problem description, detailed guide, example output, and completed code.
  • Communicate secretively with a friend by encoding/decoding information based on per-determined bodies of text.
  • Simulate the power ball lottery and see how adjusting the number of balls affects the likelihood of becoming a billionaire.
  • See the devastating effect of interest on student loans and graph the results.
  • Create a gui interface that simulates the spread of an infectious disease throughout a population.

Syllabus

In this section we will look at different options for installing and running Python.
Course Preview
No installation needed: repl.it
Python 3: Windows Install
Read more

Traffic lights

Read about what's good
what should give you pause
and possible dealbreakers
Provides 40 differentiated challenge problems, which allows learners to gradually build their skills and confidence in Python programming
Emphasizes the 'art of doing' by actively engaging learners in meaningful projects, which helps them transition from passive observers to active problem-solvers
Includes projects that simulate real-world scenarios, such as calculating the impact of interest on student loans and modeling the spread of infectious diseases
Covers fundamental concepts like data types, control flow, and operators, which are essential for building a strong foundation in any programming language
Offers comprehensive guides and completed code examples for each challenge problem, which provides support and scaffolding for learners who need assistance
Includes a project that uses the Tkinter library to create a graphical user interface, which allows learners to explore GUI development in Python

Save this course

Create your own learning path. Save this course to your list so you can find it easily later.
Save

Reviews summary

Practical python fundamentals via projects

According to students, this course offers a highly effective way to learn Python fundamentals through a hands-on, project-based approach, living up to its "Art of Doing" title. Learners appreciate the clear explanations and the structure of the 40 challenge problems, which provide tiered support from description to guided hints to the final solution. Many find it perfect for beginners or those seeking to solidify their understanding with practical application. The instructor is frequently praised for his teaching style and ability to motivate. While some reviewers note it focuses strictly on fundamentals and doesn't delve into advanced topics, the consensus is that it provides a strong and practical foundation for self-taught programmers.
Covers core concepts thoroughly but lacks depth.
"It covers all the essential fundamentals you need to get started with Python."
"The course is great for mastering basics like data types, loops, and conditionals."
"Could use more in-depth coverage on complex topics or optimization techniques."
"The scope is clearly fundamentals and practical application, not advanced computer science."
Michael Eramo's teaching style is praised.
"Michael is an excellent teacher who makes complex topics easy to understand."
"His passion for teaching and the 'self-taught' philosophy is really motivating."
"The instructor's experience as an educator shines through in his clear delivery."
"He simplifies concepts effectively, which is great for beginners."
This course is well-suited for those new to Python.
"As a complete beginner, this course was exactly what I needed to get started with Python."
"It provides a solid foundation for beginners with clear explanations."
"If you're just starting out, the pace and project structure make it very accessible."
"Found it easy to follow even with zero prior coding experience."
The 40 problems are well-designed and helpful.
"The 40 challenge problems are well thought out and progressively challenging."
"Appreciated the tiered support for each problem – guide, example output, then solution."
"The problems are meaningful and help connect concepts to real-world (or fun) applications."
"Solving the problems was the best way to practice and internalize the lessons."
Learning by doing through projects is highly effective.
"The hands-on coding and projects are the strongest part of the course for me"
"Doing the challenge problems really helped solidify my understanding rather than just watching."
"I learned so much more by actually coding the projects myself than I ever did just watching tutorials."
"The 'Art of Doing' isn't just a title; it's how the course works, and it's great."

Activities

Be better prepared before your course. Deepen your understanding during and after it. Supplement your coursework and achieve mastery of the topics covered in The Art of Doing: Python Projects to Master the Fundamentals with these activities:
Review Basic Python Syntax
Reviewing basic Python syntax will help you better understand the code examples and solve the challenge problems in the course.
Browse courses on Python Syntax
Show steps
  • Read a Python syntax tutorial or watch a video.
  • Write small code snippets to practice syntax.
  • Review data types, operators, and control flow.
Review "Python Crash Course"
Reading "Python Crash Course" will provide a solid foundation in Python programming, making it easier to tackle the course's challenge problems.
Show steps
  • Read the first few chapters covering basic Python syntax and data structures.
  • Complete the exercises at the end of each chapter.
  • Focus on the sections related to data types, control flow, and functions.
Create a Simple Calculator
Building a simple calculator will reinforce your understanding of data types, operators, and control flow, which are essential for the course's challenge problems.
Show steps
  • Define the functions for addition, subtraction, multiplication, and division.
  • Get user input for numbers and the desired operation.
  • Perform the calculation and display the result.
Four other activities
Expand to see all activities and additional details
Show all seven activities
Solve Basic Coding Problems on HackerRank
Practicing coding problems on HackerRank will improve your problem-solving skills and familiarity with Python syntax, which are crucial for completing the course's challenge problems.
Show steps
  • Create an account on HackerRank.
  • Solve at least 5-10 basic Python problems.
  • Focus on problems related to data types, control flow, and loops.
Document Solutions to Challenge Problems
Documenting your solutions to the challenge problems will help you solidify your understanding of the concepts and improve your ability to explain your code.
Show steps
  • Write detailed comments in your code explaining each step.
  • Create a separate document or blog post describing your approach to each problem.
  • Explain the logic behind your code and any challenges you faced.
Contribute to a Python Project on GitHub
Contributing to an open-source Python project will expose you to real-world coding practices and help you learn from experienced developers.
Show steps
  • Find a Python project on GitHub that interests you.
  • Read the project's documentation and contribution guidelines.
  • Identify a bug or feature you can work on.
  • Submit a pull request with your changes.
Read "Automate the Boring Stuff with Python"
Reading "Automate the Boring Stuff with Python" will provide practical examples of how to use Python to solve real-world problems, enhancing your understanding of the language.
Show steps
  • Read chapters related to automating tasks with Python.
  • Try the examples and modify them to suit your needs.
  • Apply the concepts to automate a task you find tedious.

Career center

Learners who complete The Art of Doing: Python Projects to Master the Fundamentals will develop knowledge and skills that may be useful to these careers:
Python Developer
A Python developer specializes in building applications and tools using the Python programming language. This course is built around learning Python and will help build a strong foundation in the language. You'll learn about various functions, data types, such as strings, integers, floats, lists, tuples, ranges, booleans, and dictionaries, all of which are essential for Python development. By completing the challenge problems, you gain practical experience in developing Python applications, making this course a relevant first step toward becoming a skilled Python developer.
Software Developer
A software developer builds, tests, and maintains software applications. This course helps build a strong foundation in Python, a versatile language used in various software development domains. Through the course, you'll work through 40 challenge problems that cover essential concepts like data types, control flow, and functions. These challenges mirror the real-world tasks encountered in software development, providing practical experience. Those who wish to become a successful software developer should take this course to gain coding skills.
Software Engineer
A software engineer designs, develops, tests, and maintains software applications. This course helps build a foundation with its comprehensive exploration of Python fundamentals. The included challenge problems, with their tiered approach offering descriptions, guides, and completed code, directly mirror the problem-solving processes involved in software design. One who wishes to become a software engineer should take this course to gain hands-on experience coding in Python and mastering fundamental computer science concepts, as coding experience is a core requirement.
Web Developer
A web developer creates and maintains websites and web applications and often uses Python for back-end development. This course helps one build a strong foundation in Python syntax and programming logic, which are transferable to web development frameworks such as Django and Flask. Through the challenge problems, you will gain practical experience in writing Python code, making this course a solid starting point for aspiring web developers looking to expand their skills and build robust web applications. This is a great way to learn the fundamentals of the field.
Data Analyst
A data analyst collects, processes, and analyzes data to identify trends and provide insights to support decision-making. This course may be useful, as it offers exposure to Python libraries like `matplotlib` and `collections`, which are valuable for data visualization and manipulation. The challenge problems reinforce these concepts with hands-on coding practice. If you want to start a career as a data analyst, gaining Python programming skills through practical exercises is a valuable addition.
Data Scientist
A data scientist analyzes large datasets to extract meaningful insights and develop data-driven solutions. This course's coverage of data types, control flow, and external Python libraries such as `math`, `datetime`, `random`, and `matplotlib` may be useful. These tools are essential for data manipulation, statistical analysis, and data visualization. Someone seeking a career as a data scientist may find value in the practical experience gained through the challenge problems, which mirror the data analysis workflows encountered in real-world data science projects.
Computer Science Teacher
A computer science teacher instructs students in computer science principles and programming. This course provides a structured approach to learning Python and computer science concepts, mirroring the way you might teach these topics to students. The challenge problems and detailed guides offer valuable resources for demonstrating concepts and providing support to learners. One who wishes to become a computer science teacher should take the course.
Automation Engineer
An automation engineer designs and implements automated systems and processes, often using scripting languages like Python. This course may be useful, as automation frequently requires proficiency in Python for scripting and controlling various systems. The focus on fundamental computer science concepts and the practical challenge problems can help develop the problem-solving skills needed to design and implement effective automation solutions. Using the language this course teaches is a great first step to becoming an automation engineer.
Machine Learning Engineer
A machine learning engineer develops and implements machine learning models and algorithms. A strong foundation in programming and problem-solving is crucial. Although this course does not directly cover machine learning, it helps build a solid base in Python, which is the most popular language. The course's emphasis on hands-on coding and problem-solving also helps equip you with skills that are essential for success in machine learning. Taking this course will get you started on the path.
Quantitative Analyst
A quantitative analyst, often working in finance, develops and implements mathematical models to analyze financial data and make trading decisions. This course may be useful in that it is a great way to become familiar with Python, the dominant language in quantitative analysis. The course's challenge problems help build problem-solving skills. Someone who wants to work as a quantitative analyst may benefit from taking the course.
Game Developer
A game developer designs and creates video games, often using programming languages to implement game mechanics and logic. This course will be useful in the basics such as data structures, control flow, and basic algorithms. It also may be useful in that it provides exposure to the `tkinter` library, which can be used for creating simple game interfaces. One who wishes to pursue a career in game development may find that it is a way build foundational programming skills.
Research Scientist
A research scientist conducts scientific research and experiments, often analyzing data and developing models. This course may be useful, as programming skills are increasingly valuable for data analysis and simulation. The course's coverage of `math`, `random`, and `matplotlib` libraries can be useful for simulations and this is an important foundational skill. Someone with a strong science background who wishes to start a career as a research scientist should consider taking this course.
Database Administrator
A database administrator manages and maintains databases, ensuring data integrity and availability. While this course does not directly cover database administration, it helps build a foundation in programming logic and scripting, often used for automating database tasks. The course also provides a broad overview of data types and structures, which is relevant to understanding database concepts. If you aspire to become a database administrator, this is a very good first step.
Information Security Analyst
An information security analyst protects computer systems and networks from security threats. While this course does not directly cover security topics, it helps build a foundation in programming and system-level thinking, which is valuable for understanding security vulnerabilities. Someone who wants to become an information security analyst may find this course to be a very good first step.
Technical Support Specialist
A technical support specialist provides technical assistance and troubleshooting to computer users. This course may be useful in that it is a way to gain a basic understanding of programming concepts and how software works, which can be helpful in diagnosing and resolving technical issues. The challenge problems also help build problem-solving skills. Someone who needs to start a career as a technical support specialist should consider taking this course.

Reading list

We've selected two books that we think will supplement your learning. Use these to develop background knowledge, enrich your coursework, and gain a deeper understanding of the topics covered in The Art of Doing: Python Projects to Master the Fundamentals.
Python Crash Course is an excellent resource for beginners to learn Python. It provides a project-based approach, which aligns well with the course's focus on solving challenge problems. The book covers fundamental concepts and includes practical exercises to reinforce learning. It is particularly useful for those who want a more structured and in-depth introduction to Python before tackling the course's challenges.
"Automate the Boring Stuff with Python" practical guide to using Python for automating everyday tasks. complements the course by providing real-world examples of how Python can be used to solve problems. It is particularly useful for students who want to apply their Python skills to automate tasks in their personal or professional lives. The book covers topics such as web scraping, working with Excel spreadsheets, and sending email notifications.

Share

Help others find this course page by sharing it with your friends and followers:

Similar courses

Similar courses are unavailable at this time. Please try again later.
Our mission

OpenCourser helps millions of learners each year. People visit us to learn workspace skills, ace their exams, and nurture their curiosity.

Our extensive catalog contains over 50,000 courses and twice as many books. Browse by search, by topic, or even by career interests. We'll match you to the right resources quickly.

Find this site helpful? Tell a friend about us.

Affiliate disclosure

We're supported by our community of learners. When you purchase or subscribe to courses and programs or purchase books, we may earn a commission from our partners.

Your purchases help us maintain our catalog and keep our servers humming without ads.

Thank you for supporting OpenCourser.

© 2016 - 2025 OpenCourser