Massimo Di Pierro

Full Professor

DePaul linked-in publications github
School of Computing
DePaul University
243 S Wabash Ave
Chicago IL 60604
Phone: +1-312-362-5173
Fax: +1-312-362-6116
"A man who dares to waste one hour of time has not discovered the value of life." (Charles Darwin)


Important notice to students about classes:

  • This is the ONLY place where I post or link all class material.
  • Questions are always welcome. It is your job to ask questions and mine to answer.
  • If you email me and you do not get an answer in 24 hours, assume I did not receive your email. Call me or use the mailing list.
  • I use google group to communicate.
  • I am not your secretary. You should be able to check and meet your deadlines without my reminders.
  • It is my teaching style to do lots of coding in class, discuss with students strategies to solve a problem, and introduce bugs/typos to check class participation.
  • If there is anything you do not like about one of my classes the sooner you tell me, the sooner it can be addressed and/or corrected. All forms of criticism are appreciated.
  • It is my job to evaluate your maturity as well as your technical skills. I answer your emails and you are supposed to answer mine.

About Assignments

  • All the assignments and projects are individual assignments (unless otherwise specified).
  • Plagiarism will be reported.
  • I only accept documents in PDF and ZIPped code (submit a Word document or a RAR file and you will get ZERO).
  • You are supposed to watch the lectures to learn about assignments, deadlines, etc.
  • Late assignments are not accepted. Never. No exceptions.
  • The lowest grade assignment (except the last one) will be dropped from the average.

About Extra credit

  • You can earn extra points by proofreading class notes, doing extra work when solving assignments, helping your classmates on the mailing list, and inventing and solving new problems.
  • You can lose points by asking questions that were already answered in class or on the mailing list in detail, or which otherwise demonstrate you did not study the assigned material.

About Code

  • Code must be indented and documented (each function/method must declare its purpose, input, and output).
  • Code in PDF documents is OK unless it is very long.
  • Short code is preferable to verbose code (as long as it does what required).
  • If you write a code to answer a question, answer the question in a clear and concise way, do not cut and paste un-necessary output or screenshots in your solution.
  • Code must use the libraries demonstrated in class unless you obtain permission to do otherwise.

About Office Hours

  • Office Hours and Advising Hours are not the same thing.
  • If you need to come for office hours, email me first. I do not receive students outside office hours.
  • For each class I have 1.5 office hours per week. For an average class that is 2 minutes per student. Be mindful about the time you take.
  • What do I do with my time? I teach, grade, and advise students, keep up with technology, do research, write papers, review papers, attend conferences, talk to employers, contribute to open source projects, write reference letters, etc. This is all part of my job.

Other considerations:

  • Do you need a job reference letter? If you earned an A in my class, you may ask.
  • Do you need a PhD reference letter? That takes more than an A. You need to show me in class that you can work independently, that you can help others, and that your knowledge is beyond class material.
There are many typos in the above paragraph. 1 extra point if you find them first.


In each assignment, project, exam, you earn points. Points are added together and converted to a final numerical grade. The numerical grade is converted to a letter grade using the table below:



All assignments and projects are individual projects unless otherwise stated. For group projects, each member must submit a report detailing the contribution of each member of the team. Only one member must submit the final project.

Computer programs

Plagiarism includes submitting as your own work a computer program that was written by someone else, or directly derived from someone else. A program is directly derived from someone else's program if it is identical to someone else's program except for minor changes such as reformatting, change of variable names, etc.

Using and citing electronic sources

In conducting research for this course, I encourage you to consult those standard reference tools, scholarly projects and information databases, and peer-reviewed academic journals that may be found on the Internet in addition to traditional print resources. Keep in mind, however, that those electronic sources must be acknowledged. Please see the Modern Language Academy Handbook, section 4.9, for information on the correct citation of these sources.

Cheating and Plagiarism

Academic integrity entails absolute honesty in one's intellectual efforts. The DePaul Student Handbook details the facets and ramifications of academic integrity violations, but you should be especially aware of the policies on cheating and plagiarism. Cheating is any action that violates University norms or an instructor's guidelines for the preparation and submission of assignments. Such actions may include using or providing unauthorized assistance or materials on course assignments, or possessing unauthorized materials during an examination. Plagiarism involves the representation of another's work as your own, for example: (a) submitting as one's own any material that is copied from published or unpublished sources such as the Internet, print, computer files, audio disks, video programs or musical scores without proper acknowledgement that it is someone else's; (b) paraphrasing another's views, opinions or insights without proper acknowledgement or copying of any source in whole or in part with only minor changes in wording or syntax even with acknowledgement; (c) submitting as one's own work a report, examination, paper, computer file, lab report or other assignment which has been prepared by someone else. If you are unsure about what constitutes unauthorized help on an exam or assignment, or what information requires citation and/or attribution, please ask your instructor. Violations may result in the failure of the assignment, failure of the course, and/or additional disciplinary actions.


CSC 210: Introduction to Computing

Note: This course is no longer offered. Brief history of computers, binary numbers, data representation, machine architecture concepts, algorithm development in pseudo code and in a high level language, including branching, looping, parameter passing, and arrays. PREREQUISITE(S): MAT101 or Math placement


CSC 241: Introduction to Computer Science I

An introduction to problem solving, algorithms and structured programming using a higher-level programming language. The course will focus on skills for developing algorithms, and for writing and debugging programs. Students will learn how and when to use loops, conditionals, and functional abstractions in the context of problems motivated by real world applications. PREREQUISITE(S): MAT 130 or Mathematics Diagnostic Test placement into MAT 140.

Google Group Python 101 video Python for Beginners More advanced book Online exercises Interactive Python More...

CSC 299: Sophomore Lab in Applied Computing

In this course, students investigate a particular application of computing. Students learn tools, methodologies, and formalisms used in particular computing area, and apply them to develop working systems. Courses stress student initiative in investigating the application context, learning new tools (including languages and APIs), studying algorithms and code examples, and working on projects. Topics will vary by the faculty member's interest and perspective. PREREQUISITE(S): CSC 242 or CSC 243

Google Group Instructions Download Lecture Notes Git Notes Notes More...

CSC 309: C++ for Programmers

This course covers the essentials of C and C++ programming, focusing primarily on the topics of memory management and object-oriented programming. Topics include pointers and dynamic allocation, operator overloading, copy constructors and destructors, inheritance and polymorphism. PREREQUISITE(S): CSC 242 or CSC 243 or CSC 224 or proficiency in another programming language.

Download Lecture Notes Download Class Code More...

CSC 402: Data Structures I

A first course on data structures in Java for graduate students. The course introduces Java programming from within the context of data structures. The course covers arrays, linked lists, stacks and queues, data structures supporting disjoint-set operations, and discusses recursion and performance analysis. The implementation of the basic operations on each data structure are discussed and analyzed in terms of their efficiency. PREREQUISITE(S): CSC 401

Google Group Java for Python programmers More...

Book Slides

Notes: Stacks and Queues Notes: Analysis Of Algorithms Demo: Binary Search Notes: Union Find Notes: ElementarySorts Notes: Mergesort Notes: Quicksort Demo: Partitioning Demo: Partitioning Dijkstra

CSC 403: Data Structures II

This is the second course on data structures in Java for graduate students. The course covers trees, heaps, associative arrays, hash tables, tries, and data structures for representing graphs. The implementation of the basic operations on each data structure are discussed and analyzed in terms of their efficiency. PREREQUISITE(S): CSC 402

Google Group Algorithms Animator CSC402 class notes Eclipse Tutorial Debugger Java for Python programmers Think Java cheatsheet More...


  • Basic OO programming techniques
  • Use of Eclipse and Android SDK
  • Use of testing
  • Understanding correctness of programming
  • Understanding performance characteristics of programs
  • Competence with iterative and recursive solutions to problems
  • Understanding of trees.
  • Understanding of hash tables.
  • Understanding of graphs.
  • Understanding of string algorithms.

Lecture Plan

  • Class 1: Review and Eclipse Setup
  • Class 2: Symbol Tables (3.1, 3.5)
  • Class 3: Binary Search Trees (3.2)
  • Class 4: Balanced Search Trees (3.3)
  • Class 5: Graphs (4.1,4.2)
  • Class 6: BFT and DFS (4.2)
  • Class 7: MSTs (4.3) and Shortest Paths (4.4)
  • Class 8: Hash Tables (3.4)
  • Class 9: String sorts (5.1) and Tries (5.2)
  • Class 10: Data Compression (5.5)

Book Slides

Elementary Symbol Tables Searching Applications Binary Search Trees Demo: Binary Search Trees Geometric Search Demo: Kd Trees Balanced Search Trees Demo: Red-Black BST Hash Tables Undirected Graphs Directed Graphs String Sorts Tries Demo: DemoKeyIndexedCounting Data Compression

CSC 416: Foundations of Computer Science II

(No Longer Offered) Implementation of data structures, including linked lists, stacks, queues, trees, balanced trees, hash tables, and graphs. Finite-state automata and grammars. PREREQUISITE(S): CSC 212 and CSC 415.

Download Lecture Notes

CSC 321: Design and Analysis of Algorithms

Techniques for designing algorithms including: analyzing algorithms (big-O, recurrence relations) and divide-and-conquer (quicksort, mergesort). Additional topics chosen from: the greedy method, dynamic programming, backtracking, branch-and-bound and string matching. PREREQUISITE(S): (CSC 301 or CSC 383 or CSC 393) and MAT140. MAT141 Recommended.

Class Code and Notes More...

CSC 431: Scientific Computing

This course presents fundamental numerical algorithms for solving problems in scientific computing and computational finance. Areas covered include: error analysis, computer arithmetic, linear algebra, optimization problems, numerical integration (solvers), ordinary differential equations (ODE). The emphasis of the course is on the design of the algorithms, and their analysis. Algorithms will be implemented using mathematical software. PREREQUISITE(S): CSC 402 and 2 course calculus sequence or consent of instructor.

Piazza Group Download Class Code Textbook Download Class Slides More...

CSC 438: Framework for Web Application Development

This course introduces concepts, techniques, technologies and APIs for web application development. The main focus of the course is on the Model-View-Controller design pattern employed by modern full-stack web frameworks. Concepts and techniques covered include client/server programming, database abstraction APIs, and asynchronous javascript. Examples of full-stack MVC frameworks include Ruby-on-Rails (written in Ruby), Django and TurboGears (written in Python). PREREQUISITE: CSC 407

Download web2py texbook Google group More...

CSC 503: Parallel Algorithms

Development, implementation, and applications of parallel algorithms. Parallel sorting, searching and graph algorithms, as well as other parallel algorithms, will be studied and implemented on both simulated and actual parallel machines. PREREQUISITE(S): CSC 421

Piazza Group Download Class Notes Download MPI Primer mdp_prim.h vprod.cpp More...

CSC 521: Monte Carlo Algorithms

A course about the use of random numbers for numerical computation with particular emphasis on implementation issues and applications in science and finance. Covered topics include: pseudo random number generators, the inversion method, the accept-reject method, discrete event simulations, multi-dimensional integration, the Metropolis and the Bootstrap algorithms. PREREQUISITE(S): (CSC 402 or CSC 404) and CSC 423 or consent of instructor

Download Class Code Google Group More...

TDC 561 Network Programming

The goal of this class is to study, evaluate and develop alternative client-server architectures using Sockets (API for TCP/IP) interface. The course covers the basic and advanced issues of TCP/IP networking programming such as multiprocesses, I/O multiplexing, multithreaded, multicasting and secure network programming. Application examples such as Internet browsing, instant messaging, proxy filtering and file transfer protocols are discussed.

Download Class Notes More...

IT 238: Interactive Web Scripting

Advanced scripting with javascript and the Document-Object More...l (DOM) for creating web pages. Object-oriented principles applied to user interfaces and event handling. Application of Ajax. Use of libraries such as jQuery. PREREQUISITE(S): IT 130


GAM 450: Physics for Game Developers

The course concentrates on Newton's Laws of Motion, kinematics and kinetics. This theory will be applied to problems that a game programmer must understand e.g. collisions between objects, projectiles and their trajectories, real-time simulation of motion. Special objects such as cars, aircraft and ships will be discussed. Students will apply and implement laws of physics. PREREQUISITE(S): CSC 403 and GAM 471 and GAME MATH

Download Class Code Assignments More...

MS in Computational Finance

Advising Guide Jobs Mailing List



My expertise is in Numerical Applications for Science and Physics. I have done research in the following areas:

  • Lattice Quantum Chromodynamics (application of Monte Carlo to High Energy Physics)
  • Quantitative Risk Management (application of Monte Carlo to Finance)
  • web2py (science portals and web automation for scientific workflow)