Every single day, people ask me dozens of questions about coding, career tips, web development and advice for the job search. There are so many different opinions out there about how to switch careers and code full-time.
I thought it would be helpful if I started answering these questions in a public forum; so we’ve started a new series on the Firehose blog, which will be known as Ken’s Mailbag. In the inaugural edition, I’ve identified the 17 best questions I’ve received about coding this month and answered them below. If you’re an avid sports fan, you might be familiar with this format.
Have a question that you would like to be featured in the next mailbag? Shoot an email to email@example.com or tweet it at @FirehoseProject using the hashtag #AskFirehoseKen. You also may be able to increase the chances that we feature your question by throwing us a like on Facebook or a follow on Twitter.
Let’s get into the questions.
Q: As a developer who is just learning with little experience, what is the best way to approach developers who have a lot of experience?
— DB, Tulsa, OK
First off, DB, kudos for asking this question and getting out in the community early. It’s easy to want to wait until you feel you’ve “mastered” web development to put yourself out there. Reaching out to the community is absolutely the most important thing to do.
If you want to land a job as a developer, one thing people will want to gauge is: How much progress have you made since the last time we talked? [Tweet this]
By putting yourself out in the community early, you can build real, long-lasting relationships with various developers. People will see you progress as you learn. Be 100% honest and up-front with people, and let them watch your journey as you hone your craft. There isn’t any official strategy outlining how you should act or talk. Just be yourself.
The fact of the matter is that just showing up is a big part of success. I’m a firm believer that 97% of most things in life don’t really matter, and the 3% would happen whether you put energy into it or not.
Don’t overthink things and know that most people are nice human beings.
Q: I’m two weeks into a coding bootcamp and a web development internship just landed on my lap. I know it wouldn’t hurt to get the work experience, but I also don’t want to bite off more than I can chew. What are your thoughts?
— KM, San Diego, CA
Taking opportunities to gain relevant experience in the industry makes a ton of sense. Taking a proactive approach to gaining meaningful experience absolutely makes sense.
Having said that, some internships are more relevant than others.
There’s nothing stopping someone who just watched the movie The Social Network to think the only thing between them and the next Facebook is the right hoodie. Launching a fictional organization and posting an unpaid internship under an angel.co profile happens in the real-world (not just in the movie Nightcrawler).
Unpaid internships in general are a great idea…if the company you’re interning with is legitimate. And you will be able to suss out if the company is a legitimate company pretty quickly if your defenses are up and you’re able to ask a few smart questions.
- Why are the looking to hire an intern? Is it to write code today, or more to vet you as a potential full time employee? You will be hoping for the second.
- Is there a more senior developer than you working full-time on the project?
- Are the founders working on this full-time or do they have other jobs?
- Has the company raised venture capital? Do they have paying customers?
- Is the position paid?
I’ve personally invested a lot of time building somebody’s idea and they lacked the skills to bring the product to market. The experience was quite frustrating as there was no end date for it. It kept dragging on until I eventually gave up, having sunk costs of hundreds of hours of my personal time.
Once you find out if it’s legit or not, then you can decide if the opportunity makes sense.
I’ve seen aspiring web developers work for free for companies, and everything worked out. I’ve also seen it not pan out, leaving the student completely burnt out.
Overall, accepting an internship for the experience and leveraging it later in your job hunt isn’t a bad idea. Whether it’s legit or not, an internship as a web developer working for someone else is experience you can list on your resume. If you’ve never worked in web development in the past, it’s probably more relevant than most coding-related activities that you can currently list.
So certainly proceed, but remain cautious in the process.
Q: What’s the best way to start getting involved with open source contributions?
— MB, Monterey California
Making open source contributions is an awesome way to differentiate yourself from other developers. While countless people use ruby on rails and the various open source libraries that are on GitHub, a much smaller percentage of the ecosystem actually gives back.
Most people are a bit intimidated to start. If you’re just learning how to use an open source library, it can feel scary to pitch in and help build a project. I know the feeling! But as someone who has written code in many libraries and even rails itself…trust me, it’s easier than you expect.
In general, people will be impressed by contributions into project they know and use. The best projects to help with are the projects you’re already using. Here are a few pointers that can get you started:
- Improve the documentation of the projects. While this doesn’t involve writing complicated code, it does make the ruby on rails ecosystem better. Rails even has guides on how to do this.
- Consider finding features that are not well tested and add automated tests. This will make the framework itself more stable!
- Try to think about features you need. Necessity is the mother of innovation. [Tweet this]
You will get major credit for contributing to an open sourced project. The hardest part is getting the courage to take the first step.
git clone http://github.com/whatever/whatever.git
And if you can say you’ve helped contribute to the rails framework, that’s a statement that even most senior developers can’t make. It will certainly differentiate you from other junior and mid level developers. It also gives back to the awesome programming community that has so graciously given us the software for free.
Q: I’m looking to join a company where I can grow and learn the most as a developer. There are many web development consultancies which offer apprenticeship programs. Do you think this is the best position to learn and grow as a developer?
— JZ, Chicago Illinois
First, let me zoom out and explain how web development consultancies work. Then I’ll explain why it’s a huge gamble to start a career.
Web development consultancies work with businesses to build out their ideas. Some of the consultancies work for Fortune 500 companies like Walmart, General Motors or CVS. These companies are large companies, with huge budgets that only hire the best. There companies are price insensitive and have no problem spending millions of dollars on their development needs.
Most consultancies do not work with Fortune 500 companies (there are only 500 of them…). This means that these companies hold budgets that are in the realm of $50,000-$200,000 for a project. Between client meetings, design, product management, testing and all the various aspects that come down to building applications, it is generally impossible achieve the goals within budget without cutting corners.
Most consultancies won’t focus on best practices, like writing automated tests. Instead, they focus on shipping the closest thing to a working application as soon as possible.
Some of these companies have prolific open source projects and have established themselves as industry leaders. This means that their senior developers fight for the opportunity to do the open source contributions, and the client work (what pays the bills), is the last thing they care about.
So if you’re looking to learn the best way to engineer applications, jumping around on many different projects, cutting corners and shipping features as quickly as possible isn’t a viable option.
Instead, I’d suggest looking for a team of 5-8 developers and working on a single project together. [Tweet this]
Since the team will continue to work on the same project month-after-month, their long-term happiness is dependent on doing things the right way. Cutting corners in the short-term can cause massive pain in the long-term, so it’s in the team’s best interest to do their best work.
These types of companies have often raised venture capital and have around 20-80 employees.
Q: What’s the etiquette around blogging about coding challenges that are given by potential employers?
— JZ, Chicago Illinois
There’s really nothing formal about the process. If they explicitly ask you not to, you shouldn’t. But this probably won’t happen.
To be safe, I would suggest holding off on publishing until after you’ve been given an offer (or told that you’re not a good fit). But if you’ve taken the time to solve a coding challenge and they choose not to move forward, I’d take every silver lining you can out of the situation.
Q: I have a phone screen for a web development position coming up soon. Should I expect questions about complex algorithms and data structures on the phone?
— YY, Saint Paul, Minnesota
Companies generally will only use phone screens if they’ve recently been burned by a candidate who had a resume that was totally out of touch with reality. If you’re not lying on your resume, you should expect to crush the interview in most scenarios.
Expect a few questions about building a basic application, MVC architecture and maybe one or two high level questions about something that is explicitly referenced on your resume.
Having said that, I interviewed with Google many years ago and their phone screen involved jumping into a Google Doc and writing code while someone else was in the same doc. Needless to say, I bombed that interview. ¯\_(ツ)_/¯
Q: I’m considering applying to administrative assistant jobs to be a more competitive candidate when I start applying for web development jobs. What are your thoughts on this idea?
— PS, Lake Elsinore, California
Leveraging prior work experience to land a job as a developer makes a lot of sense. And I like the fact that you’re focusing on the long-term and thinking a few steps ahead.
Unfortunately, the role of an administrative assistant is far removed from web development and will provide little to no help in your job search. Not to fear though! There are a number of steps you can take if you’re thinking more than one step into the future:
1.) Programming Internships
The traditional path of Computer Science students is to get a first get a few internships, while they’re in college. Some internships are unpaid, but most are paid. Hourly rates for programming interns runs the gamut from $12/hour – $30/hour.
Internships are generally used as a “feeder” into the real company. When I was an intern at Microsoft many years ago they treated the interns outrageously well, because the goal was to hire the good ones.
As an intern at Microsoft I was flown out from Boston to their Seattle office, where they paid for a hotel room, let us expense dinners (pro-tip: use un-itemized receipts to expense booze), and they had a private Vampire Weekend concert exclusive to Microsoft interns.
Internships are a low risk way for companies to test out potential employees. Are you awesome? Expect an offer. Not a great fit, get the experience to list on your resume and find the next thing, but the company isn’t stuck in an awkward situation where they have to fire an employee.
2.) QA Jobs
Quality assurance, or QA for short, is the process of making sure that things work as expected. Sometimes it involves writing programs to make sure things work. Other times it involves pointing and clicking (and can be a bit monotonous).
My first job in the tech industry was performing quality assurance for software that programmed guitar effects pedals. I ultimately had no interest in doing QA, but after hearing a lot of “no’s” from various companies my career counselor at university told me he didn’t care if I wanted to apply or not.
After getting the job, I kept my eye out for the web development work that the other developers didn’t want to do (regardless of the role, there’s always work that someone doesn’t want to do) and volunteered to do it. After getting access to the code and access to commit, I slowly transitioned from testing guitar effects pedals to writing the code that programmed them.
My next couple jobs were MUCH easier to get than that first QA internship.
3.) Jobs Close to Developers
Any position that can have you work closely with developers will be helpful for transitioning into the role. Learning how to communicate with senior developers and speak the language is something you can do in the role of a: product manager, customer service representative, or a variety of other roles. [Tweet this]
I’d suggest trying to get an internship programming if you can, but trying to take a similar angle to the QA role at a company where you can move onto a more developer centric role. You should avoid an administrative assistant type role since it’s so far removed from development and likely won’t help you land a job as a dev.
Q: I’m spending 1-2 hours each day coding, but I feel like I’m not making as much progress as I could be.
— TL, Berkeley California
There is a concept that developers throw around known as “context switching.” For complex topics, like programming, it can a bit of time to remember where you left off. Depending on the level of complexity of the code that you’re working on, getting up to speed can take anywhere from 15 minutes to a full hour.
When working for multiple small chunks of time (in the range of 1-2 hours), you’ll find yourself spending a lot of time trying to remember where you left off. After coding for about 30 minutes, you’ll begin to get yourself in a flow. It’s basically the programmer’s version of being “in the zone.”
When learning to code, it’s not the number of hours you spend coding, but rather the number of hours you spend in a focused state of mind. If you spend 1.5 hours coding 5 days a week, you would be coding for a total of 7.5 hours.
However, those hours aren’t all equal. If it takes you half an hour to “get in the zone,” which is pretty normal, you’d actually spend:
- 2.5 hours getting up to speed with where you left off
- 5 hours making progress, learning new concepts and really impacting yourself.
On the flip side, if you spent 5 and a half hours coding all consecutively you would actually spend.
- Half an hour getting up to speed where you left off.
- 5 hours making progress, learning new concepts and really impacting yourself.
This means that if you batch up coding and do longer sessions, you’ll spend less time getting back up to speed.
But be careful. There’s a limit to how much most people can focus and learn in a single day. Working more than 9 or 10 hours in a single day will cause fatigue to set in, and problems that are relatively simple to solve with a fresh set of eyes can take hours to solve.
The ideal amount of daily coding is somewhere between 6-9 hours of focused time. [Tweet this]
The numbers are different for everyone, but the key is to learn what works for you.
Q: My job search has been in full swing for about 2 weeks, and I’m waiting to hear back from potential employers. So far, I’ve been trying to send 2 applications a week, with personalized cover letters. Do you have any advice for me?
— JP, Toronto Canada
Spending time to craft a well-thought out cover letter will help separate you from other junior developers, but it will only help so much. I’d spend the time to customize the application for each company, but focus on doing so a bit quicker.
Say you’re spending 4 hours a week applying to positions. Right now, you’d be spending 2 hours for each position that you’re applying to. This is going to prevent you from hitting the volume of applications you need to send out. Instead, I’d urge you send out a higher volume of applications.
Cut the time you spend on each position drastically, and you can ultimately get it down to about 10 minutes per application. This adjustment will cause two things to happen:
- Given the time you’re allocating, you’d be able to apply to over 6x the positions.
- Your response rate may suffer a bit. You probably will result in each application being around 85% as effective as the “optimal” application you’ve been crafting.
But factoring in both results, you’d be spending your time and energy and getting around 5x the results.
The ideal amount of time to spend on a single application is somewhere between 7 and 20 minutes. [Tweet this]
That is, unless you have a contact at the company that you’re applying to.
This approach also leads to the chance of landing multiple interviews at the same time. Having multiple irons in the fire will make you more confident on the interview, because you have other web development opportunities in the pipeline.
As a general rule, you should try to have 3 or 4 interviews lined up at all times if possible.
Q: What questions should I ask a company during the interview process.
— JP, Toronto Canada
Asking questions during the interview process is important. It shows that you genuinely care about your career as a developer. Quality candidates who don’t ask about the work environment can come across as desperate and willing to take anything they can get. Nobody wants to hire desperate people.
I always try to ask the same few questions, for which I genuinely care about finding out the answers. Here’s stuff I care about:
1.) Do you have any plans to completely re-write any sections of the app from scratch.
Companies sometimes plan to “greenfield” projects for long periods of time, but never do. The result is that everyone just hacks on something and doesn’t use the best practices because “we’re going to rewrite it soon anyway.” The answer “no” or “we’re currently doing it” are acceptable, but “in the future” indicates a lot of technical debt.
2.) How do you test your code?
I find that using a test driven development (TDD) approach results in cleaner code. If a company didn’t use a TDD approach, and I would be the only one writing tests. This would mean that I would be pulling more weight than the rest of the team, which would be a bad sign. On the flip side, for someone who hates writing tests, maybe “no” is the answer you’d prefer.
The worst answer you can hear is: “we test sometimes, but not as much as we’d like.” This is super vague. [Tweet this]
If I got a wishy-washy answer, I might dive even deeper and ask something like: “what’s a ballpark of the code coverage percent you have? How do you test API calls in the app? Do you use mocking/stubbing? Dependency injection? Something like FakeWeb?”
Hard hitting questions about TDD really drill down to the real answer and make you look good in the process.
3.) How often do you ship your code?
Shorter timeframes will generally lead to a less stressful work environment than long timeframes. If you work for a company that frequently ships code, your mistakes are not a huge deal because any problems can be fixed relatively quickly.
Companies like GitHub use a radical approach, which is known as Continuous Deployment, which basically means they ship their code live whenever they want.
At other companies, longer release cycles are required.
- Banks: require third party auditing
- Microsoft: updates to desktop programs or video games take time to be ready to ship.
- Military: the extensive testing for military code requires a thorough testing cycle.
- NASA / SpaceX: when writing code to send vehicles into space, you want a strong certainty for perfection.
But in most companies, you’ll find that getting code live sooner is less stressful than waiting for long release cycles.
4.) Ask about the interview process.
Knowing more about the next steps of the interview process are critical if you expect to get the job. Solid questions include:
- “What are the next steps of the process?”
- “When should I expect to hear back from you?”
Knowing the process can give you an edge over other candidates. [Tweet this]
If you know the timing of the decision, you can follow up shortly after that time frame. In the meantime, you can prepare for the next steps.
5.) Ask to meet other developers on the same team.
Hiring managers, in general, will know the right answers to your questions. They will also pitch you on why their company is awesome. Generally, developers are less effective at concealing the truth.
You should confirm with the other team members that they agree with and support the talking points that the hiring manager outlines for you.
Also, you will be spending 40+ hours a week with this team of developers. Make sure that you like them.
Finally, as a developer, you should be involved in growth process for your team. If the other developers don’t have a say in the hiring process, it’s unlikely that you would be either if you got hired.
6.) Business Questions
If the company is venture-backed (meaning they’ve received money from a venture capital organization), there are a number of business questions that you could ask.
A number of stellar developers that I know have been laid off when money didn’t come through in time. It’s just the nature of how high tech companies are generally run. Questions like:
The question: “How long is your run rate?” is up-front and helps you understand the length of time before employee layoffs in the event that the company doesn’t raise additional money.
The answer might be way shorter than you expect. It helps to know the security of the job and gives you an understanding of the potential risk.
7.) Talk about trade-offs made in the codebase
In the real world things are messy. Sometimes more messy than others.
8.) But ask about things you care about!
If you take a lot of vacations and like to travel, ask about that. Maybe you would like to work from home 1 or 2 days per week. Are they ok with that setup? Or perhaps you’re interested in experimenting with a specific technology. Will there be opportunities to do take that on?
Make sure that you genuinely care about the questions you ask, and don’t be afraid to ask follow-up questions. [Tweet this]
Q: I’ve built a web application with Ruby on Rails, with a dashboard that shows the current state of the application. I want the application to have live updates and sync changes to the page in real-time. Where should I start?
— AA, Waukesha Wisconsin
1.) Live Polling
2.) Web Sockets
Web Sockets is an advanced technology that allows you to listen for messages that are broadcasted over the wire. Although implementing Web Sockets is an advanced process, there’s a service called Firebase, which is essentially “Web Sockets as a Service,” that makes remarkable simple to update a web application to respond to things in real time.
Q: I currently live in England, but I’m hoping to get a visa to move to California. How viable of a goal is that for someone’s first job as a developer?
— HT, London England
I have first-hand experience with most of the answers here, but this is a question where I do not. I’ve worked in the past with developers who have received H1B visas, but they were mid-level or senior.
My two cents is this: the competition for entry level developer jobs is pretty fierce. Convincing someone to do the paperwork and supplement the cost of a visa to hire someone without experience from a previous company would probably be a difficult sell. On the flip-side, there is a pretty big shortage of developers with experience (9 months – 2+ years in a professional setting).
I would shoot to work at a big corporation in London, which has offices in the US and try to get them to sponsor your visa. Small companies and startups generally won’t have the infrastructure, and legal teams to support getting these visas. Bigger companies, like PayPal, Microsoft, Google, Johnson and Johnson, General Motors, etc. will have the necessary infrastructure.
You might want to join the SF Ruby meetup group, then email their list. You could ask if anyone is currently working on a visa and mention that you want to ask them some questions. When they respond, give them your background and ask for advice. It may be totally different than my advice (and I’d trust them more than I trust myself).
Q: I’m about to interview for a Web Developer company that pays $13/hour and wants someone to work with cPanel, PHP, nginx, Apache, SSL, WordPress, and a few other technologies. I have limited experience with these technologies, what advice do you have? What do those words even mean?
— RA, Los Angeles California.
“Web Development” positions that include working with WordPress will generally be much different from building web applications using something like Ruby on Rails. Honestly, it will be a lot less fun too.
These types of roles generally don’t involve writing a lot of code from scratch (what you’ve learned to do), but instead require you to monkey around with WordPress (adjusting configuration files, installing plugins, etc.). You’ll spend most of your time figuring out how to make someone else’s code work, rather than coding it yourself.
In general, these types of positions require someone with technical experience. But they won’t offer you the opportunity to solve interesting web development problems or work with algorithms. Instead, you’re stuck handling repetitive tasks that require a certain level of technical expertise that the company doesn’t currently have.
Also, $13/hour compensation is crazy low. If you worked full-time at that hourly rate it would map to less than $30k, which is much lower than your market rate given your skillset. Know though that you’re worth at least double the rate you’d be paid. Most people who have any experience would probably pass on this.
For these types of positions, the person who wrote the job description might not even doesn’t know what any of the buzzwords listed even mean. For the interview, I would just expect them to explain what they want and ask you “can you do that for me?”
Alright, you asked what the buzzwords mean. It doesn’t matter too much, but here’s a quick rundown.
cPanel I’ve heard of it before, but never used it. It’s a website management tool for people who don’t want to have full server access. The alternative is to use the command-line, which is what I generally use.
Apache this is a little bit odd but Apache is sort of a hybrid of the PHP programming language itself and “rails server” of PHP. It’s an implementation of PHP, the first one, and it was everything all together (server, language, etc).
Apache is a beast. You can use it with Rails apps. It’s really good at serving static assets, so you can configure Apache to take over all of those files, but ruby to take dynamic content.
Nginx is a server too. You’ll probably use either Apache or nginx. Not both. Nginx came after Apache and was actually written by some Russians who forked Apache, removed the copyright notices in the source code, changed the license to something else (silly Russians…. you can’t do that!) and made some improvements to it.
It’s pronounced “Engine X” – something that tripped me up when first learning about it.
It’s easier to configure than Apache, in my opinion, and I like it. It’s what I generally use with ruby on rails applications instead of Apache.
SSL for this, they just want you to know how to make a site go over HTTPS. It’s pretty easy. What you’d want to know is you’d buy an SSL Cert at a site like namecheap. Then run a few commands in the terminal to generate a few files, and point nginx or apache to the cert files you generate.
Feel free to investigate the position. I’d probably pass if I were in your shoes, but it could be an opportunity to get paid to do things related to technology. I’d make sure to timebox the amount of time you spent at this company and be sure to move on to more exciting opportunities within 6 or 9 months.
Q: There seems to be a lot of job postings for development positions that require 2+ years of experience. Why are mid-level and senior developers so hard to find?
— BD, Greenvile South Carolina
You should absolutely apply to any position with 2+ years of experience listed as a requirement. At the time of writing the job listing the hiring manager probably wanted to get a developer with that level of experience. However, mid-level and senior developers are notoriously difficult to find.
Employers will often list requirements on job postings, then hire someone who looks totally different than what they listed. Anything with 2 years of experience or less is totally fair game. [Tweet this]
Senior and mid level developers are difficult to find because they’re generally happy with their current jobs. Still, recruiters are typically reaching out to them multiple times per week asking them if they’re open to switching web development roles.
These developers are generally on the market for around 2-3 weeks before switching web development positions. Because of this, it’s viable to land a position that appears to be a reach. The hiring manager often can’t find someone to fit their original requirements.
Q: I heard that blogging about code is an effective way to showcase my coding skills and it can help me land a job. I started looking at Jekyll and it’s a bit daunting. Any advice?
— RK, Christiansburg Virginia
If you’re looking to land a job as a developer, blogging is a really great idea.
My advice would be not to get sucked into the technical aspect of setting up a blog with complex tools, etc. Instead I’d suggest using medium.com. It has a beautiful design, great tools to make writing easy, and an amazing stats board. It’s definitely the easiest platform to set up quickly. Use Medium.
Q: I’m interviewing for a Mobile Development position, and I have a background in Ruby. They asked me to build a project using either Objective-C or Swift. Which should I learn?
–MF, New York City
If the development team suggested you could learn either technology and it didn’t matter which one, I’d learn Swift first. It’s heavily inspired by ruby, so it should be pretty easy to pick up the basics.
Objective-C was inspired by C and SmallTalk and those languages are quite different from ruby and will be more difficult to learn.