We get a lot of threads about where to start for someone completely new to coding. This thread seemed to sum up everything pretty quickly, so I'm co-opting it to make a sticky on the topic.

For more details on learning any of the languages or other topics mentioned, check out the How Do I Learn About [n]? thread, and for more discussions on how to start learning programming, there's the Best language for n00bs thread in Religious Wars.

So anyways, this was the original OP of this thread:

despoticwalnut wrote:I'm looking for something interesting to do over the summer and coding has always been rather interesting to me, but I have no idea where to start and am completely ignorant as to what I might do. Is there any literature that could help, preferably online and free at this point since I don't yet have a summer job, or any recommendations on where to start? Any input whatsoever is greatly appreciated.

First question to ask you, is what is your end goal (if you have one)? Very few people get into coding just for the sake of coding. You probably have some long term aspiration, what is it?

To give you something of a generic answer, here are a few very common choices:

Python: Probably the most recommend new language on this forum. It has good libraries (A library is already made code that you can use in your projects. This may seem like cheating at first, but it is the only practical way to get things done), forces good habits down your throat, works on all major platforms (Windows, Mac, Linux, etc) and is generally quite swell. It is pretty quick for picking up as well. It is my recommendation unless you reply with what you are looking to do.

Java/C#: Both languages are highly similar, but there are a few differences. Both have vast libraries of code. Both work on different platforms, but not as well as python does (Both support Windows well. Java (apparently) has solid Java support, and lesser C# support. Linux is a mix bag: Java as a language is better supported, but 3rd party libraries (Libraries that are not an official part of the language) seem to support C# more often). The languages are allot more verbose than Python (you generally have to type more to get the same result).

C/C++: If you have have a Mac, throw in Objective-C. These are low level languages. That means the code you produce is more on the computer's terms than your terms. In contrast, a higher level language (ie Python) will hide away allot of details making your task generally shorter and easier. Lower level does have some advantages. A well written program can be quite a bit faster (which generally doesn't matter, but in some cases (games, rendering, etc) it does). By the same logic, you can just as easy shoot yourself in the foot and make something magnitudes slower. In general, the C families do give you lots of places to shoot yourself in the foot. There also tends to be allot of competing coding styles, particularly with C++ (A coding style can be thought of like slang. Even though they are all English, rapper slang is different from guido slang, both of which are different from business slang, all of which are different from internet slang, etc). Now that you are good and scared, C/C++ can be a good place to start as you are forced to learn how the computer is working to become familiar with the language, which can be useful in other languages. In my experience people also have an easier time going from low to high, than high to low. They also have tons of libraries, but the standard libraries are all quite small. As a self taught project, the learning curve is quite steep and you may find yourself less motivated.

Lisp: If you are looking to program just for the sake of programming, Lisp could be a place to go. The language is very different from any other listed, but that is a good thing. It tends not to have the same level of libraries or support, but it is still very worth learning. Lisp has something of a cult following it; as if Lisp will help you reach enlightenment. This seems to explain it best.

After you make your choice, pick one of the first two links and find a guide to help you get going. Note: Allot of guides tend to assume you already know how to program, just not that language. Typically, a book targeted at beginners is better in this regard. I would really recommend Python, then following along this. It assumes you know nothing.

Other things to worry about:

Compiler/Interpreter: This depends on the language you use, you will need a compiler or interpreter. Most (good) guides pick one for you. If it doesn't someone here can help you. For reference compilers and interpreters take the code you make and turn it into something the computer understands.

Text Editor/IDE: In order to actually write your code, you will need an Integrated Development Environment (IDE) or a Text Editor (That's a text editor, not a word processor. They are very different things.). If your guide suggests one, go with it. They often teach you how to use features of the DE. Plus, it will probably help avoid a few headaches. If it doesn't, you will have to pick to go the text editor or IDE route. Text Editors are a program where you can write text (code) into it. It won't randomly change things for you like Word will (a good thing), and it will do stuff to aid in coding (more good things). You will typically have to invoke the compiler/interpreter manual (ie from the command line), and for complex applications you will (well, it depends on the language) have to learn a build system (basically a program that will help you compile very large projects). An IDE takes a text editor, then integrates a bunch of stuff into it. They will integrate a build system (so you don't have to learn that, nor do you have to use the command line to invoke the compiler/interpreter). However they tend to be quite complex, you need a guide to get to learn how to use one. They also integrate quite tightly and generally support only a couple of languages. If your guide does not give you one, ask for suggestions.

Debugger: When you code, you will do something wrong. To err is human, and all that. This will help you find those errors. Some guides help you figure out how to use one of these, most don't. By the time you learn to do GUI stuff, you are ready to learn one of these. Do it. They cure cancer.

Source Control, aka Version Control: This is something you can ignore for a while, but should pick up eventually. Basically, it lets you save different versions of your code. If you are working on something, and completely screw the pooch, you can undo it. If you want to make a big experimental change and don't want to screw up your working copy, it can help you do that. Source control is kinda like a cell phone. Before you get one, you don't understand those people who say they can't live without one; after you get one, you swear you can't live without one. I would pick one up not long after you get the hang of a debugger.

Last, but not least, have fun. You will start with a bunch of stupid apps that say "Hello, Word!", or tell you what x*2+3 is, but try to have as much fun along the way as you can.

Very useful information! Thanks a lot. I'll probably start with Python as you suggested and follow that guide as I know absolutely nothing about the process of coding. I really don't have a definite aspiration, except being able to 'eventually' write interesting programs, just the process of figuring it out should entertain me for some time. Again, thanks for the help and hopefully I can eventually help someone like myself in the future.

Watch the first couple of lectures in each, see who's style you like the best, and watch those first. The barriers to entry for the exercises are lowest at MIT, so I'd recommend you start there when you roll up your sleeves and get to good stuff.

"Labor is prior to, and independent of, capital. Capital is only the fruit of labor, and could never have existed if labor had not first existed. Labor is the superior of capital, and deserves much the higher consideration." - Abraham Lincoln

Yep. I'd say the same is true for most topics on the internet, but given that computer folk were the very first people on the internet, they've certainly had plenty of time to add resources for others in their chosen field.

Vaniver wrote:Harvard is a hedge fund that runs the most prestigious dating agency in the world, and incidentally employs famous scientists to do research.

afuzzyduck wrote:ITS MEANT TO BE FLUTTERSHY BUT I JUST SEE AAERIELE! CURSE YOU FORA!

That's one of the three textbook MIT OpenCourseware uses for their Python course. Personally I think Dive into Python and they also wrote a text for Python 3 as well that you can find from the same site.

"Labor is prior to, and independent of, capital. Capital is only the fruit of labor, and could never have existed if labor had not first existed. Labor is the superior of capital, and deserves much the higher consideration." - Abraham Lincoln

If I may, PHP is the language I got started with. It's a web-based scripting (no compilation required) language.

You do, however, need to either install a web server (free) or get some hosting (also free if you know where to look).

TBH, any programming language will serve as a gateway into all of them. Just don't start with C. Heavens, don't start with C. There are many other useful languages you can use instead of nasty, non-garbage-collected C (or Whitespace, or BrainF***, or various others)

Need more help or clarification? Feel free to PM me.

Fractal_Tangent wrote:(speaking of the xkcd fora)I have never seen anyone on any website get a virtual beating for lack of proper grammar and capitalization.I like it here.

The problem with PHP is that it takes some pretty advanced concepts to understand how to make a useful application. It does, on the other hand, provide very productive results (things that "work") as opposed to stuff like python or C++. It has a lot of built-in functionality and it can get you moving to have something you can show off by the end of your holiday. Might make an app or something for a webpage. And best of all, it's easy to show of by just providing a link rather than having to get people to download it, or showing it on your laptop.

PHP takes, at least, understanding of HTML and probably CSS too. They're pretty useful skills, however. Being able to make a website is useful.

Steax wrote:The problem with PHP is that it takes some pretty advanced concepts to understand how to make a useful application. It does, on the other hand, provide very productive results (things that "work") as opposed to stuff like python or C++.

Yes it's a strange fact that Python and C++ aren't actually used for anything productive, I'm sure they'll fall into obscurity any day now.

"Labor is prior to, and independent of, capital. Capital is only the fruit of labor, and could never have existed if labor had not first existed. Labor is the superior of capital, and deserves much the higher consideration." - Abraham Lincoln

I'm not saying they don't do anything productive. For a couple months' timespan, PHP can get you close to a functioning app you can show off to people easily. Go make mashups or blog themes or stuff like that. Python or C++ can get you some funky applications, and you can make some pretty cool stuff - but producing something worthy of showing off takes more time. I think there's a name for it... rapid development? Something like that.

Over time any good programming language can get you as far as you want.

Steax wrote:Go make mashups or blog themes or stuff like that. Python or C++ can get you some funky applications, and you can make some pretty cool stuff - but producing something worthy of showing off takes more time.

What gives you this impression? PHP is horrible for rapid development in my opinion. Are you suggesting that by using PHP they can access larger existing source code that they can modify for their own purposes? C++ has higher barriers to entry, but Python is probably the easiest language to find resources for, and certainly you can get a Roguelike running using Pygame in just a couple weeks. Maybe it's just my personal bias but I can't really think of a situation where I'd take PHP over Python for.... anything. Could you sell me on the features you think are superior?

"Labor is prior to, and independent of, capital. Capital is only the fruit of labor, and could never have existed if labor had not first existed. Labor is the superior of capital, and deserves much the higher consideration." - Abraham Lincoln

Steax wrote:I'm not saying they don't do anything productive. For a couple months' timespan, PHP can get you close to a functioning app you can show off to people easily. Go make mashups or blog themes or stuff like that. Python or C++ can get you some funky applications, and you can make some pretty cool stuff - but producing something worthy of showing off takes more time. I think there's a name for it... rapid development? Something like that.

Over time any good programming language can get you as far as you want.

There are web frameworks for most languages, including Ruby, Python, C++. Now, granted, using a framework for PHP likely helps too, but it's silly to say PHP is the only or best language for the web (let alone rapid development).

I'm just thinking that if he wants to make something in a couple months for the fun of it, PHP will can get you up and running with something easy to show off (just throw it on a web server) and do something. Sure, Python or C++ can do just as much in a few months, I'm not saying they can't. Or maybe I just don't have enough experience in them.

I think it's a bit hard for us to argue on which is better for him unless we know what he's interested in. If he wants to make a game, hell, go for python.

I personally just started trying to learn clojure this summer, though I have already had a bit of programming experience. All the same I think its something to look into as its a Lisp and as Rich Hickey says the nicest face functional programming has ever had. I think it may be a slightly steeper learning curve than python, but I think its probably worth it for some of the lessons you can get out of it.

I know this thread is pretty old, but I figured I'd throw my two cents in: People love to hate on Flash, but if you want to make stuff that's visual and interactive, you can do a lot worse than learning AS3. It's a nice language in it's own right, and it's possible to develop with it for free(check out http://www.flashdevelop.org/wikidocs/index.php?title=Main_Page). I think the main draw is being able to take stuff you make and just put it up on the web for anyone to see... Well, anyone except those with iPhones and iPads Also, there's a fantastic developer community around Flash, and thousands of people have learned it as their first langues, so there are a ton of resources out there for people who are just starting out.

Python 2.7 (still bumping up the version numbers!) also supports a ton more third party stuff. GUIs, plotting libraries, databases, numerical things, etc. Most developers still use 2.x. Python 3 isn't bad if you're new to programming and aren't going to actually write full blown applications for awhile, but otherwise you might want to start with 2.x. Most of what you learn will transfer over fine, and you'll have a much easier time getting help from other developers but especially from browsing source code. That stuff can't adapt for you.

Perfection is achieved, not when there is nothing more to add, but when there is nothing left to take away.-- Antoine de Saint-Exupery

Two years ago I took a C++ class in highschool. I don't remember a whole lot of what I did learn, should I just start from scratch?Would it be a better idea to keep working on C++, or use a different language?

Flying_Cookie wrote:Two years ago I took a C++ class in highschool. I don't remember a whole lot of what I did learn, should I just start from scratch?

Do you still have code from that time, i.e. examples from the teacher or small projects that you wrote on your own? It might help to re-read those.In any case, there is no such thing as "from scratch", as the subject will probably revive when you start reading about C++ again.

Flying_Cookie wrote:Would it be a better idea to keep working on C++, or use a different language?

If you like C++, just stick with C++ until you feel familiar with programming again. If you're interested in a particular other language, just go for that one. It doesn't really matter, because once you've learned the basic idea of programming you can learn pretty much any language without much effort.

If you're completely open to what language to use, you should consider what you want to achieve. If you want to get started quickly and see some nice (large-scale or graphical) results within a short amount of time, C++ might be the wrong language as it is quite complex (any language that is significantly simpler will do in that case). On the other hand, if you want to do low-level and/or high-performance stuff, C++ can be a very good choice. If neither of these possibilities is the case, it might still not matter.

I'm totally new, too, and I'm trying to figure out what language to start with? I feel a little cocky so I'm thinking about starting with C++, but I'm considering just looking into Java. However, the post at the top made me think that Lisp would be cool. I must say that Lisp seems the most intriguing right now. What are your thoughts on Lisp?

C++ and Lisp are excellent languages and totally worth it to learn. Java is also totally worth it to learn. However, if you haven't learned any programming language yet, I'd recommend to take something easier first. Perhaps Python, Javascript, or even the native dialect of Basic on your graphing calculator (if you have one). Python and Javascript are totally worth it to learn too, anyway.

When starting out learning to program, be aware that choosing a first language is not a commitment. You don't have to stick with your first language, and in fact you really shouldn't. In the end, you want to know lots of languages so you can choose the most appropriate one in any situation.

The measure of importance is really easyness, not high-levelness. I think C# isn't easy enough.

Python is somewhat more basic and neutral than JavaScript and it probably prepares you better for learning other languages in general. On the other hand, JavaScript can be embedded in HTML pages and might be more inviting to play with. It depends on your taste which one you should take first, since in the end you'll probably learn them both anyway.

So do you have a resource in mind for learning about embedding code in web pages? I literally know nothing about how to apply code. The limit of my knowledge is doing math problems with an IDE. And how would you classify Perl?

It looks like you are confused about the difference between javascript and CGI. When doing CGI, you write a program that generates HTML and does whatever it needs to on the side. This is, in my opinion, the one thing that makes up for Perl's hideous syntax. The script runs on the web server, so you can write CGI scripts in any language you like without worrying about if the user has it installed. Javascript is a completely separate language that is embedded in HTML. It runs in the browser. Everyone has javascript, but some browsers support it better than others. Firefox in particular is dreadfully slow, though apparently this is changing with FF4. As for actual resources, I don't know of any, but this should at least help you figure out what to google.

<quintopia> You're not crazy. you're the goddamn headprogrammingspock!<Weeks> You're the goddamn headprogrammingspock!<Cheese> I love you

In order to embed Javascript in HTML pages, you have to learn HTML as well. And then it'll make a bunch of sense to also learn CSS. http://www.yourhtmlsource.com covers all three and it's friendly to beginners.

Perl is said to be easy to write (I haven't looked into it properly yet). My impression however is that "easy" here means that you generally need few lines of code without too much thinking to solve a problem if you're already familiar with the language. On the other hand, it's also generally harder to read than stereotypically easy languages like Python. Perl has been compared with Python and other easy/convenient programming languages here.

headprogrammingczar: I agree to what you said, but I doubt whether that was Threarah's reason to ask about Perl.

Jplus wrote:Perl is said to be easy to write (I haven't looked into it properly yet). My impression however is that "easy" here means that you generally need few lines of code without too much thinking to solve a problem if you're already familiar with the language. On the other hand, it's also generally harder to read than stereotypically easy languages like Python. Perl has been compared with Python and other easy/convenient programming languages here.

I couldn't with an ounce of any seriousness recommend Perl over PHP or Python as a first language. If your thinking about Perl as a first language, learn Python(or Ruby, I haven't used it, but heard good things).

Other than that, I don't believe Java or C# are bad languages to begin with.

I apologize, 90% of the time I write on the Fora I am intoxicated.

Yakk wrote:The question the thought experiment I posted is aimed at answering: When falling in a black hole, do you see the entire universe's future history train-car into your ass, or not?

I learned programming by trying to create my own video game. It was an overly ambition project, but the technology I used, the tools, all fell into place based on the needs of the project. This is true with any technology project. Start with an idea, and the rest will fall into place.

C++ in 21 days by Jesse Liberty is a good book to start. Not the definitive of course, but the author does a great job explaining.

Well I am new to prgramming, and also this forum, After trying a little with C+ ,which I did not like, nor understsand, and since I prefer Dos, any way, I started with QBasic, then I learnedabout QB64, it is a qbasic sttle langurge, but QB64 is for windows, and the executables only run with windows. It is extremely easy to learn, and quite capable of writing games, even 3d,and all sorts of programs, sound, etc, one could even create there own html editor, once theylearn enough. More can be seen at the Qb64 forum,http://www.qb64.net I think it is a greatway to start learning. Well guess thats about it for now, and nice to meet everyone.

Hey, i'm a novice with a few months of HTML, some basic css (Which I suck at right now) and some really entertaining work with Java script for-loops. The class I'm taking is about to be working on PHP when I get back from break, and I was wondering if there were any tips for a newby with issues making anything more complex then a fairly simple website with a few shiny bells and whistles.

"Some days should start off with a balanced breakfast. Others should start off with a pair of .45's, a grenade launcher, and the belief that pain is for lesser men." -C.A. Martin

You can even write your own web framework. It's a good exercise, and isn't conceptually hard. It is a bit involved, but not significantly more than learning another framework will be.Just don't trick yourself into thinking your framework is wicked awesome, because it probably isn't. For a real website, having a seriously good framework is important.

<quintopia> You're not crazy. you're the goddamn headprogrammingspock!<Weeks> You're the goddamn headprogrammingspock!<Cheese> I love you

Threarah wrote:I'm totally new, too, and I'm trying to figure out what language to start with? I feel a little cocky so I'm thinking about starting with C++, but I'm considering just looking into Java. However, the post at the top made me think that Lisp would be cool. I must say that Lisp seems the most intriguing right now. What are your thoughts on Lisp?

Hello, I still am inclined to say, it is worth giveing QB64 a try . http://www.QB64.netit runs well in windows, I say this because before, I could not understand anything about c,c+, and knew nothing of others, qb64 is qbasic, but for windows, aslo is free. I have noticed a lot mentioned about PYTHON here, and to be honest, do not know what it is, I did look at some links, but apparently it is pretty expensive, but also since I do not useany credit card, paypal, or any type of purchaseing on internet, that makes it impossible to get ?, here where I live, there are no software stores. I would like to maybe try something else, like PYTHON, dose anyone know if there are anyfree versions available, also tutorials ? This was another advantage to qb64, is there are lots of very good tutorials available, all for free. But any way I am thinking I would like to look into this PYTHON, more. Guess thats about it, thanks for any info on the python,..if anyone posts something. from Garry