There is another dialect of Scheme called Racket, that has an entire development environment intended to make it easy to learn Scheme. Racket uses another book titled "How to Design Programs", that is also freely available online.
Learning Scheme will give you a solid foundation in the fundamental concepts of programming.
If you would rather start to learn programming with a more mainstream language, Python is the programming language that MIT is now using in their introductory programming course.
For more information use your favorite search engine to look up "mit ocw gentle introduction programming" or "sicp" or "htdp".
As inetsee says, Scheme is this. It will provide you with a firm basis for actually understanding how programs execute. (Theoretically, learning C will also do this, but if you want to come from that direction I recommend learning some assembly language instead, since the semantics of C are surprisingly complex). Stretching the analogy rather dangerously, Scheme is as relevant to the past, present and future of other languages as Latin (though this is a conceptual rather than historical truth), as pedagogical/minimalist as Esperanto, and as expressive as English.
Also, if you find HtDP too tame or SICP too challenging (certainly possible unless you have a science/math background, though most parts requiring specific knowledge are optional), try Concrete Abstractions (http://gustavus.edu/+max/concrete-abstractions.html).
In that respect I think Java plays a role similar to say 18th and 19th century French - the post latin lingua franca. Java took a lot from c, but implemented many new concepts and design philosphies to programming and brought them to a wide audience. Although Java is kind of on the decline, and many other newer languages like Go push the envelope further, Java and java philosophies have still had a large influence on PHP, Ruby, Go, etc.
As far as what the english equivalent would be in this contrived metaphor... I'm unsure maybe we'll just have to wait, but in the meantime with c and java you shouldn't have a problem understanding just about any programming language currently in use.
From a historical viewpoint, English is just as much a weird mishmash of everything as PHP is.
http://www.udacity.com/overview/Course/cs101/CourseRev/apr20...
This courses will introduce you to the Python programming language and will also explain you how search engines work. It's a perfect course for a beginner, because it assumes no prior programming knowledge. It's also very interactive, because you often have to answer questions or to implement your own procedures in Python (you can write you code, run it to see the output and submit it for validation directly in your web browser).
Looking at the syllabus, you can get a very good idea of what exactly you will learn throughout the course:
Unit 1: How to Get Started (Your first program: Extracting a link)
Unit 2: How to Repeat (Finding all of the links on a page)
Unit 3: How to Manage Data (Crawling the web)
Unit 4: How to Solve Problems (Responding to search queries)
Unit 5: How Programs Run (Making things fast)
Unit 6: How to Have Infinite Power (Ranking search results)
Unit 7: Where to Go from Here (Exam testing your knowledge)
I took this class a few months ago and I found it extremely interesting! Especially Unit 5, where you will learn how to implement hash tables (http://en.wikipedia.org/wiki/Hash_table).
You have to get some data from the user through
a webpage. The pattern to do that is to include a
form in the webpage where the user types in the
data we want. Then the user submits the data by
clicking on a button. Following that we receive
the data and store it in a variable or
array (like a bucket, but for data). From that point
forward we process it with things called functions
,which are nothing more than little bits of code that
only have one task to complete. We then test to see
if that data is in a condition that we can use it.
Thus we include in the pattern a set of conditionals
to test if the data is good to go. If its not good to
go, then we either fix it or trash it. Our pattern
might include some functionality to tell the user that
the data typed in is good, and conforms to what we
need. We may also need to return the data in modified
form to the user. Maybe the user wanted to know
what is the meaning of the word *perro* in English
, so we send back the answer to the user. Perro is
dog in spanish.
Now, let's write a simple program that follows that
same pattern.
<!-- the form where the user submits the data-->
<form action="/submit" method="post">
<input type="text" name="search">
<input type="submit" value="search">
</form>
<!-- /of form -->
<?php
//the following code is not secure at all.
$input = $_POST['search']; //look up there where it says name="search".
function translate ($input)
{
if($input == "perro") //does the user want to translate the word "perro"?
{
return "dog"; //if he/she does then give him the translation.
}
else
{
return "I don't know.";
}
}
//let's use the function to test the data.
$output = translate($input);
echo $output; //this displays the information back to the user.
?>
But wait, we can also do it in python. Let's use a simple python program to show you how. #Python 2.7.X
input = raw_input("What do you wish to translate?") #get the data from the user.
def translate(input): #the translate function.
if input == "perro":
return "dog"
else:
return "I don't know"
output = translate(input) #use the function on the data gotten from the user
print output #display the results back to the user.
See the similarities in the programs? Notice the pattern? Even though they are two different languages (three if we include HTML), they both follow the same basic pattern to solve the problem at hand.You must now focus of learning new patterns of how given problems are solved. For example, getting data from a website, processing it, etc. Patterns do get more complicated as you advance, even to the point of not being able to understand them. But dont feel bad, most problems are solved using the simple stuff.
From here on, I would focus on learning every possible language I could get my hands on. But learn by doing, and not by reading (read -> test and repeat).
If you need any assitance, feel free to email me. Best wishes.
If you aren't too savvy on computer concepts I would suggest python - probably the easiest to get into and whatever platform you are on (Mac, Windows, Linux) python exists for it, has libraries for just about anything you want to explore, sound graphics, etc.
Second choice would be C - lower level than python but more understandable to the neophyte than assembly would be. C runs a lot of system functions on popular computers.
Python is a very easy language to learn and is also very powerful.
> Is there a language, like latin, that can help form the basis for understanding other languages and make learning easier?
Assembly language. It's a text language that corresponds one-to-one [1] with machine language, the numbers which are given directly to the CPU for execution [2].
I would not recommend assembly language to a beginner, but rather to an intermediate-level programmer who's already proficient in at least one other language. The main problems with it are (1) it's not portable, (2) it's not easy to find tutorials and documentation geared toward beginners, (3) it's not easy to find programmers who are comfortable with it, and (4) it tends to produce very long, difficult-to-read programs.
So even if they know assembly language well, most programmers don't use it directly very much; there's a reason that it's mostly a dead language outside of very specific areas.
Learning assembly language immensely helps your understanding of how computers work, and gives you some idea of what operating systems and higher-level languages must do behind the scenes to provide the tools that they give you.
To summarize, assembly language is a mostly dead language, with very limited direct practical use in modern times, which, when learned, will greatly help your general understanding of other languages -- and which cannot be avoided if you want to master complete knowledge of how computer software works.
[1] Modern assemblers often provide higher-level tools like labels, macros, and linker data, so the correspondence isn't necessarily one-to-one.
[2] I originally said "used directly by the CPU", but modern CPU's, at least in the Intel world, translate the user software's machine code into a proprietary internal code that's only visible to the hardware. This is largely a workaround for the fact that the x86 is constrained by backward compatibility to be a CISC-style machine, even though we now know RISC-style machines are much simpler and faster. The extra abstraction layer provided by the translation from backwards-compatible user instruction set to the internal proprietary instruction set means the latter can be RISC, can be shuffled around however the chip designers want, can use a strange number of bits per instruction, can be tied closely to tiny architecture details which may change in next year's chip, can actually change instruction order to increase speed as long as we can prove it doesn't change the semantics of the user program, etc. And all we software people see of this is that, inside the CPU, magic happens -- which makes our programs run faster.
I really recommend against starting with C or assembly because they are hard and can discourage you. Even trying to start by making something with Ruby on Rails can be very discouraging.
The best way to start is to work from the beginning and learn the fundamentals of programming and how to think rather than focusing on a language.
I'm making CodeHS (http://codehs.com) to help teach beginners in the most user friendly way possible by stressing the way of thinking rather than the programming syntax.
We're providing help to beginners because we know that people can get stuck.
We're about to change our pricing, but for now, you should check out the free trial. We'd love to hear what you think.
If you're really looking for a latin equivalent, I agree with the previous posters (a lisp, python, and c all have merit and are worth getting to eventually).
My own early learning path was basic -> dos shell -> c -> c++
I'm glad I learned c, wouldn't really mind having missed C++.
Other nice BASICs are AutoIt (Win), FnxBasic (Win), Envelop (Win), Microsoft VB Express edition (win), Gambas (Linux), Xbasic (Linux and Windows), GFA32 (win)
After learning that language you'll be able to move on to others, even to C which has pointers because freebasic uses pointers too.You'll find a lot of tutorials on the web and a great community for almost all of those.
Lots of people are going to say BASIC is inadequate for serious computing but if you go their way you'll find that the desire to learn has left you by the time you finish reading even one text. Ultimately it's your decision, not theirs.
TL;DR: You can learn BASIC in a weekend. Great community, easy to learn, will accomplish great things, will help you understand other languages.
Instead, I would think of a project I wanted to build, pick a language well-suited for that project, and then learn that language as I got building. Learning through doing is the best way to make learning easier - far better than studying the programming equivalent of Latin.
So my first question would be: What's English equivalent in programming languages? PHP? Java? C? Then, because programming languages have entered in a very fast paced evolution period recently, with new languages popping out every given month, what programming language the most prominent programmer elites are using right now? Go? Any other C variant? JS? Ruby? Etc.?
I'm specifically pointing at the highly voted posts mentioning C and Scheme.
However, I wouldn't recommend either language as your first. I recommend starting with Python. It's an easy language to learn, but also powerful. It's closer to the languages that are used in industry, has a lot of libraries, and you'll be able to quickly develop useful applications in it, which will make programming fun.
After a few months of Python, learn Lisp and C. Like others here, I also recommend learning Scheme, which is a clean dialect of Lisp.
Don't bother with anything else.