ABC: Always Be Coding (don't stop programming)

How to get an engineer job?
Come on clean. Are you a good candidate for the position of engineer? How do you rate yourself? How many companies have you been in for interviews? What is your attitude of the interviews to the received job offers? Try using the following formula (this is my spherical measurement in a vacuum, which means absolutely nothing):
# x = количество компаний, в которых ты проходил собеседования
# y = количество предложений о работе, которые ты получил
рейтинг = 100 * log(x) * y / x
If your rating is <90, be sure to read it. If> 120, you may not need this, but read it anyway.
Who am i?
I don't have a university crust on education. Programming became a profession for me when I was 19 years old when I moved from Chicago to Southern California. All my belongings easily fit in a car. 400 dollars in my pocket and a job offer as a junior for crazy $ 40,000 a year - that’s all I had. 12 years have passed since then ... But this is a completely different story.
I worked at Double Helix , Namco Bandai , Google , Obvious and Square . * Received job offers from companies such as Naughty Dog , Activision , Riot Games , Blizzard , Pinterest, Goldman Sachs and many others. If anyone is interested, my rating is according to the formula that I quoted above - 132.
During my life I have conducted at least 500 interviews with applicants for the position of engineer. About 10% of them received job offers. Less than 3% I consider “stars” and remember each of them.
There is no way that would guarantee you a successful job. Too many variables in this equation. Especially in companies like Google. You are planted with 5-7 randomly selected engineers and a list of questions that they will ask. At such interviews, you usually have to write code on the blackboard by hand. Some engineers are terrible interviewers. They love questions with a subtle bias and value you. It's okay - this happens with the best of us. Usually, one interview in a series is allowed to fail.
The best I can do in this situation is to tell you how to prepare. Let's get down to business - here are my tips.
Technical tips
- Keep writing code. It's simple: more code - higher your level. When you program, you reinforce knowledge with practical experience. And best practice is focused practice. Keep your goals in mind constantly, explore new areas, challenge yourself. After some time, you should have a portfolio of work in progress, as well as completed projects. GitHub is a great place to place a portfolio, in addition, it is useful to have an electronic copy of your work.
- Become a professional in at least one of the multi-paradigm programming languages. Learning a language will give you a good perspective. To achieve this, you have to write a huge amount of code and even more to read. Learn pitfalls and best practices. Ideally, your chosen language should be quite popular and have a dynamically developing community that produces a huge amount of code. Good candidates are C #, C ++, Java, PHP, Python, and Ruby.
The most common question that people like to ask at C ++ interviews is: “On a scale of 1 to 10, where 10 is the highest rating, how would you rate your C ++ knowledge?” I hate him. And may God help anyone who answers 9-10. He will be torn apart for this. Bjarn Straustrup rates his knowledge as 8 or less. This language is too complex, too vast, with a very long evolution. I was distracted again. - Find out your weaknesses. Read this list , and then evaluate your understanding of the work of all this. Implement basic computational algorithms such as Dijkstra's algorithm, Floyd-Warshall, Traveling Salesman, A *, bloom filter, breadth-first iterative search, binary search, k-way merge, buble / selection / insertion sort. in-place quick sort, bucket / radix sort, closest pair and so on. And don't stop programming . Here is another very good article.
- Reinvent the wheel. You must manually implement the basic data structures in your language. Do not rely on standard libraries. Implement and write tests for the following: vector (dynamic array), linked list, stack, queue, closed queue, hash map (hash map), set (set), priority queue, binary search tree, etc. You must be able to quickly implement them when needed.
- Solve your language problems. Forget questions like this. It all comes down to fundamental programming concepts. Spend at least 40 hours coding solutions for various tasks. One of the best resources for this I consider TopCoder. Read this. Try to solve the problems. Choose those that test your ability to implement recursive, pattern-matching, greedy algorithms, dynamic programming, and graph tasks ...
Browse through the list of tasks from the archive.
I’m sure the main reason I was hired by Google is my two weeks of obsession with TopCoder. I could write Dijkstra's algorithm with my eyes closed and with one hand behind my back. I could solve all the problems with graphs in the world. This was my rehearsal. As Eric Schmidt says: “Rehearsing a prayer does not spoil.” - Make programming easier. At least make it simple in appearance. Of course, not immediately - with time. I believe coding is the most honest and easiest way to be an engineer. I often call it the “easiest programming stage” because the hardest part is before and after writing the code. For example, developing what you intend to encode and verifying that the code is ready for delivery and fulfills its tasks. Make your interviewer understand that programming is just a means to an end.
Also, note that coding can be the most intimidating step. Try to practice writing code with your hands on the board and pair programming. Google often uses both of these approaches.
Also, read an article by my friend and former Dan colleague.
General tips
I will not say that I am an expert here. In fact, there are people who can say that I am not very good at communicating. And yet, I have to give you some non-technical advice, some of which may be too obvious.
- Know why you are here. If you have an interview in a company about which you do not know anything, it’s better not to come to him at all. The people in charge of hiring workers sense that a mile away. This will get away with you only in large companies, in small ones - do not even try.
- Take an interest. If you do not care, the rest - too. Be passionate about something. How about making programming your hobby? Do you like developing compilers in your free time? Do you collect quadrocopters? It doesn’t matter - if you are passionate about something, you can make it interesting for yourself.
- Do not make assumptions. Ask questions if unsure. If you are still not 100% sure that I figured out after I asked a question - ask again. Many times I watched the applicant silently move along the wrong path. As a result, he spends time solving the wrong problem.
- Smile Stay active, be happy and positive. But do not overdo it. People will evaluate you biased. Make sure that the first impression you make is positive. A smile is contagious. When I come to an interview not in the spirit, absorbed in my own affairs, the candidate’s positive attitude can also improve my mood.
As I said, there is no silver bullet that guarantees a job. The best you can do as an engineer is not to stop programming.
* Currently, I work for myself, creating something new.
Thanks for attention! Good mood, good luck in your career and in general!
It was a translation. Original: ABC: Always Be Coding by David Byttow (A pirate building things)