I'm a data scientist and I do pretty well for myself -- I'm involved with local meetup groups, have given talks, helped to organize conferences, etc.
It can pay well, and I enjoy it a lot, but I'd like to offer a realistic take on it.
- It can take quite a while to find your first programming job if you're unlucky, can only manage to study part-time, or have some other constraint. I know a guy with a literature degree who got a fantastic gig after leaving his awful call center job, and I know a guy who left a quantitative Ph.D and is struggling to get any calls back.
- Front-end web development moves really quickly, and you'll spend an inconvenient amount of time learning whatever the cool new tools are, even after you've got a decent resume. I love my job, but at the same time I also want to have time to spend with my friends and my girlfriend, keep my place habitable, stay fit, and just generally have a life outside the computer.
- It trends on the younger side; I'm in my early thirties and I'd like to move to a bigger company in five years or so. I'd like to start a family and maintain a calmer 9-5 work/life balance around then, and I'd rather not compete with younger tech bros who are fine with working longer hours for less pay when I'm pushing 40 and have a kid or two. Downside to those bigger companies is they prefer hiring people with more traditional backgrounds; a bachelors or masters in CS, math, physics, or electrical engineering, etc.
If you're up for it, here are my recommendations on starting. These are more or less the steps I took to transition from my Excel jockey job straight out of college to a data science/software engineering career:
I would learn
Python. The reasoning for this is that it's popular, used everywhere, and very readable. I would describe it as being the second best choice for anything, at absolute worst*. People I've taught have agreed that Python is easier to get started with and a little more understandable than Java. Java is a good language and has some stuff I really miss when I'm programming in Python, but
WORK ON ONE LANGUAGE AT A TIME!. I've seen so many people try to learn 2 or 3 languages at once, or vacillate on whether they want to learn Python, Ruby, Java, or Go, and make no progress over a year. It takes at least a year, probably more like 2, to stat seeing the commonalities between different languages and pick up a new language quickly.
I taught myself Python many years ago with a freely-available online book called
Think Python, but
Learn Python the Hard Way is also good, though no longer free. People I trust have recommended
Automate the Boring Stuff With Python to me too. There's also an official tutorial on
Python.org, the official Python web site.
Also get involved with local tech meetups. Pretty much every city has some. It helps with networking, learning things you wouldn't know otherwise, and getting over the anxiety of doing something big and new, like a career change.
Throughout this whole process, don't be afraid to ask for help. People on Stack Overflow can be curmudgeony, but it's getting better. Reddit and Twitter are also good resources. You can PM me too. There's a huge index of Python talks on
PyVideo (disclaimer: I'm friends with Paul Logston, the maintainer of PyVideo), and many of them are in different languages if English is not your first tongue. Not to mention YouTube.
Also, storing code on
GitHub (version control; basically records the history of your code) is very useful, especially if you use multiple computers or similar. Many employers look to see if you have some level of activity on GitHub. I wouldn't worry about it too much, but having something on there is helpful.
Keeping a tech blog helps both with your own understanding and for potential employers. Just posting regularly helps. WordPress is fine, but if you're patient and willing to dive in, you can use
GitHub Pages, which is free.
This post has gotten pretty long, but I have more to add if there's any interest. Should keep anyone starting from scratch busy for a month or two.
* outside of a couple really specialized things you are unlikely to be working on (like anything that needs to run in real-time, i.e. embedded systems).