Teach Yourself Software Engineering

Introduction

It is my opinion that you can teach yourself how to become a Software Engineer without any formal education. The advent of the Internet and the ubiquity of affordable computer hardware means that all you need is the desire and willingness to invest the time to learn. That is not to say, that after x number of hours, days, weeks, or years that you will be an expert and know everything. I have been doing this since the mid 1990’s and I am still learning new things every day. Like most of the things in my life that I like doing, this is a life-long endeavor. There is always more to learn, discover, and ways that you can improve.

My Background

I have a BA in Art Studio with a concentration in East Asian Studies. Most of my painting was traditional oil on canvass or board. My drawings were in a variety of media; pencil and graphite, mixed media, and some lithography. My focus in East Asian Studies was on Japan.

I graduated college in 1994 and the 1990’s recession meant that there were few if any jobs available. Especially for an Artist. The i486 microprocessor came out in 1989 and by this time enough consumers had one that the computer gaming industry started adding real graphics and art to their games. There was a demand for digital 2D and 3D artists and I decided that was my best bet. I scraped together some money and with my parent’s help bought myself a Compaq desktop PC with an i486 DX2-66 processor and managed to “find” a copy of AutoDesk Animator and set about teaching myself how to use it and how to translate my traditional drawing skills to the digital arts.

After about a year of working in retail and restaurants and studying in my spare time I managed to land a job at Bethesda Softworks. I continued to grow my digital arts skills and learned 3D animation, however I found myself drawn to the coding side of the business. From computer gaming I moved on to web design and development; to back-end development and providing managed hosting services (including running ALL of my own infrastructure except an Internet connection); to working in the Big Data space.

Study Modules

This guide is loosely based on and an expansion of Steve Yegge’s article ‘The Five Essential Phone-Screen Questions’. Following is an outline of the study modules

Linux

Linux is the current OS for modern computer systems. Some of this includes a knowledge of hardware and systems engineering too.

  • Scripting
  • Regexes
  • Services
  • Disks

Networking

Coding

Basic coding skills

Object-oriented Design

A knowledge of basic object-oriented (OO) design concepts and patterns and practices.

Data structures

Bits and Bytes