As you might already know I have a formal education as a developer, as a matter of fact I graduated just about a month ago. If you wonder how that is possible since I have only been programming for two years – well, I did a vocational education also called trade school. It’s a 2- 2.5year education focused on a particular trade.
Before that I got my bachelor in clinical nutrition and dietetics, and had gone half way through my master in public health. Before that it was nutrition, sports nutrition and natural medicine.
Before that personal trainer (not university as you can guess), before that had to do high school on my own after being kicked out for low attendance and questioning my teachers, before that private school at a school for special children called Steiner School or Waldorf school.
My relationship with institutional education is complicated and my feelings are mixed when I’m being asked whether or not I recommend it. And my personal story has a lot to do with it.
I would like to start off by answering the second question first. Do I need a formal education to get a job? Generally it depends, for some professions such as doctors, or like me clinical dietitian- yes. Will it guarantee you a job? No. The universities won’t tell you that but I will. Many university students graduate to the painful reality that there are no jobs for their chosen profession, and that for many professions a degree was never required or expected. And to some degree that goes for computer science as well. Where I live in Sweden education is rarely mentioned in job ads for developers, and although it might be valued at companies where you will be working as a consultant and will therefore have a consultant profile to sell your services my impression is still that knowledge and experience is more valued- not so much how you got it. Some companies, in particular smaller startups will prefer self-taught developers (I’ll get back to why later).
Out of curiosity I did some qualitative and quantitative research on job ads in US versus Sweden to see if there was a difference, and I noticed two things:
– in US experience was measured in years often with specific requirements
– in US a formal education was a requirements in 80% of the adds versus 30% in Sweden
Keep in mind that unemployment in Sweden among developers is low and demand is high, and that job ads are generally more person centric due to the political orientation of the country.
Does that mean that I would say get a degree for a job in the US? And don’t waste your time in Sweden? Nope. If you are a passionate developers with knowledge that can be proved (open source code, technical content, applications etc.) and you have good social skills and know how to sell who you are and what you do you will be able to get that job. A degree can come in handy, but my experience has been that things I mentioned will be more valuable, both short and long term. So don’t go to school just to get a piece of paper. I would say that attitude is not one you want to nourish, and with the great teachers and classmates I’ve had I would also say a bit disrespectful.
Question then remains, why should you go to school for programming? Should you? And why did I?
My main reason was that I honestly had no idea where to start. I started beyond zero. Had no computer, knew no developers, and had no idea how code looked like. What I did however know was: (and I did make a list)
1. I didn’t want another long uni degree- my student loan is massive and I can’t afford mentally or economically to not have an income for another 5-6 years
2. Didn’t want more talk with no action (I wanted hands on learning)- I’ve always had a hard time just sitting quiet and let somebody feed me information. I like doing things and interactive education.
3. I wanted to learn something that was actually being used in real life. I learned so much in my previous education that I will never ever use (or forget by the time I need it) but that is in the curriculum out of tradition, and to keep up the prestige of degrees
4. I needed good guidance- I wanted to have more than teachers. I needed mentors, friends, and colleagues. I’m not 12 years anymore and I was reluctant to be treated as a dumb student- I wanted to be equal.
5. I also wanted the social aspect. At university I loved the social aspect and wanted to keep that. I realized that I learn better through my classmates and the interaction than from the school books or teacher.
So I ended up with vocational training/education. My biggest concern with universities is the time it takes and how they have a waterfall methodology over them. A set of requirements at the start, and a delivery at the end that might or might not be what is in demand. Technology is fast paced and agile by nature, so should the education be. On the other side, it is easy to skip the boring basics and important underlying theory. Without it you will only get so far. Learning that later on yourself is hard and requires a lot of discipline, time and honest interest. The positive is that there is no spoon feeding and makes you more competent to further plan and learn without relying on a person or institution.
Bummer was that we didn’t cover a lot of theory, almost none at all. So understanding advanced math, how computers really work, testing, version control, the categories of languages and frameworks and so on- that had to be learned on my own time. It’s hard to make sure you cover everything, but if I was doubtful I just had to ask my teacher (who worked as a consultant and could guide me on what was needed for work), or look up the curriculum at the university for CS. To be honest I still have work to do on my math skills, testing and learn more about computers. ON the other hand we did cover design patterns extensively, no SQL DB’s, ORM’s, SOLID principles (quite detailed) and more. These are things I’ve noticed CS students were unaware of from their CS education, but it might just be that one uni, or the few I talked with.
Basically what I am saying is that you will miss out on some things regardless of the schooling you choose, be that self-taught, trade school or university. You just have to be aware of what you don’t know, and what you need to know and how to prioritize. And that is when a good network comes in handy. Find that network online, at school or at work. But find it. And it’s a network because it should consist of several people, not just one.
Back to the list.
2 and 3 are also two concerns with schools. If you are looking for your first paid job actual projects that apply to real life projects will most likely be valued over a degree. Many schools will give you projects like that, and if they don’t I would say it is up to you to demand that, use your creativity and package a project like that, or go ahead and do them on your spare time. And make sure you do some with other people, school or no school. Proof of communication and successful team work is appreciated.
Let’s talk about number 4. With school guidance is hit or miss. If you get a poor teacher you can’t do so much about it, other than trying to inspire the teachers to change, or ignore it and go ahead and fins out information on your own. On the other hand teachers have experience, subject and teaching, are doing this as a job and have therefore (hopefully) the time. Although I was very happy with my teacher Mikael Freidlitz I took it upon myself to learn things we wouldn’t cover, seek out second and third opinions and asked for additional assessments and projects. Learning has two parts, the teachers responsibility and your responsibility. A good teacher helps you seek out questions rather than just provide answers and teaches you how to learn. This is the concept of a mentor, and those can be found also outside of a classroom and all developers should have several, as well as offer mentoring.
Good guidance can be found in a classroom, or outside. As long as you make sure you ask a competent person, and then check the information with a few more, it doesn’t matter if the person is a teacher by profession or not, or whether you are a student or not on paper.
For me number 5 is the single most important reason for recommending institutional education. The support, the ambiance, the problems, the solutions and memories that come from being a part of a class are irreplaceable. With that said, they can be made outside of a classroom setting. But I’ve noticed many ignoring those very important lessons and skills. You can of course also ignore that in a school setting, but it’s harder and those skills are often taught without you noticing.
A sixth point, that I discovered later, is that I needed somebody to believe in me and to make me believe in me, with an emphasis on the last bit-‘make me believe in me”. That is what landed me all my jobs and opportunities.
At the end of the day you need to find what will best enable you to teach you what you need to know, with a good network of mentors to guide you on what you need to know, a bunch of friends and strangers to put together actual projects with, and people you can mentor and pass on inspiration and information.
School might be a good place to find several of these things, but there are no guarantees and there are no shortcuts. Invest your time wisely, it’s the most precious thing we got and the one thing we are guaranteed to run out of.
For me the solution has been a combination, I study at a school as well as on my own and I’ve found the two to complement each other rather well. The mentors, the community and the pride and confidence I get from taking responsibility for my own continuous learning is irreplaceable. Just make sure you cover the ‘boring’ basics AKA theory. Some things you just should know, as with physiology for a surgeon. It might not be fun, but screwing up big time because you don’t know them will be even less fun. As for what the ‘boring’ basics are, that’s a whole other blog post 🙂
So, self-taught or not? What is your recommendation?