Python 3
High level programming language for algorithms with extensive library support (for example, Numpy for computation heavy numerical/scientific tasks). We recommend (but do not require) using Python 3 or Java for the course.
- Python 3: https://www.python.org/downloads/
- Python 3 Official Documentation: https://docs.python.org/3/
- Free Pycharm Development Environment: https://www.jetbrains.com/pycharm/
- Python tutorial: https://docs.python.org/3/tutorial/
- Python Anaconda Distribution (and package manager) for scientific computing: https://www.anaconda.com/distribution/
- Python Numpy tutorial: http://cs231n.github.io/python-numpy-tutorial/
- Numpy Documentation: https://docs.scipy.org/doc/
- Tutorial on optimizing scientific code: http://scipy-lectures.org/advanced/optimizing/
Java
High level object oriented programming language for scalable software design with extensive standard library support. We recommend (but do not require) using Python 3 or Java for the course.
- Primary Java Site and OpenJDK Java SE download
- Free IntelliJ Development Environment
- API documentation and general documentation
- The Official Tutorials
- W3 Schools Java Tutorials
Finding and Reading CompSci Research Papers
- ACM (primary Compsci professional society) Digital Library: https://dl.acm.org. To get access to full papers through Duke go to https://library.duke.edu/find, click on “Research Databases” and search for the ACM Digital Library.
- IEEE (primary engineering professional society) Xplore: https://ieeexplore.ieee.org/Xplore/home.jsp. To get access to full papers through Duke go to https://library.duke.edu/find, click on “Research Databases” and search for the IEEE Xplore Digital Library.
- Griswold notes on reading a research paper in CS: https://cseweb.ucsd.edu/~wgg/CSE210/howtoread
LaTeX
Recommended for typesetting mathematics heavy text. LaTeX is the standard for research publications in computer science. All assignments for the course must be typed; LaTeX is the recommended way, but is not required (if, for example, you prefer to use Microsoft Word or some similar software for writing reports).
- Get LaTeX on your device: https://www.latex-project.org
- Overleaf: online LaTeX editor: https://www.overleaf.com
- LaTeX tutorials and guides: https://www.overleaf.com/learn/latex/Tutorials
- Knuth notes on mathematical writing: http://jmlr.csail.mit.edu/reviewing-papers/knuth_mathematical_writing.pdf
Reviewing Discrete Math and Data Structures and Algorithms
These resources may be useful if you need to review topics from previous courses. You are not expected to review all of these materials, just pick and choose what is helpful and contact the instructor if you need help.
- You can find the website and helpful typed notes for a recent offering of CS 230 Discrete Math here: https://courses.cs.duke.edu/spring20/compsci230/.
- You might also like this free interactive online open introduction to discrete math textbook: http://discrete.openmathbooks.org/dmoi3/dmoi.html.
- For a recent offering of CS 201 Data Structures and Algorithms, see https://sites.duke.edu/cs201s2021/.
Git
Useful for version control of your code.
- Duke Computer Science Coursework GitLab: https://coursework.cs.duke.edu
- Duke OIT GitLab: https://oit.duke.edu/what-we-do/applications/gitlab
- Pro Git book: https://git-scm.com/book/en/v2
Gradescope
- If you are unfamiliar with Gradescope or aren’t sure how to submit your assignment, see: https://www.gradescope.com/help#help-center-section-student-workflow