First Time Language

Which language would be ideal as a first exposure to programming? Below is a rating system. -- FranckBinard

Franck, could you be more specific? Are you asking about teaching children or adults? If children, what age?

FreshmansFirstLanguage claims "It's too late to learn one's first programming language in college", so we're talking about children.

And it's horking wrong. I actually really learnt to program, e.g. not copy BASIC text games off books in late high school - the usual Pascal seminary, and I forgot half everything about it after starting university. Started with C then, and I got hooked on to making ugly "elegant", and "powerful" [bah!] compound statements. And in my 2nd semester came Java, and got me cured. I can safely claim I now have a better grasp of the principles of good design and concise, easy-to-understand coding than my classmates that were chewing on Pascal and C for five years, and am the only one that doesn't get an attack of the vapours whenever OOP is mentioned. -- DavidVallner?

What difference does age make? If the best language varies with age, I would be interested in exactly how it does vary with age. -- DavidCary

Children are not just ignorant adults. They have actual physical difficulty thinking abstractly for the first eleven years or so. Reference?

ToonTalk is conceivably the ideal language for children to learn first. If not it, then CocoaWorld(s).

Here is an interesting survey of languages designed for accessibility, including systems designed for pre-schoolers.

OneLaptopPerChild decided on SqueakSmalltalk with SqueakEtoys and PythonLanguage for the children using the laptop to play with.

OneLaptopPerChild (aimed at ages 6-12) shipped with three programming environments for kids:

The project has a heavy bias towards constructionism, a theory of learning promulgated by SeymourPapert, which was inspired by the "learning by doing" theory of constructivism developed by Papert's mentor, JeanPiaget?.


Ideal features of first programming language:

Based on the above, I would recommend SchemeLanguage (especially DrScheme), LogoLanguage, RubyLanguage, PythonLanguage, BasicLanguage (if structured), and SqueakSmalltalk. Maybe ForthLanguage, but it has no safety net or standard graphics.


PythonLanguage was chosen for the grade-school programming book Hello World! Computer Programming for Kids and Other Beginners (2009 Warren and Carter Sande, ISBN 978-1933988498 )


interactive

Immediate feedback helps the learning process.

I am not sure... It depends on what they are learning! Immediate feedback on a screen can make optional the imagination. I think child-programmer should be invited to imagine what will happen before it really happens. The feedback should be only for control purposes; learning by trial-error mechanism is good too, but should not be the only way

Is there a list of "interactive" languages somewhere? "ScriptingLanguage" lists some of them. But lots of languages are interactive without being considered a "scripting language".

Some languages let you call a procedure from the command line (SchemeLanguage, ForthLanguage, MatLab, LogoLanguage, PythonLanguage ... what else? ...). This makes it much easier to immediately test out a procedure I just wrote.


LANGUAGE

JavaLanguage

AssemblyLanguage PascalLanguage CeeLanguage ForthLanguage LispLanguage {Why?}

LogoLanguage

LuaLanguage RubyLanguage PrologLanguage PythonLanguage GuidoVanRobot BasicLanguage: ValidHtml: JavaScript: SqueakSmalltalk: HaskellLanguage:


I imagine it makes a big difference what exactly you want to *learn*.

What other sorts of things are reasonable to learn in a single semester, with no previous programming class? See FreshmansFirstLanguage. This page seems to be about younger folk.

Is there a web page to discuss: What sorts of things are useful to know, even though it's completely unreasonable to learn the first semester?

-- DavidCary

perhaps TeachYourselfProgrammingInTenYears? HowToImproveProgrammingSkills ?


I think students should learn one really high-level language (smalltalk, LISP, etc.) and one lower-level one (perhaps C/C++) in parallel. However, to get a job they will probably need Java or C#, which are kind of in the middle.


I'm Java all the way for this one. Now throw stones at me, but it's more concise than C / C++ any day, easier to learn than C#, and the Java tutorial has insofar provided me with 98% of the reference material I need for my college assignments. Plus the job demand is rather good, due to the bandwagon, and the familiar syntax makes for an easier transition for people that've already tampered with C, and thus indoctrinating with OOP is easier. If they haven't seen C, all the better, I postulate people find it easier to learn OOP without having seen procedural hacking before, as they'll try to see the connection to the real world, and not the connection to what they already know.

<SILLY> I also postulate gay people understand OOP better, from a statistical sample of two people, which is me, and a friend that's the very opposite of a CompSci? person - he managed to strike up an analogy of objects to Platonic Forms... </SILLY>

If we're talking children, I wouldn't go for functional programming - I can't think of "problems" children would want to solve that are modelled well using axioma composition, or complex data structure manipulation.

As for learning the low-level languages, your mileage may vary, but I'm in my second year of studies, and so far my courses on C never got close to the basic concepts of programming - I only went figure at what a compiler/linker is/does, and how to compile projects -without- the ancient console Borland IDE I have learnt to hate with a burning passion (GCC and GVim get my work done way faster), or Visual Studio 6.0 the school afforded by virtue of a bulk Academic Licence - all the way forgetting freshmen sort of lack the money to pay the still appalling sums of money Microsoft asks even for an academic licence, and don't even get me started of inducing the bad habit of using non-standard proprietary technology right off school.

Same goes for assembly, yet again I've found more interesting information by myself than from lectures - e.g. LOOP is slow, etc. Also assembly, and languages that don't come with a platform and managed environments, have very specific and comparatively rare applications in today's programming, and for quite a large amount of students they become nothing but academic information.

For Java, BlueJay is an IDE specifically designed for learning (are there any such for any other languages that weren't designed originally for teaching purposes, or even at all?). It is fundamentally visual, you see all the classes in a project, and inheritance/composition relations displayed in a visual workspace. Also, there's no need to have a wrapper class for a main() method and I/O at all - you can instantiate any object, any time, and those instances also appear visually on a workbench, and you call their methods directly via a context menu, inspecting the results. It hardly gets more interactive than that, and you can teach/learn OOP concepts and programming fundamentals without having to digress into API / support platform calls for a single second.

Just my two cents. -- DavidVallner?


I adhere to the combination high-low-level. May I add another? Structured-ObjectOriented.

Fernando


See FreshmansFirstLanguage, FirstLanguageLearned, MainstreamLanguage, LanguagesOfChoice


CategoryEducation CategoryComparisons


EditText of this page (last edited September 7, 2009) or FindPage with title or text search