Best First Programming Language to Learn?
Posted by Gina Trapani at 10:00 AM on April 4, 2008
Reader Sheila considers herself a power user but wants to extend her tech skills to programming. She writes in:
The more I hear about people automating things with scripts and programs they write themselves, the more it seems that being able to write code is a good skill to have—at any job. I'm not a programmer, but I'm interested in maybe becoming one. What's the best language for someone who's savvy but still very much a beginner to learn?We've got our own opinions on this, but first we want to hear from you. All the coders out there: where should an aspiring programmer start? Help us point Sheila in the right direction in the comments.

Comments (AU Comments · US Comments)
Leadeye
Posted April 4, 2008 10:38 AM
When I was in high school (finished 2003), we learnt Visual Basic. It seems to me to be a good place to start!
Pete
Posted April 4, 2008 12:33 PM
I agree with LEADEYE. Check out Visual Basic especially if you're working in a Windows environment. The language is fairly transparent between windows scripting (VBS), Microsoft Office macros (VBA) and event full-blown windows and .Net application (VB.Net) development.
I find that it's pretty easy to Google examples and developers are always keen to help out.
Yazid
Posted April 4, 2008 12:44 PM
I think any C-based language is a good way to go, since there are quite a few of them, and the syntax knowledge is mostly transferable from one to another. I started with Java, and it was pretty easy picking up C#, JavaScript or PHP after that. That's a pretty diverse skillset already, as it can cover desktop and web development.
Kevin
Posted April 4, 2008 1:49 PM
I have been doing Java since my sophomore year in high school. The transition (I have heard), is fairly easy to javascript, php and objective c#. It is also the AP Computer Science language of choice, so if you are still in high school it's most likely the best choice.
Rory
Posted April 4, 2008 4:38 PM
I cut my teeth on perl over 10 years ago and that was great. But now I would suggest Python! So simple to pick up and play with especially with it's command line interpreter. Also it is object oriented and requires little or know knowledge of memory management to use (which is a plus at the start for budding programmers but soon becomes a problem once they moving into industry!).
Dennis
Posted April 6, 2008 11:53 PM
Python. You can learn the core concepts in days and it is fun to code with.
Paul
Posted April 7, 2008 5:23 PM
COBOL!
Well, it worked for me...
Shamanth
Posted April 7, 2008 7:46 PM
if you want to do web based tricks then a scripting language would be the thing to look for (javascript may be). if you want to play around with desktop applications then vb is the language you should be looking for, although i must say the syntax is slightly different from c,c++ or java.
if you want to be a serious programmer then start with c.
happy programming. hope you have your first program shouting hello world :)
Abubakar
Posted August 3, 2008 6:43 AM
write the QBASIC program that to accepts two dates and determines the number of days between them.
hansolox1
Posted November 20, 2008 6:26 PM
Visual Basic is a great programming language to start with. To move on to other languages, look for example programs that are indexed using the Program Phases methodology.
wannamac
Posted 11:18 AM 4/4/08
I was the same way not knowing where to start with computer programming but once you learn the basics the rest comes easier. but it all depends on what kind of programming you want to do.
wannamac
NICU
Posted 11:16 AM 4/4/08
Give yourself a break and start out with Visual Basic. From there try out C# or Python. I do C/C++ all day long and they're not for beginners - try to avoid pointers and memory management/garbage collection until you need to - they're not for beginners.
NICU
imrcly
Posted 11:13 AM 4/4/08
I learned Qbasic/pascal in high school then java as a freshman in college, I needed a fast way to write a lot of visual programs quickly for one of my senior classes and taught myself Visual basic yesterday and today using knowledge from basic java and programming practices.
imrcly
paschott
Posted 11:12 AM 4/4/08
Add another vote for Python. I've dabbled with quite a few different languages, but was able to get up to speed really quickly in Python. Add in the immediate feedback aspect and it's a really good language to begin learning. I liked the fact that I could change things on the fly through the interpreter to see how it affected my code. It made things quite a bit easier to debug.
Get a good IDE for it - there are quite a few from which to choose. It comes with one, but I found the more advanced editors really helped when I had modules and such.
The main drawback (to me) - indentation does matter with Python. There isn't a concept of braces around a block of code or similar to contain it. I don't think that's a huge problem, but it is tricky if you have missed something. See the note above about a good IDE. :)
There's also some minor issues with compiling EXEs, but py2exe generally does pretty well there. Besides, you have the advantage of being able to tweak your script without recompiling every time. Just change something and re-run.
paschott
ericsprojects
Posted 11:10 AM 4/4/08
Scratch. There isn't anything better to learn the concepts of programming. Scratch is a GUI based, programming kit from MIT. It's like programming with Lego Blocks!
[scratch.mit.edu]
I started programming with BASIC, FORTRAN and COBOL in the 70s, and I have programmed in C, C+, Pascal, PERL, Assembly and all kinds of scripting languages. Noting is more frustrating than having to look up how to put something together in a language you don't know. You spend all your time looking in reference manuals.
Forget Object Oriented programming languages for learning. Not only do you have to learn the language, you have to learn the object library.
That is not the case with Scratch. Everything you need to know is on screen. You just drag the programming elements into program execution area and click them together.
You can build multi-threaded programs in minutes! You will very quickly learn the concepts and be ready for other languages like Pascal or VisualBasic.
Wait until you learn basic concepts like FOR LOOPS, WHILE LOOPS and IF THEN statements, then move on to more challenging languages like PERL, with it's super-powerful pattern matching regular expressions and advanced Object-oriented languages.
You should start out by trying to write simple games. Nothing will teach you more than writing games. You will have to let the player have a turn, computer have a turn, display stuff on the screen and maybe even save files.
After writing games in high-school, I got my first job programming. The tech manager wanted to teach me about finite-state machines. I realized it was the same way I had coded my games. The only thing I would have gotten from a college degree would have been the names of what I already knew.
So, get scratch, write games, have fun. You'll be surprised what you will learn.
ericsprojects
Cheater
Posted 11:07 AM 4/4/08
My first real language was perl. I found the syntax relatively easy, and it allows you to use it with web pages, in terminal-based applications, and in GUI applications.
You mentioned that you want to learn to program in order to automate tasks. If that is the case, learn to make shell scripts. These are usually relatively simple.
Most people that I've met suggest python as a first language. I personally haven't found a need to learn it yet.
Java is somewhat unique since it allows you to make applets and other graphical applications easier than most other languages. However, it is not the easiest language.
The key thing to remember is that once you learn your first language, learning a second language is a lot easier. All you really need to learn are the names of the commands. You will have already learned how to use them.
Cheater
Spock
Posted 11:03 AM 4/4/08
PS II - you also must separate compiled and interpreted (or managed) languages. Compiled languages like C and C++ are extremely better and more efficient and more flexible than interpreted or managed languages like Java and C#. I know everyone likes to associate Java with networked and internet programs, but game programmers that make network games simply just don't use Java at all; the industry standard was and is C and C++. Java is horribly inefficient compared to C and C++, especially when it comes to graphics. VisualBasic is so horrible and limiting it should be avoided outright. If you want to go the scripting route, again VBscript and batch scripts should be avoided. Use JavaScript instead and use Unix/Linux based scripting languages for the console such as "Bash", "Tcl", or "Tcsh." I recommend starting with Bash becasue it is usually the default console environment and it is very simple to use.
Spock
ub
Posted 11:02 AM 4/4/08
I have a colleague who swears by Macromedia Flash as a first language. Sure, there's a slight learning curve as you learn to set up a flash movie, embed it in a web page, etc. But if you can find a tutorial that makes sense to you, and begin experimenting from there, the immediate payoffs for this scripting language are immense. It is a very exciting place for newbies to start, because every project leads to something visually interpretive and whose application in the real world is much more apparent than "hello, world!" and sort functions in perl.
ub
JiltedCitizen
Posted 11:00 AM 4/4/08
Anything object orientated. Java, .net, c++, heck even javascript even though it isn't technically object orientated. I'd say grab one of the Microsoft express versions and play. I think Microsoft has the best development IDE out there.
JiltedCitizen
shankar
Posted 10:55 AM 4/4/08
Another vote for python, for all the reasons mentioned above- you can use it on linux/windows/osx, it is pretty easy to write simple scripts, and the hello world program is just one line: print "Hello, World!"
If you do decide to learn python, the python for non-programmers page is a good place to start. I started with A Byte of Python and found it to be an excellent book.
shankar
Flugenhiber
Posted 10:52 AM 4/4/08
If it were up to me, I'd love to see all students in a class with a support system start with an object oriented system, like c++. If you can wrap your mind around c++, then you're pretty well off with languages. Plus, the command line interface of most c++ development environments is more difficult due to the presentation (two colors, somewhat cryptic errors). As an added bonus, it's nice to not be reliant on Microsoft for your potential as a programmer.
However, if you're starting on your own then I'd recommend a more verbose (colorful) environment. I'd also recommend a more forgiving language. For these reasons, I'd say Visual Basic is a decent choice. There are odd things, and VB is not the most powerful language, but VB should be fairly forgiving and easy to learn.
I'd not recommend VBA - you could apply it a bit more, but it's easier to learn the programming language, then the application. Plus, in my experience, VBA is not as rock solid and throws more bad compiles than VB.
Alternatively, I remember hearing a while back about a programming language for kids. It was a nice easy language to start with, and could do some real work, but just seemed to make sense. I wish I could remember it.
You could also try the MIT open courses. I haven't been through the CompSci classes, but I've been watching 8.01 (basic physics) and even though I've already been through a college physics course which already covered everything, it's interesting to see the topic from a new perspective.
Course, another good option would be JavaScript. Or Python, or Ruby, or whatever you want. The biggest thing is, whatever you start with, don't back down. It's a computer. You can win. Sometimes you have to use a hammer to get a program to compile, but you can do anything you can wrap your mind around.
Flugenhiber
nobodyzhome
Posted 10:52 AM 4/4/08
Start off with a scripting language because that is what you stated you would like to do (write some scripts.) I concur with those who have mentioned Python. You can start of writing small scripts, then move up to larger ones (possibly object oriented ones.) However, if after a while, you realize you need something else, before you just grab C++ or C# or Java, do a little research and make sure you pick the right one for your new project. Nothing more painful than getting half way into a project and realize you chose the wrong language.
Take your time, learn as much about the fundamentals as you can as these will usually move with you no matter what language(s) you learn.
Always type in the examples from whatever book(s) you learn from. Nothing replaces fingers on keyboard, interacting with the language and the program examples. You will learn so much more efficiently than if you just look at the examples.
Have fun and don't be afraid to just try stuff.
nobodyzhome
Jason
Posted 10:52 AM 4/4/08
not a very good or knowledgeable programmer, so perhaps I shouldn't be posting at all, but regardless take my post with a grain of salt. I say VB is a very easy language to learn first, but I would suggest you don't become proficient in it, just get familiar with it.
Jason
Spock
Posted 10:52 AM 4/4/08
PS - real game programmers also don't use XNA game studio.
Spock
jewalsh2k
Posted 10:51 AM 4/4/08
Groovy is awesome. It's built around Java so you can leverage any libraries already coded in Java plus it's got some newer features found in other languages like closures, etc. You can run it as pre-compiled like Java or using run-time compilation like PHP. Check it out at [groovy.codehaus.org] If you do web development, check out Grails at [www.grails.org.] Similar to RoR, has scaffolding but is built on very strong frameworks like Spring and Hibernate.
Whatever you do decide to learn, don't just learn the language, learn best practices. Learn how to design things properly from the start and you'll save yourself a lot of effort and time overall. A well thought out program often results in less code being written, less complexity and better performance. Learn design patterns. Check out the Design Pattern book by the Gang of Four. This is the bible of design. It won't make any sense until you program a while. Though if you are using an object oriented language, learn how to program to Interfaces early.
Finally, if there is one vital thing you should take away from any of this it's this. Make your code READABLE. Learn to name your variables/methods/classes easily understandable, even if it seems like you end up with ridiculously long names. Indent your code. Use comments properly. Properly named methods and variables reduce the need for commenting every line of code. But make sure the poor bugger who has to debug your code when you've moved on can understand what the hell you were trying to do.
jewalsh2k
orangepixistix
Posted 10:50 AM 4/4/08
I initially learned HTML/CSS and then went for Java. I'm not sure if you should learn Java or C++ first because the Intro to CS course used to teach C++ and now teaches Java. My friend was more interested in Python so he learned that on his own.
I'm going to say that once you get the hang of one language, it is easier to figure out the others but as many have said, it is always good to see what exactly you want to accomplish. I was always more interested in websites so my first interest was bound to be HTML.
Good luck with whatever you choose to learn.
orangepixistix
Spock
Posted 10:49 AM 4/4/08
This an obvious one. C and C++ without a doubt. They are they core industry standard, ANSI approved, programming languages taught throughout the world. I recommend "The C Programming Language" by the inventor of it himself, Dennis Richie. The bottom line is, if you ever at all want to be taken seriously in the industry and by other programmers, you absolutely must know C and C++; and NOT C#!!! C# is an Micro$oft, non-ANSI approved, or industry standard by any means. It is garbage in my opinion and will only help with something like XNA game studio. Real programmers use C and C++.
Spock
inboulder1
Posted 10:46 AM 4/4/08
This is pretty hilarious discussion, if it were slashdot you'd see a zillion rebuttals corrections to the above claims, but I'll just let it slide :)
inboulder1
netfortius
Posted 10:46 AM 4/4/08
Cross platform is what I would look for. C would be too platform dependent (at a certain level), and so would VB (at the other end of the spectrum) - which may lead to some scripting ones, with modules capable of handling any type of task - be it interfacing with LDAP, or socket-communicating with network[ed] devices. Perl, Python, Tcl (/Tk + Expect) are examples of such. Interesting enough, Tcl - for example, just to pick on one of previous posters' expertise - runs even on Cisco routers (!)
netfortius
holdemm
Posted 10:45 AM 4/4/08
I am not a programmer, just a casual dabbler in everything. Have tried to tinker with alot and also want to learn something properly. In freshman year of college in 1995, tried to take a CS class and it was all FORTRAN, nevertheless I ran away from CS and went into Business. From everything I have read around, the first should be what you want to accomplish, which I really dont have anything to accomplish yet.
holdemm
bachya
Posted 10:44 AM 4/4/08
I guess it depends on the intended audience. For programmers, learning C/C++ first will really set the stage for whatever languages come later. For non-programmers, I'd actually recommend Bash or Perl (or maybe even VBScript). Interpreted scripting isn't the most comprehensive "language set" out there, but the usefulness is unbelievable (even for people who aren't normally programmers).
bachya
ricardo.slacker
Posted 10:35 AM 4/4/08
I see alot of votes for c/Java, but I think we're looking for a good scripting language to automate things. One option is just shell scripting, you can go far with bash and a few utilities (and there are windows options once you include cygwin). Should you ever switch to mac, your scripts will still work.
Another language which I love is python. It was written as a teaching language and has great integration with windows (many windows apps are scriptable using python+COM).
That's my two cents, but what do I know? I make my living as a Tcl programmer.
ricardo.slacker
drakfyre
Posted 10:32 AM 4/4/08
Here's another vote for Python. I started with Commodore Basic back in the day, then moved to C, then to C++. And I've dabbled with a few other languages, and have been using Python a lot recently for basic programs. It doesn't require compiling, it's easy to set up, and it has a lot of nifty features. It's especially good with text data, and any time I need something to parse a file that needs to be human readable, Python is the first choice. Also, while it has Object Oriented complexity, it also can be used in a very standard loop oriented manner, just like C++. I rarely even use the object oriented features myself, other than the built in objects like lists, strings, and dictionaries.
Also, if you learn python, the structure is very similar to C and Java, and it would work as a stepping stone for both. The only problem I have with Python is that indenting (whitespace) matters.
drakfyre
pbarrett
Posted 10:30 AM 4/4/08
I did a Bioinformatics Master's degree a couple of years ago (that's computer programming for areas of biology) and the language they first taught us was Java - it's good for understanding the basics of programming (like primitive data types) and also higher-concept Object Oriented programming. It teaches good habits early, unlike trying to learn a pure scripting language (like Perl) which is very forgiving but not helpful in the long term.
Java also leads you into the world of JSPs, and eventually through that into areas like XML and AJAX. As someone else has said, there is a huge Java community and plenty of places on the web to get help from.
Whichver language you choose though, I'm sure you'll find it interesting. Enjoy.
pbarrett
plinkofrog
Posted 10:28 AM 4/4/08
Python and Ruby are pretty easy to run with. C/C++ and Java are a lot more widely used, but can have a steeper learning curve.
One of the best things to do is to learn from other people's scripts. (Personally, I still use Bash for simple scripting)
plinkofrog
TommySez
Posted 10:25 AM 4/4/08
FORTRAN. Or 6502 machine language. (Assembly's for wussies.)
TommySez
Gina Trapani
Posted 10:25 AM 4/4/08
I cut my coder teeth on Pascal in college, but it is truly a "teaching language" rather than one that I've ever used in the real world. Then I learned true Object Oriented Programming in Java, which is also a fantastic learning language because it's so strongly typed (your integers can only be integers, or else your program doesn't go), and the ONLY way to design your Java programs is with objects--procedures aren't an option in Java.
In grad school I had to write a simulated operating system in C, and I didn't have one iota of C experience. But knowing Java, I was able to wing it by just teaching myself C conventions... that's the way it is with programming. Once you learn common data structures, logic, loops, recursion, and other design patterns, the language itself becomes irrelevant--just a matter of applying syntax.
Same deal when I went through my PHP and Perl stages. At some point learning database design and SQL becomes important (especially if you're building dynamic web sites, and who isn't.) I did this in college/grad school with some giant DB no one uses any more, but these days a simple Access database can be designed in third normal form.
Today if I were just starting out, I think I'd go with Python, and teach myself using Mark Pilgrim's book, which is available for free online AND in the dead tree version, at [diveintopython.org]
Adam's done some impressive GUI app programming for Windows with AutoHotkey (like Texter and Belvedere), so I think that's a decent place to start even though it's a macro language. Here's his beginner guide.
Gina Trapani
Beran
Posted 10:19 AM 4/4/08
Well, when I first learned I learned on QBasic, and I found it rather simple to follow, now I'm actually taking CS in college and we're starting with Visual Basic, and it's only slightly more difficult. As a bonus it's actually relevant today, as opposed to a very old DOS based language.
Intellisense, and especially MSDN support make it a hell of a lot simpler as well.
I'll admit I don't have any experience with many other languages yet, so I can't really compare and contrast ease of use, but assuming you're relatively good at teaching yourself things, I can wholeheartedly recommend VB.
Beran
gamby1337
Posted 10:19 AM 4/4/08
Most major languages you choose will teach you the basics. C++ would be a good one to check out. I would also recommend setting up a linux server or getting a live cd/usb and learn some scripting in bash. Then you can write bash scripts to automate processes.
gamby1337
lumpymambo
Posted 10:16 AM 4/4/08
I'm a high school student, and in my Computer Science class we've been using Java. As Chints says, it is an object-oriented program, but getting down the basics is not hard at all. The support base for Java is enormous, and there's always a forum with answers and tips.
To be honest, I haven't had any experience at all with other programming languages. However, I feel that Java has been a great way to delve into the world of programming.
lumpymambo
brwnmamba
Posted 10:15 AM 4/4/08
I've wondered the same thing. I'm so glad that there is a topic about this. I've seen some awesome blogs and detailed resources geared toward developers. I'd love more than a dummies book (I'm not a dummy, just not a developer) but an easy and fun to use use tutorial. I mean, coding is like learning a new language right?
Speaking of language, I have a super easy question for Ms. Gina T and the Lifehacker team:
Is the correct way to pronounce LINUX lynn-ucks?
brwnmamba
gog
Posted 10:14 AM 4/4/08
Logo, Pascal, Basic, somethin like tjat.
It's not about the language it's about the concept of programming, the idea how to break a more or less complex problem into series of elementary steps.
Learning control structures, expression, etc.
Although many recommend starting with the Object Oriented Paradigm because it's easier to grasp, I am a little bit old school and believe that you should learn procedural programming first. Methods in OOP are quite procedural to me :)
gog
john.mull
Posted 10:13 AM 4/4/08
Start with Python. It's a good language that can provide you with immediate feedback via the interpreter, and it is also structured enough that you can learn good programming skills. Ruby might also be a good choice, but I'm partial to Python. Perl is out because of its cryptic code and TIMTOWTDI which can make standard ways of approaching problems completely screwed up.
VB or VBA are last possible choices, and then only because of the potential for VB use in web programming for ASP pages.
Feel free to ask any questions if I can help any more.
-- John
john.mull
KillDeer
Posted 10:13 AM 4/4/08
This is relevant to my interest. I've love to be able to learn some basic programming as I'm just a network admin not a programmer it would be something nice to learn but not dedicate myself to.
One thing that adds to me putting it off is the confusion above of the fact that C# is good, C is okay, and C++ is bad. Um, Thanks for making these names simple to understand.
KillDeer
gkchap
Posted 10:13 AM 4/4/08
I think it really depends on what you initially want to do. C+ or Java are really not bad if you want to just start learning, but HTML and JavaScript are good if you are more interested in web programming. I am a student at University of Phoenix in the IT program so over the last two years I have hit almost all of them. The all serve a purpose and there is an ample amount of information on the net to get anyone started. They all have their own quirks and take a little patience with to learn.
gkchap
tony_perreault
Posted 10:13 AM 4/4/08
A friend of mine who is a long-term CS programmer, who can code in multiple languages, loves Python for, according to him, it can do anything. Got code in C or Pascal? Python can convert it.
However, I would not suggest that Python be the first language to learn, since it is very heavily slanted to Object Oriented Programming (OOP).
The Intro to CS class at the local college where I live teaches C. The following semester is C++ and OOP.
As for myself, I have learned Fortran4/Fortran77, Pascal/TurboPascal, C, Perl, Javascript, PHP, and a smattering of Python. FWIW, regardless of the language you learn, good coding techniques with lots of comments will be of greater benefit in the long run. Once you've learned the basics of one language, you can pick up others more easily.
tony_perreault
Jamezspot
Posted 10:13 AM 4/4/08
I'm in the same boat as her. Please help me decide!
Jamezspot
chints
Posted 10:10 AM 4/4/08
It depends on what level of programming expertise you want to reach. If you are pretty serious, Java (or C#, if you like Microsoft) is the best first step in my opinion: clean syntax, robust programs. But it has the overhead of learning object-oriented concepts to harness full power. For a hobbyist programmer, JavaScript or C would be a great place to begin. In either case, avoid C++!
chints
sceo
Posted 10:09 AM 4/4/08
For basic scripting, there's the trust VBScript... can do a lot to the tune of automating if you generally work in Windows. For web (and also works for console scripting) is PHP - I've just found that it does the basics very easily and there's good documentation. In the Linux world, I might look at Python since the claim is that the "language doesn't get in your way."
sceo
zaxour
Posted 10:09 AM 4/4/08
As an engineering student, I've had to take a few programming classes. By far the easiest to understand initially was C++. Java is okay, but it has a few more complexities where as C++ is much more basic.
zaxour
Deprong Mori
Posted 10:08 AM 4/4/08
My old programmer buddies would say to learn programming fundamentals by following the classic Structure and Interpretation of Computer Programs text (Abelson and Sussman). The examples are in Common Lisp which isn't really helpful in today's world, but it's really the "correct" way to start.
Learn the fundamentals before picking your programming language poison(s).
Deprong Mori
knightfilm
Posted 11:42 AM 4/4/08
As a sysadmin for years and now a consultant, I've managed to get by, and even had a little fun, with PHP. That said, I've always wished I knew Perl and increasingly, Java and XML are becoming a job requirement. After this thread, I may have to check out Python.
Any way you decide to go, find a good IDE, and figure out how you learn. Some people are visual and like the dummy books for all of the examples and pictures. Some folks prefer more technical writing and grab the dense hardback or something from O'Reilly. Some need the structure of a real course (see the Lifehacker post recently on Google and CS training materials: [lifehacker.com]). Finally, whatever you do create something for you or for your job, don't just stick to Hello World. After all necessity is the mother of invention.
knightfilm
psletmoe
Posted 11:37 AM 4/4/08
If you're like a lot of people, you don't dream about computer programs, and you most certainly don't want a 500 pound programming guide for Christmas.
Instead, you might simply be toying with the idea of automating or enhancing some of those applications that you use every day, even though they seem rather redundant.
In this case, I would recommend VBA (Visual Basic for Applications) as a good place to start. True, VBA is not a stand-alone language, so learning VBA won't give you a thorough, start to finish understanding of computer programming in the same way that learning C or C++ would.
At the same time, however, you're probably going to see more immediate and measurable benefit--with a much smaller time investment for learning--by taking up VBA as opposed to other programming languages.
A couple of good starts here would be to take a stab at using VBA to customize an Excel workbook or Access database.
Along an entirely different vein, if you want a simple birds-eye view of what computer programming is all about, I would recommend Scratch from MIT. Sure, it's not going to help you get that raise that you want. But, it will certainly help you understand the basic components of a computer language. If my 6 year old daughter can *get it*, then I'm sure it would be helpful to almost anyone who is at the novice stage.
psletmoe
Evil Incarnate
Posted 11:33 AM 4/4/08
Java.
I have found that Python is far too robust for beginners to learn. C/C++/etc. are a little tricky to start with due to the memory management (or lack thereof). Java is very simple and SAFE; it cleans up beginners' mistakes so well and is far more intuitive.
While Java lacks many, many abilities and features found in the other languages, chances are no first-time programmer will need a single one of them.
Evil Incarnate
john.mull
Posted 11:33 AM 4/4/08
C++ as a starting language? For a non-programmer? No way! Sheila seems to be coming from the tech support arena or at least from a power user POV. She wants something easy to learn and that can be powerful enough to do some heavy lifting. C++ for this work is like trying to sew with a hammer. You could do it, but isn't a needle better?
I have to restate Python as the obvious choice. Freely available and easily installable with a small footprint on a computer. Plus it has the power to get quite complex with regular expressions, OO, GUI work via wxWidgets / PythonCard (or even .HTA ActiveScript applications in IE for Windows), XML, remote services, remote procedure calls, and more.
Lists, Hashes (dict), and more are easy to grasp and the indention mechanism makes code blocks very easy. If you want a compilable, distributable application, there are ways to accomplish that too with Python.
However, I'll also add a very big plug for AutoIt3 scripting language. VERY full featured (but Windows only) and quite easy to make programs that can do some very heavy lifting.
The Scite programming editor is free to use, cross-platform, and will easily execute Python, Ruby, VB(A), JScript, and more, straight from the editor. It also has a small footprint.
I started out programming in the many flavors of Basic, and have had to unlearn some quite bad habits. I have since learned so many others from assembler to logo to COBOL, Perl, C, C++, and more. Each has its own reason for being used. There was a great idea mentioned earlier to learn to program in a language, then learn apply the proper language for the job or task.
Lastly, ASP code written to run with IIS is quite attractive and a good reason to learn Basic. But... Python can do the same things too...
john.mull
kyiwong
Posted 11:32 AM 4/4/08
I'm another wanna-be coder -- really looking forward to the consensus!
kyiwong
detection
Posted 11:31 AM 4/4/08
In my high school, Computer Science 1/2 is Visual Basic, then Computer Science 3/4 is Java. (Used to be CS3 C++, CS4 Java, but it changed this year.) I found Visual Basic easier than Java, but Java is more widely supported. Good luck with whatever you choose.
detection
honeycut
Posted 12:21 PM 4/4/08
Good luck digesting all of this information Sheila. Maybe this post should have included a poll.
honeycut
BlogsOfSteel
Posted 12:14 PM 4/4/08
After 40 years of programming with pretty much everything, when I want to get something done quickly I always turn to my 3 little friends: shell scripting, sed & awk. They can't be beat for any kind of file manipulation you need to do from the command line. However, not so great for learning programming basics or non-command-line "windows style" or server side programs.
I have to agree with those who recommend VB as a good starting point, it's not very cryptic so easier for a beginner to see what the syntax is doing. Not where you may end up but a good place to start to get the BASICs then move on to some of the others mentioned here.
Good Luck Sheila!
BlogsOfSteel
Spaceboy
Posted 12:12 PM 4/4/08
easiest way to get started with programming:
open up excel, make the toolbox toolbar visible, make a button, click on the protractor icon (design mode), double click the button you just made, type something random and press F1.copy any examples that fancy you and start building up on those.
VBA is the easiest and most accessible programming language there is.
Spaceboy
powaking
Posted 12:01 PM 4/4/08
Maybe I didn't notice but no one mentioned AutoIt. Its free and easy to pick up and can make some pretty slick looking apps with it. I've learned to use it with my involvement with BartPE and WinBuilder projects.
powaking
Terry
Posted 12:57 PM 4/4/08
HTML.
I repeat: HTML
You said that you MAY be interested in becoming a programmer. This being the case, you should probably cut your teeth on something that's not too dense and which delivers a virtually immediate payoff. HTML is pretty simple, there's a bunch of software (much of it free) out there to help you write it, and it pretty much amounts to immediate gratification. It will also give you a decent idea whether or not you want to get any deeper into code chewing.
And don't ask programmers for advice about programming languages. It's like asking martial arts masters whether you should be breaking boards with your forehead, or concrete blocks. From their point of view, it's largely just a matter of personal preference. From YOUR point of view, however, no matter whose advice you take you just end up beating your head against something.
Terry
fireball87
Posted 12:56 PM 4/4/08
Pick your language based on what you want to accomplish. Either way the only thing you can do that would have a purely negative impact is overemphasizing the choosing of a language and never actually start to learn anything. Very little of coding is language dependent, its all about the minds ability to use tools to solve a puzzle. Do make sure that the first language you learn is one you can actually use though, because building sample apps do little for you compared to building ones that actually solve a problem you have.
Python C++ or whatever, it all depends on what you want to accomplish for yourself.
fireball87
runiteking1
Posted 12:50 PM 4/4/08
I learned Python over my middle school year 2 years ago and is still using it.
runiteking1
t3knomanser
Posted 12:50 PM 4/4/08
Practically, Ruby and Python.
But if you want to be a really hot programmer? LISP. LISP, and all it's variants (Scheme, Common LISP, ANSI LISP, NewLISP, etc.) are amazing languages. Knowing LISP makes you better at all other languages. It's a totally different way of thinking about programs that is enlightening.
And really, it's merely a matter of "where do you start". No programmer should only know one or two languages. First, all programming languages are essentially the same. Second, the differences help you expand the ways you can think about problems. Third, knowing many languages lets you play to their strengths. For chunky, enterprise programming, nothing beats .NET or Java. For quick-run desktop apps, Ruby and Python are the way to go. For AI or linguistic stuff, LISP and PROLOG are great.
You'll never know all the languages, but the more you learn, the easier it is to learn more.
t3knomanser
theoa
Posted 12:41 PM 4/4/08
When I read: "Reader Sheila considers herself a power user but wants to extend her tech skills to programming.", what I visualize is a savvy Internet user but not somebody who soon going to be doing Linux core code submissions. I see somebody who already has a profession or calling but wants to add new skills and insights to their work.
My advice would be to build a lifelong ongoing skill set aquisition strategy.
Start with learning HTML - the language used to build web pages. Then add CSS (cascading style sheets) to learn how to separate appreance from content. Then I might add some JavaScript or PHP - enough to be able to disect a web page.
I do like the idea of playing with Excel macro or AutoIt script. These can really help a power user add even more power.
On the other hand, it's all about the web. So installing and upgrading a WordPress blog or Drupal site - and then playing with plugins and templates are really useful skills.
Even more modern would be to learn how to build forms and create report web pages for Google Spreadsheets using the Google API.
If you start with these sorts of basic things and start talking to friends and acquaintances you'll start finding out that some of them are programmers.
It turns out languages are used by humans. The easiest way to learn a language is be with people that you like who speak the language.
Once you find some programmers you like, learn their language.
theoa
Chowdaaa
Posted 12:36 PM 4/4/08
QBASIC for the win!
But really, even thought BASIC or QBASIC isn't used for much anymore, it is still the base for C and C++, and converting to them is an easy learn.
Chowdaaa
SilberDrachi
Posted 12:35 PM 4/4/08
i think the big thing that everyone is missing is what she wants to do with the programming. every single language has something that is very good at, and something that it fails horribly at. for instance looking at C++, extremely strong and can do a multitude of things when in the proper hands, but tends to have errors that can be extremely confusing.
if she is just looking for simple scripts that she wants to automate things she could look into batch files or auto.it scripts. but if you are looking at a language that will lead to a future of programming as a job i would look at Java(easy to use, user friendly guides all over), or C++ (used all over and a requirement for just about any job in the programming fields)
SilberDrachi
hardcoreUFO
Posted 12:32 PM 4/4/08
There should be no debate here: Learn Python.
hardcoreUFO
RiotNrrd2001
Posted 12:30 PM 4/4/08
VB.NET 2008, hands down.
If anyone is basing their opinion of VB on the pre-.NET versions, that opinion needs revising. The .NET editions are considerably different than the old versions, even if the core syntax is essentially the same.
A number of studies suggest that object oriented programming is only difficult to learn for people who cut their teeth on procedural programming - in fact, it is significantly easier for "newbies" to learn than for people with prior experience in procedural styles. VB.NET is fully object oriented now (VB 6.0, for example, was not).
Microsoft just gives away Visual Studio Express for free, and while Microsoft might produce some crummy software, Visual Studio is NOT amongst those titles - it is very, very powerful, and yet easy to grasp at the same time. And although "Express" might sound stripped down, the Express editions are very capable - the only things missing from them are things that really only an "enterprise" programmer might want (i.e., Visual Studio Express is quite sufficient for most ordinary programming tasks).
And don't even get me started on the LINQ (Language Integrated Query) features of 2008. I've been programming for over twenty years now, and LINQ is one of the most exciting programming technologies I've seen in a long time - and yet is very easy to learn and use. Just this week I wrote a little program in a few hours using LINQ that would have taken me all week to do previously.
Yeah, I'm a VB.NET fanboy. I know whole slew of other languages (including PERL, Ruby, C#, and have done some Java and Python), but I always come back to VB.
RiotNrrd2001
kdyer
Posted 12:27 PM 4/4/08
For me, I love KiXtart.. KiXtart is used primarily by Admins and is part of one of the old Resource Kits (I think the 2000 Resource Kit) for logging into a domain, mapping drives, printers, setup Outlook to an Exchange server, etc. It is easy, powerful and does a lot. Ruud van Velsen of Microsoft has developed it over a number of years and has advanced quite nicely into a pretty powerful scripting language. VBScript is pretty powerful too, but with KiXtart's built in Functions and Macros, it makes setting up scripts easy.
Thanks,
Kent
kdyer
dkong1026
Posted 1:34 PM 4/4/08
@avaleske: It's very similar to basic and qbasic.
dkong1026
dkong1026
Posted 1:33 PM 4/4/08
Qbasic was my first language. I found it extremely easy. No compiling. The software is easy to find and download for free...easy syntax.
The only other languages I know are C++ (think it's awful. Shitty syntax....such shitty syntax), Python (also good, easy syntax and easy to understand), and some Java (not recommended...just....tough syntax).
dkong1026
avaleske
Posted 1:29 PM 4/4/08
I'm also wanting to get into programming, and from this it sounds like Java, VB, and Python would be good options to start with. Out of curiosity, what language do the TI-84 calculators use? Is it a custom language for the calculators?
avaleske
SirSmiley
Posted 1:28 PM 4/4/08
I'd say you really need to determine which you want to learn initially...Scripting or Programming?
Over the last couple of years I've learned VBScript and as Gina stated you eventually grasp how other languages work.
I think that both AutoHotkey and/or AutoIt are great places to start for scripting in Windows.
SirSmiley
jarhead
Posted 1:27 PM 4/4/08
It really depends on what you want to accomplish. I started with Actionscript (Flash) because I saw something I wanted to recreate and it just exploded from there. Actionscript has come a long way. And with Flex and now AIR, it keeps getting better.
Another one I have started playing with is Ruby & Rails... after reading all the posts, I think I will check out Python.
jarhead
Seth
Posted 1:26 PM 4/4/08
I'd suggest AutoHotkey, because you can make something useful right away. Windows PowerShell might also be worth looking into, but I know hardly anything about it (or other languages, for full disclosure). When I tried to learn Visual Basic years ago, I got bored by the emphasis on interface design. I like AutoHotkey, because if you have an idea for something to make computing faster, you can piece it together.
Seth
Spock
Posted 1:26 PM 4/4/08
PS II - I'm sorry to say, but if you want to become a developer, the MAC is probably the worst of the three major systems to choose from. I personally have all three, but I use them for development in this order: Linux/Unix, Windows, and MAC hardly ever at all.
Spock
Spock
Posted 1:20 PM 4/4/08
I have to disagree with some commenters about "simple to use" stuff like scratch and VisualBasic. They specifically are designed to hide the real programming aspect and guts of learning programming and programming languages. That is the last thing that you want if you want to learn it and learn how to do it in the most universal sense. It's like the difference between the button on your keyboard (musical) that plays preprogammed beats and music versus actually learning to read, write, and play real music on your own. In fact, as a programmer/analyst I absolutely could not refer to someone as a programmer if they did not know several fundamental details and languages such as C and C++. Fortran, Pascal, and COBOL are all also good standards, but they are really being faded out of existance in terms of what you must know to get a job in the industry, but they would give you a leg up over other job candidates. Plus I must point out that while you do compile Java code, it is absolutely not considered a compiled language. The difference is how the code is executed. In C and C++ the code is compiled and executed at the machine level. In Java, the code is partially compiled into an object code that is executed or "interpreted" by the Java Virtual Machine and is therefore more inefficient and is considered an interpreted language.
Spock
Quine
Posted 1:17 PM 4/4/08
Learn Assembly first. Learn it on the LC3 or other super-simple computer. Then learn C. That way the syntactical complexities are really small but the knowledge you get from it is huge.
Quine
manny_the_mammoth
Posted 1:09 PM 4/4/08
If you want to learn something to get a particular job, scan through the job descriptions and focus on those languages that the employers require. Chances are you would go in and maintain or improve upon existing code already written in Perl, Python, Java, C++, Tcl, etc.
Otherwise, a scripting language is the best starting point. I personally vote for Ruby. It does help to have a basic understanding of object-oriented programming (OOP) in order to program in Ruby effectively, because EVERYTHING in Ruby is an object. Not only is Ruby cross-platform (comes with Linux or Mac OS X distro; can be installed on Windows with something like Cygwin, which is freely available), but it has an interactive shell, irb, that allows you to play with the language without having to write scripts to figure Ruby out. irb is also useful in debugging your own scripts or classes. And, it comes standard with a unit test framework that is clean and simple to use. Unit testing is a good habit to get into when developing your classes. Finally, it has a very good documentation feature, RDoc, that can convert your code and any comments, optionally marked up, into documentation in framed HTML. Embedding documentation in the code in this manner is also a good habit. It can save you months down the line when you have to revisit the code and figure out what the heck you did and why you did it that way.
In summary, I find Ruby to be very clean, simple, and elegant. I have way more fun programming in Ruby than I did programming in Perl, C++, or C (never tried Python or Java).
manny_the_mammoth
zaka
Posted 1:07 PM 4/4/08
I am a recent CS grad, and I work as a programmer at a super giant mega corp. Here's my 2 cents. For what the OP is trying to accomplish, the most important thing probably is *not* the actual language (as long as it is rather standard, so no Lisp or Ada), but the development environment. Visual Studio and Net Beans are both awesome, and the languages that you'd end up using are pretty common. Basically, anything where you can drag buttons and list boxes around and easily write event handlers will probably go a long way in accomplishing what the OP probably is after.
Avoid C/C++ for this. Don't get me wrong, C is a great language, but it is totally inappropriate for what the OP is after. C# is fine. Java is fine. Visual Basic is fine. I like Python, but I am hesitant to recommend it here.
zaka
Munkii
Posted 1:05 PM 4/4/08
The best language to learn first is Java. C/C++ is masochistic to try and learn first, and anything else is too hard and/or not commonly used enough to be a good choice. Most programing 101 courses are taught in java, so I can't be too far wrong.
Once you have cut your teeth on a bit of java, I would strongly recommend learning Adobe Flex. Flex is a simple, modern language with lots of nice features. You can build both desktop and browser based applications easily and quickly. Flex isn't up to building the large scale apps that Java or C# is, but for smaller projects it is ideal!
Munkii
meowsqueak
Posted 1:02 PM 4/4/08
I'd also like to say that HTML is an extremely impractical and unhelpful 'language' to learn as a beginner. It's not even really a language. It won't teach you anything about data structures, algorithms, program flow, variables, object oriented concepts.
I assume the person concerned wishes to learn a language so that they can automate things, perhaps write a few applications. Go straight to Python. You can't do anything useful with HTML.
meowsqueak
Toote
Posted 1:02 PM 4/4/08
If you want to learn how to program there are different motivations to do so and, thus, different languages:
1- Know how to program: C
It's the best middle-level programming language. It will force you to learn how to deal with a lot of stuff you need to know to be a good programmer
Then you can move to other languages.
2- Make quick scripts that MUST be run on different OSes: PHP + HTML
Web servers can be run almost anywhere and PHP is simple enough to leanr in a while (specially if you already know C). All you need is to learn HTML and PHP and you're ready to go.
3- Make scripts that are modular and easy to mantain: Python
I would have gone some other way probably but since I've discovered Python it is the best. You can start with little scripts and then move on to web programming for point 2 and then a bit more to cover practically any program you'll ever need to run (point 1).
Toote
portezbie
Posted 1:01 PM 4/4/08
I am by no means a master of any programming language but i've taken intro classes in a few of them and I started with c++ and I found it diving into all the others much, easier but it could very well be the case that any language leads to another but I doubt any is quite as easy as c++. If not c++ I would say go for vbasic. From what I've heard it may not be the most useful language to learn in the long run, but it is really easy and intuitive and I think there is a satisfaction in how fast you can accomplish something while learning it. Vbasic is the kinda thing I could imagine myself someday actually using even in a basic way in application to any old job I might have as well. Vbasic also gave me a much better basic concept of how programs sort of come together.
portezbie
meowsqueak
Posted 12:59 PM 4/4/08
Just to explain where I'm coming from - I've been writing C & C++ for 15 years. I also know Perl, Python, Ruby, Bash, Java, some Lisp, VHDL, and bits and pieces of other languages like Prolog and OCAML.
If you're totally new to programming and want to teach yourself then the answer is simple - spend a few weeks/months and learn Python. The syntax is simple, it reads very easily, the interactive shell/debugger is excellent, and it can get as complicated or as simple as you want. It will also run nicely on different platforms. There's tonnes of documentation and examples.
You really can't go wrong with Python. Although Ruby is nice...
meowsqueak
momoffour
Posted 12:59 PM 4/4/08
I decided to teach my grandson Python after falling in love with David Bau's account (he taught his young son.) [davidbau.com]
I'm glad to see so many votes for Python.
momoffour
CWW
Posted 1:58 PM 4/4/08
Perl isn't a programmer's language but it's my favorite for quick scripts: it's not object oriented, it's not whitespace sensitive (unlike python) and its real strength is data manipulation which is really what a scripter wants.
Python is awesome for slightly more complex things that you want to DO STUFF rather than PROCESS stuff.
Of course, I started with C, then C++... I wouldn't recommend it.
CWW
jamescoleuk
Posted 1:54 PM 4/4/08
A desire to learn and limited evenings to do it in require maximum gratification, so Python or Ruby are good ones.
jamescoleuk
Boter
Posted 1:49 PM 4/4/08
Ok - before I get flamed to death I want to caveat my comment with the assumption I am under, that you are referring to a completely non-technical person (not a computer nerd, just a keyboard jockey) trying something self taught.
First learn DOS batch scripting. There is enough there to get the very rudimentary fundamentals of "automation" and scripting. It's a bit dated (now that we have cmd.exe instead of command.com) but I started with [www.ericphelps.com] back in high school. The Msdn is packed full of further information [search.msdn.microsoft.com]
Step two is PERL - I know I know - but, there is a strength to PERL. Once you understand the output of DOS, you can then use Perl to continue your automation to a higher level. O'Reilly's learning PERL, and PERL for dummies will get you started, [www.perl.com] is a little thick, but you can find what your looking for.
Step three is VBS or visual basic script - [msdn2.microsoft.com] - I know another cast back to the old but, VBS is the perfect gate way to Visual Basic - a real programming language where you can actually build your own exe files, manage code files and projects.
Step four is C++ - With a caveat that Visual C++ is "easier" (more forgiving) to use than real C++ because MS likes to cut corners. This allows you to move into the world of programmer. Projects, objects, headers and methods it is here is C++ that you control the computer. To turn on the Zen - you will feel a new level of control over your computer once you master C++.
Again the above is my personal opinion - I await your shunning :-)
Boter
Oblivion
Posted 1:47 PM 4/4/08
I like the way I learnt things.. try a little bit of BASIC, then teach yourself C at your own pace. Once you have learnt C, then you will appreciate C++, Visual Basic, Eiffel and other object oriented languages much more. And if you want some pain, you can also understand assembly more easily.
Having said that, I do scripting at work and Python is definitely my flavour of the month. The lack of braces and semi-colons as compared to Python or VB script makes the code SO much shorter and clearer to read.
Oblivion
BruceMagnus
Posted 1:44 PM 4/4/08
start with Python because it's easy to learn, open source, well designed, and runs on many platforms. many companies like google use it extensively.
if you also want to be well-rounded in programming languages, then make sure you learn: Python, C/C++, Java, Perl, Ada, and LISP.
some more details about those languages (skip the technical parts): [www.catb.org]
the person that wrote that article, Eric Raymond, is a major leader in open source software and wrote some very well-known programs.
I personally learned Pascal, Java, Javascript (completely different from java), and PHP (in that order) with a little bit of C/C++, Perl, and Python too.
BruceMagnus
AbstractEpiphany
Posted 1:42 PM 4/4/08
Python for a practical, "easy" starter language that packs a lot of punch once you get the hang of things. (I started with BASIC, that wasn't probably the best move ever.)
Scheme if you like bending your mind around things. (Dr. Scheme is a fantastic IDE for Scheme, and "How to Design Programs" is a pretty good textbook.)
PHP for web apps.
C or Java if you want to go a bit "old-school"--probably Java first, then wrap your mind around C and its pointers.
AbstractEpiphany
Virta
Posted 1:40 PM 4/4/08
I mostly do web programming so I would go with HTML hands down.
Virta
LegosJedi
Posted 1:37 PM 4/4/08
Most likely, for the computer programmer, C++. For Web Development, PHP. I was thinking Javascript until I realized that that's more of a scripting language than a programming language. Oh well.
LegosJedi
Jabapyth
Posted 1:37 PM 4/4/08
My first programming experience was with GameMaker (which doesnt actually have a real language). The language I learned on, which I would suggest to all beginners (or experts), is Python
Jabapyth
Blaenk Denum
Posted 2:37 PM 4/4/08
I would say any CLI language (That uses .Net or Mono). They are truly wonderful languages and /really/ straightforward. Something such as IronPython, Boo, C# or even VisualBasic.Net. If none of those appeal to you, you can check out this list here [en.wikipedia.org] These languages let you get straight into making programs without having to worry about the technicalities of memory handling, references, pointers, and other things that could be a roadblock to any person interested in learning how to program. But they're not just for noobs either, they're industry level languages which can be /really/ powerful if mastered. Noobs want to see results fast. A language like this could allow a noob to see how creating programs is definitely possible and cool, and would then choose to learn the technicalities. Rather than force feeding the technicalities which scare users away most of the time.
Blaenk Denum
aapezzuto
Posted 2:36 PM 4/4/08
Talk about a can of worms! What a few people have hit on, but cant be stressed enough is programming concepts are separate from language choice. Depending on what a starting programmers long term goals and immediate needs are would flavor the advice extremely.
If you need to do web development, I would focus on learning what you can squeeze out of HTML and CSS, eventually adding PHP to this.
If Programming is a long term goal, and you have all the time in the world, learn C#, Java, Python, or what ever other object oriented language you can find a good teacher/friend for.
If you have no friends nerdy enough to help, go to a book store and read the first 2 chapters of Head First Java. The first chapter is actually about how the book is a little different, and the second chapter gets the VERY basics started. If you like the way the book is written and you think you could learn from it... Buy it! It is the only book I recommend to someone who wants to learn object oriented programming without a teacher.
On your own, for quick "scripting" python is interesting. It is a good language for the extreme beginner who is technically minded, but to go from a basic script in python to full OO code is a huge leap... I would come back to it after learning those concepts elsewhere.
C++ it the modern powerhouse of languages when it comes to control, and possibility. That control costs you something, normally time and attention to every last detail. C++ is the only language I hear people suggest for a new programmer that requires that the program manage its own memory... this can be good if you have guidance, It can also be like giving a shotgun to an unobserved child, and telling them there is candy somewhere inside.
C is a great language for beginners, but it is not object oriented, still requires you to deal with the above mentioned memory "shotgun" and is frequently called C++ by accident. If your not using classes, prototypes and inheritance its probably not c++.
What would be rely nice is if there was a site that had all the major abstract concepts and examples in 5-10 different languages. I hear people say things like "you don't have to worry about types in python." Well then why the heck am I getting a improper type error!?! The basics are called that because they are common to large sets of things.
For me in the long term, unless something changes my kids will be learning c++ and python. These languages, once learned, seem to run the entire range of needs, and should provide a good base for them to learn any other language they may want in the future. However they will have me and my near army sized group of computer science friends to help them avoid candy filled firearms.
Remember your mileage may vary, and if you want good advice on something like this, you need to find someone who is not in love with 1 tool... You get crazy advice like "yeah, we can do that with a dremel!" when you ask about how to properly build a bicycle from pipe and sheet metal.
aapezzuto
CMPalmer
Posted 2:35 PM 4/4/08
Wow, that's a lot of comments...
I've been programming for over 25 years (gee, I don't feel that old) and I've used dozens of programming languages. My current feeling on the subject is a bit complicated, but maybe a bit simpler than trying to average all of the comments on this thread...
Once you learn the basics and have a bit of experience, learning a new programming language or environment isn't nearly as hard as learning a new human language, so I'd definitely recommend starting with something relatively easy and trying to learn it the right way. This is do as I say, not do as I did since I learned to program in BASIC on a Commodore 64 and while the background helped later, it took a long time to unlearn bad habits. The good news is that there are hundreds of great books out there that cover most modern languages and many of them are "How to Learn to Program" books that start with the basics. Personally, I'm partial to O'Reilly Press books.
I think that your best bet would be a modern, very structured, object-oriented language such as C# or Java. Development tools for both languages are free, there are lots of books out there, and they are both very clean languages that "force" you to do things the right way. Starting with either them will give you a great foundation for learning many other languages. The languages themselves are so similar that unless you see library calls or common objects, you can barely tell C# code from Java code at first glance. Both are great foundations for web development (particularly server-side) and give you the background for scripting client-side web stuff in Javascript.
I'm a big fan of newer languages like Python and Ruby and they very well may be the shape of things to come, but right now, as cool and easy to learn as they are, they are significantly different from most other mainstream computer languages that your skills won't transfer as easily. Python is increasingly being used to script macros within applications, though, so if that is interesting to you, it is something to consider. Likewise, Ruby and Rails are a great way to create complex web sites with very little code, but at least for the time being, those skills won't help you if you want (or need) to move to web development with PHP, ASP.Net, or whatever.
I'm also a big Perl fan and it is one of the easiest languages to learn, because it is very powerful and very forgiving and runs on everything. On the other hand, it is so forgiving that you have to be very self-disciplined or you will create monstrously bad code and have a hell of a time trying to unlearn it.
Finally, IMHO, C (and even C++) are definitely on their way out as mainstream languages (although C++ is still a necessary skill for high performance, low level programming for video, hardware drivers, and OS code). They are also extremely cryptic and obtuse compared to most modern languages.
Here is my short answer: Get either "Head First Java" or "Head First C#" from O'Reilly Press and dive in. If you've already got a computer, you'll only be out the price of a book if you don't like it.
CMPalmer
arungupta
Posted 2:13 PM 4/4/08
It really depends on what you want to do and on what OS.
For Windows:
a) Writing small utilities, use batch programming. You would be amazed at how powerful it is. Do not expect to do any low level programming with batch (like device drivers, services etc).
b) Slightly advanced would be Windows scripting. Very powerful, but not for writing stuff like Windows services etc.
For Unix/Linux:
a) Start with shell scripting. Choose a particular shell and learn to write scripts for that. It is amazingly powerful way more powerful than Windows batch or Windows scripting.
The batch/scripting will allow you to learn the OS commands. Beware that these programs will run only on the OS they are written for.
If you want to write standalone executable programs with absolute control over the hardware/OS, my choice goes with C/C++.
arungupta
AlexJAnder
Posted 2:13 PM 4/4/08
Assuming you want to quickly put together some pretty powerful tricks going (data-crunching, dynamic presentation, e-mail tricks), I would suggest PHP (language) with mySQL (database). For me, it's like C++, but a little more intuitive and much quicker to find a reason to use.
They are free and have great support on their forums and databases.
P.S. I've heard good things about Ruby.
AlexJAnder
Gina Trapani
Posted 2:12 PM 4/4/08
More from Torvalds on the pronunciation of "Linux":
[groups.google.com]
Gina Trapani
Gina Trapani
Posted 2:09 PM 4/4/08
@brwnmamba: Is the correct way to pronounce LINUX lynn-ucks?
Yes! I have an MP3 of Mr. Torvalds that confirms this.
Gina Trapani
okmnji
Posted 2:09 PM 4/4/08
There's been a ton of comments already, but I might as well throw in my $0.02.
Want to learn scripting / programming? The best way, I think, is to just pick a tool, and run with it. It doesn't matter what tool, I think, you will learn the most by DOING rather than fussing over what the "right" tools are or the "best" tutorials or books. Take a few minutes, and think of something repetitive that you would like to automate, then take a look at what resources you have available.
The lowest barrier-to-entry options would be shell scripts / batch files and JavaScript, as everyone already has a shell and a browser on their system. Next would be the various interpretable languages, perl, Python, Tcl, Lisp, BASIC, Matlab, where most would likely need to install the interpreter, but you get (near) instant feedback. Then there are the compiled languages, C, Java, FORTRAN, which are more involved, but let you make "real" programs. Finally there is assembler or machine code; no one can truly understand programming without getting a little into the guts of the machine, to find out what their code is *really* doing.
There is no best option. There is no worst option. There are only *options*. Pick one, and good luck!
okmnji
Krylez
Posted 2:07 PM 4/4/08
I would also like to suggest that you do not begin with an IDE. You will understand programming much better and have better techniques if you start with a simple text editor like notepad++. IDEs are wonderful, but they too often become crutches for beginners.
Krylez
Krylez
Posted 2:05 PM 4/4/08
Java is an outstanding language to begin with. It should by no means be your only language, but suggest it to nearly everyone. Python is great, but its wonderful flexibility can cause beginners to pick up bad habits. Microsoft's C# warrants a look, but even considering Mono it isn't as universal as other languages. Avoid Visual Basic as a first language; it will damage your brain. A very powerful and unforgiving language can be found in C, so I'd recommend at least starting elsewhere. Other highly useful languages are Ruby, Perl, PHP, and Scheme (NOT FOR BEGINNERS). Javascript and HTML, while useful, are NOT programming languages.
Keep in mind that whatever language you begin with (I recommend Java again) is only a tool. After you develop and hone the right skills, you should be able to pick up almost any language quickly. Therefore, the way you learn to program is vastly more important than what language you learn first. Poking around by yourself can be useful, but it helps to have someone experienced to look at your code to let you know if you're doing things "right". Your code may work just fine while being totally unreadable and/or inefficient. If you don't know anyone like this, take a class or find a forum.
Krylez
Paul_Eck
Posted 2:04 PM 4/4/08
My personal choice is Java. It has the best documentation that I've seen in the languages I've worked with. This is very important for someone starting out. You can go to java.sun.com and see detailed instructions in how to use every possible command and what that command does. Also start out using the Eclipse IDE. Eclipse offers in line error highlighting similar to spellcheck in MS Word.
Speaking of MS I would not recommend any of their languages to learn with. C# is so close to Java that in many programs there is no noticeable difference. Also if you choose to learn C don't do it in Visual Studio as VS C is not ANSI compliant.
C/C++ are good(actually what I learned on) but for a first timer learning on your own you don't want to have to google every problem you run into when you could use Java and know exactly where to go every time.
I'm sure some of the newer languages have great documentation to but I am not familiar with them.
Good luck!
Paul_Eck
arvinddeshpande
Posted 2:03 PM 4/4/08
IMHO Python is somewhere one can start without having much knowledge of any programming knowledge. As someone has already said "language does not get in your way". Practically I have experienced that no attention is ever paid to how can I do something.....(e.g. how can I read the file in C, parse the data etc. ) in Python all the attention is given to getting things done the right way.
My vote goes for Python....whats more....it even teaches you good indentation practices. Your program won't go if not typed correctly.
arvinddeshpande
idogis1
Posted 2:01 PM 4/4/08
Visual Basic is a good first language.
idogis1
davidengel
Posted 2:01 PM 4/4/08
I would recommend learning the concepts behind programming by using a simpler language - probably start with a scripting language like bash when dealing with Linux or DOS batch files in a Windows environment. Then step up to a more powerful, cross-platform scripting language, like Perl, PHP, or Python, each of which can be used for web, console, or GUI, and get completely comfortable in it (I would recommend cross-platform over something like VB which locks you in, but that is my preference).
At that point, if you want to progress beyond automating processes via scripting, take on a compiled language like C, C++, or others. If you've learned your scripting of choice thoroughly enough, you'll realize that beyond syntax, there are really very few different approaches to programming - procedural and object-oriented, primarily. It becomes easy to pick up the basics of many languages after that.
Almost every programmer is going to have their favorite language that they will recommend - including me - but the plain truth is that there are no perfect languages. Each have their strengths and weaknesses, and the best situation is when you can take those into account when you come up to a project.
davidengel
Joe
Posted 2:00 PM 4/4/08
I'd say if you're not going to be a serious applications programmer, learn some weak-typed language like PHP or Javascript first to get your feet wet with program logic without having to worry about whether your types (the difference between say a number and a word) are correct. This will help you with the control structures(if statements, loops), how the logic works and how to solve some basic problems. Then you can move on to a more advanced language and learn the different types, objects, etc.
Joe
Averain
Posted 1:59 PM 4/4/08
This brings to mind a few other topics that Lifehacker should ask us all about to get some (in the words of one of the posters above) "consensus":
1. Which is better, MacOS, Windows or Linux?
2. What is the best religion in the world?
3. Who would be the best president: Hillary, Obama or McCain?
But seriously, I'm throwing my vote in for Java.
(I'm also impressed that a flame war hasn't really started yet. Maybe Lifehacker commenters really are a cut above?)
Averain
finsprings
Posted 1:59 PM 4/4/08
I'd definitely recommend starting with Python. It has a very low barrier to entry but is also extremely powerful and full featured. Failing that, pick another interpreted/script language such as Ruby. I'd avoid the compiled languages (C++, Java, etc) for your first foray into programming, since learning how to use the compiler is just another thing you need to figure out. I use C++ all day every day but I still use Python when I need to knock something quick up, or mess around with file formatting, or extracing interesting data for text and so on.
finsprings
fluxrad
Posted 3:10 PM 4/4/08
I'd like to 52nd the call for learning scripting first. It's procedural, and it gets you in the right mindset to code. Next you can pick up something a bit more involved - most colleges use either C, C++, or Java for a reason. They're reasonably basic languages that give you a good grounding in programming theory.
I remember one of my programming profs in college noted, "Programmers write code. Software engineers solve problems." Learn the fundamentals with a low level language and you'll be able to pick up others much more efficiently.
@Gina Trapani: You get bonus points if you can identify the genesis of the Linus Torvalds, "I pronounce Linux lee-nooks" mp3 :-)
fluxrad
bkpatt
Posted 3:03 PM 4/4/08
At least it's safe to say there's no way in hell Sheila wants to be a programmer anymore. Another disaster averted! Well done.
bkpatt
brandonmartinez
Posted 3:00 PM 4/4/08
I would say Ruby. :) I love it, and wish it would have been my first....
brandonmartinez
torsoboy
Posted 2:48 PM 4/4/08
C++ is incredibly powerful, and having good knowledge of it will allow you to learn any other language with relative ease. It's got a fairly high learning curve, but well worth it for any serious programmer.
C# might be better for beginners, since it has good intellisense and the syntax is almost identical to C++.
torsoboy
Steve Hollasch
Posted 2:48 PM 4/4/08
My opinion? You already know how to program.
Have you set your oven to cook something starting at 3:30, at 450 degrees Fahrenheit, for two hours? Have you set your VCR to record channel 5 from 7:00 until 9:00? That's programming.
I know five or six assembly languages, Perl, C, C++, JavaScript, XML, CSS, HTML, CShell, Windows command shell, and others. I've programming in Lisp-like languages, Basic (way back in the day), Pascal, Java, and a whole load of simple scripting languages. They all have strengths and weaknesses, and most have non-trivial startup costs (finding the interpreter/compiler, setting up your environment, locating documentation plus a friendly and accessible community to help out, and so forth).
Like a couple other readers, I think Windows shell scripting is a great way to dip your toe in the water.
But here's the main thing: what do you want programming to do for you? That's WAY more important than picking some random language to start with. I've been programming for 25 years. I love programming, but it's often a painful and tedious process. You should be rewarded for your efforts. That is you should be getting practical benefits from programming within a few days. Maybe a script that helps you do something that you had to do manually before. Maybe a simple extension to an application you use often. Tell us what you do day-to-day, and you can get a much more useful answer.
Once you've mastered something that helps you today, you'll find that many of the concepts carry over to tasks you want to tackle tomorrow.
Steve Hollasch
Rhomp
Posted 2:44 PM 4/4/08
OK so, while sorting though this list might be a challenge let me say that it really depends on what you want to do. if you want to go right into writing scripts and such Java or C/C++ is a good way to go. HOWEVER, i would not recommend it as a first if you are looking to go into programming for a while or get really good.
I would have to Say the Scheme or Pascal would be best. If you use the GIMP then you can use scheme + script-fu and make some cool image scripts. Also there is a great online textbook HTDP.org that is comprehensive and free. This is only if your really ready to go in deph but I learned it last year as a fist and it went very well, I even taught myself.
Rhomp
julien c
Posted 3:47 PM 4/4/08
Hi,
It really depends what you want to do, and where :) You might choose the web or the desktop, but I beleive the most important thing is mixing fun with studying/learning. Some like UI interfaces, others interaction with databases, and some might like animation. There are a bunch of programming languages out there and it's really hard to decide which one to start with. I don't think it has been mentionned above so I'll suggest you to go for ActionScript3.0 and Flex (from Adobe); their SDK is free & open source so that'll let you test it for free. I use other languages but this one is really fun and not hard to learn. Have fun
julien c
david2tm
Posted 3:44 PM 4/4/08
I would recommend Visual Basic, not ".net"
VBScript is very like old VB.
Also in MS Office you will use VBA. All three of them are similar.
Ruby is nice thing... But learning main consepts of programming from pure OOP language will be hard.
david2tm
sophacles
Posted 3:43 PM 4/4/08
Im jumping on the python bandwagon here. There are 2 (main) reasons for this.
1. It is pretty simple to learn, but very flexible/powerful at the same time.
2. It is truely cross platform. Code will run just about anywhere, which is particularly useful when making web stuff. Also with IronPython and jython (implementations of python for .net and java respecively) it can be very very useful.
* disclaimer I am a python fan and professional python programmer, my view may be biased.
sophacles
JiveMasterT
Posted 3:35 PM 4/4/08
Python.
Why? It teaches you to format your code so it can be read. I learned C first, but python changed the way I write my code in every language because it forces you to make it readable otherwise it don't work.
JiveMasterT
wrecklass
Posted 3:27 PM 4/4/08
I'm going to add another vote for Ruby, it is an interpreted programming language so you can write and run programs quickly without the build/compile step. You can use a basic text editor and the interpreters are freely available for any platform.
As others have stated, everything in Ruby is an object. Learning object oriented design and programming will serve you very well. It can be a difficult paradigm for people who programmed in early procedural languages (like C/Pascal) but it is actually very natural when starting out. There are a host of great tutorials on the web for programming in Ruby. I recommend the one by 'why the lucky stiff' (google it). It is funny and quite good.
Python is very good as well, but Objects are taped onto Python as an after thought and it can be a frustrating language for beginners because it cares so much about white space in program text.
wrecklass
emwendelin
Posted 3:23 PM 4/4/08
And I will 53rd that, fluxrad.
emwendelin
nnk