Introduction to Computer Science and Programming
Summer 2024 / Term 3 (4 days, 16 lectures: 16 x 45 min. | 12 hours)
Course Period: July 8 - 11, 2024
- Lectures: Monday / Tuesday / Wednesday / Thursday @ 08:50-12:15 (Classroom: School of Computer Science,
201
- Map)
Instructor: Mustafa MISIR
(Duke Kunshan University, China), mustafa.misir [at] dukekunshan.edu.cn / mm940 [at] duke.edu
Computer Science (CS) is the study of computation, automation, and information. It spans theoretical disciplines such as algorithms, theory of computation, information theory, and automation, to practical disciplines including the design and implementation of hardware and software. Algorithms and Data Structures are central to CS. The Theory of Computation concerns abstract models of computation and general classes of problems that can be solved using them. The fields of Cryptography and Computer Security involve studying the means for secure communication and for preventing security vulnerabilities. Computer Graphics and Computational Geometry address the generation of images. Programming Language Theory (PLT) considers different ways to describe computational processes, and database theory concerns the management of repositories of data. Human-Computer Interaction (HCI) investigates the interfaces through which humans and computers interact, and Software Engineering focuses on the design and principles behind developing software. Areas such as Operating Systems, Computer Networks and Embedded Systems investigate the principles and design behind complex systems. Computer Architecture describes the construction of computer components and computer-operated equipment. Artificial Intelligence (AI) aims to synthesize goal-orientated processes such as problem-solving, decision-making, environmental adaptation, planning and learning found in humans and animals.
CS is an exciting, growing and challenging field that impacts every part of our lives. As an introductory course, fundamental knowledge on a variety of CS topics will be offered while providing essential computational problem-solving skills with hands on programming experience, in Python. This course is open to everyone, with no prerequisites. Successfully completing it will serve as a solid foundation for other courses in CS.
By the end of this course, you will be able to:
- grasp common computing and programming terms and concepts
- employ common programming patterns and abstractions to solve problems through Python
- formulate problems computationally and solve them through programming
Pre-requisites
There is no official textbook for this course. Still, the following books can be used as references.
Reference Books
- Introduction to Computation and Programming Using Python: With Application to Computational Modeling and Understanding Data, John V. Guttag (3rd Edition), 2021, MIT Press [ Source Code in Python ]
- Introducing Python for Computer Science and Data Scientists, Paul Deitel, Harvey Deitel (1st Edition), 2020, Pearson
- Computer Science: an Interdisciplinary Approach, Robert Sedgewick, Kevin Wayne (1st Edition), 2016, Addison Wesley
- Explorations in Computing: An Introduction to Computer Science and Python Programming, John S. Conery (1st Edition), 2014, Chapman and Hall/CRC
- Foundations of Computer Science: C Edition, Al Aho, Jeff Ullman (1st Edition), 1994 / 1995, W.H. Freeman (Free Book)
- Computer Science: An Overview, Glenn Brookshear, Dennis Brylow-Pearson (13th Edition), 2018, Pearson
- Computer Science Distilled: Learn the Art of Solving Computational Problems, Wladston Ferreira Filho (1st Edition), 2017, Code Energy LLC
- Data Structures and Algorithms in Python, Michael T. Goodrich, Roberto Tamassia, Michael H. Goldwasser (1st Edition), 2013, Wiley
- Python Programming: An Introduction to Computer Science, John Zelle (3rd Edition), 2016, Franklin, Beedle & Associates
- Problem Solving with Algorithms and Data Structures using Python, Brad Miller and David Ranum, Franklin (2nd Edition), 2011, Beedle & Associates (Free Book)
- Starting out with Python, Tony Gaddis (5th Edition), 2021, Pearson
- Python Programming and Numerical Methods: A Guide for Engineers and Scientists , Qingkai Kong, Timmy Siauw, Alexandre Bayen (1st Edition), 2020, Academic Press (Free Book)
- Think Python: How to Think Like a Computer Scientist, Allen B. Downey (2nd Edition), 2016, O'Reilly Press (Free Book)
- How to Think Like a Computer Scientist: Learning with Python 3, Peter Wentworth, Jeffrey Elkner, Allen B. Downey, Chris Meyers (3rd Edition), 2012 (Free Book)
- A Programmer's Guide to Computer Science (Vol. 1), William M. Springer II (1st Edition), 2019, Jaxson Media
- A Programmer's Guide to Computer Science (Vol. 2), William M. Springer II (1st Edition), 2020, Jaxson Media
- A Byte of Python, Swaroop C. H. (4th Edition), 2016 (Free Book)
- Project Python, Devin Balkcom, 2011 (Free Book)
- Python for Everybody: Exploring Data in Python 3, Charles Severance, 2016 (Free Book)
- Automate The Boring Stuff With Python, Al Sweigart (2nd Edition), 2019, No Starch Press (Free Book)
- Beyond the Basic Stuff with Python: Best Practices for Writing Clean Code, Al Sweigart (1st Edition), 2020, No Starch Press (Free Book)
- Python Programming in Context, Bradley N. Miller, David L. Ranum, Julie Anderson (3rd Edition), 2019, Jones & Bartlett Learning
- A Hands-On, Project-Based Introduction to Programming, Eric Matthes (2nd Edition), 2016, No Starch Press (Free Book)
- Learn Python 3 the Hard Way, Zed A. Shaw (1st Edition), 2017, Addison-Wesley
- Introducing Python: Modern Computing in Simple Packages, Bill Lubanovic (2nd Edition), 2019, O'Reilly Press
- Clean Code in Python: Develop Maintainable and Efficient Code, Mariano Anaya (2nd Edition), 2021, Packt
- The Self-Taught Computer Scientist: The Beginner's Guide to Data Structures & Algorithms, Cory Althoff (1st Edition), 2021, Wiley
- The Big Book of Small Python Projects: 81 Easy Practice Programs, Al Sweigart (1st Edition), 2021, No Starch Press (Free Book)
- Invent Your Own Computer Games with Python, Al Sweigart (4th Edition), 2016, No Starch Press (Free Book)
- Cracking Codes with Python: An Introduction to Building and Breaking Ciphers, Al Sweigart (1st Edition), 2018, No Starch Press (Free Book)
Lecture Notes / Slides
- Day 0: Programming (Optional)
- Day 1: Introduction, Background and Python Programming I [08/07] (Keywords: Terminology and Basics; Variables; Expressions; Statements)
- Computer Science: Basics
- Python Programming: Background
- Variables, Statements and Basic Operators
- Control Statements
- Daily Homework: TBA
- Day 2: Python Programming II [09/07] (Keywords: Strings; Lists; Dictionaries; Sets; Python: Turtle)
- Functions
- External Lecture Slides / Videos / Book Chapter:
Python for Everybody by Charles R. Severance - Chapter 4 (Functions)
- Book Chapter (Optional):
Introduction to Computation and Programming Using Python by John V. Guttag - Chapter 4.1: Functions and Scoping
- Book Chapter (Optional):
Introducing Python for Computer Science and Data Scientists by Paul Deitel, Harvey Deitel - Chapter 4: Functions
- Strings
- Sequence Collections: Lists
- Non-Sequence Collections: Dictionaries
- Daily Homework: TBA
- Day 3: Algorithmic Concepts and Computational Problems [10/07] (Keywords: Files; Algorithms; Computational Problems; Recursion; Searching; Sorting; Computational Complexity; Big-O)
- Files
- Recursion
- Searching and Sorting
- Computational Complexity
- Daily Homework: TBA
- Day 4: Elementary Data Structures [11/07] (Keywords: Abstract Data Types; Data Structures; Stack; Queues; Linked Lists)
- Stacks
- Queues
- Linked Lists
- Daily Homework: TBA
Grading
- Daily Programming Assignments: 4 x 25%
Reference Courses
Introductory Computer Science / (Python) Programming:
Reference (Example) Projects
Other Books / Articles
Computing / Computers + History:
-
Computing: A Concise History, Paul E. Ceruzzi (1st Edition), 2012, MIT Press
-
Code: The Hidden Language of Computer Hardware and Software, Charles Petzold (1st Edition), 2000, Microsoft Press
-
The Elements of Computing Systems: Building a Modern Computer from First Principles, Noam Nisan, Shimon Schocken (2nd Edition), 2021, MIT Press
-
The Constitution of Algorithms: Ground-Truthing, Programming, Formulating, Florian Jaton (1st Edition), 2021, MIT Press
-
Ideas that Created the Future: Classic Papers of Computer Science, Harry R. Lewis (1st Edition), 2021, MIT Press
- The Art of Doing Science and Engineering: Learning to Learn, Richard R. Hamming (1st Edition), 2005/2020, Gordon and Breach Science Publishers / Stripe Press
- Blown to Bits: Your Life, Liberty, and Happiness After the Digital Explosion, Hal Abelson, Ken Ledeen, Harry Lewis (2nd Edition), 2020, Addison-Wesley (Free Book)
- Lauren Ipsum: A Story About Computer Science and Other Improbable Things, Carlos Bueno (1st Edition), 2014, No Starch Press
-
The Big Score: The Billion-Dollar Story of Silicon Valley, Michael S. Malone (2nd Edition), 2021, Stripe Press
-
IBM: The Rise and Fall and Reinvention of a Global Icon, James W. Cortada, 2019, MIT Press
-
ENIAC in Action-Making and Remaking the Modern Computer, Thomas Haigh, Mark Priestley, Crispin Rope, 2016, MIT Press
-
Colossus: The Secrets of Bletchley Park's Codebreaking Computers, Jack Copeland (Ed.), 2006, Oxford University Press
Software Engineering / Development / Programming:
-
Modern Software Engineering: Doing What Works to Build Better Software Faster, David Farley (1st Edition), 2021, Addison-Wesley
-
Software Engineering, Ian Sommerville (10th Edition), 2015, Pearson
-
Engineering Software Products: An Introduction to Modern Software Engineering, Ian Sommerville (1st Edition), 2019, Pearson
-
Design Patterns: Elements of Reusable Object-Oriented Software, Gamma Erich, Helm Richard, Johnson Ralph, Vlissides John, Grady Booch (1st Edition), 1994, Addison-Wesley
-
Domain-Driven Design: Tackling Complexity in the Heart of Software, Evans Eric (1st Edition), 2003, Addison-Wesley
-
Software Engineering at Google: Lessons Learned from Programming Over Time, Titus Winters, Tom Manshreck, Hyrum Wright (1st Edition), 2020, O'Reilly
-
OO in One Sentence: Keep it Dry, Shy, and Tell the Other Guy. Hunt, A., Thomas, D., 2004. IEEE Software, 21(3)
-
Refactoring: Improving the Design of Existing Code, Martin Fowler (2nd Edition), 2018, Addison-Wesley
-
Clean Code: A Handbook of Agile Software Craftsmanship, Robert C. Martin (1st Edition), 2008, Pearson
-
Code Complete: A Practical Handbook of Software Construction, Steve McConnell (2nd Edition), 2004, Microsoft Press [ Online Course ]
-
The Pragmatic Programmer: Your Journey to Mastery, David Thomas, Andrew Hunt (2nd Edition), 2019, Addison-Wesley
Web Programming:
-
Internet and World Wide Web: How To Program, Paul Deitel, Harvey Deitel, Abbey Deitel (5th Edition), 2011, Pearson
-
Learning Web Design: A Beginner's Guide to HTML, CSS, JavaScript, and Web Graphics, Jennifer Robbins (5th Edition), 2018, O'Reilly
-
Web Programming with HTML5, CSS, and JavaScript, John Dean (1st Edition), 2019, Jones & Bartlett Learning
-
HTML and CSS QuickStart Guide, David DuRocher (1st Edition), 2021, ClydeBank
-
HTML and CSS: Design and Build Websites, Jon Duckett (1st Edition), 2011, John Wiley & Sons
-
JavaScript: The Definitive Guide, David Flanagan (7th Edition), 2020, O'Reilly
-
Eloquent Javascript: A Modern Introduction to Programmin, Marijn Haverbeke (3rd Edition), 2018, No Starch Press
Foundations of Computer Science:
-
Concrete Mathematics: A Foundation for Computer Science, Ronald L. Graham, Donald E. Knuth, Oren Patashnik (2nd Edition), 1994, Addison-Wesley
-
Mathematics for Computer Science, Eric Lehman, F. Thomson Leighton, Albert R. Meyer (1st Edition), 2017 (2018R), Samurai Media (Free Book) [ 6.042: Mathematics for Computer Science (MIT) - Materials ]
-
Mathematics: A Discrete Introduction, Edward A. Scheinerman (3rd Edition), 2012, Cengage Learning
-
Discrete Mathematics and Its Applications, Kenneth H. Rosen (8th Edition), 2019, McGraw-Hill
-
Discrete Mathematics: An Open Introduction, Oscar Levin (3rd Edition), 2021 (Free Book)
-
Essential Discrete Mathematics for Computer Science, Harry Lewis, Rachel Zax (1st Edition), 2019, Princeton University
-
Connecting Discrete Mathematics and Computer Science, David Liben-Nowell (1st Edition), 2022, Cambridge University Press
-
Book of Proof, Richard H. Hammack (3rd Edition), 2018 (Free Book)
-
Applied Combinatorics, Mitchel T. Keller, William T. Trotter (3rd Edition), 2021 (Free Book)
-
A Decade of the Berkeley Math Circle: The American Experience (Volume 1, Volume 2), Zvezdelina Stankova, Tom Rike (Eds), 2008, American Mathematical Society
-
How to Think Like a Mathematician: A Companion to Undergraduate Mathematics, Kevin Houston (1st Edition), 2009, Cambridge University Press
-
The Art of Problem Solving (Vol. 2): And Beyond, Richard Rusczyk, Sandor Lehoczky (7th Edition), 2006, AoPS Incorporated
-
The Art of Problem Solving (Vol. 1), Sandor Lehoczky, Richard Rusczyk (7th Edition), 2006, AoPS Incorporated
-
What Is Mathematics? An Elementary Approach to Ideas and Methods, Richard Courant, Herbert Robbins (2nd Edition), 1996, Oxford University Press
Algorithms + Data Structures:
- Introduction to Algorithms, Thomas H. Cormen, Charles E. Leiserson, Ronald L. Rivest and Clifford Stein (3rd Edition), 2009, MIT Press (Free Book: ProQuest - Duke U.) [ Lecture Slides ]
- Algorithm Design, John Kleinberg, Eva Tardos (1st Edition), 2005, Pearson - Addison Wesley [ Lecture Slides & Examples ]
- Algorithms, Sanjoy Dasgupta, Christos Papadimitriou, Umesh Vazirani (1st Edition), 2006, McGraw-Hill
- Algorithms, Robert Sedgewick, Kevin Wayne (4th Edition), 2011, Addison-Wesley
- Introduction to the Analysis of Algorithms, Robert Sedgewick, Philippe Flajolet (2nd Edition), 2013, Addison-Wesley [ Lecture Slides & Videos ]
- The Algorithm Design Manual, Steven Skiena (3rd Edition), 2020, Springer [ Old: Lecture Slides & Videos - New: Lecture Slides & Videos ]
- Foundations of Algorithms, Richard Neapolitan (5th Edition), 2014, Jones & Bartlett Learning
- Applying Reinforcement Learning on Real-World Data with Practical Examples in Python, Philip Osborne, Kajal Singh, Matthew E. Taylor, 2022, Springer (Free Book)
- Data Structures and Algorithm Analysis in C++, Mark A. Weiss (4th Edition), 2014, Pearson [ Source Code in C++ ]
- Algorithm Design and Applications, Michael T. Goodrich, Roberto Tamassia (1st Edition), 2015, Wiley
- Algorithms Illuminated (Part 1): The Basics, Tim Roughgarden (1st Edition), 2017, Soundlikeyourself Publishing [ Lecture Slides & Videos ]
- Algorithms Illuminated (Part 2): Graph Algorithms and Data Structures, Tim Roughgarden (1st Edition), 2018, Soundlikeyourself Publishing [ Lecture Slides & Videos ]
- Algorithms Illuminated (Part 3): Greedy Algorithms and Dynamic Programming, Tim Roughgarden (1st Edition), 2019, Soundlikeyourself Publishing [ Lecture Slides & Videos ]
- Algorithms Illuminated (Part 4): Algorithms for NP-Hard Problems, Tim Roughgarden (1st Edition), 2020, Soundlikeyourself Publishing [ Lecture Slides & Videos ]
- Introduction to the Design and Analysis of Algorithms, Anany Levitin (3rd Edition), 2011, Addison-Wesley
- Design and Analysis of Computer Algorithms, Alfred Aho, John Hopcroft, Jeffrey Ullman (1st Edition), 1974, Addison-Wesley
- Data Structures and Algorithms, Alfred Aho, Jeffrey Ullman (1st Edition), 1983, Pearson
- Fundamentals of Computer Algorithms, Ellis Horowitz, Sartaj Sahni (1st Edition), 1984, CS Press
- A Guide to Algorithm Design: Paradigms, Methods, and Complexity Analysis, Anne Benoit, Yves Robert, Frederic Vivien (1st Edition), 2014, CRC
- Algorithms: Sequential, Parallel, and Distributed, Kenneth A. Berman, Jerome L. Paul (1st Edition), 2004, Course Technology
- The Design and Analysis of Algorithms, Dexter C. Kozen (1st Edition), 1992, Springer
- Algorithms, Jeff Erickson (1st Edition), 2019 (Free Book)
- The Design of Approximation Algorithms, David P. Williamson, David B. Shmoys (1st Edition), 2011, Cambridge University (Free Book)
- Approximation Algorithms, Vijay V. Vazirani (1st Edition), 2003, Springer
- Introduction to the Theory of Computation, Michael Sipser (3rd Edition), 2013, Cengage
- What Can Be Computed?: A Practical Guide to the Theory of Computation, John MacCormick (1st Edition), 2018, Princeton University
- Computational Complexity: A Modern Approach, Sanjeev Arora, Boaz Barak (1st Edition), 2009, Cambridge University (Free Draft)
- Algorithms and Complexity, Herbert S. Wilf (2nd Edition), 2002, CRC
- Complexity Theory: Exploring the Limits of Efficient Algorithms, Ingo Wegener (1st Edition), 2005, Springer
- Automata, Computability and Complexity: Theory and Applications, Elaine A. Rich (1st Edition), 2007, Pearson (Free Book)
- Think Complexity, Allen B. Downey (2nd Edition), 2016 / 2018, Green Tea Press / O'Reilly Press (Free Book) [ Source Code in Python ]
- Dive Into Algorithms: A Pythonic Adventure for the Intrepid Beginner, Bradford Tuckfield (1st Edition), 2021, No Starch Press
- Algorithms in a Nutshell: A Practical Guide, George T. Heineman, Gary Pollice, Stanley Selkow (2nd Edition), 2016, O'Reilly Press (Partially Python)
- A Common-Sense Guide to Data Structures and Algorithms: Level Up Your Core Programming Skills, Jay Wengrow (2nd Edition), 2020, Pragmatic Bookshelf [ Source Code in Python, Ruby and JavaScript ]
Paradigms of Programming Languages:
-
Programming Language Pragmatics, Michael L. Scott (4th Edition), 2015, Morgan Kaufmann
-
Types and Programming Languages, Benjamin C. Pierce (1st Edition), 2002, MIT Press
-
Essentials of Programming Languages, Daniel P. Friedman, Mitchell Wand (3rd Edition), 2008, MIT Press
Other Materials / Resources
- Oxford Quick Reference: A Dictionary of Computer Science by Andrew Butterfield, Gerard Ekembe Ngondi, Anne Kerr, 2016
- Official Python Documentation: Tutorial & Glossary
- An Overview of Python Data Visualization libraries
- Philip W. L. Fong, 2009. Reading a Computer Science research paper. ACM SIGCSE Bulletin, 41(2), pp.138-140
- You and Your Research by Richard Hamming (Bell Labs / NPS). Bell Communications Research Colloquium Seminar, 7 March 1986
- An Online LaTeX Editor: Overleaf
- LaTeX Tutorial (Overleaf): Learn LaTeX in 30 minutes
- The Not So Short Introduction to LaTeX by Tobias Oetiker, Hubert Partl, Irene Hyna, Elisabeth Schlegl, 2021
- Git Tutorials & Cheat Sheet by Atlassian
- Git Cheat Sheet by Github
- Pro Git (a book on Git) by Scott Chacon and Ben Straub, 2021
- Version Control with Git by Software Carpentry
-
How To Speak / Present (Video) by Patrick Winston (MIT)
|