### Personal Work Study

Oct. 7th, 2009 02:50 am**Originally published at AesTerra. You can comment here or there.**

^{1}, I find myself in an interesting spot.

Specifically, I am between professional careers, attempting to move from what was essentially a startup, to a higher paid, professional organization. Of these, I hope to get into Microsoft or Google, but I’ll settle for anything that lets me get my hands dirty with programming for a livable paycheck.

With programming in mind, I’ve discovered that skills atrophy if you don’t use them. Having finished a Master’s degree in Business (because it was free

^{2}), I’ve discovered that not only have my implementation skills declined since 2006, but that I require a crash course in Computer Science.

I’ve decided to give myself precisely that. I’m already a reasonably good implementer and designer, having shipped professional products and an award-winning game.

^{3}However, I acknowledge that I lack a good background in theory, particularly related to the analysis of algorithms, complexity theory, and software design methodologies.

In the interests of being entirely open about this process, and so others might benefit, here’s the "curriculum" I planned for myself. Where appropriate, I’ve noted any supplemental materials or abuses of notation:

- Analysis of Algorithms

- Basic Conceptual Analysis and Mathematical Theory

- Asymptotic Analysis
^{4}

- Complexity Analysis

- Study of time and space complexity from AB2007,
^{5}especially Turing machines, , , and conjecture related to

- Study of time and space complexity from AB2007,
- Every interesting algorithm shared by CLRS 2001 and HPS 2008
^{5}

- Study of the problem archive from TopCoder.com (requires login).

*SPOJ*and*UVa Online*Judge have also been suggested to me. Thanks,*Kistaro*!

- Basic Conceptual Analysis and Mathematical Theory
- Architecture and Implementation

- A complete read of Petzold 2000

- Study of
*The Elements of C++ Style*(MBG 2004), for notational and software clarity

- A refresher of x86 Assembly, regarding compilers and low-level implementation

- A refresher of C implementation, regarding memory management and language structure

- A refresher of C++ implementation, particularly class structure and problems of inheritance

- Implementations of the more useful algorithms in C++
^{6}

- A refresher project, consistent with my interests in 3D design

- Simple scene graph utility, culminating in what I hope will be a networked game

- Simple scene graph utility, culminating in what I hope will be a networked game

- A complete read of Petzold 2000
- Design Theory, Methodologies, and Practicalities:

- In no deliberate order, Brooks 1995, HT 1999, SH 2006, and related books

- A read of
*Programming Interviews Exposed*(MS 2000), so I can actually make it in the door

- In no deliberate order, Brooks 1995, HT 1999, SH 2006, and related books

The prerequisites I bring to the table:

- Three professional years with C/C++ and Python

- A familiarity with Windows and Linux from the kernel level forward

- Practical experience in industry, from my former position

- A significant mathematical and 3D background, from Engineering and Second Life development

Is there anything I’ve missed that might be interesting here? If so, let me know, so I may add it to the list.

Thanks for reading.

—

Notes:

^{1}See http://goldkin.livejournal.com/3204.html.

^{2}By family faculty benefit. I was given an ultimatum to finish my studies prior to the end of the year, so I chose to use my existing credits for a one year degree. Since the college closed their MIS program, that left me with a generic MBA.

^{3}The details are not listed here, in order to keep a search barrier between work and my personal life.

^{4}Notational abuse of equality consistent with CLRS 2001. Wikipedia states this in terms of set notation (), but I find the method used in CLRS to be more elegant in formal notation.

^{5}Restating the material contained in these books would be tedious in what is already a long post. I may, however, post interesting implementations from my own code tree in future posts.

^{6}This necessitates discussion on my workflow for a future post. For now, I use a mixture of Emacs, GCC, Subversion, and the GNU build system.

This post excludes reference books, such as

*Design Patterns*, manuals, and programming documentation.