Hi all,

I’d highly recommend some courses at coursera that can take you from complete novice to fairly skilled programmer in a brief period of time. These are courses I wish I had available to me for free when I was learning to program, will cut your learning time drastically.

First course

Learn to Program: The Fundamentals

This course will teach you all of the basic concepts of programming using python - variables, functions, parameters, looping, testing, documenting, and give you some familiarity with some basic data types (int, float) and more advanced data types (string, list, dictionary). Also will teach you some useful functions that will help you with more quickly learning and using python (dir, help)

The second course, which is a follow on to the first course is

Learn to Program: Crafting Quality Code

https://class.coursera.org/programming2-001/class/index

This will teach you more advanced testing, give you a formula for algorithm design, teach you how to create your own classes/types.

Next I’d recommend learning about algorithms and data structures,

Algorithms Part I

https://class.coursera.org/algs4partI-002/class/index

This is an extremely accessible course teaching you many fundamental algorithms and data structures.

Algorithms Part II

https://class.coursera.org/algs4partII-001/class/index

The second course teaches more algorithms that you will find useful.

Note that both of the above two courses use java as the teaching language, but they should be fairly understandable to you once you have finished the first two python courses, since programming is programming.

Next you can learn parallel programming on the GPU.

Heterogenous Parallel Programming.

https://class.coursera.org/hetero-2012-001/class/index

The GPU programming course uses CUDA a variant similar to C.

There are two other Algorithms courses available - taught by a different instructor. The lectures are far more focussed on theory and proofs. Unless you have a strong formal maths background I wonldn’t advise taking them since they largely cover the same ground as the above two courses, but with a formal proof focus.

I’ve included them here for completeness.

Algorithms: Design and Analysis, Part 1

https://class.coursera.org/algo-003/class/index

Algorithms: Design and Analysis, Part 2

https://class.coursera.org/algo2-2012-001/class/index

The first four courses all have very reasonable learning curves. You can probably start implementing your own tools or making tweaks to existing tools after the first course, but you will be able to implement fast tools after the algorithms course.

After the above courses you can also explore more programming topics, such the as the excellent Neural Networks for Machine Learning,

https://class.coursera.org/neuralnets-2012-001/class/index

Here are more useful resources - a list of common error messages and the most frequent causes of them (can help you to debug your program more easily)

https://www.edx.org/courses/MITx/6.00x/2012_Fall/wiki/6.00x/common-errors/

and a list of idioms that show the ‘python way’ of doing things, that will increase your code readability

https://www.edx.org/courses/MITx/6.00x/2013_Spring/wiki/6.00x/python-idioms/