It would be a good way for you to get more work, be involved with teams, start to learn how to mentor and digital agencies/marketing companies tend to be less about formal experience and more about unit productivity.
"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"
>Fatal error: Out of memory (allocated 10485760) (tried to allocate 19456 bytes) in /home/jps/public_html/wp-content/plugins/akismet/akismet.php on line 268
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.
The term "make things and show people" comes to mind. It's basically the way many of the best tech jobs are landed. Instead of worrying about all the things you don't know how to do, focus on the things you've made and the myriad skills you gained in doing so.
Wish I could find the original article that quote comes from, I must be mangling it. But you get the gist.
Would you hire yourself as a coder? If so, then someone else will, too. If not, build stuff (even if it sucks) until you would hire yourself. Game, set, match.
This applies to any type of interviews/beginnings. Since op listed himself as an entrepreneur who has sold companies, I'd expect this concept to not be novel. Probably, just a matter of regaining some confidence.
Yes. The first step to success is repeated failure. It's okay. If you can accept that it will happen then you can get it out of the way and be ready to succeed.
> but I’d probably utterly fail any type of formal interview where they asked me to write or explain code on the spot.
It seems to me that you lack comunication skills to explain what you know. I would be very difficult to somebody to hire you to do team work, maybe you should try freelancing or improve your understanding of what are you doing, commenting your code would be a good start.
I feel like the parent, and not due to communication skills per-say, but because that kind of thought requires self-reflection and doesn't just come up naturally while in conversation. If I went away for a while to think about it, then I could explain it to you just fine, but I've never been in an interview that operated that way.
This. Communication skills seems to be the real problem, specifically technical communication skills. In addition to comments, try reading "Code Complete 2" to build vocabulary or giving short talks at your local user groups to practice technical speaking skills.
Agreed. Communication is a skill and it is learnable. I suggest attending a PHP meetup [1] in your area or nearest city. I'm sure many of them would be interested in your background and they in return would be able to help you hone your communication skills, both verbally and in code. Good luck!
If you want to practice for technical interviews, you can do programming contest type problems. They're generally similar to technical interview problems, but a bit more difficult. Interviewstreet is probably one of the more accessible places to start doing this, but there are lots of others.
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.
One of the authors of that book taught a class earlier this year at Berkeley. If you learn best listening, the lectures might help. I found them a bit easy, but a nice overview of the book.
On the flip side, if you have had success doing those things, why do you want a "job" where someone tells you what to do? Maybe you just need to learn a little bit about sales and marketing so that you can make money from your own successful efforts?
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)
"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.
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.
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.
Maybe I'm just a victim of my own FUD - Whenever I think about setting out on my own, I get all kinds of doubts about what kinds of taxes that I would owe, avoiding a patent minefield, how to make insurance work, etc.
To be honest, now that you've actually called me on it, I think that those are really just surface concerns. I think my real concern is more about being able to cope emotionally - I've seen multiple discussions here about significant depression symptoms in startups.
Honestly what a lot of the hip startup people with the blogs in silicon valley do scares the hell out of me as well, and I guess that is a lot of Y combinator.
I worked as a developer for awhile so I have some money, and now I am bootstrapping some stuff and I have hired another dev and we also do contract mobile work to supplement. We outsource most of the design work. I have been doing this since around May and I need to check the finances but I am either slightly in the black or slightly in the red(this includes my living expenses). At the current revenue I have a runway of like 50 years though so I'm not too concerned.
We have a bunch of cool stuff cooking in development and have partnered with some other companies on some stuff so hopefully we can stop the contract work early next year.
These kids doing all these startups with little runway, no clear method of generating revenue and basically no experience out in the valley are crazy imo. I think the only people making real money are the VCs and a very few lucky founders. It kind of seems exploitative to me but I'm not out there so maybe it is much better than I think.
Read books. I'm a Maths grad now at my first Software Dev job. Yes, I'm a Software Developer not a Coder.
You need to learn the basics. Use C/C++, learn why Java is crap and why PHP takes up too much memory. Make sure you get a few Signal 11s and learn what you did wrong. How do you protect yourself from it next time?
The particular choice of languages is irrelevant of course. The point is there is a lot more to software development than hacking out code. There are principles of development. There are advantages/disadvantages to each of the tools we use. There are mathematical underpinnings of data structures. A brief understanding of it all is important. A deeper understanding may be required.
Java is crap? It was the first language i learned in uni and i would advice anyone to start with it to get basic oo programing skills and design patterns fast.
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...
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.
Really enjoyed your post. I'm in a similar situation and have been reading up on how to learn the formal CS concepts necessary to ace a technical interview and thought I'd share what I've found.
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 can build software that’s happily used by millions of people, but I couldn’t describe how I did it, and if I looked at the code later – I probably couldn’t make heads or tails out of it without really studying it for a while (comments? who has time to bother commenting code!).
Pretty much like every legacy project I've ever touched, wrote by people who got the job. Sounds fine for me.
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.
> but I’d probably utterly fail any type of formal interview where they asked me to write or explain code on the spot.
If you've gotten any sort of software project to work the way you wanted it to, which it sounds like you have, I doubt this quote is true. Any company worth working for is more interested in hearing/watching you break down problems into pieces and describe how to solve them. Often times this can be done in 'pseudo-code'. If interviewers are going to nitpick your code for trivial syntax issues (i.e. things that can be fixed with 10-seconds of google-fu), there's a good chance you won't want to work for that company anyway.
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.
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).
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.
It is worth your while to learn OOP if you haven't and at least some of the technical stuff. I am a lot like you, engineering background as well.
However, if you try to just freestyle even a medium sized project without any knowledge it will become unmanageable in only a few months.
Most things you can just learn to do by doing plus some google, but there are better ways to do a lot of these things and you should at least try and do something like program chess in C++/C#/java/obj-c with OOP and inheritance. It will significantly speed up your ability to do subsequent projects and increase the scope of projects that you are capable of doing.
Thanks for the advice and I agree with the chess idea. I'm familiar with OOP but my usage of it is very loose. Especially since my webapp is mostly, "if this happens, do this." The only objects I really created were to store into the database. I have learned Java at university 10 years ago (Python and Javascript self taught), so OOP was what I learned from the start.
Unfortunately I don't think I'm familiar enough to recommend a particular path, but I know that I run into lots of people at programming meetups and elsewhere who write code in their day job but it's not the finished product they're delivering. For example, working for an environmental sciences consulting company where the finished product is a report on arsenic levels in water, you might write a Python script to collate data for presentation, or a quick one-off web service for people to submit data to. In these cases, I think you'd need to develop some domain knowledge first, but with an engineering background, you should have access to a fair spectrum of possibilities.
As some other commenters have mentioned, and I've experienced myself - there are a lot of "small but profitable projects" in the internet marketing and advertising space. The best approach might be to join or partner with an online marketing agency. They often have customers who want more than a simple web page, for example a Facebook game to go together with an advertising campaign.
That said, most software engineers in the world do not work for big-team, Computer-Science-heavy software companies. They work everywhere building internal software to support the business in various other fields. However, finding or selling to these companies might be more difficult as an individual freelancer, as they might not even realise that their work could be optimised with software.
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.
107 comments
[ 6.7 ms ] story [ 506 ms ] threadIt would be a good way for you to get more work, be involved with teams, start to learn how to mentor and digital agencies/marketing companies tend to be less about formal experience and more about unit productivity.
Yes :-)
>Fatal error: Out of memory (allocated 10485760) (tried to allocate 19456 bytes) in /home/jps/public_html/wp-content/plugins/akismet/akismet.php on line 268
Wish I could find the original article that quote comes from, I must be mangling it. But you get the gist.
Throw out this attitude. It's utterly useless.
Step 2:
Go bomb five technical interviews and learn from them.
Step 3:
Ace the sixth.
> but I’d probably utterly fail any type of formal interview where they asked me to write or explain code on the spot.
It seems to me that you lack comunication skills to explain what you know. I would be very difficult to somebody to hire you to do team work, maybe you should try freelancing or improve your understanding of what are you doing, commenting your code would be a good start.
[1] http://www.meetup.com
Go take an undergrad algorithms class at a local university. Make sure it covers "big O" notation. Read a book or two on data structures.
You're now equipped to handle CS interview questions.
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.
http://webcast.berkeley.edu/playlist#c,d,Computer_Science,EC...
The longer one is "probably brush up on formal CS stuff before you start going to interviews, but you're probably fine in this hiring environment."
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)
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.
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.
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.
To be honest, now that you've actually called me on it, I think that those are really just surface concerns. I think my real concern is more about being able to cope emotionally - I've seen multiple discussions here about significant depression symptoms in startups.
I worked as a developer for awhile so I have some money, and now I am bootstrapping some stuff and I have hired another dev and we also do contract mobile work to supplement. We outsource most of the design work. I have been doing this since around May and I need to check the finances but I am either slightly in the black or slightly in the red(this includes my living expenses). At the current revenue I have a runway of like 50 years though so I'm not too concerned.
We have a bunch of cool stuff cooking in development and have partnered with some other companies on some stuff so hopefully we can stop the contract work early next year.
These kids doing all these startups with little runway, no clear method of generating revenue and basically no experience out in the valley are crazy imo. I think the only people making real money are the VCs and a very few lucky founders. It kind of seems exploitative to me but I'm not out there so maybe it is much better than I think.
You need to learn the basics. Use C/C++, learn why Java is crap and why PHP takes up too much memory. Make sure you get a few Signal 11s and learn what you did wrong. How do you protect yourself from it next time?
The particular choice of languages is irrelevant of course. The point is there is a lot more to software development than hacking out code. There are principles of development. There are advantages/disadvantages to each of the tools we use. There are mathematical underpinnings of data structures. A brief understanding of it all is important. A deeper understanding may be required.
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.)
It was a #1 best seller for a few hours in its category.
Been there, done that...ready for bigger challenges...
When I hit the site first time I got "banner-widget.php out of memory" or something :P
This answer on Quora summarizes the general topics to look into: http://qr.ae/1h6xx More thorough summaries can be found here: http://www.starling-software.com/employment/programmer-compe... and here: http://matt.might.net/articles/what-cs-majors-should-know/
I have no doubt you could get a job, the question is, can you get one doing what you want that pays what you want
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.
Pretty much like every legacy project I've ever touched, wrote by people who got the job. Sounds fine for me.
If you've gotten any sort of software project to work the way you wanted it to, which it sounds like you have, I doubt this quote is true. Any company worth working for is more interested in hearing/watching you break down problems into pieces and describe how to solve them. Often times this can be done in 'pseudo-code'. If interviewers are going to nitpick your code for trivial syntax issues (i.e. things that can be fixed with 10-seconds of google-fu), there's a good chance you won't want to work for that company anyway.
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.
Then again, can you FizzBuzz? :-)
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.
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.
However, if you try to just freestyle even a medium sized project without any knowledge it will become unmanageable in only a few months.
Most things you can just learn to do by doing plus some google, but there are better ways to do a lot of these things and you should at least try and do something like program chess in C++/C#/java/obj-c with OOP and inheritance. It will significantly speed up your ability to do subsequent projects and increase the scope of projects that you are capable of doing.
That said, most software engineers in the world do not work for big-team, Computer-Science-heavy software companies. They work everywhere building internal software to support the business in various other fields. However, finding or selling to these companies might be more difficult as an individual freelancer, as they might not even realise that their work could be optimised with software.
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.