On the contrary, experienced engineers are the ones most likely to be comfortable with a non-exciting big company that provides solid benefits, a reasonable working schedule, and mature, well-considered engineering practices.

Our own company isn't large, but we're rather traditional. We're not hackers, we believe in technical correctness, test-driven development and choosing the best tool for the problem at hand. This means that we generally write mobile software in the target platform language, server software in JVM languages, and on the occasions where we get to work on hardware and OS development, C and assembly.

The work approach is not laden with technical culture and "fun", unless you find solid engineering to be fun (personally, I do).

However, we've had great success in hiring genuinely senior engineers with at least a decade of experience each. We experimented early on with hiring junior engineers, but found that the overhead of dealing with untrained engineers was exceptionally high -- something that models my experience elsewhere, at larger companies.

With the caveat that these are generalizations, I've found that the cost to hiring junior engineers is expressed in obvious and (perhaps) non-obvious ways. There are the obvious costs of the training and mentoring required, along-side lower productivity, and a lesser ability to estimate complexity and time to completion. There are also more abstract costs, such as technical and design debt that junior engineers are much more likely to incur simply due to a lack of experience. There are also cultural costs -- if you hire too many junior engineers, you'll create a technical culture and working experience that drives senior candidates away, amplifying the costs I've listed above.

Of course, I readily admit that someone must hire untrained junior engineers, and I realize the implicit unfairness of hiring standards that would exclude myself were it 15 years ago. However, there are companies other than our own that are willing to bear these costs in exchange for being able to recruit at the scale they require -- we're just not one of them, and I think our reasoning is sound.

That said, there are some things a junior engineer can do to make themselves less junior, (possibly before even entering the labor market):

- Get experience (class projects don't count). A great way to do this is by contributing to OSS, especially projects that demand high-technical competence (eg, contribute to the ruby interpreter or MacRuby, not just high-level Ruby on Rails). Senior engineers have past experience to draw on when implementing software projects; this allows them to design not just for the immediate requirements, but with an understanding of how the requirements, maintenance costs, and performance will evolve over time.

- Study practical implementation topics (... and then get experience implementing them). A lot of the value of a senior engineer is in their broad understanding of the practical topics of the field. Coming out of a CS program, you should hopefully have a firm grasp of the fundamentals of CS, but what many candidates are missing is a firm understanding of applied programming. Some off the cuff general book suggestions: UNIX Network Programming, Application Programming in a UNIX Environment, Mac OS X Internals, Applied Cryptography, The Design and Implementation of The FreeBSD Operating System, Database in Depth. This list is probably incomplete :)

- Don't settle for just an internship. Internships at big companies (Apple, Google, Microsoft) serve as a relatively cheap first-pass filter on college candidates for hiring. Of a given pool of software interns at a company like Apple, it's unlikely that more than a 10% of them will be hirable material, and of those 10, maybe 2-3 will actually get jobs. Other companies may hire a larger percentage (I don't have any experience there). If you want to work for Apple, Microsoft, or Google (or think you might), then don't sit on your laurels if you get an internship there. Pick a real, practical problem that, and work on it, hard, leveraging your access to senior engineers for advice and guidance as much as possible. If you just coast through the internship, you probably won't receive an offer. I think some students look at internships at the big companies as prestigious. However, they may be viewed as the opposite -- an internship at one (or more) of those companies without being hired is a red flag for me, since I'm wondering why you didn't get an offer.