Course information

Goals

My goals for the term fall more or less under the heading of "acting like a good professional programmer". None of the goals in the list below can be completed in a term or in a decade. But you can practice good habits of thought and action. That's what I'm hoping for this term (for myself as well as for you).

That said, here are some categories of thought and action I'm thinking about for this course.

Readings

No textbook required.

We'll read a wide range of miscellaneous online papers, news stories, tutorials, technical specifications, etc.

Grading

Your grade will be based on your performance on homework and labs, plus the various stages of your term project. Since the content of this course will evolve in collaboration between you and me, I'll plan to give you more specific clarity about the details of grading shortly after midterm break. But honestly, if you ignore the grade and just focus on learning and designing and building stuff this term, you'll do great.

Using stuff you find online

Here are some thoughts on using other people's code. Read that document, please. In brief: cite your sources and check with me if you think you might be straying into plagiarism territory.

My thoughts on non-code resources are consistent with the guidance provided by Carleton's Writing Center. Learning from many sources is great. It's important, however, not to claim other people's work as your own, even implicitly.

Questions about general or specific issues in this realm? Talk to me!

What about LLMs?

Educators at all levels and in all disciplines are experimenting to try to figure out the long-term implications of large language models like ChatGPT, Bard, Gemini, CoPilot, Claude, etc. In computer science, we're also thinking about code generation tools like CoPilot, tabnine, etc.

This term, one of our core goals (see above) is figuring out where these tools should fit in our programming life. So, we'll be talking a lot about this topic as the term proceeds.

Want rough, simple guidance for now? If you're working on code for CS347 homework and you ask an LLM for help, write down what you asked the LLM (just copy/paste the prompt) and provide a sentence or two about how the resulting code got incorporated into your project. (e.g., "I used the function CoPilot wrote for me without change, and it works great" or "by the time I was done with this commit, I had discarded all of this code from ChatGPT" or "I'm using this code for now, but I don't understand it, so I'm nervous about keeping it") Include this information (the prompt plus your reflection on the code) in a readme or somewhere appropriate in whatever code you're handing in for the assignment.

That is, be straight with me and your classmates about what you're doing, and we'll keep talking about LLM-related pros, cons, and academic integrity standards.

Slack

We will use a Slack workspace to share questions and answers, ideas, interesting security-related articles, etc. I have invited you via your Carleton email address to join the Slack group, so you should have received an invitation email by now. If not, let me know.

I recommend that you choose a way to check for Slack updates at least daily. Because I am part of several on-going Slack groups, I just keep the Slack desktop app running and hidden. Many of my students and other collaborators prefer the mobile Slack app, which is fine, too.

GitHub

We will use public GitHub repositories for most of our work.