Why does it always have to be low-paying? I was hired at a start-up and was paid about 15% higher than any other job I'd seen with my experience and skill-set. The increases were good and the stress wasn't unreasonable. We went from a 5-man team to a 80-person team until the company was sold to one of the biggest companies in the world (after about 5 years). My boss (who'd started the start-up retired a multi-millionaire an 45). I never got rich on it, but none of us employed there were ever paid badly, and he even made sure that we got very good retention bonuses during the buy-out. Perhaps my experience was unusual, but I wonder if more start-ups respected their workers enough to put a higher value on them if their companies wouldn't do better. There were none of us in that company that wouldn't have done anything (legal that is) that our boss asked of us, because he treated us with respect.
Cool article about establishing relationships, but I have a question...
I'm 22 right now and have no family; the idea of having a project that I can completely immerse myself in (the type of things I see being linked on this website almost constantly) is more than enticing. (edit: to clarify, there are projects of my own that I've immersed myself in. The enticing part is being around other people that feel the same way about it. Writing my little news aggregator website on the weekends, or making arduino projects in my kitchen is fun, but it would be great to be doing this [working on projects] full time.)
To those who have had the privilege (and believe me, to the people on the outside looking in, it is a privilege) of working in these types of environments, what is a realistic set of required skills and how did you gain them?
I've been coding in perl and python since I was in about 14 or so and feel like I can accomplish pretty much any task I want in it, but I know that I'm nowhere near good enough to start applying for jobs as a programmer.
To those working in this environment: how did you finally know you were good enough, and how did you get there?
What? You've been programming for 8 years and you think you're not good enough to work as a programmer?
I used to think this way as well. You know what changed? I started doing freelance work and a lot of the first jobs I did was taking over from a crappy programmer. I fixed bugs in their code and had to work with horrible designs.
It's a great confidence boost once you start seeing real code being used and think "I can do this much better."
Freelancing is the bootcamp of software engineering; you will see stuff that will shock you. I have seen everything, from a medical billing package done in Excel, to a DSL in Ocaml for generating apache configuration files for a hosting company.
I'd like to share a little dark secret of the programming profession:
At least 50% of the time, a programmer does not know how to perform a task until the moment they perform it. We approach each task with the confidence of one who has learnt how to do new things each day, who knows how long it takes to learn something completely new.
Since you have tought yourself everything you know, it is clear that you have mastered learning new things. Trust me, you will have no more difficulty learning the things you require in the workplace than you have had learning them at home. As you gain experience, you will get better at estimating how much needs to be learnt and learning it quickly (while staying focused), but learning is always a constant.
The moment you stop learning in your job, that is a sign that you need to build an abstraction layer and put your current knowledge into a library so you can focus on more complex problems.
Believe in yourself. The only difference between you and your enlightened peers is that they have confidence in their ability to learn on demand. You should too, since you have proven it already.
I'd venture to guess that you are already better than most CS graduates. I'd rather hire someone like you, who has hobbies and interests that directly reinforce his job skills, than a a straight A student that thinks programming is just a job.
Whatever remains for you to learn, you'll get it from experience and interactions with other developers, not by sitting on the fence.
I've been coding in perl and python since I was in about 14 or so and feel like I can accomplish pretty much any task I want in it, but I know that I'm nowhere near good enough to start applying for jobs as a programmer.
how did you finally know you were good enough?
I agree with mattm, but want to understand a little bit more about ''why'' you think you are not good enough to start applying, so I and others can comment better on if you have a legitimate concern or if you are underestimating your own abilities.
FWIW, it is a pretty common trend for especially good programmers to underestimate how good they are. Borrowing from pg, to echo my own observations: "I've found that people who are great at something are not so much convinced of their own greatness as mystified at why everyone else seems so incompetent." It's anecdotal, but it is what I've found as well; the people I respect don't project the attitude that I owe them my respect. The more
But I will state a sentiment that hasn't been mentioned on here yet; your first derivative of ability is way more important most of the time. What you need to be able to do is almost never constant, especially at the places this article is discussing. You need to be sufficiently motivated and curious to be continuously finding better ways, better libraries, better frameworks that help you do a good job faster. The best way to develop a good ability differential is to give a damn; it sounds like you are already there.
As far as being objectively good enough, that is an extremely tough call for anyone to make about themselves, because you have biases; if you're really good, you can account some for those, but true objectivity is nigh-impossible. It's even hard for other people to know, for the same reason, and because they have incomplete information.
The way I deal with this is to err on assuming I'm not good enough yet. Not in the sense that I get down on myself, and assume I never can be, but in the sense that I shouldn't try to drown out my curiosity because whatever effort I will expend is futile. If I'm right, then I'll be doing what I need to do to become good enough; if I'm wrong, then I've still learned something, and haven't just settled with good enough being enough. Wherever I am, there is always better, and approaching that regardless of whatever arbitrary finish-line others might lay in my path is way more important to me.
Anyway, enough rambling. :-) Given your thoughts in this post, I'd say you have the right attitude; don't lose that, it's really what will get you the respect and attention of those you respect and look up to.
I graduated with a CS degree from a random not-in-California university.
It depends on the development environment of the company. I did a lot of systems programming and eventually earned the attention of a company that did hire me. They use mostly C++ on Linux for an enterprise application now SaaS situation.
Longer: We just had a good conversation about this at work in anticipation of new hires next year. Here's the thing: we know nothing about your day job aside from what you tell us. But your ability to communicate in code and English is plain to see for your public side projects. And you don't even need to blog about code; you just need to be interesting about whatever it is you're passionate about outside of work.
I am no expert in hiring folks for a startup, I find it hard. But I have personally hired a couple of dozen people in my startup companies (there are some overlaps between them).
The advice given is good, but if you work with software or design, make sure your work is visible. If you only work on stuff that you can't point to which is obviously yours, work one some open source projects. Build some cool Android/iPhone app in your spare time. Do something that makes it obvious that you have passion, that you like working in a small team, that you can be flexible on work on a number of different things, as these things are often key in a startup.
I know it's self-promotion, but it's also a service for everyone who wants to join a startup at the earliest stage possible. An experience that I highly recommend (it will change your life).
As someone reading resumes a lot these days, I'd say there isn't a magic formula. If you're local, you've made something cool in the past and know how to write well (in English, not just code), you'll have a much better chance than most of the people who apply.
This is exactly the reasons why I was offered a job at a local startup. I did a presentation at a local open source mini conference on some software I've been working on. Since then they have been tracking my commits, comments & how I interacted with others online. One month later I'm working for them. It's not just code, but how well you communicate with others that matters to startups.