Click here to see a template for OKRs.
This GitHub repository contains a lot of reources from Sophia's self learning plan on launching a career in software engineering, Objectives and Key Results (OKRs) style.
The OKRs methodology is for anyone who wants to set up an ambitious and measurable plan to achieve their goals, any goals. The resources below are for anyone who wants to explore or start a career in software engineering or software development.
Self learning is still (and is always) in progress! This repo is occasionally updated with new resources and learnings.
Objectives and Key Results (OKRs) is a strategic planning tool used by many tech organizations such as Google to establish cross functional team alignment, which ultimately helps move the needle closer to achieving the organization's mission.
Objectives are ambitious goals. If your objectives make you feel uncomfortable, that's a sign you're setting up your OKRs with a healthy amount of rigor.
To determine objectives, ask yourself, "Where do you want to go?".
Key results are measurable and specific milestones that directly contribute to the objective. Key results are outcomes, not activities.
To determine key results, ask yourself, "How will I pace myself to see if I am getting there?".
While OKRs are typically used by organizations for strategic planning to create alignment between teams, I've adapted OKRs for my own goal setting and tracking for my self learning journey on becoming a software engineer.
For more information on OKRs, here's Google's guide on OKRs, an easy to read and comprehensive overview of how to create and use OKRs.
- What are OKRs?
- Why use OKRs?
- How to use it
- Online Curriculum
- Paid Online Learning Resources
- Free Online Learning Resources
- Overview of Different Fields in Software Engineering
- Blogs and Articles
- GitHub Repos
- Books
- Tools and Other Helpful Resources
- Online Communities
- People Who Make Great Content
- Mailing Lists and Newsletters
- Conferences and Events
- Questions for Coffee Chats
- Tips
- Projects
- Contributing to Open Source Projects
- Productivity Practices
- Learning Methods
- Interview Prep Resources
- Resumes And Cover Letters
- Job Search
- Career
- About Me
- Focus and accountability over three month increments.
- OKRs are not a task list. When designed right, ambitious OKRs help keep you motivated and track your progress.
Feel free to use my OKRs template spreadsheet as a starting point for your own self study plan.
Steps to determine your Objectives and Key Results:
- Brainstorm possible objectives, using the question, "Where do you want to go?", as a starting point. Ask yourself "What does wild success look like?" to think big.
- Narrow down your objectives to 5-6.
- Brainstorm possible KRs, using the question, "How will I pace myself to see if I am getting there?", as a guide.
- Narrow down and prioritize KRs that will get you closest to achieving your objective. Aim for no more than 5 KRs per objective.
- Reminder: KRs are not a to-do list!
- Get validation and feedback on your OKRs from those who can give constructive and value additive feedback through their own experience or expertise.
- Get started on crushing your OKRs!
- Update your OKRs weekly to track your progress.
- Reflect monthly and adjust OKRs as needed throughout the quarter. OKRs are not set in stone!
- Do a retrospective at the end of the quarter to apply learning to your next set of OKRs.
These are paid online resources I found monumental to my learning journey.
- Coding Interview Bootcamp Algorithms and Data Structures: Udemy course by Stephen Grider. A walk through of commonly asked interview questions (Javascript)
- JavaScript: Understanding the Weird Parts
- The Modern Javascript Bootcamp Course (2020)
- JavaScript Algorithms and Data Structures Masterclass
- Pure React by Dave Ceddia
- Chingu: Online program that places you in a remote team to collaborate with others to build & launch real projects. Here's what I learned from my first team project.
Resources on learning HTML, CSS, JavaScript, React, and other coding concepts.
Web:
HTML & CSS:
- Introduction To Responsive Web Design - HTML & CSS Tutorial
- Flexbox Froggy
- Grid Garden
- 1-Line Layouts
- Creating a simple form with Flexbox
JavaScript:
- Tania Rascia
- How To Code in JavaScript by Digital Ocean
- How To Code in Node.js by Digital Ocean
- Dan’s JavaScript Glossary
- Tyler McGinnis
- Eloquent JavaScript - Free Online book and Code sandbox for exercises.
- Learn JavaScript - Full Course for Beginners - 3 hour FreeCodeCamp Youtube video
- Techtonica Curriculum
- JavaScript this
- Understanding Classes in JavaScript
- MDN Object-oriented JavaScript for beginners
- Asynchronous Programming with Callbacks in JavaScript by Stanley Ulili
- Understanding Prototypes and Inheritance in JavaScript
- how to manage HTML DOM with vanilla JavaScript only?
React:
- React cheatsheet
- React Hooks with Firebase
- Dave Ceddia
- Learn React on Scrimba
- React Router
- Don't know what to test on your React App? Learn how to make a test list.
- Refactoring useState() To useReducer()
- Understanding The Fundamentals of Routing in React by Edmond Atto
- React Hooks Tutorial - 18 - useReducer Hook
- A Visual Guide To React Mental Models by Obed Parlapiano
- How To Use Async Await in React
- A Firebase in React Tutorial for Beginners [2019] by Robin Wieruch
Accessibility:
- How Web Accessibility Works
- How I fixed accessibility on my website and how you can fix yours by Daniela
SQL:
Computer Science:
- Jwasham's Coding Interview University
- Teach Yourself CS
- Data Structures Easy to Advanced Course by Freecodecamp
Design:
- Refactoringui.com
- Hackdesign.org
- A Web Design Crash Course: From one non-designer to another
- material.io
- designcode.io
- prototypr.io
- Web Design for Non-Designers by NadiaUX
- Design tips by Steve Schoger
Git:
- Web Development in 2019 - A Practical Guide by Traversy Media
- Front-end Handbook by Frontend Masters
- BaseCS
- Dissecting Front End Job Titles
- The Front End Checklist
- Developer Roadmap
- The Front-End Checklist
- Haseeb's How to Break into Tech
- How I Became a Self-Taught Software Engineer at a Major Tech Company
- The 2019 Web Development (Frontend + Backend) RoadMap
- What Is a Front-End Developer?
- 5 Free Tutorials You Should Complete to Master the Back-End
- Advice From a Hiring Manager to a Code Bootcamp Graduate
- 19 Tips For Software Engineers In 2019
- What I Learned by Transitioning from Backend to Frontend Development
- Software Architecture - The Difference Between Architecture and Design
- The Flow of Knowledge in a Team (or Why I Dig Tickets)
- Developer Blogs I Follow
- A-to-Z-Resources-for-Students
- Roadmap to becoming a web developer in 2020
- The perfect Front-End Checklist for modern websites and meticulous developers
- A list of helpful front-end related questions and my answers
- A complete computer science study plan to become a software engineer.
- Happy Hues - color palettes
- Unsplash - free stock photos
- Codepen - online code editor
- VS Code - code editor
- Live Server - extension for running live server
- Prettier - code formatter extension
- ESLint - tool for
- Figma - wireframing tool
- Trello - project management tool
- Fontawesome - icons
- Twitter: Some hashtags to follow and use: #100DaysofCode #WomeninTech #CodeNewbies #webdev
- Dev.to: Community for programmers to share ideas and help each other grow
- Reddit communities: Learn Computer Science, Webdev, GirlsGoneWired
- Elpha
- Coding Coach
- Code Buddies
Who | Medium | Content Type |
---|---|---|
Tania Rascia | Blog | One of the best blogs with written tutorials |
Dave Ceddia | Blog | One of the best blogs with written React articles |
Dan Abramov | Blog | Blog on React, JavaScript, tech |
Veni | Career Advice and Job Opps | |
Denise Yu | Art & tech | |
Maggie Appleton | Visually explanations of programming topics | |
Chloe Condon | Twitter, BCC: All Podcast | Tech, getting into tech & tech, but make it fun |
Angie Jones | Twitter, Blog | Tech, blogging, tutorials |
Lydia Hallie | DEV | JavaScript concepts visualized |
Traversy Media | Youtube | Short and clear tutorials |
Mayuko | YouTube | Life in tech |
WesBos | YouTube | Tutorials |
Gaurav Sen | Youtube | System Design |
Colt Steele | Youtube | Clear JavaScript tutorials and explanations |
Coding Train | Youtube | Enthusiastic JavaScript tutorials and explanations |
These are some mailing lists and newsletters that are worth the email space.
General career things:
Learning React:
- Write/Speak/Code - 3 day conference designed by marginalized gender technologists for marginalized gender technologists.
- CodeLand
- PerfMatters
- FreeCodeCamp Bay Area Meetup - If possible, find a FreeCodeCamp meetup near you.
- Meetup.com
- Find events through queries like "Women in Tech Events in SF", "Tech Event in [insert your city]", etc.
Coffee chats are a great casual way to build your community, learn, and hear first-hand experiences. If you're stuck on what to ask, here are some questions to help get the conversation started:
- What does a day-to-day look like in your role?
- Can I get your feedback on X?
- What are some challenges you face in your work?
- What is something new you are learning right now?
- What are your goals for your career / next career move?
- Do you have advice for a self-taught dev?
- What do you enjoy doing outside of work?
- Can I reach out to you in the near future for feedback on X?
- Question about something specific to them (based off of your research about them / their company)
- Is there anything I can support you in?
These are the top 10 tips for self-taught software engineers from 20+ coffee chats:
-
Build projects, any projects. Get out of tutorial hell, especially in the early stages of your learning. Once you've built a couple of mini projects, apply your knowledge to solve a problem that's interesting to you.
-
Document your projects well. Recruiters and hiring managers will look at your projects. Write good documentation to help them quickly understand what you’ve built, why you built it, and how you built it. Here’s a guide on writing a thorough readme.
-
Pair program. Practice collaborating with other developers, explaining your thought process out loud, and speaking technically. This will help prepare you for interviews and real world work.
-
Build a community. Go to local meetups and conferences to meet people in the industry who you can learn from and also learn with.
-
Teach others. You learn better by teaching others. Teaching a concept, even if you're not an expert, is a great way to identify gaps in your own knowledge, test your understanding, and deepen your understanding of the topic.
-
Stand out. There is a sea of junior developers. Show your personality and how your unique perspective will bring value to the team.
-
Determine the right type of role for you. Do you need structure? Can you create structure out of chaos? Is mentorship a strong requirement for you? Can you dive right into the weeds without structured support? These are some questions to reflect on to help determine if you should look for an internship, apprenticeship, or a full-time job.
-
Understand your "why". Why do you want to be a software engineer? Your answer to this question will be your North Star. Your North Star is what’s going to guide you and keep you motivated even when you face rough patches.
-
Hustle! Being a self-taught developer can be hard. Imposter syndrome is real, but know that you can and you will move forward. You're going to go the extra mile to network, keep learning, and crush all the interviews.
-
Take care of your mental health. Mental health is important. Schedule time each week to do at least one activity that brings you joy. Don't burn out.
- A Philosophy of Software Design by John Ousterhout
- You Don't Know JS Yet (book series) - 2nd Edition by Kyle Simpson
Just start building something, anything! If you're struggling with projects, start small. This will allow you to build your skills and project size incrementally.
Document your project with a well written readme. Here's a guide by PurpleBooth. This will help recruiters, hiring managers, or anyone looking at your repo quickly understand what your project is and why / how you built it.
Some ideas for projects:
- Build a product landing page (7 Best Practices)
- Create a Chrome Extension
- Practice for New JS learner (Reddit thread)
- Javascript Project Ideas
- Rock, Paper, Scissors - Tutorial on Youtube
- Florinpop17's App Ideas
- A list of awesome beginners-friendly projects
- How On Earth Do You Use NASA APIs with Azure Functions? 🚀🌍
Work on projects with other developers:
Push out of your comfort zone, get validation and/or feedback by contributing to an open source project.
- Beginner Friendly Open Source Projects - A list of beginner friendly projects.
- HacktberFest - Sign up for HacktoberFest and get a free t-shirt after you submit 4 pull requests (PR) through GitHub in October.
- First Timers Only - Friendly Open Source projects with specific issues reserved for newbies.
- Supporting Non-profits with FreeCodeCamp
- Contribute to Techtonica's Curriculum - Techtonica is an apprenticeships with an open source curriculum you can contribute to.
- Open A11y OSS Issues Looking for Help
- Utilize spaced learning and repetition. Take frequent breaks.
- Don't binge on tutorials. Get out of tutorial hell. Make sure you get hands on practice in.
- 5 Ways to Stay Productive as a Self-taught Developer
- 5 Ways to Get Over Plateaus as a Self-taught Developer
In your learning journey, you'll likely come across written, video, audio or other types of resources. Try out different mediums and find out which enable you to learn most effectively.
Websites / Books for Coding Practice:
Practice Interviews:
General Guidance:
- TechStack - Find out what languages your companies of interest use.
- How to Craft Your Story
- The Software Engineer’s Guide to Interviewing Software Engineers
- Medium's Engineering Interview Grading Rubric
- How to answer “why are you interested in this job?”
- A curated collection of common interview questions to help you prepare for your next interview
- Tech Interview Handbook
- Materials to help you rock your next coding interview
- The Ultimate Guide to Kicking Ass on Take-home Coding Challenges
- Preparing for Top-Tier Engineering Interviews
- Fullstackinterviewing.com
- Most Popular Web Developer Interview Questions by Hatchways.io
- What I Learned from Doing 60+ Technical Interviews in 30 Days by Udauak Obong-Eren
- Cockroach Labs Open Sourced Interview Process
System design:
Data Structures and Algorithms Resources:
- 4-Step Strategy to Frame Your Thought Process in a Whiteboard Coding Interview
- Leetcode Easy Collection Top Interview Questions
- Curated List of Top 75 LeetCode Questions to Save Your Time
- Algorithms in JavaScript: 40 Problems, Solutions, and Explanations
Front-end Resources:
- Front-end Developer Interview Questions
- How to Succeed in a Frontend Interview
- The Frontend Interview Preparation Guide
- Cracking the Frontend Interview
- The single source for preparing for a Frontend interview
- A list of helpful front-end related questions you can use to interview potential candidates, test yourself or completely ignore.
- Javascript Questions by Lydia Hallie
- Cheat Sheet for React Interview Questions 2020
- JavaScript Interview Questions & Answers
- Front-End Interviews by FrontendMasters
- React Interview Questions & Answers
Questions to ask at the end of your interview:
- Do you have any questions for me?
- Questions I'm asking in interviews
- KeyValues
- Questions I'm asking in interviews by Julia Evans
- Creating and Hosting a Personal Site on GitHub
- I’ve read thousands of resumes. Most of them suck. Yours doesn’t have to.
- A Software Engineer’s One-Page Portfolio
- Do you have an awesome cover letter?
Apprenticeships:
Job Boards:
- Glassdoor
- AngelList
- KeyValues
- Work at a Startup
- Vettery
- Triplebyte
- Underpin
- POCIT
- Top Bay Area Startups That Are Hiring Right Now Spreadsheet
- Candor Who's freezing hiring from coronavirus
- 💪The Ultimate COVID Job Resource Stack spreadsheet
GitHub Repos:
Talk to real people, find recruiter emails:
- 10 questions I wish I’d asked more to turbocharge my career
- The Software Engineering Job Ladder
- Candidate Planet on Negotiation
- Gatsby Engineering Level Guide
- A forty year career
- The Product-Minded Software Engineer by Gergely Orosz
- Learn faster! When and how to ask for help
- Every Public Engineering Career Ladder by swyx
- Staff-plus interview processes by Will
- DESIGNING A TECHNICAL INTERVIEW by Laurie
- My Reading & Listening List by Gergely Orosz
Inspiration for this repo is from Jwasham's Coding Interview University.
Thank you to my friends and dev community who have continuously supported, encouraged, and inspired me throughout my journey!
Michelle, Alex, Diana, Scarlett, Andy, Mimi, Cat, Eric, Rachel, Donald, William, Melissa, Jessica, Mark, Andrik, Valerie, Audrei, Dani, Kate, Rafael, Ola, Ming, Chance, Jim, Tilde, Estelle, Yanet, Lori, Angela, Pearl, Judy, Jamil, Jeffrey, Chloe, Kimberlee, Novella, Jeff, Alissa, Sandy, Tieshia, Sarah, Ben, Rahat, Matthew, Denise, Akshar, Abir, Peter, Ryan, Jacob, Dave, Robert, Radhika, Chi, Sharat, Michael, Robert, Becca, Stephen, Travis, Jamie, Veni, Amruta, Brandon, Adam, Zoya, Michal, Joe, Martin, Rez, Mark, Andrew, Elly, Brantone, Nick, Zainab, Jeremy, Greg, Alaina