I actually did that. I left a well-paying job for a slightly less well-paying job as a very junior developer.
There are definitely challenges. There's a ton of stuff to learn, from programming technique and style to version control to team planning strategies.
Probably the biggest thing I wish I'd been able to learn in school was about what it means to deliver. There's a world of difference between knowing that I can solve a problem and being able to realistically estimate the time it will take me to do so. Especially at the beginning, I lost a lot of face by saying I could do things that I couldn't.
There's a similar gap in expectations. There have been a lot of times when I've sent something into review that I thought was exactly what I was supposed to deliver, only to have to redo it later. I had to learn to ask for feedback early and often. It's also much harder than I thought to differentiate between implementation details and details that will be significant either to calling code or to my ability to build out features later.
Probably the hardest thing, though, has been the feeling that I might not be able to overcome the perception that I'm not good enough to be given important tasks. When I think about it rationally, I can satisfy myself that I am getting better and better assignments, and I'm showing I can get them done. But it's sort of demoralizing to feel like I have to prove myself all over again.
So those are the tough parts. Honestly, I still feel like it was one of the best decisions I've made. There is no way I would have been able to learn this fast or this much without the kinds of colleagues, mentors, and especially problems this experience has given me.
This really resonated with me - thank you for posting it. If you don't mind me asking, what convinced your future employer to give you a chance? (and/or what convinced you that you were ready to take the plunge)
I'd known for a while that the job I was in was a dead end. I was taking a lot of online programming courses and geting involved with local meetups, etc. When a friend who'd ended up in a non-programmer role at a tech company offered to put in a good word for me for a poorly-defined 'assistant' position, I went for it. I was honest about my skill level, and it turned out that there was a lot of work that anyone sufficiently interested could do. It was a lot of pretty boring stuff at first, documentation and testing, mostly. But there's always some small project that falls exactly in the 'inexperienced new guy' sweet spot--something that everyone wants, but can do without, and no one has time to write, or else something that some manager has asked for that a project lead doesn't want to waste developer time on. After I did well enough on enough of those, the requests to do the more boring things got fewer and farther between.
In general, my job search strategy has always been to look at opportunities orthogonal to my field. I didn't look for software jobs per se--if I had to compete against CS degrees I'd have been a goner. Instead, I looked for positions where I could use the knowledge I had as a multiplier for my productivity doing something else.
It also really helps that the market for good devs is pretty competitive. It means that once you're in and you've proved yourself a bit, it's easier (and often less financially risky) for your employer to take a chance on your ability to learn than it is to hire another dev when something needs to be done.
But as I said before, this approach sort of kicks at least one can down the road; if you start off at 'assistant' level, it's hard to move up in people's perception.
I actually did that. I left a well-paying job for a slightly less well-paying job as a very junior developer.
There are definitely challenges. There's a ton of stuff to learn, from programming technique and style to version control to team planning strategies.
Probably the biggest thing I wish I'd been able to learn in school was about what it means to deliver. There's a world of difference between knowing that I can solve a problem and being able to realistically estimate the time it will take me to do so. Especially at the beginning, I lost a lot of face by saying I could do things that I couldn't.
There's a similar gap in expectations. There have been a lot of times when I've sent something into review that I thought was exactly what I was supposed to deliver, only to have to redo it later. I had to learn to ask for feedback early and often. It's also much harder than I thought to differentiate between implementation details and details that will be significant either to calling code or to my ability to build out features later.
Probably the hardest thing, though, has been the feeling that I might not be able to overcome the perception that I'm not good enough to be given important tasks. When I think about it rationally, I can satisfy myself that I am getting better and better assignments, and I'm showing I can get them done. But it's sort of demoralizing to feel like I have to prove myself all over again.
So those are the tough parts. Honestly, I still feel like it was one of the best decisions I've made. There is no way I would have been able to learn this fast or this much without the kinds of colleagues, mentors, and especially problems this experience has given me.