Go up: [[Software Engineering MOC]]
For Ivan
# Navigation
- [[#Introduction|Introduction]]
- [[#How To Use This Document|How To Use This Document]]
- [[#Communities|Communities]]
- [[#Resources|Resources]]
- [[#Computer Science|Computer Science]]
- [[#Programming Disciplines|Programming Disciplines]]
- [[#Web Development|Web Development]]
- [[#Machine Learning Engineering|Machine Learning Engineering]]
- [[#Data Engineering|Data Engineering]]
- [[#Programming Languages|Programming Languages]]
- [[#Javascript|Javascript]]
- [[#Python|Python]]
- [[#Java|Java]]
- [[#Software Design|Software Design]]
- [[#Programming Tools|Programming Tools]]
- [[#IDEs|IDEs]]
- [[#Version Control Systems|Version Control Systems]]
- [[#Professional Development|Professional Development]]
- [[#Curriculum|Curriculum]]
# Introduction
This is an effort to not only keep track of useful resources to learn to become a professional programmer, but also attempts to provide an example curriculum that will adequately and quickly prepare someone for the first job search without needing a CS degree.
About me: Between 2013 and 2014 I made this exact kind of professional move. I was finishing up the first half of my PhD and was quickly realizing academic life wasn't for me. Thanks to a good friend and mentor, I was able to get my first job as a software engineer, and have been working in the field since. [You can read more here](https://howigotjob.com/data-scientist/journey-to-vizit-labs-as-a-senior-data-engineer/). The resources I've used and the industry itself have both changed a lot over the years, but it is my hope that this document is able to grow and remain relevant with the times.
## How To Use This Document
This document is structured to enable the new programmer to scan through and select major topics of interest, drilling down to more specific topics as they get through the document. One way to use this would be the following steps:
1. Join some of the interesting communities
2. Go through at least 1-2 of the computer science courses (ensure they're different courses, e.g. 1 intro to CS course and 1 data structures and algorithms course)
3. Read about the different disciplines, pick 1 or 2 that are interesting, and learn more about them by selecting some tutorials or projects
4. Dive deeper into the languages that will help you in your chosen discipline
5. Learn more about interviewing, professional growth, and more
# Communities
- [r/LearnProgramming](https://www.reddit.com/r/learnprogramming/) - a friendly community on Reddit for learning how to code
- [r/webdev](https://www.reddit.com/r/webdev) - a subreddit focused on web development
- [r/cscareerquestions](https://www.reddit.com/r/cscareerquestions/) - The go-to for questions about a career as a software engineer. Take most answers with a grain of salt
- [dev.to](https://dev.to) - the Medium for developers, people contribute their tutorials here and discuss them.
- [r/python](https://www.reddit.com/r/python/) - Reddit's Python user community
- [The Boston Python User Group](https://www.meetup.com/bostonpython/) - A Boston-area meetup group for Python users and learners. A great way to meet developers of all sorts, work on projects together, and learn about Python
- [r/datascience](https://www.reddit.com/r/datascience/) - A Reddit group focused on data science and careers in the field
- [r/dataengineering](https://www.reddit.com/r/dataengineering)
- [LinkedIn Python Developers Community](https://www.linkedin.com/groups/25827/)
- [Real Python's member community](https://realpython.com/community/) - a paid community with a moderated Slack chat group
# Resources
## Computer Science
- [MIT's Introduction to Computer Science and Programming](https://ocw.mit.edu/courses/electrical-engineering-and-computer-science/6-00-introduction-to-computer-science-and-programming-fall-2008/)
- [Harvard's CS50](https://www.edx.org/course/introduction-computer-science-harvardx-cs50x)
## Programming Disciplines
### Web Development
- [The Odin Project](https://www.theodinproject.com/) - a self-contained curriculum in web development
### Machine Learning Engineering
### Data Engineering
- [Awesome Data Engineering](https://awesomedataengineering.com/) - A full curriculum for budding data engineers
## Programming Languages
### Javascript
- [The TypeScript Handbook](https://www.typescriptlang.org/docs/handbook) - a popular language that extends Javascript
### Python
- [Real Python](https://realpython.com) - a high-quality resource of Python tutorials and learning paths, which teach whole content areas.
- [An Introduction to Python Learning Path](https://realpython.com/learning-paths/python3-introduction/) - a Real Python Learning path to get you started with Python
### Java
## Software Design
- [Clean Code](https://amazon.com/Clean-Code-Handbook-Software-Craftsmanship/dp/0132350882?sa-no-redirect=1) - an older, classic book on elegant software design
- [The Pragmatic Programmer](https://amazon.com/Pragmatic-Programmer-journey-mastery-Anniversary/dp/0135957052/ref=pd_lpo_2?pd_rd_i=0135957052&psc=1) - similar to Clean Code, a lot of great (although some are dated) pointers on writing great code
## Programming Tools
### IDEs
### Version Control Systems
These tools enable you to save different versions of your code as you work on a project, and jump back to earlier versions, collaborate with others, and more. [Git](https://git-scm.com) is by far the most popular and used with web applications like [GitHub](https://github.com) and [Gitlab](https://gitlab.com)
## Professional Development
- [The Pragmatic Programmer newsletter](https://blog.pragmaticengineer.com/newsletter/) - a newsletter with paid and free versions covering primarily Big Tech
# Curriculum
I designed this document's structure to help guide building your own curriculum. In the future, I'd like to have selected curricula here.