When I was a fresher, my list of dream companies included Sun, Yahoo, Microsoft and so on. I believe these days the list has grown to include companies like Facebook, Google, LinkedIn and Twitter. Of course, I did not make it to any of these from campus. After 11 years into industry, now I wonder if it was indeed sensible to get into any of these from campus.
Quite unarguably, all these big time product organizations provide some of the best perks and facilities. Most of them have good work life balance and very matured employee policies. They boast of some of the excellent technical challenges and coolest products. They have great people - many experienced and matured hands work together on different problems. They are always making news and promise great learning. All this, for sure, makes anyone fall for a job with these giants hoping for a great start to their professional profile.
My observations have been quite different. At the first place, I believe, these people are not tuned to learn by failing fast. And this to me, is a number one factor that kills newbie interest. Let me explain. Assume you are into a new team. You hope people to come to you, explain stuff that they do, assign tasks of reasonable complexity just enough to challenge your intellectual energy however assuring enough that you can complete it and boast of tiny success. This rarely happens. Most experienced heads are by passion diving into complex problems all the time that they are rarely bothered about your motivation or improvement. Of course, they may be available and willing to help to bail you out of trouble; but, then you will have to shout of trouble before you can hope to get their attention. This is always below our dignity and we tend to cover up and manage as long as possible and keep delivering some solution or other and thereby learning by ourselves. What a pity! Best of people around but none are utilised for your very own betterment! Let's say you are part of a web company and when you joined you hoped to learn how it works and be a great web developer in short future. You will be amused that there are departments such as SE (service engg), RE (Release Engg), Product Engineering, Program Management, QA, etc. And being part of just one of these organisations, you are pretty much solving one small problem of a small module that belongs to a bigger system. You pretty much cannot develop and deliver an end to end system! Well, thats not all. You are the last one who gets a chance to comment upon processes. Almost every superstar of the team believes his way is the right way and they will ensure that you are the last one to be asked of any opinion. Neither do you understand why things are structured this way nor are you encouraged to ask. In a small less structured organisation, focus is on developing and delivering an end to end solution. Of course, the lack of maturity of a good product company does put these small startups into trouble every now and then. But these people, who witness the pain, fail fast, learn and recover. When they get old, they know how software systems are engineered and maintained.
If you are fresher, and dream of an excellent software engineering career, you most probably wish to be a great developer. Someone, that this world could trust to develop complex challenging software. If you are one such person like this (like me), then this is what you will need:
Good peer community. Need not be super matured super stars. But, a group of people who are just like you. This should be a group that wants to learn, work hard, experiment and deliver.
* Good mentors. These should be people whose success depends on your success. Typically, in a hierarchical organization, a team lead is only successful when all his subordinates are successful. Hence, they are in a mode of constructive criticism and high quality mentorship/training.
* Strong visibility of end to end process and product development. This is particulary important to get to the bottom of all software engineering issues. You should "own" your product - end to end. You should be able to appreciate the associated pain and should understand why was a process step introduced or removed.
* Good hardware and software resources. This to my knowledge is not a problem with any company. The relative costs are much less to own legal and variety of software. However, I have seen some companies advocating star office instead of microsoft office, for example. Many companies do not have licenses of performance testing tools.
* Domain of your interest. A mobile OS development is greatly different from a banking or online retail solution. Typically, it takes years and lot of luck to experience multiple domains and pick one for future. Hardcore finance giants like goldman are known for very professional etiquette and formal clothing. Non-commerce online companies like Yahoo are known for a casual and fun-loving lifestyle. While mobile companies like Nokia and Samsung worry a lot about their products being protected from public eyes till they are released, there are open source companies who are interested in maximum outreach well before the product is ready for launch. Picking your company is not easy; however, mind you, your lifestyle should match the nature of the organization.
All said and done, for most people, first company is not a company of their choice but the best that they see (from factors such as compensation, location, role, etc) from a small lot that they have access to. It takes several years and several hops to figure out what is right and where to settle. Unfortunately, we are like doctors - we know and like our work but do not know where to practise. Its a clinic round the door sometime or a huge hospital in the heart of the city. It will take a while for us to appreciate the characteristics of our environment. There are many lazy people in us who just believe in retiring from where they joined. They are either too brilliant and adaptive that any environment works for them or they are totally passion-less and ambition-less that environment does not matter. Even if you are not interested in hopping jobs, I am sure you will find it interesting to discuss with your peers and knowing how his company works.