I'm not a hiring manager, but if your self-description is accurate (see comments re: impostor syndrome for the possibility it isn't), I wouldn't want to work on a team with you. The problem doesn't seem to be that you're not smart or technical or industrious enough, but that you're not conscientious enough:
I figure out what needs to be done in order to get something to work reasonably well, and if I can’t do it myself I google it till I find snippets of code that mostly do what I need, then I modify them and hack around till I get something that works decently enough.
To me this is a much bigger problem than your ability to implement a linked list or describe big-O notation -- I'd be worried that I'd always be cleaning up after your messes.
The good news is that this is a solvable issue. Start collaborating with people, maybe via open source. Find a project of yours that's useful but maybe not profitable, open source it, and start handling requests for features and submissions. Learn how to deal with bad incoming code, and how to deal with your code being confusing to other people. Maybe read some of the classics on code as collaborative effort, like the Pragmatic Programmer or Clean Code.
Or maybe just decide that this isn't for you! There are lots of jobs oriented around achieving specific goals with throwaway code that you might be happier in than being a slave to the CI server, and they aren't less valuable. But if you want to be hireable in a code-oriented company, I think you have to change some things.
"There are lots of jobs oriented around achieving specific goals with throwaway code that you might be happier in than being a slave to the CI server, and they aren't less valuable."
Hi, would you mind elaborating on this? I am a self-taught coder since this year with exactly one webapp project to show. I'm in no position to say for sure, but I think I would enjoy writing throwaway code more than highly technical code. That is, getting stuff done is more satisfying to me than the nitty gritty details. If left on my own I'd probably develop into a coder with a portfolio much like the OP. I think we're more interested in what we could do with code, than the technicals of it. So I'm wondering what kinds of jobs out there for people like me, or am I looking at building small but profitable projects to make a living. Thanks.
Edit: If it matters I have an engineering background (MSEE) and can understand some of what's going on under the hood. If I had to pass a CS exam I would just cram like for any other test. But, I found I'm more motivated by the business end.
Agree on all of these points. In addition, knowledge of basic algorithms and data structures can give you a baseline for communicating with others in your field, which can be important if you're working on a big project with lots of other people with different backgrounds.
If you've been doing this for as long as you have, then this wouldn't be hard to pick up. You can try going beyond the "Learn Ruby|Python|FooBarBaz" stuff and take an online course in algorithms. You might find there is a whole world of stuff in computer science that could be up your alley if you dip your feet into it, and it would be all the difference between the how you do what you do, and the why.
Honestly, with resume fodder like SEO software (yes, I'm in that market too!) and "PHP Programming for Affiliate Marketers", I think you would make a strong living selling info products and sites geared toward the IM (Internet Marketing) market.
Run a few WSO's (Warrior Special Offers) on the Warrior Forum, and teach marketers how to code and build software businesses. That's where many marketers want to go anyway. Heck, write a course about what to look for in a programmer or how to hire a programmer. That crowd eats that up.
I think you're more suited being a Tech God in the IM world vs. being Yet Another PHP Guy in the HN world. And you'll make more money doing so.
(Also: Add some contact info to your HN profile now that you're on the front page, so people know how to contact you here.)
I've done a lot of this...I run a blog at MarketingFool.com and have an insiders club at Insiders.MarketingFool.com where I teach people my affiliate marketing tactics and how to use PHP...I even released a book recently at Amazon called "PHP Programming for Affiliate Marketers" http://www.amazon.com/PHP-Programming-Affiliate-Marketers-eb...
It was a #1 best seller for a few hours in its category.
Been there, done that...ready for bigger challenges...
We've reached the point where the glam jobs are no longer those quick and dirty websites that everyone and their dog wanted up until recently. The bar has since been raised significantly, such that people want scaling and maintainability, something you can't do without a very disciplined team.
You've been able to slide along like this due to an accident of circumstance (internet boom, dotcom booms), and in fact you could continue to do so for quite some time yet if you wanted to, although the quality of your customers will continue to decrease as time goes on. The cool projects of today are like the cool projects of the early-to-mid 90s in that you need a team to make an impact. And to work in a team, you need to produce maintainable code and architectures.
Your story reads a lot like mine. I, too, started programming on a C64 at age 8. I then learned assembler and C, and graduated to an Amiga 500. By the time I entered college, I already knew everything. And by "everything", I mean "nothing", because I lacked any and all discipline, which I spent the next 18 years building.
I still couldn't explain what a red-black tree is (or even a heap, to my shame), but I am extremely careful to ensure that the architecture makes sense, that the code is cleanly written and tested, fully documented, and entry points are very clearly laid out and orthogonal. I realize that far more time will be spent by other people reading my code than I will read it myself, and I'd much rather they have a pleasant experience with it and not spend weeks cursing my name for some piece of shit I wrote without any consideration for others.
Is my code super hot shit? No, but I'm constantly seeking to improve my craft. If I can keep the praise mail rate higher than the hate mail rate from people who use my code, I figure I'm doing OK. I'll never reach perfection, but I'll keep striving for it anyway.
Have you checked out the HN 'Who's Hiring' threads?
I, too, have an unorthodox background, and I also wonder if I can land a normal software job. This week, I got pulled into a slow IM conversation one night, so I read through the most recent hiring thread[1] to pass the time. There are 102 comments in that thread. I emailed five people who sounded like they had interesting offerings, and in each email included something like "I know I have an usual background, but . . ." along with a link to my github account. I had one phone interview already and I've got another one later this week and one next week.
That doesn't solve the problem of passing the interview, but if you include a candid note in your email, anyone who decides to interview you will be doing it knowing about your 'problems'; it helps to filter out companies that wouldn't be interested anyway.
If you want to pass a more traditional interviewing process, think of it as passing the final to some class. Here, I'm assuming that you've managed to pass at least one academic class in your life. This algorithms book[2] is free, and exactly what you want (it doesn't cover everything in the world; just in the important stuff, and it has good exercises that are approximately difficult as what you'll see in interviews). Pretend that's the textbook for a class you need to pass, and work through exercises until you can solve ones you haven't seen before fluently[3]. Just like cramming for an exam, you'll probably forget 90% of the material a week later, but you won't need that stuff for the vast majority of jobs anyway.
[3] If you get stuck, feel free to shoot me an email (see my profile). In theory, I ought to be able to answer your question cold. If I can't, that's a sign I need to do some review and I'd be happy to re-read the relevant material so I can explain it.
If I was your TA, I would be worried about this. And, unfortunately, I have had senior level students who I've had to dissuade that cut+paste code is not a valid methodology past year 1.
They way to think about things is like this: code is an expression of a problem. It's no coincidence we call them programming languages. They're not write-once, any code you write will be read an order of magnitude more than it will be written to.
The way you write things makes me feel like you don't recognize Computer Science problems, and that you are beginning to realize that the code by itself doesn't constitute the problem. This is a common thread through undergraduate CS students, and it will take some people a long time before this clicks naturally (especially when it feels like writing code is a struggle alone, once you become more fluent code will no longer be the barrier).
You aren't hirable as someone in mindset you are in, but you're moving closer to someone who can be. Continue on your mental journey of seeing problems first. Start working harder at following best practices. You'll get there.
Yes. You are unhireable. At least by the type organization that would make decisions based on a technical interview.
You need to find a place where you can hack for a living. Find someplace where you can make a mess of great ideas and then hand the mess over to trusted co-workers to cleanup. (There are people that like that sort of thing!)
What about a consultancy that builds prototypes, proofs-of-concepts, etc? (Can't think of one off hand but I'm sure they exist)
"I can DO things, I can get things done; always…but I don’t really know what I’m doing.
Ever."
Why do you let that condition persist?
You are just as problematic as a musician who can't read music. You'd think that it would be crazy to have a musician who can't read music, after all its what they do play music but in fact there are lots of them. They picked up an instrument and just sort of goofed around and now if they hear something they can kinda pick it up and recognize that what their playing isn't what they were hearing, and adapt. Great for playing at the camp fire, or covers at a wedding or Bar Mitzvah, but nobody is going to hire you to be part of their symphony band or the work in the theatre district adding music to broadway plays. And the reason is simple, you can get to an answer, you cannot predict how long that is going to take.
If you want to work as a coder you should start by going through the core parts of a computer science curriculum, algorithms, data structures, compilers, interpreters, OS design, and data bases. You need to take the time to learn how the structure in the first part influences how you get to the later parts, so that when you're given a problem you will know how to attack it and get to a solution, and you'll know that you're not getting closer and to change course and how. Because you will know what you're trying to achieve and understand why what you're doing isn't achieving it. It is going to be painful at first because you might have to unlearn some stuff you picked up along the way.
Now don't confuse (Un)Hireable with "You can't make a living at it." As you've demonstrated there are lots of services you can do, especially if they aren't schedule driven based on when you'll be done with your coding. Just like someone who can play the piano by ear can make a living in a bar playing 'live music' for the guests. But if you are passionate about becoming someone who can design software you really need to understand what software is.
Lucky for you there are lots of great free college classes now you can do online at your own pace. Good luck.
"you cannot predict how long that is going to take."
This is perhaps a bit nitpicky, but in my experience even people who know what they're doing (in either of these fields) cannot reliably predict how long something is going to take.
But they can at least see the trailhead of the path that they need to follow, which is very important, and seems to be lacking in the OP's case.
"Fatal error: Out of memory (allocated 10223616) (tried to allocate 77824 bytes) in /home/jps/public_html/wp-includes/nav-menu-template.php on line 224"
Why isn't everyone (developers, at least) turning on Super Cache or one of the many great caching plugins for WP by default? This is just a blog, not a full blown-out CMS with lots of dynamic bits.
You sound plenty hire-able to me, based on your story. Your best bet will be getting a job through a personal connection, somebody who _knows_ how you work and wants you (or is willing to strongly refer you). Barring that, not all companies will make you do sorting algorithms and brain teasers for a job interview.
My problem is that I have the memory retention of a gnat. I learn quickly, then discard the information to make way for new stuff. Six years ago, I was a full time .NET programmer (for years!) and I can barely remember anything about .NET at the moment. This makes certain types of technical interviews difficult for me.
My team runs a moderately high traffic web site. Learning quickly, being flexible, and fiercely persistent matter much more to us than a deep understanding of computer science concepts. Now that I am in a position where I do the hiring, I try to accommodate people like us. Unconventional background, hate whiteboarding in public, terrible memory. Whatever. Can you produce something of value in a reasonable time frame? That is all we care about.
The way I hire people now days is to give them a simple challenge to do (at home, on their own time). Basically, take a small data set and display it on a web page. Depending on the level of interviewee, I will ask for more or less features (make it sortable, derive additional data points according to some algorithm you must devise).
The challenge has no time limit or rules. You can use your own resources and do it on your own pace. When it gets sent back to me, I evaluate the candidate based on the final product. I don't much care how they got there. If the product is good, we bring you in for an interview.
During the interview, I ask you to work on _your_ code. The code you provided to get the interview. Essentially, we pair program. Adding features, fixing bugs. Whatever seems the most fun.
If you show me that you can code on your own codebase, using your tools and process, and you are pleasant enough to work with side-by-side for several hours, you've got the job.
I know you said you don't want to move, but we are hiring developers here where I work in NYC. Drop me a line if you are interested jdslatts at fzysqr dot com.
As someone who has been in the position of maintaining code written by someone who 'can make it work' but doesn't understand why, yes. Yes you are, because you're not the only one who has to work on your code.
As someone who has (more or less) gone down this path myself, here's my take: you are totally hireable. But the fact is you're a cowboy programmer looking to settle down in town, so there's going to be some cleaning up to do. If you approach it that way, you'll be fine.
If I was in your position my approach would be to either work as a contractor (preferably a temp-to-hire job) or try to get a job a small- to medium-sized startup, something like 10-50 employees. Your value is that you are clearly a self-starter and don't need to be handheld through every difficulty, but you WANT to work in a team and learn how to do that. It's important to be upfront about where you are at, but don't discount what you do know.
Be sure to have a "beginner's mind" because for a lot of things you are a junior developer, but none of them should be hard to learn if you are open to it. Every company has different wrinkles in how they comment code or do QA, so you would need to learn these anyway. Don't be shy about asking questions if you don't know the proper term for something or understand what someone is talking about - it can feel a little embarrassing but if you ask once it'll fix the problem and will help you communicate better.
Don't worry about not getting jobs where they focus so much on algorithms and data structures because that's simply not a good fit for you right now. You want to work at a place where they need to Get Shit Done and are still establishing formal processes.
Finally, I wouldn't waste time learning new languages or going nuts with interview books or working on open source (unless you want to) unless you've already tested the market. Have some confidence and realize that this Internet industry is pretty darn new and many, many of the people that built it came from a background exactly like this.
"And besides, the climate here in America has turned so decisively anti-small business that not only is it not fun anymore; it’s almost dangerous.
And who knows what’s up with health insurance now. I don’t have the energy to dig into that cesspool to find out what my small business has to do to cover itself in that department. Think I’d rather just chuck the whole thing."
I think that these two paragraphs are the most interesting part of the whole post - I've occasionally tossed around the idea of joining a scrappy startup, or even running my own company, but I always come to the conclusion that I'm not confident that I could cope with that much risk. I'm admittedly much more risk averse than the HN community, but sometimes I wonder if I would have the nerve to do it if it weren't for an environment that seems so toxic to small business.
Can you explain what you're talking about? I run a small business and my understanding is that unless you have like 50+ employees this insurance stuff doesn't even effect you.
Honestly though if it is a business killer(which you know, I don't really see how it could be unless I am running a minimum wage fast food drive through and not a tech company)I will just drop my employees' wages and tell them it is to pay for their health insurance. I really doubt I will need to do this though.
You are in effect pointing out the advantage that businesses in countries with universal health care coverage have.
Not only do they not have to pay for coverage, they do not even need to be involved with the process of providing it-- i.e. no "open enrollment" months with corresponding time spent on information sessions, filling out forms, etc.
My answer is that you are probably not hireable as a coder at the moment. That's not to say you don't have a lot of value to offer and potential as a future hireable coder.
To put it simply: You are good at developing your own ideas and shipping them but that's not what a coder does. When a coder is hired, it is their job to develop and ship other people's ideas.
One limitation you likely face is that your lack of programming prowess limits your ideas or, at least, which of your ideas get developed. By the same token, if I asked you to build Product X (say, a Google-like indexing engine), I'm guessing you'd be hitting walls pretty quickly because your breadth of knowledge is, frankly, limited.
If you want to become a good coder, you probably just need to fill in the gaps. You need to take the time to learn the essentials of computers and programming. Most devs get this through formal study but many also are self-taught. The trick is you need to put in the effort to be self-taught. You need to come at your education with the goal of learning a wide base of knowledge instead of just learning what is needed to solve today's problem.
My personal recommendation for a starting point would be to read and thoroughly study Programming Interviews Exposed: Secrets to Landing Your Next Job (2nd Ed.). This book just offers a wide range of topics all of which need to be mastered to be a "good" programmer and be able to handle many challenges that are given to you.
yeah, this is just my personal blog...it's not geared up for the heavy hit of traffic from HN that I didn't expect to get...I've beefed it up a bit, it should be working now.
Coders aren't fungible. Web dev isn't embedded systems isn't databases isn't enterprise business isn't application dev isn't front-end JS.
So you need to isolate what you want to do. However, realize that I - and others like me I've met - key off of theoretical grounding and consider that the foundation to great software development practice. To interview successfully with us - regardless of the position - , you need to be able to speak comfortably about data structures, algorithms, big-O, and some level of formal language theory. Loosely, that's 2-3 courses in the CS curricula.
With your background, I would be looking for you to have spent some time to grasp the theoretical concepts and be able to apply them in practice. I would also be expecting you to have a rock-solid - hardcore - foundation of in-the-trenches software development principles.
If technical interviews are a problem that the author is aware of, why not take action to shore up the missing knowledge? Take a few hours to read about some data structure, then try implementing it. Read Programming Pearls. Interview somewhere and see what they ask, then read more on those subjects.
I too was entirely self-taught and had very little opportunity to work with other programmers, right up until I got a job writing system software.
I simply made it my priority to become obsessed with data structures, algorithms, and software engineering. I read every such book I could find and wrote code to implement things. It was harder back then, before the internet. There were far fewer books at the bookstores. Nearly everyone told me I could never be a software developer without a CS degree.
This is a solveable problem, if you really want to solve it.
I've come across at least one person that felt into that description, in the past. He was most definitely un-hireable - if anyone spent a second studying his (fake) past experience or his (non-existing) technical ability/interest on learning - had no idea what he was doing, but somehow managed to not just join a "big corp", but stay under the radar for years until he got promoted to a management position (where I believe he is today).
Judging by other posts on his blog (http://www.flatplanetmedia.com/thats-john-we-dont-know-what-... / http://www.flatplanetmedia.com/im-learning-ruby-on-rails-bec...), he's either using a "persona" to try and get clicks from newbies (to buy the book he wrote for "PHP newbies and marketing") or he likes the feeling of "being a complete incompetent, but somehow managing to get paid" (a lot of self-derogatory posts there, most of them including the usual "but whatever", "but I like to do like that", etc).
Have you actually tried to get hired? If you've never been through any technical (or even non-technical) interviews, you'll likely have a hard time.
So are you Un-hireable? Probably yes. But can you become hireable? Absolutely yes, but with necessary effort.
Start applying. With a list of successful projects like that, you'll get some people taking the bait. Go through interviews, even if you'll fail. Especially if you aren't even interested in working for them. You still get something out of it (practice), which will help you the next time you interview again. Eventually, that next time will be a place you actually want to work at.
(Also, listen to the other comments here about learning version control and doing open source. Those will all be helpful.)
[+] [-] jdminhbg|13 years ago|reply
I figure out what needs to be done in order to get something to work reasonably well, and if I can’t do it myself I google it till I find snippets of code that mostly do what I need, then I modify them and hack around till I get something that works decently enough.
To me this is a much bigger problem than your ability to implement a linked list or describe big-O notation -- I'd be worried that I'd always be cleaning up after your messes.
The good news is that this is a solvable issue. Start collaborating with people, maybe via open source. Find a project of yours that's useful but maybe not profitable, open source it, and start handling requests for features and submissions. Learn how to deal with bad incoming code, and how to deal with your code being confusing to other people. Maybe read some of the classics on code as collaborative effort, like the Pragmatic Programmer or Clean Code.
Or maybe just decide that this isn't for you! There are lots of jobs oriented around achieving specific goals with throwaway code that you might be happier in than being a slave to the CI server, and they aren't less valuable. But if you want to be hireable in a code-oriented company, I think you have to change some things.
[+] [-] nicholas73|13 years ago|reply
Hi, would you mind elaborating on this? I am a self-taught coder since this year with exactly one webapp project to show. I'm in no position to say for sure, but I think I would enjoy writing throwaway code more than highly technical code. That is, getting stuff done is more satisfying to me than the nitty gritty details. If left on my own I'd probably develop into a coder with a portfolio much like the OP. I think we're more interested in what we could do with code, than the technicals of it. So I'm wondering what kinds of jobs out there for people like me, or am I looking at building small but profitable projects to make a living. Thanks.
Edit: If it matters I have an engineering background (MSEE) and can understand some of what's going on under the hood. If I had to pass a CS exam I would just cram like for any other test. But, I found I'm more motivated by the business end.
[+] [-] leothekim|13 years ago|reply
If you've been doing this for as long as you have, then this wouldn't be hard to pick up. You can try going beyond the "Learn Ruby|Python|FooBarBaz" stuff and take an online course in algorithms. You might find there is a whole world of stuff in computer science that could be up your alley if you dip your feet into it, and it would be all the difference between the how you do what you do, and the why.
[+] [-] RawData|13 years ago|reply
[+] [-] ericabiz|13 years ago|reply
Run a few WSO's (Warrior Special Offers) on the Warrior Forum, and teach marketers how to code and build software businesses. That's where many marketers want to go anyway. Heck, write a course about what to look for in a programmer or how to hire a programmer. That crowd eats that up.
I think you're more suited being a Tech God in the IM world vs. being Yet Another PHP Guy in the HN world. And you'll make more money doing so.
(Also: Add some contact info to your HN profile now that you're on the front page, so people know how to contact you here.)
[+] [-] RawData|13 years ago|reply
It was a #1 best seller for a few hours in its category.
Been there, done that...ready for bigger challenges...
[+] [-] propercoil|13 years ago|reply
[+] [-] kstenerud|13 years ago|reply
You've been able to slide along like this due to an accident of circumstance (internet boom, dotcom booms), and in fact you could continue to do so for quite some time yet if you wanted to, although the quality of your customers will continue to decrease as time goes on. The cool projects of today are like the cool projects of the early-to-mid 90s in that you need a team to make an impact. And to work in a team, you need to produce maintainable code and architectures.
Your story reads a lot like mine. I, too, started programming on a C64 at age 8. I then learned assembler and C, and graduated to an Amiga 500. By the time I entered college, I already knew everything. And by "everything", I mean "nothing", because I lacked any and all discipline, which I spent the next 18 years building.
I still couldn't explain what a red-black tree is (or even a heap, to my shame), but I am extremely careful to ensure that the architecture makes sense, that the code is cleanly written and tested, fully documented, and entry points are very clearly laid out and orthogonal. I realize that far more time will be spent by other people reading my code than I will read it myself, and I'd much rather they have a pleasant experience with it and not spend weeks cursing my name for some piece of shit I wrote without any consideration for others.
Is my code super hot shit? No, but I'm constantly seeking to improve my craft. If I can keep the praise mail rate higher than the hate mail rate from people who use my code, I figure I'm doing OK. I'll never reach perfection, but I'll keep striving for it anyway.
tl;dr Doing things right is hard work.
[+] [-] luu|13 years ago|reply
I, too, have an unorthodox background, and I also wonder if I can land a normal software job. This week, I got pulled into a slow IM conversation one night, so I read through the most recent hiring thread[1] to pass the time. There are 102 comments in that thread. I emailed five people who sounded like they had interesting offerings, and in each email included something like "I know I have an usual background, but . . ." along with a link to my github account. I had one phone interview already and I've got another one later this week and one next week.
That doesn't solve the problem of passing the interview, but if you include a candid note in your email, anyone who decides to interview you will be doing it knowing about your 'problems'; it helps to filter out companies that wouldn't be interested anyway.
If you want to pass a more traditional interviewing process, think of it as passing the final to some class. Here, I'm assuming that you've managed to pass at least one academic class in your life. This algorithms book[2] is free, and exactly what you want (it doesn't cover everything in the world; just in the important stuff, and it has good exercises that are approximately difficult as what you'll see in interviews). Pretend that's the textbook for a class you need to pass, and work through exercises until you can solve ones you haven't seen before fluently[3]. Just like cramming for an exam, you'll probably forget 90% of the material a week later, but you won't need that stuff for the vast majority of jobs anyway.
Good luck!
[1] http://news.ycombinator.com/item?id=4727241
[2] http://www.cs.berkeley.edu/~vazirani/algorithms.html
[3] If you get stuck, feel free to shoot me an email (see my profile). In theory, I ought to be able to answer your question cold. If I can't, that's a sign I need to do some review and I'd be happy to re-read the relevant material so I can explain it.
[+] [-] RawData|13 years ago|reply
[+] [-] Lewisham|13 years ago|reply
They way to think about things is like this: code is an expression of a problem. It's no coincidence we call them programming languages. They're not write-once, any code you write will be read an order of magnitude more than it will be written to.
The way you write things makes me feel like you don't recognize Computer Science problems, and that you are beginning to realize that the code by itself doesn't constitute the problem. This is a common thread through undergraduate CS students, and it will take some people a long time before this clicks naturally (especially when it feels like writing code is a struggle alone, once you become more fluent code will no longer be the barrier).
You aren't hirable as someone in mindset you are in, but you're moving closer to someone who can be. Continue on your mental journey of seeing problems first. Start working harder at following best practices. You'll get there.
[+] [-] rschroed|13 years ago|reply
You need to find a place where you can hack for a living. Find someplace where you can make a mess of great ideas and then hand the mess over to trusted co-workers to cleanup. (There are people that like that sort of thing!)
What about a consultancy that builds prototypes, proofs-of-concepts, etc? (Can't think of one off hand but I'm sure they exist)
[+] [-] ChuckMcM|13 years ago|reply
"I can DO things, I can get things done; always…but I don’t really know what I’m doing.
Ever."
Why do you let that condition persist?
You are just as problematic as a musician who can't read music. You'd think that it would be crazy to have a musician who can't read music, after all its what they do play music but in fact there are lots of them. They picked up an instrument and just sort of goofed around and now if they hear something they can kinda pick it up and recognize that what their playing isn't what they were hearing, and adapt. Great for playing at the camp fire, or covers at a wedding or Bar Mitzvah, but nobody is going to hire you to be part of their symphony band or the work in the theatre district adding music to broadway plays. And the reason is simple, you can get to an answer, you cannot predict how long that is going to take.
If you want to work as a coder you should start by going through the core parts of a computer science curriculum, algorithms, data structures, compilers, interpreters, OS design, and data bases. You need to take the time to learn how the structure in the first part influences how you get to the later parts, so that when you're given a problem you will know how to attack it and get to a solution, and you'll know that you're not getting closer and to change course and how. Because you will know what you're trying to achieve and understand why what you're doing isn't achieving it. It is going to be painful at first because you might have to unlearn some stuff you picked up along the way.
Now don't confuse (Un)Hireable with "You can't make a living at it." As you've demonstrated there are lots of services you can do, especially if they aren't schedule driven based on when you'll be done with your coding. Just like someone who can play the piano by ear can make a living in a bar playing 'live music' for the guests. But if you are passionate about becoming someone who can design software you really need to understand what software is.
Lucky for you there are lots of great free college classes now you can do online at your own pace. Good luck.
[+] [-] georgemcbay|13 years ago|reply
This is perhaps a bit nitpicky, but in my experience even people who know what they're doing (in either of these fields) cannot reliably predict how long something is going to take.
But they can at least see the trailhead of the path that they need to follow, which is very important, and seems to be lacking in the OP's case.
[+] [-] RawData|13 years ago|reply
[+] [-] jusob|13 years ago|reply
Yes :-)
[+] [-] RawData|13 years ago|reply
[+] [-] danso|13 years ago|reply
[+] [-] jslatts|13 years ago|reply
My problem is that I have the memory retention of a gnat. I learn quickly, then discard the information to make way for new stuff. Six years ago, I was a full time .NET programmer (for years!) and I can barely remember anything about .NET at the moment. This makes certain types of technical interviews difficult for me.
My team runs a moderately high traffic web site. Learning quickly, being flexible, and fiercely persistent matter much more to us than a deep understanding of computer science concepts. Now that I am in a position where I do the hiring, I try to accommodate people like us. Unconventional background, hate whiteboarding in public, terrible memory. Whatever. Can you produce something of value in a reasonable time frame? That is all we care about.
The way I hire people now days is to give them a simple challenge to do (at home, on their own time). Basically, take a small data set and display it on a web page. Depending on the level of interviewee, I will ask for more or less features (make it sortable, derive additional data points according to some algorithm you must devise).
The challenge has no time limit or rules. You can use your own resources and do it on your own pace. When it gets sent back to me, I evaluate the candidate based on the final product. I don't much care how they got there. If the product is good, we bring you in for an interview.
During the interview, I ask you to work on _your_ code. The code you provided to get the interview. Essentially, we pair program. Adding features, fixing bugs. Whatever seems the most fun.
If you show me that you can code on your own codebase, using your tools and process, and you are pleasant enough to work with side-by-side for several hours, you've got the job.
I know you said you don't want to move, but we are hiring developers here where I work in NYC. Drop me a line if you are interested jdslatts at fzysqr dot com.
[+] [-] jaggederest|13 years ago|reply
[+] [-] jimrandomh|13 years ago|reply
[+] [-] lubujackson|13 years ago|reply
If I was in your position my approach would be to either work as a contractor (preferably a temp-to-hire job) or try to get a job a small- to medium-sized startup, something like 10-50 employees. Your value is that you are clearly a self-starter and don't need to be handheld through every difficulty, but you WANT to work in a team and learn how to do that. It's important to be upfront about where you are at, but don't discount what you do know.
Be sure to have a "beginner's mind" because for a lot of things you are a junior developer, but none of them should be hard to learn if you are open to it. Every company has different wrinkles in how they comment code or do QA, so you would need to learn these anyway. Don't be shy about asking questions if you don't know the proper term for something or understand what someone is talking about - it can feel a little embarrassing but if you ask once it'll fix the problem and will help you communicate better.
Don't worry about not getting jobs where they focus so much on algorithms and data structures because that's simply not a good fit for you right now. You want to work at a place where they need to Get Shit Done and are still establishing formal processes.
Finally, I wouldn't waste time learning new languages or going nuts with interview books or working on open source (unless you want to) unless you've already tested the market. Have some confidence and realize that this Internet industry is pretty darn new and many, many of the people that built it came from a background exactly like this.
[+] [-] willismichael|13 years ago|reply
And who knows what’s up with health insurance now. I don’t have the energy to dig into that cesspool to find out what my small business has to do to cover itself in that department. Think I’d rather just chuck the whole thing."
I think that these two paragraphs are the most interesting part of the whole post - I've occasionally tossed around the idea of joining a scrappy startup, or even running my own company, but I always come to the conclusion that I'm not confident that I could cope with that much risk. I'm admittedly much more risk averse than the HN community, but sometimes I wonder if I would have the nerve to do it if it weren't for an environment that seems so toxic to small business.
[+] [-] pfisch|13 years ago|reply
Honestly though if it is a business killer(which you know, I don't really see how it could be unless I am running a minimum wage fast food drive through and not a tech company)I will just drop my employees' wages and tell them it is to pay for their health insurance. I really doubt I will need to do this though.
[+] [-] muzz|13 years ago|reply
Not only do they not have to pay for coverage, they do not even need to be involved with the process of providing it-- i.e. no "open enrollment" months with corresponding time spent on information sessions, filling out forms, etc.
[+] [-] ivix|13 years ago|reply
[+] [-] tobyjsullivan|13 years ago|reply
To put it simply: You are good at developing your own ideas and shipping them but that's not what a coder does. When a coder is hired, it is their job to develop and ship other people's ideas.
One limitation you likely face is that your lack of programming prowess limits your ideas or, at least, which of your ideas get developed. By the same token, if I asked you to build Product X (say, a Google-like indexing engine), I'm guessing you'd be hitting walls pretty quickly because your breadth of knowledge is, frankly, limited.
If you want to become a good coder, you probably just need to fill in the gaps. You need to take the time to learn the essentials of computers and programming. Most devs get this through formal study but many also are self-taught. The trick is you need to put in the effort to be self-taught. You need to come at your education with the goal of learning a wide base of knowledge instead of just learning what is needed to solve today's problem.
My personal recommendation for a starting point would be to read and thoroughly study Programming Interviews Exposed: Secrets to Landing Your Next Job (2nd Ed.). This book just offers a wide range of topics all of which need to be mastered to be a "good" programmer and be able to handle many challenges that are given to you.
http://www.amazon.ca/Programming-Interviews-Exposed-Secrets-...
[+] [-] plaguuuuuu|13 years ago|reply
When I hit the site first time I got "banner-widget.php out of memory" or something :P
[+] [-] RawData|13 years ago|reply
[+] [-] pnathan|13 years ago|reply
So you need to isolate what you want to do. However, realize that I - and others like me I've met - key off of theoretical grounding and consider that the foundation to great software development practice. To interview successfully with us - regardless of the position - , you need to be able to speak comfortably about data structures, algorithms, big-O, and some level of formal language theory. Loosely, that's 2-3 courses in the CS curricula.
With your background, I would be looking for you to have spent some time to grasp the theoretical concepts and be able to apply them in practice. I would also be expecting you to have a rock-solid - hardcore - foundation of in-the-trenches software development principles.
[+] [-] jrockway|13 years ago|reply
[+] [-] marshray|13 years ago|reply
I simply made it my priority to become obsessed with data structures, algorithms, and software engineering. I read every such book I could find and wrote code to implement things. It was harder back then, before the internet. There were far fewer books at the bookstores. Nearly everyone told me I could never be a software developer without a CS degree.
This is a solveable problem, if you really want to solve it.
[+] [-] Tichy|13 years ago|reply
Then again, can you FizzBuzz? :-)
[+] [-] herval|13 years ago|reply
[+] [-] RawData|13 years ago|reply
[+] [-] herval|13 years ago|reply
Fishy...
[+] [-] shuzchen|13 years ago|reply
So are you Un-hireable? Probably yes. But can you become hireable? Absolutely yes, but with necessary effort.
Start applying. With a list of successful projects like that, you'll get some people taking the bait. Go through interviews, even if you'll fail. Especially if you aren't even interested in working for them. You still get something out of it (practice), which will help you the next time you interview again. Eventually, that next time will be a place you actually want to work at.
(Also, listen to the other comments here about learning version control and doing open source. Those will all be helpful.)