Learning programming

Good Language to start programming

  • C++

  • Java

  • Perl

  • Python

  • Ruby

  • Javascript

  • C#

  • Lisp


Results are only viewable after voting.

Firetrak

Member
Oct 24, 2014
131
0
76
I'm sure you guys have seen this plenty... but...

I've always wanted to get into programming and basically would like to know where to start.

Its not directed to any particular language, but which one is best to start with.

I'd like to learn language/s that are applicable today and hopefully 5-10 years down the road.

Which should i start with and which resources are out their to learn from. Going to college or classes to do it is just not practical right now, so something I can teach myself.

I know I want to learn internet languages as well as hardware based languages.

Thanks guys.
 

smackababy

Lifer
Oct 30, 2008
27,024
79
86
Start with C++. Every C++ programmer I've know that has transitioned to a different language had zero problems. Can't say the same for Java and a Python guys I've met.
 

sourceninja

Diamond Member
Mar 8, 2005
8,805
65
91
Start with C++. Every C++ programmer I've know that has transitioned to a different language had zero problems. Can't say the same for Java and a Python guys I've met.

I agree and disagree. Learning logic and flow is the most important part of getting into programming. This does not make you a programmer, but it is something that is essential to becoming one.

When I taught intro programming classes in the past I have had the best success with languages that abstract out the more complex parts of software development. While I feel every good developer should spend some time learning C or C++ and spend some time learning how compilers work. I really think the good fundamentals are best taught on a less forgiving language.

You could learn to ride a motorcycle on a Triumph Speed triple, but maybe it's best to start on something a little easier and less forgiving of your mistakes.
 

SteveGrabowski

Diamond Member
Oct 20, 2014
6,806
5,769
136
Start here with MIT's Intro course for people with no experience whatsoever:
http://ocw.mit.edu/courses/electric...o-computer-science-and-programming-fall-2008/

Or here with Harvard's intro course for people with no experience whatsoever:
https://www.edx.org/course/harvardx/harvardx-cs50x-introduction-computer-1022#.VFKnMGfsGUk

They're both amazing courses that are a lot more effective than picking up a textbook (though that's a great way to learn once you get a little more comfortable in the subject). You can do an entire undergrad degree in CS using the following free sources of video lectures, assignments, exams, and for edx, coursera, and Stanford, message boards.

edx
coursera
MIT OCW
Berkeley Webcast
class.stanford.edu
NPTEL

In this day and age you can get a pretty reasonable approximation to a bachelor's degree for the cost of high speed internet. I know it's not the same as when you pay real money and have real deadlines that have real consequences for failing to meet, but it's pretty damn good for free.
 
Last edited:

SteveGrabowski

Diamond Member
Oct 20, 2014
6,806
5,769
136
This is also an unreal book, completely free of charge, as the authors are both heavily involved in the Free Software Foundation.

http://mitpress.mit.edu/sicp/

This book, SICP, is one of the most readable and yet challenging technical books out there. It's a true masterpiece. I do think it's a little more advanced than say a first course in CS though, but as a second course I think it's unbeatable. Here are some lectures by the authors; the sound isn't great, but the material is.

https://www.youtube.com/playlist?list=PL45E91EF044CEC5A8

There is also a more modern version of a course based on this book from Berkeley webcast called CS61A, but look for a 2008 or 2009 version, as the really polished Scheme version of the course has been replaced by a Python version which seems pretty rough still and with professors who aren't nearly as good of teachers as Brian Harvey, who does the old CS61A courses.
 

Gerry Rzeppa

Member
Dec 13, 2013
195
1
76
www.osmosian.com
If you've got a Windows computer, you could try Plain English. After all, we know English is going to be around 5 - 10 years down the road! You can read the documentation for our language here:

www.osmosian.com/instructions.pdf

And if you like what you see, you can get the whole development system here:

www.osmosian.com/cal-3040.zip

Just download and unzip it; no installation necessary. Follow the instructions and you'll quickly be on your way.

All free, with free support.
 

Spungo

Diamond Member
Jul 22, 2012
3,217
2
81
I would say start with Perl or Python because you can actually do things with them in very little time. It's encouraging when you can make things that are useful. My personal pick is Perl because the books Learning Perl and Intermediate Perl (O'Reilly) are incredible.
You can find free books here:
http://it-ebooks.info/
(if you find a book useful, please support the author by buying a copy of the book)

Languages like C++, C#, and Java are good to know, but I think the languages themselves can get in the way of learning the fundamentals of computing and how to look at problems. In the book Think Python, the intro says the book was written because the author was trying to teach basic fundamentals of computing, and his students were struggling with Java itself. Even if students had an idea of how a problem should be solved, getting the computer to actually do it was a major problem.

I'm trying to learn C# from a book, and I often find myself wanting to do things in Perl just because it's so much easier. I'm blown away by how difficult or wonky some things are in C# (and C++ and Java and ever other language). For example, an array in Perl can be of any length, and it can contain any type of data or reference. The size of the array can be changed at any time, and values can be changed at any time. C# is the exact opposite. You wouldn't believe how weird the syntax is to iterate through a dictionary in C#. You can't just write foreach (myDictionary) and go nuts. It wants you to state exactly what type the key and value are, it wants you to assign variables, it forces you to cast them so it looks really weird. Something I wrote today was like this:
Code:
myPeople.Add((Person)(myEntry.Value).Name)
It's saying myEntry.Value is a Person object, get the Name property from that Person object, and add it to the list myPeople. I think it also had a ToString in there somewhere, but I'm not sure. Doing the exact same thing in Perl would be like this:
Code:
push myPeople, $_->{Name};
 
Last edited:

Spungo

Diamond Member
Jul 22, 2012
3,217
2
81
LISP for AutoCAD:
Code:
(append myPeople (assoc "Name" Person))

LISP is such an interesting language. After writing simple scripts to do things in AutoCAD, one starts to see the world in terms of lists. Perl's way of handling data feels very similar to LISP.
 
Feb 25, 2011
16,777
1,466
126
C#
Code:
myPeople.Add((Person)(myEntry.Value).Name)
Perl
Code:
push myPeople, $_->{Name};
Plain English
Code:
Add the person's name to the list.
Python:

Code:
mypeople.append(name)

Then proceed to get yelled at because your whitespace is wrong.
 

smackababy

Lifer
Oct 30, 2008
27,024
79
86
I agree and disagree. Learning logic and flow is the most important part of getting into programming. This does not make you a programmer, but it is something that is essential to becoming one.

When I taught intro programming classes in the past I have had the best success with languages that abstract out the more complex parts of software development. While I feel every good developer should spend some time learning C or C++ and spend some time learning how compilers work. I really think the good fundamentals are best taught on a less forgiving language.

You could learn to ride a motorcycle on a Triumph Speed triple, but maybe it's best to start on something a little easier and less forgiving of your mistakes.

A lot of the languages viewed as "learner friendly" seem to follow the "give them enough rope to play with, but not enough to hang themselves" and it can end up being limited once you want to get past the basic ideas. C++, on the other hand, gives you enough rope to hang the entire neighborhood.
 

Firetrak

Member
Oct 24, 2014
131
0
76
Wow guys, what awesome help... albeit a little conflicting.

So is it C++, Java, Python, Perl? haha
 
Feb 25, 2011
16,777
1,466
126
Wow guys, what awesome help... albeit a little conflicting.

So is it C++, Java, Python, Perl? haha

Before anybody gets too offended, I know there's more overlap, that you can make fully-featured applications in Python, etc. I'm probably erring on the side of overly simplistic here.

Python and Perl are scripting languages. C++ and Java are application programming languages.

Learn C/C++/C#/Java if you're serious about software engineering (just pick one; it really doesn't matter).

If you're more IT oriented and want to be able to do some custom solutions work (custom scripts and/or plug-ins are usually the "glue" that allows systems from multiple vendors to work together), you're more interested in scripting anyway. Start with Python (which is the "new hotness" to Perl's "old and busted") or Ruby. But planning on learning 3-4 scripting languages, at minimum. Including Perl, frankly. 5, not 6. Python 3 has a little more momentum than Perl 6 did - learn Python 3, but ideally, learn to write code that works in 2 and 3. It'll save you headaches later.

Learning Java and Groovy at the same time is an option - they're pretty similar. (Groovy is Java-lite for scripting, basically.) But I don't see groovy used a lot outside of plug-in development for Java based applications. (Then again, I'm not looking super hard.)

Making third party plugins for popular enterprise software packages like Jira is... potentially lucrative.
 

Gerry Rzeppa

Member
Dec 13, 2013
195
1
76
www.osmosian.com
Wow guys, what awesome help... albeit a little conflicting. So is it C++, Java, Python, Perl? haha

That's exactly my point. There's no end to the Babel of syntax variations that people can dream up:

C#
Code:
myPeople.Add((Person)(myEntry.Value).Name)
Perl
Code:
push myPeople, $_->{Name};
Python
Code:
mypeople.append(name)

And everybody has a favorite since, in practice, "user friendly is what the user is used to."

So why not learn about programming using a syntax you already know:

Plain English
Code:
Add the person's name to the list.

Focus on the concepts, the essentials, first. You can memorize all those strange uses of punctuation marks and the rules for artificially squishing up names later.
 

Firetrak

Member
Oct 24, 2014
131
0
76
Hmm a lot of info to go with.

I think i'd like to learn C## and Perl/Phython.

So i take it Java is easier then C##, but learning that first, does that handicap me?
 

smackababy

Lifer
Oct 30, 2008
27,024
79
86
That's exactly my point. There's no end to the Babel of syntax variations that people can dream up:

C#
Code:
myPeople.Add((Person)(myEntry.Value).Name)
Perl
Code:
push myPeople, $_->{Name};
Python
Code:
mypeople.append(name)

And everybody has a favorite since, in practice, "user friendly is what the user is used to."

So why not learn about programming using a syntax you already know:

Plain English
Code:
Add the person's name to the list.

Focus on the concepts, the essentials, first. You can memorize all those strange uses of punctuation marks and the rules for artificially squishing up names later.

We've had this discussion before. How do you explain, in a readable manner complex relationships and inheritance using sentences? Sure, replacing setters and getters with a sentence seems easy, but replace something truly meaningful and you're writing a paragraph of jumbled mess or a stupid long run on sentence.
 

Firetrak

Member
Oct 24, 2014
131
0
76
We've had this discussion before. How do you explain, in a readable manner complex relationships and inheritance using sentences? Sure, replacing setters and getters with a sentence seems easy, but replace something truly meaningful and you're writing a paragraph of jumbled mess or a stupid long run on sentence.

That was somewhat my thoughts. I know how I learn and if i learn something one way only to have to relearn it with additional info, it'll confuse me.

Call me dumb, but I just know how my brain works.
 

Gerry Rzeppa

Member
Dec 13, 2013
195
1
76
www.osmosian.com
We've had this discussion before. How do you explain, in a readable manner complex relationships and inheritance using sentences? Sure, replacing setters and getters with a sentence seems easy, but replace something truly meaningful and you're writing a paragraph of jumbled mess or a stupid long run on sentence.

If that were true, how did we ever manage to write an entire development system -- including a unique interface, a simplified file manager, an elegant text editor, a hexadecimal dumper, a native-code-generating compiler/linker, and a wysiwyg page layout facility -- conveniently and efficiently, using only Plain English? Surely the "complex relationships and inheritance" you speak of are in there somewhere. And yet there's no "jumbled mess" or "stupid long run on sentences" anywhere in the code.
 

Firetrak

Member
Oct 24, 2014
131
0
76
If you've got a Windows computer, you could try Plain English. After all, we know English is going to be around 5 - 10 years down the road! You can read the documentation for our language here:

www.osmosian.com/instructions.pdf

And if you like what you see, you can get the whole development system here:

www.osmosian.com/cal-3040.zip

Just download and unzip it; no installation necessary. Follow the instructions and you'll quickly be on your way.

All free, with free support.

bitdefender shows there being malware on that page? but it also shows that for routers so who knows.
 

Gerry Rzeppa

Member
Dec 13, 2013
195
1
76
www.osmosian.com
That was somewhat my thoughts. I know how I learn and if i learn something one way only to have to relearn it with additional info, it'll confuse me. Call me dumb, but I just know how my brain works.

The advantage to learning about programming in Plain English is that you already think and speak and write in English. So you won't have to learn to think in some other way; you won't have to learn any new syntax; and you will be thus able to easily distinguish the concepts (which are important) from the implementation of those concepts (which is more or less arbitrary).

This is not the right place for another discussion of plain language programming. Let's stick to the OP's specific question about learning current practical languages, as well as languages of the future, and let's be specific about which we're discussing in each case.

Markbnj
 
Last edited by a moderator:

Spungo

Diamond Member
Jul 22, 2012
3,217
2
81
We've had this discussion before. How do you explain, in a readable manner complex relationships and inheritance using sentences? Sure, replacing setters and getters with a sentence seems easy, but replace something truly meaningful and you're writing a paragraph of jumbled mess or a stupid long run on sentence.
You can start by not naming functions "foo" or "spam".
Intermediate Perl is an interesting book because all of the coding is related to Gilligan's Island. One of the problems is parsing a log file of hut to hut data flow.
 
Last edited:

Firetrak

Member
Oct 24, 2014
131
0
76
You can start by not naming functions "foo" or "spam".
Intermediate Perl is an interesting book because all of the coding is related to Gilligan's Island. One of the problems is parsing a log file of hut to hut data flow.

I so have no idea what half the things you said meant haha.

Although this topic is extremely interesting.

So ermm if I decided to start with Java is that a bad idea. why Java, who knows seems everyone else conflicted so i pulled it out of the hat. :)
 

Firetrak

Member
Oct 24, 2014
131
0
76
So I added a poll, I think this could really help, you guys are awesome, thanks so much.