OSU eCampus CS225 Discrete Structures in Computer Science review & recap

This post is part of an ongoing series recapping my experience in Oregon State University’s eCampus (online) post-baccalaureate Computer Science degree program. You can learn more about the program here.

Six-word summary: Not as bad as I feared

Here’s the deal: OSU’s eCampus CS degree only requires one math class. A lot of people dread it, though, because it’s their first math class in years (or decades).

However, I am happy to report that CS225 is completely doable by someone who isn’t a natural at math. You would be hard-pressed to find someone with less of a math background than me, and yet, I managed a 94% in CS225!

Behold, my math “credentials”:

  • I had to take algebra twice (in 8th grade, then again in 9th)
  • I only earned a B in sophomore year geometry despite really trying
  • My last high school math class was Algebra II (another B)… not pre-calc, not calc, not physics, nothing past Algebra II
  • My only college math class (and I do mean only) was Math 118, and it was the sort of math class you take when you are pursuing a fine arts degree
  • I got a single digit score on my ALEKS assessment at the start of OSU’s CS program

Not my strongest subject, by far. But I think there’s plenty of room in programming even for those of us who suck at math, so if this is you, worry not – CS225 won’t derail your dreams.

CS225 Review

This was a good class. The homework problems made sense, the pacing was good, and the test questions were (mostly) recycled from the book, homework, and practice quizzes. The instructor seems to run the whole thing on autopilot but I didn’t need to contact her for anything.

There’s only a handful of homework questions due each week, but potentially dozens more you can do from the book and “last quarter’s homework” if you want. (I did all the extra work, and I think it really paid off at test time.)

Good news: this didn’t happen in CS225!

Class structure:

  • 10 weeks
  • 2 homework assignments per week
  • 1 quiz per week (7 total, no quizzes before/after midterm and none in the final week)
  • 1 midterm around week 6
  • 1 final in week 10

The tricky part about this class is the grade weighting. 90% of the grade is from quizzes and tests. The midterm is worth 30%, the final is worth 30%, and your 6 best-score quizzes are worth 30% (collectively). The homework is a mere 10% of your final grade. Since both the midterm and the final are proctored, you do have to know your stuff inside and out before you sit down to take the exam.

Fortunately, nearly all of the test questions were outright copies of, if not very similar to, questions you would have seen in the homework and practice quizzes.

If there’s anything this class isn’t so good at, it’s the video lectures. (Seems none of these OSU courses so far have decent videos.) On the bright side, YouTube is bursting with math enthusiasts who have made short, memorable videos on every topic this class will cover.

My little CS225 algebra prep guide

Many people ask online what they should study in preparation for CS225. I think the ALEKS modules are complete overkill. I found myself Googling these seemingly basic concepts that I completely forgotten in the 15 years since my last math class:

  • factorials – what does 5! mean?
  • adding fractions – a/b + c/d = ?
  • multiplying fractions – a/b * c/d = ?
  • dividing fractions – (a/b)/(c/d) = ?
  • factoring these things – (2a + 1)(a + 2)

And that’s it. The rest you can pick up in the class itself.

More CS225 tips

Here are my general tips for succeeding in CS225.

Do the extra assignments, too

Every week has the homework that’s required, and then a larger set of extra questions that are just for your own edification. I did those extra problems and found them worthwhile come test time. I also did all the practice quizzes.

Get a Chegg subscription

I never heard of chegg.com before I took this class (I found it through Googling my questions). $15/month gets you unlimited access to the book’s answer key. Not because you’re going to copy the answers and blow off the homework, no – you need to know what you’re working towards on every question you tackle. How else will you know if you got it right? :D

Warning: not every single answer is in Chegg. I think I found maybe 4 of my assigned problems that were just blank in Chegg. But.. chances are if you Google the problem, someone on the math Stack Exchange or their own blog has posted a solution. Or you can solve a different but similar one that does have an answer, and then take a pretty good guess at the one you’ve been assigned.

Get the physical copy of the book

Yes, this is the most expensive book of the entire program, but you can buy it used on Amazon (which is how I got mine, and the book was in great shape).

A physical copy is great. It’s easier to jump around in than a .pdf, you can sticky note various topics, and you can take it with you and study in more places! I also rented a .pdf version of the book, but it didn’t display well on my tablet or my phone.

Study hard for the tests – and attempt every question

The two proctored exams are 60% of your grade (30% is your 6 quizzes, 10% is the weekly homework). Some of the questions are taken word for word from the book or homework.

Here’s a hint: simply attempting an exam question is worth a lot of points. Every exam question is worth 10 points and they’re ‘free form’ (you type in a box, not multiple choice). Even if you can’t (or don’t have time to) solve it, explaining what you would do to solve it can get you 7/10 or more points on the problem. Therefore, the winning-est strategy is to pace yourself such that you have enough time to at least lay out the basics of your answer to every question.

I ran out of time on the midterm and had to slap together half-baked responses to the last three questions. However, since I was able to type out what I would do if I had more time, and still ended up with a 93% on the test. Phew!

I took the class by itself

I’m on the 4-year track and while CS225 is popular to pair with CS161, I’m glad I took it by itself. As I said earlier, I am not the greatest at math – so taking the class by itself helped me have plenty of time to dedicate to extra problems, studying for exams, and re-watching the same videos until I felt like I understood the topics.

And.. that’s it! My next class starts in autumn, so I’ll report back on my OSU studies in December.

 

OSU eCampus CS162 Intro to Computer Science II review & recap

This post is part of an ongoing series recapping my experience in Oregon State University’s eCampus (online) post-baccalaureate Computer Science degree program. You can learn more about the program here.

Six-word summary: Brutally paced pointers pointers pointers pointers

The beatings are over I survived CS162! If you were wondering where OSU’s eCampus computer science weeder course is, this is it.

The material is challenging and the workload is punishing. The video lectures are crap, but the book is good. The class isn’t well organized (expect poorly written assignments with unclear requirements). 10 weeks is nowhere near enough.

However: I learned a lot. I got faster than I ever thought possible and worked with topics I thought would have had their own standalone courses.

In this article: topics covered in CS162, survival guide, what I thought of the class.

Note: While I normally love to post code here, I can’t share any of my project code (against student code of conduct) or specific assignment requirements, test questions, etc.

Topics covered in CS162

The class is taught in C++ and teaches (or at least requires you to know):

  • pointers to arrays
  • pointers in arrays
  • pointers to pointers
  • pointers to instances of classes
  • passing pointers to functions
  • linked lists made of pointers
  • abstract class and subclasses
  • virtual functions
  • overloading operators (give == an exciting new meaning!)
  • polymorphism
  • writing functions that do something recursively, like reverse a string, sum numbers in an array, solve a math problem
  • data structures: queue, dequeue, stack, linked lists, circularly linked lists
  • sorting algorithms

    Equipment

CS162 is a programming class. Like CS161, I found my Macbook to be sufficient for this class.

I don’t know why they tell people to get a Windows PC and use Visual Studio. I didn’t need it and you won’t need it – there is no assignment based on Visual Studio knowledge.

In fact, judging just by Piazza posts, a number of students seemed confused by the extra files and the “another thing to learn” factor introduced by Visual Studio.

In case you are curious: I did every assignment in Sublime Text and a Terminal window.

Workload

At any given time expect to be working on a 1-week lab assignment and a 2-week project, and mid-course, a group project on top of the first two. You will also write a multi-page document (PDF) for each project with a test plan (input, expected outcome chart), your designs, ideas you changed along the way, reflections on the assignment. This document always took me at least 3-5 hours to complete to my standards. There’s a quiz every couple weeks (15 minutes, not proctored).

I’m a proactive student who started each week’s material the moment it was released, worked on it daily, and generally finished just moments before a new load of work was dumped onto me.

The first two weeks hit like a ton of bricks: a simple Langton’s Ant simulation by itself would have been a large assignment, but CS162 adds a user-navigable menu, input validation, user-adjustable parameters (dynamically sized board, variable turns to run, etc.), and other features that have to be designed, coded, tested, debugged.

Oh, yeah – it has a visual component, too.

There are also two lab assignments to complete while you work on the Langton’s Ant project.

This pattern continues until the end of the course. The toughest week was the one where I was working on a project, a lab, and a group assignment all at the same time.

CS162 Survival Tactics

It’s easy to find people complaining online about how disorganized and intense this class is but what I really wanted when I was in the thick of it was some help. (The OSU eCampus CS subreddit is a good place to look for advice on CS162, too.)

Here’s what I did (or wish I’d done sooner) that made CS162 more bearable.

Take it by itself (if you can)

I know there are financial aid reasons not to but if you’re normally taking 2 classes a quarter, consider taking CS162 alone (or at least with fewer classes than you normally would). It’s a ton of complex material – assuming you haven’t worked a lot with C++ pointers, memory, arrays, etc. yet – and the assignments are black holes for time.

Diagram things out on paper

I found many of CS162’s assignments too complex to hold entirely in my brain.

For example, here’s a crazy thing we did: create a circularly linked list (in C++), let the user fill it and delete nodes from it. When you exit the program, it has to unload from memory node by node. “Empty nodes” are marked with -1 for their values. This drawing I made helped a ton (actually, this was probably the 5th iteration of this drawing).

And here’s another one, this one showing how the heroes in the polymorphism project either rejoin the tournament queue or get kicked out to each player’s respective loser pile.

PS: Some people got really precious about their diagrams having to be works of art, but you don’t have to for these assignments. Just draw this stuff out, paper/pencil (or a little whiteboard) is sufficient, and plan to trash your first few drawings. If you need some material to bulk out your retrospective writing assignments for each project, photos of the diagrams you make are excellent fodder.

Go straight to Google (and Stack Overflow, and YouTube)

Sure, it sucks to pay $1880 to do so much self-teaching but you’ll get a lot of mileage out of the skill. The recorded lectures are crappy and I felt like they were wasting my time. There are better guides to all of the concepts covered in this class on YouTube.

Buy the book

Here’s the book on Amazon: Starting out with C++ Early Objects

I recommend getting a physical copy so you can have it open next to your computer while you work, and use your monitor(s) for your code and Stack Overflow. It’s the same book you use for CS161 (if you haven’t taken that yet, either), so at least you get two classes out of it. You can also buy the loose leaf edition to save some cash.

After two classes with it I can say it’s a good book. The examples are relevant to the coursework, they’re clear and easy to understand, and there are a good number of examples.

Start every week’s material the day it drops – and don’t count on weekends

Sometimes the new week will be released on a Friday. Sometimes a Saturday. Sometimes a Sunday! And no, the instructor doesn’t move that week’s deadline out just because you lost the weekend due to the materials not being released in a timely manner.

For this reason, I recommend setting up your life (at least for these 10 weeks) to allow for working on this class work during the week (ideally daily). Don’t expect to fit it all into the weekend. Even my light weeks were at least 15 hours spent on the class (usually closer to 25 or 30).

Check Piazza religiously

If they improve anything in CS162, I hope it’s the unclear assignment requirements. They requirements were notoriously bad – assignments are written in a conversational style and it’s hard to know what is really being asked for.

Many students took to Piazza (the class forum) to question (or worse, debate) the requirements until a TA or the instructor herself came along to clarify.

Pretty much every week went like this:

  1. New assignment comes out – oh no, it has unclear requirements
  2. Someone asks for clarification on Piazza
  3. TA makes a call and says do it X way
  4. 2 days later, another student asks the same question
  5. Different TA makes a different call on this new thread and says do it Y way
  6. They have a fight, triangle wins…
  7. You already coded it, so do you redo it to Y or keep it as X or what?

For what it’s worth, every time this happened (and I had already coded it), I kept my code the original way and still got 100% on the assignment.

Test on Flip!

So many things happened in my code in the Flip environment that did not happen on my Macbook. Weird things, too – things that weren’t easy to spot without thorough testing. I made the mistake of not testing on Flip until I thought I was done with the assignment, only to find heaps of bugs that only occurred in that environment.

Only after the class ended did I find out about this awesome way to use Git to deploy to Flip. (I was uploading in Filezilla like a n00b.)

Use Valgrind early and often

It’s a memory management tool that’s already installed on Flip and you won’t be able to find memory leaks without it. If you wait until you are done coding your assignment, it will be harder to find the memory leak. Upload your code and check it with Valgrind every so often and you will save yourself a lot of pain.

The worst weeks were weeks 1, 2, and the final project. 

Okay, they were all brutal. There were many weeks where I thought there was no way I would get everything done and I’m a workaholic. The biggest workloads were the first project (Langton’s Ant) and the final project at the end (make an adventure game).

You do actually have to contribute to the Canvas conversation topics

It’s a misguided requirement because these “conversation” threads quickly turn into 100+ people dumping commentary and links in one place. It’s not a conversation, it’s just a dogpile.

But if you contribute a few posts (I think I made 5 decent, paragraph-sized comments between January and March, evenly spaced throughout the quarter), it’s an easy 20 points that you will (probably) be very happy to have at the end.

Take every quiz twice

(Unless you get a great score the first time around, of course).

You get two attempts for each quiz. A quiz is 20 questions in 15 minutes. (I liked this format). Only the grade from the last attempt is kept. Questions are drawn from a larger pool, so you won’t get exactly the same ones the second time you take it.

My strategy was to use the first attempt to see what’s on the quiz and make my best guesses as to the answers. This gave me a feel for the questions and sometimes revealed tricky ones. I usually got about a 16/20 on my first try but Canvas tells you which ones you got wrong, and what the correct answers were, so this is a chance to see what you missed and study it some more. After a little studying I’d retake it, usually getting 18/20 or 19/20 that second time.

Grading

The final’s worth 15% of your grade, so save some steam for the end. There was a bonus, extra credit lab announced right at the last minute, too, but its points could only be applied to your lab grade.

  • Weekly labs – 30% of your grade
  • Quizzes – 15% of your grade
  • Projects – 30% of your grade
  • Group activities – 10% of your grade
  • Final project – 15% of your grade

Overall impression: OSU CS162

I hated it at times, but it was worth it. I never would have pushed through some of this stuff on my own, without a grade and a degree motivating me. OSU’s online CS is meant for people with a full-time job and the occasional signs of life outside of class but I had to take a couple days off work here and there to accommodate the workload, and I barely saw my family. The most difficult parts of this class – deciphering confusing and unclear requirements – were totally unnecessary. OSU should hire a proofreader and clean up CS162’s assignments. And some weeks the workload was just pure insanity – the week with the group project stands out in particular.

But… it’s over! And I got a 97%, so I’m going to take a much-deserved week to rest up for the next class.

Onwards to CS225!

Other student reviews of CS162

Leave a comment and I’ll update this post with your review!

Review: Starting Out With C++: Early Objects, Student Value Edition (9th Edition) book

I got into Oregon State University’s post-bacc computer science degree program! Fall quarter begins September 21st, 2016 and I’m excited to start. (More on that later!)

This post, however, is about the book I needed for the first class, CS 161. The book, “Starting Out With C++: Early Objects (9th Edition)”, is available on Amazon, but it is expensive. And it has a 1-2 week processing wait.

That wasn’t gonna cut it – class starts next week.

starting-out-with-c-plus-plus-early-objects-book

I wanted a real dead tree book, not an ebook, and I live too far from OSU to “rent” the book from their bookstore for the quarter. My search led me to something called the “Student Value Edition” of Starting out with C++: Early Objects”.

The “Student Value Edition” is significantly cheaper than the usual version. But it had no reviews, and I couldn’t find anyone else talking about it online, so I was kind of hesitant to order it.

(I ordered it anyway.)

I’m happy to report that this book is the real deal.

2016-09-15-17-56-49

It arrived 3 days after I ordered it. It’s basically an unbound stack of papers 1.5 inches thick. Nothing holds it together except for the plastic sleeve it arrives in.

Other than that, though, it’s exactly the same content you’d get with an actual binding and cover. It’s in color, printed on both sides, and the individual pages are thin(ish) but probably no thinner than what’s in the actual book.

2016-09-15-18-09-58

An inexpensive 2″ slant-ring binder like this one solved the lack of binding problem.

2016-09-16-09-02-23

And there you have it – a slightly more affordable way to get CS 161’s book in paper format.

As for the book’s actual content, I’ll be working through it over the next 11 weeks and I’ll let you all know what I think. I’ve read the first two chapters and it looks like it’ll be a solid introduction to computer science fundamentals textbook.

If you’re starting CS161 soon and want to save some money on the book, check out the “Student Value Edition” of Starting out with C++: Early Objects”.