| Some of the best programmers I have seen have a non-CS background, and were self-taught. Based on how I interview (and also on various interviews I have attended), here are some suggestions on how to begin: 1) Start with some basic data-structures:
a) Arrays
b) Linked List: both single and double
c) Hash Tables
d) Binary Trees with some familiarity to one or two types of balanced trees - e.g. Red-Black and/or B-trees.
e) Stacks and Queues - built on arrays and/or linked-lists If you can practice it with writing some code in C or Java, that would be a big plus. You can get a hang of the aforesaid structures by coding the usual functions - find an element, insert, modify, delete, iterating through all the elements etc... As you are doing it, get a feel of the big-O notation - i.e. understand the various tradeoffs on why you would pick a certain data structure to solve a particular problem 2) Get some exposure to search and sorting algorithms and understand the various trade-offs - maybe start with linear and binary search, insertion sort, merge sort and quicksort (for the latter two, you will get an idea of divide-and-conquer strategies, recursions and so forth). Most advanced data-structures/algorithms are built on the aforesaid foundations, so with (1) and (2) alone you have strengthened it, and based on your interest, you can dig down further if needed to related areas - e.g. graphs, linear algebra problems etc... 3) Get an exposure to OS/System level programming if possible - e.g. if you choose Linux, you can get some idea of processes vs threads, schedulers, memory mgmt, file and network IO etc.. At the very least, writing some toy code here, say opening files, forking a process, socket IO and so forth will give you some practical exposure. 4) HTTP/Web services: You already mentioned meteor.js so it looks like you are already familiar here esp. with tools like Firebug to see raw HTTP payloads and so forth. 5) Databases - SQL, and maybe some NoSQL use-cases. 6) OOP and Design Patterns As you get a grip on the aforesaid areas, the more code you read, it will add to the practical use-cases. For some of the topics, you could get familiar with the area using any of your favorite scripting languages (including posix functions for point 3). Give yourself ~ 6+ months and get as much exposure with practical use-cases. |