Every time I see an intern or new junior programmer I fight off the urge to give the the advice I wish someone had given me. So rather than sound preachy, I'm going to pretend that I'm from the movie Frequency and give advice to my younger self. In that movie (released in 2000), one of the characters is fore-warned to invest in an oddly named company---Yahoo.
In a similar vein, I would tell my older brother not to just be a designated driver for a fellow student named Sergei, but actually take interest in his research and his novel idea, PageRank. Rather than work for Big Blue, go help Sergei crawl the web, and when I graduate two years later, convince me to do the same. Or have more faith in that Apple recruiting event you went to in 1998. Believe that the network effect of Windows can be shattered.
Those are silly fantasies because hindsight is 20/20. Being in the exact right place at the right time is different than being in the close to right place at the right time. It is hard to predict where lightning strikes. But it is possible to have multiple lightning rods up, rather than insulating yourself from them.
During the last few months of my schooling, life was very exciting. We were in a huge bubble and didn't know it. People were dropping out of school to work for well paying jobs. I even interviewed at a company with the express intent of dropping out with a semester left to work.
During this time a buddy and I had just won the competition for best Senior Project. We had created a colloborative browsing engine, that let you surf the web and chat with your friends in real time about it. And during the day of the show, real VC's actually showed interest our "product". Companies with similar products interviewed us to join their teams, we even pitched VC's (who claimed that our solution being based on MySQL and not Oracle would never work). By having something of value we were in demand.
In the end being disenchanted with VC's we went off to work for companies while intending to moonlight on the project. I went off to work at an "Enterprise" Search company. My buddy was off to Apple. I believe Apple's stock was around $10 at that time. At this point those silly fantasies bother me and I kick myself. They come in and state that some existing companies can be more exciting than startups. I didn't buy it at the time.
Working at a search startup was cool. A lot of my co-workers were PhD types and I loved soaking in their knowledge. Along the way I would slowly learn two axioms of programmers. (Or I should have learned these and wish that someone just sat down and said them):
- Programmers are lazy
- Programmers want control
Of course programmers are lazy, they make computers do their work for them. They also have a tendency to do the least amount of work possible and once they become comfortable in their situation they are like a raft floating down a big river. Occasionally they need to row hard to change their position, but if the river is cooperating they only need little course correction. It can be a nice little rut to be in, especially if lightning struck you and you decided to take interest in Sergei's project or think that Steve Jobs could actually turn around this floundering company. On the other hand, most startups fail, and a rut can be a tractor beam that leads to the Death Star of complacency or job loss.
Programmers, in addition to being lazy, are prideful, arrogant snobs, who love certain tools and programs for no apparent reasons and love to force others to accept these beliefs. Or they are just lazy and go with the flow. They want to control the search space, or re-create a company that had been reduced to nothing by a north eastern monopoly. Programmers want to reinvent the wheel themselves. Part of this is a desire to understand all aspects of a system. Part of it is arrogance. Harnessing Open Source enables you to lazily control the system.
During this time of the heyday of Slashdot, I was installing Gentoo and playing with Python outside of work. I would read about the ongoings of user groups and the cool things they would do with such technologies. Said user groups happened to be in my backyard, but rather than being an active participant, I would just read about their events after the fact. Perhaps this was due to my introverted nature, or perhaps because I'm a lazy programmer.
During this time the bubble collapsed. My company started going through round after round of layoffs. Perhaps because I was a good engineer (but probably more likely because I was cheap relative to all the PhD's), at every round (I believe there were 7 or so), my job ceased to exist. But (due to my mad skills (or my relative cheapness)), a new opening within the company occured with every layoff. And I took them, going down with the sinking ship. I had officially entered the rut.
Had I put in the extra effort to get involved with the local user groups, I'm convinced that I would have not been in this rut for very long. I've seen many people expand their careers via user groups.
So barring wishful thinking about working at a once in a lifetime company, my advice to my past self would be to get involved earlier. If you put forth a little effort getting involved in your community (and networking at the same time) you will have the opportunity to have more control.
My advice? Get yourself out there. Blog, attend gatherings, tweet (when it is invented), contribute back. Sitting around in your rut only insulates you.