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.
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.