Merge pull request #1403 from kamegoro/feature/remove-trailing-spaces-at-end-of-text
Remove trailing spaces at end of text
This commit is contained in:
commit
d6370b48d2
62
README.md
62
README.md
|
@ -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)
|
||||||
|
|
Loading…
Reference in New Issue