I've worked as the customer support specialist or technical documentation writer in SaaS companies for about 18 years now, and at every company I work at I tend to do sysadmin and/or engineering work as well, mostly when I'm bored or did all my tasks for the day. Recently, my manager pulled me aside and mentioned I should be pursuing an engineering job instead, as they think I've the skills to do so, and offered to move me from support to engineering. The thought has crossed my mind, but I have to admit, I'm scared.
I started computer science in college a few times, but left because the first semester was incredibly slow or boring (I recently found out I have ADHD), so I lack the basics. For example, I only learned what a "method" was a few years ago, when I started writing open source Go programs and libraries. I know my way around a server (I have a homelab and self-host most services I use) and can code following best practices and whatnot, but if the company gave me a project today I wouldn't know where to start. If I'm coding for myself and I find out I made a mistake after spending days on the project, no problem, I can start over if I need to, but things are quite different if you're doing that as your job.
Now that I'm medicated for my ADHD I thought about going back to college, but that wouldn't solve my problem right away. Now that my wife is pregnant, juggling work, family responsibilities, and college would be a bit much, so I thought reading a few books might help. I really want to accept this offer, as it'll come with a significant salary bump (which would help a lot with the baby), but also because I really enjoy programming and solving problems with code.
So, basically, I'm looking for book recommendations that cover CS fundamentals and programming logic.
Ideal resources would: 1. Provide a structured approach to fill knowledge gaps. 2. Cover topics like software architecture, algorithms, and design patterns. 3. Be engaging enough for someone with ADHD to read. 4. Offer practical examples or projects.
Has anyone successfully made a similar career shift? What resources were most helpful? Are there alternatives to books that you'd recommend for my situation?
Any advice on managing the transition from support to engineering would also be greatly appreciated.
I want to add a caveat that your manager and colleagues should be a resource for you when tackling projects at work, and not to hesitate to ask pragmatic questions about the project(s) you might pitch in on there. It's ok to not have all the fundamentals down, as long as you're working to be a net positive on the project(s).
I went through some of the books listed in the teach yourself CS resource. https://teachyourselfcs.com/
A subset of the resources listed there are probably the most pragmatic for the topics you asked, but you might discover that you're interested in other areas of CS as you slowly work through them. I think it's ok to nibble away at exercises while juggling your family and work obligations.
* Structure and Interpretation of Computer Programs - SICP. If the book doesn't necessarily click right away, doing a subset of the Scheme exercises are still worthwhile.
* Computer Systems: A Programmer's Perspective - CS:APP. Incredibly helpful knowledge about low-level programming.
* Computer Networking: A Top-Down Approach - You mentioned having a home lab, and more networking understanding will help contextualize some of your work.
However, I might suggest that books and theoretical knowledge are not the main things you need right away. I moved into software engineering after a long time in science. I had done plenty of coding, and had a pretty decent amount of theoretical knowledge, but there was still quite a bit of practical adjustment. I really like Rzor's suggestion of https://missing.csail.mit.edu to start with.
Beyond that, I think maybe I would find some specific codebases that you'd like to understand better, and start with reading more of those. I feel like that's often better than books for picking up idiomatic usage and patterns in given domains. As you hit specific barriers, I think it will be much easier to pick up the intrinsic motivation to dip back into theoretical knowledge at that point.
https://en.m.wikipedia.org/wiki/Structure_and_Interpretation...
Given the context you provide, I would suggest you try an online course or two rather than books. There are plenty of free ones but stick to those from credible sources like universities. With ADHD, you will struggle over dry textbooks. The external structure provided by a course would probably work better even with your improved health. If you start with a single self-paced course, you can go as fast as you like and avoid boredom. Burn through it in a weekend, great! Take it slower, also fine. The current lesson covers material you already know, skip it!
Ask your manager what language(s) are used at your company if you don't already know, and filter courses to focus on that for the most rapid progress to your goal.
I didn't find SICP to be that fantastic as I already learned a lot of the principles from the masses of books I've read and software systems I've taken apart to understand.
I can also recommend taking Coursera courses on compilers, ML, architecture, anything interesting from a good US university. At least if they're still a thing :-)
1. Programming: Beyond the basics
2. Computer Systems
3. Operating Systems
4. Algorithms and Data Structures
5. Computer Networks
This is going to take time but it will be worth your time.
For discrete Math I sincerely recommend you to take a look at this book "Discrete Mathematics with Applications by Susanna Epp. This is an excellent book and it has good problems.
I will also recommend you to look at https://fa24.datastructur.es/ this is a very good beginner course on data structures that is completely free by UC Berkeley
Honestly, if your manager suggested it, do not be scared and take advantage of the opportunity. Be humble, ask questions, find the senior programmer that loves to talk and they will teach you everything.
I do feel a lot better after reading everyone's comments here, and will definitely talk with my manager about maybe starting this transition soon, maybe in a month or two.
* Logic for Computer Scientists by Uwe Schoening
* Logic in Computer Science by M. Huth and M. Ryan
The first one is short, very elegant and doable. The second one is a bit longer, but also at freshman level.
There are PDFs circulating on the Internet. Skim through those before buying a hardcopy.
* https://teachyourselfcs.com - book list and open course suggestions
* https://csprimer.com - Oz's own curriculum for CS fundamentals
At the end of the day, CS deals with computers. The book guides you through building and programming your own computer.
I'm a CompEng PhD myself and going through it right now. I keep finding gems at every page.