views:

940

answers:

21

About me: I have a 4-year college degree, but it is in something completely removed from computers. I have been interested in computers and computer programming since I was little. Over the past two years, I taught myself PHP/JavaScript/MySQL/HTML/CSS and wrote a webapp completely by myself without any frameworks or libraries (a decision I would later come to regret). I'm currently working on another webapp which is nearing completion which is in Python (with the help of Django and jQuery).

Also over the past two years I have come to hate my current industry. Its no longer something I'm passionate about. All my passion has been stolen by computer programming. I want to make a career switch to a job as a computer programmer.

The only problem is that while I do know some things about computer programming, I know absolutely nothing about the computer programming industry. Where should I start? Obviously Senior Web Developer is out of the question. Or is it? Do I have to start at telephone tech support or something and work my way up? Does my experience allow me to skip a few steps and get a job that isn't normally a entry level position?

Also, even though I have put together working code and all, how do I know I have what it takes to be a professional coder? I don't want to put myself in a position where I'm over my head. The is the only reason I've avoided rentacoder.com. I'd hate to put someone out because I lead myself on to be a professional level programmer when I'm far from it -- if thats that case, I have no idea.

When I browse this site, I sometimes feel like I'm a complete moron. Of the 50 or so questions on the front page of this site, only maybe 1 or 2 of them I have any idea what they're even talking about. When I first started learning PHP, it was OK I thought to be clueless at this stage. But that was probably 10,000 programming hours ago. I should be better by now, right? I should at least be able to browse this site and come across a single question that I'm capable to answer, right?

Someone wrote a very wisdom-filled answer to a question I read here on this site that read (paraphrased) "it's not fair to compare your knowledge to the collective knowledge of a community", which I believe and understand. But if thats the case, then what is it fair to compare my knowledge to?

A popular thing that gets thrown around here is a Donald Rumsfeld quote about "unknown unknowns". Thats definitely me right now. I have no idea if what I don't know is way too much to be a good programmer, or if I don't know about just as much as most other programmers working in the industry today.

What I want to know, is that if there is some kind of "litmus test" (metaphorical or not) to determine if you're ready to handle a programming job.

When I get my first programmer interview, when the interviewer asks me "what makes you think you have what it takes", what can I do to make it so I can answer him confidently and without having to just make something up?

+10  A: 

When someone pays you to code.

To put it another way, when you code something that someone somewhere is willing to pay for.

Robin Day
+1, when someone pays you and you produced code^^
Makach
It's true... it's also good to know that a "Professional" Programmer doesn't necessarily mean a competent programmer. I got my BS in Computer Info. Systems, but got hired as a developer with pretty near zilch experience. On day three my boss was asking how it felt to be a "Professional Dev".
STW
+1  A: 

I would say that it sounds like you have what it takes to start out. You can write code, so the hard part is convincing someone else. Truthfully, just keep applying until you get a job, and keep learning in the meantime.

There is no litmus test. When you interview with companies, you'll know if you have what it takes, and if they are any good, they'll know too. Just don't get discouraged. That's the hard part.

Kevin
+3  A: 

Computer science is a unique field. You can't practice as a doctor or engineer without a degree from an accredited program, but that's not true of software developers.

I don't have a computer science degree. (3/4 of one, but that's not the same.)

Peter Norvig has some good advice for people in a hurry. All fields take time to master.

Keep plugging.

duffymo
+1 for the immortal Norvig pointer!-)
Alex Martelli
+14  A: 

Given your experience, it actually seems like you would want to look for a job as a Webmaster more than just a general programmer. After all, the languages you listed are all most commonly used for web development.

Websites will always be in demand, especially now, since a business without a web presence will have a hard time thriving. The better part is that Web Development, when done from the bottom up, counts as programming experience with all the languages involved. I'd start there, and learn other things as you go. You may eventually move away from it entirely, but I've found it to be an excellent jumping point so far.

Anyway, on subject, I'd say that you know that you're a professional developer when you can look at the majority of jobs that are handed to you and not have any questions about the code. Or, more accurately, when you have more questions about things the client forgot to specify than you do about things you may not know how to achieve.

Nicholas Flynt
Definitely. When your questions go from "How do I do this" to "What about this".
hmcclungiii
+4  A: 

My advice: just jump in. Being a good programmer is neither a matter solely of formal learning, nor is it a matter solely of experience -- it takes both. If you try to get 100% book learning before you start, you'll never start. On the other hand, if you try to get a job without any study, you won't succeed. It sounds like you've done a good amount of study -- jump in and see how it goes!

William Leara
+3  A: 

Passion is a good start. I never quite understood why people become programmers just to make money when there passion lies in another field. Life is way too short to work your whole life so that you can pursue you passion later. Work your passion now.

Having been a TA in computer science and mentored new programmers, I can also tell you that while passion is great, it is not enough to be a professional programmer. You have to always be willing to learn new technologies, techniques, and practices. Programming is a field where you will want to spend almost as much time in Professional Development as you do in actually coding. Given that you are not academically trained but appear to be self trained, this should not be a problem for you, so just make sure to tell your interviewers how you are always learning and striving to be better.

Brandon Bodnár
+3  A: 

I don't want to put myself in a position where I'm over my head.

You can do that with your own project, if it doesn't matter whether your project succeeds (i.e. if you're in it for the fun and for the learning experience).

It's better not to do that on someone else's project: on someone else's project, it's good to be a junior programmer, where it's their responsibility to ensure (when they hire you and as they give you work to do) that you're not in over your head (and/or that at least you know how to swim well enough).

But if thats the case, then what is it fair to compare my knowledge to?

It's fair to compare it against the work you need to do.

A popular thing that gets thrown around here is a Donald Rumsfeld quote about "unknown unknowns".

Let's say life's like a deck of cards: all face down, and therefore unknown. You pick the first one and look at it. Unlike Donald, if you don't like the card you pick, you may be able to afford to discard it and to pick another.

What I'm saying is that different jobs are different, and if one of them doesn't suit you then a different one might.

When I get my first programmer interview, when the interviewer asks me "what makes you think you have what it takes", what can I do to make it so I can answer him confidently and without having to just make something up?

Maybe answer that question with a question: "Well what does it take to work here? What responsibilities? What help would I have? What kind of person are you looking for?"

Then to the various specifics you can answer "I've done that before" or "I did something very like that" or "That sounds good, I'd like to do that."

ChrisW
+2  A: 

There is no real tell. You could think you were the best programmer that ever lived or that you look up in awe at other programmers with your big blue eyes and think that you will never have your toes where they have their heels.

Being a professional programmer is just getting payed. Has no real say if you're good or not. But the trick is keep getting those checks.

Do I have to start at telephone tech support or something and work my way up? Does my experience allow me to skip a few steps and get a job that isn't normally a entry level position?

You'd probably fit at an entry level programmer. Even though you're a great programmer. I can tell you that I started out at a tech support level and worked my way up.

And when it came to a programming level job (i had never been to college) they hired a kid straight out of college with a CS degree, even though I had company experience out my rear.

What I can tell you is this.

  • Confidence in what you know
  • True ability to accept mistakes
  • The passion to take extra steps

Is what makes people shine in a corporate environment and also remember our good friend Larry:

  • The virtues of a programmer: laziness, impatience, and hubris.
Ólafur Waage
A: 

well I probably don't have enough experience to give you a good advice or judge your competences, i'm just a bit sceptical about programming without an academic background and academic computer science knowledge. i've met a programmer who was self-larner (he had a different education) and he had no idea about computational complexity and I just think this is something you should know if you want to write good code. there are 15 years old children who can code in C for example but just knowing the language doesn't make you a good programmer.. does it? don't feel offended, i haven't finishing studying myself and I don't know anything about your computer science knowledge, but i just think professional education is really important.

agnieszka
and remember that having doubts about if you're good or not is good, because the day you start thinking you're great and your code is great, this is the day you become really stupid.
agnieszka
On the other hand, I've known kids out of college who were great in theory but completely fell apart when a deadline rolled into sight.
Nosredna
+2  A: 

Oracle: Sorry, kid. You got the gift, but it looks like you're waiting for something.

merkuro
databases talk now?
Beau Martínez
Greetings, Professor Falken.
Nosredna
+3  A: 

Also over the past two years I have come to hate my current industry. Its no longer something I'm passionate about. All my passion has been stolen by computer programming. I want to make a career switch to a job as a computer programmer.

The passion is there. This is an excellent start! I know several programmers that have been working professionally for several years, and they have never had that passion. You're already ahead of many programmers already working in the industry.

The only problem is that while I do know some things about computer programming, I know absolutely nothing about the computer programming industry. Where should I start? Obviously Senior Web Developer is out of the question. Or is it? Do I have to start at telephone tech support or something and work my way up? Does my experience allow me to skip a few steps and get a job that isn't normally a entry level position?

No one knows jack about the industry until they have started working in it. They might love programming and be really good at it, but to know about the industry you have to get working experience. This is exactly the same for any kind of profession. No one will or can demand you to know this beforehand. I suggest you keep your eyes out for entry level programming jobs. Since the programming world is so full of different niches, I also suggest you aim for jobs in the area you have recently explored, e.g. Python and web apps. To be honest, I dont think you can skip a few steps if you have no working experience. If you still think you can do it, you have to back this up with something. You need good arguments. I dont really have a clue about your skills, so it's not for me to say.

Also, even though I have put together working code and all, how do I know I have what it takes to be a professional coder? I don't want to put myself in a position where I'm over my head. The is the only reason I've avoided rentacoder.com. I'd hate to put someone out because I lead myself on to be a professional level programmer when I'm far from it -- if thats that case, I have no idea.

If you dont know if you have what it takes, this is a sign of insecurity and lack of knowledge about the industry, which confirms the entry level even more. Don't Panic! It's perfectly normal to feel insecure about something you have little or no information about. As I said before, no one knows beforehand. Start at entry level, work for a while and create an opinion of your own. I don't think you will have any problem, if your passion about programming is as strong as you say it is. This of course doesn't mean that it will be a piece of cake. You will have a lot of hard work ahead of you. The most important thing for you is to get "a foot into the door". Then give it a year or two and you can show them your l337 skillz ;)

When I browse this site, I sometimes feel like I'm a complete moron. Of the 50 or so questions on the front page of this site, only maybe 1 or 2 of them I have any idea what they're even talking about. When I first started learning PHP, it was OK I thought to be clueless at this stage. But that was probably 10,000 programming hours ago. I should be better by now, right? I should at least be able to browse this site and come across a single question that I'm capable to answer, right?

Welcome to the club! Personally I have a few areas that catches my interest the most. But that's because those areas are about things I know about and want to learn more about. As I said before, there are so many niches. So many different problems, programming languages, techniques, patterns and a huge terminology. No one can know everything, it's impossible. You also have to remember that some people in here have been doing programming for 40+ years. Of course they know stuff your brain can't wrap itself around.

When I get my first programmer interview, when the interviewer asks me "what makes you think you have what it takes", what can I do to make it so I can answer him confidently and without having to just make something up?

Forget about the Litmus test. In the end, it's you and the person interviewing you. Just speak from your heart and emphasize your passion in programming. If that doesn't cut it for the company. You know you shouldn't work there anyway. I can't even remember when we hired someone that was really passionate about programming.

Cheers and good luck !

Magnus Skog
+2  A: 

I will suggest taking a course if you can. I'm a self-learner like you, and there's nothing like school to give you a solid ground and confidence about your skills. And it's when you learn that you realize how much you didn't know.

Else, get involved in the open source community. Start a small project, build a small team. Interact with other programmers and learn from them.

Subb
this is exactly what i was saying in an earlier post. good to know it from someone who tried both paths
agnieszka
schooling just gave me misery. there's no way to do it other than experience. CODE YOUR LIFE.
Kent Fredric
The best programmers I ever worked with were a mixture of guys who had college degrees, some college, no college, and one guy who didn't even finish high school. Some of them are running their own companies now. The guy who didn't finish high school was just as good and effective as the guys with degrees, and he climbed to the top faster.
Nosredna
@NosrednaAt this point, it really depends on your personality. School will not make you a good and successful programmer. You will.
Subb
+7  A: 

You seem to be asking two questions:

  1. Am I a good enough programmer to be a professional?
  2. Given my background, if I wanted to get a job programming where should I start?

You're first question exposes a false assumption. Don't equate "good programmer" with "professional programmer". There are lots of really bad programmers making quite a lot of money doing it. There's also a lot non-professionals who write some really nice code. IsGoodProgrammer is not a Boolean value. It's just not that simple.

Programming is a really wide field. Most of the people I've worked with are really good at a certain things and just decent at others. For example, we have some developers I work with who are performance experts. Whether its SQL or application layer code, they know how to make it really fast. Others I work with are really good at presentation layer technologies and know how to make stuff efficient and responsive. We have a few people that aren't really super good at any one thing but are incredibly versatile. These folks are useful when we need to produce something "quick, useful and amazing" to land a prospect.

As for where to start, I would look for an entry level position (especially support) with a technology company that is known for attracting and retaining experienced programmers. Support is a great place to start as it forces you to understand not only the programming, but the technology environment you are working in. Both are really important. Tier 1 support is OK if it gets your foot in the door. Tier 2/3 is where your learning will really speed up. In many organizations, Tier 3 is the grooming place for the product developers. You want to get hired at a company that wouldn't touch you as a programmer. Once you're in, work hard and work your way up. Also, find mentors inside the organization and ask them lots of questions. That's the best way fill out the holes in your experience without wasting time book learning stuff you will never use in a real application.

As a side note - this was my path and the path of others I know who like me did not study computer science in college. My Theology degree didn't prepare me to program, but with a lot of extra effort and some good mentors I made the transition successfully.

gidmanma
+3  A: 

Do I have to start at telephone tech support or something and work my way up? Does my experience allow me to skip a few steps and get a job that isn't normally a entry level position?

No-one else has, so I'd like to: I'd like to warn you that some people say (I don't know, myself) that non-programming jobs can be ghettos: that if you take a job doing QA for example, or tech support, or sales, or etc., then such a job might not be considered good programming experience, and might not be an especially good way to get into full-time professional programming.

It may be better therefore to refuse such jobs, and to wait instead for a[ny] job that involves programming (i.e. any kind of junior programmer job, that involves actually programming).

FWIW my first job was as a "maintenance programmer": adding tiny features and fixing little bugs in pieces of software whose original developers had moved on and were busy with something else.

Of the 50 or so questions on the front page of this site, only maybe 1 or 2 of them I have any idea what they're even talking about.

If it makes you feel any better, the questions on this site aren't the questions which everyone else can answer: they're the questions which other people can't answer.

ChrisW
+2  A: 

If you can write a Web Application more-sophisticated than printing your own name, and you taught yourself how to do it, you've definitely got enough ability and drive to become a professional developer.

College classes can be very helpful for certain concepts that self-educated types tend to not know about (Data Structures, Complexity analysis), but these days there's so much information available online that you can probably self-teach yourself that, too.

As for where you'll start - that depends on where you work. It's not impossible that you're already a better web developer than the average guy doing web development at your local conventional brick-and-mortar businesses. You probably won't walk right into Google or Yahoo or Microsoft or Apple with no relevant degree and no experience, but there are a lot of jobs out there where they just need someone who can work things out.

Mark Bessey
+2  A: 

What I want to know, is that if there is some kind of "litmus test" (metaphorical or not) to determine if you're ready to handle a programming job.

While there is no universal test to determine if you are ready for a particular challenge I have found this following to be useful in assessing my current skill level over a wide array of programming topics:

Programmer competency matrix

Simucal
+2  A: 

Also over the past two years I have come to hate my current industry. Its no longer something I'm passionate about. All my passion has been stolen by computer programming. I want to make a career switch to a job as a computer programmer.

Reminds me a lot of an old friend of mine. He didn't have a college degree -- dropped out in his second year (of EE, like me; that's where we met) due to a superb opportunity in a different industry he just thought he couldn't let go (his starting salary in that job was likely higher than it would have been, years later, as a new grad in Engineering). His career in that other industry progressed well, with promotions and raises and bonuses &c... and, 10+ years later, he hated his current industry, spent every free minute programming (on a then-brand-new Commodore 64), and desperately dreamed of switching jobs.

I helped him get an interview at the rambunctiously-growing startup I was with at the time; he got an offer, accepted it (taking a substantial cut in pay and benefit), and never looked back. He ended up as more of a system and database administrator than a programmer in the strict sense -- just a better fit for his character and talent -- but did a lot of programming (mostly scripting -- ksh, later perl, later still Python), loved every working day instead of hating it, and pretty soon (with promotions and raises &c) he also got back to the income levels he previously enjoyed.

He also tended to under-estimate himself -- partly that's a question of personality and character, partly it's because he tended to compare himself at all times to the best people in programming, not to the average ones... and, there's a huge gap there.

Most of my friends who switched jobs from something else to programming (and there are many, partly because in my generation many fewer people got trained in programming than there was demand for a few years later) ended up in application areas close to the industry they got their early experience in (I guess this applies to me too: as an EE I started out designing chips, I drifted into programming, at first, to write low-level software to make those chips and systems more usable... but I'm pretty far from that area by now). For example, a mechanical engineer who develops mechanical CAD software may not be the world's best programmer, but he'll know so much more about that specific application area (what the users will need, the maths behind the apps, &c) that he may still flourish because of that.

Still, that's not a given -- i.e., while you should keep your eyes open, you also should not restrict yourself to looking for SW development jobs only in areas related to your current job (my old friend didn't, neither did many other successful ones). Go for it!.

Alex Martelli
+2  A: 

I was in your position just two years ago - in a non-programming job I hated, spent my spare time programming.

Now I'm a senior web developer, and loving (mostly) every minute of it.

What did I do? I built stuff. I contributed to open-source projects. I volunteered for a charity and rebuilt their website. I built sites for friends and relatives.

Eventually, just through doing this sort of thing in my spare time, I had enough experience to know I could do the job, and was finally able to convince a small design house to take me on full-time.

From there I moved on to a company with a much bigger development team, and when I joined I thought I would find myself completely overshadowed by all these guys with years of professional experience. But you know what? I was easily as able as any of them, and had no trouble holding my own.

Someone said to me that everyone sometimes feels a fraud in their chosen profession - they can't really believe that they are treated like someone who knows what they're talking about. You just need to have confidence that you do actually have some good experience, and are competent at what you do. That's all any of us have.

Daniel Roseman
+1  A: 

Apply for a job, get the job and see how it works out for you is the short answer to this, IMO. It may work well or it may suck big time but you never know until you get in there. The keys are to have a degree, some understanding of logic and basic algorithms like coding a FizzBuzz solution or reversing a string or other simple problem that someone may use to see if you can think logically.

I think you could break down the computer programming industry as there are more than a few different kinds of companies out there:

1) Shrink-wrap producers. These would be the companies that sell software as a package in a store.

2) Systems Integration - Now you have projects that can last years implementing massive systems like Enterprise Resource Planning or Customer Relationship Management where you could work for the company making the software like Oracle or Microsoft or the consulting firms brought in to help the customer get their system up and running.

3) IT departments - Maybe you've been here or maybe not but this is where there is enterprise development that works with the folks in number 2 as well as those home grown applications for doing things as the company has the employees that can build this tool or that tool.

4) Open source companies - These are another group but may be some in the second group as well. I'm not sure how well they pay here but it may be good as companies like Google have put out some open source code.

JB King
+1  A: 

I will use myself as an example.

I turned myself into an employed programmer after just two years of serious self study. Granted, i was programming as a teenager creating cheesy programs, but i stopped and never programmed until those 2 years of programming to get work

It's all about reading and coding -repeat. Especially reading code and books that focus on the real work environment other than theory and syntax.

After that, i got the job I deserved; A junior developer role with a small company. They gave me a non-critical project based on my strengths(modern web practices using javascript) and the rest is history.

Also, the worst thing you could possibly do is to get discouraged by comparing yourself with the uber lisp dorks on this site. It would be like giving up a musical instrument because someone else "is so much better" than you AT THIS POINT.

Jeff
A: 

The most important part about becoming a professional programmer is desire. If you love computers and programming nothing can stop you. However if you are looking to become a programmer because they make a good salary then you have little hope.

Someone with desire can master any programming language.

My advise is to use Elance.com to get some paid programming jobs. Don't worry about how much your first couple of jobs pay. What you want is the feedback. Once you get some positive feedback you can increase your bids.

Doing this will put money in your pocket, give you an incentive to develope your skills, and help build your resume.

I wish you the best

codingguy3000