Three and a half years ago, I got my first job as a software engineering intern at my current employer. At this point in time, I barely knew that Java was not only an island but also a programming language. I was coming from a complete different field of study, originally on my way to become a teacher in Germany. Today, I am leaving my employer, starting my second job as a software developer without a degree.
These are my learnings and tips for everyone considering going this path (especially in Germany).
Spoiler: I won't advise you to drop out of college and get into tech like so many people advocate. If you are twenty something most likely you should finish your studies or at least join a bootcamp, if this is possible for you.
No, not that kind of sponsor that gives you money and baseball caps. A sponsor is a person that believes in you and supports you. In Germany, getting into a company without a degree or anything to show off is near impossible. I was lucky enough to have a friend who offered me an internship position in his startup team, which was originally not even about software development. You will need someone who believes in you and supports you to a) get into the job and b) pull you through when you start struggling and questioning yourself. To get off the ground you might want to consider doing some work for little or no money to show off your potential.
You can only do so much to learn and teach yourself about software development. In my experience, the best software developers were those which were also fit to work in a team. You might be surprised, but if you support others and help them reach their goals, chances are high, they will pay you back with their help. There will be many questions and sometimes you simple might not know what search for in Google. Care for your peers and they will care for you.
At some point, some of your peers will leave the company, you get a new boss or just a new team member. Every time one of those events happen, your personal situation changes with it. You will have a hard time, if you are not able to adapt to new situations, so learn to embrace change and watch out for new opportunities for yourself.
If you take anything from this, it should probably be this. Software developers are knowledge workers. Every developer needs to learn new languages, frameworks or design patterns at some point. If you start with little to no knowledge in a team of peers that have some kind of education in software development, you will need to outrank them in your ability to learn something new. This seems hard (and it is), but if you manage to do it, it has the nice side effect that you will likely keep this habit throughout your career.
Just to be clear: this does not mean to work 12+ hours a day, but to improve the way you learn and work. There is a whole industry around productivity. Look out for ways to improve the quality of your work rather than the pure amount of time you work. Working 40 hours a week in front of a screen is exhausting. I have done the same mistake and I have seen many peers do it: working 60+ hours a week, because you just want to finish that feature or fix that bug. Get some sleep and take breaks and fixing that bug, which would have taken you four hours after a hard working day, might just be fixed in a couple of minutes the next morning.
Especially at the beginning of your journey the amount of frameworks, languages and design patterns seems overwhelming and staggering. While you probably will need to learn some framework for your job, focus your studies on fundamental concepts of software development. I was working for a company doing mainly backend web development, so I had to teach myself everything from HTTP over databases to a suitable language like Java. There are many great resources out there, but if you are trying to get into web development, I recommend taking a look at these developer roadmaps or your welcome to reach out to me. You will have a much easier time following a structured learning path than I had blindly stumbling from one topic to another and hammering my peers with questions.
As described above, you should pick a niche in software development. It is easy to jump from one broad topic to the other, because there is so much out there in surely a real developer knows everything about them, don't they?
As developers we all specialise in something and this is important. If you are looking for jobs, you want to differentiate yourself from others and most companies have specific requirements for the people they hire. There is a well-known concept among developers, which is called the T-shaped developer. It is based on the notion to specialise in one topic and then develop broader understanding of other topics around that.
Even though the mantra of developing a "get things done"-attitude seems kind of obsolete, it is not. If you take responsibility and commit to goals with your team lead, you do not only develop a better feeling to estimate the time of your work, you actually learn to "own" your work. There are only few things more rewarding than working on something that is actually yours. This can lift you through hard days when you may lack motivation and it will show your boss and peers that you actually care and they can rely on you.
To make this happen you will also need to let some things go and learn to prioritise. From my experience, there is no need for a super framework or tool to organise your work. I use very simple and effective methods:
Define long term goals for the next six months (you might want to look at SMART goals)).
Define your daily tasks on the evening before, starting with the most important to the least important.
Every morning, check if your tasks today are in line with your long term goals. Try to eliminate everything that is not.
Be consistent with your daily tasks but be flexible with goals, if new opportunities arise.
The hard part here is to really be consistent in prioritising the right tasks and then sticking to them. Defining my tasks on the evening before is probably the most valuable productivity hack. If you start planning your day in the morning, you are tempted to avoid difficult tasks.
One thing many people feel uncomfortable with, including me, is promoting themselves. As a software developer without a degree you will need to do this at least to some extent. You do not need to be a Twitter influencer with 100k followers, but you should make sure to always have an up-to-date LinkedIn profile , a GitHub profile with some projects that showcase your skills and a CV. I do like Twitter as well, since you can easily connect with people from the tech industry, but it has not provided any value in terms of getting a new job or project so far.
Setting up a small portfolio or blog like this one can also be beneficial. First, you have one platform that you own to link to all your social media accounts and promote yourself. Second, blogging about what you learn and do does not only help with promoting, but also with understanding more deeply what you write about. I am not super consistent with blogging so far, but every time I do, I am suprised by how much value I get out of it for myself. Third, building a blog can be a perfect sample project to showcase your engineering skills.
As I mentioned in the beginning, I would not advise you to take this path, if you have the possibility, time and money to get a proper education in computer science. Having a degree and something that proves your skills will make your life much easier and less stressful. But if you do not have that for any reason, it can be done and the job as a software developer can be very rewarding one, not just financially.
If you are considering a career in software development without a degree, I would love to know more about where you are at and I hope my learnings were helpful. Feel free to reach out to me on Twitter or via mail and tell me your story :)