Your general point is right. Ever since I started programming, it always felt like money for free. As long as you have the right mindset and never let yourself get intimidated.
Your solution to FizzBuzz is too complex and uses data structures (“associate whatever with whatever”, then ordered lists) that it could’ve done without. Instead, do this:
for x in range(1, 101):
fizz = (x%3 == 0)
buzz = (x%5 == 0)
if fizz and buzz:
print "FizzBuzz"
elif fizz:
print "Fizz"
elif buzz:
print "Buzz"
else:
print x
This is runnable Python code. (NB: to write code in comments, indent each line by four spaces.) Python a simple language, maybe the best for beginners among all mainstream languages. Download the interpreter and use it to solve some Project Euler problems for finger exercises, because most actual programming tasks are a wee bit harder than FizzBuzz.
The least-effort strategy, and the one I used for my current job, is to talk to recruiting firms. They have access to job openings that are not announced publically, and they have strong financial incentives to get you hired. The usual structure, at least for those I’ve worked with, is that the prospective employee pays nothing, while the employer pays some fraction of a year’s salary for a successful hire, where success is defined by lasting longer than some duration.
(I’ve been involved in hiring at the company I work for, and most of the candidates fail the first interview on a question of comparable difficulty to fizzbuzz. I think the problem is that there are some unteachable intrinsic talents necessary for programming, and many people irrevocably commit to getting comp sci degrees before discovering that they can’t be taught to program.)
I think the problem is that there are some unteachable intrinsic talents necessary for programming, and many people irrevocably commit to getting comp sci degrees before discovering that they can’t be taught to program.
I think there are failure modes from the curiosity-stopping anti-epistemology cluster, that allow you to fail to learn indefinitely, because you don’t recognize what you need to learn, and so never manage to actually learn that. With right approach anyone who is not seriously stupid could be taught (but it might take lots of time and effort, so often not worth it).
Formal credentials certainly help, but I wouldn’t say they’re required, as long as you have something (such as a completed project) to prove you have skills.
My first paying job was webmaster for a Quake clan that was administered by some friends of my parents. I was something like 14 or 15 then, and never stopped working since (I’m 27 now). Many people around me are aware of my skills, so work usually comes to me; I had about 20 employers (taking different positions on the spectrum from client to full-time employer) but I don’t think I ever got hired the “traditional” way with a resume and an interview.
Right now my primary job is a fun project we started some years ago with my classmates from school, and it’s grown quite a bit since then. My immediate boss is a former classmate of mine, and our CEO is the father of another of my classmates; moreover, I’ve known him since I was 12 or so when he went on hiking trips with us. In the past I’ve worked for friends of my parents, friends of my friends, friends of my own, people who rented a room at one of my schools, people who found me on the Internet, people I knew from previous jobs… Basically, if you need something done yesterday and your previous contractor was stupid, contact me and I’ll try to help :-)
ETA: I just noticed that I didn’t answer your last question. Not sure what to recommend to competent programmers because I’ve never needed to ask others for recomendations of this sort (hah, that pattern again). Maybe it’s about networking: back when I had a steady girlfriend, I spent about three years supporting our “family” alone by random freelance work, so naturally I learned to present a good face to people. Maybe it’s about location: Moscow has a chronic shortage of programmers, and I never stop searching for talented junior people myself.
I took an internship after college. Professors can always use (exploit) programming labor. That gives you semi-real experience (might be very real if the professor is good) and allows you to build credibility and confidence.
Python tip: Using “range” creates a big list in memory, which is a waste of space. If you use xrange, you get an iterable object that only uses a single counter variable.
There was a discussion of transitioning to Python 3 on HN a week or two ago; apparently there are going to be a lot of programmers, and even more shops, holding off on transitioning, because it will break too many existing programs. (I haven’t tried Python since version 1, so I don’t know anything about it myself.)
A big problem with transitioning to Python 3 is that there are quite a few third-party libraries that don’t support it (including two I use regularly—SciPy and Pygame). Some bits of the syntax are different, but that shouldn’t be a huge issue except for big codebases, since there’s a script to convert Python 2.6 to 3.0.
I’ve used Python 3 but had to switch back to 2.6 so I could keep using those libraries :P
Your general point is right. Ever since I started programming, it always felt like money for free. As long as you have the right mindset and never let yourself get intimidated.
Your solution to FizzBuzz is too complex and uses data structures (“associate whatever with whatever”, then ordered lists) that it could’ve done without. Instead, do this:
This is runnable Python code. (NB: to write code in comments, indent each line by four spaces.) Python a simple language, maybe the best for beginners among all mainstream languages. Download the interpreter and use it to solve some Project Euler problems for finger exercises, because most actual programming tasks are a wee bit harder than FizzBuzz.
How did you first find work? How do you usually find work, and what would you recommend competent programmers do to get started in a career?
The least-effort strategy, and the one I used for my current job, is to talk to recruiting firms. They have access to job openings that are not announced publically, and they have strong financial incentives to get you hired. The usual structure, at least for those I’ve worked with, is that the prospective employee pays nothing, while the employer pays some fraction of a year’s salary for a successful hire, where success is defined by lasting longer than some duration.
(I’ve been involved in hiring at the company I work for, and most of the candidates fail the first interview on a question of comparable difficulty to fizzbuzz. I think the problem is that there are some unteachable intrinsic talents necessary for programming, and many people irrevocably commit to getting comp sci degrees before discovering that they can’t be taught to program.)
I think there are failure modes from the curiosity-stopping anti-epistemology cluster, that allow you to fail to learn indefinitely, because you don’t recognize what you need to learn, and so never manage to actually learn that. With right approach anyone who is not seriously stupid could be taught (but it might take lots of time and effort, so often not worth it).
Do recruiting firms require that you have formal programming credentials?
Formal credentials certainly help, but I wouldn’t say they’re required, as long as you have something (such as a completed project) to prove you have skills.
My first paying job was webmaster for a Quake clan that was administered by some friends of my parents. I was something like 14 or 15 then, and never stopped working since (I’m 27 now). Many people around me are aware of my skills, so work usually comes to me; I had about 20 employers (taking different positions on the spectrum from client to full-time employer) but I don’t think I ever got hired the “traditional” way with a resume and an interview.
Right now my primary job is a fun project we started some years ago with my classmates from school, and it’s grown quite a bit since then. My immediate boss is a former classmate of mine, and our CEO is the father of another of my classmates; moreover, I’ve known him since I was 12 or so when he went on hiking trips with us. In the past I’ve worked for friends of my parents, friends of my friends, friends of my own, people who rented a room at one of my schools, people who found me on the Internet, people I knew from previous jobs… Basically, if you need something done yesterday and your previous contractor was stupid, contact me and I’ll try to help :-)
ETA: I just noticed that I didn’t answer your last question. Not sure what to recommend to competent programmers because I’ve never needed to ask others for recomendations of this sort (hah, that pattern again). Maybe it’s about networking: back when I had a steady girlfriend, I spent about three years supporting our “family” alone by random freelance work, so naturally I learned to present a good face to people. Maybe it’s about location: Moscow has a chronic shortage of programmers, and I never stop searching for talented junior people myself.
I was very surprised by this until I read the word “Moscow.”
Is it different in the US? I imagined it was even easier to find a job in the Valley than in Moscow.
I was unsurprised by this until I read the word “Moscow”. (Russian programmers & mathematicians seem to always be heading west for jobs.)
I took an internship after college. Professors can always use (exploit) programming labor. That gives you semi-real experience (might be very real if the professor is good) and allows you to build credibility and confidence.
Python tip: Using “range” creates a big list in memory, which is a waste of space. If you use xrange, you get an iterable object that only uses a single counter variable.
Hah. I first wrote the example using xrange, then changed it to range to make it less confusing to someone who doesn’t know Python :-)
Not in python 3 ! range in Python 3 works like xrange in the previous versions (and xrange doesn’t exist any more).
(but the print functions would use a different syntax)
In fact, range in Python 2.5ish and above works the same, which is why they removed xrange in 3.0.
There was a discussion of transitioning to Python 3 on HN a week or two ago; apparently there are going to be a lot of programmers, and even more shops, holding off on transitioning, because it will break too many existing programs. (I haven’t tried Python since version 1, so I don’t know anything about it myself.)
A big problem with transitioning to Python 3 is that there are quite a few third-party libraries that don’t support it (including two I use regularly—SciPy and Pygame). Some bits of the syntax are different, but that shouldn’t be a huge issue except for big codebases, since there’s a script to convert Python 2.6 to 3.0.
I’ve used Python 3 but had to switch back to 2.6 so I could keep using those libraries :P
Cool