My advice to any to young person is to judge the job by the quality of the mentor. Smart people feel ecstasy when learning new things, and if you have anxiety about your job, then you are likely in the wrong position.
The other end of the spectrum is, you could contract someone like Tony Morris[1] at $250 an hour for 20 hours a week, and he will build your product faster than a team of untrained engineers, or more likely, build a product that untrained engineers aren't capable of building, with a defect rate close to zero.
Not every strategy is right for every business, but generally, the harder the technical challenges, the more cost effective it is to pay for a superstar.
That would certainly seem feasible if you interview for personality traits, interests and learning skills, more than actual/concrete knowledge and working skills. And of course, this would be a lot more cost-effective as well. In that case, I would say that the key would lie in paying more attention to human psychology/intelligence research than to tech blogs/circles to find out more about 'superstars'.
Judging from ability and personality, it was clear at that point that I had potential. And I received some excellent mentoring. But potential and mentoring do not ensure a smooth path to success.
Because after all, there is nothing preventing people selected for personality traits to reach these same epiphanies that 'experienced' people have (regardless of mentorship), it's just a matter of whether or not you as an employer would be willing to accept this 'risk'. Given the current state of affairs with regards to 'talent', I could see many finding the risk permissible. Not to mention the fact that the set of 'smart people with potential' is not mutually exclusive with the set of 'smart people with experience'; of course, selecting purely from the set of people that meet both criteria would still fall under the realm of chasing unicorns, but the point is that the two are not exclusive.
The trick is, of course, that smart people with both potential and experience tend to be easy to identify..and very expensive.
Every decent programmer has stories of a time they put in 10 hours of work to save a highly paid person 20 hours/month for the rest of time. I say stories because there are many such. On my resume I list a number of cases where I added X millions/year to the bottom line of small-medium companies. It is not a complete list. What value should an efficient market put on a programmer who does that repeatedly?
For those willing to work as an employee in the Los Angeles area, the value the market places is significantly under $200k/year. Now you tell me, is that expensive relative to value?
That's a good chunk of the way we (ThoughtWorks) interview, along with general smarts and good company fit. It's easier to teach a very smart person [language x, skillset y] than it is to teach a random person who knows [language x, skillset y] how to be very smart.
Only if you can retain them, once they get smart and realise how good they are. Gratitude (and staying with the company who invested in you) aren't popular these days.
Yah, that guy. Sure, for $250/hour he's probably fairly amicable.
He's categorically brilliant (in FP implemented Scala, certainly), but good luck grokking his mile long type signatures when he's gone from the project.
Saying that, if part of his consultancy is to train the team in FP and explain his code, then there is "real" value in the hiring; otherwise, where would you know to begin when updating the system down the road?
Most of our defects are not software defects, they are product/marketing/strategy/SEO/SEM defects.
If American Express wants to launch some app with defined features, then Tony sounds like a great guy. We kinda understand our customers, but not really. We throw pasta at the wall and see if it sticks. Once it sticks, I can hire Tony to make it great. Tony will never accept us as a client for good reason.
A product is ultimately a discovery which you have to do in iterations. It won't be until the last iterations you will know what to do. Once things are clear you don't a rock start to get things done, any one can do it now. Rock stars are needed speedup those iterations, do the discovery super fast and get the clarity.
In Haskell he's nobody special; however, in Scala he's known as one of originators of Scalaz, and has made contributions to the development of the Scala language itself. TM is very strong in category theory and has no problem speaking categorically about the correctness of his views.
He's a polarizing figure in the Scala community and seems to enjoy pissing people off (again, the code of conduct banners seen on Scala Google groups can be by and large attributed to TM, which is an accomplishment, thus the infamous claim).
In TM's defense, as a teacher he does force the reader to stretch beyond their current (limited) understanding. If he came across as less of an a$$hole then he'd probably have a larger role in Scala and the programming world as a whole.
Second is the company. You join the right company, and it's a solid growing company, or a rocket ship, you have lots of opportunity to learn and grow. Conversely, if it's a truly awful company known for unethical practices or engineering nightmares, it can end up haunting you, both in teaching you the wrong things and a possible red flag on your resume if you stay too long.
I get high from learning no matter whether the people are assholes or teachers. Most people need good mentors that are not managers. Any organization where managers have time to teach are too hierarchical.
I have personally found that mentors are great for career advice and resolving questions, but never have enough "skin in the game" to invest their time in my development.
What you want is a person that observes your code, behavior, interactions, demeanor, etc., and tells you how to do better. It is impossible to have perfect introspection. You need to find a guide more than the corporate definition of "mentor". People need apprentice masters more than mentors, I wish I had used a better term.
Back when I was a manager, I used to find it somewhat depressing to interview people who had gone to startups or non-tech firms for 5-10 years, reached "senior developer" or "architect" roles, and whose levels of expertise were indistinguishable from the median recent stanford grad. Certainly, they knew more "things" but had failed to grow in either scope or depth.
It's really easy to let career development and general-purpose learning go to slack when you believe this thing you're spending 80 hours per week on is going to make you rich and change the world-- and when you're surrounded by people who (equally irrationally) believe the exact same thing.
The problem there was not having any safeguards against running arbitrary commands and not being able to just rollback from the transaction logs. Seriously, it should be a small annoying incident. Screwed up some data? OK, stop things, restore, rollback to the transaction before you screwed it. Apologize and move on.
Besides, just because you're inexperienced doesn't excuse stupid behavior, and I'm struggling to think of how one might accidentally drop a database after logging into a production environment—I would suspect that people were already lax about it if a Jr Dev was doing it.
Really? He couldn't restore a backup locally and test against that? You guys couldn't roll back via transaction log? Mistakes ALWAYS happen, and it's just unfortunate that the Jr Dev was the first person to get screwed by one.
So if you want to get good, you need to work with people that are better than you, who have already learned from their mistakes so you don't have to. Find the strongest shop that will hire you. It will not be the best shop. It probably won't be an elite startup. But more mature companies can afford to pay for your learning curve. You also will probably make more money, enough to pay off your student debt and save up to bootstrap when you're more experienced.