If you are a teacher or interested in the design of the course, see the meta document.
This course will advance students’ understanding of topics related to computational science and engineering, and advance their skills in applying techniques to solve research problems using high-level programming languages. The course will build on existing abilities in computer programming to cover topics related to computational modeling and scientific software development. Students will gain experience in applying available packages and libraries, as well as developing software to solve problems related to their own research interests. Students will also gain experience in working collaboratively and openly on scientific computing projects.
By the end of this course, you will be able to:
use high-level programming language to analyze and/or solve practical research problems;
apply principles of modern computational science and engineering, reproducibility, and open science to your research;
evaluate, visualize, write about, and publish computational research results; and
develop and share an open-source research software package that solves a problem in your research area.
These won’t be enforced by the instructor, but you will be pretty lost without understanding those concepts. If you need a refresher, take a look at the Beginner Materials.
We will dive into the nuances of JavaScript, how prototypal inheritance compares to classical inheritance, and how this can be used to build dynamic and complex web applications. Modern tools like jQuery and BackboneJS will be discussed, but students will learn the building blocks of these frameworks and after this course be able to understand what is happening under the hood. The focus will be on development for browsers, though most applies to other systems like Node.js, Phonegap, etc. Topics covered include:
Topics will be demonstrated through live-code examples/slides. Additional exercises will completed in-class.
All assignments will be listed within the Course Outline.
Approximately three to five short assignments will be given. Working together on assignments is encouraged, but you are expected to submit original work—not to copy work from other students, past students, solution manuals, etc. Any plagiarized, copied assignment problems, or copied electronic files will not be counted for any student involved. Late assignments will not be accepted without prior approval.
In addition to the shorter assignments, the main focus of the course will be a project that involves developing a new software package targeted at your own research area, and ideally something you would use towards your thesis research. All of the concepts discussed in the class, including testing, documentation, and open sharing of the software will be applied to the project.
Lecture slides: https://softwaredevengresearch.github.io/getting-started/
course-projects
repository in the GitHub organization (you must have accepted the invitation to the organization), in the proposals
folder. Name your document LastName-project-proposal.md
; notice the .md
file extension, which indicates a Markdown file. (Markdown is a lightweight plaintext format used commonly for things like READMEs.)
proposals
folder via the web interface to submit your proposal as a pull request. (The “Upload files” button will not work, since you do not have write permissions for this repository.) Alternatively, you can:
git push
)Lecture slides: https://softwaredevengresearch.github.io/remote-version-control
Lecture slides: https://softwaredevengresearch.github.io/lecture-packaging-testing
pytest
to automate testingLecture slides: https://softwaredevengresearch.github.io/lecture-CI-documentation
pytest-cov
For Monday 30 April:
Guest lecture from Prof. Cory Simon.
Introduction to the Julia language, via a live coding demo of a Monte Carlo simulation of Buffon’s Needle: https://simonensemble.github.io/2018/04/11/buffon/
Lecture slides: https://softwaredevengresearch.github.io/lecture-parallel-computing
Lecture slides: https://softwaredevengresearch.github.io/lecture-classes-objects/
Lecture slides: https://softwaredevengresearch.github.io/lecture-packaging-distribution/
Link to video: “Performance Python: Seven Strategies for Optimizing Your Numerical Code” by Jake VanderPlas
Link to Jupyter notebook: https://gist.github.com/jakevdp/256c3ad937af9ec7d4c65a29e5b6d454
Lecture slides: https://softwaredevengresearch.github.io/lecture-files-commandline/
Lecture slides: https://github.com/SoftwareDevEngResearch/syllabus/blob/gh-pages/lecture-open-citation-repro.pdf
This class assumes you are confident with this material, but in case you need a brush-up…
allclose
functionYou are expected to discuss issues or concerns with assignment/project grades with me within one week after a grade is returned.
Academic or Scholarly Dishonesty is defined as an act of deception in which a Student seeks to claim credit for the work or effort of another person, or uses unauthorized materials or fabricated information in any academic work or research, either through the Student’s own efforts or the efforts of another.
For more information about academic integrity and relevant University policies/procedures, please refer to the Student Conduct web site and the section on Academic Regulations in the OSU Schedule of Classes. If you have any questions or concerns about this policy, don’t hesitate to contact me.
It is my expectation that any work submitted for this course is a fair and accurate representation of your own abilities and efforts, or in the case of team work, those of the team. Evidence to the contrary will prompt investigation and any dishonest acts will be dealt with accordingly.
From Aidan Feldman’s Advanced Javascript class:
Reuse and building upon ideas or code are major parts of modern software development. As a professional programmer you will never write anything from scratch. This class is structured such that all solutions are public. You are encouraged to learn from the work of your peers. I won’t hunt down people who are simply copying-and-pasting solutions, because without challenging themselves, they are simply wasting their time and money taking this class.
Please respect the terms of use and/or license of any code you find, and if you reimplement or duplicate an algorithm or code from elsewhere, credit the original source with an inline comment.
I am committed to the principle of universal learning. This mean that our classroom, virtual spaces, practices, and interactions should be as inclusive as possible. Mutual respect, civility, and the ability to listen and observe others carefully are crucial to universal learning. Students are expected to follow the Code of Student Conduct: http://studentlife.oregonstate.edu/sites/studentlife.oregonstate.edu/files/code_of_student_conduct.pdf
For any student with particular needs:
Accommodations for students with disabilities are determined and approved by Disability Access Services (DAS). If you, as a student, believe you are eligible for accommodations but have not obtained approval please contact DAS immediately at 541-737-4098 or at http://ds.oregonstate.edu. DAS notifies students and faculty members of approved academic accommodations and coordinates implementation of those accommodations. While not required, students and faculty members are encouraged to discuss details of the implementation of individual accommodations.
This syllabus website and content is based on Aidan Feldman’s Advanced JavaScript class.