JoachimSchipper comments on Saving for the long term - Less Wrong
You are viewing a comment permalink. View the original post to see all comments and the full post content.
You are viewing a comment permalink. View the original post to see all comments and the full post content.
Comments (38)
Getting some experience and developing your skills before you start your first startup seems like a good idea.
How difficult it will be in practice, that will depend on your savings, on a support you can receive from e.g. your family, whether you will be able to make more money than you need to survive so you can save some, and whether you will be able to learn new things in your free time.
In my experience, it works like this: When you get a new job, at the beginning you learn a lot. After a few months it gets repetitive, and after a year you mostly do the old stuff over and over again. You probably get more work, but it is the same type of work. Only rarely (in my experience) is there an opportunity to move within the company. If there is a new project, the company will usually hire new people for the new project, and you stay with the stuff you were hired for. It may gradually become more easy, but you will not progress. (If you are strategic, it may be good to keep doing the easy work for the safe income, and learn new stuff in your free time. Or maybe even during your work time, if no one is watching you.)
After more years, you will become responsible for maintenance of all systems you have ever touched while working in the company. You will have to remember thousand little details about these systems, which is mostly an untransferable knowledge that has zero value outside of the current job. Just because you have more work now, it does not mean that your salary will necessarily increase. When you are at such dead end, if you want to optimize for skills, you should change jobs.
(Meanwhile, there are new younger programmers coming from universities. All the new stuff that you would like to know but have no time to learn, they have learned at school.)
Here comes the question of risk aversion, and how good is your safety net; how much would you lose if you quit this job, but can't find a new one soon enough. In theory, you should find the new job first, then quit the old one. In practice, it may be difficult to do job interviews, to prepare for them, and to study new technologies, while having a full-time job. Also, the new job may fail for unpredictable reasons, or may turn out to be very different from what they told you at the interview.
Poor people can easily get stuck at a job they hate, that is exhausting and pays relatively little. Because of the small pay, they do not have safety net. Because the job takes all their energy, they do not have the energy and time to learn new stuff and do job interviews. If the job requires them to learn stuff that has zero market value, the longer they stay, the harder it will be for them to get another job. -- In theory, programmers should not be that poor. In practice, sometimes your expenses grow faster than your income; e.g. at the moment you move away from your parents. (Or when you want to start a family, and suddenly there are three people supposed to live from one income for a few months; and later it becomes one and half person per income.) Or some unexpected expense happens.
The work that is available right now may not require the skill you want to develop now. Maybe you choose an exotic skill that no one needs. Maybe all companies that need people with some skill insist on employing only people who already have a few years of experience with that skill. Some skills you may have to develop at your free time, at least to the level where you are able to make a working prototype.
Here is some advice, but it may strongly depend on specific country and area of specialization:
After a year, unless you are still learning something new (something that has a value outside your current company), quit the job. Or maybe, right before you quit, ask the company whether you could become a lead developer of at least a small team: that would look impressive on your CV, and would teach you skills you will later need for your startup.
Try to keep a safety net; enough money to survive for six months, preferably a year. Then you will have more freedom changing jobs. When doing something expensive, such as buying a new appartment or starting a family, try to arrange it so that some financial reserve remains, instead of spending all you currently have. Always imagine that tomorrow your job could become insufferable, and you would have to leave to preserve your sanity.
Avoid overtime. Your sleep and free time are critical for your health and professional development. Spend some free time learning new stuff. Learning something new at home, making a prototype and bringing it to the interview, may allow you to get a job with a new technology that wasn't available to you at university and at previous jobs. Spend some free time with your friends, meeting new people, networking. Networking is great for getting new ideas, motivation, and even good jobs.
Although I've heard the advice to leave after a year, my experience has been different - after three years, I'm still learning a lot and I'm beginning to tackle the really hard problems. Basically, I find myself agreeing with Yossi Kreinin's reply to Patrick McKenzie's advice, at least so far. (Both links are very much worth reading.)
Of course, you do need to push for interesting assignments and space to learn. Also, be sure to pick a company that actually does something interesting in the first place - I work on embedded crypto devices for the government market, in a company that's young enough that there's still plenty of flexibility.
I was thinking about the programmers unable to do the FizzBuzz test, and the interesting insight that Eliezer linked long ago -- that maybe it's not so many programmers who are extremely stupid; maybe it's just the fact that the non-extremely-stupid ones sooner or later get a job, while the extremely stupid ones remain in circulation for a long time, thus more recruiters have the misfortune of meeting them.
Maybe it also works the other way round. When a great IT company is hiring, the employees are happy to tell their friends, so the positions are filled quickly. When a crappy IT company is hiring, it takes them much longer to find someone, and meanwhile other programmers are quitting, so they have to keep hiring to replace their positions. Which means: if you apply for a random IT company that is hiring at the moment, you are not going to see an average company; you are most likely to see a crappy one. Of course, you can be lucky. But most people are not.
In a good company you can keep learning even after the one year. But those are rare.
A higher-level advice is to be strategic and find the good company. For this you want to maintain many contacts with programmers who share your values (who recognize the type of job you would like to have). But how do you get these contacts? Keep in touch with your university classmates (I failed to do this, because at university I had no idea how much will I care about this one day), or take a few crappy jobs and keep in touch with the former colleagues (who may change their jobs later and find something better). Alternatively, do something to become famous (e.g. contribute to open-source software, or write a popular programming blog) and then the people will contact you.