The most inspirational computer self-study tutorial on GitHub (remake version)

Let’s first look at the requirements of Google’s engineers: background from a prestigious school, professional background in CS (Computer Science), Ph.D. blessings, good skills?

Is it particularly difficult to become a Google engineer under such harsh conditions? A foreigner named John Washam tells you: No, you can study by yourself for 8 months!

John Washam is motivated to become a Google software engineer, but without a CS professional background, he can only achieve his goals through his own efforts.

Therefore, in 8 months, the younger brother spent thousands of hours reading books, writing codes, and watching CS technical lectures, overcoming obstacles and upgrading.

In the end, although he did not go to Google, he successfully became a technical expert of Amazon AWS, with an annual salary of one million (Amazon is really good too).

What is even more commendable is that the younger brother also compiled a tutorial on his self-study experience. Since it went online on GitHub, he has received 140k+ stars.

The project address is as follows:

https://github.com/jwasham/coding-interview-university

The little brother said: "Even if you don't have the Google that you have always dreamed of, this tutorial can be considered a good way to enrich yourself."

My original goal was to "get into" Google, so he taught himself 8-12 hours a day for more than 8 months. While studying, I compiled this self-study project easily. There is also a Chinese version of the project. WeChat searches the official account of "Wang Guan GitHub", and the backstage responds to the keyword "inspirational" to obtain the online reading address.

Brother said:

No matter which software company you are interviewing, this project can prepare you well, including tech giants like Amazon, Facebook, Google and Microsoft.

Next, we will follow in the footsteps of the little brother to learn about this interview book.

The first thing to do is to choose a programming language. At Google, it is usually C++, Java, Python, and sometimes JavaScript and Ruby are also used.

Then I started to learn some knowledge about computers, such as how a computer processes a program, how a compiler works, and how floating-point numbers are stored.

Then there are algorithm complexity, Big-O (a mathematical symbol used to describe the asymptotic behavior of functions), progressive analysis, and data structures (arrays, linked lists, stacks, queues, hash tables, graphs). And binary search, bitwise operation.

There are more knowledge points on the tree, so I draw a mind map:

There are also many knowledge points in the sorting area, continue on the mind map:

In addition, there are recursion, dynamic programming, combination and probability, NP (non-deterministic polynomial set, one of the most important sets in computing theory) and NP-complete and approximate algorithms, caches, threads and processes, system design.

With so many knowledge points, don't you feel a bit daunted?

Take a look at my experience:

1) Realize that you cannot memorize all the knowledge points over and over again. This psychological construction is very important.

2) Make the knowledge points to be reviewed into flashcards: normal ones with codes, similar to memorizing words. Then take notes on the flashcard and ask yourself several times before you really know how to solve the problem. Repeated questions and answers can help you remember this knowledge deeply.

3) Review, review, review, take a break every half an hour of programming and review your flashcards.

4) Focus. In the learning process, there are often many distractions that occupy our precious time. Therefore, it is very difficult to concentrate and concentrate.

After learning a certain level, you can prepare for the interview. The first step in the interview is of course to have a good resume, so that you can win valuable interview opportunities.

10 tips from Steve Yagge can help you make a good resume.

1) In the beginning, no one cares about you, so don't talk about your hopes, goals, dreams, and ambitions on your resume.

2) Try to use plain text, don't be fancy.

3) Remember to check to avoid typos. Some English terms must be case sensitive.

4) Don't record what you participated in in your resume, but what you actually did.

5) Don't exaggerate yourself blindly.

6) Don't list some insignificant certificates on your resume.

7) Please do not say "proficient" lightly.

8) Don't underestimate yourself, be confident.

9) Don't write boring content.

10) Seek truth from facts.

Steve Yagge has worked at Amazon and Google, so his advice is still worthy of reference.

During the interview, you may encounter these 20 questions:

  • Why do you want this job?

  • What is the most difficult problem you have solved?

  • What is the biggest challenge you have faced?

  • What is the best or worst design you have ever seen?

  • Suggest improvements to a Google product.

  • As an individual and a member of the team, how do you achieve the best working condition?

  • What skills or experience of yours are indispensable to your role? Why?

  • What do you enjoy most in a certain job or a certain project?

  • What is the biggest challenge you have faced in a certain job or a certain project?

  • What is the most painful bug you have encountered in a certain job or a certain project?

  • What did you learn in a certain job or a certain project?

  • Where can you do better in a certain job or a certain project?

You'd better prepare 2-3 answers for each question, you can answer in the form of a story, and the interviewer will prefer to listen.

After you have answered all the questions, it does not mean that they are all over. If the interviewer asks you: "Do you have any questions?" Don't say anything about yourself! You can try the following questions:

  • How large is the team?

  • What is the development cycle? Will waterfall/extreme programming/agile development be used?

  • Do you often work overtime for deadlines? Or is it flexible?

  • How to choose technology in the team?

  • How many meetings are held on average per week?

  • Do you think the work environment helps employees concentrate?

  • What are you currently doing?

  • Do you like these things?

  • What is the working period?

If you successfully get the position of your dreams, congratulations! Of course, this does not mean that everything is over. You still need to keep studying. Getting a job is just a new beginning.

The following content is recommended for you to continue learning:

Of course, there is a reason why my brother is so good.

From high school, my younger brother began to learn programming, learning the BASIC language, which was still in the 1990s. After graduating from university with a degree in economics, he first served in the military for two years and was stationed in South Korea.

After retiring, he stayed in South Korea to teach English, and suddenly found that in the past few years when he left the CS field, too many new technologies and new tools appeared, and his knowledge structure appeared to be faulty, unable to support a programmer's career.

So he used all his spare time to learn Perl, HTML, CSS (still new at the time), JavaScript and SQL.

Finally, in 2001, Xiaoge officially became a web developer programmer and started his 19-year career as a programmer.

As of 2017, John’s career has been very successful: he has worked in large and small companies, has organized project teams, managed and grown startups, and he has personally founded 3 software companies, 2 of which are still in healthy operation. With.

According to the little brother, the more than ten years of work experience has trained him into a qualified programmer, an excellent product manager, a CEO, and a marketing salesperson.

But his goal is more than that. His dream is to work as a software engineer at Google and improve himself in a team full of wisdom and creativity.

At first he thought that he could easily get a position with his work experience, but after getting the Google interview questions, he found that he lacked too much.

An excellent software engineer should be proficient in data structures and algorithms, assembly language, memory design, etc., and also comprehensively consider the impact of code and program structure on the machine in application scenarios.

So he started self-learning programming with a Google test as a guide. And created the "9894 project" on GitHub, because Google was established on September 4, 1998. Later, the project was renamed to the current "coding interview university".

Combining his own learning experience, I gave three suggestions for self-learning programming.

1) Ask and plan early, don’t take it for granted

My biggest lesson is that I spent too much time learning things that I don't need. For example, he used to read more than 1,000 pages of C++ materials in 3 weeks, but in the end he used Python for interviews and work.

This example does not mean that C++ is not necessary to learn. Instead, it emphasizes that you should collect information in advance to make plans, allocate reasonable learning time on different projects, and improve efficiency. Never "I think...".

2) At the beginning, video is more efficient than reading

When you first learn, the video is like a teacher, quickly guiding you to get started. But if you want to go deeper, you have to study in depth through books, and spare time is also important.

3) Repeated review

Constant repetition is the key to forming memory. As we mentioned above, I recommend using a memory card.

He made 1792 electronic memory cards for himself, and took out to review whenever he had free time, such as when queuing in the supermarket, on the bus, when squeezing the subway, etc.

The younger brother said that he has now fully mastered the basic skills of software engineering, is not afraid of any challenges in work, and the day when he realizes his own leap is getting closer.

For ordinary people, we should be like a little brother, identify a goal, then make a plan, work hard, and finally get rewards for diligence.

The younger brother may be a fan of the "10,000-hour rule", but even if he insists on 12 hours a day and 8 months (31 days a month), he still has only 2,976 hours-far less than 10,000 hours.

But in the 8 months with such a firm goal, the younger brother has successfully won the recognition of major manufacturers (although not Google, the average annual salary of Amazon software engineers has exceeded one million yuan).

This is the most inspirational story I have seen on GitHub, and it is also the reason why I want more people to see it, and sincerely hope that more people can create their own stories because of such experiences and sharing.

There is too much jokes about "from entry to giving up", but some people "from entry to million annual salary".

Life is endless, struggle is endless, Keep walking~

Typesetting of this article: Silent King II, PS: Let’s take a look at the partial catalog of this 140k+ star interview guide:

Really good, how can I get the Chinese version?

Wechat searched the "Wang Guan GitHub" official account, and the backstage replied to the keyword "inspirational" to obtain the online reading address.

逛逛GitHub交流群已成立
公众号运营至今,离不开小伙伴们的支持。为了给小伙伴们提供一个互相交流的平台,特地开通了逛逛GitHub官方交流群。需要进群的朋友,可长按扫描下方二维码加我微信 focusoncode,备注 进群, 交流群二维码在我的朋友圈


推荐阅读
1. 大厂的 404 页面都长啥样?
2. Java 身份证号码识别系统
3. GitHub:我开源了我自己 ?
4. 漫画:为什么C语言永不过时?




Guess you like

Origin blog.csdn.net/weixin_47080540/article/details/109665269