If you are a teacher or interested in the design of the course, see the meta document.
- Course: INFO1-CE9766, NYU SCPS
- Instructor: Aidan Feldman, firstname.lastname@example.org
- Need help?
Computers are provided in the lab, though you are encouraged to bring a laptop for in-class exercises.
- Strong intermediate knowledge of HTML, and at least basics of CSS
- Basic jQuery knowledge (DOM interaction) is a plus
These won't be enforced by the instructor, but you will be pretty lost without understanding those concepts.
- Encapsulation, closures and scope
- Classical vs. prototypal inheritance
- The event loop
- AJAX and JSONP
- remote (e.g. Foursquare)
- Creating MVC-style models (a'la Backbone.js) from scratch
- Test- and Pseudocode-Driven Development
Topics will be demonstrated through live-code examples/slides, available at advanced-js.github.io/deck. Additional exercises will completed in-class.
See this interview for more background.
All assignments are listed within the Course Outline.
If you're using GitHub Desktop, these instructions will help explain the Git/GitHub concepts. Here are the overall steps:
- Fork the repository for the exercise/project (found under github.com/advanced-js).
- Clone the repository to your computer.
- Open the
index.htmlfile in a browser and open the Developer Tools.
- Modify the files to complete your solution.
- Refresh the
index.htmlpage to see the results, and repeat.
- Make sure all of your code is committed.
- Push/sync up to GitHub.
- Create a pull request on the original repository. All assignments are due at the start of the following class, unless otherwise specified.
- You can continue to push fixes and improvements until the close date (listed in Classes) – just add a comment in the pull request to let me know it's been updated.
When the pull request is created, you should see a message saying that "the Travis CI build is in progress" – this means that your solution is being automatically checked for syntax errors. If this "build" ends up failing (which will show a red "X"), click through the "details" link and scroll to the bottom to see what the errors were. Per the requirements below, please fix the issues and push up the changes.
Feedback will be given in the pull request, so please respond with your thoughts and questions! You are welcome to open the pull request as the work is still in-progress if you are stuck and want to ask a question – just mention
@afeld with the question to make sure I know to look at it sooner.
Note that your solution will also be live at
http://USERNAME.github.io/EXERCISE. For exercises with multiple levels/versions, leave a new comment in the pull request saying "Level X finished!" before pushing commits for the next level. "BONUS" levels are for extra credit.
These apply to real life, as well.
- Travis CI build should pass, which includes:
- Must apply "good programming style" learned in class
- Functions should be "short" (see Sandi Metz's rules for developers).
- Optimize for readability.
- Avoid using anonymous callbacks within other functions, especially if the callback is more than one or two lines.
- For projects, use Object-Oriented Programming.
- Any borrowed code must be properly annotated.
- Bonus points for:
- Automated tests
- Creativity (as long as requirements are fulfilled)
- Put name on sticky note on back of monitor
- Discuss what the class is going to cover
- Everyone introduce themselves
- What you "do"
- What are your goals for the class?
- What's something in JS (or technology) you worry that your peers understand but you don't?
- How many people are comfortable with Git/GitHub?
- Install GitHub Desktop
- If you are comfortable with Git already, you can skip this.
- Sign up for GitHub
- GitHub workflow
- Explain how slides work
- Get through
- Talk through requirements
- Join the chat room.
- Access NYU Classes page, where grades will be posted.
- Finish up and submit echo and countdown exercises.
- Complete blink exercise.
- Look at various approaches for
- Show recursive solution
- Developer Tools walkthrough
- Elements (HTML)
- Console (JS)
- Scripts (JS)
- Pair program to build Memory v1 (see pairing tips)
- Cover OOP, though "oop_inheritance" slide
- OOP exercise, through V2
- Memory v2 (individual)
- Code review Memory
- Get through
- Cover automated testing
- Cover AJAX/CORS/JSONP (files)
- Network tab in Developer Tools
- Finish slides
- Getting Serious example
- Multiple async
- Present and code review Mashup projects
- Possible topics (vote?):
- Regular Expressions
- Convert live input from a text area, e.g.
- Link Twitter handles
- Substitute select words for emoji, using emoji-css
- Convert live input from a text area, e.g.
- Object-Oriented design
- Code Retreat – possible "problems":
- Game of Life
- Tic Tac Toe
- Three people is possible, but two works best
- Agree on an editor and environment that you're both comfortable with
- The person who's less experienced/comfortable should have more keyboard time
- Switch who's "driving" regularly
- Make sure to save the code and send it to both people
This class assumes you are confident with this material, but in case you need a brush-up...
- see also – Other Lists
- Front-end Job Interview Questions by @darcyclarke (for testing yourself)
- Static Web Apps
- HTML5 Rocks slides
- JS: The Right Way (an overview of the JS landscape)
- Code School
- Teach Yourself to Code
- code validation: JSLint / JSHint
- sharing code snippets: gist.github.com
- asking questions: Stack Overflow
- Class Participation – 30%
- Homework – 70%
Statements on Plagiarism
New York University takes plagiarism very seriously and regards it as a form of fraud. The definition of plagiarism that has been adopted by the School of Continuing and Professional Studies is as follows: "Plagiarism is presenting someone else's work as though it were one's own. More specifically, plagiarism is to present as one's own words quoted without quotation marks from another writer; a paraphrased passage from another writer’s work; or facts or ideas gathered, organized, and reported by someone else, orally and/or in writing. Since plagiarism is a matter of fact, not of the student's intention, it is crucial that acknowledgement of the sources be accurate and complete. Even where there is not a conscious intention to deceive, the failure to make appropriate acknowledgement constitutes plagiarism. Penalties for plagiarism range from failure for a paper or course to dismissal from the University.
Reuse and building upon ideas or code are major parts of modern software development. As a professional programmer you will never write anything from scratch. This class is structured such that all solutions are public. You are encouraged to learn from the work of your peers. I won't hunt down people who are simply copying-and-pasting solutions, because without challenging themselves, they are simply wasting their time and money taking this class.
This work and all other materials under https://github.com/advanced-js are licensed under a Creative Commons Attribution 4.0 International License.