One of my friends wants to be a developer, he is currently starting his first year on university. He asked me if he really needs formal education to become professional programmer. This is a common problem for a lot of people. I am not talking about students that are just studying because of boredom or fun. Every student that treats it as an investment will ask this question sooner or later.

So Is this really a good idea to spend couple of years studying? You could be gaining work experience instead. There is a huge demand for experienced programmers. To be honest the answer is simple. Of course you can become a great programmer without education. You can be awesome self taught developer. That is possible especially when you are passionate about the work. You can be a lot better than former graduates. So if this is not a necessary ingredient of potential programmer, then why to study at all?

I want to tell you what I gained at university and why, I think that this was a great time for me. You won’t find definitive answer if you should study or not. You have to make this decision by yourself. But please "stay a while and listen", at least I will try to show you my point of view, I am sure that this will be very helpful.

I graduated from Wroclaw University of Technology. It took me 6 years ( I was studying one more year because of math, I wanted to be better at it :)). I was mainly studying electronic, but in the last 3 years I managed to learn a lot about programming, this was also enhanced by work experience. I started my professional career on 4th year. I was also lucky, because on my faculty there was a specialization that had a lot courses about algorithms, digital image processing, probability and image recognition. There was also opportunity to learn about high level programming. I had a lot of projects and posibility to select framework and language. So i tried asm, c, cpp, c#, java, python and more. I programmed micro controllers, dsp processors, desktop apps, web apps and some simple games iwth opengl and xna. As you can see I touched a lot of technologies. I just touched not mastered them, but this was really important to try a lot of different things and find something that, I am passionate about.

So first of all, while studying you will have opportunity to learn a lot of different things. You will gain general knowledge, that is a great basis for further development. It just like building the house. You can’t start from the roof. You need to start from the base of the building. At first you need to get concepts that are part of more specialized stuff. With the knowledge of the basics you will learn other stuff more easily.

While studying I had to read math books and analyse recent research documents to analyze new algorithms. What I learned ? How to read this stuff and how to analyze it. I learned how to read and filter out most important stuff. It will be a lot harder to get ideas behind garbage collection or oop, if you haven’t tried c or cpp, and you haven’t fought with memory leaks or procedural programming abstraction. It is also great if you know the concepts behind CPU and know how to program in asm. This gives you special perspective on whole industry even when you just want to programm simple web sites. After ccouple of years you will want to advance with your career and then this kmowledge will be crucial.

Programmer writes a lot of code but that is just a by product of his work, his main task is to think and find solutions, solutions that meet requirements while staying in constraints of available time and budget. You need to have a general knowledge about a lot of things in order to do this. Time when developer was only responsible for technical parts of the project are gone. In order to do your job efficently you also need business knowledge. Who is using your app? Why this product is usable to your client? What does he want to achieve with it ? You also need personal skills. That’s why, while studying you have to attend classes about negotiation, philosophy, marketing, communication. Don’t miss them. You need something more than just simple  key stroking on your keyboard.

Studying is hard. After middle school you are thrown into enviroment with hard amd unknown topics. There are lot of lectures, lot of new things and unfortunately you have less time available. You need to adapt and learn how to cope with this. This hard process encourages you to push your own limits and learn, for esample time management, time prioritization. You will also gain skills that will enchance yourlearning process. This will prepare you for job, because while working you also have to learn. Programmer knowledge has to be fresh. Technology changes faster and faster, and of course you will also have less time to learn at home (familly and kids). Studying is hard but hard is good. You will be amazed at the end, how proficient you are. How easily you are digesting informations and how you are able to filter out only important stuff that matters.There is also another aspect of university that is very important, People with passion. I was very fortunate to meet people that love the same thing, share simillar attitude. I was part of student’s .net group. There i found opportunty to learn people skills.

In the end Studying is a great time to transform from child to adult. To  learn about your future life and working environment. To find your passion. To gain good general knowlegde and find your passion. You can miss this and become awesome programmer but that is your decision to make.