Remove trailing spaces at end of text

This commit is contained in:
kamegoro 2023-10-30 21:51:46 +09:00
parent 993be65009
commit 9d3761c369
1 changed files with 31 additions and 31 deletions

View File

@ -66,17 +66,17 @@
![Coding at the whiteboard - from HBO's Silicon Valley](https://d3j2pkmjtin6ou.cloudfront.net/coding-at-the-whiteboard-silicon-valley.png) ![Coding at the whiteboard - from HBO's Silicon Valley](https://d3j2pkmjtin6ou.cloudfront.net/coding-at-the-whiteboard-silicon-valley.png)
This is my multi-month study plan for becoming a software engineer for a large company. This is my multi-month study plan for becoming a software engineer for a large company.
**Required:** **Required:**
* A little experience with coding (variables, loops, methods/functions, etc) * A little experience with coding (variables, loops, methods/functions, etc)
* Patience * Patience
* Time * Time
Note this is a study plan for **software engineering**, not frontend engineering or full-stack development. There are really Note this is a study plan for **software engineering**, not frontend engineering or full-stack development. There are really
super roadmaps and coursework for those career paths elsewhere (see https://roadmap.sh/ for more info). super roadmaps and coursework for those career paths elsewhere (see https://roadmap.sh/ for more info).
There is a lot to learn in a university Computer Science program, but only knowing about 75% is good enough for an interview, so that's what I cover here. There is a lot to learn in a university Computer Science program, but only knowing about 75% is good enough for an interview, so that's what I cover here.
For a complete CS self-taught program, the resources for my study plan have been included in Kamran Ahmed's Computer Science Roadmap: https://roadmap.sh/computer-science For a complete CS self-taught program, the resources for my study plan have been included in Kamran Ahmed's Computer Science Roadmap: https://roadmap.sh/computer-science
--- ---
@ -258,7 +258,7 @@ Create a new branch so you can check items like this, just put an x in the brack
``` ```
git commit -am "Marked personal progress" git commit -am "Marked personal progress"
git pull upstream main # keep your fork up-to-date with changes from the original repo git pull upstream main # keep your fork up-to-date with changes from the original repo
git push # just pushes to your fork git push # just pushes to your fork
``` ```
@ -274,13 +274,13 @@ Create a new branch so you can check items like this, just put an x in the brack
Some videos are available only by enrolling in a Coursera or EdX class. These are called MOOCs. Some videos are available only by enrolling in a Coursera or EdX class. These are called MOOCs.
Sometimes the classes are not in session so you have to wait a couple of months, so you have no access. Sometimes the classes are not in session so you have to wait a couple of months, so you have no access.
It would be great to replace the online course resources with free and always-available public sources, It would be great to replace the online course resources with free and always-available public sources,
such as YouTube videos (preferably university lectures), so that you people can study these anytime, such as YouTube videos (preferably university lectures), so that you people can study these anytime,
not just when a specific online course is in session. not just when a specific online course is in session.
## Choose a Programming Language ## Choose a Programming Language
You'll need to choose a programming language for the coding interviews you do, You'll need to choose a programming language for the coding interviews you do,
but you'll also need to find a language that you can use to study computer science concepts. but you'll also need to find a language that you can use to study computer science concepts.
Preferably the language would be the same, so that you only need to be proficient in one. Preferably the language would be the same, so that you only need to be proficient in one.
@ -289,7 +289,7 @@ Preferably the language would be the same, so that you only need to be proficien
When I did the study plan, I used 2 languages for most of it: C and Python When I did the study plan, I used 2 languages for most of it: C and Python
* C: Very low level. Allows you to deal with pointers and memory allocation/deallocation, so you feel the data structures * C: Very low level. Allows you to deal with pointers and memory allocation/deallocation, so you feel the data structures
and algorithms in your bones. In higher-level languages like Python or Java, these are hidden from you. In day-to-day work, that's terrific, and algorithms in your bones. In higher-level languages like Python or Java, these are hidden from you. In day-to-day work, that's terrific,
but when you're learning how these low-level data structures are built, it's great to feel close to the metal. but when you're learning how these low-level data structures are built, it's great to feel close to the metal.
- C is everywhere. You'll see examples in books, lectures, videos, *everywhere* while you're studying. - C is everywhere. You'll see examples in books, lectures, videos, *everywhere* while you're studying.
@ -320,13 +320,13 @@ You could also use these, but read around first. There may be caveats:
- JavaScript - JavaScript
- Ruby - Ruby
Here is an article I wrote about choosing a language for the interview: Here is an article I wrote about choosing a language for the interview:
[Pick One Language for the Coding Interview](https://startupnextdoor.com/important-pick-one-language-for-the-coding-interview/). [Pick One Language for the Coding Interview](https://startupnextdoor.com/important-pick-one-language-for-the-coding-interview/).
This is the original article my post was based on: [Choosing a Programming Language for Interviews](https://web.archive.org/web/20210516054124/http://blog.codingforinterviews.com/best-programming-language-jobs/) This is the original article my post was based on: [Choosing a Programming Language for Interviews](https://web.archive.org/web/20210516054124/http://blog.codingforinterviews.com/best-programming-language-jobs/)
You need to be very comfortable in the language and be knowledgeable. You need to be very comfortable in the language and be knowledgeable.
Read more about choices: Read more about choices:
- [Choose the Right Language for Your Coding Interview](http://www.byte-by-byte.com/choose-the-right-language-for-your-coding-interview/) - [Choose the Right Language for Your Coding Interview](http://www.byte-by-byte.com/choose-the-right-language-for-your-coding-interview/)
[See language-specific resources here](programming-language-resources.md) [See language-specific resources here](programming-language-resources.md)
@ -340,7 +340,7 @@ Just choose one, in a language that you will be comfortable with. You'll be doin
### C ### C
- [Algorithms in C, Parts 1-5 (Bundle), 3rd Edition](https://www.amazon.com/Algorithms-Parts-1-5-Bundle-Fundamentals/dp/0201756080) - [Algorithms in C, Parts 1-5 (Bundle), 3rd Edition](https://www.amazon.com/Algorithms-Parts-1-5-Bundle-Fundamentals/dp/0201756080)
- Fundamentals, Data Structures, Sorting, Searching, and Graph Algorithms - Fundamentals, Data Structures, Sorting, Searching, and Graph Algorithms
### Python ### Python
@ -374,7 +374,7 @@ Your choice:
## Interview Prep Books ## Interview Prep Books
You don't need to buy a bunch of these. Honestly "Cracking the Coding Interview" is probably enough, You don't need to buy a bunch of these. Honestly "Cracking the Coding Interview" is probably enough,
but I bought more to give myself more practice. But I always do too much. but I bought more to give myself more practice. But I always do too much.
I bought both of these. They gave me plenty of practice. I bought both of these. They gave me plenty of practice.
@ -425,15 +425,15 @@ But if you don't want to listen to me, here you go:
- [My flash cards database (1200 cards)](https://github.com/jwasham/computer-science-flash-cards/blob/main/cards-jwasham.db): - [My flash cards database (1200 cards)](https://github.com/jwasham/computer-science-flash-cards/blob/main/cards-jwasham.db):
- [My flash cards database (extreme - 1800 cards)](https://github.com/jwasham/computer-science-flash-cards/blob/main/cards-jwasham-extreme.db): - [My flash cards database (extreme - 1800 cards)](https://github.com/jwasham/computer-science-flash-cards/blob/main/cards-jwasham-extreme.db):
Keep in mind I went overboard and have cards covering everything from assembly language and Python trivia to machine learning and statistics. Keep in mind I went overboard and have cards covering everything from assembly language and Python trivia to machine learning and statistics.
It's way too much for what's required. It's way too much for what's required.
**Note on flashcards:** The first time you recognize you know the answer, don't mark it as known. You have to see the **Note on flashcards:** The first time you recognize you know the answer, don't mark it as known. You have to see the
same card and answer it several times correctly before you really know it. Repetition will put that knowledge deeper in same card and answer it several times correctly before you really know it. Repetition will put that knowledge deeper in
your brain. your brain.
An alternative to using my flashcard site is [Anki](http://ankisrs.net/), which has been recommended to me numerous times. An alternative to using my flashcard site is [Anki](http://ankisrs.net/), which has been recommended to me numerous times.
It uses a repetition system to help you remember. It's user-friendly, available on all platforms, and has a cloud sync system. It uses a repetition system to help you remember. It's user-friendly, available on all platforms, and has a cloud sync system.
It costs $25 on iOS but is free on other platforms. It costs $25 on iOS but is free on other platforms.
My flashcard database in Anki format: https://ankiweb.net/shared/info/25173560 (thanks [@xiewenya](https://github.com/xiewenya)). My flashcard database in Anki format: https://ankiweb.net/shared/info/25173560 (thanks [@xiewenya](https://github.com/xiewenya)).
@ -446,14 +446,14 @@ THIS IS VERY IMPORTANT.
Start doing coding interview questions while you're learning data structures and algorithms. Start doing coding interview questions while you're learning data structures and algorithms.
You need to apply what you're learning to solve problems, or you'll forget. I made this mistake. You need to apply what you're learning to solve problems, or you'll forget. I made this mistake.
Once you've learned a topic, and feel somewhat comfortable with it, for example, **linked lists**: Once you've learned a topic, and feel somewhat comfortable with it, for example, **linked lists**:
1. Open one of the [coding interview books](#interview-prep-books) (or coding problem websites, listed below) 1. Open one of the [coding interview books](#interview-prep-books) (or coding problem websites, listed below)
1. Do 2 or 3 questions regarding linked lists. 1. Do 2 or 3 questions regarding linked lists.
1. Move on to the next learning topic. 1. Move on to the next learning topic.
1. Later, go back and do another 2 or 3 linked list problems. 1. Later, go back and do another 2 or 3 linked list problems.
1. Do this with each new topic you learn. 1. Do this with each new topic you learn.
**Keep doing problems while you're learning all this stuff, not after.** **Keep doing problems while you're learning all this stuff, not after.**
@ -478,7 +478,7 @@ These are prevalent technologies but not part of this study plan:
This course goes over a lot of subjects. Each will probably take you a few days, or maybe even a week or more. It depends on your schedule. This course goes over a lot of subjects. Each will probably take you a few days, or maybe even a week or more. It depends on your schedule.
Each day, take the next subject in the list, watch some videos about that subject, and then write an implementation Each day, take the next subject in the list, watch some videos about that subject, and then write an implementation
of that data structure or algorithm in the language you chose for this course. of that data structure or algorithm in the language you chose for this course.
You can see my code here: You can see my code here:
@ -508,8 +508,8 @@ interview books, too, but I found this outstanding:
Write code on a whiteboard or paper, not a computer. Test with some sample inputs. Then type it and test it out on a computer. Write code on a whiteboard or paper, not a computer. Test with some sample inputs. Then type it and test it out on a computer.
If you don't have a whiteboard at home, pick up a large drawing pad from an art store. You can sit on the couch and practice. If you don't have a whiteboard at home, pick up a large drawing pad from an art store. You can sit on the couch and practice.
This is my "sofa whiteboard". I added the pen in the photo just for scale. If you use a pen, you'll wish you could erase. This is my "sofa whiteboard". I added the pen in the photo just for scale. If you use a pen, you'll wish you could erase.
Gets messy quickly. **I use a pencil and eraser.** Gets messy quickly. **I use a pencil and eraser.**
![my sofa whiteboard](https://d3j2pkmjtin6ou.cloudfront.net/art_board_sm_2.jpg) ![my sofa whiteboard](https://d3j2pkmjtin6ou.cloudfront.net/art_board_sm_2.jpg)
@ -571,9 +571,9 @@ But don't forget to do coding problems from above while you learn!
- [ ] [Cheat sheet](http://bigocheatsheet.com/) - [ ] [Cheat sheet](http://bigocheatsheet.com/)
- [ ] [[Review] Big-O notation in 5 minutes (video)](https://youtu.be/__vX2sjlpXU) - [ ] [[Review] Big-O notation in 5 minutes (video)](https://youtu.be/__vX2sjlpXU)
Well, that's about enough of that. Well, that's about enough of that.
When you go through "Cracking the Coding Interview", there is a chapter on this, and at the end there is a quiz to see When you go through "Cracking the Coding Interview", there is a chapter on this, and at the end there is a quiz to see
if you can identify the runtime complexity of different algorithms. It's a super review and test. if you can identify the runtime complexity of different algorithms. It's a super review and test.
## Data Structures ## Data Structures
@ -760,7 +760,7 @@ if you can identify the runtime complexity of different algorithms. It's a super
- [ ] [[Review] Tree Traversal (playlist) in 11 minutes (video)](https://www.youtube.com/playlist?list=PL9xmBV_5YoZO1JC2RgEi04nLy6D-rKk6b) - [ ] [[Review] Tree Traversal (playlist) in 11 minutes (video)](https://www.youtube.com/playlist?list=PL9xmBV_5YoZO1JC2RgEi04nLy6D-rKk6b)
- ### Binary search trees: BSTs - ### Binary search trees: BSTs
- [ ] [Binary Search Tree Review (video)](https://www.youtube.com/watch?v=x6At0nzX92o&index=1&list=PLA5Lqm4uh9Bbq-E0ZnqTIa8LRaL77ica6) - [ ] [Binary Search Tree Review (video)](https://www.youtube.com/watch?v=x6At0nzX92o&index=1&list=PLA5Lqm4uh9Bbq-E0ZnqTIa8LRaL77ica6)
- [ ] [Introduction (video)](https://www.coursera.org/learn/data-structures/lecture/E7cXP/introduction) - [ ] [Introduction (video)](https://www.coursera.org/learn/data-structures/lecture/E7cXP/introduction)
- [ ] [MIT (video)](https://www.youtube.com/watch?v=76dhtgZt38A&ab_channel=MITOpenCourseWare) - [ ] [MIT (video)](https://www.youtube.com/watch?v=76dhtgZt38A&ab_channel=MITOpenCourseWare)
- C/C++: - C/C++:
@ -973,11 +973,11 @@ Graphs can be used to represent many problems in computer science, so this secti
- [ ] [What Is Tail Recursion Why Is It So Bad?](https://www.quora.com/What-is-tail-recursion-Why-is-it-so-bad) - [ ] [What Is Tail Recursion Why Is It So Bad?](https://www.quora.com/What-is-tail-recursion-Why-is-it-so-bad)
- [ ] [Tail Recursion (video)](https://www.coursera.org/lecture/programming-languages/tail-recursion-YZic1) - [ ] [Tail Recursion (video)](https://www.coursera.org/lecture/programming-languages/tail-recursion-YZic1)
- [ ] [5 Simple Steps for Solving Any Recursive Problem(video)](https://youtu.be/ngCos392W4w) - [ ] [5 Simple Steps for Solving Any Recursive Problem(video)](https://youtu.be/ngCos392W4w)
Backtracking Blueprint: [Java](https://leetcode.com/problems/combination-sum/discuss/16502/A-general-approach-to-backtracking-questions-in-Java-(Subsets-Permutations-Combination-Sum-Palindrome-Partitioning)) Backtracking Blueprint: [Java](https://leetcode.com/problems/combination-sum/discuss/16502/A-general-approach-to-backtracking-questions-in-Java-(Subsets-Permutations-Combination-Sum-Palindrome-Partitioning))
[Python](https://leetcode.com/problems/combination-sum/discuss/429538/General-Backtracking-questions-solutions-in-Python-for-reference-%3A) [Python](https://leetcode.com/problems/combination-sum/discuss/429538/General-Backtracking-questions-solutions-in-Python-for-reference-%3A)
- ### Dynamic Programming - ### Dynamic Programming
- You probably won't see any dynamic programming problems in your interview, but it's worth being able to recognize a - You probably won't see any dynamic programming problems in your interview, but it's worth being able to recognize a
problem as being a candidate for dynamic programming. problem as being a candidate for dynamic programming.
- This subject can be pretty difficult, as each DP soluble problem must be defined as a recursion relation, and coming up with it can be tricky. - This subject can be pretty difficult, as each DP soluble problem must be defined as a recursion relation, and coming up with it can be tricky.
- I suggest looking at many examples of DP problems until you have a solid understanding of the pattern involved. - I suggest looking at many examples of DP problems until you have a solid understanding of the pattern involved.
@ -1209,7 +1209,7 @@ Graphs can be used to represent many problems in computer science, so this secti
## Update Your Resume ## Update Your Resume
- See Resume prep information in the books: "Cracking The Coding Interview" and "Programming Interviews Exposed" - See Resume prep information in the books: "Cracking The Coding Interview" and "Programming Interviews Exposed"
- ["This Is What A GOOD Resume Should Look Like" by Gayle McDowell (author of Cracking the Coding Interview)](https://www.careercup.com/resume), - ["This Is What A GOOD Resume Should Look Like" by Gayle McDowell (author of Cracking the Coding Interview)](https://www.careercup.com/resume),
- Note by the author: "This is for a US-focused resume. CVs for India and other countries have different expectations, although many of the points will be the same." - Note by the author: "This is for a US-focused resume. CVs for India and other countries have different expectations, although many of the points will be the same."
- ["Step-by-step resume guide" by Tech Interview Handbook](https://www.techinterviewhandbook.org/resume/guide) - ["Step-by-step resume guide" by Tech Interview Handbook](https://www.techinterviewhandbook.org/resume/guide)
- Detailed guide on how to set up your resume from scratch, write effective resume content, optimize it, and test your resume - Detailed guide on how to set up your resume from scratch, write effective resume content, optimize it, and test your resume
@ -1295,7 +1295,7 @@ You're never really done.
Everything below this point is optional. It is NOT needed for an entry-level interview. Everything below this point is optional. It is NOT needed for an entry-level interview.
However, by studying these, you'll get greater exposure to more CS concepts and will be better prepared for However, by studying these, you'll get greater exposure to more CS concepts and will be better prepared for
any software engineering job. You'll be a much more well-rounded software engineer. any software engineering job. You'll be a much more well-rounded software engineer.
***************************************************************************************************** *****************************************************************************************************
***************************************************************************************************** *****************************************************************************************************
@ -1781,7 +1781,7 @@ You're never really done.
above because it's just too much. It's easy to overdo it on a subject. above because it's just too much. It's easy to overdo it on a subject.
You want to get hired in this century, right? You want to get hired in this century, right?
- **SOLID** - **SOLID**
- [ ] [Bob Martin SOLID Principles of Object Oriented and Agile Design (video)](https://www.youtube.com/watch?v=TMuno5RZNeE) - [ ] [Bob Martin SOLID Principles of Object Oriented and Agile Design (video)](https://www.youtube.com/watch?v=TMuno5RZNeE)
- [ ] S - [Single Responsibility Principle](http://www.oodesign.com/single-responsibility-principle.html) | [Single responsibility to each Object](http://www.javacodegeeks.com/2011/11/solid-single-responsibility-principle.html) - [ ] S - [Single Responsibility Principle](http://www.oodesign.com/single-responsibility-principle.html) | [Single responsibility to each Object](http://www.javacodegeeks.com/2011/11/solid-single-responsibility-principle.html)
- [more flavor](https://docs.google.com/open?id=0ByOwmqah_nuGNHEtcU5OekdDMkk) - [more flavor](https://docs.google.com/open?id=0ByOwmqah_nuGNHEtcU5OekdDMkk)