I'm 21 and am pretty efficient in html/css, python, and javascript. I also know my way around lisp languages and enjoy programing in them. My problem is that I'm extremely self-taught and not quite confident that I could land a job programing, but I really need a job soon as I've just become a father.
I haven't even created a resume yet because I'm not really sure what to put on it except my lone experience. So I wanted to ask, will being primarily self-taught with some experience on small projects I've done for a few clients limit me too much?
I mean I know I need some kind of education so I've enrolled part time in a community college to work on a degree in computer science, but it's years till then. And if it will limit me a lot, what kind of skills would be good to work on to make my chances any better?
Thank You
Many firms are quite snobbish about requiring college degrees (or at least "professional certifications" on various specific technologies, but those do tend to be very specific compared to the more open promise of a degree) -- it's an unfortunate fact of life. Extensive experience can sometimes be equated to a degree, but by definition that takes many years, too.
Maybe making a name for yourself in some open source projects and communities can help, if you're truly outstanding in your field -- but finding the time for that in addition to a job and the incredibly time-consuming (but rewarding!) experience of parenting seems impossible to me (I do know that, at one point in my life, besides parenting two young kids and working full time at a startup, I was also teaching in a university and contributing to open source -- but looking back to those crazy years, I do often wonder how I managed to find the time and energy... and it is a fact that, though my now grown-up children love me dearly to this day and will claim I was an excellent father, nevertheless those years may have helped damage my first marriage, which indeed cracked not too long afterwards).
So probably your best bet is to take whatever job you can land -- even if it's not exactly the kind of SW development you would really love, but more like system administration, web design, customer support, DB administration, whatever -- build up some experience (as well as keeping body and soul together, which helps;-), keep pushing as hard as you can at that community college, and if you get any spare time (which I predict you won't) after all that and caring for your children and your partner, add some open source contribution on top. Hang on tough, it won't be easy. But, nevertheless, good luck!!!
P.S.: I'd recommend forgetting the existence of television, movies, online games, and other time sinks, for the next few years, if you can possibly bear to -- make every minute count!
I don't feel that being self taught has impeded my career or personal development. I go to work for the following reasons (in order):
I was caught in what I term a scholastic abyss. I completed the required credits to graduate from high school at grade 10 (most in the US go through grade 12). I went straight to the local community college to study for a few semesters, which was a requirement of the state university to accept me, mostly due to my age.
Several bad things happened. First, financial aid criteria changed right after I started my first semester. This meant that almost half of my loans and grants would vanish by the next semester, including the program that enabled me to work for the college while studying (I worked in the computer room).
Second, while I was only a few years younger than my new peers and friends, those few years made a big difference for me socially. They were legally adults, but I was not. I could not join them in a lot of activities for various reasons. This caused me to want to do my socializing while on campus, which was not exactly conducive to my studies.
Third, since I counted on my work study income, I knew that I'd have to replace it soon. Because I still lived at home and was under 18 years of age, the scale tilted away from my favor. My family made too much money for me to qualify for additional grants, despite merit and not enough money to pay for classes and books and give me cash to sustain my own needs. There wasn't enough money to fully finance my studies unless I worked.
A long story short, I ended up accepting a lot of "side jobs", one of which led to a full time position as a programmer and system administrator guy who gets called when anything with wires inside isn't working. That led to another job and then to another and pretty soon, I just let my studies go completely.
I've been involved with free, open source software since the early 90's when Linux first booted with GNU. To this day, I still continue to learn from some of the best software engineers in the world, just by studying their code and design implementations (in particular Xen and Linux). My work these days is what I loved doing the whole time, hacking away at open code and making it do what my bosses want.
A lot of my friends from college also never finished, most of them got hired away by now defunct dot-com boom startups.
My advice for you:
Never stop studying and reading peer reviewed papers on software engineering concepts. Topics like practical lock free programming are often language agnostic.
Find some mentors in the open source world. There are plenty to be found. Keep writing code and get it in front of people who can review it. There are always interesting problems to solve.
Get involved with charity organizations. They'll be happy for your help, and you'll gain not only experience but recommendations and references. The people who run charities are usually successful business people in their own right. Organizations like Rotary International can help you form a network that could result in a job you love.
Always pay yourself first. With each paycheck, put some money in the career bank by purchasing another book on programming. Don't stop reading. Buy the same texts that are used in university courses and work through the exercises. The problem with the phrase self taught or self learned is that they are past, not present tense. The learning process should never stop.
Remember that even college graduates are self taught from the minute that they graduate. What you need to make up for is four to eight years of studying under someone who knows a lot more than you do that critiques your progress and helps you understand.
I will eventually complete my degree when time permits. Currently, working strange hours while rearing a family maxes out my available bandwidth. I'll turn 35 in October 2010, my goal is to have completed my masters by the time I'm 40.
I'm going back to finish mostly just for me, just for the feeling of accomplishment. I did rather well without a degree, however I feel that I was as lucky as I was determined.
Good luck to you!
In the beginning, Yes. Getting a foot in the door will be harder.
But that doesn't mean you can't do it!
The biggest mistake of a young person is to believe that Education can supplement experience; the biggest mistake of a old person is to believe that Experience can supplement education. Everything comes in balance, you need both education & experience.
First of all, I am still an undergraduate Computer Science student. I go to the University of Toronto [1]. As such, I can't speak more authoritatively about the status of the job market as the rest of the people here, who I assume have more experience in that area.
But this is what I know from my experience of networking with many IT people:
Hope this helps
Force be with you
EDIT: I am now a Master's student at the University of Ottawa [7]. I have had many successful internships and from what I can tell, a really good company really only cares about how smart, motivated and hardworking you are. You get smart with practice. If you are self-taught, you are clearly motivated and hardworking. This path only leads to becoming smart. So I would say you shouldn't feel any limitations from being self-taught.
[1] http://www.utoronto.ca/I haven't even created a resume yet because I'm not really sure what to put on it
Two things:
Everything you have built. Give details! What problem did it solve? For whom? How long did it take? How big is the solution? (Other things being equal, smaller solutions are better, but size of what you've done is some measure of experience.)
Your best technologies. No screener is going to be impressed with a huge laundry list. Put on what you're best at, and if needed you can add "some experience with other technologies."
What kind of skills can I work on?
Build stuff. Get things done. Bonus if it solves a problem for a real client. At your level, open-source is going to be tough, but maybe you can do something for a local nonprofit, school, or something like that. If you can point to something public you've done, that's a huge boost. This is more important than particular skills.
This market is a real bear. To get a position, you're going to have to be very persistent and follow much of the advice you get here.
Getting hired in the current climate without either previous job experience or a degree is extremely difficult. In 1999, if you could write perl, HTML, and understood CSS you could get a $70,000 year job. So the answer is likely "it depends."
Part of the answer is also related to how you teach yourself. Most people are terrible at learning. They figure out how to do something without ever understanding why. If you know the how's and not the why's then you are likely not going to be a great job candidate.
Being self-taught makes networking more difficult, since you don't have professors who can vouch for you or college projects with companies.
However, I strongly believe that self-taught programmers are better programmers. When you make a mistake, you can't continue until you've found a solution or a workaround. In the classroom environment, you can take a grade penalty and keep going. As a result, self-taught programmers are much more proficient at problem-solving and debugging.
I recommend making as many personal connections as you can and talking passionately about software development. The languages you mentioned are a very good variety. Absolutely put on your "lone experience." Everything helps. Also put on what makes you unique and lets you stand out.
Two of the best programmers I have known have not had degrees.
Personally, I have no degree, and yet am employed by a major computer company.
It's not the easiest route to take, but it's certainly possible. I'd still recommend getting a degree if at all possible, as it will give you exposure to certain concets that might otherwise take longer to get, and will certainly open some initial doors.
As far as being self-taught goes - I believe all programmers (at least good ones) are self taught. All a teacher can do is point you in a direction - you have to do the learning yourself.
It will definitely limit you but won't necessarily prevent you from finding a job. Depends on how good you are.
You can:
Participate in some open source project. If you're good, join a higher profile one to improve the way it looks on a resume.
Take certification exams. Not worth THAT much in general but beats nothing as a proof of your efficiency
Have a portfolio of web sites you can link to from your resume to show off.
Alternately, write small apps (e.g. for mobile devices).
Participate in SO to build up high rep answering questions.
Joel indicated that he envisioned yoru SO profile being a valid piece of showing-off during job search.
Make sure you actually know the stuff that a CompSci degree is good for (algorithms, complexity, data structures, logic, graph theory, whatever they lump into "Discrete Math" these days, etc... If you manage to convince the interviewer that you know that stuff the lack of degree will count for less.
Network!!! It's a lot easier to impress a fellow developer with your real skills sans degree than a random J. HR. Resume Filter Guy.
Early on in your career, education is important. Later, a degree is helpful--perhaps just to get pass auto resume scanners.
That said, experience counts for a lot too, especially later in a career.
So, get your hands on as many projects as you can.
People get picked up for doing interesting and meaninful work.
Like the guy who developed jQuery, or created BitTorrent. Education is great, but so is passion for writing great software.
These days, with iphone, android, XNA, and other mobile devices, its so easy to create stuff that is impressive, that you can easily bolster your resume.
Hell, Twitter bought out the guy (or gal) who wrote Tweetie.
Many of us are "self" taught. Perhaps we have a degree, but often, schooling doesn't teach you everything you need to know to be a successful developer. I know I taught myself jQuery, Python, LINQ, and so many other technologies, that I've forgotten. I'm not saying schooling isn't bad, it definitely helps, but you can overcompensate for a lack of a formal education.
The nice thing about your specific skillset (which I would classify as web development) is that you could easily make a living as a freelancer. Many of the contract positions I see are looking for young, bright, energetic web developers who are CSS/Javascript/HTML BADASSES, and you could verywell fit that category.
If you've done work for clients, then you have work experience! Put together a portfolio of code samples on the client projects that you have permission to show off, and get testimonials from your clients that you can use as references on a resume -- and as testimonial quotes on LinkedIn.
Putting together a resume involves describing any other work experience you have, plus these programming projects -- both the ones you've done for clients, and the ones you've done just for fun yourself.
Then, while you're looking at monster.com or dice.com or whatever for entry-level programming jobs, make sure you're up on the software engineering side of the equation as well. In other words, make sure you're at least passingly familiar with some source control (cvs or newer), unit test concepts, can read UML diagrams, and know what the phrase "software patterns" means to the Java / C++ crowd.
Going back to school is good, although it may be difficult to do both school and work at the same time. However, as someone who went back for a Masters in CS years after I started working as a programmer, I'll say it can be really worth it. I learned much more than I'd (arrogantly) expected to, by being forced outside of my comfort zone into areas I'd ignored.
Good luck!
I believe you should emphasize more on your portfolio and projects you have completed in your resume. Education used to be the benchmark for a qualified engineer, but may not so anymore. More and more knowledge, especially in IT industry is available online, reachable by anyone. More and more employer or clients will value work being done, rather than educational transcript.
Make name card, create a website showing projects you have done. Be open with other opportunity outside a full time job, such as project-based or freelancing. Partner with other people or SME to grab bigger projects. If you enjoy programming, I'm sure you will be doing good. Passion is the beginning of expertise.
All the best! Robert
One place where it is easier to get a job being self taught is Web Design. If you have the knack for making a good looking website you can probably go around doing a few free things for instance for churches or local businesses. Make these sites looks really good. Put them on your resume. Profit!
Also another thing where professional experience counts a lot less is freelancing. Of course 90% of it is also slave labor so you have to be careful but it is a good resume builder also.
You should listen to this podcast Software Tester James Bach and The Voyage of a Buccaneer-Scholar [1]. James Bach [2] is a high school dropout and is now considered to be an authority on software testing.
In theory there's no "secret sauce" to becoming a great programmer. We all learn from books, blogs, etc. All these resources are either freely available on the internet, public library, free online course material [3] on college websites. As long as you have passion in what you do, you will be able to become better than 80% of the people with a classic education.
As others pointed out, it may be more difficult to get your foot in the door when you go toe to toe with people with college degrees. If you want to get into research positions it will probably be close to impossible without a PhD or at least a Master's degree. Outside of those areas though, once you have a track record of projects you can point to and say "I did this" you will be fine.
[1] http://www.hanselminutes.com/default.aspx?showID=205I have couple of really good front end engineers who do not have a degree. But more importantly can you articulate these concepts clearly? If you have or know the basic fundamentals then it is easy to build on top of your knowledge compared to starting from scratch.
When you hit “view source” on any web-page, What you see there is the result of decisions made by frontend engineers and it is extremely important that you are fundamentally strong.
Wasnt Einstein self taught??
Awesome question!
I'm 20, and I was about the ask why I need a degree at all when I already am learning and applying programming skills without one just being a high school graduate. But some of the answers here have really cleared it up for me.
You need a degree for:
I'm going to college, I'm convinced. My life, especially my financial life, is a major mess. But I'm going to do what it takes to continue my education in the field I love so much - computing. Thanks for asking this question and a billion thanks to all of you experienced professionals who have answered in such a meaningful way. Love you all, and love SO.
May the force be with you.