I got out of school about a year ago, and have been freelancing since then. Sometimes it seems like it would be a good idea to work for a company for a few years, to learn from people with more experience than I have. But on the other hand, working for myself has let me pursue projects/technologies that I'm interested in learning about, and I'm hesitant to give that up. Any advice?
In freelancing, your business value is given by seeing and solving problems, often in direct interaction with your customer. One of the hardest parts is actually discovering what your customers wants. Think of it as being a medical doctor, who has to find out about his patient's pain and develop a therapy
In a company, business value is often created by coordination of tasks with others. This requires a rather high amount of discussions and meetings. On the other hand, you might have more access to resources (equipment, knowledge, ... ) to tackle a problem. Think of it as being part of a bank that earns interests on generated knowledge.
Do both. I always have. They don't have to be mutually exclusive.
Working for a company will teach you things like:
- Deciphering and improving legacy code that is not your own.
- Meeting deadlines
- Making do with technologies and tools that others have selected for you.
Working freelance jobs will let you explore whatever interests you at any given moment. You're more likely to be able to play with cutting-edge technologies, and you can choose your favorite tools.
You learn the same amount - just a different set of skills.
Just like everything else, practice makes perfect. The skills required - and acquired - are vastly different from freelance work and working with others. Working in a team for X years will deeply expose you to the game of politics and general team rapport. Whereas, freelance work for X years will make you extremely sufficient at self-learning and appreciate of your flexible schedule. If you're really sitting on the fence, go and try both. Otherwise, delve (further) into what you're leaning towards and prepare yourself for the future.
I prefer the face-to-face interaction with people on a regular basis. Something that stuck from school was a teacher once said: here at school, you learn 20% from me and 80% from your classmates. I'm sure there's no evidence to back the numbers up, but I like it.
I'd say work for a company for a good few years, but be careful to choose a place that stresses team interaction and has strong senior developers with plenty of 'in the trenches' experience - this is vital to your success and it's hard to get when you're on your own. After that, do 'whatever floats your boat'.
Adding on - Working in an organization taught me to be a team player and things to look out for. In a real world, projects are equally driven by political decisions as they are by business needs.
You may also get exposure to working with external organizations (especially when you are in a consulting firm).
Most freelance assignments are solo projects. Contracting can give opportunity for team work. Working at a company gives team work opportunities.
What you learn in these two setups is going to be different. Which of these you learn more and which you learn less is what you will become in future.
My opinion is, there might be more opportunities to work on big projects (liken them to skyscrapers, cities, etc) when working at a company, in a team. And, there might be more opportunities to write cleverest code that you enjoy most, but could only handle projects of some size (which, in my opinion, can at best be of medium size and complexity) after which you would need to work in a team.
Find a place where you can surround yourself with mentors, strong senior people, and innovative thinkers. Make sure you're in an environment that is challenging. You can find these things in a company, or as a freelance, but as a freelance contractor, you're more at the whim of the contracts you get.
If you can, try and find a consulting company. There you can find the best of both worlds. You'll get diverse projects, technologies, but usually you'll have a great support network and you'll be surrounded by other senior consultants. And you'll also learn a lot of soft skills that will help you with the non-technical aspects of your job.
As often happens with these types of questions, the answer is somewhere in between - it depends!
There are plenty of great companies to work for, who'll give you all the learning opportunities you could wish for.
There are other companies that will suck the life out of you on some god awful project on outdated technologies.
A job interview will not often reveal the truth on what a company is really like.
Even in the really great companies you might find yourself constrained under a crappy group/division/manager.
For me, finding a great company to work for (however you define great, and whether you find out the truth) for a few years would be a great start. You can always freelance again later.