Take the 2-minute tour ×
Programmers Stack Exchange is a question and answer site for professional programmers interested in conceptual questions about software development. It's 100% free, no registration required.

Do you think formal education is necessary to gain strong programming skills? There are a lot of jobs that aren't programming but involves programming, such as tech artists in games, fx tds in film for example.

I see similar patterns in the people I work where the best ones I have seen were self-taught, because of being artists primarily. But I also see that while the software, programming knowledge is varied and deep, hardware knowledge is very basic, including me, again due to lack of formal education.

But I also work with a lot of programmers who possess both skills in general (software and hardware).

Do you think it's necessary to have a formal education to have great programming skills? Would you think less of someone if he didn't have a degree in computer science, or software engineering, etc in terms of job opportunities? Would you trust him to do a software engineering job, i.e. writing a complex tool?

Basically I feel the self-taught programmer doesn't know a lot of things, i.e. not knowing a particular pattern or a particular language, etc. But I find that the ability to think outside the box much more powerful.

As "pure" programmers what's your take on it?

share|improve this question

marked as duplicate by gnat, MichaelT, Robert Harvey, AProgrammer, Spoike Aug 26 '13 at 6:56

This question has been asked before and already has an answer. If those answers do not fully address your question, please ask a new question.

School gives a foundation to teach yourself stuff. Many people still has to learn new languages, frameworks and technologies after graduation. In my experience, it takes way less time for the average dude with a degree since they know the fundamentals and know how to quickly take up new knowledge. –  Petter Aug 26 '13 at 4:46
@JoanVenge programming language is just the tool that we use. To learn how to use that tool properly, we must (self||academic) learn important concepts of computer science. Since programmer is just an abstraction of the CPU performing (mathematical) operations on bits it is important to have some knowledge of Boolean Algebra, Discrete Math, Abstract Algebra, etc. Most importantly, in my opinion, we must be able to recognize/categorize the problems we encounter so we know which algorithm to solve it with. Self taught programmers often have great ideas but often solve them inefficiently IMHO. –  Charles Addis Aug 26 '13 at 4:58
@JoanVenge it all depends on what you're doing. If you're doing web development, which IMHO requires little education and mostly simple solution implementations, you don't need any college. If you're doing embedded programming, on the other hand, or systems programming for say... NASA, you'll definitely need to have a strong mathematical background or college. Learning programming languages is not as important as learning computer science. It's the difference between learning how to play music and learning how to read/write music. You can play music without ever learning to read/write. –  Charles Addis Aug 26 '13 at 5:04
who says a formal education cannot be self-taught? –  Steven A. Lowe Aug 26 '13 at 13:56

2 Answers 2

First, not all programming jobs are the same. The folks who keep the web portal running for my health insurance company have different skills and a different knowledge base from the folks writing the Intel C++ compiler. My guess would be that the folks writing the compiler are way more likely to need some of the academic, theoretical computer science analysis tools that you'd get at university. That isn't to say that creating a stable web site is trivial, it's just less like to benefit on a day to day basis from an education in theoretical computer science.

Second, not all programmers are the same. David Cutler famously designed and wrote large portions of two major commercial operating systems (VMS and Windows NT) without a college degree. However, most of us are not David Cutler, and if we want to go into the sorts of programming jobs that really need sophisticated computer science chops, it helps to have somebody hold us by the hand as in a formal education.

If you tell me you taught yourself HTML, I wouldn't be the least bit surprised. If you tell me you taught yourself Javascript I still wouldn't be surprised but I'd be slightly more impressed. If you tell me you taught yourself how to implement a multi-user transactional relational database with atomic commits, I'd be very skeptical, but totally in awe of you if it turned out to be true.

share|improve this answer
Thanks, I see what you mean. For me it's just learning C#, .NET, python, and many specialized languages used in these software though they are based on known languages like C, etc. But for me it's the programming mindset that makes the difference. Learning the specialized languages takes less than a day since they are more limited than mainstream languages. –  Joan Venge Aug 26 '13 at 4:09

It depends. Maybe in most cases self-taught people don't know a lot of things as you mention. But, the people without formal education but the programmer/developer/engineer mindset would be the most valuable. The opposite is also true, a lot of students with formal education decline or be bad/mediocre programmers because they didn't catch up the fundamentals (like binary representation, processor architectures, layers at operating systems, etc.).

In a certain way, a good student is also a good self-teacher. A lack of formal education is filled by extensive practice (I interpret formal education as going to the university). The scientist Peter Noving exposes that you can Teach Yourself Programming in Ten Years and obviously practice comes with a lot of interacting with other programmers, reading other programming source code, reading books, etc. Finally, Richard Stallman espouses that the good programmers are those who are involved in real projects (not little testing programs).

share|improve this answer

Not the answer you're looking for? Browse other questions tagged or ask your own question.