Every single day, people ask me dozens of questions about coding, career tips, web development and advice for the job search. So last month, I decided that it would be helpful if I started answering these questions in a public forum.
It’s now one month later, and we’re ready for the second edition of the Ken Mailbag blog series. Have a question that you would like to be featured in the next mailbag? Shoot an email to firstname.lastname@example.org. 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.
Learning to code can make me feel intimidated and unsure of myself when I see error messages. Any tips to make me feel more comfortable.
Learning to program is fundamentally different than learning many other skills. When learning to code, making mistakes is natural. And since mistakes can be fixed by only typing letters into a keyboard, they’re not a big deal. So act rationally, try to understand the problem, and work to fix it.
As human beings, we’re wired to react emotionally when failure happens. But feeling emotional about error messages will only cause you more stress. Know that seeing error messages and problems when learning to code is normal. In reality, the only skill you need to obtain as a developer is the ability to see error messages and figure out how to solve the problem that you diagnose.
You’re not dumb because your code doesn’t work. Your code is simply a sequence of instructions that are processed by a machine in a specific way. If problems exist in your code, the machine will simply tell you that the error happened in a matter of fact way. This is not an indication of your intelligence, self-worth, ability as a programmer or anything else. It’s just a sign that the commands you’ve written do not work.
You’ll only really master the skill when you accept that error messages are part of the process.
Everyone needs help sometimes. Recently, I felt stuck and frustrated while learning a new technology and had to reach out to my friend, an expert at the technology, to help me out. Marco snapped a photo of my “mentor session”.
My developer friend politely explained why the code I wrote was totally messed up and showed me how to make it better. I learned my lesson and stopped making that type of mistake
My lack of knowledge with this new technology had nothing to do with my abilities as a programmer. Rather, there was just a bit of “stuff” that I didn’t know. By accepting it, asking for help, and wanting to genuinely learn the skill, I was able to move past that original feeling of cluelessness and frustration and ultimately gain a solid grasp on the topic.
The satisfaction you get from overcoming an obstacle always makes up for a small temporary setback. Programming’s most important skills is really this: learning how to learn. All the stuff – error messages, technologies, etc…- are just the specifics that you need to solve the problem at hand.
Are shoes optional in the Firehose office?
-DB, Tulsa OK.
I’ve only been coding for about a month and I’ve been recommended to speak with a recruiter about a position. What advice do you have? Should I even consider interviewing?
-DB, Tulsa OK.
In the process make sure to be completely honest and up-front about your skill level. If you’ve only been coding around a month, you don’t want to paint unrealistic expectations of your coding abilities.
Feel free to pursue the specific opportunity, but I’d focus on building the relationship with the recruiter and focus on the long-term potential of the relationship. Overall, there isn’t not a quick-fix or a silver bullet to quickly learn skills to interview well. It takes a long-term, put-in-the-work mentality to make sure that you crush it.
Don’t be afraid to say “I don’t know.” Just make sure that you follow up with how you would go about figuring out the answer.
What are the pros and cons of running one’s own web servers as opposed to using heroku?
-YY Saint Paul, Minnesota
Heroku is a great platform to use to quickly get an application live and share the URL with users for immediate feedback. But as you scale up, heroku definitely gets a bit pricey.
Heroku has a concept of a “dyno”, which is an abstract computing unit. As soon as you need more, each additional unit costs $30/month. These costs can add up quickly. A service like DigitalOcean has costs that are much cheaper. Their starter servers are as cheap as $5/month, and $30/month can get you a much more powerful machine.
If you set up your own server, you have 100% control of what goes on it. You can install different services, instead of just what heroku suggests. For example, rather than using PostgreSQL for a database, you can use something like MySQL, redis, or even other services like RabbitMQ, MemcacheD, etc.
However, the beauty of heroku is that you don’t need to worry about all that stuff. Having control means making a lot more decisions. That’s the trade-off of working with an out-of-the-box system vs. one that allows you to customize everything.
In general, I’d suggest starting with heroku. The only reason to move away from it is if it’s becoming too expensive or isn’t flexible enough to meet your needs. The free tier of heroku will take you very far.
Is it better to start applying for jobs right away or should I finish my side projects first?
-YY, Saint Paul, Minnesota
Working on a side project, that you’re genuinely passionate about is something that will separate you from other candidates. If you’re excited about the project you’re working on, your passion will shine through. Projects rarely are complete, there’s always additional features, ideas for changes, etc.
I do suggest finding and starting a project you want to work on, but I wouldn’t worry about having it totally finished and ready to showcase. Rather, use it as a conversation piece in the interview.
I generally advise people to start applying to jobs sooner, rather than later. The interview process, like coding, is something that is best learned by doing. Treat your first couple of interviews as learning opportunities.
How do I separate myself apart from someone with a fresh Computer Science degree? Or at least close the gap?
-YY, Saint Paul, Minnesota
Focus on getting experience working for someone else. In most companies, having relevant work experience and getting paid to write code 40-hours a week is what is most in demand. Taking opportunities, like internships where you get paid from $12-$30/hour, will separate you from other candidates.
If that isn’t a viable option for you, focus on building a project you’re genuinely excited about. If you’re building a project that is something you deeply care about, you’ll likely encounter obstacles and solve them in the process.
I’m considering a position that is looking for someone with 0-1 years of experience to own the entire design and feel of the product and also build features on the application. What are your thoughts?
-JZ, Chicago Illinois
It’s unusual to hire a single person to both own the design of a product and also do development. In general, most companies will want someone who is “best” at both.
Having design skills as a developer definitely makes you more attractive to employers, but I’d be interested in learning more about the long-term nature of the position and the company’s plans. I’d expect that down the line someone with more design experience would be slotted over you.
This would actually be a really good thing. Getting a chance to own an aspect of the company, then later getting mentorship from someone more experienced than you, could be really good for both parties.
Ask about their plan for this role is in the long-term and if you’d be involved in the hiring decision. If you’re going to be working closely with this person, it would probably be in your best interest to be involved in the interview process.
I have an interview at a company that uses PHP. Does PHP have any benefits over other languages?
-MF, New York City
In general, most programming languages are inspired by other programming languages. Programming language designers generally try to take multiple parts of the “good ideas” from programming languages and make ideal programming languages from those specific idea.
BlueBones made an interesting graph of the origins of the programming language ideas here. Take a look at this diagram:
You can see that both PHP and Ruby were inspired by the Perl language, but that the ruby language was also influenced by Dylan (which was influenced by LISP programming languages).
Even though both ruby and PHP came out around the same time 1995, PHP was much more performant than ruby and saw a lot of early success. The niceties of the ruby language caused it to be a lot less performant than PHP. Ruby initially had some problems with it’s garbage collector, and servers required ~400 restarts a day to function until Zed Shaw fixed them in 2007 [source].
Ruby and the Rails framework saw quick adoption after fixes to the programming language. Rails was one of the first web frameworks, which streamlined the process for programmers and made it so that they didn’t have to reinvent the wheel all the time.
Frameworks like Laravel are inspired by Rails, but generally companies that run PHP code are using older technologies instead of cutting edge ones. PHP is a very polarizing topic. You’ll find that people either think that it’s a great programming language and the right tool for the job, or that it’s an old, dying language.
Plenty of sites, including Facebook, are built on PHP. So the language isn’t going anywhere.
I have an interview for a company where the compensation listed is very low. How should I proceed? Can I even negotiate given my limited experience?
-MF New York City
You really have two major options you can take in this scenario.
Option #1 – Do the interview without saying anything. Realistically, you won’t be able to negotiate too much past the higher end of the spectrum listed. You might be able to get something like $5,000/year. If you’re the best candidate they interview, they might be willing to do this.
Option #2 – Be upfront about the fact that the salary is on the low side. Saying something polite like:
“I don’t want to waste anyone’s time, but I’m looking for a position to be compensated in the range of $XX,XXX per year. Is this feasible in this role, or is this not the right opportunity for me.”
The first option will be more likely to succeed, but the second option will save you time in the interview process. If you haven’t gone on a lot of technical interviews, I’d suggest going on the interview. The interview itself will be a learning experience and will be a valuable experience for you,even if you don’t intend to accept the offer.
I’m planning to start building a new Ruby on Rails web application and want to know a high-level approach to building it out. Any advice?
Generally, the approach that I take when building out new applications is to first think through the structure of the database. I use a whiteboard and try to think through the deepest level of the database. I figure out what structures need to exist to support the features that the application needs.
Once I think through all of the tables, I try to determine which of the tables is “closest to the center” of the application. By this, I mean try to think about the absolute bare minimum of an MVP of the application, where it provides the bare minimum functionality.
For example, if you think through building a site like Yelp:
Places are absolutely required, so you would generally start by building the functionality to support having an application with places. To start, this could be just a directory listing out the various places in the application.
Later on, I could add comments or reviews. Listing the reviews on the page would be a good next step. From there, I could add email notifications, then work on separate features, like a user dashboard, last.
Try to figure out how your application could provide value as soon as possible. In general, there are always additional features you can add to a site once it’s live.
I’m want to host a web application and I’m aware that Heroku can be expensive at a high scale. Is there a different platform I should investigate for hosting my site?
-PV, Houston Texas
My advice is not to worry about the problem until it happens. When it happens, celebrate, then go heads-down to fix it. What’ you’re actually describing is a premature optimization. I’d suggest spending 100% of your efforts building the product, rather than operations.
Firehose started on heroku, and we later moved to Digital Ocean when heroku was no longer was a good fit.
When scalability issues happen, they usually will impact your database long before you can scale horizontally via heroku / elastic beanstalk. At my first company, I was working on an application receiving around 10,000 form submissions a day and 100% of the performance tuning needed to be done at the database level (and there was actually a lot of that).
It takes a lot of work to get the type of traction that requires you to think through the scalability of the server infrastructure. Instead, you should focus on building a product that your users want, getting user feedback, learning about user acquisition strategies, etc.
Focusing on supporting massive scale often prevents the application from actually solving the problem at hand. It takes a lot of work and iterations before you have a product that people want. So first focus on pleasing your users, then scale later.
Only companies like Google build products that hit scale immediately, and launches of products like Google+, are generally not as positive as other product launches. Instead, focus on launching your application focusing on the Lean Startup principles.
I’d suggest going a different route and setting up the tools on an unmanaged server, so that you understand how everything fits together. You could try a bare Digital Ocean droplet, which will teach you how everything works under the hood.
What technologies is the Firehose platform built on? It renders great on mobile and I’d like to do the same for my project.
-DT Romford, Havering
The Firehose platform was built with the exact same technologies we teach in the course! We use Ruby on Rails as the core server technology. We also use Twitter Bootstrap 3 for our interface.
To make our application look truly correct in all viewport sizes, we use a number of media queries inside our CSS, which allow us to tweak the specific look at every single change.
I’m about to sign an offer letter as a dev for a company that builds a product that helps large companies deal with staffing shortages. They’ve asked me to sign IP and confidentiality documents. Is that normal?
– BO, Melbourne Australia
Congrats on the offer! Keep in mind, I’m not a lawyer, so don’t treat this as legal advice, but rather just my experience as a developer who has worked for a handful of companies.
There are a few forms that companies generally ask people to sign. I’ve generally signed the following contracts and in my opinion they’re pretty normal.
These are a bit of a controversial issue in the industry now, but I have signed these forms in the past. In general these forms are designed to prevent you from working for a company for a period of time, getting insider information and then joining a direct competitor and using your insider information against the company.
While they seem reasonable, a lot of influential people have said that they don’t support them.
These are a few posts, which argue why non-competes are not reasonable.
Many developers at certain companies are actively recruited by other companies. Companies like Facebook have been guilty of targeting employees at Google and poaching them.
Developers also are often friends, so once a developer leaves one company, having them pull along some of their coworkers to a new position is fairly common. Non-competes are designed to prevent these types of behaviors.
Intellectual Property Rights to Your Work.
These documents grant the employer the “property rights” of the code you write. These often work a little differently. Some will be setup to only own code that you’ve written as part of your job.
Other contracts will own ALL CODE you write. Meaning theoretically you could launch a product by yourself over the weekend, and if it’s a big success for a product, it’s owned by the company you work for. In general if a developer did something on their own, outside of work, the company wouldn’t seek to own it, but if it could potentially be a direct competitor to them, they might have the legal authority to take ownership of the project.
These documents have information about your responsibilities, expectations, salary, etc.
Those are the most common documents. I’ve always signed documents without worry about them too much, but signing them does give up certain rights to the company you’re joining. In general, they exist to prevent employees from taking advantage of the company that is paying your salary to do work for them.
I have an in-person interview for a role as a remote developer for a small marketing company. I wanted to pick your brain for a minute about what I should wear, because I tend to obsess over stuff like this.
When it comes to dress code, all companies are a little different. Your best bet is just to ask your contact at the company what you should wear. There’s actually a StackExchange question about how to go about asking the question, since it’s a common question people have.
I’d wear a suit and tie if they indicated it was important. If I wasn’t going to ask the question, I’d probably wear an untucked button-down dress shirt since it’s a happy middle ground. That’s about as dressed up as I get when it’s not required.
What is your opinion of .NET?
-MF, New York City
.NET is the programming framework developed by Microsoft that contains two different programming languages. One is C# and the other is VB.net.
I’ve enjoyed working in C#, but avoided VB.NET (mostly due to unfair comparisons with it and VB6). The programming environment (programs you write code in), of Visual Studio was very nice and robust.
C# is remarkably similar to Java. I had a college professor talk about how C# even copied language problems in Java, like the difference between primitive types and values.
Having said that, I would try to avoid working on Sharepoint applications. I had a job building code in .NET for Sharepoint, and the work wasn’t fun or rewarding.
Someone reached out to me about a position for a company who wants to hire me. But they’re pre-funding and can’t pay, so instead will compensate me in equity. They plan to launch in July, and raise a seed round a month after that, when they have 25k users on the platform. What are your thoughts?
-MF New York City
The earlier you join a company the higher the risk you run, but the bigger potential payoff. An example is the guy who painted a mural for Facebook in the early days for a bit of equity have $400 million dollars when the company IPO’ed.
And that could happen. But it’s very unlikely. If the CEO of the company has raised venture capital before, I’d take it more seriously. Most people don’t realize how difficult it is to raise venture capital money. If this CEO is unwilling to compensate his developers with a paycheck, more than likely this “company” won’t be around in 3 months.
So, I’d suggest not planning on accepting the offer. But… I might suggest going through the interview process anyway. Even if you don’t plan to accept the offer, going on an interview and learning about the interview experience can be valuable. Treat it like a learning experience.
I got an email invitation from AWS Pop-up Loft event in London. I haven’t seen many of the technologies listed in many developer jobs, but I’m curious if they would be helpful in my coding journey or is this more specialist skill set?
– HT London, England
Any opportunity to learn about technology, even if not immediately applicable, could potentially help you down the line. Having said that, the topics listed are pretty specific, like AWS Lambda, Alexa, Kinesis, etc.
I think Redshift in particular might be interesting, but most of the other topics are a bit more specialized and probably not too practical. DevOps in particular is quite interesting, but most people doing DevOps are doing it full-time and do not know how to build applications.
At PayPal, I worked with a particular DevOps guy who knew exactly how to setup complex servers using chef (which uses ruby). But he would often ask me questions about the ruby language. Having said that, he had a ton of insight about how to configure HAProxy, nginx, how firewalls work, how email servers are setup, etc.
So I wouldn’t say that going would be a waste of time. It will make you a more balanced developer and you never know if it ever would become useful. I just wouldn’t expect to learn lot of practical / applicable things there.
Ken, do you miss working for a large company?
-DH, New Britain, Connecticut
Yes and no. At big companies you can skate by and slack off a bit. There was a period of time when I working at a big company when I was a bit checked out, getting everything I was responsible for done, and working much less than 40 hours a week. My boss was happy with the results, and nobody really cared that I was checked out.
However, working at a startup, you have the ability to make an impact and make a big difference. Every day at Firehose, I work incredibly hard, but I also know that the work I’m doing is making a difference and changing how people learn how to code.
Personally being involved in helping change our customers lives and transition careers is something that gives me motivation to get up in the morning. It’s also why I’m willing to put in far more than a typical 40 hours a week.
There are trade-offs for working for big corporations and small start-ups. In my opinion, if part of your identity is your career, working for a start-up makes a lot of sense. If you have a family you need to support and working more than 40 hours a week isn’t viable, I’d suggest working at a bigger company.
What are your suggestions if I want to make my own iOS application and become an iOS developer after graduation?
– BC, San Francisco, CA
If you want to build iOS applications, learning swift is probably the way to go. The programming language swift is remarkably similar to ruby, so you’ll probably be able to pick it up fairly quickly.
So, I’d suggest after you graduate looking into learning swift / iOS. Chris McIntyre used treehouse to learn enough swift to get a job as an iOS dev in about a week, with her ruby background. Having said that, Chris is very smart and most people would probably take several weeks to get there.
Alternatively you could checkout rubymotion, where you can build native applications in ruby, but honestly I’d probably go for building native apps with swift (even though I know ruby) if I wanted to build out iOS apps.
-MF New York City
Most people use the versioning system called SemVer. Basically it’s three digits, separated by periods, like 1.2.3. In general:
- The left-most digit should be incremented for major changes.
- The middle digit should be increased when there are “medium level” changes that happen.
- The right-most digit can be pumped for small patches and bug fixes.
I have an offer for a position where I’d be making a considerable more money than I’m currently making. But there are other positions that seem to be paying more competitively. Should I negotiate it?
If the offer letter explicitly says your title is to be hired as a “Junior Web Developer”, I’d just basically ask for one of two things. In general, if they’re just hiring you as a “developer” it may not matter.
“Thank you so much for extending the offer. I’m excited about getting the opportunity to work with such a cool team on an awesome product. The salary noted seems to be lower than I was expecting. According to GlassDoor, the national average is $60k/year, and the Boston the region generally pays $68k/year for the position.
Would you be willing to increase the salary to somewhere between the national average and the Boston average, to $63k? Alternatively, do you think we could we remove the title “Junior” from my title?
Looking forward to hearing your thoughts. Overall it sounds like an excellent opportunity.”
Getting your foot in the door in the industry can be difficult. If you think the company has a good environment for learning and growing as a developer, that’s way more important to your long-term success. So I wouldn’t feel bad taking that offer, if you think you could live comfortably at that that salary.
If this is going to be a big improvement to the quality of your life, I’d just sign the papers and make it official as soon as possible. You can negotiate a raise later if you want.
I started doing freelance work for my friend and the experience has been frustrating. Do you have any advice?
-AMP, Altus, Oklahoma
The hard part of freelancing isn’t writing the code. It’s making sure that you put yourself in a position where you won’t be taken advantage of. I’ve been burned by freelance work in the past too.
People typically mean well, but most people have no idea how applications are built. One of my friends had the project requirement “I want my site to transcend the web” on the project description.
A lot of people don’t understand the skill set of a developer, and you’re forced to work in the role of the product manager, who builds the wireframes, negotiates the feature set from the client, builds the work and then bills for it. Writing code is generally the easiest part in the whole situation.
If you want to maintain control of the situation, bill for all aspects of your time. Emailing, calls, etc. When you bill for things outside of what people are hiring you for, you’ll generally have people treat your time with the respect it deserves.
I want to do freelancing to gain experience to land a job. What are you thoughts on this?
-AMP, Altus, Oklahoma
For this question, I’ll take a back seat to two awesome pieces of advice that were given to me: one from a Firehose mentor, and one from a Firehose graduate:
“As someone who has been in the hiring seat, I will let you know that a developer with personal projects gets shifted to the top of the stack of resumes. A resume for a freelancers generally get shifted to the bottom.
A personal project shows your ambition outside of money. Yeah, you can explain the site was for free, helping a friend, etc., etc., but you’re better off building something for yourself.
Use your free time for learning, not grinding. There’s plenty of grind in the normal day, n need to subject yourself to it for free.”
“You are better off building your own project. I’m building new things right now, and they have exposed me to technologies I never would have learned from building a project for someone else.”
I’ve been told that I have total free range to pick my work computer and I can spend up to $4,000. I’m thinking I’ll build a desktop that dual boots Windows / Mac OSX and use the remainder to snag a laptop. What are your thoughts?
-DB, Tulsa OK
If you plan to be working at all from home, I’d suggest getting a laptop. I’d go for a MacBook Pro, 13 inch if you want to move it around a lot, 15 if you don’t. I’d also go for an apple cinema display for the office if you can.
In general, you’ll want to not work on “work stuff” on your personal machine. Having one dev machine that you use on rare occasion, is likely going to take a lot of time installing programs, etc.
How did you register your emoji domain? What’s yours again? At work. The bossman wants to know.
-JZ, Chicago Illinois
I own the emoji domain: http://💾🚀.tk That domain happens to be exactly the same as the domain: http://xn--6s8he2a.tk. I registered that domain, and if you type the emoji letters in Safari it will map it (if you type the emoji letters in chrome, it will translate it the text digits I showed you).
Only a few top level domains support emojis in domains and they’re all really sketchy: like tk and sg. You cannot do .com yet, and it’s unlikely you’ll ever be able to. It’s against the official terms of service of the domain consortium.
The domains that do support it told the consortium they didn’t care it was against the terms, they wanted to support it.
Coca Cola had a fun marketing campaign where they registered an emoji domain. It was featured in AdWeek last year.
When working with emojis, it can be incredibly useful to pull up the emoji keyboard. If you’re on a mac, just hold CTRL and Command, then press the spacebar. A full keyboard will come up allowing you to enter any character. If you click emoji in the left pane…
…you’ll see all the emojis. You can then insert them by double clicking into the selected text field.
Now you can show up your friends with aggressive emoji usage like a pro.