Even though we had an intense two week period where we covered a lot of fundamental topics in Computer Science, this is class is but a small portion of what there is to learn in this exciting field. The first stepping stone you have after being comfortable with the material of this course is to finish up the topics of CS 106A, the original introductory class at Stanford University this class is based on.

Finishing CS 106A

CS 106A is an intense 10-week class at Stanford, and it covers a few more topics than we did and has several other projects that we didn't have time to cover in this course. We made assigments that cover the concepts we skipped. For this, you should install the Stanford version of Eclipse on your own computers, as described in this installing Eclipse handout.

The Line

First, we made an assignment which reviews the concepts we covered in class. Download the starter code from the home page and complete the line.

Strings and Hangman

As you know Strings are a type of variable that we use to store sequences of characters in computer's memory, and we generally used them throughout the course to keep track of things like informative messages, or scores to be displayed in games. However, there's a lot more to Strings than that! In fact, a lot of interesting problems in Computer Science involve working with Strings. While we haven't learned much about what you can do with Strings in this course, a great way to start learning is to build a project that requires you to work with Strings. The assignment all Stanford students do to learn Strings is to build the game of Hangman (“Adam asmaca” as the Turkish people call it). We went ahead and wrote a special hangman handout for you and added the starter code on the course website. You can go there, read the handout, download the code to your computer, import the project to Eclipse and start working on it immediately.

Instakilo and HashMaps

One final concept that you have to learn is HashMaps. See if you can review the concept of hashMaps, then try the Instakilo assignment.


After 106A

Once you're done with CS 106A material, you can go on and explore any field of CS you want! You can move on to the material on CS106B, the second introductory course on the Stanford curriculum, but there are a myriad online resources that teach different CS concepts for free, so you can choose what you want to learn and learn at your own pace, from your own computers. We have created this handy guide for some of the good online courses that are appropriate for your level, but websites like Khan Academy, Codecademy, Udemy and Coursera have a lot of other courses you can follow as well, if you choose to go even deeper.

Web Programming Courses

Refreshers:

You covered some of the material in these courses, but taking them may be a good idea if you want to refresh and apply your knowledge before moving on

  • Codecademy HTML and CSS: This course teaches the basics of HTML and CSS from scratch. Can be a good refresher for web development.
  • Codecademy JavaScript: This course teaches the basic syntax of JavaScript, and goes a little bit further than we did. Good starting point if you want to do more with JavaScript.

Building on top of basic JS, HTML, CSS

  • Codecademy jQuery: Teaches using jQuery(a handy JavaScript framework) to make interactive web pages.
  • Coursera: Internet, History, Technology and Security: Not a programming course but teaches about the history of the internet and generally how it works. Has some interesting information about internet technologies and web security.
  • Codecademy Make a Rails App: Leads to building a basic web app from scratch using Ruby on Rails, a popular web framework(assumes basic HTML, CSS, JS). Good for those who want a big challenge after JavaScript and those who want to build more complex web applications.

Graphics

  • Khan Academy Advanced Javascript - Games and Visualizations: You can combine your JavaScript knowledge with your graphics knowledge to make games and other cool graphics applications that run in the browser in this course.
  • Udacity Interactive 3D Graphics: A slightly more advanced JS graphics course, can go after the KhanAcademy one(the course website claims no previous experience necessary but some knowledge of JavaScript is helpful.) Has approximately 48 hours of material.

Java Programming

  • Udacity Intro to Java Programming: Approximately 96 hours of material. Teaches Java from scratch(no previous programming necessary), but probably goes beyond what we taught. You can use this course if you want to go in depth in Java and learn to program Java outside of Stanford libraries.
  • Udacity How to Make Android Apps: Approximately 60 hours of material. Teaches Android assuming decent Java experience. This can be quite challenging and complicated, so you may want to take the other Java course first.

Other Interesting Computer Science Topics


Helpful Resources

From now on, you will continue your journey of learning Computer Science on your own, but that doesn't mean there aren't resources for help! While we can't be there to check your code and teach you new concepts, you can use the class forum we created on Piazza to help out each other. You can find lecture notes of past CS106A classes here. If you need a comprehensive reference of all the methods we use, you can find the ACM documentation here and the general Java documentation here. Further on, after you are done with the remaining topics in CS106A and want to move on to new topics, a website called Stack Overflow will be your best friend. It is a question and answer website used by many programmers from around the world. If you have a problem, someone else likely had that problem before, and probably asked that question on Stack Overflow, just searching your problem on this website will likely give you ideas on how to approach a problem, just like suggestions from Section Leaders!

A note on copying others' code

Seeing quality code written by experienced programmers can be very helpful in learning, as it will show you elegant and clever ways of solving problems and proper ways of formatting your code, so there's nothing wrong in looking at other people's code when you are learning on your own. However, as learning programming becomes your personal journey, keep in mind that this is something you are doing for yourself, because you love it! Copying someone else's code may give instant gratification by letting you solve a problem quickly, but it will harm your learning, and you won't get the satisfaction of creating a solution to a problem, which is one of the most beautiful moments of programming. There's no one out there to check if you copy others' code like at school, but remember that doing so just kills all the fun of programming.