Peter Hurford is a self-taught web developer, data scientist and writer living and working in Chicago, IL with Avant. His career path has been unusual, with an undergraduate degree in Political Science and Psychology – and a mid-stream college shift into software development studies through various online sources.(One of those being The Odin Project!)
Peter’s also an ally-practitioner of Effective Altruism, runs an EA forum and actively contributes philanthropically. He’s founder of .impact, a collective of independent, globally distributed effective altruist projects.
In this Codecast, Peter talks about his career shift focus towards web development while in college, goes deep with hiring manager insights, and levels the reality on why clean coding practices and your connections (in getting your first developer job!) matter.
Key Theme » Developer Advantage
Companies are trying to find you, too.
"...you guys really want jobs. But the thing is, companies also really want talented people to work for them. So we’re going to make an effort to try to find you, as well! So, if you’re going to Meetup groups – we're gonna try to find you...If you’re doing awesome stuff on GitHub – we’re gonna do our best to try to find you. One of the things I was working on, was just trying to trawl through all the people who are on GitHub, in the city of Chicago (where Avant’s located) and try to look through their stuff. Can I find anyone on GitHub interesting to talk to? I really want to find talented people so that I can hire them." — Peter Hurford
Full Episode » Transcribed
All right! Here we are.
Hello and welcome to the Viking Codecasts. We have here with us Peter Hurford - developer, data scientist, blogger, man of many talents (laughter) and with much interesting experience – to talk with us.
Thank you, Peter! We are your captive audience, (laughter) and would love to hear a little bit more about your story. Where did you come from, and where are you now?
I was actually told never to put Flash experience on my resume. I was really sad about that. I worked in Flash for three years and I was like: “I can’t put this on my resume?” But, people were like: “yeah, Flash is dead - don’t put this on your resume…”
Then, I eventually got to college and I took a computer science class in college and I thought, “this is kind of interesting but, I’m not really sure I like computer science after all. I think I’m gonna do something else.” I was thinking a lot: I didn’t really enjoying coding (then) and doing what other people tell me to do – I always liked doing my own thing. So, I also felt that: “this (the process of study in school learning computer science)...”is really boring and I’m just implementing the programs that other are telling me to do.”
So I stopped doing computer science and actually I went out and I became a political scientist. I got a degree in political science from Denison University. I also studied psychology, and I specialized in what was called political psychology - where basically you just send a bunch of surveys to people to figure out what their political beliefs are and why they hold them. I did research, in particular, about friends that you have and how they influence your political opinions. It was pretty cool.
But then, senior year I came around, and I was like: “Oh crap! I need to actually get a job.” And, I looked it up and there weren't that many jobs in political science...I could get a PhD, maybe, but I wasn't really feeling like going and doing seven more years of school. I got really interested in doing market research. I did enjoy sending surveys to people and maybe I could get paid to send surveys. But, none of the market research jobs were willing to hire me. So, I struck out a lot.
Then I decided: I’d talk to some friends about what I could do if it's not gonna be market research, and they suggested that I brush off my computer science (studies), give computer science a try. So, I got really interested in computer science, it seemed like a very in-demand field – particularly web development. So, I thought: “OK, I'm going to try to get one of these web development jobs I keep hearing about.”
I had a bunch of friends who were doing web development and they all suggested that it would be a really good thing to do, the jobs are quite high paying, not that hard to get – and, basically I already kinda knew a lot of this stuff. Just brush up and give it a try.
I decided to learn Ruby. I was told by my friends that there are a lot of jobs in Ruby, so I just Google’d how to learn Ruby. I started off doing a bunch of Codecademy stuff, like online free tutorials. But, eventually I found the Odin Project, which is the pair to the Viking Code School.
At the time, the Viking Code School did not exist, so I was just doing the Odin Project. I really loved it. It was so thorough, detailed and I just kind of did it all. I read all the lectures, articles and did all the projects, and I learned a ton of Ruby.
Then, I started applying to internships. I just applied to the companies that my friends worked at – it especially helped that they could give my resume a boost with an internal referral. That moves you up through the process, especially when you don't really have a lot (of work experience) to prove yourself, besides some lessons you took online.
Then, eventually I did phone interviews, code interviews and I got a job at a company called Avant. Avant’s an online loan company in Chicago, we provide loans to people with near-prime credit. It’s pretty similar to Lending Club or Prosper, if you’ve heard of those websites. Basically, just go online - get a loan. It's quite a profitable business, definitely booming right now especially after the 2008 recession when banks were tightening up credit. (I can talk a lot about credit risk, if you guys are interested!)
Yeah, so once I was in Avant, I had a three-month internship. It was three months to prove myself. It was great because they were paying me money to learn - rather than the other way around. I learned a lot everyday, doing full-time programming in Ruby and working on the Rails app.
While I was doing my internship I found out that there was a data science team that really needed help with Ruby, and they were giving me a lot of the tasks. At least at the time - we have a much more organized internship program now - but, two years ago when I joined the company, it was up to the interns to figure out what they should do. No one was really telling us what to do.
Find ways to contribute. Become indispensable.
So I basically had to go around and ask: “...you guys have anything I can do?” And, the data science team was always ready to give me stuff, they had stuff to do! I ended up doing a lot of stuff for them.
Then at the end of my internship, I did well and the Ruby team was willing to give me a job offer so I could become a full-time Ruby developer. But also the data science team was willing to give me a job offer, so I actually chose to become a full-time data scientist. It kind of fit better with my college experience, doing psychology and political science. I felt like it was just more interesting, the kind of questions you answer in data science just seem a bit more interesting to me than the kind of questions that you answer as a Ruby programer. Even though those questions are quite interesting.
Also, I felt like the data science was a bit more of an in-demand field. So now, I program in Ruby very rarely – like maybe 10% of my time. I spent 90% of my time working in this language called R for statistical programming. We at Avant use R as a full programming language, where most people kind of use it more like a stats terminal. I think it's kind of unique to Avant and what we do and it’s pretty cool.
So I build a framework where data scientists can build and deploy predictive models to be able to estimate default risk. We also do a lot of other kinds of analytics, like marketing analytics and all sorts of stuff. I really like my job a lot and I think I’ve done quite well in my job, over the two years. It's all places like Viking Code School or The Odin Project where you can get your start and be really well, if you put in the effort.
So yeah, that's really all I have to share about my story. I didn't really come here with any particular agenda, or anything I wanted to push. I mostly just wanted to take some questions and answer some questions – so I hope you guys have some questions! Otherwise, this will be a short talk.
Yep. I certainly have some. For me, I’m curious: it’s interesting you started out from sending out political surveys and then you ended up going back into data science. Is there any link with, sort of playing with data, that ended up circling you back?
I definitely think so. When I was playing with data, I did have to do some statistical programming. We used a stats package called Stata. Stata is a kind of programming language where you're taking data in and cleaning it up. You can kind of think of data as a Ruby hash – a hash of arrays. You have to clean stuff – some of the arrays may have blank values and you want to switch those to real values or (...). So, a lot of these basic manipulations, like things you would do in Stata, are things you could do in Ruby.
That was reinforcing and reminded me of programming. It also meant that I had a statistical background, as well coming into science – which is really helpful. Another really interesting thing is, I think web development made me a much better data scientist.
Manifesting great code quality.
The reason for that...I’ll just kind of ramble on (if that's ok?)... is that a lot of data scientists, at least in my opinion – don't really understand code quality that well. They tend to write these very very long, like eight hundred / a thousand-line scripts that tend to do all the data cleaning and all the modeling I was talking about. And, then if you're lucky, they’ll put it on GitHub, if they know what GitHub is. I actually knew people whose idea of version control is they would email themselves a copy of the file. Every time they changed it, they would just reply to the email – that was their version control!
So, you’re (students) lucky that GitHub exists, and that you know about it. And, that you know about breaking things up into modules, different files, different classes. You know about writing tests so that if things break you’re not just spending hours like: “Huh – I wonder which one of my thousand lines is not working properly?” You have the automated tests. A lot of these things – everyone who programs in Ruby knows about these things: “Oh, I should have classes, and split things up and write tests for them.” Yet, all these data scientists have never heard of these things. So, if you come into data science with this background, you can really amaze people.
I think that’s probably possible for other things, too: if you were to become an accountant, or something. Yeah, just bring in those web development skills, they’re pretty good to have...just (new) ways of thinking about things.
So you mentioned when you got into the job, that you were sort of pulled in to do review with the data science team. Ruby and data science don’t really always go together. Typically, you hear scientific computing and things like that – that they use, at the very most – in terms of highest level languages.
So what was that relationship – where you guys actually needed to use Ruby...?
Right. At the time, we had a team of five data scientists, and one of them knew Ruby. The other people knew R. But the problem was that all the data that they wanted was in a Postgres database – that only the Ruby app originally had access to. I thought: “we need this data to build our models, but we have no real easy way of getting it. This is really slowing us down.” They were writing custom SQL queries, trying to query the database.
So, what I spent basically the vast majority of my internship on, was just building nice API’s in the Ruby app they could call from R and really speed up their workflow. It gave them the data, as Ruby understood it. It also meant that all the business logic we had in the Ruby application that explained the data they could use, I could put into API’s for them to use. So it was really just about opening up the Ruby app for the data scientists to be able to work with, rather than them just having to figure it out on their own.
Yeah, it’s very important to be able to work with the application where your data is at, or else you’re not going to be able to really build a good model.
John, I see you’re un-muted, but we can’t actually hear you.
STUDENT Q: [John]
Yeah, I have a question on that last story in that data science has been super-hot for the last five years, right? That story you just told has a little bit - I don’t want to disagree or anything - it just has a little bit of an air of “back in the day” with emailing yourself the source code, so on and so forth.
Do you feel you like it’s a current pathology in data science that those really obviously bad source control practices and that sort of thing... Is that going on now, or is that like, “back in the day?”
Coding "best practices" are iterative – apply them.
Yeah, that's a good question. I would say data science has gotten a lot smarter over the last couple of years, and there are no longer people using email for source control, and people have kind of wised up to GitHub. But, I think a lot of the things I was talking about, code quality-wise, are still a huge problem. Like automated testing. I go to R conferences a lot, and in lot of their conferences automated testing is still a new, edgy thing that people don't really use very often. People still are writing those very long, thousand-line scripts. That hasn't stopped at all. So being able to organize data science is still a huge – I mean we figured it out at Avant. I’m sure other companies have figured it out, as well. But it still seems like a huge opportunity.
STUDENT Q: [John]
So, maybe more specifically, one follow-up (question) and then I’ll just shut up for a while...
STUDENT Q: [John]
...do you feel like somebody who has...a generic quant background of some kind - and has enough experience with things like self-control and release cycle and build process and that sort of thing - could really come into the game and...add value in the data science community or to a data science team?
I think so...I mean you’d have to be able to sell that to the data science team.
I'm gonna say that I don't really know a ton about - various - data science teams, since I don't have a ton of work experience, yet. But I do know that we hire a lot of people with quant backgrounds - that's a pretty popular background for data science - having that previous quant, or trading or previous finance background.
And, having good developer hygiene - is definitely very helpful. I guess it really depends on what the team is looking for. I imagine when you're getting the job what you really need to do is maybe more sell your statistical expertise, and how you’re gonna actually contribute to the bottom line. Then when you're on the team, you can really establish value by being able to bring in sane developer practices and organize things.
I'm not saying it's a tried-and-true method. It’s just an opportunity that I see. I have no idea how that's actually going to play out in the real world, or in companies I don’t work at...maybe they’ll just get really mad that you wanna change all of their stuff!
So you mentioned this idea about developer hygiene. Would you mind diving into that? How do you define that, and what does that mean for someone?
What's "developer hygiene?"
Basically, you’re writing code and the idea is that the computer knows exactly what you’re doing and knows how to execute it. But the problem is that the computer isn’t the one writing the code. It’s the other people you work with that need to be able to read your code – understand what you meant. This is actually a big problem because code is really hard and you end up writing these huge messes that no one understands. And, the worse you get...sometimes I write things and then five months later I come back to it.
I, myself (in those circumstances) have no idea what it is that I did because it's like a huge, unorganized mess and it’s like: “oh - what does this object do?” and “what does this method do...how do I do that?” I can't tell just by reading it.
So developer hygiene is this idea that you make your code readable to humans, and not just to computers. And, that when you come back, things are organized in a way that you actually understand what this large, complex thing is doing.
I imagine you probably cover this is in your curriculum? Things like: single responsibility principle or the Law of Demeter. There are a lot of these buzzwords, or great practices that you can have that really help. If you follow these practices your code’s a lot more readable and understandable. I think having really good documentation is also a very underrated way of making things easier to understand, yeah.
So, a lot of times I feel like there's a pretty big difference between reading about something like: the SOLID principles that you were just talking about in a book...and then actually learn to apply them in your code.
How did you make that distinction to the point where you feel comfortable like you're applying these kinds of things in your daily life?
I think a lot of it is really just practice. I read all of these things in a book, too – before I got a job. And, I showed up at my job and was like: “I know all these things! I know what SOLID is.”
Then I wrote code and it was still really crappy and terrible - not actually "solid" or whatever. I had a bunch of coworkers who knew way more than me and were like: “this code is a pretty unreadable mess - this isn't SOLID, or this function is doing six different things...single responsibility principle!”
And, I was like: “oh...yeah I remember reading about that, that’s really important.” So I'm gonna just refactor my code, just a lot of practice. Also, when I was on the job, I kept reading a lot of books. I kept watching lectures by a woman named Sandy Metz - she’s really good, really important. I was just doing what Sandy Metz tells me to do (laughs) and I just learned a lot of these things - and I'm still learning now. I’m still making a lot of mistakes and getting them corrected. Now, I’m also helping correct other people’s mistakes, too. Which is another way of learning things. Yeah, just get a little better every day, I guess.
Speaking of getting a little better everyday, we have a question from the (Hangout) app. Are you able to see that?
[Reading out loud the question]
“Hi Peter, great story. You have a solid basis in college, already. So, did a job in this environment feel like a big leap? I’ve done a bootcamp, and self-taught in college courses for Ruby and Java and am curious about how else I can prepare?”
Yeah, I did feel like it was a big leap. I mean I kind of moved from programming maybe, three hours a day to programming more like nine hours a day. I moved from working on my own repositories, where I was making a tic-tac-toe game and my repository had a hundred commits with maybe like five classes, or whatever.
Now, I’m working on this gigantic Rails app, that has 60,000 commits, 300 controllers and I’m thinking: “oh my gosh, this is a huge thing...how does anyone understand what's going on here?” It's very complicated! I mean, I have to produce code for other people and not just myself - that was a huge shift.
On professional preparation as a new developer.
On how you can prepare? I mean, most jobs are going to understand that if you don't have prior work experience that you're not gonna come in hitting the ground running, and you’re going to need some lead time. I found that a lot of companies are willing to give you the training that you need and are willing to be gentle with you. And, not expect what you're not capable of. So you’ll get a lot of chances to just learn while you're in the job and you don't have to be: “oh my gosh - I’ve never contributed to a repository with like, sixty thousand commits! How am I going to survive?”
If you really want to prepare for that, you could also try to contribute to open-source projects. You could read through the Rails code base, or read through the Angular.js code base. And, even if you're not making pull requests with amazing new features...
Rails is a really huge code base, has tens of thousands of commits. You could read through it and try to understand what it does. And, you’re getting practice reading through these very large repositories. If you can understand the Rails code base and what's going, you can probably understand any code base. It helps that Rails is a really nice code (language) and maybe you go to a job and they have a really crappy code base, but...
Yeah. You can do things like that. I definitely think it's possible to teach yourself how to do these things, and you get a lot of on-the-job training, as well.
Getting hired (paid internship) strategies.
So you're talking about on-the job training and also in the question there was an element of the pre-job stuff. How do you connect the dots? Do you mind talking specifically about how you rustled up an internship without actually having a CS degree?
Yeah, definitely. When companies are looking for interns, I think they definitely are looking for people with CS degrees. You kind of come into the internship, and you already know that you're sort of a bit of a long shot - you need to prove yourself. And, I think there are steps you can take to prove yourself.
Some of those things are hard skills: you can point to your GitHub account. Like: “these are my projects, this is my fully functional Twitter clone, this is my fully functional tic-tac-toe...here’s a tic-tac-toe bot you can play against. Here's the code and you can see that it's pretty good for somebody right out of college.”
And, a lot of companies are going to see that, and they're going to be like: “hey, this [person] actually knows what [they’re] doing. Their code’s not great, but it's pretty good and [they] seem really interested in learning. They’re very excited in the interview. They did pretty well on the practice test, or whatever. And we're willing to give them a shot.”
I think it really helps that the business is booming, companies are trying to hire as much as they can. When they see you: “I’m Tish [Hangout app questioner], I’m applying for a job”, they're not gonna be like: “oh well, Tish is competing against 100 other people for this one spot...let's see how well Tish does.” Actually, what seems to be the case, in most companies, is that they're just trying to hire as many people as they possibly can, And, it’s really just you competing against their arbitrary skill threshold - like: “Tish looks good enough, we’re willing to give her a shot.”
The competition is not that high - it’s not like low, but it’s not high. And, you don't have to do a ton to prove yourself for an internship position, especially if you have:
Paid Internship Checklist
a nice GitHub account
you have a resume
you can point people to your projects
on interviews, you can talk about your projects and how you went about doing them
On the interview, you can answer trivia questions about Ruby. They might ask you: “what's the difference between a crock and a lambda?” And, you are going to say: “I actually really don't know, that’s a pretty technical question...but, I guess there’s not a ton of difference between a crock and a lambda. But I prefer to use lambdas, I know what a lambda is...”
Yeah, anyway, you probably want a different question: like “what's the difference between a symbol and a string?” And, you can be like: “the symbol is only represented once in memory and if you instantiate the symbol multiple times it’s only one part of the memory. But if you instantiate the string multiple times, it takes up many different memory addresses.”
...I'm not very good at Ruby questions anymore...I forgot all my Ruby as I started learning R. I’m very good at R interview questions, if you wanna ask me. And, I actually do interview people for my job - I actually make hiring decisions these days. So, I can give you cutting-edge interview tips, or tell you what it's like interviewing other people!
Go on... (Laughter)
Oh, OK. (Laughter)
Hiring managers and the interview process.
The way we do interviewing at Avant - this is just one company - but I think it’s pretty standard. So, you want a job at Avant. You can go two ways:
- You can apply through a job portal.
- Or, you can have an internal referral.
An internal referral is basically, when I'm like: “this is my friend, he’s a pretty good guy. I’ll vouch for him. He wants to work here. Those are fast-tracked, whereas jobs portals, you basically sit in a database with a hundred other people and it usually takes a couple weeks before somebody gets around to seeing your application. Whereas internal referrals are instantly seen.
So, it’s great if you have a friend working in another company and you can be like: “hey - can you get me that internal referral, and put my resume in the special pile?” That's definitely a good way to start out and that's how I started out. I think it was pretty important for my job to have that kind of internal referral so that I (didn’t) get filtered out with: “oh - this guy doesn't have a CS degree, like - pass.” That definitely helps.
I was gonna keep going through the interview process, but if you have specific questions...
OK, yeah. So, you mentioned that the internal referral process is vastly superior to just pumping and dumping your resume out on a bunch of job boards and that's absolutely something we’ve (Viking Code School) found - a hundred times.
So, you on the other side - you're the developer in the chair making decisions and reading some of these things. How does somebody from outside in the world - who doesn't know you personally - connect with you and actually make you take notice to the degree where you might actually say: “Oh! this person - let's give them a shot through the internal process, not through the job board process.”
Yeah, so the biggest one is: people I went to college with are my personal friends, so I know them pretty well. But, I mean, none of you guys went to college with me, so I guess you're out of luck on that one.
Master GitHub – connect with decision-makers!
But, another one, is I’ve had people contribute - I have a personal GitHub account. It has repositories on it. We have a company GitHub account: GitHub.com/avantcredit We have a lot of open source repositories there, too. Sometimes people make commits to them or file issues, or something.
We definitely really notice, like: “oh my gosh...this never happens”... maybe, like four times a year or so, somebody will actually file an issue or a commit to a repository. And, you bet that within an hour of that happening, we’re crawling through their GitHub, crawling through their LinkedIn, like: “is this person legit?” We kind of get a little giddy.
So that’s another way we really notice people, like: “oh my gosh they noticed us, we're gonna “crawl” all the way through - see what they’re up to, maybe try to reach out to them.“
That’s actually a phenomenal, phenomenal tip!
Yeah - if you Google me “Peter Hurford” you’ll see peterhurford.com or, GitHub.com/peterhurford. You’ll see I’ve got 30 repositories there. Hopefully, some of them are kind of interesting. Especially if you're really into R. If you’re not really into R...I guess they’re not that interesting. You can try ‘em out and if something’s broke, you can just file a quick issue. Like: write “oh - this is broken.” It didn't take that much work to see that something could have been improved, and maybe you can even make a pull request or something.
Yeah, I would definitely notice - a hundred percent - and be super-inclined to get that person an interview.
That's great! It not only provides a way of cutting through the noise and reaching out to people who are in these companies, but also helps illustrate the importance of having that online “paper trail” that leads to you.
Yeah, another thing: so you look through my GitHub and you see that I have certain repositories. You could just send me an email like: “Oh hey, I saw that you’re doing blank - I’ve been doing this that’s pretty similar. What do you think? Or, maybe ask for advice. “Do you have any advice on how I could do this better? Or, I was running into this particular problem on my repository and I see that you solved it this way. Can you tell me a bit more about that solution?”
My email address is not hard to find - I think that's true for most people. And, I love getting emails.
Those are a great tips!
Does anyone have any questions, off of that - or in general? It can be off-topic, too.
Yeah, sure! And I’m also happy to keep talking about the interview process if you guys want me to keep rambling on about what those steps are.
STUDENT Q: [Andrew]
Yeah, I had a quick question: I know not all companies are open-sourced...?
STUDENT Q: [Andrew]
...and have no repo’s (repositories to contribute to). Are there any tips on how to approach that? ‘Cause it seems to be a very closed-door kind of thing...you know, networking and that sort of thing?
Yeah, there are some very private closed source companies. Yes, so for those - if you don't know anyone in that company, I guess you do kind of have to network. Most people aren’t so private about what company they work at. If you use LinkedIn and type in the name of the company you wanna work for, you’re gonna surface people that you could potentially then Google. Then, maybe they don't have anything open-source for their company, but they do open-source stuff on the side.
I never really got into networking things, but you can go to Meetup groups. If you happen to be in a city with a lot of programs...you can just see if there’s Ruby meetup group in your city. Go to meetup.com: type in “Ruby,” yeah. If there's a Ruby meetup in my hometown of Cincinnati, OH there's probably a Ruby meetup in a lot of random cities. You just go there - and there's probably going to be lots of people there, who are specifically there to recruit.
Companies seek YOU out, too.
I go to Ruby meetups, specifically to find people to recruit for Avant. And, the thing is: you guys really want jobs. But the thing is, companies also really want talented people to work for them. So we’re going to make an effort to try to find you, as well! So, if you’re going to Meetup groups, we're gonna try to find you.
If you’re doing awesome stuff on GitHub, we’re gonna do our best to try to find you. One of the things I was working on, was just trying to trawl through all the people who are on GitHub, in the city of Chicago (where Avant’s located) and try to look through their stuff. Can I find anyone on GitHub interesting to talk to? I really want to find talented people so that I can hire them.
Yeah. I guess companies are about as desperate to hire you as you guys are desperate to get hired. You can really play that to your advantage.
Does that answer your question Andrew?
STUDENT Q: [Andrew]
Yes, it does. Thank you.
STUDENT Q: [Jeff]
I have a quick question, as well. You mentioned that when you first got started as an intern, they didn’t really have an ironed-out intern program, and you had to find your own work?
I guess, starting out in a completely entry level, what kind of work can you find yourself in? You need a code base, you need a professional... (inaudible). What kinds of things were you able to hop on and contribute to - right away?
I guess when I was in Avant - pretty much any company wants to do a lot more things than they have people able to do. So, they’re gonna work on their high-priority projects and they're going to de-prioritize these things that are nice-to-have, but not critical. And, a lot of people are going to have a pretty long lists of: “these are all the things that’d be great to do...but we just don't have the capacity to do them.”
So you can just go around and be like: “what are the things that would be really nice to have that you don’t have the capacity to do?” They’ll say: “Oh yeah, it’d be really great if somebody could make an API that does blah-blah-blah.” And, you can be like: “Well, I can do that!” Yeah..and kind of work from there.
STUDENT Q: [Jeff]
Gotcha, and actually one more thing: again, on getting started. You said you jumped around to learn a lot of languages. You started with Ruby, you jumped to R... before you were working with Flash.
How long does it take you, when transitioning to something new, to feel really comfortable...‘cause you do have a lot of (inaudible)..how long does it take to get comfortable in a new role like this?
I would say, right now, it takes about a month to get really comfortable with a new language. When I started out, it would definitely take a lot longer. You’re right that languages don't...like a lot of languages are very similar to each other. Developer hygiene is gonna be the same. The idea of a function is going to be the same. Every language is probably gonna have something like a hash or a dictionary or an array. All of these things - maybe they’re just notated differently, but they’re still the exact same concept. So once you’ve really mastered it - on a conceptual level - it's not hard to switch languages.
So, if you get really, really good at Ruby and you spend a year or two years working on Ruby eventually you’ll just have also happened to have learned so many concepts that you can just quickly pick up. Like Python, or Java, or these other object-oriented languages. You’ll be able to say: “ I already know what objects are. I know what private and public classes are.” They’re the same things in Python, in Java - even though they’re notated differently.
So basically, once you learn two or three languages very well, you can just start learning any language in a month or less. Then, you can know 20 languages, or something if you really want to.
I see a question from...Tish?
[Reading out loud]
“Would you laugh if I you saw my lab projects up on GitHub? I mean, I have no groundbreaking projects but I see the need to be active there.”
No, I wouldn’t laugh, I think that's actually a good idea. Just so few people actually have anything on GitHub at all, that seeing anything on GitHub open source is pretty cool. I mean, you wanna pay some attention to...are they going to have any idea what you're doing? So maybe write a nice readme, or comment on your code. I don't know what kind of a project it is. If you’re talking particularly about: “this is the precise mitosis of this like, some random-random thing. And, the code is impossible to read, and no one has any idea what that repository is about...maybe it's best to leave it off, or work hard on cleaning it up first. But, I think that could be a good idea. It shows that you’re interested in learning, and interested in GitHub. That’s always a good thing to show.
Cool. What other questions do you guys have?
STUDENT Q: [Andrew]
Yeah, what are some things to look for - when you look at people’s GitHubs, profile accounts, and their repos? You did mention, when you go into their code, do you look at how they comment and other things? Are there other metrics that you look for specifically?
Presenting your code for professional industry review.
I mean when I look at a repository, it’s kind of like reading a resume. I tend to read it pretty quickly. Spending maybe, at most five minutes poking through it and I'm really looking for that developer hygiene stuff that we talked about earlier.
So, when I look at code on GitHub, I want to look at it with the understanding that it's not like they polished it up and are submitting it as a professional code sample or something. I know it’s their personal project - it's not fair to use it as the sole determinant on whether they’re a good programmer...maybe they wrote it three years ago, or something.
But, it's good to know how well documented is it. Do they have tests - at all? And, if they do, are they reasonably good tests? Is it just one gigantic file...? Basically, if I pick a file at random - can I read it and understand what it's doing?
This is something you can just grab a developer friend, maybe, someone else in your school and be like: “hey, this is my GitHub repository. Can you spend five minutes understanding what it does?” And if they’re completely clueless about what your repository is doing, maybe you might want to put a bit more time into cleaning it up. But let’s say if I look through your GitHub and I see your repository and I’m like: “I have no idea what this guy is doing,” I’m not gonna be like, “therefore...I’m not hiring him.” I'm just gonna be like: “oh, he just doesn't get any bonus points for having a good GitHub."
I see GitHub as extra credit - I'm not taking off marks.
If I want to know whether you can code well, I'm going to ask you for a specific code sample, or I’m gonna give you a coding challenge. Basically, I would send you over email: “hey, I want you to make this specific thing,” and give you detailed instructions about what it does and then you send me over email, like a zipped Ruby file that does what I want you to do. That’s what I'm gonna be looking at and will be like: “oh - this guy knows how to code or doesn't know how to code.”
So, looking at the GitHub is just extra credit that can make the difference, but I'm not gonna hold it against you if your lab assignment is too hard to read. Don't freak out: “oh my gosh - I have stuff in my GitHub and it’s from four years ago, and Peter’s not gonna have any idea what I’m writing.”
STUDENT Q: [Andrew]
Ah, great! Thanks a lot.
Any other questions out there? Cool.
One of the questions I had: you mentioned about the transition from Ruby to R, and what it takes to get comfortable learning a new language.
When you knew that you had to start picking up R, how did you approach that learning process?
What were the tools that you used?
Yes. No one made a project for R, unfortunately (laughter). But the way I learned R, was I had co-workers who knew R. And I basically just asked them: “hey, how did you learn R?” And, basically everyone recommended this particular textbook that apparently everyone uses to learn R. It’s called “Advanced R” by Hadley Wickham.
So I went through that book and it was pretty good. There are some Coursera classes that I took, as well. But, basically I just Google’d how to learn R, and tried to find resources that seemed possible to me like: “this actually looks like it will teach you something” and I just asked around: "what resources do you guys recommend?” Then, I put in the time to actually go through those resources.
Right now, I kind of like learning, doing those things where you learn by example. I want to learn Clojure: so I type “Clojure by example.” There are a lot of websites showing “this is how you do it in Python, and this how you do it in Clojure and this is how you do it in Ruby." It’s a much more advanced way of learning, that is really only available to you when you really know the concepts on a fundamental level. Then you can just see how the concepts are translated. But, the first couple languages you're learning you really just need to start from scratch - buy nice text books and stuff.
Cool, thank you.
So, we derailed you a little bit. When you were talking about the interview process, and the hiring process?
Interview and hiring process insights, continued.
Yeah, so we talked a lot about the internal referral initial stage, the Googling around and stuff. Basically, you apply and we’re basically deciding: “...is this person legit or not?” Right at this point - we're going to do a phone call, so we’ll call you. Then, we’ll chat with them, I'll just chat with the candidate to get a feel for their background. 1. What are they interested in?
What do they know about Avant, the company?
Why do they want to work here?
What do they want to get out of their job, while they’re here?
I'm asking them some coding questions...I'm not asking them what's the difference between a crock and a lamba - that comes later. I’m asking them, going through their GitHub and saying: “Oh, I see you did this. Can you tell me how you went about doing it?” Or: “I see on your resume that you have experience in this...can you tell me about that?” Just kind of open-ended questions - just getting them to chat about technology. I just want to see if they sound knowledgeable. Do they sound interested in Avant? Do they care about us, or are we just one of a thousand places they’re applying to and really don't care? A pro-tip is to pretend convincingly, like you care about the company. You wanna make them feel special, even if that’s not true, pretend enough - to be interested in the problems they’re solving!
Do something unique for major personal growth.
Basically, on the phone I'm trying to see have you done at least one thing in your entire life that is non-trivial. Is there anything you’ve ever done in your life that I couldn’t just do in like an evening? And, for a fair amount of applicants, that sadly is not the case, they're kind of boring. But, a lot of people have done something special and they have it on their resume or on their GitHub or maybe they talk about it on the phone.
As long as you’ve done one special thing - as far as I'm concerned - you can move on to the next stage.
Do you mind flushing that out a little bit? Like the kind of things that you’re thinking of there? I and everyone else, has some sense in their minds of maybe what that might be. But, in your experience can you just speak about it a bit more?
Yeah, so – class projects – if you're right out of college. If you’re not right out of college, things you’ve done in previous jobs. I guess like concrete examples: if you made a Twitter clone, that’s pretty cool, actually. That's not easy to do and it shows good grasp of Rails and Ruby. It's like a bit formulaic and trite - sure - but it’s still pretty interesting. Maybe you could spin it out, be a bit more creative.
Pretty much any final project I’ve ever heard of, for a bootcamp fits into this description. It’s not like: “I built a calculator that can add five and three together and give you eight.”
It’s: “I’ve built this thing that's elaborate, has 50 commits,” or something. Basically shows that you put in a lot of effort. Not like somebody could have just done it in a weekend - you actually had to put in effort! It's a bit hard to actually come up with good examples of this.
I remember somebody made a pretty cool thing that took posts from Reddit and displayed them as a grid - and you could see the images, from r/Funny. And if you hovered over them, they got big on your screen so you could read them. That was really cool, and I couldn’t just do that in a weekend...yeah.
No problem, I hope that - did that help?
Yeah, we have a number of people who are going to be thinking about final projects, pretty soon...
Yeah, so if you have a final project and you can talk about it and sound excited, and tell me how you did it. I think a lot of the phone screens I have, I talk with them like: “Oh! You have this cool class project - why did you decide to do this and not that?” And, they’ll tell me: “Oh, the professor just told me to do it that way...”
Independent thinking and initiative gets you hired!
And, I'll be like: “Oh, that's a bad answer.” That shows no original thought, no ability to do things on your own, no understanding of even why did your professor tell you to do it that way. And, I'm not going to be very excited about that person.
But if they can be like: “Oh yeah, I chose to go with Postgres instead of SQLite because I wanted the additional capacity for more columns and even though it’s harder to runs locally, it runs much better on Heroku - and I wanted to host my project on Heroku. And, Heroku doesn’t doesn't really like SQLite.” I'll be like: “Yeah that's a really good answer.” It shows that you can understand the choices that you’re making and that you can talk about technology. Awesome. Those are the kind of people I want to work with!
Yeah, so if you get past that phone screen we then usually give you a code challenge, and this is a very well-defined problem for you to solve in Ruby - or any language of your choice. And you get a time-frame - usually three or four days in which to solve the problem and send your solution back to us. We then have a bunch of people look over your code that you submitted, and assess: “is this good code?”
First of all: did they solve the problem? A surprising amount of people actually don't succeed at solving the problem. Or, they give you a code and you run it and it crashes. If your code that you submit for the code challenge crashes - you're probably not gonna get a job! So, please make sure your code actually works...
That is definitely something we emphasize - quite a bit! (Laughter)
Yeah, yeah...I'm very surprised at the amount of code challenges I get back that don't actually work. So, a surprisingly easy way to distinguish yourself from the pack is just write code that works. Yeah, um (laughs)...that’s all it takes!
Yeah, so code that works. Code that works and that I can read and understand...I mean it's nice, you can use a lot of the cool tricks that Ruby has. Instead of writing a very long do-loop you can use .map or .each, or those cool Ruby shortcuts. That's really awesome if you can clean up your solution that way, those are big points. I’m assuming you guys learn that? So yeah, use those tricks that you learn, in your code.
And, then very few people write tests for their solutions - that's another very easy way to distinguish yourself is just code up a really quick test suite. That’s super impressive, and another very easy way to distinguish yourself is just writing tests for your solutions.
If you make any strange choices, you can just write quick comments that explain why you made that choice. A lot of people...when you write comments, you kind of want to comment on why you’re making – choices not what choices you're making. You don't want to comment: “this is a while-loop...” I know that’s a while-loop - it says “while” the code. I don't need you to comment that to tell me.
But, if you're like: “oh, I chose a [while] here because I want to do this and this,” that’s kind of cool to know, from the comments. So, that’s the coding challenge.
Then, after that it's an in-person interview. This is the one that's for all the marbles. You show up in-person, at the office. You interview with five different people and they're going to ask you a mix of questions that you got on your phone screen like we discussed before. Then actual trivia questions like: “can you solve this?” I’ll just give you a problem. Maybe I'll be like: “hey, can you write me a function that gives me all the even Fibonacci numbers below four million?” or something. Then you just write it out for me on a sheet of paper or on a whiteboard.
It’s surprisingly stressful to code on a whiteboard - you should practice that specifically, if you don't already. Because it's specifically very different from typing on a keyboard. And, a lot of companies do whiteboard coding, for some apparent reason.
Then we sometimes ask trivia questions like: “what's the difference between a crock and a lambda?” Which I'm totally going to Google after this is done... because I personally do not know the answer!
Nice! So, what’s the difference between a sort of medium / not that interesting-level candidate in terms of their answers to those questions and someone who really blows you away?
More of the technical, the whiteboarding type of questions. The ones that you’re really putting a lot of weight to.
Right, yeah so I think the whiteboarding questions are where people put a lot of their weight toward. Different people, at Avant, have different interviewing styles. We don't have a ton of standardization and I imagine that's true of other companies, too. So the way that I put on things might be different from the way that my co-worker does.
And, I think all five of us have to say that you’re in to get in, and if any one person doesn't like you, then you don't get the job. So that's a bit tough.
Whiteboard Challenge + Showing Code Quality
But yeah, what am I looking for in a whiteboard challenge?
- They successfully answer the question. That it (the code) works again.
- Basically, that they know how to code, that they don't just freeze up and feel like: “I don't know how to solve a question.”
They don't need a ton of hints, as to what the right answer is. Basically they can just sit and think about it. Oh, another thing is that they ask questions. Like: “I know you wanted me to sum all the even Fibonacci numbers under four million. Do you want me to just hard-code the four million number, or do you want that in a parameter, in a function?”
Basically, kind of understanding what are the inputs and outputs that you need - making it very concrete. If there's any uncertainty at all, you definitely should ask the question to clear it up. Questions are free - you can ask as many as you want.
Another thing is being able to explain your decision process. Instead of just silently thinking to yourself and then writing on the whiteboard, if you can be like: “OK, so I know that the Fibonacci Sequence start like: 1123 and that's just the sum of the previous two." So I can write that on the whiteboard. And I know: “OK, first before I can sum all of the Fibonacci numbers, I need something that can generate the numbers. So first I'm gonna write a function that does that...” Yeah, just basically explain your process.
After that, is code quality. Rather than just writing one gigantic function that calculates Fibonacci numbers, finds the even ones and sums it...if you can make three different functions like:
- This function’s single responsibility is to get me the Fibonacci numbers.
- This function’s single responsibility is to take an array of numbers and returns all in the even ones.
- This function’s single responsibilIty is just taking an array, return the sum of all the numbers in the array. And then I use all three of those functions to get all the even numbers under four million...
That's about as good as it's gonna get in that one particular question. That's really awesome, and you’re explaining your thought process and you're asking questions about the question on what I'm asking you to do.
Yeah, if you do all those things...so few people do...that would blow me away.
...Then you win, you get the job!
Yeah, you get a job!
Cool. I know we’re getting to the end here. Do you have any final tips on the interview process the learning process, or anything along those lines. That looking back, if you were in the shoes of someone who’s on this side of it - but not quite there yet - that you could give to yourself?
I think the biggest advice I wanna give myself - back when I was like: “oh, I really want my first job...I don't have the CS degree, no one is going to hire me, all I know how to do is...I don't even know the difference between a crock and lambda...”
What I really wanted to tell myself then is don't be scared. Companies, they want to hire people. This is still a very hot job market. I imagine it will continue to be a very hot job market for a while. Yeah, it’s not as hard as you think it is to get a job. It might take you a little while, but just have some confidence, just give it a try and don't be scared. If you're coming across scared on the phone screen - that's actually going to be a bit of a red flag. You at least need to pretend to be confident. Yes, that's my number one advice.
My number two advice is get an internal referral, those are really awesome.
You gave us some really good tips on how to do that, too - which is awesome!
Yeah - contribute to my repositories! (Laughter)
(Laughter) You might have a conflict of interest on why you would offer that advice.
But, hopefully, someone will take you up on it. (Laughter) So Peter - given that this is going to be available publicly, what would be the best way for someone to potentially reach out to you, if you’re into that ?
Yeah! If anyone wants to reach out to me you can email me at: firstname.lastname@example.org
Just send me an email. Also: peterhurford.com is my website. It’s like two years out of date and you should not judge me by it. Yeah, I definitely need to update that!
But it is a pretty good example of a code portfolio site...
...Yeah, I used that website, put it on my resume and people talked about it on my phone screen. They're like: “oh, this is a pretty sweet website, how did you make it?” And then I got to describe how I did some of the CSS stuff, and I got to sound like I knew what I was talking about. And, talk about technology on the phone screen. I think that definitely helps.
Great. Well, thank you so much Peter for joining us! I really appreciate it.
Yeah, thanks for having me!
Yeah, absolutely. And to everyone else who’s here tonight and who’s listening in, maybe later on, thank you guys for your attention. This has been the Viking Codecast with Peter Hurford with Avant. I hope everyone has a wonderful night and we’ll see you next week!
Thank you, Peter!