I seem to have picked up a fair number of Twitter followers lately who are just getting started in software development. Perhaps I've been in this game long enough to offer some advice. Here are some things I think are worth sharing with folks who are new in their software careers:

This stuff is hard. Nobody gets it right the first time. You're creating things by just pulling them out of thin air, mental effort, and sheer cussedness. If that takes you a while, that's OK. Even people who've been writing code for years and years still look stuff up all the time. Without search engines, I'd barely be able to add two and two together, let alone write code.

There are a lot of companies looking for software developers right now. There are also a lot of software developers looking for jobs. It can take a while to find your match. Don't get discouraged! No matter how experienced you are, it takes time. I've been in this business essentially forever, and over my last two job searches my personal pipeline looked like this: 75 applications 38 responses (Yes, half couldn’t even be arsed to set up an email autoresponder) 14 interviews 5 offers

No matter how new you are in the field, there is absolutely no excuse for a potential employer to treat you badly. Keep in mind that they way they act during the interview tells you something about the work environment, and you're interviewing them as much as they're interviewing you. Tip: Keep records of your job search, even after you land a job. You’ll want to refresh your memory next time you’re on the market, because some of the same people will still be hiring. And you’ll want to remember which ones were jerks last time so you don’t waste time on them.

Many interviewers in this industry are untrained in interviewing, and there's all too much "I suffered so you should too" attitude out there among some developers. You probably will hit a bad interview at some point. If it's bad enough (overt harassment, questions about your personal life, trick questions...) you can just thank the interviewer for their time and end the call. Then email their HR department and calmly explain why you left, and how the company's poor interviewing processes are hurting their chances to hire from a large applicant pool. You probably can't afford to publicly shame them, unfortunately - that's both legally fraught and likely to hurt your chances at other jobs, even with more enlightened companies.

By the same token, if you have a great interview experience, encourage it! Post a good review of the company's process to Glassdoor, and email your interviewer to thank them (this is good practice even if you're sure you won't get the job). As an interviewer, I always appreciate getting a thank-you email too. Bonus points if it shows additional thought with follow-up questions or ideas.

Job listings routinely lie about what's "required" because the people writing them don't know what the job really requires. Rule of thumb: if you hit 75% of the bullet points, go ahead and put a resume in. The worst that can happen is they'll tell you you're not a good fit. But be honest about what you really know!

As a hiring manager, there are things I look for besides code trivia. I care a lot more about whether you can reason through a problem and communicate then whether you know the syntax of a React component without looking it up.

An online presence helps. Put your sample projects on GitHub, just to start getting something out there. Start blogging as soon as you know anything. Even if yours is the 100th explanation of a particular API, the fact that you bothered to write it up shows that you can communicate, and sets you apart from the pack. Tweet links to your blog posts. Someone will amplify one, and you'll start building up a network.

Figure out what type of code you like to write, and write more of it. "Full-stack developer" is increasingly a myth.

Figuring out things on your own is good, but it's OK to ask for help. This applies on the job as well as when you're learning before your first job. But do figure things out! Progamming knowledge tends to build on what went on before. Take a walk, ask on Twitter, read some blog entries...but try not to move past things until you've got some idea what's going on.

There is plenty of software life outside of the Silicon Valley bro culture. Nobody has the right to ask you to work 100 hours a week, go out drinking to be "part of the team," or belittle you for being less experienced or somebody who doesn't look just like the founders. Don't work for people who act that way, and if you end up accidentally working for one of them, quit. It won't hurt your prospects for the next job.

Any honest developer is still learning. Any developer who tells you they know exactly how you should tackle every problem is lying. If they don't know they're lying, that's even worse.

In a collaborative environment, knowing how to write the code is only part of the job. You also need to learn how your team handles things like source code management, automated testing, deployments, downtime and incidents, feature and bug tracking, planning, and a host of other things. Be prepared for a huge rush of information your first few weeks. Almost everyone feels lost when getting started with a new job. Don't worry, it will pass. Tip: Spend part of your time revising the onboarding document that you're given, because most of the time some part of it will be outdated. The _next_ person to get hired will thank you.

Think about remote work, because being willing to work remotely will vastly increase the number of potentially available positions. Take any chance you get to collaborate remotely when you're learning, whether this is contributing to an open source project or pair programming over the internet with a mentor. But also: think about how you will handle remote work psychologically. Are you able to focus all by yourself all day every day? Do you need to explore coffee shops and co-working spaces? Are you a person who will only thrive in an office?

It's OK to compromise when you need to. From a position of privilege, it's easy for people to say things like "never work for a company that has a poor interview process." But life looks different when you are down to your last half jar of peanut butter with no money in the bank. If you need to make compromises, try to know that you're doing so, and have a plan for improving things when you can.

Your career doesn't need to look exactly like mine, or anyone else's. It's easy to give advice, but you don't have to take all the advice you get.