Syllabus
CS 251 Spring 2020
Principles of Programming Languages1
- Updates for Remote Instruction in Spring 2020
- What is CS 251?
- When Should You Take CS 251?
- Logistics
- Course Materials
- Course Work
- Academic Support
Updates for Remote Instruction in Spring 2020
The syllabus has been updated in response to the College’s move to remote instruction in Spring 2020. Acknowledging the local and global challenges surrounding our new learning circumstances, our tentative goal is to cover 2/3 of the remaining ideas and 1/2 of the remaining course work from a typical CS 251 semester, running at a somewhat slower pace. We will play this by ear, adjusting to circumstances as they arise.
Changes are shown as deletions additions. The most important changes are:
- Logistics for instruction and academic support have been updated for remote interaction.
- Course work and topics have been trimmed, including removal of exams, due to the shorter time available and the overheads introduced with the sudden switch to remote instruction. Grade weightings of course work components have been adjusted accordingly.
- Grading is now on a mandatory credit/no-credit basis.
What is CS 251?
CS 251 examines principles in the design and implementation of programming languages.
Goals
This course aims to prepare you to:
- Leverage powerful programming language features in languages that support them.
- Quickly and effectively learn and evaluate new programming languages by focusing on key language dimensions.
- Identify the model of computation underlying a programming language and recognize whether a given programming language is a good fit for a given problem.
- Reason rigorously about the execution of programs using precisely defined models.
- Understand key aspects of metaprogramming and programming language implementation approaches.
- Implement a well-specified model by applying lessons from language design to construct a program, library, API, domain-specific language, or programming language.
- Approach problem-solving through the lens of language design / program analysis.
- Develop and apply skills for independent learning, critical thinking, and problem-solving as a self-reliant computer scientist.
Topics
We explore programming languages in 4 parts, with the theme of metaprogramming – specifying and implementing programming language features with other programs – appearing throughout the course. The course home page hosts the working schedule. Expect adjustments in the schedule from time to time.
- How to Program
- syntax, dynamic semantics, and their meta-languages
- expressions, bindings, and the environment model
- pairs, lists, and GC
- local bindings and scope
- first-class and higher-order functions
- lexical scope and function closures
- tail recursion
- immutability and referential transparency
- What’s in a Type
- static types
- datatypes and pattern-matching
- parametric polymorphism (generic types)
- currying and partial application
- restricted mutable state
- abstract types
- type inference
- static vs. dynamic typing
- When Things Happen
- delayed evaluation and laziness
- parallelism
- concurrency
- Why a Broader PL Mindset
- problem decomposition in functional vs. object-oriented programming
- deductive programming
- program analysis
- domain-specific languages
- approaching problems as a language designer / program analyst
When Should You Take CS 251?
Prerequisite: CS 230 is required to enroll in CS 251. We assume extensive familiarity with data structures, comfort with basic big-O analysis, familiarity with recursion, and general maturity in programming.
Recommendations:
- Take CS 251 fairly close to when you take CS 240, but not at the same time. You will draw interesting connections between them. CS 240 and CS 251 both have heavier applied workloads, though, so they can be tough to balance in one semester. CS 240 and CS 251 each pair better with one of CS 231 or CS 235, which are both heavy on proof-style work. If you are looking to take 2 core courses at once, pairing one build-it course with one prove-it course is a good plan.
- Take CS 251 in your sophomore or junior year. You will level up your programming and problem-solving skills for other courses, interviews, etc.
Please talk to the instructors if you have any questions or concerns or if you are considering credit/non grading. We are happy to work with you to make your time in CS 251 most effective and rewarding for you.
Logistics
The CS 251 Spring 2020 website, Q&A forum, and email list carry schedule, materials, and timely announcements.
Class Meetings
During remote instruction, lectures are replaced as follows:
- Topic videos and readings (on calendar/topics page): Watch, read, practice examples, and post questions on the Q&A forum on your own time before each scheduled class meeting. You are encouraged to coordinate with classmates to team up on trying practice problems. Everybody answers questions on the Q&A forum.
- Drop-in class meetings: Tuesday/Friday 11:20am - 12:35pm, online meeting (not recorded), Ben Wood
Scheduled class times will be used as follows:- The first part of the time will be a group drop-in time in SCI L035 when we follow up on any questions from the forum about the most recent lectures that still need clarification.
- After lingering lecture questions are finished, we will dedicate the remainder of scheduled class time to standard drop-in hours with a queue for individual or small group help.
Participation/attendance in scheduled class-time drop-in meetings is optional. Other drop-in hours and appointments are also available.
Please silence and stow phones out of sight during class meetings. Taking handwritten notes in class tends to help distill and remember key ideas more effectively than referring back to prepared material or typed notes. If you feel strongly that a laptop or tablet works better for your notetaking, you may use it for that purpose. We may sometimes plan computer-based activities in class. We are happy to help arrange alternative accommodations in class if needed.
Q&A Forum
All students and course staff have been enrolled in a question-and-answer (Q&A) forum (using Piazza). As we work together remotely for the rest of the semester, the Q&A forum should be your first stop for all questions on lectures, content, concepts, assignments, logistics, and tools. In addition, we highly encourage you to respond to other students’ questions when you can offer relevant information. Widespread forum use will help:
- Find that others have already asked (and answered) your question.
- Improve response time and offer a variety of explanations/perspectives for your questions.
- Centralize our collective knowledge at a time when more of our communication needs to be asynchronous.
- Practice skills for effective technical communication.
- Reduce instructor effort responding to common questions.
- Help the class continue to feel “together” despite being spread across locales and time zones.
To encourage forum use, instructors may respond to forum-ready email questions by asking you to post to the forum (or by not responding at all).
Things that belong in the forum:
- Questions about lectures / concepts.
- Questions about assignments. (Do not include your code or nontrivial details of your approach.)
- Questions about error messages.
- Clarification questions.
- Tool troubleshooting.
- Logistics questions.
- Respectful, informative responses and discussions.
- Occasional silliness.
- Many others…
Things that do NOT belong in the forum:
- Answers or solutions to parts of questions or problem you have been asked to answer or solve in assignments.
- Any code for assignments that is not provided starter code.
- Detailed descriptions of algorithms/solutions, in English, C, or any human/programming language.
- Personal private communication, such as grade discussions, personal issues or concerns, etc. These should go through appointments or email with instructors.
- Disrespectful responses.
If you care:
- You can adjust settings for notifications of questions/responses on the forum.
- You are encouraged to ask and answer questions with your name, but you may also ask questions anonymously on the forum if you are not comfortable “not knowing” something in front of your classmates. Rules for respectful discourse apply in all cases.
Tips for Asynchronous Lectures
Each topic will have videos attached at least a few days (usually more) ahead of the associated dates on the calendar. Your job is:
-
Watch the videos.
- You can view them on YouTube (nocookie version without tracking) or download/watch the MP4 files directly.
- Take notes like you would in class.
- You might find it helpful to download a copy of the slides to follow along or take notes.
- It’s fine to pause and take breaks whenever you want!
- You do not need to watch all the videos from one topic in one sitting or even one day. As the calendar shows, some topics are even intended to extend over multiple logical class-time units.
-
When the talking Ben head says to “try this,” please pause the video and actually try it, just like you would in class when we do an exercise together.
- In fact, if you coordinate ahead with a classmate, you might be able to get a partner to work on some of these exercises together.
- Don’t worry, the talking Ben head will wait for you in whatever bizarre pose he struck when you hit pause.
-
If you are confused about something or have a question:
- Make a note to yourself, and try the next video (or a couple) within the list for the topic. It might cover your question!
- If you still have the question, check in the topics folder
on the Piazza Q&A forum to see if the question has
been asked already. If not, ask it yourself (add it to the
topics folder and
#tag
it as you see fit). - If you think you understand how to answer another student’s question or add new insight to an existing answer, do it! Helping each other out will help the class go smoother for everyone and keep a sense of community even though we are all remote.
-
If you still want to ask questions, review more, here what others are asking, or just have a little class contact, then join the class-time drop-in hours during our regularly scheduled classroom meetings. This time will be used for open questions in a group setting. We will start by addressing any questions from the Q&A forum that seem unresolved, relevant, and important. So make sure to post if you want to prioritize your question during class time!
Norms for Group Audio/Video Meetings
To help make our group audio/video meetings more manageable, please:
- Do not share links or passwords for audio/video meetings outside the students in the class.
- Keep your video off unless the instructor offers otherwise. You are never required to show video and by default we will ask you to keep it off.
- Keep your audio muted when you are not speaking.
- If you have a question or wish to speak, use the “raise hand” feature. We might sometimes ask people to speak up directly for attention instead.
- If you have a phone-style set of headphones and microphone (or another better-than-laptop-quality microphone), use it.
- Try to call in from a relatively quiet / non-distracting environment.
- Do not join a meeting from the same room as another person who has joined the meeting unless using headphones. (This avoids audio feedback problems.)
Staff and Hours
Schedule an appointment or find a drop-in slot with the sign-up links below.
The CS 251 staff hours calendar contains up-to-date hours. This table includes the regular weekly staff schedule, but not temporary changes.
Role | Name | Calendar, .ics) | Drop-in/Appointment Sign-up (
---|---|---|
Instructor | Ben Wood |
Tuesday/Friday 3:30pm-5:00pm drop-ins, variable appointments. Sign up here or email for other appointment time. See also: drop-in class meetings for group questions |
Tutor | Julia Bowers |
Monday 9:00pm-10:00pm, Wednesday 5:00pm-6:00pm, Thursday 9:00pm-10:00pm. Sign up here. |
Tutor | Lauren Luo |
Sunday 10:00pm-11:59pm, Wednesday 10:00pm-11:59pm. Sign up here. |
Course Materials
All course materials and assignments are linked from the calendar on the course website.
Acknowledgments
This course draws (with permission) on materials from previous versions of CS 251 at Wellesley by Lyn Turbak, Ben Wood, and Randy Shull, as well as materials by Dan Grossman at the University of Washington and Steve Freund at Williams College. Some parts of the Honor Code guidelines are adapted from the Williams College Computer Science Department Honor Code Guidelines. The late policy is based on ideas from Ada Lerner.
Course Work
topic pencil code exam
Course work for CS 251 consists of reading and class exercises, assignments, and exams. The Honor Code applies to CS 251 course work as defined below.
Reading and class exercises: Each topic on the course schedule includes reading to try before class and review after class. Class meetings and group exercises assume cursory familiarity with basic ideas from assigned readings, but not deep understanding. Effective technical reading is an acquired skill. The first reading assignment includes tips on how to read.
Assignments: The heart of CS 251 is a series of pencil code assignments that apply programming languages concepts. A working solution is just the start of completing an assignment. Style and clear explanations are major components of assignment assessment. Expect to invest significant weekly effort on assignments, including discovering and learning extensions to the ideas presented in class.
Exams: One midterm and one final exam are marked on the course schedule.
- exam The midterm exam covers roughly the first two parts of the course.
- exam The final exam covers all topics from the course, with a focus on the latter parts.
Exams assess your individual mastery of key concepts. Exams have been canceled for Spring 2020.
Grades
Percentage | Letter |
> 95.0 | A |
≥ 90.0 | ≥ A- |
> 86.6 | ≥ B+ |
> 83.3 | ≥ B |
≥ 80.0 | ≥ B- |
> 76.6 | ≥ C+ |
> 73.3 | ≥ C |
≥ 70.0 | ≥ C- |
≥ 60.0 | ≥ D |
< 60.0 | F |
Assignments comprise 60% 100% of your course grade. This component is calculated by dividing the sum of all awarded points by the sum of all available points. This weights each assignment according to its labeled point value.
Exams comprise 40% of your course grade.
Course grade percentages are converted to letters as shown in the accompanying table. The minimum percentage required to achieve a given letter grade may be adjusted universally (across all students) downward (only to students’ benefit), but never upward or individually. If your percentage grade satisfies the constraint in the left column, then your letter grade will satisfy the constraint in the right column of the same row. Each student’s percentage grade is calculated independently without consideration of other students’ grades. Percentage grades are converted to a letter by applying the same universal mapping for all students.
In accordance with College grading policy for Spring 2020, mid-semester grades will be reported in Workday and all final course grades will be awarded on a mandatory basis of credit with distinction/credit/no credit. For individual elements of course work, we will continue to deliver number-based grading information.
Recall that, in a normal semester, the minimum grade to earn credit under credit/no credit grading is C. The minimum grade to pass and earn credit under normal letter grading is D. Notice that, by the grading table, this is a large gap: the minimum grade to achieve CR on the credit/non basis is more than 13 percentage points – a full 1/3 of the range of all passing grades – higher than the minimum grade to pass under letter grading. For comparison, that is the same distance between the minimum C+ grade and the minimum A- grade. For this reason, we advise that you not elect credit/non grading if you are concerned about potential poor performance in the course. Better to pass this time than to receive no credit retake the course. It is clear that in this semester’s extraordinary circumstances, expectations will be different. Adjusting for this shift, the distinction between credit and no credit in this semester looks closer to the distinction between pass and fail in a normal semester.
We will interpret final course grade conversions with consideration for the effects of the sudden unanticipated change in semester logistics and grading policies. Despite reasonable efforts, difficulties in the new learning circumstances that are outside your control may well impact your ability to learn or perform through the rest of the course. We will assign grades in a way that is intended to avoid punishing this effect. In practice, we hope you will interpret the remainder of the semester as a learning opportunity that may happen to raise your grade. Grade conversion for CS 251 in Spring 2020 will be performed in a way that satisfies these criteria:
- The grade of MNCR (no credit) will be assigned for those who demonstrate unsatisfactory mastery of course topics/learning goals in both the standard and the remote parts of the course.
- The grade of MCR (credit) will be assigned for those who demonstrate satisfactory mastery of course topics for the semester overall, considering the circumstances. (This includes students who were demonstrating satisfactory mastery during the standard part of the course, but whose circumstances may cause them to fall short of this bar in the remote part of the course.)
- The grade of MCRD (credit with distinction) will be assigned to those who clearly reach the bar for MCR and additionally demonstrate distinguished achievements or contributions. Routes to consideration for MCRD include outstanding mastery of course topics/learning goals or outstanding contributions towards others’ learning in the course (including through supportive and effective participation in the Q&A forum).
If you are concerned about how the College grading policy for this semester affects your future “use” of grades, I would be happy to write a letter about the quality of your work in CS 251.
Anonymous Grading
CS 251 makes a best effort to grade assignments and exams anonymously, meaning that, under normal circumstances, no student’s identity is associated with submitted work until all on-time submissions for that assignment/exam have been graded in full. Once anonymous grading is complete, each student is identified and the unadjusted results are attached to the student’s record.
Anonymous grading helps us improve consistency and fairness, reduce any effects of implicit bias, and make clear that the course staff is grading your work, not you. To assist in maintaining anonymity, it is important to avoid listing your name within your work except where specified.
Limitations: The anonymity is “best effort” in that we can reveal the student identity associated with any submission at any time, but it is inconvenient to do so and we avoid it under normal circumstances. We try to detect submission problems early, before grading begins, so that they can be resolved without affecting anonymity. Nonetheless, anonymity can be compromised in cases where we discover a submission problem only later during grading and request that you resubmit, or when you submit late work after we graded on-time submissions.
Late Policy
Assignment work is where the majority of your CS 251 learning will occur. Assignments are due at the date and time specified in the assignment manifest. Deadlines synchronize with class material and scheduled academic support (drop-in hours) to help ensure smooth forward progress in the course. You are strongly advised to keep up with deadlines. CS 251 moves quickly. Falling behind on assignments can make the work more difficult.
Sometimes, however, prioritizing completion of an assignment by the deadline may not be the right personal choice for you. To encourage you to learn from the assignments while also affording flexibility when it benefits your health and well-being, you may use either of the following mechanisms to submit late assignment work without penalty:
- Self-serve 48-hour late pass: You may delay any assignment
deadline by 48 hours by submitting this late pass notification
form before the original deadline. There is no
need for any other communication in this case.
- The form requires a brief summary of progress (e.g., “#1 done, #2 stuck, #3 started” or “not started”) and whether you anticipate seeking support (drop-in hours/appointment) for the assignment (yes/no).
- If the 48-hour extended deadline falls during a break or weekend, it is automatically moved to the final day of that break or weekend.
- Custom extension: If you need to extend an assignment
deadline more than 48 hours, or if you did not submit a late pass
notification in time, you must email the instructor with an initial
timeline and plan for when and how you will complete the
assignment and report on progress.
- We will adjust the plan together to make sure it is reasonable. I may ask you to prioritize current work first. If you need custom extensions on more than assignments, I may ask you to check in with your class dean to make sure you are getting the support you need managing your course load this semester.
- You are never required to discuss details of your personal circumstances with me to receive an extension, although I am happy to lend an ear. If you choose to share, please note that my reporting duties prevent me from holding strict confidentiality in all cases.
The above extension mechanisms are subject to the following limitations:
- No extension may surpass the last day of Reading Period unless your class dean supports it. The purpose of this restriction is to ensure that you have adequate time to prepare for the final exam in this course and your other courses.
- Feedback and grading for work submitted under an extension will be completed as time allows. This may take arbitrarily long, possibly past the end of classes and exams. The likelihood and likely magnitude of delay grow with the length of the extension.
Exams are not subject to extensions. In-class exam dates are fixed fixed, as noted on the course schedule. Mark this on your calendar. Please arrange accommodations with me at least 3 days ahead of the scheduled in-class exam. If you are unable to make the exam time at the last minute due to an emergency, we can schedule a make-up exam with the support of your class dean or health services. This sets a common standard for all students and ensures you are getting the support you need for your emergency.
Honor Code
The Wellesley Honor Code applies to CS 251, including through CS 251-specific policies for acceptable resources (collaboration, assistance, and reference) in course work. The general spirit of these policies should not be surprising, but the details are key to boosting the quality of your learning and maintaining a fair and rigorous academic environment for you and your classmates.
In summary:
- Ungraded practice activities support initial learning, so they are free of restrictions. topic
- Graded synthesis assignments support deeper learning and independence, so they require that your submitted work be your own. These assignments require you to think critically and make connections to formulate logic and implement solutions independently, so they restrict acceptable resources significantly. pencil code
- Graded examinations measure your independent mastery of concepts, so they require that your submitted work be your own, without using any resources. exam
Full definitions are linked from the summary and appear below. Please read the entire policy. If in doubt about details, please ask for clarification. Violations of these policies are handled through the appropriate Honor Code charge or resolution processes.
Ungraded Practice Activities topic
Types: reading, study, class exercises
Policy: You may collaborate, receive and provide assistance, and consult reference without restriction.
Graded Synthesis Assignments pencil code
Types: written pencil assignments, applied code assignments
Policy:
- A team works as one to complete and submit one assignment solution. A team is an individual or a pair, determined by the assignment’s designated team policy.
- Your team’s submitted solutions must be your team’s own work.
- You must not divide work among people (within or across teams) to complete separate parts and combine the solutions.
-
Your submissions must cite all collaboration, assistance, and reference (excluding course materials and reference linked from the course website) that your team used to prepare your submission. List each person or resource with a short phrase identifying the topic or nature of collaboration, assistance, or reference.
- Collaboration:
- You may discuss high-level ideas or strategies with other teams in small groups.
- You must not communicate detailed algorithms, implementations, code, formulae, or other detailed solution steps with other teams.
- You must not, under any circumstances, view, share, prepare, or accept written solutions or assignment code outside your team.
- Assistance:
- You may accept help from course staff to locate errors, interpret error messages, and correct errors of syntax.
- You may accept help from other CS 251 Spring 2020 students to interpret error messages, subject to the above policy on viewing code.
- Reference:
- You may consult course material from CS 251 Spring 2020 and external documentation of required tools.
- You may consult external reference resources for general concepts and techniques, provided you cite them.
- You must not consult solutions to this or any similar assignment.
- Code reuse and adaptation:
- You may reuse and adapt provided starter code in your solution without restriction.
- You may reuse and adapt code from other course materials only with prior written approval from the instructor and explicit attribution of the source.
- You must not reuse or adapt any other code.
Rules of thumb for collaborating outside your team on graded synthesis assignments:
You are welcome to discuss high-level ideas and strategies with other teams, as allowed by the policy above. If taking notes on these discussions, keep your notes general (no verbatim copies, photographs, detailed descriptions). Remember, you may not write solutions together, so later, write full solutions on your own, referring to your notes only if needed.
- Wait at least 30 minutes after discussions outside your team before writing your solutions. This helps you know whether you actually understand the solutions (and their derivation) yourself.
- If writing your solution is effectively making a verbatim copy of – or following a set of explicit directions in – your notes from discussion with others, then your notes or your discussion are too detailed.
After the semester:
Some students students may wish to include work from CS 251 in portfolios, resumes, etc. Please do not post code publicly (including on GitHub, GitLab, Bitbucket, your own website, etc.), but feel free to show your code privately to potential employers or others who are not students. Do not make your code accessible or viewable by current or future CS 251 students.
Team Policy
Each graded assignment follows one of two team policies. Graded synthesis assignments indicate their policy in the assignment manifest.
- The individual policy requires individual students to prepare and submit their own solutions.
- The pair policy allows two students to prepare and submit a
single joint solution.
- Individuals may opt to complete an individual submission on pair assignments unless pairs are explicitly required.
- Partners choosing a pair submission must contribute in similar measure and complete at least 80% of work on each problem together in real-time pair-programming style. Collaboration within a pair is otherwise unrestricted.
- If it becomes necessary to split a pair, the partners must coordinate with the instructor to document what work was completed together.
Graded Examinations exam
Policy:
- Your submitted solutions must be your own work.
- You must not provide or use any collaboration, assistance, or reference external to the exam document between receiving and submitting the exam unless explicitly stated by the exam document itself.
- You must not communicate about the exam contents with anyone other than the CS 251 Spring 2020 instructors until given permission by a CS 251 Spring 2020 instructor.
Academic Support
There are several types of academic support available outside of regular class meetings:
- Regular drop-in hours with tutors support questions on concepts and assignments.
- Regular drop-in hours or scheduled appointments with instructors support questions on assignments, concepts, course logistics, random chats, or anything else. (Email or catch us after class to schedule an appointment outside drop-in hours.)
- Questions, studying, or group work with your classmates, subject to the honor code.
- Individual tutoring through the PLTC.
- Q&A forum: start here for questions about topics, tools, assignments, logistics, etc. Everyone can answer. Your question might already be answered. If we all participate, this will typically be a much faster source for support compared other options.
- Drop-ins and appointments for real-time assistance with course staff.
- Online questions, studying, or group work with your classmates, subject to the honor code.
- We believe (but have not yet confirmed) that it is possible to continue or begin longer individual tutoring sessions through the PLTC.
We ask you questions. The CS 251 staff genuinely enjoys helping you learn, whether in class or 1-on-1, especially when we can help you learn independently. We often answer your questions by asking you more questions to help you construct your own path forward. While this may feel less expedient in the short term, we find it more effective (and expedient) in the long term, since you learn a broader thought process rather than just an answer to one question.
Preparation is your ticket to assistance. In general, we expect you to make a genuine effort to answer your own question before asking for help on an assignment. It is rarely wise to spend hours stumped on a single issue before asking for help, but at least a few minutes of common sense exploration often nets effective results or at least helps focus your question. Error message? Try looking it up in the assignment, associated tool documentation, or a web search to understand the error. Crashing program? Try to employ debugging strategies and tools listed in the assignment to make progress toward understanding the cause.
Feedback
The instructors are always open to considering your comments, suggestions, or concerns about the course or how we can make it more accessible to you. Please be in touch.
Accommodations
If you have a disability or condition, either long-term or temporary, and need reasonable academic adjustments in this course, please contact Accessibility and Disability Resources (ADR) to get a letter outlining your accommodation needs, and submit that letter to me. You should request accommodations as early as possible in the semester, or before the semester begins, since some situations can require significant time for review and accommodation design. If you need immediate accommodations, please arrange to meet with me as soon as possible. If you are unsure but suspect you may have an undocumented need for accommodations, you are encouraged to contact (ADR). They can provide assistance including screening and referral for assessments.
Acessibility and Disability Services can be reached at accessibility@wellesley.edu, at 781-283-2434, by scheduling an appointment online at their website, or by visiting their offices on the 3rd floor of Clapp Library, rooms 316 and 315.
Students whose religious observances conflict with scheduled course events (e.g., exams) should contact the instructor in advance to discuss alternative arrangements. You may do this through the new Wellesley College Religious Observance Notification system if you prefer.
How to Succeed
A compilation of tips from CS 251 staff and students. Have more? Let us know.
- Take notes in class. The slides can be useful, but they are just a prop. The most useful and interesting insights happen in exercises and other discussion. Writing down your solutions (and your approach!) is great reference for review later.
- Ask questions in class, in office hours, in tutor hours, in lab, of your classmates or on the email list (but first, read the Honor Code definitions). The knowledge will not come to you. Go get it. We will often answer your questions with more questions.
- Read the instructions on assignments and understand the specifications. There is often good advice about how to approach the problem most effectively.
- Work incrementally. As you work through an assignment (after you understand it), think and plan before you ever write any code or build any circuit. Writing code before planning and writing one big pile of code before testing are two sure routes to disaster. Plan carefully before you ever touch the keyboard. Write pseudocode. Draw diagrams. When you are ready to write code, do it incrementally. Write a small piece. Write assertions to document your assumptions. Test it. Does it work? No? Repeat until it does. Now, commit it so you can get back to this point if things go wrong later. Then, write the next small piece, and so on. Step back occasionally and consider if you are still on track for your plan. Does it need adjustment?
- Read specifications carefully and think critically about how best to implement them.
- Consult documentation to learn about relevant tools and library functions.
- Experiment to try out potential ideas.
- Start assignments early and meet the checkpoints. (Really, early! Really early. Ask any CS 251 alum.) Before you can “just finish” the assignment, you will need time to absorb the task, understand how to approach it, plan, take a break when you get stuck (time away from a problem almost always helps), debug, ask questions, and more.
- Come to class. We do useful and fun things. If you do not think so, then let us know!
- Work in the lab space. Tackling challenging assignments next to your classmates builds camaraderie, reminds you that everyone has to work hard on these assignments, eases sharing of tips and techniques, and affords opportunities for collaborative silliness.
- General tips from PLTC / Academic Peer Tutoring:
Faculty Responsibilities on Disclosures of Discrimination, Harassment, and Sexual Misconduct
Pursuant to Wellesley College policy, all employees, including faculty, are considered responsible employees. That means that any disclosure of discrimination, harassment, or sexual misconduct to a faculty member will need to be shared with the College’s Director of Non-Discrimination Initiatives / Title IX and ADA / Section 504 Coordinator, Janet Elie Faulkner (781-283-2451; titleix@wellesley.edu). Students who do not wish to have these issues disclosed to the College should speak with confidential resources who are the only offices at the College that do not have this same reporting obligation. On campus, confidential resources include Health Services (781-283-2810 available 24/7), the Stone Center Counseling Services (781-283-2839 available 24/7) and the Office of Religious and Spiritual Life (781-283-2685). You should assume that any person employed on campus outside of these three confidential offices has an obligation to share information with Wellesley College through the Office of Non-Discrimination Initiatives.
-
This course is officially named “Theory of Programming Languages”, but we do not confine ourselves to theory. ↩