Recently, I've seen people discuss on Twitter about whether a college degree is required to get into a tech job and if having one gives you any competitive advantage over the self-taught ones. I believe I can add a cent or two to that discussion. I am going to tell my story and experience so it might encourage others.
I am a self-taught developer working for around 7 years now. I don't have a computer science degree or not even a bachelor's degree for that matter. In my observation, a college degree is not mandatory to get a job in the tech industry but having one will be helpful in various situations.
I am from India, so my experience related to jobs and hiring is mostly based on the Indian job market. Your country's job market might be different.
- You won't have a student loan and don't have to run every day to repay it. It can be daunting from my personal experience and from some people I know.
- You don't have to spend X years of your life studying for exams and those years might actually be a head start for your career.
- College degrees are becoming less and less relevant to the actual things you have to do on the job. So it is not assured that you'll land a job offer after finishing your degree or you'll be employable.
- Companies may not hire you for not having a degree. In India, a lot of companies won't consider candidates without a college degree regardless of their skills or experience. This will limit your choice to startups and mid-sized companies.
- You might sometimes find it hard to understand the concepts related to computer science. It is not impossible to learn them on your own. You need to be self-aware of your gaps and constantly work on improving them. For example, I had trouble with understanding the big O notion which is used to measure performance of the algorithms. I still have troubles with data structures and algorithms. It is possible that you might face similar issues.
- In my personal experience, people tried to take advantage of me in negotiations. Since getting a job without a degree is pretty rare in India, they might have thought that I didn't have any other choices.
- People are saying that your academic qualification is taken into account when validating your VISA applications. My US VISA (B1) application is rejected twice. but I'm not sure that's because of my educational qualification. It is not an official statement from US embassy, it was just response of some people when I asked about the possible reasons for the rejections.
Those saying a computer science degree is required to be a software engineer are likely to be gate-keepers. A degree has very less effect on how great a developer can be. Computer science and Software Engineering are two different things and having a degree might help but it is not a precondition to become a great developer. Remember, most of the real learning happens in the job. I know a lot of great devs in both category and vice-versa. Having a degree alone will not make you a great developer.
It is not very easy to get your first job without a CS degree. I had to take an internship without a salary for a few months and then I was paid a little stipend, only to be fired after 6 months. But It wasn't hard getting another opportunity with that little experience. From this I learned that acquiring real work experience is invaluable when compared to a degree.
Once you got your first job and gained some considerable experience, not having a degree will become less relevant. If you can spend the time and money on education to get a degree, go for it. Things will be much easier if you have one. But If you are not in a position to do it, consider putting some hard work in building your portfolio, and start applying for jobs.
Don't assume you'll have to know everything on the job description to be able to apply for the job. Companies will always be ready to negotiate on technical skills because it is easier to train people technically. When I applied for the internship I know next to nothing about coding, and I was selected.
I mean no disrespect to the universities or their curriculum, but after all these years we should really start questioning the relevance of teaching COBOL in universities (They taught me in Madras University). This is mostly from my personal experiences and I would love to hear your thoughts about it.
You might feel intimidated by the things you don't know when compared with your colleagues. Imposter syndrome kicks in and you'll panic that someday they'll find you that you're not good. The little secret is your colleagues might also feel the same way. Our industry is filled with lot of smart people and insecurity comes bundled with intelligence. Try to use imposter syndrome and try to learn the following concepts as you gain experience.
- Data structures and Algorithms
- Different programming paradigms such as OOP and FP
- Design patterns
- Big-O-Notion (this should be part of #1 in my understanding)
- Memory management
- A low-level language such as C
- Software development life cycle
- Agile methodologies
- Different estimation techniques
- Different kinds of testing (Unit, Integration)
- Relational databases
The above list is based on my experience and personal understanding of my week areas, as you grow into your career you should be able to identify and prepare your own list. In the above list, no one is going to be needing most of the items for their day to day job. But in an ever-changing industry, having a solid understanding of the basics is necessary to keep yourself open and flexible for any situation.
I hope I told everything I had in my mind related to this topic. Do you have a degree or not and what's your story of getting into the tech industry? Danny Thompson recently had an interesting thread of self-taught developer's story. Check that out if you're interested.