Can you be more specific about programming prerequisites for Part Two?

classic Classic list List threaded Threaded
6 messages Options
Reply | Threaded
Open this post in threaded view
|

Can you be more specific about programming prerequisites for Part Two?

Hayekk74
In various places, it has been mentioned:

"The only prerequisite is knowledge of programming at the level acquired in introduction to computer science courses"

OR

"Java or Python"

I know some JavaScript - is that sufficient?  If not, can you recommend specific Coursera courses or specializations, the completion of which would be sufficient to finish Part Two?  I am primary interested in structured classes with graded quizzes and programming assignments (as opposed to several books recommended in other parts of this forum).  I would be GRATEFUL for any recommendations.  I am totally addicted to this amazing course and want to continue the journey.
Reply | Threaded
Open this post in threaded view
|

Re: Can you be more specific about programming prerequisites for Part Two?

WBahn
Administrator
I don't have any specific Coursera course recommendations as I don't use the platform. But I can perhaps describe the kinds of skills and background that the authors are thinking about.

First, let it be said that you are free to implement the software you need to write in any way that you want. You are given specifications of what it has to accomplish, not how it is to accomplish it. So, with that in mind, it's really not possible to say what is or isn't sufficient, particularly in terms of specific languages. The authors, instead, are merely saying that the skills and concepts needed are generally within the grasp of someone that has at least a semester of programming experience. More to the point, the authors are not going to expect you to even know about, let alone be able to implement them straight off, data structures such as trees, stacks, queues, linked lists, or other things are are seldom part of a first-semester course. This is not to say that you aren't going to implement some of these, only that the course will walk you through what you absolutely need to know in order to implement them to the degree needed by this course.

Having said that, the authors DO provide a RECOMMENDED API for all of the software projects and IF you want to use it, then that API is written from an object-oriented perspective and if you use a language that readily supports object-oriented programming, you will likely have a much easier time using the API as a very useful guide in your code development efforts.

I don't know enough about JavaScript to assess whether it is a good enough match or not. What little exposure I have to it makes me a bit skeptical. I think Java or Python are both better choices, if only because they are pretty well aligned with the mindset that the authors seem to have come from.

If you want to learn either of these languages, there are lots of courses and tutorials available on the web and you can probably take a just-in-time approach for most of your learning. The skills that you actually need to bring to the table, as noted earlier, are pretty basic. If you spent a few hours learning how to perform basic selections and loops and then how to write functions that take arguments and return values, you are well on your way. You'll need to be able to open, read, and write text files, but that is something that you can Google when the time comes. Similarly, you will want to be able to define classes and instantiate objects, but nothing fancy. Forget about inheritance, or polymorphism, or overloading -- not needed for this course.

There are built-in data structures and string-processing libraries in both Java and Python (and many other languages) that could be used to greatly simplify your code. For someone that has already developed strong programming skills, I don't have any objection to their use because their motives in taking the course are almost certainly focused elsewhere. But I think for most people taking this course, their programming skills are likely at a level where they will benefit greatly from writing all of that stuff from scratch on their own. The more daunting that doing so seems, the more they will benefit from doing so.
Reply | Threaded
Open this post in threaded view
|

Re: Can you be more specific about programming prerequisites for Part Two?

rleininger
In reply to this post by Hayekk74
I share your enthusiasm for the Nand2Tetris courses.

What language did you use to complete Project 6 (Hack compiler)?  Was it Javascript?

If you really want to get up to speed quickly with a modern, object-oriented language, I recommend Python.  It's relatively easy to learn, easy to use (interpreted rather than compiled), has a syntax that is at least similar to Javascript, and is very widely supported.  I have previewed, and in some cases completed, a number of MOOCs (probably about a dozen) that teach introductory Python.  The one I recommend is available on edX.  It's a whole series of courses taught by Charles (Dr. Chuck) Severance at the University of Michigan.  The first course in the series is Programming for Everybody (Getting Started with Python).  It covers the basics of Python, but not the object orientation features (which are covered in a later course in the series).  You can audit this course for free but getting your problem solutions graded is not.  Sadly, this is the direction of most MOOCs these days.

If I were beginning to learn programming all over again, though, I'd learn C first.  In fact, back in 1988, this was the first language with which I actually became somewhat proficient.  C was originally devised to create an operating system (Unix), so it's consequently pretty low-level (for a high-level language ) and forces you to understand how computer main memory operates at the "address" level.

If you're looking for probably the best MOOC for an introduction to programming, and computer science in general, I'd recommend David Malan's (Harvard) CS50x's Introduction to Computer Science, also available for audit on edX.  The current version of this course introduces programming progressively in Scratch (a lot of fun), then C, and finally Python.  It's been around since the beginning of the edX platform and has steadily improved with each new (now yearly) version.  The course delivers the same material that is contained in the on-campus CS50 course offered for non-CS beginning students at Harvard.  In fact, in the original version, video lectures were recorded in the actual CS50 class.  Current production values are very high, and David Malan is an extremely gifted lecturer.  If you want to know what's expected of a freshman student at Harvard, you can find out by taking this course.  HarvardX also offers a number of other CS50 variants, including one called CS50's Introduction to Programming with Python, also taught by Malan and also recommended.

I wish you continued success with your Nand2Tetris adventure.
Reply | Threaded
Open this post in threaded view
|

Re: Can you be more specific about programming prerequisites for Part Two?

Hayekk74
In reply to this post by WBahn
Fantastic reply.  I could not ask for a more thorough answer to my questions.  I found a great course on Coursera that covers all the programming fundamentals needs to complete N2T, Part Two:
https://www.coursera.org/learn/java-programming/home/info

Already done with first week.  

You're amazing.  Thanks!
Reply | Threaded
Open this post in threaded view
|

Re: Can you be more specific about programming prerequisites for Part Two?

WBahn
Administrator
Glad that was useful. I'd recommend you check out some of the stuff that rleininger mentioned above. They sound like very solid recommendations. In particular, I've heard lots of rave reviews about Harvard's CS50 course.
Reply | Threaded
Open this post in threaded view
|

Re: Can you be more specific about programming prerequisites for Part Two?

Hayekk74
In reply to this post by rleininger
I ended up completing Part One by hand because I was so eager to start Part Two.

Harvard's course sounds amazing!

I support an enterprise ALM product written in Java, so I think I'll take that path!