ossu / computer-science

🎓 Path to a free self-taught education in Computer Science!
MIT License
168.84k stars 21.36k forks source link

Software Construction in v9 draft #553

Closed Alaharon123 closed 4 years ago

Alaharon123 commented 5 years ago

In the v9 draft of Core Programming, MIT Software Construction in Java on edX replaces UBC Software Construction from v8. I see two problems with this. Note that this is coming from someone who looked at the structure of both, but the content of neither so I don't know if one is actually of significantly higher quality or whatever.

  1. MIT Software Construction in Java is an archived course and all the Java Tutor parts are no longer available. This appears to mean that the course no longer teaches Java and assumes that you already have that knowledge.

  2. The obvious solution would be to instead use the ocw version. This is definitely a better idea; after all, it does include 2 pages intended to teach Java. https://ocw.mit.edu/ans7870/6/6.005/s16/getting-started/java.html and https://ocw.mit.edu/ans7870/6/6.005/s16/classes/02-basic-java/. However, and someone else can say if this is actually enough to learn Java, it seems pretty cursory to me. MIT even offers a class (not on OCW) specifically to prepare students for 6.005 called 6.178 Introduction to Software Engineering in Java plus a prerequisite of 6.01. All of which means to say, it doesn't seem like the best fit for ossu.

On the other hand, UBC Software Construction only assumes that you've done How to Code: Simple and Complex Data, which are already on the OSSU curriculum. On campus as well, the only prerequisite is cpsc 110, their version of How to Code. UBC Software Construction seems to be a much better fit for the OSSU curriculum than the MIT equivalent.

Alaharon123 commented 5 years ago

Another alternative could be Helsinki's Object-Oriented programming with Java. It's highly recommended in places like r/learnjava. It doesn't cover everything that MIT and UBC do, but Think Java is currently down as the book alternative, which is equivalent to Helsinki's course.

joshmhanson commented 5 years ago

Thanks for the heads-up about MIT's course not being fully available anymore. I knew it would likely be too advanced, but I had it there as a placeholder as I do need some kind of Java course to bring students up to speed on Java to the extent needed for the courses on parallelism and concurrency. I haven't found better alternatives yet, but these topics are too important to exclude just because the resources are sparse.

UBC Software Construction is unfortunately kind of bad. Due to the UBC Software Development MicroMasters being designed for people who just want to quickly jump into a new career, the UBC Software Construction courses tend to take a very shallow approach to teaching Java, not really explaining the semantics in a deep or effective way. Two problems with this:

They also (at least in the first course of the pair) teach discredited design principles that came from the old days of the OOP fad, and they use some of the worst analogies I've ever heard, like (if I remember correctly) comparing abstraction boundaries / interfaces to the tip of an iceberg...

I will have to take a look at Helsinki's Java materials. It might be just what's needed. Thanks!

Alaharon123 commented 5 years ago

Interesting! I kind of just assumed (unlike 6.005 where I took a somewhat closer look) that UBC's would be good since it officially relies only on HtC so that's good to know that that's not the case. I was going to take UBC regardless of what OSSU does; now I'm going to take Helinski regardless of what OSSU does.

EDIT: I just found this comment on Reddit. Explains a lot. In cpsc 110 there are no added videos so it's up to date and includes all the content. In fact, the edX course is considered the textbook for the course. Apparently that's not the same for cpsc 210. https://www.reddit.com/r/UBC/comments/82sa1d/cpscedx_edge/dvcmo6f

Marc5x commented 5 years ago

Hi I just finished Software Construction: Data abstraction from UBC. What do you recommend continuing with Software Construction: Object-Oriented Programming or switch to the MIT course on OOP or Helsinki's?

Alaharon123 commented 5 years ago

@hanjiexi I think I found the perfect resource. I looked through all the colleges that use HtDP to see what they do next and Worcester Polytechnic Institute has the course material for its next course online for free. The professor who changed their CS1 course to use HtDP, Kathi Fisler, is co-director of Bootstrap, an organization whose directors include one of the authors of HtDP and are getting HtDP into middle schools. Anyway, she also created a CS2 course that builds on HtDP and though she has switched to Brown, WPI still uses her material and it's all available online at http://web.cs.wpi.edu/~cs2102/b16/

I also found an article by another of the authors of HtDP, Matthias Felleisen, detailing Northeastern's approach to teaching Computer Science (which uses HtDP in CS1). At the end of the article he lists some other places that have adapted/adopted this curriculum and has this to say about WPI's implementation.

Kathi Fisler mapped out an adaptation of our first-year curriculum at WPI. Her adaptation improved on several aspects of [CS2]

The article is also super interesting: http://www.ccs.neu.edu/home/matthias/Thoughts/Developing_Developers.html

EDIT: Doing some googling on WPI CS 2102, it seems that this class is considered to be very hard so idk if this is actually a great resource or if it's another dud.

Alaharon123 commented 5 years ago

@Marc5x I apologize that I don't have an answer for you. I was really hoping someone else would answer. On the side of UBC's course, you're already halfway through a two course sequence so you may as well finish it up, on the other hand it's apparently a bad course. On the side of MIT's course, you've already done some Java so you may as well switch over and do a course that's actually good and you can just do the Java tutorials it links to and you'll probably be fine, on the other hand, you're restarting from the starting and will likely cover some material you've already learned. On the side of Helsinki's course, it's pretty much the definitive resource for noobs to learn Java so you may as well start there, on the other hand, it's for noobs so you've probably learned many of the concepts it's teaching even if not specifically in Java. On the side of WPI's course, it's actually meant to continue on from the equivalent of How to Code: Simple and Complex Data so you'll learn the material in a way that makes sense and builds on your HtC knowledge, on the other hand, you're restarting and it doesn't really cover the same material as the UBC and MIT courses and maybe that's actually something that the curriculum wants to be covering now (though it doesn't sound like it from @hanjiexi's comments here.

So I hope that gave you some idea of what the pros and cons might be, but I can't really give you any advice here. I'm guessing at this point you've probably already made an arbitrary decision and are just going with it.

Marc5x commented 5 years ago

@Alaharon123 Yes, actually I have gone for the Helsinki's course, I've done it pretty fast (because I knew practically all the material, it even teaches from the true beginning, for noobs as you have said) but it has let me practise a lot with java, which I haven't done with the first part of the UBC, now I understand Java I have practised it a lot (Helsinki's course has a lot of exercises to do it's more like learning from doing). Now probably I'm going to finish the second part of the course of UBC and I think I will have a good base, or at least I hope so.

Thoughts on the second part: I don't know if I'm good at this point to start parallel programming, I mean withouth starting the second part of UBC course, because I think it is more like learning software engineering than java itself. UBC has chosen to teach principles of software engineering(I don't know if they really are), teaching java and the principles of OOP in one course.

Also say that I have taken a look at the WPI's course, it looks good, I wish I had done it instead of doing all this.

Please correct me if I'm mistaken and try to suggest what to do next, don't know if I really need to learn more things about java that I haven't learned in the Helsinki's course and the second part of UBC or MIT course teaches or I can move ahead I restart the principles of software engineering when the section arrives. Thank you!

Alaharon123 commented 5 years ago

@Marc5x can you clean up the grammar in that last paragraph? It's a little hard to understand what (if?) you're asking

Marc5x commented 5 years ago

Yes, sorry for my english: Please correct me if I'm mistaken and also try to suggest what I should do next. I don't know if I need to learn more things about Java ( considering I have done the first part of UBC course and Helsinki's course) from the second part of UBC course, the MIT or the WPI's course in order to move ahead with parallel programming.

In other words: I'm good to move ahead to parallel programming considering I have done the Helsinki's course and the first part of UBC course? Or I need to take the second part of UBC course to move ahead?

Thank you.

Marc5x commented 5 years ago

@Alaharon123 also ask if it's better doing the MIT course skipping the material I've already done than doing the second part of UBC.

Alaharon123 commented 5 years ago

Idk from a curriculum perspective, but there's a week 0 type thing in the parallel programming course that asks you to program some things and says if you're comfortable with what it's asking then you're ready to take the course. Or something like that.

Alaharon123 commented 5 years ago

Can't comment on MIT vs UBC. You're the one doing the actual course so you'd be able to see how well they line up.

Marc5x commented 5 years ago

Okay thanks anyway!

Alaharon123 commented 5 years ago

I got the entirety of http://web.cs.wpi.edu/~cs2102/b16/ put on the wayback machine so if it gets taken down at some point, there's a copy from February 2, 2019

dleister77 commented 5 years ago

fyi, i noticed that mit previously did 6.005x on edx (back in 2016) and materials are available archived. They broke it into 2 courses. haven't tried them yet, but wanted to make sure you were aware they were still available. https://www.edx.org/course/advanced-software-construction-java-mitx-6-005-2x https://www.edx.org/course/software-construction-java-mitx-6-005-1x

Alaharon123 commented 5 years ago

That's what I'm referring to in the op

waciumawanjohi commented 4 years ago

Closing this issue because: 1) There have not been any new comments in 10 months. 2) There is a new timeboxed RFC on Software Construction for the current curriculum. https://github.com/ossu/computer-science/issues/636