There is a lot of great advice out there on how to switch careers into software engineering, but sometimes you just want to know exactly what someone learned to switch their career. This article is about that - the resources I used in switching careers including: online readings, books, tutorials, courses, bootcamps, etc.
Keep in mind that when learning from, say, a book, I can't readily capture the google searches I inevitably made for personal learnings along the way. I highly recommend you conduct plenty of supplemental searches to clarity "fuzzy" points in your learnings.
The following learning resources are in chronological order of the order I learned them. I have also provided a rating from 1-5 based on how valuable each learning was to me at the time I learned it (ie: in context of the learnings I had already done prior).
Think Python - How To Think Like A Computer Scientist ★★★★★
This is the start-from-scratch CS training book I needed, but didn't know I had landed on the perfect one. I thank God for that shot in the dark bullseye. I can't recommend this book enough, if you're looking to start learning CS without any background in it. This book teaches you all the basic core concepts of programming without assuming you have any experience with any of them. It's amazing. If you read this book, make sure to DO EVERY EXERCISE IN THE BOOK (except the "swampy" ones). It uses the beginner-friendly language of Python, and the concepts are easily transferable to other languages.
Project: Command Line Bible Search ★★★
Built a small program that read in all the verses of the Bible from a single text file and allowed the user to search by verse, verse range, or keyword. It was all done from the command line (no fancy UI like the web). While I didn't learn a whole lot more than I had already experienced in the book, it was super encouraging to see that I could already build something "real-ish" with my knowledge. And if I could do it on the command line, it was just a matter of time before I could do it ON-line.
Key Turning Point: Upgraded from Windows to Mac ★★★★★★★★★★
I wanted to code, but setting up & maintaining my "coding environment" on Windows was wasting a lot of time. In trying to solve issue after issue, I kept reading about how much more dev-friendly Macs are. I eventually reached my frustration limit. I decided to try Mac. I bought a cheap $500 used Mac off of Craigslist (not recommended). I immediately began to see the difference. Developing on a Mac is SOOOO much easier than Windows. You get to focus on coding instead of spending large chunks of time trying to determine if issues are truly a coding bug (possible), the software not liking Windows (likely), a Windows configuration issue (also likely), etc. Most of the time, it was some odd issue with Windows that required a complex set of terminal commands to hack around. My experience with developing in Windows SUCKED. It was quickly alleviated by Mac (which I had never used prior). I consistently hear the same from my dev coworkers. If you're going into Software Development, do yourself a favor and get a Mac. I recommend MacBook Pro with 15inch screen (screen space is highly valuable for devs). It's not cheap, but as a dev using it daily, I've found it worth far more than it costs.
MIT Course - Intro to Computer Science & Programming ★★★★★
This course was definitely a bump-up in academic level, but taught some awesome core CS concepts in a way that was fairly easy to understand. Things like sorting algorithms, searching algorithms, algorithm efficiency (BigO), etc. The principles in this course have often come to mind since, even when not using them exactly. Super useful stuff that you'll draw on for guidance throughout your entire career.
The New Boston - YouTube Python Tutorial ★
This probably would have been more useful, if I had not gone through ThinkPython first. It was mostly just a refresher with a couple of twists. Think Python was definitely a better choice for teaching core computer-science principles and not just learning a new language. This was not worth the time after going through Think Python.
CodeAcademy - HTML Tutorial (Free Lessons) ★★★★
Great first intro to HTML. I got some good perspective and experience working on this tutorial. Relatively speaking, it was much more valuable than other tutorials I've taken.
CodeAcademy - CSS Tutorial (Free Lessons) ★★★★
Similar to the HTML tutorial, this was a very useful one for me. I learned a lot about how the css properties work together (which is not necessarily intuitive), and gained quite a bit of initial confidence from this.
W3 Schools - HTML Docs (read & took notes on all) ★★★
This was much more dry than a tutorial, but I took great notes and was able to become more familiar with the features of HTML. This has helped me with knowing what my options are (like different html tag structures available) when trying to design web applications.
W3 Schools - CSS Docs ★★
Similar to the HTML W3 schools stuff above, except that CSS is harder to visualize and explain, since it's so specific in nature. It's good to go through, but don't expect to have a lot of direct take-aways from this material.
Learn Command Line the Hard Way (used to be better) ★★★★
"The hard way" just implies that you type it yourself and learn by doing. For me, it was hard, but all of the good developers I knew used the command line for most things. I realized, if I want to be a good dev, I needed to learn to use the command line. It has been a most worthwhile investment. Highly recommended. Unfortunately, now that the author has published a book, I couldn't find the original tutorial. This was the closest version I could find to the one I did.
Code Academy - Ruby ★★
For a tutorial, this was a fine introduction to learning Ruby. It is a good pace if you're new to programming or just want to get your feet wet. I would recommend it for those cases. But, knowing Python made this a breeze, so I didn't take a huge amount away from this. It was a little too simple & slow. A Ruby book would have been better. (like Ruby - Learn to Program)
Book: Ruby - Learn to Program ★★★
Great book for learning the Ruby programming language. Knowing Python made it easy to fly through this book. It took a similar style to ThinkPython, except it didn't have the focus on teaching you to think like a programmer, just on teaching you the Ruby language.
Online Tutorial - Learn Git Version Control ★★★★
The principles of Git are so essential to coding that it's hard to not get a ton of value out of learning it. Git is version control, which essentially means that you have a track record of all of the changes to your code over history. This is also the system you use to store all of your work and deploy your code into live production environments (aka: launch your code out for use by real people).
Bootcamp: Launch School - Programming & Backend Development ★★★★★
This program teaches the basics of programming for the building of real software. The curriculum is by far the best I have come across for teaching principles of programming professionally. The class makes sure to hit the core points of how to understand programming, how to structure code, how to build something real, and professional best-practices that you should keep in mind... or even teach your future co-workers. I can't recommend Launch School's courses enough.
Book: Everyday Rails Testing With RSpec ★★★★
Testing is important, and this book teaches you how to be effective with Ruby's primary testing framework - RSpec. It was a great read, and combined with the principles I learned from my instructors at LaunchSchool, this helped me to be a resident-expert on testing nearly everywhere I went. I even taught testing best-practices to some of my co-workers who were seasoned testing engineers (SDET's).
Book: Rails Tutorial ★★★★
This is a useful book for an introduction to Ruby on Rails development. This book will take you through the basic principles & help you write your first application. Writing a simple application is pretty standard for tutorials these days. I went through this book before joining the Launch School bootcamp. It cost $40 or so & took some time, but made my bootcamp all the more valuable - enabling me to focus on intermediate level bootcamp learnings.
Bootcamp: Launch School - Front-End Development ★★★★★
This second course in the program was focused on the core concepts of how the web, web servers, and web pages work. I learned how to build the low-level components that power frameworks like Ruby on Rails. This gave me a level of knowledge beyond just how to use a web development framework - I now knew how it was built and could use this knowledge more powerfully. These kinds of insights and deep learnings gave me a wealth of perspective that has raised my abilities for the rest of my career. I came away having built a full web application (an interactive blackjack card came) complete with backend server and frontend website. I had built it with simple code - that is, without a fully featured web framework like Ruby on Rails.
W3 Schools - SQL Docs & Tutorial ★★★
You may have heard that most programming languages are similar to each other. This is generally true, but SQL is the exception. SQL is the language of databases & big-data. Most programming is about sending data through a flow of logic one piece at a time. But databases have TONS of data, so that approach is not efficient. SQL logic is designed to seemingly do everything at once, and lets the database optimize to figure out exactly how that should be done over LOTS of data. It's very strange to think about initially, but will be important to wrap your mind around if you'll be doing a lot with databases or big-data. I didn't learn about that mental paradigm shift here (I learned it through mentoring, but I'm guessing some books go into that concept), but this tutorial did give a good beginners introduction to using SQL with a database.
Dev Efficiency/Happiness Bump: Upgraded to a fully decked out MacBook Pro ★★★★★
It's POWERFUL. It's STABLE. It's RELIABLE. The battery is STRONG. The feel is QUALITY. It never slows down. The retina screen is crisp & beautiful (which means it doesn't strain my eyes during my preferred 12 hour days). It handles all I throw at it. It's now 6 years old and going as strong as the day I bought it. Incredible. I will buy another when (if?) this thing ever dies.
Bootcamp: Launch School - Capstone Project ★★★★★★★★★★
This is the course that launched me into an intermediate level of understanding & thinking about software development. It built and solidified my understandings of coding, application structure, test-driven development, incorporating 3rd party support libraries (like credit card support), interacting with external services, and many other essential concepts. It stretched me, and changed my thinking from being dependent on others to being able to develop my way through uncharted features towards the end-design I was aiming for. It gave me capabilities, confidence, competence, and independence. I hesitate to be cliché and say it was "life changing", but I will boldly say it was "career changing".
Project: www.unlist.it ★★★★★
Learned a TON doing this project - I can't emphasize that enough. Launch School gave me the confidence to both build systems of code and figure out how to do new things. I jumped into a huge amount of unfamiliar features I needed (messaging systems, distance based search, drag & drop uploads, infinite scroll, etc). A few months later, I had successfully built & launched a fully featured web application (www.unlist.it). It gave me a huge boost in confidence. I never marketed it for broad usage, but it's functional.
Book: JavaScript & jQuery ★★★★★
This book was a nice introduction to the concepts of JavaScript with how it applies traditionally to the web. This book focused on vanilla (raw & lowest-level) JavaScript basics along with the jQuery library that is built on JavaScript. I didn't care about jQuery, and instead focused on the JavaScript portions. It was fairly simple to learn, and was useful to go through a book focused on webpage interactions. Many web frameworks provide a set of user-friendly functions for common dynamic web interactions (similar to jQuery), but use vanilla JavaScript under the hood. By learning what's going at the lower JavaScript level, it gave me a deeper understanding of the JavaScript language as a whole.
Book Series: You Don't Know JS (Book or Github Book)
This great series is available in paperbacks or for free online via Github. Two of the books in this series are mentioned below.
Book: You Don't Know JS - This & Object Prototypes ★★★★
This book helped me better understand one of the most confusing aspects of JavaScript for the un-trained - "this". It's a context keyword that is very specific to when/how it's used, and can yield surprising results if you don't know the rules around it. If you plan to do much with JavaScript, I would say it's one of those must-reads.
Book: You Don't Know JS - Scope & Closures ★★★★
This book was very helpful with understanding JavaScript's other tricky concepts around Scopes (what references are available & what they equal given a specific place in the code) and Closures (values available within functions that can enable protected & extended life). Another recommended must-read for any developer serious about learning JavaScript. Available in paperback or free via github.
Book: Eloquent JavaScript ★★★
I read this book through chapter 8 or so. I found this book to be a great introduction to the basic concepts of the language and general learnings. I hated the exercises in this book - which seemed like unnecessarily long busy-work type problems that taught more about some non-JavaScript related logic than it did about JavaScript. But, if you like puzzles, you may thoroughly enjoy the exercises. Exercises aside, it was useful to my learning... and FREE online!
Bootcamp: Code Fellows - Introduction to JavaScript Course ★★★★
This course no longer exists (been replaced by more expensive courses), but it taught JavaScript fundamentals. I learned about the cores of JavaScript, how to use it, and how it's built (things like prototypical inheritance) & how to use the language to a level both deeper and more practical than "You Don't Know JS" series is intended for. The biggest "AHA" moment was when I finally understood the functional programming paradigm; this took me about a week of wrestling through mentally, and then another 3 weeks of unbending my mind to feel good about functional patterns.
Bootcamp: Code Fellows - Full Stack JavaScript Development Accelerator ★★★★★
This course provided breadth & experience into full-stack JavaScript: AngularJS framework, NodeJS backend, and a MongoDB storage layer. With new JavaScript frameworks continually entering the market and the existing ones undergoing constant change, it is a difficult space to keep up with. That makes it difficult to write a course that wouldn't soon be outdated. The curriculum was still being actively developed, and was not remotely to the level of LaunchSchool's training quality. Thankfully I already had a solid set of understanding from Launch School (except in JavaScript, which they did not offer at that time but do now). CodeFellows added the layer of JavaScript understandings & competence that I was missing, increasing my capabilities with web applications design. The course also made me more marketable to tech companies, as Computer Science grads are not traditionally educated on JavaScript, but now I was.
Book: NodeBeginner (Free Portion Online) ★★★
Great & practical introduction to Node. Very helpful for getting started, but doesn't get very deep. The free portion was all I read, so the rating is only representative of that portion.
Tutorial: LearnYouNode ★★★★
This was a well-done set of introductions into how to use NodeJS. Limited to the use cases included in the interactive coding workshops, but they're great learning important NodeJS concepts. Useful for both newcomers and more experienced NodeJS developers.
Online Learning: Stanford Core CS (Pointers, Linked Lists, Binary Trees, etc) ★★★★
I found these online lessons very helpful to understanding these core lower-level fundamental algorithmic principles of computer science. Individually, I would rate each at three stars, but collectively they would be a solid four. I rate them only four, because these topics usually only come up during interviews - making them quite valuable, but not highly crucial for the day-to-day stuff of development.
"Blinky" Pointer Tutorial Video ★★★
Pointer Basics ★★★
Pointers & Memory ★★★
Linked List Basics ★★★
Linked List Problems ★★★
Binary Trees ★★★
The Great Tree List Recursion Problem ★★★
CodeWars ★★★★★
This is less of structured learnings, and more of a series of unstructured learnings in the form of puzzles. This was what helped me become better at interviewing. At first, my interviews were terrible. Then I did a lot of these "kata" exercises (got up to maybe 140ish kata of experience), and my interviews went much better after that. I'm not a fan of arbitrary puzzles, but I can appreciate the great value these provided... they helped me land a job!
----------Started a new career in software engineering working for Expedia.com!----------
Project: Syynpost.com ★★★★
Built & launched a fully featured web application (www.syynpost.com). It's the what I has wished whitepages.com was, but isn't. Syynpost is a self-marketing directory for the web. Ironically, I have yet to market it for broad usage, but it's fully functional & ready for anyone to jump in and use.
It was a great experience building out something production-ready with a clean UI and complex interactions that could be implemented in a systematic and simple way. Hopefully people find it useful for helping market themselves online & helping others find them, but I really enjoyed the design of it no matter what.
Book: Programming In Scala ★
Found this book as text-booky as text books get. Dry with too much non-practical information. If I were designing a new language or compiler, maybe this book would have been more useful. It was written by the creator of Scala (Odersky), so I'm sure it's accurate, but it took too much effort to get practical value out of. I think the earlier chapters were better than the later chapters. I eventually had to stop at Chapter 21. Felt like I was wasting too much time without anything to show (nearly 1,000 pages).
Book: Code Complete 2 ★★
This book was full of "here's how you should go about doing -----" type advice. In fact, that's what I would label this book - a book of advice about all things software development related. A lot of the book is on software projects & management, but there's a good chunk dedicated to coding advice. I wouldn't say I got a lot of highly useful insights out of it, but every chapter I would get a nugget or two. For a developer, I think the applicable value of this book could be condensed into 100 pages, but as it is, it's nearly 1,000 pages.
Book: The Lean Startup ★★★★
Thoroughly enjoyed this little book on test-and-learn concepts & practices. Goes into the reasoning behind, the value of, the challenges of, and the ways to go about test-and-learn principles of software development projects. Expedia is a huge proponent of test-and-learn methodologies, and had benefitted greatly from using them. If your company uses them & you want to better understand why, OR if your company doesn't yet use them and you want to be a proponent for growth & success, I would recommend this book. Won't make you a better coder, but if your company likes the idea, you'll be writing code to implement it.
Tutorial: Docker + Docker Compose Tutorial ★★★
Great intro to how to understand and use docker in a simple context. One of the great strengths of Docker is for starting up systems of services together. As systems get bigger & have more parts, it's nice to have docker for running them together. Beyond that, it has huge capability for managing infrastructure and deployed systems. Long-term, docker & docker-compose are tools you'll likely want/need to know, and this is a great place to learn them. But starting out your dev career, I wouldn't spend much if any time here. This is one of those tools you can pick up later on.
Book: Scala For The Impatient ★★★★
THIS is the book you want to read if you you're to learn Scala. Highly recommend it for quick and highly practical advice that you can immediate start using to both understand and write good Scala code. Skip "Programming in Scala" and get this book instead. On top of being 10x better & more applicable, it's under half the length. It would be better to read this book twice than the other book once.
Upcoming Learnings (I'll continue to do & review other learnings over time)
Shell Scripting Tutorial
Comments
Post a Comment