Stupid Question 220 and 221: Should I go to school to learn programming? Do I need a formal education to get a job as a developer?
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.
Graduating as a developer a month ago
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.
Graduating as a clinical dietitian with my bachelor in clinical nutrition a few years back
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.
I was a very (I’m the one with lime green dreads/braids) difficult teenager, and disliked not being able to question what I was being taught
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)
- 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
- 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.
- 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
- 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.
- 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.
Most stuff you need to cover yourself, and you have to stay up to date. This was my reading this summer at the beach :)
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.
The social mashup application our group did had to be strict MVVM pattern, and we were not allowed to use any external frameworks.
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.
One of the first school projects, an image editing application
One of the first school projects, an image editing application
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.
I’ve found many good teachers and mentors through Pluralsight (staff and author dinner, I was so happy to be invited and had an awesome time)
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.
I celebrated my brithday at a hackaton and the dev Jessica Engstrom made me the best cake ever! By far the best birthday I’ve had, with awesome people.
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?
Leave a comment (via email)
Very nice post. I pretty much agree with everything you mentioned. I especially like that you stressed the point that with either path one still needs to be involved enough. Expecting to be spoon fed is definitely the wrong way to go in the tech world. For me personally: I began coding in my early teens, and went to college for a Computer Science major because I liked coding. What I didn’t know/realized at the time is that Computer Science is a lot more than just coding. Fortunately for me, it just happened that I loved computer science. The advance math that you mentioned, probabilistic models, compilers, simulator theory, operating systems, the math behind computer generated images, etc. It is true that most of that knowledge did not get applied directly in the real world. Asked me how many times I’ve had to write a full blown compiler, or operating system However, I have noticed that the foundation that I built with that education has made it easier for me to absorb/learn new technologies throughout the years. To reiterate the point you made, it doesn’t mean that I don’t have to make an effort to stay on top of things. After all these years (decades really), I still spend many hours a week studying/learning new technologies. So to answer your question: Self-taught or not? I think it’s both. Even if one chooses formal education. It will be imperative to always continue to improve oneself in a fast moving and changing world
It honestly depends on the person, their motivation, their commitment and what they hope to get out of the process. Can you learn how to program on your own or with mentors and peers rather than in a structured school environment? Of course you can. Will it be as effective as in a structured learning environment? that's entirely an individual thing. For me, I view structured learning in schools and certificate programs as a way to learn, practice and develop "inductive" skills, those skills I'll be able to draw upon later to inform what I do. It also gives me the opportunity to learn from others and get their ideas and input. Learning on my own, I limit that level of interaction. I also have open as much latitude to what I do as I'm willing to put into it. If one is incredibly self motivated, or wants to do something that is well out of the norm of structured coursework, there's a lot that can be done with personal exploration. Still, there's just something about getting together with a bunch of people and hammering a class and seeing just how well you can do :).
I am following a similar path. Taking evening classes and reading books at the same time to fill the gaps or to further enhance the knowledge of a certain topic. Even though books and video's are a good source of knowledge, there is no substitute for interaction with a teacher. Books don't help, when an error appears and you have no clue what to do about it. I have respect for those that are self thaught, because they tend to have a good grasp on the technology they learned, because of the long path of 'trial and error'. But I'm sure many of those would have been even better with some sort of formal education. I just wish I had the same amount of time like you, to go to school and learn new and exciting things. Work and family tend to take up a great deal of time :) But I won't give up,and keep on working.
Thanks for sharing your opinion Daniel, and that is an important point I didn't mention in the post above. I have noticed a difference in pay with some developers- but not all. With time we might get lucky and get to the point where what the person knows is more important than the papers, and that we have a fairly accurate way of measuring that :)
Couldn't agree more with you! And as you said, and I should add this and highlight it in the post, education (should) teaches you how to learn and builds and important foundation.
Yup, very true! Being self-taught is kind of a cool thing now and unfortunately many do it even though they have no plan or goal in sight, or the right tools. When you don't know what you don't know you tend to think you know it all, and those people are those that struggle the most to learn new skills. Here are some two interesting studies on that topic: Unskilled and unaware of it: How difficulties in recognizing one: http://psycnet.apa.org/?&fa=main.doiLanding&doi=10.1037/0022-3518.104.22.1681 Why people fail to recognize their own incompetence: http://dx.doi.org/10.1111/1467-8721.01235
Its true that you lack the teacher interaction with tutorials, videos and books, but today it is very easy to get a hold of the person who created that content. I've contacted every single author on Pluralsight with questions, and also book authors, and always got great replies and help. Some wont be able to help, or wont reply, but the same goes for teachers. You might end up with lazy teachers that wont help you. The key is I guess that you have to make things happen, be that school or not. As for time, we do have the exact same 24 hours in a day. I work fulltime as a developer, and I work halftime a technical evangelist for Telerik- and that means I travel at least once a month. I study fulltime, and I organize a bi-weekly usergroup and attend UG's and conferences once a month, I work out 10-14 h a week, and I blog almost on daily basis. Most my spare time is spent with family and friends, and I find ways to combine the things I love with the people I love. So I like to believe that I have a fairly tight schedule, so careful what you wish for. I doubt many people would like to have my schedule ('I just wish I had the same amount of time like you'), it works perfect for me and I'm very happy with it- but everybody has to find their own perfect solution, and working more and harder is not the answer. What I've done is: 1. Talk and plan with family so they feel involved in my plans and that they have a say. 2. I teach friends and family what I do and that way I can learn new things while spending time with them. Be that making an app, looking at how hardware works or playing with robots and motion tracking devices. Here is mu mum making an app: http://www.irisclasson.com/2013/05/13/mum-makes-an-app-with-icenium-and-kendo-ui-mobile-github-part-12/ And evidence of my grandmas app (not submitted to the store yet) http://www.irisclasson.com/2013/05/20/requested-dancing-grandma/ 3. At work I always have a list with conference, pluralsight and channel 9 video to watch on a third monitor when I do things that don't really require a lot of attention (emails, paperwork etc.) 4. Whenever I have a problem or a nice solution I take screenshots (work or school) and directly upload as a draft to my blog. Questions asked at school or work often end up as question of the day on the blog. Livewriter works awesome as I can work offline and publish later. 5. I watch Pluralsight tutorials (dowloaded for offline viewing on my surface or ipad) while I do my cardio at the gym, or I'll use my phone for outdoor workouts. 6. Whenever there is waiting time (doctors, public transport etc.) I use OneNote or office to work on school assignments, read books (e-books) or plan a presentation. 7. I listen to podcasts while I cook or take a shower/put on makeup (I have a bluetooth system in all the main rooms at home=. 8. I've discussed with my boss my professional development plan and have been allowed a few hours each week to study, plus we do a few hours together on fridays where each dev teaches the others something cool. This is a practice I would recommend all workplaces. 9. I joined the school board so I get better control over what happens and I also get to learn from the other board members that have long and good experience. 10. I always spend my lunch either a) working out watching a video, b) eat with a friend or stranger and learn from them. There is nothing more flattering than asking a person to share their knowledge, and there is nothing I love more than to hear others tell stories or share what they know. I have plenty of more tips, but I probably should make it a separate post ;) But hope these help.
I am self taught but I have a technical degree (EE) which possibly helped for a while to get my foot in the door of some positions - which segues to the issue of developer job postings in the US; a lot of the postings are one or more of the following: a) Just a requirement someone put in there because they were told to or thought it might filter some submissions - but it is either not a requirement or not a hard requirement. b) A lot of the posted education requirement state "or equivalent" which almost always means "if you have enough experience of the right type we will substitute it for education" - the substitution ration is usually 1:1 years. c) They want some kind of college education and care less about what kind it is than that you have something. I know a lot of developers with math degrees, philosophy degrees, or related tech degrees. d) It is rare, but there are a few orgs that have a hard rule about education requirements (i.e., no exceptions, no substitution) - and sometimes the rule excludes degrees from certain institutions (Boeing is one of these - at least the last time I heard). Often this is due to the org being government, government contracts or other issues where the org wants to protect itself (Boeing probably doesn't want to get sued if their flight control software fails and it is discovered that the person who wrote the software didn't have a degree). In short, I wouldn't put too much stock in what a US job posting states - they are often more flexible than they appear. Beyond that, after a number of years (5 to 10) education becomes less and less relevant, with some people removing their education from their resume at that point. A lot of employers, especially startups and leading edge software tech orgs, prefer someone with good experience and no education over someone with a PHD and no experience. Being self-taught, I would have preferred to have the education in s/w dev; I am sometimes held back by not knowing some theory. But most of the time the theory that I need to know to do my job is something I can pick up off the internet easily enough. In my experience I will prefer working with/hiring someone who has good experience and a sharp mind over someone with a relevant education and little experience - two of the best devs I have worked with had no education beyond high school, one was hired while still in high school - some of the worst devs I have worked with had decent relevant degrees, so in my opinion it really depends on the person; a degree doesn't hurt, but it will only help to the point that the person is able to make the best of it. As for experience, there is a lot of truth to the idea that some people may have ten years of experience but it is the same one year of experience over and over again - i.e., they don't learn anything or improve much after the first year, whereas some people continually learn and improve - so quality counts and much as quantity.
Why is this categorized as a stupid question? It seems legit...and yeah to stay on topic, I learned c# programming on my own. I learned arrays and basic stuff at school though.
I started asking the questions 'stupid questions' as that was what others called them when I asked. I truly believe there are no stupid questions, I wrote about that here :) http://www.irisclasson.com/2012/07/17/asking-a-stupid-question-every-day-for-365-days/ Thank you so much for the input!
Last modified on 2013-07-18