A lot of software developers don't get into it from college. I was one of those.
Long story short, I went to college to figure out what I wanted to do but ended up blowing all of my money and returning whenever I saved up enough to continue. (There was no way I was going to take on student loan debt when I wasn't even sure why I was there to begin with!) I did this until I dropped out three times, having taken about two and a half years of schooling.
During the entire time, I had a retail job that I stuck with. When I wasn't going to school, I would work on technical projects online—some of these projects resulted in small contract jobs. Eventually, I got enough of a portfolio built up where I felt like I could apply for a real full-time job. One night while browsing Craigslist, I saw a job posting for a junior developer position with a small company a few cities away. I applied and landed an interview. Even though that was a bit nerve-wracking, I ended up getting the job. Right away, the pay was enough for me to shelve the idea of returning to college.
The junior developer position had some challenges, but I learned a lot very quickly about how systems were set up and configured, why certain technologies were used, various intricacies of programming, and so on. There was a lot to understand about how software works in a professional setting that I hadn't read about in books (or at least from what I realized).
Before long, I saw that the way to advance was to gain enough experience as possible at the current job, then jump to a higher position in another company. I did this a few times and am now in a pretty decent spot.
Each morning, I hop onto our in-company chat application, then go through my email inbox and get caught up on all of my updates. If nothing is urgent, I go to the sprint board where our team has all of our tasks laid out, then pick up whatever I'm supposed to work on.
The problems that I solve are incredibly varied. At any time, I can be writing unit tests, working on performance enhancements, writing documentation, or holding meetings. Despite that, it's typically not very stressful.
Contrary to what programming is all about, a lot of the work deals with communications between team members. Working on a platform, whether it's fixing bugs, reviewing code, refactoring, or building something new, there are often a lot of meetings or conversations that need to take place to make sure that everyone involved is on the same page.
There are two great parts about being a software developer: working on challenging technical problems and working with brilliant people. Regarding the latter, one colleague put it nicely: all of your teammates' areas of knowledge can be plotted on a Venn diagram. No single person ever knows everything, and everyone always has something that they know or understand that the others do not. So there's always room to learn and grow. There will also be plenty of opportunities to play off of each other's strengths.
You may be great at software development, but corporate culture will also play a major factor in your success. No two companies are the same, but different companies will hold different values and operate in their own ways.
One thing that is pretty common across companies is the possibility of being pigeonholed. If you take responsibility for some aspect of the job and do it well, your contributions and successes can go unnoticed. It reminds me of the scene from Futurama where Bender meets God, who tells him, "When you do things right, people won't be sure you've done anything at all." I've seen it happen to colleagues and have had it happen to myself. This isn't just a software developer's problem, though. It's ubiquitous.
As a software developer, your skillset will always have to perform a balancing act. If your company sticks with old tech or if you don't pick up new libraries and languages regularly, you run the risk of growing stale. On the other hand, if all you do is chase new technologies, you'll never get to develop anything that works for the long term, which means you can't easily measure your success.
Software development can also lead to having an existential crisis. This is because in the 90s and early 2000s, young computer nerds would hear stories about the humble beginnings of tech giants today and become inspired to create a hugely-successful project of their own. Even today, a lot of software developers talk about writing code to make a positive social change or make the world a better place. But the reality is that you'll probably be working on something with a niche interest that serves a function that you yourself don't have any passion for. There's a lot of hype for what ends up being something completely mundane. If you understand that this is a career and probably not your vocation, then this might not be a problem. But I thought it would be worth mentioning since I've had so many coworkers before having delusions of grandeur about what they're working on and end up burning themselves out for no gain of their own.
While on that topic, burnout is a real possibility. Some developers, either through managerial pressure or through their own wills, will decide to put in extra hours (or even days), just to get more done. This often leads to burnout because these developers don't realize that they will never run out of things to do. Also, if a team has over-committed to what they can actually deliver, then that's on the manager, not on the developer (unless the dev was screwing around instead of working, of course). This can make a dev feel obligated to put in extra hours, which results in additional stress and not much work getting done.
If you want to get into software development, the obvious thing to do is to aim for a junior-level position somewhere. When you don't have any working experience, you will want to add any relevant classes you have taken or any technical projects that you have worked on to your resume.
For me, I started out doing small contract jobs. I created websites and software in my free time that I would post publicly online. Then, when applying for a full-time software development job, I'd look carefully at the job description to see what kinds of skills they were looking for. Then, I'd list out my projects with bullet points, wording my accomplishments in ways that related to the posting.
For example, if a job was looking for PHP experience, I would note that one of my sites was built in PHP. If they emphasized teamwork, I would mention who I collaborated within a past project to reach success along with what that success looked like.
Sometimes, potential employers would ask for really particular things. In one case, I was asked if I could write a bot that would automatically post to Pinterest (which is quite hard since they have a lot of automation detection mechanisms in place). I said that I could since I had experience with web scraping and even did some headless browser automation before in NightmareJS for a personal project. That was enough to land me the gig.
Finally, don't get discouraged. You might not get a call back about a job. You might even make it far into the interview process and then get turned down at the final stage. These things can and will happen. Just remember that it doesn't mean that you're incapable of doing the job. It just means that the company felt that you weren't the right fit for them at that time. That said, you may want to consider what factors contributed to you missing the opportunity and recalculate your aim for next time, but don't dwell on any shortcomings. Keep trying until you get something that's right for you.
Super informative, thank you!I'm curious how you determined if being a software engineer was something you would enjoy?
I've played around with Codeacademy a little bit, but I want to make sure this is something I can do everyday before spending a decent chunk of money on something like a bootcamp.
Hey, thanks for the question! It was pretty gradual to know whether or not it was for me. Starting out, programming was certainly a hobby. But I didn't jump from that straight into full time development work. At the time, I simply wasn't sure if I was ready for something like that since I didn't know what to expect.
The contract gigs that I landed helped me to understand what the work would be like. The good part about contract work is that you are hired to solve a particular problem and nothing more. Usually, there are well-defined boundaries around what's expected and when you will be done. The only parts that really caught me off guard were the non-tech aspects, such as how I should track my time, keep the client updated with my progress, and even how to create the invoices to send them. Luckily, those were small hurdles.
Without landing a full-time job first, I think you could get some similar experience by working on a project that has goals and deadlines. It would be a good idea to find a mentor or colleague and work with them on a software project. If you have an idea of something you want to create, then you should plan out how you will build it. Organize the different parts on a schedule and try to hit your goal. (And if your mentor is experienced, they may throw you some deliberate curve balls.)
You might be able to hone your skills by working on open source projects, too. Those will give you something closer to a real-world exposure to things like version control (particularly git) and ticketing (commonly referred to as "issues" on a project's repo). That experience is valuable, but the leaning curve is a bit steeper if you haven't interacted with those things yet.
Also, depending on how far along you are in your learning (which really doesn't have to be terribly far), you should seek out an internship with a local software development company. A good internship will give you adequate exposure to what the job will be like. Not only will you be working in a real-world scenario, you'll also be able to observe and interact with seniors who will be able to offer you guidance.
That said, if you can't find any appealing internship opportunities around you, look for any tech companies that are nearby. If they are working in an industry or on a project that sounds interesting, shoot their human resources department an email and see if they have any plans for setting up an internship program. In my experience, a lot of companies will at least talk about setting up an internship program at some point. Sometimes, it's just a matter of them keeping the ball rolling.
Finally, every company operates differently. Whatever experience you have at one place, the next one will be different.
I hope this helps. Let me know if I can clarify anything.