The city you live in may have more impact on you than which particular company you start at.
Banks and consulting companies may pay you more than a company focused on a software product, but the work is generally unsatisfying for software developers. Avoid those, unless high pay is more important to you than happiness. Though if you are choosing between them, banks are better than consulting companies. If you can find a company that has some understanding of how to treat software developers well so that they can do good work, and that makes money by research and developing their software, rather than by something else (eg. mergers and acquisitions to acquire customers) then you’ll likely be happier.
As to topic it depends what you mean by topic. If you mean is it ok to make software that you’re not particularly interested in using yourself, then I’d say the answer is yes. If you mean, you don’t enjoy using the languages and technologies involved in the job, then I’d say the answer is no. For example, if you want to make software for chicken farmers, even though you may not be making software for chicken farmers the rest of your life, using the software language that you like working with, in a company that treats you well, I think that’s ok. The next company you work for may not care how much you know about chicken farming, but may care that you have 3 years of experience using C++ (or whatever language.)
Getting involved in an open source project, or doing side projects, is another way to build up your reputation.
Before taking a job at a company talk to some people who have worked there. If you have connections on Linked In, for example, use them to find someone to talk to. Get a sense of what they like about working there. It’s harder to ask about what they don’t like, since people have to be careful how they answer such questions, although some will be forthcoming.
There are various ethical issues involved in creating software. It is good to be aware of them, and to think about them when considering whether to take a job. Many people around you will not think about them, so it’s up to you to think it through and bring your ethics to your work.
Creating complex software is mostly about people. It’s probably more important to like the people you are working with than to like the project you are working on, though that matters too. There are some work environments that can be toxic...avoid those and/or work to make them less toxic.
In fact, you may want to treat the job search as looking for a person to work with, more than looking for a particular company or task.
Regarding negotiating for a salary, these blog posts made me think.
Also, regarding job interviews, if you’re not used to them you might think that the questions that they ask you are the ones that they want an answer to. Not so! Most job interview questions have some sort of hidden purpose to them. If you take them literally, you might miss the point.
For example, “Why should you get the job, instead of another candidate?” means something more like “Tell me something that I can tell my boss to cover my ass about why I gave you the job.” “Tell me how you see yourself in 5 years” has multiple purposes. Read up on interview questions and why people ask them and what they are actually asking.
You might know this already, but iterative design is better than the waterfall method of software development, since it allows people to catch problems early in the design stages. Nevertheless, many companies still use the waterfall method, or pay lip service to “agile” but don’t actually do it well.
Writing software for nuclear reactors or medical devices is qualitatively different than writing software for lower stakes purposes that can have more bugs in the software.
I probably have more advice, if you have more specific questions. It’s hard to know what to tell you, since I don’t know much about what your concerns are, or where you’re starting from.
The city you work in affects the salary pool that companies compete against with their offers. San Francisco, New York, and Seattle are much higher paid than other cities, and the USA is much higher paid than any other country. Big companies also pay more.
Lastly, apply to many companies simultaneously. If you have 2 or more offers, you can negotiate by telling each company “match or beat the other company”. This can lead to enormous increases in compensation. E.g.:
http://haseebq.com/farewell-app-academy-hello-airbnb-part-ii/
The city you live in may have more impact on you than which particular company you start at.
Banks and consulting companies may pay you more than a company focused on a software product, but the work is generally unsatisfying for software developers. Avoid those, unless high pay is more important to you than happiness. Though if you are choosing between them, banks are better than consulting companies. If you can find a company that has some understanding of how to treat software developers well so that they can do good work, and that makes money by research and developing their software, rather than by something else (eg. mergers and acquisitions to acquire customers) then you’ll likely be happier.
As to topic it depends what you mean by topic. If you mean is it ok to make software that you’re not particularly interested in using yourself, then I’d say the answer is yes. If you mean, you don’t enjoy using the languages and technologies involved in the job, then I’d say the answer is no. For example, if you want to make software for chicken farmers, even though you may not be making software for chicken farmers the rest of your life, using the software language that you like working with, in a company that treats you well, I think that’s ok. The next company you work for may not care how much you know about chicken farming, but may care that you have 3 years of experience using C++ (or whatever language.)
Getting involved in an open source project, or doing side projects, is another way to build up your reputation.
Before taking a job at a company talk to some people who have worked there. If you have connections on Linked In, for example, use them to find someone to talk to. Get a sense of what they like about working there. It’s harder to ask about what they don’t like, since people have to be careful how they answer such questions, although some will be forthcoming.
There are various ethical issues involved in creating software. It is good to be aware of them, and to think about them when considering whether to take a job. Many people around you will not think about them, so it’s up to you to think it through and bring your ethics to your work.
Creating complex software is mostly about people. It’s probably more important to like the people you are working with than to like the project you are working on, though that matters too. There are some work environments that can be toxic...avoid those and/or work to make them less toxic.
In fact, you may want to treat the job search as looking for a person to work with, more than looking for a particular company or task.
Regarding negotiating for a salary, these blog posts made me think.
Patrick McKenzie, a person who runs a software company in Japan, has written about salary negotiations in this blog post. http://www.kalzumeus.com/2012/01/23/salary-negotiation/
Mark Suster who has been both an entrepreneur and a venture capitalist, has written several posts abount negotiation. There’s a list of them here. http://www.bothsidesofthetable.com/negotiations/
The one that stuck in my mind the most was the post titled “Never negotiate piecemeal” http://www.bothsidesofthetable.com/2012/03/10/never-negotiate-piecemeal-heres-why/
Also, regarding job interviews, if you’re not used to them you might think that the questions that they ask you are the ones that they want an answer to. Not so! Most job interview questions have some sort of hidden purpose to them. If you take them literally, you might miss the point.
For example, “Why should you get the job, instead of another candidate?” means something more like “Tell me something that I can tell my boss to cover my ass about why I gave you the job.” “Tell me how you see yourself in 5 years” has multiple purposes. Read up on interview questions and why people ask them and what they are actually asking.
You might know this already, but iterative design is better than the waterfall method of software development, since it allows people to catch problems early in the design stages. Nevertheless, many companies still use the waterfall method, or pay lip service to “agile” but don’t actually do it well.
Writing software for nuclear reactors or medical devices is qualitatively different than writing software for lower stakes purposes that can have more bugs in the software.
I probably have more advice, if you have more specific questions. It’s hard to know what to tell you, since I don’t know much about what your concerns are, or where you’re starting from.
Strangeattractor has made many excellent points here. Let me add a bit:
StackOverflow has the most detailed data I’ve seen on features that make software jobs satisfying: http://stackoverflow.com/research/developer-survey-2016#work
The city you work in affects the salary pool that companies compete against with their offers. San Francisco, New York, and Seattle are much higher paid than other cities, and the USA is much higher paid than any other country. Big companies also pay more.
Lastly, apply to many companies simultaneously. If you have 2 or more offers, you can negotiate by telling each company “match or beat the other company”. This can lead to enormous increases in compensation. E.g.: http://haseebq.com/farewell-app-academy-hello-airbnb-part-ii/