Hello,
I have spent the last 8 months learning as much C++ programming as possible from all free internet sources I could find. Though I work part time at a crappy job, I have been putting in about 20-30 hours a week into learning programming, and now I am a bit uncertain about what I should learn next. What I know fairly well at this point;
- sorting algorithms(heapsort, mergesort, etc)
- using the STL (sets, vectors, next_permutation, maps etc)
- binary search trees
- BFS and DFS on directed and undirected graphs
- beginner level dynamic programming (shortest path, longest sub-sequence,best order of multiplying matrices ) with multi-dimensional arrays
- basic greedy algorithms
- single and double linked lists
- Tries
- intermediate level string manipulation with file i/o
- hash tables (using an array of linked lists in case of collisions)
- bitwise operators (bitmasks, and some XOR tricks)
- Much of the OOP syntax, though often I choose to use structs rather than classes
- recursion( basic, basic + memoization, backtracking)
- dynamic memory management( both C style and C++ style)
- #define macros (yes I have seen some the potential problems, but they can be fast and fun)..
I can implement basic versions of the above with no notes (other than maybe implementing a Trie, which I have not worked with as much). Most of the time I have spent doing problems sets, and reworking until I really feel I understand the concepts. Initially I spent a large amount of time on recursion and pointers, because they were the concepts that I found the most challenging.
what I have not yet learned;
- working with third party APIs
- graphics(I have worked a little with this, but I chose to learn more basics first)
- throwing exceptions
- anything related to interacting directly with hardware
- anything that directly uses internet data
- genetic algorithms
- any other IDE other than Visual Studio 8(it was free and came with learning materials)
- the 'virtual' keyword within classes
Since most of the available online free CS material relates to algorithms, that is what I have solely focused on this year . But I am a bit worried that I made the wrong choice, and would have been better off learning the less-difficult-more -popular languages such as Python, Javascript, or Ruby on Rails. Plus so many people relentlessly bash C++ that I fear I may be wasting my effort on a language that will no longer be used. My previous work was in Finance (derivative securities) but I no longer want to work for the White Collar Terrorists and want to change careers.
Ultimately I would like get into game programming, or anything else than uses the algorithmic material I have learned. I actually really enjoy what I have covered so far.
I would appreciate answers to the following questions;
Did I choose the wrong material and language to study? If so what should I learn and why?
How should I narrow down my field of study to include only skills that are currently in demand from employers? Will they appreciate my attention to the fundamentals, or do they only want very specific skills? Specific recommendations appreciated.
Ultimately I want to be working as a junior programmer by the end of the year, and need to orient my studies to what is in demand.
Thanks!