views:

499

answers:

10

Hi, I am interested in transitioning to a career in the IT field. I have no formal training of any kind with regard to computers. At this point I would consider myself a really strong end user of windows based programs and OSs. I know I have the technical ability but at this point, not the knowledge or training. I'm sort of the guy that everyone calls when their computer is not working or they don't know how to do something on it. I am interested in programming. Can anyone point me in a direction to get started with this? What type of programming should I study, Java, C++, etc...? What should I learn before those so that I will understand the terminology and application used in the courses? Any help is appreciated. I am very motivated so I am open to all suggestions.

Thank you.

Brian

A: 

If everyone already calls you to fix their computers, you may want to start with charging them instead of doing it for free. You could even avoid the trip to their house if you use Joel's Co-Pilot product. (Good enough plug, Joel? :)

JoelFan
A: 

Now it's good time to choose whether you want to do web-based applications or desktop applications.

For web-based applications, it really doesn't matter what you start with. People have good experiences with PHP, Ruby, Python, C#, Java and so on. I recommend PHP, because it's path of least resistance.

For desktop applications, download Visual C# Express edition. It has brilliant form designer, you can get something done even without writing any code. Just drag & drop some controls on window, set some properties (visually) and hit "Run".

lubos hasko
Please do NOT try to decide what kind of programming you want to do before you've ever done any. The kinds of applications you end up writing probably have more do to with who will hire you than with what you want to do on your first job anyway.
tvanfosson
I'm not saying he's got to decide for life but web-based and desktop paradigms are so different that he simply has to choose one before anything else.
lubos hasko
Disagree. I learned Java writing Swing-based applets and C# writing .Net web applications. If you just mean don't confuse yourself by trying to learn two different frameworks at once, I can see the point in that.
tvanfosson
+6  A: 

Following this course or a similar one would probably be a good way to start. Then what you should do next depends on what kind of programming you'd like to learn (desktop app, web, iphone, ... ). The answer to that will determine which languages you should learn. Once you know or have an idea start going through tutorials.

Make sure you're always working on some concrete and feasible project. The best way is to learn by doing.

As far as terminology and such, just make sure to use wikipedia and google extensively whenever you encounter some unknown term. At first the explanations/definitions will seem daunting but it all starts becoming coherent after a little while.

I'd also recommend making python or java your first language. There are several books that teach intro programming based on those.

rz
A: 

First get a real OS like BSD or Gentoo Linux, something you have to work on yourself. Then start learning to code with the WikiBooks on Programming!

+9  A: 

This question has probably been asked on this board before, but I've never answered it so...

It really depends on your intelligence and your opportunities. In general - use the opportunities that life throws your way as a business case to learn/write software.

  • Does someone need a website (offer to do it)?
  • Can you think of a useful batch script for yourself (learn scripting)?
  • Does someone want to manage photos (use one of the open source projects to learn from)?
  • Do you game (learn some lua)?

If you're 1400+ SAT and/or 160+ IQ:

  • Go RTFM - most programming related things will come second nature to you. Early on, focus on design - learn object-oriented thinking. Don't worry about a particular language or syntax - those will become second nature.
  • You will probably enjoy the Functional Languages

If you're 1200-1400 SAT and/or 130+ IQ:

  • There are a bunch of universities (MIT and such) that have open sourced their course ware. Go watch the videos and see what comes easily to you.
  • The best series for laymen to learn are the Head Start books
  • C#/Java are appropriate starting places (because of skill required and marketability)

If you're < 1200 SAT and/or 130+ IQ:

  • Learn HTML, Javascript, Batch Scripting, SQL (these aren't programming per se... but the skills are marketable and useful). SQL will allow you to focus on one small aspect of programming that can be useful by itself. You'd be able to get jobs reporting and if you practice a lot, you can do some DBA type work.
  • Learn PHP, Perl, Ruby on Rails, VB etc. (not to say that people who work in these languages aren't bright, but these are a bit lighter and easier to learn). The market rates for these skills aren't as high.

If you're < 1000 SAT and/or 100 IQ:

  • Go directly into management.
  • Read parts of magazines and learn the buzzwords and acronyms

EDIT

Based on the down votes, it looks like the < 1000 SAT don't have a sense of humor.

mson
Heh, this one was funny. :-) Got an upvote from me.
Willie Wheeler
No. Actually I think it's because I've seen high IQ people who think they understand everything and actually understand nothing when it comes to programming. Intelligence != aptitude. And I have a 1400+ SAT, FWIW.
tvanfosson
LOL, somehow you've managed to relate SAT scores and ability to code.
Greg Dean
@gdean I don't mean to correlate SAT scores with ability. I mean to correlate SAT scores with potential capacity to learn to code. E.g. A high school sophomore with a 1600 SAT probably can't code very well, but he can be readily self-trained or taught.
mson
@gdean The best measure of success at anything is tenacity, but there is not a standardized measure of it... So, SAT and IQ are a decent approximation of a standardized measurable quantity. People have varying levels and speeds of learning. I think it's important to know what is appropriate.
mson
A: 

I would recommend that you consider a degree in computer science or computer engineering if at all possible. There is a wealth of knowledge to be gained by formal education. If this is not possible, then look into courses at your local community college. Take some basic courses on computer organization (operating systems, memory organization, I/O) for a basic understanding of how your program will really work on the hardware. Take a language course -- probably Java or C# -- and learn the principles of object-oriented design. If they offer it, take a programming project course to learn how to work with other people in writing software.

I think it's best to learn from a real person until you have enough of a background to pick up the material in an on-line course. If you feel that you are already at that point, MIT and some other schools have the materials from some of their courses on-line. Personally, I think you will learn better if you are paying for a class, but only you know if you need this extra motivation.

If you want to jump right in, not take any classes at all, and get right at it, then I would recommend that you start with Agile Web Development with Rails. It has a pretty good description of what's going on from a high-level standpoint and will walk you through creating an application in Ruby on Rails. You could use this as a guide to whether you can continue down the self-learning path or need some formal education.

tvanfosson
A: 

I'm high 130s IQ and 1300 SAT but a college drop out that went on the road to pursue music (self taught musician I might add). Thanks for all this information everyone. I really appreciate it.

Brian

You have the potential to be a fantastic programmer.You've got the intelligence and humility required, now you just have to apply the elbow grease.Discipline is a far better predictor of success than intelligence - so make sure that when things get tough, you stick it out.
mson
Also - use your current situation to branch out. See if you can apply your knowledge of music into programming.
mson
congrats, don't listen to mson
Greg Dean
A: 

For someone just starting out, with some time on their hands, I would recommend that you pick up a robust yet user friendly scripting language such as Ruby or Python. Play around with it, write some stuff. There are good beginner books for both of these languages, I think you can get a number of them for free.

In any case, after coding for a little while, pick up a copy of The Pragmatic Programmer and read it. It will introduce a number of concepts, give you a set of good working habits and give you directions that you can start learning more.

Someone recommended switching the OS on your computer to *NIX, this is a great suggestion too. You might start with Kubuntu which is popular and easy to use. But you can find the flavor that suits you best on distrowatch.

Jamal Hansen
+1  A: 

Before you spend good money on formal educations, try some tutorials and start writing simple programs. A personal phonebook or anything you can finish in a day or two. The important thing is to determin if you enjoy coding.

This is very important. Most people can understand the concepts involved in programming, at least in the beginning. No doubt you will too, especially since you have some basic computer knowledge and obviously like to solve problems.

But if you don't enjoy coding, the actual writing of code, the creative momentum you feel just writing code to create something. If you don't enjoy this and solely focus on the end result, you won't get very far, regardless of education or IQ. In that case maybe the thing for you is a field higher up in abstraction, like database administration or sys admin brackets.

Good luck!

/Robert

sharkin
A: 

I truly appreciate all the input here. I'm going to start with MIT 6.00 Intro to computer science and programming and see how I react to it.

Thanks,

Brian

PS - Are any of you in the Nashville Area? If so shoot me an email, I'd like to meet for a coffee or whatever and talk computer science. evinrude7 @ hotmail . com