Great question! For a CS student at UMB, I'd recommend a laptop with a relatively modern processor (an Intel Core i-series or an Apple M-series chip), at least 16 GB of RAM, and a 500 GB or larger SSD. A configuration like that should comfortably carry you through all four years of your program — and it gives you enough headroom for everything from intro programming to heavier coursework in systems and software development.
For CS110, a pre-calculus level of mathematics is all you need --- think high-school algebra. Specifically, you should be comfortable working with variables, evaluating and rearranging expressions, reasoning about functions and simple formulas, and a bit of basic geometry. That is the full extent of the math the course builds on.
You will not be asked to do calculus, linear algebra, or write proofs. What the course really demands is precision: programming means translating formulas and step-by-step reasoning into code that a machine executes exactly, so fluency and comfort with basic algebra matter far more than advanced coursework. If your pre-calculus skills are rusty, a little review before the semester starts will serve you well.
CS110 assumes a modest level of computer literacy, but no programming experience whatsoever. By computer literacy I mean the everyday mechanics of using a computer: managing files and folders, installing and launching applications, navigating the web, and typing comfortably. The course is not about teaching computer literacy --- it is an introduction to programming --- so that basic familiarity is taken for granted.
If your computing life so far has mostly happened on a phone or tablet, it is worth spending some time getting comfortable with a desktop or laptop before the semester starts: organize some files, install a piece of software, poke around the operating system. None of this is difficult, but having it under your belt means you can focus on the actual subject of the course from day one.
No prior programming experience is assumed or expected --- the course starts from the absolute basics. In the first few weeks, students who have programmed before may feel a step ahead, but that advantage evaporates quickly; by the middle of the semester, everyone is on the same footing.
One thing to understand, though: starting from zero does not mean the course stays basic. CS110 begins at the very beginning but goes quite far, and it keeps a steady pace the whole way. Keeping up and succeeding takes real, sustained effort --- consistent practice, staying current with the assignments, and asking for help early when something doesn't click. Students who assume an "introductory" course is an easy A are usually the ones who struggle. (See Q5.)
That's a common misconception. "Introductory" describes where a course sits in the curriculum, not how easy it is — an introductory course assumes no prior background, but that doesn't mean the subject itself is simple. Introductory physics is famously one of the most demanding courses in college, calculus trips up countless STEM students, and a first course in a foreign language requires absorbing a huge amount precisely because you know nothing yet. Programming is no different. CS110 asks you to think in an entirely new way, breaking problems down into precise, unambiguous steps a machine can follow.
So the course isn't hard because it's badly designed --- it's hard because you're learning to think in a way you never have before. Like any new skill, it takes sustained practice before it feels natural. Stick with it, put in the work, and it will click.
My classes are lecture-driven, but not the kind where you sit back and quietly take notes while I talk. I lecture using slides, walking through many interesting programs --- tracing what each one does and why it is built the way it is. Along the way I ask a lot of questions to test your understanding of the material, so expect to be engaged and thinking throughout the class, not just listening.
The through-line of everything we do is the same as the advice in Q13: you learn to program by programming. The lectures and walkthroughs show you how it is done; the exercises and assignments are where it becomes yours.
Quite a bit --- life outside work is busy and good. In a nutshell: I study how things evolve on complex networks, build things with code and AI, and obsess a little over teaching; and beyond all that, I practice presence, read, enjoy good food, listen to and play music, and travel. For the things I build for fun --- side projects, experiments, and the occasional oddity --- see the Play page of this website.
This website is a static site generated with Jekyll from Markdown files, using the open-source Hyde theme with a good deal of my own customization on top, and served as plain HTML and CSS from the UMB Computer Science department's web server. No frameworks, no databases --- just simple files.
AI is also my ongoing collaborator in the upkeep of this site --- helping draft and polish text, and carrying out the small design and code changes that keep everything fresh. I still review every word and every decision before it goes live: the judgment is mine, even when the typing isn't.
stdio.writeln() instead of print() in CS110 and StdOut.println() instead of System.out.println() in CS210?It is mostly about consistency. The course covers many different kinds of input and output --- not just writing to standard output, which Python's print() and Java's System.out.println() alone could handle, but also reading from standard input, files, websites, and more. Several of these are awkward to deal with using only the language's built-in features, so we use third-party libraries (stdlib-python.zip in CS110 and stdlib.jar in CS210) that provide a uniform, easy-to-use interface for all of them.
This in no way puts you at a disadvantage. The language itself is only part of what you are learning --- the ecosystem around it is just as important. In the real world, programmers rely on third-party libraries constantly, for everything from data analysis to web development to machine learning, so getting comfortable reading library documentation and coding against someone else's API from the start is genuinely useful preparation, not an obstacle.
Yes --- you're free to write your programs in any editor or IDE you like. That said, all the course materials and setup instructions assume Visual Studio Code, which is what we recommend and support. If you run into environment or configuration trouble, that is the setup we can help you with.
If you choose to use a different editor or IDE, that's perfectly fine, but it becomes your responsibility to make sure the programs you submit work correctly on Gradescope. The autograder compiles and runs your code in its own environment, so before submitting, verify that your program behaves the same way there as it does on your machine --- especially if your IDE manages compilation, run configurations, or library paths for you. "It worked on my computer" is not something the autograder can grade. (See Q11.)
Almost always, one of two things is going on. The first --- and most common --- is that your program's output does not match the expected format exactly, to the letter: an extra prompt or decorative text the assignment didn't ask for, a missing or extra space, wrong capitalization, numbers rounded or formatted differently than specified. The autograder compares your output against the expected output precisely, so even a visually tiny difference results in a zero. The second is that the required files were not submitted.
Before asking us to grade manually, please do the following: re-read the assignment prompt and compare your program's output against the expected output character by character; run the sample inputs from the assignment and check your output against the sample output; and verify that your Gradescope submission contains exactly the files the assignment asks for. These steps resolve the vast majority of "works on my computer" cases. And a heads-up: since we grade the same submission the autograder sees, manual grading would almost certainly reach the same conclusion.
No worries --- it happens! Submit a regrade request through Gradescope and we'll be happy to take another look. When you do, point to the specific question or rubric item you disagree with and briefly say why, so we can address it quickly. One important caveat: regrade requests must be submitted within one week of the grades being published, so please don't wait.
Fair point --- the programming assignments are the hardest and most time-consuming work in the course. But that is not quite what grading measures. Assignments are done outside class, over several days, with access to your notes, the textbook, the compiler, online references, classmates (within the collaboration policy), and increasingly, AI tools. Those conditions are great for learning, but they make it nearly impossible to tell from a submitted program how much of the work --- and the understanding --- is the student's own. With AI tools now able to produce flawless solutions in seconds, a perfect assignment score no longer necessarily signals mastery. This is not to say that all or even most students lean on AI dishonestly; many use it responsibly. The problem is simply that there is no reliable way to tell who learned what from the assignments alone.
That is why the exams, which are timed and proctored and completed entirely on your own, carry more weight: they are the one dependable measure of your individual understanding of the material. The assignments are where you build the skills; the exams are where you demonstrate them. And if your exam scores reflect your assignment scores, the weighting works in your favor.
There is no secret --- the recipe is unglamorous, and it works: an hour or two of steady work every single day beats a weekend cram session every time. Concretely:
Students who follow this routine do well; students who don't, struggle.
Honestly, none --- I generally don't recommend consulting resources beyond what the course provides. The materials are designed to be self-contained, and wandering through random tutorials and forums tends to distract more than it helps: different sources use different terminology, emphasize different things, and often contradict the conventions the course follows.
If you do want something beyond the course materials, my one recommendation is AI. Used well, it makes an excellent study companion: ask it to explain a concept in a different or better way than the lecture did, to generate practice exercises on a topic you are shaky about, and to walk you through the solutions step by step. That keeps your studying pointed at exactly this course's material --- which is what the exams will test --- while still giving you the extra explanation and practice you're looking for.
No, I don't offer extra-credit work, for a couple of reasons. The grade in the course is meant to reflect how well you have learned the material, and the way to learn the material is the regular course work --- lectures, exercises, assignments --- not a side project bolted on at the end (see Q13). Extra credit also raises a fairness problem: a student who coasted all semester and then did an extra project for points would end up rewarded ahead of a student who put in steady effort from day one and earned the same final score. That seems backwards to me.
The good news is that courses like these are usually not decided until late in the term. If you are not doing well, the most productive question is not "what extra work can I do?" but "where am I losing points, and what should I change?" --- and the earlier you have that conversation with me, the more time you have to turn things around with the work that remains. It is rarely too late to start the routine in Q13.
No. Being a few points short of the next grade is frustrating, I know, but raising a grade because it is close is really the same request as extra credit (see Q16): the grade is meant to reflect what you have learned, and moving the bar for one student is unfair to the student a few points below the cutoff --- and to everyone who earned the higher grade outright. Cutoffs have to mean something, or they mean nothing. The reliable way to cross them is the one in Q13: steady work, starting early, all semester long.
That said, if you believe some of your work was graded incorrectly --- points added up wrong, a rubric item misapplied --- submit a regrade request through Gradescope (see Q12), and we will gladly take a look.
No. Grades are computed strictly by the formula in the syllabus: your weighted average maps to the published cutoffs, and that is the grade you get. I don't curve or scale, for the same reasons I don't offer extra credit (see Q16) or bump a student a few points over a cutoff (see Q17) --- the grade has to mean the same thing for everyone.
The rare exception is a flawed exam question: if a question turns out to have been ambiguous or mis-keyed, I will fix it for the whole class by re-grading or adjusting that specific question --- not by curving the overall distribution. But plan on the published formula; anything beyond it should be a pleasant surprise, never an expectation.
My current office hours are listed on the About page of this website --- please check there for the latest times and whether they are held in person or remote.
No --- you don't need an appointment to see me during my scheduled office hours; just stop by. If those times don't work for you, you can make an appointment for a remote Zoom meeting at a different time.
The hold exists because advising hasn't happened yet, so it can't be removed on request alone. Come see me during my office hours; once we have discussed and finalized your class schedule for the next semester, I will remove the hold on the spot. If you already have a clear idea of what you want to take, we can do the advising over email instead: send me your proposed class list, I will review it and reply with feedback or sign-off, and then remove the hold.
Start with the role you're aiming for, because the positions differ in who is eligible and who does the hiring. TAs are PhD students --- on rare occasions, MS students --- and TA hiring is handled by the graduate program director (GPD), not by me. I can offer some input on candidates I know, but that is the extent of my involvement; if you are a graduate student interested in a TA position, please contact the GPD about the application process and timeline.
CAs and SI leaders, on the other hand, are undergraduates, and those positions are mine to fill. I select students who took the course with me recently and did exceptionally well in it --- an A is a must. If that describes you, send me an email expressing your interest before the start of the semester you'd like to work. (The responsibilities of each role are listed in Q23.)
One practical difference worth knowing: TA positions come with a tuition waiver and a stipend, whereas CA and SI positions are paid hourly.
The responsibilities for each role are as follows:
Teaching Assistant (TA) — CS110, CS210, and CS451/651:
Course Assistant (CA) — CS110 and CS210 only:
Supplemental Instruction (SI) Leader — CS110 and CS210 only:
Yes — provided my schedule permits me to take on the additional responsibility, and I can devise a project that is both interesting and substantial enough to justify a 3-credit course.
Yes — provided my schedule permits me to take on the additional responsibility, and I can devise a project that is both interesting and substantial enough to merit an honors thesis.
Keep in mind that an honors thesis is a yearlong commitment, structured in two stages. In the fall, you'll take an Independent Study (CS478) with me, during which you'll do the preliminary background work needed to formulate a project proposal and present it to the department. In the following spring, you'll take the Honors Thesis (CS498) course, in which you'll complete the project, write the thesis, and defend it before a committee.
Happy to. Please check with the department about the procedure for enrolling in the course. For grading details, see Q27.
Your grade will be based on the one-page report you submit to me every two weeks through the end of the term. Each report should document the tasks you completed at work during that period, any issues you encountered and how you resolved them, and what you learned.
Unfortunately, that's not an option. As a teaching-focused (rather than research-focused) faculty member, I'm not permitted to serve as a PhD advisor or to sit on PhD thesis committees.
If you're interested in research, please reach out to me to see whether I have any ongoing projects you could contribute to. Two important things to know up front:
I write recommendation letters only for students who have taken one or more classes with me and earned an A in all of them. On rare occasions, I may relax the grade requirement if I have a very strong impression of you based on our interactions inside and outside the classroom.
To write an effective letter, I need at least two weeks' notice and a brief statement from you describing your interests and career goals.
I will not write a letter: