The Self-taught Programmer
____________________________
Cory Althoff
Copyright 2016 by Cory Althoff
All rights reserved. This book or any portion thereof
may not be reproduced or used in any manner whatsoever
without the express written permission of the publisher
except for the use of brief quotations in a book review.
ISBN 978-1-940733-01-2
Library of Congress Number
www.theselftaughtprogrammer.io
This book is dedicated to my parents Abby and James Althoff for always supporting me.
Part I Introduction to Programming
Chapter 1. Introduction
"Most good programmers do programming not because they expect to get paid or get adulation by the public, but because it is fun to program."
Linus Torvalds
I majored in Political Science at Clemson University. Before I chose this path I considered Computer Science. I even enrolled in an Introduction to Programming class my Freshman year, but quickly dropped it. It was too difficult. While living in Silicon Valley after graduation I decided I needed to learn to program. A year later, I was working as a software engineer II at eBay (above an entry level software engineer, but below a senior software engineer). I dont want to give the impression that this was easy. It was incredibly challenging. In between throwing things at the wall, it was a lot of fun too.
I started my journey learning to program in Python, a popular programming language. This book, however, is not about teaching you how to program in a specific language (although it does). There are plenty of amazing books, classes and resources that do that already. The focus is everything else those standard resources do not teach you. Its about the things I had to learn on my own in order to become a software engineer. This book is not meant for someone looking for a casual introduction to programming so they can write code as a hobby. This book is written specifically for those looking to program professionally. Whether your goal is to become a software engineer, an entrepreneur or to use your new programming skills in another profession, this book was written for you.
Learning a programming language is only part of the battle. There are other skills you need in order to speak the language of computer scientists. I will teach you everything I learned on my journey from programming novice to professional software engineer. I wrote this book to give aspiring programmers an outline of what they need to know. As a self-taught programmer, I didnt know what I needed to learn. The introduction to programming books are all the same. They teach you the basics of how to program in either Python or Ruby and send you on your way. The feedback Ive heard from people finishing these books is, What do I do now? I am not a programmer yet, and I dont know what to learn next. This book is my answer to that question.
How This Book Is Structured
This book is divided into six parts, based on moving through the following stages: learning to program, learning object-oriented programming, learning to use programs (like your operating system) that will make you a better programmer, learning Computer Science, learning to program for production and getting a job and working on a team.
Many of the subjects covered in a single chapter of this book could beand arecovered by entire books. My goal is not to cover every detail of every subject you need to know. My goal is to give you a mapan outline of all of the skills you need to develop in order to program professionally.
Part I: Introduction to Programming. You will write your first program as quickly as possible, hopefully today. If you already know how to program you can use this section to start learning Python. If you already know Python, skip it.
Part II: Introduction to Object-oriented Programming. I cover the different programming paradigmsfocussing on object-oriented programmingand build a game that will show you the power of programming. After this section, youll be hooked on programming.
Part III: Introduction to Programming Tools. You learn to use different tools to take your programming productivity to the next level. By this point you are hooked on programming and want to get even better. You will learn more about your operating system, how to collaborate with other engineers using version control, how to use your Interactive Development Environment to boost your productivity and how to install and manage other people's programs.
Part IV: Introduction to Computer Science. Now that you can program, you will have all kinds of questions about how everything works. This section is where a lot of those questions get answered. I cover algorithms and data structures, network programming and computer architecture.
Part V: Programming for Production. You will learn to program for production ( create code that is actually used by other people). I cover the software development process, testing and best programming practices.
Part VI: Land a Job. The final section is about getting a job as a software engineer, working on a team and improving as a programmer. I provide tips on how to pass a technical interview, work on a team as well as advice on how to further improve your skills.
If you dont have any programming experience, you should try to practice programming on your own as much as possible between each section. There are additional resources to explore provided at the end of each section. Dont try to read this book too quickly. Instead, use it as a guide and practice for as long as you need in between sections .
Endgame First
The way I learned to program is the opposite of how Computer Science is usually taught, and I structured the book to follow this approach . Traditionally, you spend a lot of time learning theory ; s o much so, that many Computer Science graduates come out of school not knowing how to program. In his blog, Why Cant Programmers.. Program? , Jeff Atwood writes: Like me, the author is having trouble with the fact that 199 out of 200 applicants for every programming job cant write code at all. I repeat: they cant write any code whatsoever . This led Atwood to create the FizzBuzz coding challenge, a programming test used in programming interviews to weed out candidates. Most people fail the challenge, and thats why we spend so much of this book learning the skills you will use in practice. Dont worry, we also learn how to pass the FizzBuzz test.
In The Art of Learning , Josh Waitzkin of Searching for Bobby Fischer fame, describes how he learned how to play chess in reverse. Instead of studying opening moves, he started learning the endgame (where there are only a few pieces left on the board) first. This gave him a better understanding of the game , and he went on to win many championships. Similarly, I think it is more effective to learn to program first , then learn theory later, once you are dying to know how everything works under the hood. That is why I wait until the fourth section of the book to introduce Computer Science theory. While theory is important, it will be even more valuable once you already have programming experience.
The Self-taught Advantage
Learning how to program outside of school is increasingly common. A 2015 Stack Overflow (an online community of programmers) survey found 48 percent of respondents did not have a degree in computer science . When I was hired at eBay, I was on a team that included programmers with CS degrees from Stanford, Cal and Duke, as well as two Physics PhDs. At 25, it was intimidating to realize that my 21-year-old teammates knew 10 times more about programming and computer science than I did.
As intimidating as it might be to work with people who have bachelors, masters and PhDs in Computer Science, never forget you have what I like to call the self-taught advantage . You are not reading this book because a teacher assigned it to you, you are reading it because you have a desire to learn, and wanting to learn is the biggest advantage you can have.
Next page