Be a good Programmer

Recommendations for Academic Learning

Introduction to CS Course

Notes: Introduction to Computer Science Course that provides instructions on coding. Online Resources:

  1. Udacity-  Intro to CS course,
  2. Coursera – Computer Science 101

Code in at least one object oriented programming language:

C++, Java, or Python Beginner Online Resources:

  1. Coursera – Learn to Program: The Fundamentals,
  2. MIT- Intro to Programming in Java,
  3. Google’s Python Class,
  4. Coursera- Introduction to Python,
  5. Python Open Source E-Book

Intermediate Online Resources:

  1. Udacity’s Design of Computer Programs,
  2. Coursera- Learn to Program: Crafting Quality Code,
  3. Coursera- Programming Languages,
  4. Brown University- Introduction to Programming Languages

Learn other Programming Languages

Notes: Add to your repertoire – Java Script, CSS, HTML, Ruby, PHP, C, Perl, Shell. Lisp, Scheme. Online Resources:

  1. – HTML Tutorial
  2. Learn to code

Test Your Code

Notes: Learn how to catch bugs, create tests, and break your software Online Resources:

  1. Udacity- Software Testing Methods
  2. Udacity- Software Debugging

Develop logical reasoning and knowledge of discrete math

Online Resources:

  1. MIT- Mathematics for Computer Science,
  2. Coursera – Introduction to Logic
  3. Coursera – Linear and Discrete Optimization,
  4. Coursera – Probabilistic Graphical Models,
  5. Coursera – Game Theory.

Develop strong understanding of Algorithms and Data Structures

Notes: Learn about fundamental data types (stack, queues, and bags), sorting algorithms (quicksort, mergesort, heapsort), and data structures (binary search trees, red-black trees, hash tables), Big O. Online Resources:

  1. MIT Introduction to Algorithms,
  2. Coursera – Introduction to Algorithms Part 1 & Part 2,
  3. Wikipedia- List of Algorithms,
  4. Wikipedia- List of Data Structures,
  5. Book: The Algorithm Design Manual

Develop a strong knowledge of operating systems

Online Resources:

  1. UC Berkeley Computer Science 162

Learn Artificial Intelligence

Online Resources:

  1. Stanford University- Introduction to Robotics
  2. Stanford University- Natural Language Processing
  3. Stanford University- Machine Learning

Learn how to build compilers

Online Resources:

  1. Coursera – Compilers

Learn cryptography

Online Resources:

  1. Coursera- Cryptography
  2. Udacity- Applied Cryptography

Learn Parallel Programming

Online Resources:

  1. Coursera- Heterogeneous Parallel Programming

Recommendations for Non-Academic Learning

Work on project outside of the classroom.

Notes: Create and maintain a website, build your own server, or build a robot. Online Resources:

  1. Apache List of Projects
  2. Google Summer of Code
  3. Google Developer Group

Work on a small piece of a large system (codebase), read and understand existing code, track down documentation, and debug things.

Notes: Github is a great way to read other people’s code or contribute to a project. Online Resources:

  1. Github
  2. Kiln

Work on project with other programmers.

Notes: This will help you improve your ability to work well in a team and enable you to learn from others.

Practice your algorithmic knowledge and coding skills

Notes: Practice your algorithmic knowledge through coding competitions like CodeJam or ACM’s International Collegiate Programming Contest. Online Resources:

  1. CodeJam

Also Learn:

  1. Linear Algebra | Mathematics | MIT OpenCourseWare
  2. Coding the Matrix: Linear Algebra Through Computer Science Application

Learning these will help you understand Regression Model in future- The basic step of Machine Learning. You won’t be taught these linear algebra courses in any school, colleges, research labs or institution. Learn it on your own. Calculus

  1. Calculus 1 – Ohio State University
  2. Pre-Calculus Courses – Universitat Autonoma de Barcelona
  3. Calculus for Beginners and Artists – MIT

Statistics & Probability

  1. Coursera- Statistics One
  2. RNG, Advanced Placement —