views:

605

answers:

16

How do programmers proceed in the software industry?

Do they first get a degree, learn some basics, take a programming job and advance their learning while working

OR

Get a degree, initially learn and experiment at home, create some complete applications of their own to gain skills, and then go in search of a job?

I think the 2nd option is not always possible because you may not have every needed installation at your home. And also, different software companies work with different technologies and place different requirements, a fresh graduate is not expected to know all.

Please contribute to make this post as a guideline for newcomers, I have seen most of them struggling at this point.

+8  A: 

Computer science degrees are not a requirement here. I'll bet you'd find more people without than with. The reason is that other degrees in technical fields are considered to be equally acceptable: math or engineering seem to work as well.

Degrees are more than just "interview gateways". There's a lot of fundamental information that a degree can offer (e.g., fundamentals like data structures and algorithms, finite automata, relational databases, etc.) that hacking is unlikely to give you unless you're exceptionally motivated.

I do agree that degrees aren't an end unto themselves. Perpetual learning is a fact of life in all technical fields, not just computer science.

I'll also bet that you'll find answers on both sides of the fence. This wiki won't decide this question.

It's also not clear what "your country" is. My data is based on personal experience in America. Maybe others who answer should clarify where they are.

duffymo
your country is the country where u worked as a programmer. Answerer's country.
JMSA
Yes I know, but I thought it should be a requirement that folks who answer say where they're from.
duffymo
+1 a person must have programming skill with other degrees in technical or non-technical fields.
adatapost
A degree in computer science is very useful. It gives you the foundation that is very difficult to obtain otherwise. You would not allow a medical doctor or a lawyer to practise without having a degree not matter how much practical experience they have gained.
txwikinger
I dont buy the doc/lawyer argument, the system has trained us to think that way, there is no basis to it. A software engineer with no degree can kill just as many people as a doctor, docs do it one at a time software engineers can take out a whole plane or train or bus or building.
dwelch
It's simply a fact: you can't practice as a doctor, lawyer, or engineer in America without a degree, but you can be a software developer. There is indeed a basis for it. You can argue about the efficacy of degree programs, and that a degree isn't a guarantee of competence, but that doesn't change the truth of degree requirements in other fields.
duffymo
+2  A: 

Brazil

  1. There's a lot of people that don't have a CS degree (or whatever degree whatsoever) that are very successfull on ther jobs or in the "software industry" in general. That may not be feasable in every country though.

  2. To start as programmer, start studying (books, internet) and practicing. Reading other's code is a good way to learn, so you may want to download some open source projects.

  3. See number 2.

Alfred Myers
A: 

I think needed two things to start as programmer: read some programmers books and practice, practice, practice.

x2
+2  A: 

Degree is just a gatepass, or probably an entry for an interview, but in real world, inventors dont need degree, if you consider you are a student for all your life, learn everyday something new and implement it correctly, then you are the winner. Because no technology and no business methods are immortal, they all die out and new ones keep on coming.

Best is, develop a habit of learning everyday and explore new arenas.

Akash Kava
+10  A: 

And also a CS degree do not ensure your ASP.NET or PHP or WPF skills.

All the technologies you mentioned are products or high-level toolkits.
I think CS education shouldn't train you in certain technologies.
A degree in CS should guarantee that you have an understanding of more fundamental concepts.

Such as:

  • Data Structures
  • Algorithms
  • Math

but also (depending on the curriculum you choose):

  • Usability Concepts
  • Software Engineering
  • Project Organization

... take a programming job and advance their learning while working

You will definitely learn some of the technologies (ASP.net, ...) you mentioned while working on a project, but it is way harder to learn the fundamental stuff "by doing".

weichsel
+1  A: 

Experience on real projects is usually more valuable than a degree itself. I know some people with computer-science-ish degrees that managed to get through without producing any mentionable code...

You end up having to learn everything by yourself anyways, and you can't do that without actually programming. That's why you grow with each project you (hopefully) finish. So to get started, get one or two good books, an IDE and get cracking. It would be wise to start with projects that have been done before so you can use previous solutions as a reference.

galaktor
A: 

I'm from South Africa, don't have a degree or anything near it (although I am an MCPD) and am currently a Senior Developer at the company where I have worked for three-and-a-half years. It's also the first company I ever had an interview at and the first company I ever worked for. :)

However, although I started working at age 21, I have been coding since I was 14 - hence I have a lot of experience and practical knowledge, both of the standard concepts such as data structures as well as many language-specific features.

Learning - and more importantly, a willingness to learn - is the key. Even if you start out at a low salary doing a menial job, if you consistently demonstrate that you're capable of bigger and better things - your employer will give them to you.

Ian Kemp
+3  A: 

The best requirement is passion. If it's your hobby you can start working on it.

I have a degree in Economics, and started working as a developer. It was not the job I was looking for ! But I explained to the interviewer that I was programming at night, and he offered me a programmer position to develop in Assembler, which I did not know at all at that time (it was in the 80s in Europe).

iDevlop
+3  A: 

I have worked in Australia and the U.S. and I don't think there are dramatic differences in the primary thing that employers are seeking for a programming role in both countries - evidence that you are (at the very least) competent with the particular language/framework they want you to work in.

This could take the form of a language that you have studied while doing a degree e.g. Java, C++ but you would still have to discuss a project you have worked on, show technical understanding in the interview and an understanding of what they are needing to achieve.

Alternatively, having worked on a project independently, is also a way of showing evidence that you are competent in that language/framework. But from being a beginner, this is hard to do as most open source project contributions are made by very competent programmers.

My suggestion to you is to pick something you are interested in and is not too complex for you and then promote yourself on sites like odesk.com. There are a lot of small tasks that people need done for them and if you focus on a particular niche, you will:

  • learn how the language/framework functions
  • discover what sort of problem the language/framework is good for
  • get well-rounded experience by providing different solutions in that area

If you had a small track record of a few happy clients, that would go a long way in a job application.

There are of course other factors in success with job interviews. Read Joel's thoughts on interviews.

I recently applied for a job and in my cover letter referred to a personal project(website) that I have put together in my spare time. It provided evidence of both technical competency and a passion for programming. I'm happy to say i was offered the job.

Best of luck to you. Everyone had to start somewhere!

P.S.

I should also mention that odesk has a lot of free technical tests. In my experience, they are actually pretty decent. Take a test, write down the tough questions you can't answer and then review them later to improve your understanding of the technology you are working in. A month later, you can take a repeat test. Although these were designed to let potential hirers assess candidates, they are also a useful learning tool.

timbo
>In my experience, they[tests] are actually pretty decent.Not really. They are just like "IQ"/"logic" tests: the more tests you take, the higher score you get. Some questions are really stupid(IIRC, brainbench had question like "dragon has scales like lizards and can fly like birds. What we see in the design of dragon? a) encapsulation b) polymorphism c)composition d) multiply inheritance"). Oh, and c++ tests almost always include decent amount of questions about virtual and multiply inheritance, that almost never used IRL.
maykeye
Haven't done any tests on brainbench and they don't appear to be free. The odesk one's are free. I imagine there will be some aspects of testing where they are hitting the 'boundaries' but in my opinion that's not such a bad thing.
timbo
A: 

Here in Canada there are a couple of different routes people can take:

  1. Co-op/intern programs - Some universities offer these programs where a student alternates school and work terms or takes a temporary position for some months to get some experience under their belt. So, in this case the experience and degree come together in a sense.

  2. Get the degree, then get the job - This was the case for me in terms of getting a good job, as I had a horrendous co-op term that I generally don't count as experience. Once I got my degree, I used the university's career services department to help me find positions. Course I did go work in the U.S. out of school so I have some experience there from a hiring perspective.

JB King
+1  A: 

Here's a perspective from someone who's been in the industry now for over 25 years, mostly around Silicon Valley and San Francisco, and hired a lot of programmers.

Around here, the real questions employers have about programmers are:

  • Can you do the job that needs to be done?

  • Can you get along with the people you have to deal with at work, and otherwise not be troublesome?

You can certainly succeed without a CS degree - I'm a chemist and mathematician myself, and have hired very capable programmers with degrees in non-technical disciplines including history and music. And I've known people who didn't even graduate from high school who've had successful programming careers.

However, the normal path employers expect to see in someone starting out in programming is to have gotten a degree in CS or a related technical field, and then go right out and get a job. Anything else may be perceived as a possible red flag that needs some explaining.

Having a degree in anything not only proves you've passed particular classes, but also that you have enough perseverance to get through college without quitting, and you weren't so irresponsible that you got kicked out. That may seem silly and obvious, but I know a pretty good programmer who freely admits he won't finish a degree because he refuses to take required classes he doesn't like. Potential employers look at him and think, "If I have to assign you work that needs to be done, but you don't like it, are you going to quit on me? No job here for you, buddy."

If you want to do a degree and experiment at home instead of getting a job, that's going to be tricky. Not impossible, but tricky. If you want to get a job after that, you'll need to explain what you did and why, so your experiments need to be pretty successful. You'll also need to have a way to sustain yourself while doing this. Again, it's not impossible - I once hired a brilliant programmer who had been working as a supermarket stocker while polishing his game-writing skills. But employers tend to look at this a little oddly, and most would rather hear you were delivering pizzas than sponging off your parents.

JB King mentioned co-op and intern programs, and those are very helpful. I even know a couple of guys in the 70s and 80s who never finished their degrees because their co-op employers offered them big bucks to stay on. But that's pretty unusual these days.

If you don't have a degree at all, you absolutely must have some very solid experience in the area the employer needs. Having a hit iPhone program in the App Store, or being a maintainer of a major open-source project, would probably suffice. :-)

Bob Murphy
+1  A: 

Programming is more importantly a language. Not only does it require experience but also talent. Just like linguists and polyglots. Everyone can create a code but not everyone can create a good code.

The development of a good programmer start even before he/she has a degree. I know a lot of talented programmers who didn't even get a degree. They must have a hunger for knowing how to make things work (curiosity/creativity). And from those experiments they will learn much more that what is taught in school. Then they graduate (or not). Still, they continue to feed that curiosity by finding challenges in jobs. In that way, they don't get tired because it's passion that drives them.

Trust me on this. If you like "learn" programming because of something else other than programming, don't even try to. You'll just end up creating another one of those crappy products that pests people.

sheeks06
+3  A: 

We take on students for a year's placement before they complete and so far, to my dismay, I've found that 90% of students coming from University in Computing based areas known nothing but what they were taught.

A large proportion of them just don't seem to be motivated in the slightest, it's as if they are just going through the motions. When I completed my Software Engineering degree I already knew a lot of the subject material and it was (as duffymo suggested) only really useful as a 'foot in the door' for interviews and to learn the theory side of things.

I was shocked to find that if it wasn't taught at University, most of them didn't have a clue. In my opinion you need to be passionate about programming and do a lot of work outside education. My degree has only served to be a 'badge', rather than the source of my knowledge.

Daniel Frear
A: 

If you have a degree in computer science related stream then it will prove added advantage ofcourse. If not then do some basic certification course first and then you can opt to join a small scale company to start your career where you can start as a fresher. This will give you ample opportunities to work at ranual level tasks related to Software Development. This will definitely give in depth knowlede and feel of being a programmer and you will end up learning lot of facts. Then after working for at least 2 years in such company, try searching for bigger organisation with heirarchical structure. There you can get more of a professional experience and learn all formalities required for software develoment. After getting good experience here, you can either opt for mastering any language or technology of your liking or enter into management stream as per your choise. Because unless you reach this level of experience you will never come to know whether you really like and can do programming.

Anil
A: 

Don't!

If you need to ask that kind of question maybe programming isn't a job suited for you. To be a great programmer, or at least a good one, you need to have a passion for the 'making computer do what you want'. No book or university or existential pressures won't make you have one.

Daniel Mošmondor
A: 

If you sure, that programming and coding will make you happy, and only if you are sure.

Go and start work on this side, only via practice.

E.g. you can help to other people on this site and get some experience, try to get some freelance work or topcoder way.

IMHO you can get a carrier and quality knowledge of programming at all ONLY BY YOURSELF. If you'll want you could get some degree in this way, but its just wasting of time, you could get some job as programmer, but you'll stack on routine tasks.

So the best way is learn all things by yourself and each-day practice in all this things.

Good luck to your start!

Regards
Eugene

Eugene