Skip to content

A learning diary as I teach myself computer science

Notifications You must be signed in to change notification settings

bryanwb/teachmyselfcs

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

4 Commits
 
 
 
 
 
 
 
 
 
 

Repository files navigation

What is This?

I have been a working in the software field for over 14 years now. I started as a Windows sysadmin, then Linux sysadmin, and for the last 6 years I have been a full-time software engineer.

I came upon the excellent Teach Yourself CS and quickly identified myself as a "Type 2" engineer. I have been very good at teaching myself enough to progress to the next technical level in the software industry but done a lousy job at mastering the fundamentals. I first taught myself Linux. Next I mastered Python. Then it was Ruby. I most recently got a basic understanding of functors, applicatives, and monads after working through LearnYouAHaskell. However, I know what big O notation is but cannot do it. I understand binary but don't ask me to do any bit twiddling. I haven't the foggiest how queuing theory works or even how to implement quicksort.

A biographical aside

The odd thing is that I actually have a degree in computer science. I discovered programming mid-way through my junior year in university. It was immediately obvious that computer science would be far more rewarding both emotionally and financially than my then major in economics. Unfortunately, it did not go smoothly. I took all the courses I could possibly take concurrently in order to graduate before I ran out of money. I was a solid B student but earned a number of Cs. One of my professors discouraged me from staying in the major.

Once I finally graduated, I struggled to hold a job programming. I just couldn't still at a desk for 8 hours a day or even concentrate on programming problems for that length of time. I was diagnosed with ADHD as a young child but my parents chose not medicate me as I never had any (big) problems in school. However, it was a big problem for my job as a programmer. One year of university, I decided to pursue another passion of mine, travel. I took a job with the U.S. Foreign Service as a Window System Administrator. The job took me Tel Aviv, Hong Kong, and finally Kathmandu. The work wasn't terrifically interesting but the lifestyle was awesome. After five years in the service I found myself managing the IT operations for the US Embassy in Kathmandu. I had a team of 15 people under me and a sizable annual budget.

Meanwhile, my bookshelf continued to swell with large books that I would start but never complete. Ray Kurzweil's Age of Spiritual Machines, The Singularity is Near, the Selfish Gene, The Black Swan, Elementary Game Theory, you get the picture. I was tired of starting books but rarely finishing them. It was time for a change. I decided to treat my ADHD and I started taking Ritalin. My world turned upside down. My reading speed went from 10 pages an hour to 30-40. I read voraciously and could spend all day doing it. I got into Linux and spent a weekend configuring wifi on my linux laptop. I read Dive into Python and dove in. I read K&R and failed to understand pointers but loved trying. Fuck my managerial career, I wanted to code all day. So I quit my stable, well-paid job in the U.S. Foreign Service and got a job as a Linux System Administrator. As a sysadmin I wrote 1000s of lines of Ruby code to automate my employers deployments. That work led to a position as a software engineer.

Where I am now

I now work remotely as a software engineer for an awesome company. I am well compensated for my work. That's not a stopping point. I love computers and I love programming and I am sick of nibbling at the edges. To that end, I am embarking on reading all the books recommended by Teach Yourself CS and placing my problem solutions in this repository.

Here is my adapted list of books and my current status on each. I have added a few entries because I had committed myself to reading them before discovering Teach Yourself CS. Most notably, there is haskell book at the front of the list that I read immediately prior to discovering the Teach Yourself CS website.

Book Status Exercises Completed Date Finished
LearnYouAHaskell DONE No 15 Feb 2017
~~ Real World Haskell~~ STOPPED at ch 6
Nand2Tetris
Computer Science from the Bottum Up
Algorithm Design Manual
Mathematics for CS
How to Solve It
Operating Systems, 3 easy pieces
Computer Networking, Top Down Approach
Dragon Book
Distributed Systems

note: I have stopped reading Real World Haskell due to increasing frustration with how the material was presented. I have added HaskellBook in its place on the "Fun" list.

note1: I have added Computer Science from the Bottum Up as it is a nice hands-on tutorial writing low-level C programs on Linux.

To be frank, this process is more than a little daunting. I have two small children and my wife has a demanding career of her own. This might take me five years.

Fun projects/reading

Project Status Exercises Completed Date Finished
BuildYourOwnTextEditor Started No
Haskell Book

Tooling

When and wherever possible I will do all work in Emacs.

Bryan W. Berry March 15, 2017

About

A learning diary as I teach myself computer science

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published