We are going to be undergoing an optional course at school using the relatively new edx.org. The initial course we have decided on is Harvard's CS course, which started in October and ends in April. My teacher has said that we can try to finish by April to get the certificate, but it is acceptable if we miss such a close deadline as long as we do the work.
However, also on the site is a similar MIT course. This one started last month and ends in June. It seems like a much better idea to me to do this one.
My question is to people who have studied CS before: Is it even possible to learn this much information in 40 days?
Thanks for your answer.
I would also note that the Harvard course teaches C and Javascript, while the MIT course focuses on Python.
By the looks of it, the course won't be going into any of the multitudinous subjects it claims to teach in any appreciable depth. You might get a general overview of those topics, be made aware of their existence, and you will be more informed about them than you were before, but you definitely won't be coming out of it as an expert on any of them.
Let's break it down by the topics it covers:
abstraction, algorithms, data structures, encapsulation
These are all fairly standard programming fare and are usually covered over 2 semesters. The first semester would include encapsulation as part of OO programming as a whole while the second would elaborate on data structures, algorithms and abstraction. The first semester is a building block while the second is an explanation of some of the things you can do with it.
resource management
Depending on how deep you want to go, this could either be a quick topic or an area of study all by itself. For general programming purposes, it's a pretty quick topic that will just cover what bits of memory you have access to and files. If you're writing something like an OS, on the other hand, it's an area of study all its own since you're suddenly managing resources for the whole computer or other large system rather than a single program. The two biggest things to worry about are processor time and memory. How do you allocate memory to processes? How do you decide how much each process gets? How do you maximise efficiency in these areas? Ditto those questions with CPU time, which is a rather more complicated matter. One of the most important things a computer does is constantly juggle hundreds of tasks in order to give the illusion of responsiveness.
security
This isn't just a field of study all its own, it's multiple fields of study being combined under a single banner. The course will probably just go over common attacks (things like buffer overflow or injection attacks) and ways to prevent them, but that barely scratches the surface of software security. Network security, and the whole of cryptography also fall under this banner. Maybe you'll touch on the very basics of cryptography, but anything resembling advanced concepts in that aren't suited for beginners (I dare you to look up public-key cryptography and understand it, it's not simple).
software engineering
Again, a field of study all its own. This particular field of study is one that I've spent a lot of quality time on. It's all about the larger-scale design of programs rather than how it's programmed. It's more about the content and function of the many different components and how they work together and pass information between each other than how each individual method is implemented. You can get a broad overview of the concepts involved, and the course may even mention some design patterns, but you won't go too deep into it.
web development
Oh hey, another of my specialties. Once more, this is a field of study all its own, and to be knowledgeable in web development requires that you know a hefty stack of languages (for example, I use HTML, CSS, JavaScript, Java, and SQL every day at my job; all of them need to work together to create a single application). While web development shares a lot with regular development, it presents its own unique challenges due to the client-server(-server...) structure and stateless nature of it all. It has a much more transactional nature to it than pure client-side programming does. You can maybe touch on some of the technologies involved with web development in a 40-day course, but don't expect to hit them with any depth.
Wow, thank you so much for taking the time to write such an in-depth reply. You are awesome. The understanding that the course will barely scratch the surface is great, and I also now know exactly what I will be (attempting to) scratch the surface of. I'm going to take a shot at the course- this is by no means the only CS education I will have, as I plan to take it in college.
Also, I looked up public-key cryptography for giggles, and you are right, it is hard to understand. I was eventually lead to digital signatures, which helped clarify it a bit. It basically validates that something is legitimate, like an SSL certificate?
However, also on the site is a similar MIT course. This one started last month and ends in June. It seems like a much better idea to me to do this one.
My question is to people who have studied CS before: Is it even possible to learn this much information in 40 days?
Thanks for your answer.
I would also note that the Harvard course teaches C and Javascript, while the MIT course focuses on Python.
It seems unreasonable but possible,
might be my job in which i get to be lazy unless something really bad happens
I Solve practical problems
Let's break it down by the topics it covers:
abstraction, algorithms, data structures, encapsulation
These are all fairly standard programming fare and are usually covered over 2 semesters. The first semester would include encapsulation as part of OO programming as a whole while the second would elaborate on data structures, algorithms and abstraction. The first semester is a building block while the second is an explanation of some of the things you can do with it.
resource management
Depending on how deep you want to go, this could either be a quick topic or an area of study all by itself. For general programming purposes, it's a pretty quick topic that will just cover what bits of memory you have access to and files. If you're writing something like an OS, on the other hand, it's an area of study all its own since you're suddenly managing resources for the whole computer or other large system rather than a single program. The two biggest things to worry about are processor time and memory. How do you allocate memory to processes? How do you decide how much each process gets? How do you maximise efficiency in these areas? Ditto those questions with CPU time, which is a rather more complicated matter. One of the most important things a computer does is constantly juggle hundreds of tasks in order to give the illusion of responsiveness.
security
This isn't just a field of study all its own, it's multiple fields of study being combined under a single banner. The course will probably just go over common attacks (things like buffer overflow or injection attacks) and ways to prevent them, but that barely scratches the surface of software security. Network security, and the whole of cryptography also fall under this banner. Maybe you'll touch on the very basics of cryptography, but anything resembling advanced concepts in that aren't suited for beginners (I dare you to look up public-key cryptography and understand it, it's not simple).
software engineering
Again, a field of study all its own. This particular field of study is one that I've spent a lot of quality time on. It's all about the larger-scale design of programs rather than how it's programmed. It's more about the content and function of the many different components and how they work together and pass information between each other than how each individual method is implemented. You can get a broad overview of the concepts involved, and the course may even mention some design patterns, but you won't go too deep into it.
web development
Oh hey, another of my specialties. Once more, this is a field of study all its own, and to be knowledgeable in web development requires that you know a hefty stack of languages (for example, I use HTML, CSS, JavaScript, Java, and SQL every day at my job; all of them need to work together to create a single application). While web development shares a lot with regular development, it presents its own unique challenges due to the client-server(-server...) structure and stateless nature of it all. It has a much more transactional nature to it than pure client-side programming does. You can maybe touch on some of the technologies involved with web development in a 40-day course, but don't expect to hit them with any depth.
Wow, thank you so much for taking the time to write such an in-depth reply. You are awesome. The understanding that the course will barely scratch the surface is great, and I also now know exactly what I will be (attempting to) scratch the surface of. I'm going to take a shot at the course- this is by no means the only CS education I will have, as I plan to take it in college.
Also, I looked up public-key cryptography for giggles, and you are right, it is hard to understand. I was eventually lead to digital signatures, which helped clarify it a bit. It basically validates that something is legitimate, like an SSL certificate?