Learn two languages

Dear new developer,

Learn two languages.

When you know just one language, you can go a long way, especially if the language is dominant. In web development, that language is javascript. In system programming it’s C. Both of these languages will be around forever, and you’ll always be able to get a job writing them.

You can also know one non dominant language and get pretty far, though if that is your choice, you will probably be happier at a big company with supporting infrastructure. Something like ruby for web development or go or rust for systems programming.

But, knowing just one language is like living in the same town all your life. You can be happy doing that, but just the exposure to life in a different city will shake you and show you that what seemed like a universal truth was actually just an assumption.

I cut my teeth on perl and wrote a lot of it for my first professional job. Then I had to write some java. The first java I wrote was not idiomatic. Rather than use small custom objects, I just leveraged hashmaps and lists for my data structures. I remember one of the other engineers going over some of my code and saying “that looks a lot like perl written in java!”.

Specifically, learning a new language will:

  • let you see the strengths and weaknesses of your first language
  • let you bring concepts from language number two back to your code in language number one
  • make it far easier to learn a third language, should you choose or need to do so
  • make you aware of different approaches to common problems
  • may make it easier to implement certain kinds of problems. In my experience this is often due to open source libraries that may be available for one language that aren’t for another
  • make you less passionate. This may seem like a strange benefit, but learning another way to do things often helps you realize that a programming language is just a tool, and that different tools are of course better for different things.
  • let you build a mental map to apply to the new language based on the old language. “I know that there’s a way to iterate over a list in perl, so there must be a way to do so in java.” This will also help you learn common software terms (like “iterate”) which will help you in your searching.

These truths apply not just to languages, but other pieces of the software development process. Learn two of everything. Databases, frameworks, development methodologies. The increase in perspective and the ability will be worth the extra effort.

Sincerely,

Dan

The right way to ask a question to get an answer

Dear new developer,

I already covered the right way to ask questions, but this post was so good that I wanted to share it. (I found it on hackernews.) Mike Ash gives advice on how to get answers from the internet.

Tips like “explain everything up front”, “post your code” and “follow up after you get an answer” will make it more likely that when you post a question on a forum, you’ll get some kind of help. The whole thing is worth reading, but here’s an excerpt that really resonated for me:

Many conversations I see indicate a subtle, buried belief that the list or chat is some kind of answer machine, and the key to obtaining a good response is to hunt around until the precise required format for the question is found.

It’s not a game, you’re talking to real live people. Treat them just as you would treat people you’re talking to face-to-face, and you’ll get much better results.

I have been one of those newbies under pressure to get something done. I’ve seen comments on github that lead to statements like this. It’s easy to forget that the folks helping you are

a) people

b) not getting paid by you

No matter how obvious the bug seems, or how much it is impacting you, you have to treat people helping you kindly. (You should do that even if you are paying people, by the way. If your boss doesn’t respect you, find a new boss.) Anyone who has run a volunteer organization knows that respecting the volunteers is the first step to getting anything done. Every time you ask a question on an internet forum or mailing list, you are essentially tasking a set of volunteers. Treat them right.

Sincerely,

Dan

Learn about personal finance

Dear new developer,

If you have a job, you’re probably making pretty good money. I know when I started I was making a lot more money than I ever had before (it was $42,000 per year, but this was in 1999). Man, it felt good to just buy what I wanted to buy and not worry about it.

But one thing that I did was set up my 401k and contribute to it. It’s better to save to a 401k from age 25 to 35 than from age 35 to 65, thanks to the magic of compound interest. There’s a whole lot of assumptions, but if you contribute $5000/year for each of those years and the rate of return remains the same (BIG assumption) the person who started saving at 25 will have $60,000 more at age 65. So, take advantage of time and put money away.

I am not a finance professional, but you will be well served by getting smart about personal finance. Books I like:

There’s of course a lot of options to read about personal finance online as well. As a good overview, this post talks about ten personal finance lessons for software developers. My favorite point:

[C]onsciously make choices about where time is spent and one of the best things that’ll help you do that is to have a goal.

Personally, I saved as much as I could when I was a new developer, but you may make a different choice. I have a friend who invested in solar companies because it was in line with his values. I have other colleagues who didn’t start investing until they were in their thirties. There are many paths. All I’m recommending is that you make an informed choice.

Sincerely,

Dan

Letters to a new developer from Joel Spolsky

Dear new developer,

Looks like Joel Spolsky has written a number of blogs posts aimed at new developers. Every post is tagged with the date so you can be aware of any old posts that may have dated advice. But I’ve been following Joel since a colleague emailed the Joel Test around our workplace in 2000 or 2001. He’s founded a couple of great companies (including Stack Overflow) and has lots of great advice, written pithily.

A sample:

Here is why I like duct tape programmers. Sometimes, you’re on a team, and you’re busy banging out the code, and somebody comes up to your desk, coffee mug in hand, and starts rattling on about how if you use multi-threaded COM apartments, your app will be 34% sparklier, and it’s not even that hard, because he’s written a bunch of templates, and all you have to do is multiply-inherit from 17 of his templates, each taking an average of 4 arguments, and you barely even have to write the body of the function. It’s just a gigantic list of multiple-inheritance from different classes and hey, presto, multi-apartment threaded COM. And your eyes are swimming, and you have no friggin’ idea what this frigtard is talking about, but he just won’t go away, and even if he does go away, he’s just going back into his office to write more of his clever classes constructed entirely from multiple inheritance from templates, without a single implementation body at all, and it’s going to crash like crazy and you’re going to get paged at night to come in and try to figure it out because he’ll be at some goddamn “Design Patterns” meetup.

And the duct-tape programmer is not afraid to say, “multiple inheritance sucks. Stop it. Just stop.”

I’d give them all a read.

Sincerely,

Dan

Use LinkedIn, and use it well

Dear new developer,

Set up a LinkedIn profile and keep it up to date. This will serve as a public resume. (Yes, a github is great too, but you might not always have time to keep code up to date or an interest in a maintaining a large project.) Once a year, at a minimum, document what you’ve done in your profile. This is a low effort way to showcase your skills. LinkedIn has a vested interest in being at the top of the search results when people search for your name. And hiring managers will.

Also, used LinkedIn to record connections to people that you meet (at jobs, conferences, meetups or randomly). Folks have different thresholds for connecting (some people connect to anyone, some people want to meet you, some people want to have worked with you). It doesn’t hurt to ask; just don’t be offended if someone says no thanks. My threshold is “have I met you in person or engaged with you online”. This means that my connections are of varying strength–some connections I’d hire (or work for) with no question, others I met once and have never talked to again.

Recruiters on LinkedIn tend to be low value keyword matchers, unfortunately. But you never know, someone might be able to place you. If you do talk to a recruiter, be honest about your desires. Take what they say with a grain of salt, as when they are talking to you, they are trying to make a sale. Also make sure you ask them about their view of the job market, salary ranges for people with your experience, and good skills to gain. If they aren’t willing to share such information, they probably won’t be much good to work with.

As a friend put it, LinkedIn is a rolodex that someone else keeps up to date. This can be helpful when you are looking for a job. Troll your connections’ companies, and then ask if your connection and intro you. A warm intro is far more likely to lead to a conversation and interview than submitting a resume via a website. I offer that up to many people as it’s a low effort way to add value to someone on the job hunt.

Sincerely,

Dan

You can do this.

This is a guest blog post from Kyle Coberly. Enjoy.

Dear new developer,

You can do this. There’s a lifetime of stuff to learn and it will seem intimidating, but if you keep doing it, you’ll get better. Teenagers, career changers, and retirees all have done this, and they weren’t any smarter or more naturally talented than you. You’re in the right place.

Make stuff. It’s easy to get lost in a bunch of theory, especially when it’s dressed up as “the fundamentals.” You can learn theory any time. Seriously. Learn what you need to learn to make something that interests you, and you’ll learn a lot and get enough fuel to get to the next station.

Participate in the software community. Go to meetups, join a community forum or chat group, go to conferences. There’s a lot of people exactly where you are, and a lot of people who were there not so long ago and want to help you get better.

Sincerely,

Kyle Coberly

Kyle Coberly is the executive director of the Develop Denver conference, co-host of the Sprint UX Podcast, and serves as the Technical Lead for Health Scholars. Previously, he was the Faculty Director for Galvanize’s Web Development Immersion program.

Use stackoverflow, and use it well

Dear new developer,

Stackoverflow (SO) is great for three different kinds of developers (and someone can be all three over time):

  • those who are looking for answers, usually via Google (searchers)
  • those who are looking to showcase knowledge, usually by answering questions (answerers), and
  • those who have a specific question to ask (askers)

Every developer can be a searcher (all you need is Google). But you can look for answers poorly or well. Do it well by reading all the answers, understanding the question that shows up in the search results, and voting up both questions and answers. The voting in particular is a low effort way to add value to the entire developer ecosystem (because you are providing value to other searches). I know it is easier to take the first answer and move on with whatever task you are trying to get done, but try to take a bit more time and help others.

But you should strive to be an answerer or an asker. See if you can answer questions or add comments to clarify them or point to other answers. If you have a question that isn’t answered on SO, take the time to build out a solid question. If you end up finding the answer to your question, self answer it to help other folks out.

It is true that SO is not the most welcoming community, but it’s the preeminent question and answer site and so worth having a presence on. Don’t forget, the smallest amount of help you provide to SO may resound for years. I only have ~3k reputation but have reached almost 950k people. And beyond helping others, it’s a great way to demonstrate competence without venturing too far out of your normal workflow.

Sincerely,

Dan Moore