Work where you will be the dumbest person in the room.
In order to become great, it will really speed things up if you learn from great people. A great team can be anywhere, startup or large company. But, it is very difficult to estimate the quality of the team just from interviewing - especially as a fresh graduate.
Regrettably, chances are you are more likely to find a great team at companies such as Google than in a startup or a medium sized company. This is simply because startups find it much harder to recruit candidates, especially in early stages. So you are risking less going to Google or Microsoft.
With that said, if you find yourself agile enough to switch jobs quickly if things aren't the way you expected. Or if you have other information (such as friend's recommendation), going the riskier route may be more rewarding.
> Work where you will be the dumbest person in the room.
probably the best advice you could give!
-
my biggest regret from when i started out was not working somewhere were i was the dumbest person in the room. i started somewhere where i was the _only_ person in the room. i basically had to teach myself everything as i went. although there are some pros to this, e.g. i really "learned how to learn", in the end i wish i had been in an environment where i could have been constantly learning from the experience and knowledge of others. the learning curve is _a lot_ less steep in that case.
I think this is true. Unfortunately I haven't been able to find such a team yet. Of course it would be nice to believe, that I'm quite talented. But really, I think, it just shows, that it is very hard, to find a team that is stellar in the things that you find the most interesting.
Or, maybe, I just have a weird taste...
Would be interesting if somebody has been successful in finding such a team for him. Sounds like you, tomerico, found one after you graduated, no?
In big companies, talented people leave programming to do architecture and project lead - you're likely to find these guys in teams that are bound to executives and senior managers.
If you work for a big comp, get a clear idea of what role you want to have: support? IT? development? tech consulting? From there try to find single persons that do well, they probably have interesting connections.
Thanks for the advice! I'm actually a Mechanical Engineer and have mostly worked for R&D so far. Also, me and most people in robotics spend most of their time programing, they are not trained programmers. Unfortunately many use this as an excuse to keep writing crappy code instead of trying to catch up with the state of the art. Heck, right now I'm the only one in my group who uses version control ...
I think maybe most ignorant person in the room would be a better description in most cases.
If you were the dumbest person in the room there would be little chance for you to close the gap. They would be light years ahead and pulling out, instead of you catching up.
My take:
I worked for a startup as one of their two devs/IT guys at the time (2 business partners who definitely I'd say saw everyone else as employees, three-four customer service types). None of us knew a great deal about dev at the time (no version control, no ticket system, live changes in prod etc..), so we hacked by, but it was only once I worked for a much larger company that I learned a lot of important dev stuff (in my case, I wasn't coming from a CS degree; perhaps more appropriately educated types wouldn't have gained so much). Not all startups are equally tech focused / good at that aspect of things (this one was online retail).
But having said that, the learning payoff tails off really quickly - you gain much more in 3 months on role than the next 3 years etc..
I'd say main thing is to try and switch jobs/roles before you're too comfortable.
Also - focus on what you're gaining right from the start. The thrill of actually having money coming into your account sometimes means you can overlook when you're stagnating. You have to lead your own learning at companies - and if you push for it, you can gain a lot. But generally managers have other things to worry about and if you don't, they'll assume you're happy.
I recommend working at a larger company. If you join a startup right after graduation, chances are you're going to have to find out about a lot of real world stuff, best practices, technologies and so on on your own. There's a good chance you'll miss out on a lot of good practices and do things the harder way (or do them the easier way, which will prove bad in the long run). If you join a large company, you get the benefit of being able to draw from experiences of senior developers, and you'll likely get one of them as your mentor.
After a while (and 'a while' may be two years, three, or even more), you'll start feeling that you've learned as much as you can. Then is the time to join a startup (or start your own, if you can).
Working for a company will give you the ability to make contacts and also get mentored from some senior developers. In my first I.T. job I was mentored by a guy who had been writing software for 20 years, and in 3 months with him I gained more skills than I did through education, and also some practical advice that still echos in my mind daily.
Working for an existing startup would be OK too -- though you might not necessarily get the mentor in that case.
I wouldn't recommend you start your own startup though -- because you're still new and the cost of learning would be a cost _you_ would bare ... pick up some real world skills for a year or two, then jump
The one rule I've never broken is this - don't work on bad code.
There's tons of really shitty code in "enterprise software" type places - IBs, banks & such. Its not too hard to get a 6-figure job at these places, but then the real fun begins. If you get assigned to work on a trading system that nobody wants to touch because its super-brittle, you should run for your life; unless
a. you have an immigrant visa issue, or
b. you badly need the money.
Some of my colleagues in IBs fell into both those buckets :(
So they simply stayed put.
Other than IBs, I've also worked at 2 startups - very clean code, and very fun code as well - like a homegrown 3D API in Java to draw & rotate the globe & locate your city on it - way back in 1996, when Java was 1 year old & had no 2D API even! The best even Sun could do at that time was this tumbling duke animation on netscape ( http://bit.ly/jnZFwz), and this startup headed by 2 smart computer graphics experts from MIT rewrote their graphics engine in Java to rotate a whole geographically-accurate globe in netscape!
Nowadays you see a protovis demo ( http://bit.ly/imMuSE ) & think, Hey, I can think of a dozen places where the data could be modelled that way. Why don't they ? Cause they're "Big Companies". So they'll stick to tables with links to more tables that link to even more tables! If you think about it, a portfolio of derivatives who underlying maps to a cross-correlated matrix is essentially a force-directed graph whose vertices are growing & shrinking as they trade throughout the day. If you think the vertex is about to pop, sell it! Instead, "Big Companies" will hire tons of analysts who will simply stare at tabular Excel screens of rows & columns & red/green alert button like you're back in the 1970s. There are startups doing really cool stuff with trading & visualization, but they don't take off - simply because of inertia & retraining of existing traders to stare at graphs instead of tabular rows & columns :)
Maybe 10 years from now...
If you start at a large company with a reputation for only hiring top candidates, you will start your career with a higher salary, a great company on your resume, and experience in how world-class companies do things (both good and bad). These are your journeyman years, and will give you the experience, context, and contacts to be much more effective if and when you do decide to join a startup. It will also make you much more interesting and valuable to a startup (which will equal more equity).
Fine, but it might also hurt your creativity to drink the companies cool aid. Also, think about all the time you gonna waste in meetings. Not to speak of learning and using tools, that you dislike because they suck for you.
I'm graduating in two weeks and I will try to do my own startup. If you're interested in robotics shoot me a message.
Not all large companies feed you kool aid, force you to attend pointless meetings or use shitty tools. And re: tools, this really has little to do with the company size, and sometimes you have to take shortcuts and use inelegant solutions to satisfy the customer - which actually happens a lot in startups. It is true that working for a large company can hurt your creativity, but on the other hand there are classes of problems that can really only be solved at a big co. If you enjoy working on these problems you might not have much of a choice.
When thinking about my career overall, I broke things down into small company/big company and buy side/sell side (or customers and vendors). I think you are likely to get different experience from working at each. This may be less true if you're a pure developer/engineer, but if you want to gain experience of the business side of things as well, it's really useful to know what it feels like to be the person on the other side of the table.
So far I've worked for a small software house (so, sell side) and tried to do a startup. I'm now contracting for a big corporate (buy side). So I guess that's two down, two to go.
I think a great solution is to work for a late-stage startup, or a startup with plenty of funding, or a company that's recently entered its growth phase. You'll have the security and resources of a larger company (and more time out of work to pursue your own projects!), but you'll still be one of the first 5-20 people in the office. The atmosphere will still be very scrappy and creative. And you know your bosses/mentors have a proven track record of success, because the company has already made it pretty far - there will be plenty to learn and absorb.
+1 for this. I work at Heroku and it has really been the best of both worlds getting to have a large impact on meaningful projects and enjoy the perks of a startup combined with the resources of a large company (Salesforce).
The market is so strong for engineers right now that you don't need to choose between decent compensation and startup environment; you can have both.
"The market is so strong for engineers right now that you don't need to choose between decent compensation and startup environment; you can have both."
The best advice I can give is start not at the monoliths that are Google, Microsoft, Amazon, and the others everyone and their mother knows. Start at company that is medium sized, you'll find plenty of real stuff to work on while having the experience of being able to get help from people who have been doing things a lot longer than you.
School doesn't teach you proper engineering practices and learning from the mistakes of companies that have already gone through starting troubles is also beneficial to you in a long term if you want to form your own startup.
Joining an ambitious and brand new project at a large company can offer the best of both worlds. E.g. first generation Xbox, Kindle, Instant Video, etc.
What are you like? Do you enjoy digging really really deep into a problem? Perhaps a big company that provides the stability to work on a problem for years is the right place? Do you like doing lots of different things, none of them deeply, but all of them well, with never enough information to make a solid decision with? Go find a startup. How are you at interacting with people? Extremely outgoing, always meeting new people? Startup all the way. Introverted and terrified of sales? (well, work on that, but a safe place to get better at it is a big company.) No kids, no spouse, no debt? Totally going to help at a startup. There's no right answer to the question, it depends on what's best for you. I've done big company and startup and independent contracting and I don't regret any of them, but I'm also having a fantastic time at my current company. It turns out that for me, at this time, the best answer is a small profitable company with wonderful people where I can make things better with computers. And don't underestimate how important people are. Your coworkers make a huge difference.
What about if you have a lot of student debt? Does that change things?
I have a bunch of student debt and I start paying interest in 6 months. I elected to work at a big company to get out of debt. The benefits and perks are amazing...and the learning opportunity is definitely there. It's turning into a great decision :)
Anyone out there go to a startup while they're in debt?
Big companies are great in a few areas and highly recommend them to anyone graduating.
1. You learn strict business processes that are reproducible and repeatable. They don't teach these in school.
2. You'll be surrounded by senior people who have years of experience. Albeit (in my experience) these people are not very good at what they do, they do offer a good mentor model.
3. You can make an endless amount of mistakes and you won't effect the bottom line of the business.
4. You'll quickly build a network of professionals. This is key. Networking is (almost) everything in business.
Finding small companies that do all of these well do exist but they are hard to find.
I started at a medium size company, went on to a large and am now at a startup. I think it's good to try different environments. Some people prefer the stability of a large company, but it wasn't for me.
I would recommend clearing out student debt before doing a startup full time. One can always work full-time at a big company, and do a startup at the same time on the side
Plain and simple... you can always get a normal job at any time or age, they will be around for awhile. A startup gets harder to do as you get older and family or bills come into play.
I'd tend to say big company. Go to google or microsoft for two to three years. You'll go to a company with strong mentoring to help you dramatically improve your development skills, and you can almost view it as getting a masters in software engineering if you work hard and take advantage of everything the company has to offer. You'll get a great introduction to things like testing in practice, using and configuring linux in practice, developing good taste in software development practices, debugging large systems, what large systems should look like in order to be maintainable, source code control systems, etc. You should also be able to live relatively inexpensively and save a great deal of money.
After your two to three years, go to a startup. You'll get the increased responsibility and have the skills and experience to take advantage of it.
In my view, the problem with going to a startup is they tend to need you to be productive in a real hurry. There won't be much if any mentorship and often you'll be left to work autonomously. Frequently you won't even get reviews or feedback, which isn't as bad as it sounds, because often your boss won't be able to give good feedback anyway -- remember that at a startup your bosses are probably learning as they go just as much as you are. If you haven't developed good taste in software and a sense for how to build big systems -- something virtually no undergrad has, with the exception of people who've done a bunch of open source -- you can get yourself into a pretty bad place. Bright people can often overcome bad software development practices, but only for so long, and when the tech debt hits you it hits hard.
Edit: plus, if you go big company first, you can have little debt and $15k+ in the bank. There's nothing in the world as reassuring as knowing that if shit happens with your paycheck, you have 3-6 months to find a new job and won't have any trouble paying bills meanwhile.
In order to become great, it will really speed things up if you learn from great people. A great team can be anywhere, startup or large company. But, it is very difficult to estimate the quality of the team just from interviewing - especially as a fresh graduate.
Regrettably, chances are you are more likely to find a great team at companies such as Google than in a startup or a medium sized company. This is simply because startups find it much harder to recruit candidates, especially in early stages. So you are risking less going to Google or Microsoft.
With that said, if you find yourself agile enough to switch jobs quickly if things aren't the way you expected. Or if you have other information (such as friend's recommendation), going the riskier route may be more rewarding.