原地址:https://medium.com/@davidbyttow/abc-always-be-coding-d5f8051afce2

Be honest. Are you a good engineering candidate? How are you measuring yourself? How many companies have you interviewed at? What is your onsite-interview to offer ratio? Try the following formula (that I've totally made up in a vacuum and ultimately means nothing):

# x = number of companies interviewed with onsite# y = number of offers receivedvalue = 100 * log(x) * y / x

If your value is < 90, you should read this. If it's > 120, then you probably don't need this, but should read it anyway.

Who am I?

I don't have a college degree. I started programming professionally at the age of 19 after leaving Chicago for Southern California. Everything I owned fit in my car; I had $400 in my pocket and a job offer as a junior programmer for a cool $40,000 a year. That was 12 years ago. But that's another story.

Since then I've worked at Double Helix, Namco Bandai, Google, Obviousand Square.* I've also received offers from companies such as Naughty Dog,Activision, Riot Games, Blizzard, Pinterest, Goldman Sachs, and more. For what it's worth, my score from the above formula is 132.

I've interviewed at least 500 engineering candidates. Roughly 10% were given offers. Less than 3% I considered "rockstar" candidates, and I remember all of them.

I will tell you that there is absolutely no sure-fire way to getting hired. There are too many variables, especially at a company like Google where you are placed with 5-7 random software engineers and it's up to them to come up with an appropriate set of questions to ask, usually involving whiteboard coding. Some engineers are terrible interviewers, they ask unfair questions and create snap judgments. But that's OK, it happens to the best of us. You're generally allowed to flub a single interview in a panel.

The best I can do is tell you how you can be adequately prepared. So without further ado, here are the tips I can give you.

Technical Tips

  1. ABC (Always Be Coding). The more you code, the better you'll get — it's that simple. By coding, you're practicing. But the best practice isfocused practice. Have goals in mind, explore new areas, and challenge yourself. Over time, you should develop a portfolio of both unfinished and finished projects. GitHub is a great place to put this portfolio on display, but just having an eclectic body of work is huge.
  2. Master at least one multi-paradigm language. Mastering a language gives you a great sense of perspective. To do this, you must write a lot of code, read a lot more, and learn the gotchas and best practices. Ideally the language has a vibrant community, runs a lot of production code and is reasonably en vogue. Some good candidates are C#, C++, Java, PHP, Python, and Ruby.
    There's a famous leading question that C++ interviewers like to ask other C++ programming candidates, “On a scale of 1-10, 10 being the highest, how would you rank your knowledge of C++?” I hate this question. And god help anyone who answers a 9-10, because the claws will come out. Bjarne Stroustrap himself would rate himself probably an 8 or less. The language is simply too complex, too rich, and has evolved too much over time. I digress.
  3. Know thy complexities. Read this cheat sheet. Then make certain you understand how they work. Then implement common computational algorithms such as Dijkstra's, Floyd-Warshall, Traveling Salesman, A*, bloom filter, breadth-first iterative search, binary search, k-way merge, bubble/selection/insertion sort, in-place quick sort, bucket/radix sort, closest pair and so on. Again, ABC. This article is also a good, thorough primer.
  4. Re-invent the wheel. You should implement the most common data structures in your language of choice. Do not rely on common libraries. Implement the following and write tests for them: vector (dynamic array), linked list, stack, queue, circular queue, hash map, set, priority queue, binary search tree, etc. You should be able to implement them quickly.
  5. Solve word problems. Forget queries like this. It all comes down to fundamental programming concepts. Spend at least 40 hours coding solutions to different types of problems. One of the best resources is TopCoder. Read this. Then try solving problems. Pick those that test your ability to implement recursive, pattern-matching, greedy, dynamic programming, and graph problems. Just go through a bunch of archived problems. This is probably the number one reason I was hired at Google. I spent literally two weeks obsessed with TopCoder. After that, I could code Dijkstra's algorithm with my eyes closed and one arm tied behind my back. I could solve almost any kind of graph-problem under the sun. It was all problem-solving repetition. And as Eric Schmidt says, "Repetition doesn't spoil the prayer."
  6. Make coding easy. At least, make it look easy. Over time, I've learned that programming is the most straightforward and simple part of being an engineer. I often use the phrase "a simple matter of programming" because I believe the harder parts of being an engineer is before and after most of the coding takes place. For example, designing what you're about to code and ensuring what you've already coded is shippable and production ready. Make your interviewer understand that you know that programming is just a means to an end.
    Note, coding in front of others can be daunting. Find a way to practice both white-boarding and pair-programming. Google is basically all about coding at a whiteboard, whereas Square is effectively all pair-programming at a real machine with your language and IDE of choice. Read this article from my friend and former colleague Dan.

General Tips

I can't claim to be an expert here. In fact, some would say that I'm not even very good with people. But I should probably speak to some non-technical tips, many of which are probably quite obvious.

  1. Know why you're there. If you're interviewing at a company and you don't fully understand why they exist, who they are, or what they do; then don't do it. Engineers who care about the hires they make will smell it a mile away. You may be able to get away with this at bigger corporations, but it won't fly at smaller ones.
  2. Be passionate. If you don't care, then nobody else will. Be passionate about something. It might be programming, but what about it? Do you enjoy building compilers in your spare time? Do you build and fly RC helicopters? It doesn't really matter because if you're passionate about it, then you can make it interesting.
  3. Don't make assumptions. Ask questions if you're not sure. If you're asked a question and you aren't 100% certain what the problem is, then ask. There are a number of times where I've seen a candidate go down some path, never ask a question and ultimately waste time solving the wrong problem.
  4. Smile. Be excited, happy and positive. But don't overdo it. As I mentioned before, people will make snap judgments. Make sure your first impression is a good one. Smiles are infectious, I've often walked into an interview in a bad mood or feeling overwhelmed with other priorities, but a well-placed smile from a candidate quickly snapped me out of it.

As I said before, there's no silver bullet to getting hired. But, as an engineer, the best thing you can do is to ABC: Always Be Coding.

Love or hate this article? Let me know @davidbyttow.


*Today, I work for myself. Building something new.

ABC: Always Be Coding相关推荐

  1. [Re] ABC: Always Be Coding

    ABC: Always Be Coding How to Land an Engineering Job. Be honest. Are you a good engineering candidat ...

  2. Python操作redis(普通操作,连接池,封装)

    安装python包 pip install redis==2.10.6 普通操作 import redisabc = {"aa":{"bb":"cc& ...

  3. 关于Memcached反射型DRDoS攻击分析

    一.Memcached反射攻击原理 1.反射DRDoS攻击: DRDoS攻击时DoS攻击的一种,DoS是指通过发送或引发大量的资源消耗导致服务不可用的一种攻击方式,中文称之为拒绝服务攻击.DRDoS是 ...

  4. 微信运动_刷步思路+Python源码+云部署(持续更新)_一蓑烟雨任平生

    文章目录-3.x版本 前言 一.思路 二.电脑发数据(碰壁) 三.使用手机抓包 四.部署云函数(阿里,腾讯都可以) 1.登录阿里云 2.配置函数 3.执行代码 4.设置定时 废话不多说了,直接上脚本吧 ...

  5. 没有学历,四步进Google

    自从发表了坚持编程( ABC: Always Be Coding - How to Land an Engineering Job)这篇文章,很多人问我在没有学历的情况下怎么获得在谷歌工作的机会的.你 ...

  6. 【阅读心得】Python编程无师自通——专业程序员的养成

    读书笔记: 笔者是一个稍微有点编程基础的人,学习python一开始是从吴恩达的视频入门的,但是直接套用框架,使用模块,对python的语法却不甚了解,我也试过直接去廖雪峰的python学习网站上面学习 ...

  7. 《推荐系统学习》之推荐系统那点事

    转载自:http://www.admin10000.com/document/4995.html 推荐系统的误区 回想起来,我也算是国内接触推荐系统较早的人之一了,最近和人聊天,觉得不少人对推荐系统有 ...

  8. 10分钟内打字数据结构

    What are data structures? They're a variety of ways to structure objects to allow for a variety of t ...

  9. 机器学习对数学的要求_是对您的机器学习模因进行数学调查

    机器学习对数学的要求 I have taken severe umbrage at a particular machine learning meme that keeps popping up i ...

最新文章

  1. Max_user_connections 与Max_connections 与max_connect_errors
  2. 自动驾驶中可解释AI综述和未来研究方向
  3. 集群空间服务器接收不到消息,解决Redis集群条件下键空间通知服务器接收不到消息的问题...
  4. 接近开关的初步测试 : DF-11N
  5. deepblueai
  6. python transform_Pandas的数据分组-transform函数
  7. git add后取消_git 必看,各种撤销操作
  8. 关于iOS里的做动画方法的差别与注意事项
  9. 【操作系统/OS笔记02】操作系统的历史、操作系统结构
  10. typora高级设置字体_设计黑金风格高级感logo
  11. R绘图笔记 | 生存曲线的绘制
  12. 双绞线与计算机连接的接口是,rj45网络双绞线4根线接法详解
  13. 网络资产扫描工具 -- Goby
  14. 样式的层级关系,选择器优先级,样式冲突,以及抽离样式模块怎么写,说出思路,有无实践经验
  15. 面试磕磕碰碰,辛得蚂蚁高级工程师的技术笔记指导,终获P7岗offer
  16. OUC_软件工程_BLOG1
  17. bilibili_Linux网络基础5_SSH远程管理服务
  18. RDIFramework.NET敏捷开发框架助力企业BPM业务流程系统的开发与落地
  19. 获取dingding审批实例
  20. ../Libraries/core_cm3.c(445): error: non-ASM statement in naked function is not supported

热门文章

  1. 爬虫实战2:豆瓣电影TOP250
  2. 使用freemarker生成word文档(包含遍历多条数据、图片)
  3. react+Ts+批量上传华为云OBS
  4. Java培训机构之我见
  5. 2018.07.19【2018提高组】模拟C组
  6. Microsoft Office 97(微软Office办公软件)绿色经典珍藏版 | office97中文版下载
  7. 电子科大自考c语言试题,国科大生物试卷玩诗意走红网络
  8. 软件开发可以去“外包”
  9. 公众号无留言功能怎么办?
  10. 程序员必看windows必备神器及chorme神级拓展!