<p>I had great success by teaching kids (8 to 11 years old) to set up their sites. First, plain HTML to understand how model maps to presentation; then CSS to see how boring stuff can be factored out; then javascript to make pages alive; then CGI to do magic.</p>

<p>The important parts were</p>

<ul>
<li>immediate tangible reward: Hey look at my page!</li>
<li>no big words (<em>object</em> doesn't say much to a kid)</li>
<li>all is done in a notepad, with the message that fancy tools are not really necessary</li>
<li>toolchain is introduced pretty late, when a kid is ready</li>
<li>CGI is a Creative Gentle Introduction to real programming, because they are already hooked, and want more</li>
</ul>

<p>Of course all of that happened in late 90es. Still I believe the strategy is sound even now.</p>

CC BY-SA 3.0
2017-05-26T02:34:03.473Z
While I love teaching front end web stuff, I don't think that the OP is asking about that. The problem is that HTML+CSS are not "real" languages in that they cannot do logic, accept user input on their own, etc.
thesecretmaster
CC BY-SA 3.0
2017-05-26T02:37:13.060Z
@thesecretmaster Correct. The point is that it is a natural introduction into a real world. And besides, CSS does drive toward an object oriented mindset. And javascript has plenty of logics. The order is very important.
user58697
CC BY-SA 3.0
2017-05-26T02:41:26.137Z
It also doesn't match what the OP asks for. HTML+CSS are not programming languages, they are markup languages. And if you want to talk about JS, although it is a programming language, it is not free of language oddities and paradoxes, as the OP requests.
thesecretmaster
CC BY-SA 3.0
2017-05-26T02:53:16.740Z
@thesecretmaster Let's agree do disagree. HTML+CSS _is_ a programming language, as much as Make and Prolog are. All of them transform a set of rules to the visible result. Who cares that they are not functional, or imperative, or whatever, but descriptive.
user58697
CC BY-SA 3.0
2017-05-26T08:07:59.720Z
Absence [the implementation of Rule 110 in HTML and CSS](https://www.google.co.uk/url?sa=t&rct=j&q=&esrc=s&source=web&cd=2&cad=rja&uact=8&ved=0ahUKEwin47XtjI3UAhXsJsAKHTKkDZoQFggsMAE&url=https%3A%2F%2Fstackoverflow.com%2Fquestions%2F2497146%2Fis-css-turing-complete&usg=AFQjCNG33DBUIhIVAbh4v8Aq52QRdGBAXg&sig2=itn_S0Kspafa-Wslfzdpmg), it's coding, but it ain't programming: write me some HTML/CSS that adds a couple of numbers, checks if a number is prime, or sorts a list into order...
Miles
CC BY-SA 3.0
2017-05-26T15:26:29.417Z
@user58697 I concur. I think the learning comes from students manipulating and creating something that they are already familiar. Being able to go home and think they have come part of the way in understanding a real-world concept.
Dave Russell
CC BY-SA 4.0
2018-05-09T05:49:15.903Z
For me HTML and CSS got me into the field of computer science. So it might not be a programming language but if the goal is 'to show the children to write some code and the pc reacts to it' then it's well-suited to start with. Real programming might be the next step.
Kinaeh
CC BY-SA 3.0
2017-11-02T15:45:51.030Z
I have just been looking at the brackets editor, it gives instant feedback when editing html and css (maybe js in the future). And html is a real language (not programming-language), and css is a programming language, but very specialised.
ctrl-alt-delor
CC BY-SA 3.0
2017-05-26T02:22:14.353Z
2017-05-26T02:29:40.620Z
2017-05-26T02:29:40.620Z
user58697
<p>A variant of the Racket programming language with the DrRacket IDE is used in the <a href="https://www.edx.org/course/how-code-simple-data-ubcx-htc1x#!" rel="noreferrer">course "How to Code"</a> by Gregor Kiczales.</p>

<ul>
<li>"Object oriented (ComLogo is funny, but has nothing to do with today's actual programming)." The object-oriented paradigm is not stressed in the course. "Actual programming" kind of conflicts with "learning programming".</li>
<li>"Good IDE (intellisense and built-in help)." DrRacket has built-in help, syntax highlighting, variable binding highlighting, automatic indentation.</li>
<li>"Simple IDE with preferably a "Run" button." Yes.</li>
<li>"Should be visual (command line will never be too appealing to kids)." I guess you mean that programming problems should be about graphics. There is a graphics library, and the first problem is to combine a picture from geometric primitives.</li>
<li>"Should be free of language oddities and paradoxes (this is where most actual programming languages fail IMO)." I don't understand this.</li>
<li>"Should require variable declaration." Every variable should be bound somewhere in the code, of course. The type is not declared. Racket has dynamic type system.</li>
<li>"Should be memory safe." Yes.</li>
</ul>

CC BY-SA 3.0
2017-05-27T14:26:52.613Z
2017-05-27T14:26:52.613Z
beroal
<p><a href="https://www.greenfoot.org/door" rel="nofollow noreferrer">Greenfoot</a> is an IDE for Java which was created for teaching purposes. It displays a graphical "world" (a two dimensonal rectangle with configurable background) in which "actors" can be created, deleted, react to user input and move.</p>

<p>It is using Java and is therefore object-oriented, which could be demonstrated by placing multiple actors of the same class in a world. Additionally, extending classes is visualized using a tree diagram and has to be done from the beginning on as each "actor" has to be a subclass of the abstract <code>Actor</code> class.</p>

<p>As stated on the <a href="https://www.greenfoot.org/overview" rel="nofollow noreferrer">overview page of Greenfoot</a>, it has auto-completion and a built-in access to documentation, which is (as far as I remember) quite good. The auto-completion seems to work good as well (I've just done a quick test). Auto-indentation is also included, but has to be triggered manually.</p>

<p>It has a "Compile" button but seems to compile automatically after saving so if you want to run your project, you can just press the "Run" button.</p>

<p>As to language oddities you could say it has all oddities Java has - relevant for starters might be the <code>==</code> or <code>equals</code> problem when comparing strings.</p>

<p>I personally always enjoy working with Greenfoot, but depending on (mental) age and programming interest of your students, a <a href="https://cseducators.stackexchange.com/a/165/793">graphical language like Scratch</a> could be a better (more motivating) choice.</p>

<p>As a sidenote: Greenfoot has recently introduced the "Stride" language which introduces its own syntax, forces indentation by being a bit more graphical and can be (only) used through shortcuts. I haven't extensively tested it yet, but didn't want to leave it unmentioned.</p>

CC BY-SA 3.0
2017-06-16T20:00:52.263Z
2017-06-16T20:00:52.263Z
TuringTux
<p>Teaching strategies are indicative of learning. This is as much part of learning to programming. Students need direction and to be given instruction, not just to be sat in front of a computer hoping that learning will be automatic.</p>

<p>Grover and Basu would agree block programming is a great introduction, but their research shows that students have general difficulties understanding programming constructs, whether using text-based or block programming language, and calls for application of learning strategies “[balancing] constructionism with other pedagogical approaches that foster deeper learning of problem solving activities and computing concepts… Activities that require students to describe what is happening” (Grover &amp; Basu, 2017, p. 271 - 272). <a href="https://www.researchgate.net/publication/314296105_Measuring_Student_Learning_in_Introductory_Block-Based_Programming_Examining_Misconceptions_of_Loops_Variables_and_Boolean_Logic" rel="nofollow noreferrer">Measuring Student Learning in Introductory BlockBased Programming: Examining Misconceptions of Loops, Variables, and Boolean Logic</a>.</p>

CC BY-SA 3.0
2017-05-25T23:26:37.683Z
That's a great article to keep in mind - thanks for sharing it. Could you elaborate a bit as to how it connects to the specific question being asked above?
Peter
CC BY-SA 3.0
2017-05-25T18:58:59.857Z
2017-05-26T15:18:22.927Z
2017-05-26T15:18:22.927Z
Dave Russell
<p>Although out-of-style, historically, BASIC was designed for the education of non-STEM college students, is time tested, and probably allowed one of the highest ever programming literacy rates among the total base of personal computer users at one time.  It might be the programming language from which a student is most likely to able to get homework help from their parents or grandparents.  </p>

<p>BASIC can be run, interactively, without any IDE or editor, and is currently supported on the most primitive computing platforms (Grandpa's Apple II) as well as emulations within contemporary web browsers.</p>

<p>In spite of Dijkstra's complaints, many successful computer programmers and entrepreneurs (including now billionaires) first learned to program in BASIC, many as kids, on their own.</p>

CC BY-SA 3.0
2017-12-06T02:05:19.780Z
As a counter-point, many Basic programmers, who had to use ultra-low-level peeks and pokes, became competetent assembly language and low level C programmers. Skills which are still needed for some OS drivers, energy-harvesting IoT, embedded, and DSP development, and etc.
hotpaw2
CC BY-SA 3.0
2017-08-22T04:13:26.067Z
for me the issue is, it does not scale well. As in, after learning BASIC students find it difficult to relate with currently popular languages like Java and C sharp, which they eventually have to learn as it is.
Jay
CC BY-SA 3.0
2017-05-25T18:32:36.560Z
2017-07-07T16:00:24.723Z
2017-07-07T16:00:24.723Z
hotpaw2
<p>I am not sure if this is really what you are looking for, but there is also <a href="https://developers.google.com/blockly/" rel="nofollow noreferrer">Blocky</a> from Google which is kind of similar to Scratch, and lets you see the source code produced by the block in different programming languages (JavScript, Python, PHP, Dart, Lua). Blocky is used in several projects like code.org.</p>

<p>If Java is OK for you, than you can consider the <a href="https://www.bluej.org/" rel="nofollow noreferrer">BlueJ</a> IDE which is:</p>

<blockquote>
  <p>A free Java Development Environment designed for beginners, used by
  millions worldwide</p>
</blockquote>

CC BY-SA 3.0
2017-07-08T14:10:42.863Z
2017-07-08T14:10:42.863Z
Nuno Gil Fonseca
<p><a href="http://www.drjava.org/" rel="nofollow noreferrer">Dr. Java</a> is simple IDE for Java that is designed for students. Dr. Java insist you press the 'compile' button before the 'run' button, but that is all. </p>

<p>A nice feature is a basic console that allows you to REPL, as in an interpreted language.</p>

<p>In addition, Dr. Java supports some more advanced features (without cluttering the screen), such as automated testing and code coverage with JUnit and a debugger.</p>

<p>To create visual output in Java, you can use the <a href="http://www.turtlegrafik.ch/" rel="nofollow noreferrer">Turtle Graphics</a> package, which visualizes the path a 'turtle', let's call him Joe, walks, according to the commands you gave Joe in Java (e.g. joe.forward(100), joe.right(90), etc.)</p>

<p>Although full-featured Java can be a bit daunting for the beginner, the tools I mentioned can be used to keep it simple enough to teach programming. (Turtle Graphics is, iirc, how I was introduced to programming in high-school) </p>

<p>An advantage of this approach over using a language designed only to learn programming, is that this approach more easily gives access to more advanced learning tools, as more people use Java than very specific learning languages.</p>

CC BY-SA 3.0
2017-05-25T15:07:11.417Z
2017-05-25T15:07:11.417Z
Discrete lizard
<p>When I started, the first language I was advised to use was C programming. We had to use Turbo C. </p>

<p>Although, I never got a chance to use C professionally (like when I work on software projects for enterprises and small companies and startups), I ended up teaching that so many times. From a software developer perspective, C is just not right for todays environment, but for some reason, I feel that it is the simplest language to learn, and that is what I advise to students who are young, and brand new to programming. </p>

<p>Here are some reasons why I would go with C (although I personally don't like that language)</p>

<ul>
<li>It runs on pretty much anything, especially if students are poor (which is the harsh reality in my city) and can afford a very basic laptop which can run a older version of windows, or worst case scenario, Linux</li>
<li>Almost every university in India, has included C as part of their first year syllabus. So, there is a plenty of material, tutoring classes to find. </li>
<li>A good understanding of C can later lead to easier learning of almost any object oriented language such as C sharp, Java and if the occasion calls for it, C ++. </li>
</ul>

<p>Especially in a scenario like what I have in my country, C fits in perfectly. </p>

<p>As an alternative, I also would recommend Javascript but I think it is already in one of the other answers. </p>

CC BY-SA 4.0
2018-05-03T12:49:18.747Z
« I never got a chance to use C professionally » You were lucky you never had to program in C professionally.
Michel Billaud
CC BY-SA 4.0
2018-05-03T16:41:54.357Z
I got to agree with that, and I do count myself lucky. I still dread C :)
Jay
CC BY-SA 3.0
2017-09-01T07:22:49.490Z
I would differ here as Turbo-C was used here in Pakistan as well but it was exactly the reason why I kept loathing programming for a long time. C is difficult or not is a separate topic but Turbo C is an awful IDE (imo) for sure. Being a teacher, first thing I managed was keeping an arm's length between my students and Turbo C and it reaped dividends as well.
Failed Scientist
CC BY-SA 3.0
2017-09-01T08:25:13.940Z
Just to clarify, I am recommending go with C but please god please don't use Turbo C indeed. Man, that thing (although OKAY at that time, 15 years ago) is just awful by todays standards. Its easier to just use an online C compiler, and if that is not available, Visual Studio or GCC.
Jay
CC BY-SA 3.0
2017-08-22T04:12:00.087Z
2017-08-22T04:12:00.087Z
Jay
<p><a href="http://scratch.mit.edu" rel="noreferrer">Scratch</a> is a visual block-based drag-and-drop programming language designed specifically for learners, especially children. It's created by the Lifelong Kindergarten Group at the MIT Media Lab.</p>

<p>The language and IDE are pretty much completely connected. Here's how I see it checking off your bullet points:</p>

<ul>
<li>Object oriented: It has sprites, but it's debatable whether it's truly object oriented. It can serve as an introduction to the concept though.</li>
<li>Good IDE: Yes. There's a help toolbar on the right side.</li>
<li>Simple IDE with run button: Yes.</li>
<li>Visual: It's completely visual and drag-and-drop. Typing is only needed for numbers and strings, essentially.</li>
<li>Free of language oddities and paradoxes: I'm not sure exactly what type of oddities and paradoxes you're thinking of, but Scratch tries to be helpful and avoid breaking your code whenever possible. The blocks themselves are pretty intuitive and self-explanatory.</li>
<li>Other:

<ul>
<li>Indentation: Since it's not text based, this is less important, but control structures (conditions and loops) do get their code indented.</li>
<li>Variable declaration: All variables must be defined before use.</li>
<li>Memory safe: Yes, it runs in Flash in the browser (next version plans to move to JS). You don't have any control over actual memory usage in your program.</li>
</ul></li>
</ul>

<p>Scratch was my first language, and I've been teaching it as a first language for the past several years. It's great for teaching the concepts without worrying about annoying little things like syntax.</p>

CC BY-SA 3.0
2017-11-02T15:27:44.590Z
Snap is like scratch, but they have improved it to remove some limitations. Snap has functions and procedures. Scratch only has procedures. (note these words are often erroneously mixed up, including by authorities). However when I last used it at school on IE, there was some stability issues, and saving/loading issues.
ctrl-alt-delor
CC BY-SA 3.0
2017-05-25T13:12:37.557Z
Thank you! Very nice, looks really good! I'll try it in the evening. Just what I was looking for. I'll leave the question open though, in the hopes of getting some more similarly good ideas.
vacip
CC BY-SA 3.0
2017-05-25T13:33:29.710Z
Is it even possible to write scratch without the IDE? I've never heard of that happening.
thesecretmaster
CC BY-SA 3.0
2017-05-25T15:01:56.207Z
@thesecretmaster There have been some user-contributed alternate players for Scratch. Examples: [Phosphorus](https://phosphorus.github.io/), [official HTML5 player](https://github.com/LLK/scratch-html5), [SB2.JS](https://code.google.com/p/sb2-js/). And even some alternate IDEs: [M30w](https://sourceforge.net/projects/m30w/) (text based), [Pixie](http://nathan.github.io/pixie/) (in JS).
Scimonster
CC BY-SA 3.0
2017-05-25T15:41:03.053Z
I guess Scratch is a very great child-focused option. Remember it has an online option very useful.
Ivan Botero
CC BY-SA 3.0
2017-05-26T08:09:55.817Z
See also Scratch's cleverer, less well known brother, [Snap!](snap.berkeley.edu), and [this discussion](https://cseducators.stackexchange.com/questions/112/what-can-snap-do-that-scratch-cannot) comparing them.
Miles
CC BY-SA 3.0
2017-05-25T12:59:48.000Z
2017-05-25T22:33:36.593Z
2017-05-25T22:33:36.593Z
Scimonster
<p>Processing probably ticks a lot of your boxes. It's essentially a framework built on top of Java and shipped with its own IDE (also free and open source). A lot of the boiler plate code that normally exists in Java (package and include statements and so on) is hidden by default, so it's very clean for newbies (you can import extra packages later if you need to in the normal way). As straightforward as you'd want it to be to put together simple versions of classic games, like Pong below, which I think of as a good barometer for a teaching language.</p>

<p><a href="https://i.sstatic.net/xzWZy.gif" rel="noreferrer"><img src="https://i.sstatic.net/xzWZy.gif" alt="IDE on left, intermediate project on right"></a></p>

<ul>
<li><strong>Object oriented</strong>: fully featured Java under the hood</li>
<li><strong>Good IDE (intellisense and built-in help)</strong>: Not always perfect, but the latest version has auto-complete and auto-indenting functionality which is about as much as I want younger students to have. Little beyond that, which can be frustrating, but on balance I think it hits a nice sweet spot of simplicity and functionality. One button to compile and run.</li>
<li><p><strong>Should be visual</strong>: very easy to draw shapes on screen. Can make a circle follow the mouse in six lines (including two that are just brackets). Not as easy as something like Scratch, but about as easy as I can imagine a full fat programming language being. By week 5 with a young class we have them working with mouse coordinates, colours and random numbers to put together simple animations like the below (super simple to look at here, but lots of little achievements the kids love along the way to keep it interesting. Also need semicolons, brackets, etc all correct for this)
<a href="https://i.sstatic.net/RQlYt.gif" rel="noreferrer"><img src="https://i.sstatic.net/RQlYt.gif" alt="Simple lesson with Processing - shape onscreen moving and flashing"></a></p></li>
<li><p><strong>Should be free of language oddities and paradoxes</strong>: depends on what exactly you mean. Java probably fails this test by some reasonable measures, but that's a broader conversation.</p></li>
<li><strong>The list goes on; should encourage the use of indentation, should require variable declaration, should be memory safe...</strong>: The language/IDE don't demand indentation, but it's made pretty easy to do. Requires variable declarations, is memory safe. Also provides plenty of headroom to grow into for even the most advanced students.</li>
</ul>

<p>We've used it with students as young as 8. On the whole we've concluded that age 10-11 is a sweet spot for starting with this kind of thing (as against something like Scratch). Some 8-year-olds can definitely get to grips with Processing, but most get a little frustrated after the first 5-10 lessons at how slow progress can be. In particular the reliance on coordinates can be a very high bar for younger students to cross. </p>

CC BY-SA 3.0
2017-06-16T08:41:45.977Z
Just to present the other side of the coin, see Bret Victor's [Learnable Programming](http://worrydream.com/LearnableProgramming/) essay that looks at (conceptually & concretely) language/environment design for learning to program with. He says **JavaScript and Processing are poorly-designed languages that support weak ways of thinking, and ignore decades of learning about learning.** when considering readability, making computation visible, decomposition, recomposition and more. It has global state, modes that alter the meaning of a line of code, etc., so not great for learners specifically.
Abraham
CC BY-SA 3.0
2017-06-16T20:24:40.297Z
@Abraham - I'm curious - I was wowed by Bret Victor's talk a couple of years back like everyone else but what actually makes him an authority on learning? He seems to be a a CS guy and an interface designer. Has he been a teacher for any length of time? An education researcher (even though education research has a horrible reputation)?
Mike Zamansky
CC BY-SA 3.0
2017-06-16T22:38:10.873Z
@MikeZamansky His work speaks for itself. The brilliance of it, the research that evidently goes into it and the impact that it has. But also, the organisations like MIT that invite him over, the people like Alan Kay who more-than-endorse him, etc. -- he is a design-for-humans genius. :) From human-computer interaction research and design at Apple to learn/understand/create research, been working with Alan Kay and other comp sci education and learning sciences researchers (amongst others) in essence continuing the design-for-understanding-and-human-empowerment work of especially Seymour Papert
Abraham
CC BY-SA 3.0
2017-06-16T23:03:32.963Z
Got it - his work speaks for itself. Just like Bill Gates when he had his theories of how schools should be run.

I do think Victor's work is pretty cool and interesting but I wouldn't be willing say his personal theories are unquestionably correct until  they're vetted by actual teachers.

Plenty of teachers have had terrific results with those horrible tools.
Mike Zamansky
CC BY-SA 3.0
2017-07-24T18:28:47.010Z
See also: https://cseducators.stackexchange.com/questions/19/using-processing-as-an-entry-point-in-an-introductory-course
Kevin Workman
CC BY-SA 3.0
2017-11-02T15:31:38.030Z
@Abraham you may be able to help answer this question https://cseducators.stackexchange.com/q/3907/204
ctrl-alt-delor
CC BY-SA 3.0
2017-05-25T15:57:46.477Z
2017-05-25T15:57:46.477Z
Diarmuid Ó Muirgheasa
<p>The <a href="http://racket-lang.org/" rel="noreferrer">Racket</a> team has argued that <em>no</em> language that is suitable for writing any real software is great for beginners: they contain too many warts, legacy features, complex corners, etc. And that includes Racket itself. We have therefore created a series of <em>student languages</em> that are carefully designed subsets of the full language ideal for student use.</p>

<p>Think of it this way. Open an introductory programming textbook that uses some language <em>L</em>. Start at the beginning. Does it use all of <em>L</em> on page 1? Or page 10? Or even page 100? No! It begins with a very small subset of <em>L</em>, then grows that subset chapter by chapter, and even by the end may have exposed you to only a small part of <em>L</em> (if <em>L</em> is a language in industrial use). This is not only sensible, it's what we implicitly expect.</p>

<p>Now ask yourself why your programming environment doesn't do the same.</p>

<p>In contrast, that's what Racket does. The languages that come bundled with the main IDE, DrRacket, are tied to the text <a href="http://htdp.org/" rel="noreferrer"><em>How to Design Programs</em></a>. Other textbook authors have provided their own languages too, and it's easy for instructors to create their own to match whatever they are teaching.</p>

CC BY-SA 3.0
2017-06-16T21:34:35.247Z
As a high school educator using the student languages in the classroom, I can vouch for this philosophy! The limited feature set of the Beginning Student Language allows for excellent error messages, and allows students to feel they have "the whole language" in their heads. The Intermediate and Advanced Student Languages are the perfect "small steps" up.
Alex Lew
CC BY-SA 3.0
2017-06-03T00:38:10.087Z
2017-06-03T00:38:10.087Z
Shriram Krishnamurthi
<p>I would consider teaching in <a href="https://www.python.org/" rel="noreferrer">Python</a> if you wanted to give your students a taste of programming in a text-based language—pretty much the only type of language used professionally. A visual programming language like Scratch is probably better for younger groups, and teaches the underlying programming concepts well, but you will reach a point where you <strong>must</strong> write in a text-based programming language. There are very few programmers who work professionally in visual programming languages, so Python provides a nice 'first step'.</p>

<p>Note that I would specifically recommend <strong>Python 3</strong>, because it has far fewer 'oddities' that you'd like to avoid. I've briefly discussed this <a href="https://cseducators.stackexchange.com/a/82/2">here</a> in comparison to Python 2; it seems like a no brainer to teach in Python 3, which is much more intuitive.</p>

<p>Regarding your constraints:</p>

<ul>
<li><p><strong>Object-oriented</strong>: Python supports OOP, but does not enforce it. If you want to initially teach procedural programming, then move on to OOP, Python will allow you to do that. Other languages like Java <strong>require</strong> OOP, with all the boilerplate that comes with it, but Python gives you the flexibility to write either way.</p></li>
<li><p><strong>IDE support</strong>: The default IDE, IDLE, is frankly poor. PyCharm, Jetbrains' IDE, is far superior and does support intelligent auto-complete, although the professional edition does come at a cost. <a href="https://www.jetbrains.com/pycharm-edu/" rel="noreferrer">PyCharm Edu</a>, however, is free and open source. It's also worth considering <a href="https://cseducators.stackexchange.com/a/48/2">whether you need an IDE at all</a>!</p></li>
<li><p><strong>Visual element</strong>: Initially, I suspect it'll be far easier to teach your students to write text-based programs. Don't underestimate what you can make on the command line, though—quizzes, guessing games and joke scripts are all low hanging fruit. Al Sweigart's <a href="https://inventwithpython.com/inventwithpython_3rd.pdf" rel="noreferrer">*Invent Your Own Computer Games with Python</a> might be a helpful resource to teach using PyGame for the visual element, but it will be much more verbose than command-line programs and will probably require some teaching to get to that level. You might find it helpful to <a href="http://interactivepython.org/runestone/static/thinkcspy/PythonTurtle/OurFirstTurtleProgram.html" rel="noreferrer">use the <code>turtle</code> library</a> for something to play with, and get instant feedback.</p></li>
<li><p><strong>Language oddities</strong>: Python is relatively intuitive, and was designed with <a href="https://www.python.org/about/gettingstarted/" rel="noreferrer">specific consideration for beginners</a>. The <a href="https://stackoverflow.com/questions/588004/is-floating-point-math-broken">floating point calculations</a> might cause some confusion, but other than that, most operations work as you'd expect.</p></li>
<li><p><strong>Indentation</strong>: Python <strong>enforces</strong> indentation, otherwise your code just won't run at all. The discipline that Python creates will probably be helpful for future, less strict languages.</p></li>
<li><p><strong>Memory safety</strong>: Nothing to worry about here.</p></li>
<li><p><strong>Declaring variables in advance</strong>: This point <em>isn't really required</em> for Python—you generally don't declare variables in advance; you just create them as needed.</p></li>
</ul>

<p>Consider the benefits of a text-based language: once your students master it, they understand a <strong>general-purpose</strong> programming language used in industry. If you master Scratch, you <em>still</em> have to go through this step anyway to learn a text-based language.</p>

CC BY-SA 3.0
2017-06-16T11:33:51.973Z
For a simple(r) IDE for learning Python programming, also see the open-source Thonny at http://thonny.org. Has (sub)expression evaluation stepping, visualisation of the call stack, etc. -- all very useful for beginners especially. There is also an extension available so that you can use this same IDE for programming the BBC Micro:Bit as well.
Abraham
CC BY-SA 3.0
2017-05-25T15:37:58.647Z
+1 because Python is good, but i disagree with saying Scratch isn't a *real* language. It teaches the basic programming concepts without making you worry about annoying things like syntax. You can still make cool projects in Scratch that use actual algorithms.
Scimonster
CC BY-SA 3.0
2017-05-25T15:44:51.780Z
@Scimonster You're right, I think 'real' doesn't reflect what I was trying to get at—a general purpose language that can be used for nearly anything, whereas Scratch is more limited in its uses (although still has a very important place in education). In Scratch, you can make games and animations, but Python allows you to make applications, games, websites, command line programs—nearly anything. That was what I meant when I said *real*, although re-reading it, it did sound a bit 'snobby', so I've changed that.
Aurora0001
CC BY-SA 3.0
2017-05-25T18:15:00.587Z
+1 for mentioning ```turtle```. The concept is simple, but it seems very effective to get interesting visual output in 'non-visual' language.
Discrete lizard
CC BY-SA 3.0
2017-05-26T08:02:32.743Z
Check out Guido van Rossum's (Python's creator and 'benevolent dictator for life') paper on [computer programming for everyone[(http://legacy.python.org/doc/essays/cp4e/) from 1999.
Miles
CC BY-SA 3.0
2017-05-25T15:12:07.653Z
2017-05-25T15:42:37.137Z
2017-05-25T15:42:37.137Z
Aurora0001
<p>Is there a good beginner's programming language, specifically designed for learners, maybe even kids?<br>
Something beginners can sink their teeth into and get results quickly. Results that are more than a "Hello world!" or a program that adds two integers. Something easy to use, but a thing that can guide them through the basics.</p>

<p>Phrogram (née KPL) was a good example, but it has sadly died (see pics at bottom; simple interface, simple codes, yet they look and feel like a modern programming environment and language - in small).</p>

<p>Maybe it is an existing mainstream programming language with a simplified IDE, maybe it is a full learner's solution.</p>

<p><em>Just a few ideas what to look for in a beginner's language</em></p>

<ul>
<li>Object oriented (ComLogo is funny, but has nothing to do with today's actual programming)</li>
<li>Good IDE (intellisense and built-in help)</li>
<li>Simple IDE with preferably a "Run" button - they can learn about translation and interpreter later (Visual Studio is amazing, but pretty intimidating for a beginner.)</li>
<li>Should be visual (commad line will never be too appealing to kids)</li>
<li>Should be free of language oddities and paradoxes (this is where most actual programming languages fail IMO)</li>
<li>The list goes on; should encourage the use of indentation, should require variable declaration, should be memory safe...</li>
</ul>

<p>Examples from Phrogram:
<a href="https://i.sstatic.net/tcutR.jpg" rel="noreferrer"><img src="https://i.sstatic.net/tcutR.jpg" alt="Phrogram example code"></a>
<a href="https://i.sstatic.net/1kAi5.jpg" rel="noreferrer"><img src="https://i.sstatic.net/1kAi5.jpg" alt="Phrogram interface"></a></p>

CC BY-SA 3.0
2017-06-16T08:46:42.617Z
Also see Bret Victor's excellent [Learnable Programming](http://worrydream.com/LearnableProgramming/) essay that delves deeply into considerations for programming languages and environments designed for learning / understanding.
Abraham
CC BY-SA 3.0
2017-05-25T11:50:50.447Z
For those that do not know Phrogram, could you clarify what you mean what you mean by 'language oddities and paradoxes' and how Phrogram avoided them? Additionally, since the list of requirements appears to be non-exhaustive, can you sketch the intended usage and learning goals for the students which the language you seek should help achieve?
Discrete lizard
CC BY-SA 3.0
2017-05-25T11:55:10.710Z
I'm curious where C# and Java fail the requirements you listed. I don't necessarily disagree with you. But they seem to hit all of your bullet points, with the exception of indention maybe. Your requirements seem more like a list of things for the IDE instead of the language.
Ryan Nutt
CC BY-SA 3.0
2017-05-25T11:57:50.353Z
For someone who doesn't know Phrogram, this is not at all clear, very broad, and very opinion based.
thesecretmaster
CC BY-SA 3.0
2017-05-25T12:10:44.667Z
OK, I'll rework the question after lunch... Give me an hour.
vacip
CC BY-SA 3.0
2017-05-25T12:46:06.680Z
@RyanNutt I have reworked the question a bit. C# and JAVA might work, but I don't know of an IDE that is not way too complicated for a beginner. Something that you just double click and start coding, then hit run.
vacip
CC BY-SA 3.0
2017-05-25T12:54:47.503Z
@Discretelizard You are right, sorry. I'll have a hard time explaining what's exactly wrong with C#, because I've gotten used to it too much. It has a few odd structures, like the iconic x++ for incrementing, the type-first variable declaration, or the odd syntax for the for loop. Granted, you will get used to it in a few days, but I think beginners need something closer to human language and closer to pseudocode-like logical statements.
vacip
CC BY-SA 3.0
2017-05-25T17:24:26.337Z
scratch, python, eiffel (depending on where they are). Eiffel is for learning OO, so around A-level. Scratch is for  beginners. Definitely Eiffel before C♯,  Java or C++.
ctrl-alt-delor
CC BY-SA 3.0
2017-05-26T16:27:20.743Z
Perhaps of interest: https://en.wikipedia.org/wiki/List_of_educational_programming_languages
wythagoras
<best-practice><language-choice>
Programming languages specifically designed for beginners
# Programming languages specifically designed for beginners

(Asked by: username_0 on 2017-05-25)

Is there a good beginner's programming language, specifically designed for learners, maybe even kids?  
Something beginners can sink their teeth into and get results quickly. Results that are more than a "Hello world!" or a program that adds two integers. Something easy to use, but a thing that can guide them through the basics.

Phrogram (née KPL) was a good example, but it has sadly died (see pics at bottom; simple interface, simple codes, yet they look and feel like a modern programming environment and language - in small).

Maybe it is an existing mainstream programming language with a simplified IDE, maybe it is a full learner's solution.

*Just a few ideas what to look for in a beginner's language*

* Object oriented (ComLogo is funny, but has nothing to do with today's actual programming)
* Good IDE (intellisense and built-in help)
* Simple IDE with preferably a "Run" button - they can learn about translation and interpreter later (Visual Studio is amazing, but pretty intimidating for a beginner.)
* Should be visual (commad line will never be too appealing to kids)
* Should be free of language oddities and paradoxes (this is where most actual programming languages fail IMO)
* The list goes on; should encourage the use of indentation, should require variable declaration, should be memory safe...

Examples from Phrogram:
[![Phrogram example code](https://i.sstatic.net/tcutR.jpg)](https://i.sstatic.net/tcutR.jpg)
[![Phrogram interface](https://i.sstatic.net/1kAi5.jpg)](https://i.sstatic.net/1kAi5.jpg)

**Tags:** best-practice, language-choice

> **Comments:**
> **username_2**: For those that do not know Phrogram, could you clarify what you mean what you mean by 'language oddities and paradoxes' and how Phrogram avoided them? Additionally, since the list of requirements appears to be non-exhaustive, can you sketch the intended usage and learning goals for the students which the language you seek should help achieve?  
> **username_3**: I'm curious where C# and Java fail the requirements you listed. I don't necessarily disagree with you. But they seem to hit all of your bullet points, with the exception of indention maybe. Your requirements seem more like a list of things for the IDE instead of the language.  
> **username_4**: For someone who doesn't know Phrogram, this is not at all clear, very broad, and very opinion based.  
> **username_0**: OK, I'll rework the question after lunch... Give me an hour.  
> **username_0**: @RyanNutt I have reworked the question a bit. C# and JAVA might work, but I don't know of an IDE that is not way too complicated for a beginner. Something that you just double click and start coding, then hit run.  
> **username_0**: @Discretelizard You are right, sorry. I'll have a hard time explaining what's exactly wrong with C#, because I've gotten used to it too much. It has a few odd structures, like the iconic x++ for incrementing, the type-first variable declaration, or the odd syntax for the for loop. Granted, you will get used to it in a few days, but I think beginners need something closer to human language and closer to pseudocode-like logical statements.  
> **username_5**: scratch, python, eiffel (depending on where they are). Eiffel is for learning OO, so around A-level. Scratch is for  beginners. Definitely Eiffel before C♯,  Java or C++.  
> **username_6**: Perhaps of interest: https://en.wikipedia.org/wiki/List_of_educational_programming_languages  
> **username_1**: Also see Bret Victor's excellent [Learnable Programming](http://worrydream.com/LearnableProgramming/) essay that delves deeply into considerations for programming languages and environments designed for learning / understanding.  

---

## 12 answers

### Answer by username_19 on 2017-05-25. Score: 21 | Accepted answer

[Scratch](http://scratch.mit.edu) is a visual block-based drag-and-drop programming language designed specifically for learners, especially children. It's created by the Lifelong Kindergarten Group at the MIT Media Lab.

The language and IDE are pretty much completely connected. Here's how I see it checking off your bullet points:

* Object oriented: It has sprites, but it's debatable whether it's truly object oriented. It can serve as an introduction to the concept though.
* Good IDE: Yes. There's a help toolbar on the right side.
* Simple IDE with run button: Yes.
* Visual: It's completely visual and drag-and-drop. Typing is only needed for numbers and strings, essentially.
* Free of language oddities and paradoxes: I'm not sure exactly what type of oddities and paradoxes you're thinking of, but Scratch tries to be helpful and avoid breaking your code whenever possible. The blocks themselves are pretty intuitive and self-explanatory.
* Other:
  + Indentation: Since it's not text based, this is less important, but control structures (conditions and loops) do get their code indented.
  + Variable declaration: All variables must be defined before use.
  + Memory safe: Yes, it runs in Flash in the browser (next version plans to move to JS). You don't have any control over actual memory usage in your program.

Scratch was my first language, and I've been teaching it as a first language for the past several years. It's great for teaching the concepts without worrying about annoying little things like syntax.

> **Comments:**
> **username_0**: Thank you! Very nice, looks really good! I'll try it in the evening. Just what I was looking for. I'll leave the question open though, in the hopes of getting some more similarly good ideas.  
> **username_4**: Is it even possible to write scratch without the IDE? I've never heard of that happening.  
> **username_19**: @username_4 There have been some user-contributed alternate players for Scratch. Examples: [Phosphorus](https://phosphorus.github.io/), [official HTML5 player](https://github.com/LLK/scratch-html5), [SB2.JS](https://code.google.com/p/sb2-js/). And even some alternate IDEs: [M30w](https://sourceforge.net/projects/m30w/) (text based), [Pixie](http://nathan.github.io/pixie/) (in JS).  
> **username_20**: I guess Scratch is a very great child-focused option. Remember it has an online option very useful.  
> **username_8**: See also Scratch's cleverer, less well known brother, [Snap!](snap.berkeley.edu), and [this discussion](https://cseducators.stackexchange.com/questions/112/what-can-snap-do-that-scratch-cannot) comparing them.  
> **username_5**: Snap is like scratch, but they have improved it to remove some limitations. Snap has functions and procedures. Scratch only has procedures. (note these words are often erroneously mixed up, including by authorities). However when I last used it at school on IE, there was some stability issues, and saving/loading issues.  

---

### Answer by username_26 on 2017-05-25. Score: 21

I would consider teaching in [Python](https://www.python.org/) if you wanted to give your students a taste of programming in a text-based language—pretty much the only type of language used professionally. A visual programming language like Scratch is probably better for younger groups, and teaches the underlying programming concepts well, but you will reach a point where you **must** write in a text-based programming language. There are very few programmers who work professionally in visual programming languages, so Python provides a nice 'first step'.

Note that I would specifically recommend **Python 3**, because it has far fewer 'oddities' that you'd like to avoid. I've briefly discussed this [here](https://cseducators.stackexchange.com/a/82/2) in comparison to Python 2; it seems like a no brainer to teach in Python 3, which is much more intuitive.

Regarding your constraints:

* **Object-oriented**: Python supports OOP, but does not enforce it. If you want to initially teach procedural programming, then move on to OOP, Python will allow you to do that. Other languages like Java **require** OOP, with all the boilerplate that comes with it, but Python gives you the flexibility to write either way.
* **IDE support**: The default IDE, IDLE, is frankly poor. PyCharm, Jetbrains' IDE, is far superior and does support intelligent auto-complete, although the professional edition does come at a cost. [PyCharm Edu](https://www.jetbrains.com/pycharm-edu/), however, is free and open source. It's also worth considering [whether you need an IDE at all](https://cseducators.stackexchange.com/a/48/2)!
* **Visual element**: Initially, I suspect it'll be far easier to teach your students to write text-based programs. Don't underestimate what you can make on the command line, though—quizzes, guessing games and joke scripts are all low hanging fruit. Al Sweigart's [\*Invent Your Own Computer Games with Python](https://inventwithpython.com/inventwithpython_3rd.pdf) might be a helpful resource to teach using PyGame for the visual element, but it will be much more verbose than command-line programs and will probably require some teaching to get to that level. You might find it helpful to [use the `turtle` library](http://interactivepython.org/runestone/static/thinkcspy/PythonTurtle/OurFirstTurtleProgram.html) for something to play with, and get instant feedback.
* **Language oddities**: Python is relatively intuitive, and was designed with [specific consideration for beginners](https://www.python.org/about/gettingstarted/). The [floating point calculations](https://stackoverflow.com/questions/588004/is-floating-point-math-broken) might cause some confusion, but other than that, most operations work as you'd expect.
* **Indentation**: Python **enforces** indentation, otherwise your code just won't run at all. The discipline that Python creates will probably be helpful for future, less strict languages.
* **Memory safety**: Nothing to worry about here.
* **Declaring variables in advance**: This point *isn't really required* for Python—you generally don't declare variables in advance; you just create them as needed.

Consider the benefits of a text-based language: once your students master it, they understand a **general-purpose** programming language used in industry. If you master Scratch, you *still* have to go through this step anyway to learn a text-based language.

> **Comments:**
> **username_19**: +1 because Python is good, but i disagree with saying Scratch isn't a *real* language. It teaches the basic programming concepts without making you worry about annoying things like syntax. You can still make cool projects in Scratch that use actual algorithms.  
> **username_26**: @username_19 You're right, I think 'real' doesn't reflect what I was trying to get at—a general purpose language that can be used for nearly anything, whereas Scratch is more limited in its uses (although still has a very important place in education). In Scratch, you can make games and animations, but Python allows you to make applications, games, websites, command line programs—nearly anything. That was what I meant when I said *real*, although re-reading it, it did sound a bit 'snobby', so I've changed that.  
> **username_2**: +1 for mentioning ```turtle```. The concept is simple, but it seems very effective to get interesting visual output in 'non-visual' language.  
> **username_8**: Check out Guido van Rossum's (Python's creator and 'benevolent dictator for life') paper on [computer programming for everyone[(http://legacy.python.org/doc/essays/cp4e/) from 1999.  
> **username_1**: For a simple(r) IDE for learning Python programming, also see the open-source Thonny at http://thonny.org. Has (sub)expression evaluation stepping, visualisation of the call stack, etc. -- all very useful for beginners especially. There is also an extension available so that you can use this same IDE for programming the BBC Micro:Bit as well.  

---

### Answer by username_21 on 2017-05-25. Score: 11

Processing probably ticks a lot of your boxes. It's essentially a framework built on top of Java and shipped with its own IDE (also free and open source). A lot of the boiler plate code that normally exists in Java (package and include statements and so on) is hidden by default, so it's very clean for newbies (you can import extra packages later if you need to in the normal way). As straightforward as you'd want it to be to put together simple versions of classic games, like Pong below, which I think of as a good barometer for a teaching language.

[![IDE on left, intermediate project on right](https://i.sstatic.net/xzWZy.gif)](https://i.sstatic.net/xzWZy.gif)

* **Object oriented**: fully featured Java under the hood
* **Good IDE (intellisense and built-in help)**: Not always perfect, but the latest version has auto-complete and auto-indenting functionality which is about as much as I want younger students to have. Little beyond that, which can be frustrating, but on balance I think it hits a nice sweet spot of simplicity and functionality. One button to compile and run.
* **Should be visual**: very easy to draw shapes on screen. Can make a circle follow the mouse in six lines (including two that are just brackets). Not as easy as something like Scratch, but about as easy as I can imagine a full fat programming language being. By week 5 with a young class we have them working with mouse coordinates, colours and random numbers to put together simple animations like the below (super simple to look at here, but lots of little achievements the kids love along the way to keep it interesting. Also need semicolons, brackets, etc all correct for this)
  [![Simple lesson with Processing - shape onscreen moving and flashing](https://i.sstatic.net/RQlYt.gif)](https://i.sstatic.net/RQlYt.gif)
* **Should be free of language oddities and paradoxes**: depends on what exactly you mean. Java probably fails this test by some reasonable measures, but that's a broader conversation.
* **The list goes on; should encourage the use of indentation, should require variable declaration, should be memory safe...**: The language/IDE don't demand indentation, but it's made pretty easy to do. Requires variable declarations, is memory safe. Also provides plenty of headroom to grow into for even the most advanced students.

We've used it with students as young as 8. On the whole we've concluded that age 10-11 is a sweet spot for starting with this kind of thing (as against something like Scratch). Some 8-year-olds can definitely get to grips with Processing, but most get a little frustrated after the first 5-10 lessons at how slow progress can be. In particular the reliance on coordinates can be a very high bar for younger students to cross.

> **Comments:**
> **username_1**: Just to present the other side of the coin, see Bret Victor's [Learnable Programming](http://worrydream.com/LearnableProgramming/) essay that looks at (conceptually & concretely) language/environment design for learning to program with. He says **JavaScript and Processing are poorly-designed languages that support weak ways of thinking, and ignore decades of learning about learning.** when considering readability, making computation visible, decomposition, recomposition and more. It has global state, modes that alter the meaning of a line of code, etc., so not great for learners specifically.  
> **username_22**: @username_1 - I'm curious - I was wowed by Bret Victor's talk a couple of years back like everyone else but what actually makes him an authority on learning? He seems to be a a CS guy and an interface designer. Has he been a teacher for any length of time? An education researcher (even though education research has a horrible reputation)?  
> **username_1**: @MikeZamansky His work speaks for itself. The brilliance of it, the research that evidently goes into it and the impact that it has. But also, the organisations like MIT that invite him over, the people like Alan Kay who more-than-endorse him, etc. -- he is a design-for-humans genius. :) From human-computer interaction research and design at Apple to learn/understand/create research, been working with Alan Kay and other comp sci education and learning sciences researchers (amongst others) in essence continuing the design-for-understanding-and-human-empowerment work of especially Seymour Papert  
> **username_22**: Got it - his work speaks for itself. Just like Bill Gates when he had his theories of how schools should be run.  I do think Victor's work is pretty cool and interesting but I wouldn't be willing say his personal theories are unquestionably correct until  they're vetted by actual teachers.  Plenty of teachers have had terrific results with those horrible tools.  
> **username_23**: See also: https://cseducators.stackexchange.com/questions/19/using-processing-as-an-entry-point-in-an-introductory-course  
> **username_5**: @username_1 you may be able to help answer this question https://cseducators.stackexchange.com/q/3907/204  

---

### Answer by username_24 on 2017-06-03. Score: 10

The [Racket](http://racket-lang.org/) team has argued that *no* language that is suitable for writing any real software is great for beginners: they contain too many warts, legacy features, complex corners, etc. And that includes Racket itself. We have therefore created a series of *student languages* that are carefully designed subsets of the full language ideal for student use.

Think of it this way. Open an introductory programming textbook that uses some language *L*. Start at the beginning. Does it use all of *L* on page 1? Or page 10? Or even page 100? No! It begins with a very small subset of *L*, then grows that subset chapter by chapter, and even by the end may have exposed you to only a small part of *L* (if *L* is a language in industrial use). This is not only sensible, it's what we implicitly expect.

Now ask yourself why your programming environment doesn't do the same.

In contrast, that's what Racket does. The languages that come bundled with the main IDE, DrRacket, are tied to the text [*How to Design Programs*](http://htdp.org/). Other textbook authors have provided their own languages too, and it's easy for instructors to create their own to match whatever they are teaching.

> **Comments:**
> **username_25**: As a high school educator using the student languages in the classroom, I can vouch for this philosophy! The limited feature set of the Beginning Student Language allows for excellent error messages, and allows students to feel they have "the whole language" in their heads. The Intermediate and Advanced Student Languages are the perfect "small steps" up.  

---

### Answer by username_7 on 2017-05-26. Score: 7

I had great success by teaching kids (8 to 11 years old) to set up their sites. First, plain HTML to understand how model maps to presentation; then CSS to see how boring stuff can be factored out; then javascript to make pages alive; then CGI to do magic.

The important parts were

* immediate tangible reward: Hey look at my page!
* no big words (*object* doesn't say much to a kid)
* all is done in a notepad, with the message that fancy tools are not really necessary
* toolchain is introduced pretty late, when a kid is ready
* CGI is a Creative Gentle Introduction to real programming, because they are already hooked, and want more

Of course all of that happened in late 90es. Still I believe the strategy is sound even now.

> **Comments:**
> **username_4**: While I love teaching front end web stuff, I don't think that the OP is asking about that. The problem is that HTML+CSS are not "real" languages in that they cannot do logic, accept user input on their own, etc.  
> **username_7**: @username_4 Correct. The point is that it is a natural introduction into a real world. And besides, CSS does drive toward an object oriented mindset. And javascript has plenty of logics. The order is very important.  
> **username_4**: It also doesn't match what the OP asks for. HTML+CSS are not programming languages, they are markup languages. And if you want to talk about JS, although it is a programming language, it is not free of language oddities and paradoxes, as the OP requests.  
> **username_7**: @username_4 Let's agree do disagree. HTML+CSS _is_ a programming language, as much as Make and Prolog are. All of them transform a set of rules to the visible result. Who cares that they are not functional, or imperative, or whatever, but descriptive.  
> **username_8**: Absence [the implementation of Rule 110 in HTML and CSS](https://www.google.co.uk/url?sa=t&rct=j&q=&esrc=s&source=web&cd=2&cad=rja&uact=8&ved=0ahUKEwin47XtjI3UAhXsJsAKHTKkDZoQFggsMAE&url=https%3A%2F%2Fstackoverflow.com%2Fquestions%2F2497146%2Fis-css-turing-complete&usg=AFQjCNG33DBUIhIVAbh4v8Aq52QRdGBAXg&sig2=itn_S0Kspafa-Wslfzdpmg), it's coding, but it ain't programming: write me some HTML/CSS that adds a couple of numbers, checks if a number is prime, or sorts a list into order...  
> **username_9**: @username_7 I concur. I think the learning comes from students manipulating and creating something that they are already familiar. Being able to go home and think they have come part of the way in understanding a real-world concept.  
> **username_5**: I have just been looking at the brackets editor, it gives instant feedback when editing html and css (maybe js in the future). And html is a real language (not programming-language), and css is a programming language, but very specialised.  
> **username_10**: For me HTML and CSS got me into the field of computer science. So it might not be a programming language but if the goal is 'to show the children to write some code and the pc reacts to it' then it's well-suited to start with. Real programming might be the next step.  

---

### Answer by username_11 on 2017-05-27. Score: 6

A variant of the Racket programming language with the DrRacket IDE is used in the [course "How to Code"](https://www.edx.org/course/how-code-simple-data-ubcx-htc1x#!) by Gregor Kiczales.

* "Object oriented (ComLogo is funny, but has nothing to do with today's actual programming)." The object-oriented paradigm is not stressed in the course. "Actual programming" kind of conflicts with "learning programming".
* "Good IDE (intellisense and built-in help)." DrRacket has built-in help, syntax highlighting, variable binding highlighting, automatic indentation.
* "Simple IDE with preferably a "Run" button." Yes.
* "Should be visual (command line will never be too appealing to kids)." I guess you mean that programming problems should be about graphics. There is a graphics library, and the first problem is to combine a picture from geometric primitives.
* "Should be free of language oddities and paradoxes (this is where most actual programming languages fail IMO)." I don't understand this.
* "Should require variable declaration." Every variable should be bound somewhere in the code, of course. The type is not declared. Racket has dynamic type system.
* "Should be memory safe." Yes.


---

### Answer by username_12 on 2017-06-16. Score: 4

[Greenfoot](https://www.greenfoot.org/door) is an IDE for Java which was created for teaching purposes. It displays a graphical "world" (a two dimensonal rectangle with configurable background) in which "actors" can be created, deleted, react to user input and move.

It is using Java and is therefore object-oriented, which could be demonstrated by placing multiple actors of the same class in a world. Additionally, extending classes is visualized using a tree diagram and has to be done from the beginning on as each "actor" has to be a subclass of the abstract `Actor` class.

As stated on the [overview page of Greenfoot](https://www.greenfoot.org/overview), it has auto-completion and a built-in access to documentation, which is (as far as I remember) quite good. The auto-completion seems to work good as well (I've just done a quick test). Auto-indentation is also included, but has to be triggered manually.

It has a "Compile" button but seems to compile automatically after saving so if you want to run your project, you can just press the "Run" button.

As to language oddities you could say it has all oddities Java has - relevant for starters might be the `==` or `equals` problem when comparing strings.

I personally always enjoy working with Greenfoot, but depending on (mental) age and programming interest of your students, a [graphical language like Scratch](https://cseducators.stackexchange.com/a/165/793) could be a better (more motivating) choice.

As a sidenote: Greenfoot has recently introduced the "Stride" language which introduces its own syntax, forces indentation by being a bit more graphical and can be (only) used through shortcuts. I haven't extensively tested it yet, but didn't want to leave it unmentioned.


---

### Answer by username_9 on 2017-05-25. Score: 4

Teaching strategies are indicative of learning. This is as much part of learning to programming. Students need direction and to be given instruction, not just to be sat in front of a computer hoping that learning will be automatic.

Grover and Basu would agree block programming is a great introduction, but their research shows that students have general difficulties understanding programming constructs, whether using text-based or block programming language, and calls for application of learning strategies “[balancing] constructionism with other pedagogical approaches that foster deeper learning of problem solving activities and computing concepts… Activities that require students to describe what is happening” (Grover & Basu, 2017, p. 271 - 272). [Measuring Student Learning in Introductory BlockBased Programming: Examining Misconceptions of Loops, Variables, and Boolean Logic](https://www.researchgate.net/publication/314296105_Measuring_Student_Learning_in_Introductory_Block-Based_Programming_Examining_Misconceptions_of_Loops_Variables_and_Boolean_Logic).

> **Comments:**
> **username_13**: That's a great article to keep in mind - thanks for sharing it. Could you elaborate a bit as to how it connects to the specific question being asked above?  

---

### Answer by username_14 on 2017-05-25. Score: 3

Although out-of-style, historically, BASIC was designed for the education of non-STEM college students, is time tested, and probably allowed one of the highest ever programming literacy rates among the total base of personal computer users at one time. It might be the programming language from which a student is most likely to able to get homework help from their parents or grandparents.

BASIC can be run, interactively, without any IDE or editor, and is currently supported on the most primitive computing platforms (Grandpa's Apple II) as well as emulations within contemporary web browsers.

In spite of Dijkstra's complaints, many successful computer programmers and entrepreneurs (including now billionaires) first learned to program in BASIC, many as kids, on their own.

> **Comments:**
> **username_15**: for me the issue is, it does not scale well. As in, after learning BASIC students find it difficult to relate with currently popular languages like Java and C sharp, which they eventually have to learn as it is.  
> **username_14**: As a counter-point, many Basic programmers, who had to use ultra-low-level peeks and pokes, became competetent assembly language and low level C programmers. Skills which are still needed for some OS drivers, energy-harvesting IoT, embedded, and DSP development, and etc.  

---

### Answer by username_16 on 2017-07-08. Score: 2

I am not sure if this is really what you are looking for, but there is also [Blocky](https://developers.google.com/blockly/) from Google which is kind of similar to Scratch, and lets you see the source code produced by the block in different programming languages (JavScript, Python, PHP, Dart, Lua). Blocky is used in several projects like code.org.

If Java is OK for you, than you can consider the [BlueJ](https://www.bluej.org/) IDE which is:

> A free Java Development Environment designed for beginners, used by
> millions worldwide


---

### Answer by username_2 on 2017-05-25. Score: 1

[Dr. Java](http://www.drjava.org/) is simple IDE for Java that is designed for students. Dr. Java insist you press the 'compile' button before the 'run' button, but that is all.

A nice feature is a basic console that allows you to REPL, as in an interpreted language.

In addition, Dr. Java supports some more advanced features (without cluttering the screen), such as automated testing and code coverage with JUnit and a debugger.

To create visual output in Java, you can use the [Turtle Graphics](http://www.turtlegrafik.ch/) package, which visualizes the path a 'turtle', let's call him Joe, walks, according to the commands you gave Joe in Java (e.g. joe.forward(100), joe.right(90), etc.)

Although full-featured Java can be a bit daunting for the beginner, the tools I mentioned can be used to keep it simple enough to teach programming. (Turtle Graphics is, iirc, how I was introduced to programming in high-school)

An advantage of this approach over using a language designed only to learn programming, is that this approach more easily gives access to more advanced learning tools, as more people use Java than very specific learning languages.


---

### Answer by username_15 on 2017-08-22. Score: 1

When I started, the first language I was advised to use was C programming. We had to use Turbo C.

Although, I never got a chance to use C professionally (like when I work on software projects for enterprises and small companies and startups), I ended up teaching that so many times. From a software developer perspective, C is just not right for todays environment, but for some reason, I feel that it is the simplest language to learn, and that is what I advise to students who are young, and brand new to programming.

Here are some reasons why I would go with C (although I personally don't like that language)

* It runs on pretty much anything, especially if students are poor (which is the harsh reality in my city) and can afford a very basic laptop which can run a older version of windows, or worst case scenario, Linux
* Almost every university in India, has included C as part of their first year syllabus. So, there is a plenty of material, tutoring classes to find.
* A good understanding of C can later lead to easier learning of almost any object oriented language such as C sharp, Java and if the occasion calls for it, C ++.

Especially in a scenario like what I have in my country, C fits in perfectly.

As an alternative, I also would recommend Javascript but I think it is already in one of the other answers.

> **Comments:**
> **username_18**: I would differ here as Turbo-C was used here in Pakistan as well but it was exactly the reason why I kept loathing programming for a long time. C is difficult or not is a separate topic but Turbo C is an awful IDE (imo) for sure. Being a teacher, first thing I managed was keeping an arm's length between my students and Turbo C and it reaped dividends as well.  
> **username_15**: Just to clarify, I am recommending go with C but please god please don't use Turbo C indeed. Man, that thing (although OKAY at that time, 15 years ago) is just awful by todays standards. Its easier to just use an online C compiler, and if that is not available, Visual Studio or GCC.  
> **username_17**: « I never got a chance to use C professionally » You were lucky you never had to program in C professionally.  
> **username_15**: I got to agree with that, and I do count myself lucky. I still dread C :)  

---

