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.

As a self-taught programmer myself competing in an industry dominated by CS majors, I often find myself intimidated. I have a BA in liberal arts but have found that many "trained" programmers tend to look down and assume I have huge holes in my understanding of fundamentals. I tend to not tell anyone, unless I have to, that I learned this way to avoid the stigma. Would it be better to embrace how I learned or would it be more prudent to continue to deliver while being less than open about my background?

Edit: I guess I did not mention this, but I actually have taken many CS classes, but I never had the time to get the actual paper with the random requirements attached. I have all the core stuff like data structures and algorithms, etc. I've found that I learned more on my own, however, I was primarily concerned with how this approach was viewed by employers and whatnot. Thanks for all of the great advice though!

share|improve this question
    
The main advantage a computer science degree provides is exposure to a large number of areas. I did a double major, so I find that there are many areas in which I lack even basic knowledge compared to those who only majored in comp sci. Being self taught, I imagine you would experience this to a much greater degree and so it might seem intimidating. Understand that they will have this advantage (unless you do a lot of self-study), but there is no reason why you can't match or exceed them if you focus your efforts on a particular area. –  Casebash Sep 28 '10 at 9:15
    
Even if you have a thorough understanding of the fundamentals there are quite a bit of different mindsets that you essentially do not get exposed to unless more or less gently nudged. Have you written a non-trivial program in Prolog? In Haskell? In Lisp? –  user1249 Mar 8 '12 at 12:53
add comment

closed as not constructive by Yannis Rizos Mar 8 '12 at 12:24

As it currently stands, this question is not a good fit for our Q&A format. We expect answers to be supported by facts, references, or expertise, but this question will likely solicit debate, arguments, polling, or extended discussion. If you feel that this question can be improved and possibly reopened, visit the help center for guidance.If this question can be reworded to fit the rules in the help center, please edit the question.

15 Answers

up vote 7 down vote accepted

The best thing you can do is be a good programmer and let your work stand for your credibility. I'm also an arts major, and I've found that while I may be weaker in some areas, I'm generally better at architecture, strategy, and other "big picture" stuff than my peers. I don't know if that's from my background, or just me, but it gives me an area to (try to) stand out.

Find the areas where you may have strenghts your peers do not have (given the different background, there are bound to be some), and use those strengths to earn respect.

And read. When I was first starting out, I read language specs, writing solid code, code complete, programming pearls, and dozens of others. Sometimes I had to read them twice - sometimes I wanted to read them 3 or more times. But the study - and my ability to find practical applications for the theoretical stuff helped me hold my own - I expect it will do the same for you.

share|improve this answer
    
I'm a music-composer-turned-software-architect. I do feel I'm better at the big picture, but I assumed it was the other way around: that I became a composer because I like to build systems (such as a composition). In any case, I feel that my main advantage over my peers is that I'm more passionate about software development -- and passion is typical for people in liberal arts. –  Mathias Verraes Jul 27 '11 at 17:51
    
I'd agree - my degree is in music composition as well (BM and MM). Good to know there's another composer turned architect out there. –  Alan Aug 1 '11 at 0:05
    
Some googling turned up this blog post about the relationship between programming and music: weblogs.asp.net/rbirdwell/archive/2003/11/14/37643.aspx –  Mathias Verraes Aug 5 '11 at 21:18
add comment

It seems you're misplacing your importance when you compare yourself to other programmers. Programmers who look down on your for lack of a CS degree are like kids who were [American] football stars in high-school and college, and struggle to make it in the NFL.

Don't get caught up in the geek version of the rat race. Focus on the skills that are more valuable to employers and will help make your career more satisfying. (Which most programmers won't do because they're in love with the technology and employing it to solve problems. Focus on solving your employer's business problems.)

Inside of 3 years from when I "should have" gotten my degree, I was a consulting software engineer to IBM. Inside of 10 I had consulted for Verifone and Apple as well.

I gave more advice in an answer to a similar question, but the gist of it is the most important skill to have in your career is how to sell yourself.

share|improve this answer
add comment

This answer is very relevant. What i find is a lot of companies have HR people who throw out your application seeing no education listed or no degree and i had one HR rep (who i believe was a programmer as i met him days before) said he respects my skill but is not allowed to hire me.

I have met four self taught programmers. The first was 30 and was REALLY REALLY good. Apparently he used to write assembly code for banks back in the day. He has no problem AFAIK. The second gets contracts but told me to get my degree so its easier to start and occasionally he has problems with companies that want contractors to have a degree no matter what credentials (past jobs) he has. He was very good as well, the 3rd i havent seen his code but he did beat me out at an annual competition and has gotten first on more then one occasion (the second time he placed first ppl suspected he cheated but i dont think he did since he got first the year before with a simpler game). Finally the 4th was just bad. I guess i had to meet a bad programmer some day and i have no idea how long he as been self taught but really the good self taught programmers i know tend to be better then the others.

I'd ignore and not mention the self taught part. At my previous jobs no one had a problem with it once seeing some code i have done. Even if you do happen to have a hole in some part of CS its easier to learn that then learning how to program and practical problem solving as i hear some students complain about (that they don't teach C++ and there's too much theory and they have no idea how to program a game for their amusement)

share|improve this answer
add comment

Design patterns will help you a lot in many cases. Once you learn a few patterns, and learn how to identify and apply them effectively in your real-world designs, you can shore up some theoretical knowledge and bring some value to the table.

Edit: you should also brush up on your algorithm analysis skills, as the commenter suggests.

share|improve this answer
1  
Baloney. Rubbish. Design Patterns are no stopgap for not knowing algorithm analysis. –  Paul Nathan Sep 28 '10 at 14:08
    
That doesn't mean my advice is rubbish. It's only a part of the answer. Likely the poster already does algorithm analysis... maybe not in the CS theoretical sense, but anyone who reads and writes code has at least some level of understanding on how to analyze an algorithm. –  CokoBWare Sep 28 '10 at 14:30
add comment

You don't mention the advantages to having a liberal arts degree. My degree is in Special Education. Task analysis is a skill you learn so you can break down something that everyone else just 'gets' for someone who doesn't have the ability to learn it under typical circumstances. How do you explain things to those that don't understand (and maybe you learn to actually care about it)? It required me to speak in front of groups more often. Nine years of teaching grade school to under graduate levels has been an a big help as well.

For interview purposes, I always say I learned to program inspite of not having a CS degree. I have a history of being able to pick up on new techiques / technologies without formal training (And in the real world you rarely get formal training.).

share|improve this answer
add comment

Don't carry a chip about how self-taught people are so much better than people who learned at university. The reverse snobbery is a tremendous irritant.

share|improve this answer
add comment

I don't have a CS degree, but did go to one of those 1 year computer colleges.

[they] assume I have huge holes in my understanding of fundamentals

My guess is they are probably right, at least I did (and still do). My advice about this, is to be open about what you don't know, then learn what people say you are missing. Turn your critics into your syllabus. ;-)

And like others have said many of the best programmers I know. don't have CS degrees, so you don't need to worry. However, the downside of this is that you will never get a job at Oracle or MS writing a database engine. As long as you're ok with that, you should be fine.

share|improve this answer
2  
yeah, you probably do have holes in your knowledge... but nothing is stopping you (collective you) from buying and reading the same books. –  jmq Feb 16 '11 at 7:17
add comment

I have a Liberal-Arts degree myself (American Studies with a CS minor). One of my leads, who is a brilliant programmer, has no college at all--totally self-taught.
Don't hide your background, be proud of it. You are who you are, and to hell with anyone who looks down on you because of it. My biggest challenge has been getting through the HR filter and the prejudices that assume because I (we) have no CS degree we don't know what we are doing. Being a Liberal Arts grad, I like to play up the strengths, such as the great communications skills that "normal" cs grads lack. In most of cases, experience trumps a degree.

share|improve this answer
    
+1 agree on the filter. Once people got to me for the technical interview I didn't care about their degree. I only cared about what they knew and if they could help me complete projects. –  jmq Feb 16 '11 at 7:16
add comment

Even after you have the degree, the farther you get from it (in time), the less important it is - and the more important experience becomes. Experience (good experience, not "doing time") and real knowledge are best equalizers.

At the end of the day, what they really want to know is:

  1. Can you get the job done?

  2. Will it work?

  3. How hard will it be to maintain when you're gone?

share|improve this answer
add comment

Do remember that computers are something relatively recent. This means that many awesome programmers never took a course on programming because there weren't any.

This also means that many software you're nowadays using actually evolved out of ideas of hobbyists, and that many things that are taught in programming courses were actually figured out by empirical observation of what very bright people without courses had done.

Having a degree on programming is not a requirement for becoming an awesome programmer.

This also applies to a lot of technologies that are popping out every second. If it came out yesterday, you obviously didn't learn how to master it in your CS major.

However, that being said, well structured classes on some matters can and will give a kick-ass background and will show you different ways of viewing and solving problems. Remember that if you have many music masters that learned everything by themselves, you have many more that were taught. So,

Having a defree on programming might actually help you become a better programmer.

So, what's the point here? Simple:

  • Don't get intimidated because you don't have a course on the subject
  • Don't get cocky because you learned it all by yourself: there's always a lot more to learn and people who did take courses might have a lot to teach you
  • Don't let others' cockyness get you down, because there's simply no reason for that
share|improve this answer
    
Nicely put ! +1 –  Rook Sep 28 '10 at 13:17
    
+1 'Don't get cocky because you learned it all by yourself' AND 'Don't let others' cockyness get you down' –  adamk Dec 17 '10 at 23:57
add comment

Read 'Design Patterns' by the gang of four (http://www.amazon.co.uk/Design-patterns-elements-reusable-object-oriented/dp/0201633612/ref=sr_1_2?ie=UTF8&s=books&qid=1285664774&sr=8-2) and the pragmatic programmer (http://www.amazon.co.uk/Pragmatic-Programmer-Andrew-Hunt/dp/020161622X/ref=sr_1_1?s=books&ie=UTF8&qid=1285664794&sr=1-1) and you'll be better equipped than if you had spent three years doing a batchelor's degree.

share|improve this answer
5  
Ridiculously wrong. Design patterns are not equivalent to three years of computer science. –  Paul Nathan Sep 28 '10 at 16:38
    
I'm talking about how equipped you are for day to day life as a software developer. Studying three years of computer science will be a fascinating and enriching experience but, like most academic degrees, a great deal of it is not directly applicable. –  Andrew Hancox Sep 29 '10 at 10:21
add comment

Show your skills. In our domain there is only one way to do it : show achieved works.

Always have spare time projects ready to be shown. You can have many or you can have few, but showing something that works and is meaningfull is often better than showing a diploma.

The only problem you could have is if the company set salaries relative to diploma. You'll then have to show that your experience (home & previous dayjobs) show that you have the level of one of the diploma and that you have more : experience.

I don't have any diploma and this strategy pays today. It's just not easy at first because you have to keep motivation on spare time projects to finish them and it's not always easy, but once you have finished something meaningful, it's the start of your golden age.

share|improve this answer
add comment

I left high school easlyn so I started to get little jobs like dishwashing in restaurant, or "nothing man" at Ikea (not sure if you have that in US).

I then started to be interested in HTML programming mid-90's to build my personnal website. Then I decided (with zero experience) to get a job as an HTML programmer. I eventually got it, then rapidly after that (I would say 1 year), I became freelance. I wanted to do ASP applications and that was not possible in my current job (already one ASP developer I did want to take the job from).

Starting from that point, I did lot of mission as a developer and ALWAYS selected the mission that were proposed to me with the most unknown technologies. Before the interview I learned all the theory and when I was hired, I will go into them in details.

The more I learned, the more easy it was to get new knowledge. From personnal html website to large enterprise applications.

Few month ago, Microsoft asked me to run a course where I teach pragmatic enterprise development to university students! Me that never went to university.

To summarize my opinion, I will quote my favorite chinese:

I see, I forget, I hear, I remember, I do, I understand. Confucius

If you want to learn faster than others, take the most difficult path. Always.

share|improve this answer
    
So what is a "nothing man"? –  Dan Monego Sep 28 '10 at 17:43
    
+1 for not taking the path of least resistance. And I think the "nothing guy" is the "greeter" or the person that stands in front of the store. We have those at walmart. –  Terrance Dec 28 '10 at 18:47
add comment

Bah, dont be intimidated. The best programmer's I've known didnt have CS degrees, if they had degrees at all. They're lucky they have you... self-taught programmers tend to think outside of the box.

share|improve this answer
17  
+1. As an addition: the worst programmers I do know have CS degrees. –  Steve Evers Sep 28 '10 at 5:50
5  
On the flip side, I wouldn't take this as gospel. I once worked with a group who were so proud at not being college educated. Their soft skills were horrible. College may not be everything, but it sure isn't nothing. –  Mark Canlas Sep 29 '10 at 21:44
add comment

Study theory as well as practice. All the practical how-to stuff in the books and the blogs are fine things to know, but most of what you encounter will not educate you about the principles of computing.

The biggest problems I see among the self-taught are these: 1) The erroneous belief that something they're attempting is impossible and 2) The erroneous belief that something they're attempting is possible.

share|improve this answer
    
+1 Though I think both 1) and 2) apply to all programmers regardless of training –  RobV Sep 28 '10 at 11:54
    
Algorithm analysis and theory of computation are critically important when you do need them. They are a part of a competent BSCS, and my hat is off to anyone who self-learns those areas enough to actually work out practical problems in those areas. –  Paul Nathan Sep 28 '10 at 14:25
add comment

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