<p>I have two recommendations:</p>
<ul>
<li><p><strong>Java</strong> of course, because it is used in so many application fields. GUI is a little tedious. JavaFX should probably be prioritized versus Swing, because it is more modern.</p>
<p>Actually, I would have loved it to learn <strong>Kotlin</strong> early. It is modern, it removes much of the syntax bloat. It is compatible with JVMs.</p>
<p>IntelliJ IDE is unsurpassed in functionality of the editor, help system / CodeSense, customisability, debugging, syntax highlighting etc. Much more delightful to use than Eclipse in my experience. Also offers a well structured GUI and is also available in a community edition. - No, I am not affiliated ;)</p>
</li>
<li><p><strong>Freepascal (LazarusIDE) / Delphi</strong>: I do not know of any other system, where you have a running GUI within seconds. Also it is intuitive to change all the parameters with the ObjectInspector. All higher level concepts of OOP are supported.</p>
<p>The Delphi-/LazarusIDE is mighty (provides all needed editor functions, debugging, customization, etc.). It is capable of compiling for multiple platforms. The syntax is a little cumbersome, but at the same time it is easy to grasp. Also it is verbose. The designer (N. Wirth) specifically designed it to be a language for beginners (therefore an emphasis on some discipline on formatting etc. because the language is not case-sensitive for example).</p>
</li>
</ul>
<p>I learned Delphi in school and I am still using it today for personal projects.</p>
<p>Java mostly in the professional field, though.</p>

CC BY-SA 4.0
2024-08-14T04:21:06.603Z
2024-08-14T04:31:53.067Z
2024-08-14T04:31:53.067Z
Antares
<p>Go with Python.</p>
<p>Python has a number of advantages that make it uniquely well suited for your situation:</p>
<ul>
<li>It is very easy to set up. Installing a Python interpreter is straightforward on any platform and many environments will already come with a pre-installed interpreter. This is absolutely essential since you want students to be able to play with the language at home on their own machines. There is no compilation step required. You don't need to talk about build systems or even IDEs for quite a while. Be sure to point out the differences between Python 2 and Python 3 to your students though, as that can be a common pitfall when setting up a dev machine on your own.</li>
<li>Python's programming paradigm aligns well with the curriculum you are describing. It has all of the required features and seems to be a good fit for this kind of course.</li>
<li>Python is extremely well documented and accessible to non-professional programmers. Your students will have no trouble finding additional material to either deepen their understanding of what is covered in the course, or expand their knowledge to new topics.</li>
<li>Python has real value to students outside of your course. Be sure your students understand its potential for use in mathematical, science or economics classes and even for personal use at home.</li>
</ul>
<p>That being said, Python has one major disadvantage from a Computer Science perspective: It's not a good language for Computer Scientists. It's untyped, it encourages writing quick and sloppy code, and it often hides away the essential properties of the code behind convenient syntax.</p>
<p>For a secondary school course, that's okay. Strong typing can be perceived as discouraging and frustrating. Languages with a lighter syntax like LISP or Haskell require a high degree of abstract thinking that is often beyond what students at this age are willing to put up with. If your class seems particularly motivated and time allows, give them a glimpse of how those other languages approach problems in a different way. But let Python be their main vehicle for this initial journey.</p>

CC BY-SA 4.0
2024-05-07T10:04:56.340Z
2024-05-07T10:12:54.377Z
2024-05-07T10:12:54.377Z
ComicSansMS
<p>The best language is likely whatever language is most familiar to them.</p>
<p>Particularly in early development, there is little to recommend switching programming languages without good reason.  The goal at first should be depth, not breadth.  It is fairly easy to move what you already know to a new language, but switching out languages is an impediment for a month or two while you adapt to the new language.  This is a month of two in which the progress your students make will be needlessly limited.</p>
<p>A course in C is not a needless switch, since the concepts taught are substantively different, and it is hard to teach the systems programming concepts you encounter in C in Java, and hard to teach the OOP concepts of Java in C.</p>
<p>If the students are coming in with Java, stick with Java.  This will give them the best progress within the time you have in your course.</p>

CC BY-SA 4.0
2024-04-14T06:33:50.387Z
Sorry, I didn't made it clear, that we assume that these students have no prior experience in programming. There are only two or three students in every class  that learned to program in their free time.
brucesp
CC BY-SA 4.0
2024-04-14T18:02:18.183Z
@brucesp Are there other teachers in the program?  Ideally, year 1 and year 2 would remain the same language, so this would be an issue to coordinate within your department.  That said, the vast majority of programs that teach imperative programming begin with Java or Python, with Java by far the most common starter language.  I suspect that Java is so much more common because of the advantages to keeping it for the second year.
Ben I.
CC BY-SA 4.0
2024-04-15T06:23:46.840Z
Yes there are other teachers, but one course has only one teacher for all three years in software. There is another teacher for hardware for the same course. I also think that Java has benefits, because it is widely used and you it is good to learn OOP concepts. But maybe the benefit of Python is that it is easier to get started. The students are 16 or 17 years old and most of them never programmed before.They are also not used to think abstract.
brucesp
CC BY-SA 4.0
2024-04-15T15:50:33.473Z
@brucesp Then it sounds like you are headed in the right direction.  In your circumstances, I'd choose my language mostly based on years 2 and 3 - what do you ultimately want the students to achieve?  Both languages are strong choices.
Ben I.
CC BY-SA 4.0
2024-04-13T18:39:44.197Z
2024-04-13T18:39:44.197Z
Ben I.
<p>HTDP and the language therein used and specifically designed for initial learners.</p>
<p>It has everything needed, but especially and most importantly it lacks everything that must be postponed.</p>

CC BY-SA 4.0
2024-05-07T09:42:10.413Z
It is also missing a substantial amount of the features that were listed as requirements in the question. Note that secondary school teachers in Germany don't have the freedom to just not cover certain topics if they think they are not important. The German curriculum was very much designed with mainstream OOP languages in mind, and while I personally sympathize with the approach of using a LISP-like language for the introduction, it's just not a good fit for this particular situation.
ComicSansMS
CC BY-SA 4.0
2024-04-17T17:58:46.003Z
2024-04-17T17:58:46.003Z
user9137
<p>For those topics to be covered above, I always use Java.</p>
<p>In our school system, high school/middle school already tackled C as one of the programming language they learned in their computer classes/subjects. I prioritized that the next language is easy to be recognized for my students to catch-up.</p>
<p>For Java, it is easy to setup to your student's computers (whether it's Windows, Mac or Linux), and they can use any free IDE to link to the compiler (I usually recommend VSCode or Eclipse, both are free and being used by DevOps and SysEng in the industry/corporate work), and they can even have it even pushed to GitHub to learn basic versioning control (and easier to check assignments and lab exercises there too).</p>
<p>I usually use Java for college programming 1, OOP, data structures and algorithms subject.</p>

CC BY-SA 4.0
2024-04-25T10:59:08.227Z
2024-04-25T14:59:47.107Z
2024-04-25T14:59:47.107Z
TheNocturnalDevGypsy
<p>first I want to apologize for my bad English.</p>
<p>I am a teacher at a secondary school in Germany. Some of these students specialize in computer science.</p>
<p>Maybe I am the teacher of one of these courses next year</p>
<p>The students have to learn these basic concepts in the first year:</p>
<ul>
<li><p>variables</p>
</li>
<li><p>constants</p>
</li>
<li><p>types</p>
</li>
<li><p>operators</p>
</li>
<li><p>conditionals</p>
</li>
<li><p>loops</p>
</li>
<li><p>arrays</p>
</li>
<li><p>IO</p>
</li>
<li><p>GUIs</p>
</li>
<li><p>exceptions</p>
</li>
</ul>
<p>They also have to learn these OOP concepts</p>
<ul>
<li><p>objects</p>
</li>
<li><p>classes</p>
</li>
<li><p>constructors</p>
</li>
<li><p>attributes</p>
</li>
<li><p>methods</p>
</li>
<li><p>encapsulation</p>
</li>
</ul>
<p>In the second year, they learn about</p>
<ul>
<li><p>inhertiance</p>
</li>
<li><p>interfaces</p>
</li>
<li><p>polymorphism</p>
</li>
<li><p>associations</p>
</li>
<li><p>overloading and overwriting of methods</p>
</li>
</ul>
<p>Most of the students have no prior experience in programming. There are only two or three students in every class that learned to program in their free time.</p>
<p>In another parallel course, they learn some basic C.</p>
<p>Teachers at this school and on a lot of other schools use Java to teach these concepts.</p>
<p>I also think that Kotlin and Python are good beginner languages. I think the advantage of Python, is that it looks very friendly and you can use simple editors like Thonny for it.</p>
<p>The advantages of Kotlin are the type system and the C-like syntax. Unfortunately you have to use InteliJ for Kotlin.</p>
<p>I really like functional languages like Haskell and OCaml but they obviously don't fit to these OOP concepts.</p>
<p>I am very interested to hear your opinion about the best language for such a course.</p>

CC BY-SA 4.0
2024-04-14T09:20:57.157Z
Have you seen some of the existing threads, like [What is a good introductory language for high school?](https://cseducators.stackexchange.com/questions/5804/what-is-a-good-introductory-language-for-high-school)? That said, it's hard to argue with Python or Java. Both are basically ubiquitous in education and industry. Kotlin, Haskell and OCaml seem like sidelines for specialized uses that won't transfer well to other classes or industry. Kotlin isn't too wild an idea, just not top 5 language material yet, mainly used for mobile app development, which is well out of scope of your curriculum.
ggorlen
CC BY-SA 4.0
2024-04-15T06:18:17.580Z
I didnt saw this thread. I saw this  [link](https://cseducators.stackexchange.com/questions/5242/java-or-kotlin-for-beginners-procedural-programming-knowledge-is-existing). I know that Haskell and OCaml are not a good choice for this course. The OOP-concepts are not a part of Haskell.
brucesp
CC BY-SA 4.0
2024-04-17T17:57:23.133Z
@brucesp the "not having OOP concepts" is exactly what makes them excellent for learning at the very initial stage. See also the language used in HTDP, specifically designed for those learners.
user9137
CC BY-SA 4.0
2024-04-27T13:47:02.627Z
@brucesp I recommend also reading over my answer to a similar question here: https://cseducators.stackexchange.com/a/6379/9157
lfalin
CC BY-SA 4.0
2024-05-24T10:42:48.717Z
What did you mean secondary school, is it high school or less well known university ?
Qiulang 邱朗
CC BY-SA 4.0
2024-08-14T04:10:06.617Z
What exactly is the problem with IntelliJ IDEA? There is a free community edition, and in my opinion, the IDE is superior to Eclipse. It is also fairly easy to grasp how to handle the IDE, get to debug etc. can also be customized a ton.
Antares
CC BY-SA 4.0
2024-08-14T04:35:28.973Z
No need to apologize. No bad English in sight anywhere.
Antares
<programming><curriculum-design>
Best beginner language for a basic course
# Best beginner language for a basic course

(Asked by: username_0 on 2024-04-13)

first I want to apologize for my bad English.

I am a teacher at a secondary school in Germany. Some of these students specialize in computer science.

Maybe I am the teacher of one of these courses next year

The students have to learn these basic concepts in the first year:

* variables
* constants
* types
* operators
* conditionals
* loops
* arrays
* IO
* GUIs
* exceptions

They also have to learn these OOP concepts

* objects
* classes
* constructors
* attributes
* methods
* encapsulation

In the second year, they learn about

* inhertiance
* interfaces
* polymorphism
* associations
* overloading and overwriting of methods

Most of the students have no prior experience in programming. There are only two or three students in every class that learned to program in their free time.

In another parallel course, they learn some basic C.

Teachers at this school and on a lot of other schools use Java to teach these concepts.

I also think that Kotlin and Python are good beginner languages. I think the advantage of Python, is that it looks very friendly and you can use simple editors like Thonny for it.

The advantages of Kotlin are the type system and the C-like syntax. Unfortunately you have to use InteliJ for Kotlin.

I really like functional languages like Haskell and OCaml but they obviously don't fit to these OOP concepts.

I am very interested to hear your opinion about the best language for such a course.

**Tags:** programming, curriculum-design

> **Comments:**
> **username_1**: Have you seen some of the existing threads, like [What is a good introductory language for high school?](https://cseducators.stackexchange.com/questions/5804/what-is-a-good-introductory-language-for-high-school)? That said, it's hard to argue with Python or Java. Both are basically ubiquitous in education and industry. Kotlin, Haskell and OCaml seem like sidelines for specialized uses that won't transfer well to other classes or industry. Kotlin isn't too wild an idea, just not top 5 language material yet, mainly used for mobile app development, which is well out of scope of your curriculum.  
> **username_0**: I didnt saw this thread. I saw this  [link](https://cseducators.stackexchange.com/questions/5242/java-or-kotlin-for-beginners-procedural-programming-knowledge-is-existing). I know that Haskell and OCaml are not a good choice for this course. The OOP-concepts are not a part of Haskell.  
> **username_2**: @username_0 the "not having OOP concepts" is exactly what makes them excellent for learning at the very initial stage. See also the language used in HTDP, specifically designed for those learners.  
> **username_3**: @username_0 I recommend also reading over my answer to a similar question here: https://cseducators.stackexchange.com/a/6379/9157  
> **username_4**: What did you mean secondary school, is it high school or less well known university ?  
> **username_5**: What exactly is the problem with IntelliJ IDEA? There is a free community edition, and in my opinion, the IDE is superior to Eclipse. It is also fairly easy to grasp how to handle the IDE, get to debug etc. can also be customized a ton.  
> **username_5**: No need to apologize. No bad English in sight anywhere.  

---

## 5 answers

### Answer by username_7 on 2024-04-13. Score: 3

The best language is likely whatever language is most familiar to them.

Particularly in early development, there is little to recommend switching programming languages without good reason. The goal at first should be depth, not breadth. It is fairly easy to move what you already know to a new language, but switching out languages is an impediment for a month or two while you adapt to the new language. This is a month of two in which the progress your students make will be needlessly limited.

A course in C is not a needless switch, since the concepts taught are substantively different, and it is hard to teach the systems programming concepts you encounter in C in Java, and hard to teach the OOP concepts of Java in C.

If the students are coming in with Java, stick with Java. This will give them the best progress within the time you have in your course.

> **Comments:**
> **username_0**: Sorry, I didn't made it clear, that we assume that these students have no prior experience in programming. There are only two or three students in every class  that learned to program in their free time.  
> **username_7**: @username_0 Are there other teachers in the program?  Ideally, year 1 and year 2 would remain the same language, so this would be an issue to coordinate within your department.  That said, the vast majority of programs that teach imperative programming begin with Java or Python, with Java by far the most common starter language.  I suspect that Java is so much more common because of the advantages to keeping it for the second year.  
> **username_0**: Yes there are other teachers, but one course has only one teacher for all three years in software. There is another teacher for hardware for the same course. I also think that Java has benefits, because it is widely used and you it is good to learn OOP concepts. But maybe the benefit of Python is that it is easier to get started. The students are 16 or 17 years old and most of them never programmed before.They are also not used to think abstract.  
> **username_7**: @username_0 Then it sounds like you are headed in the right direction.  In your circumstances, I'd choose my language mostly based on years 2 and 3 - what do you ultimately want the students to achieve?  Both languages are strong choices.  

---

### Answer by username_2 on 2024-04-17. Score: 2

HTDP and the language therein used and specifically designed for initial learners.

It has everything needed, but especially and most importantly it lacks everything that must be postponed.

> **Comments:**
> **username_6**: It is also missing a substantial amount of the features that were listed as requirements in the question. Note that secondary school teachers in Germany don't have the freedom to just not cover certain topics if they think they are not important. The German curriculum was very much designed with mainstream OOP languages in mind, and while I personally sympathize with the approach of using a LISP-like language for the introduction, it's just not a good fit for this particular situation.  

---

### Answer by username_8 on 2024-04-25. Score: 2

For those topics to be covered above, I always use Java.

In our school system, high school/middle school already tackled C as one of the programming language they learned in their computer classes/subjects. I prioritized that the next language is easy to be recognized for my students to catch-up.

For Java, it is easy to setup to your student's computers (whether it's Windows, Mac or Linux), and they can use any free IDE to link to the compiler (I usually recommend VSCode or Eclipse, both are free and being used by DevOps and SysEng in the industry/corporate work), and they can even have it even pushed to GitHub to learn basic versioning control (and easier to check assignments and lab exercises there too).

I usually use Java for college programming 1, OOP, data structures and algorithms subject.


---

### Answer by username_5 on 2024-08-14. Score: 1

I have two recommendations:

* **Java** of course, because it is used in so many application fields. GUI is a little tedious. JavaFX should probably be prioritized versus Swing, because it is more modern.

  Actually, I would have loved it to learn **Kotlin** early. It is modern, it removes much of the syntax bloat. It is compatible with JVMs.

  IntelliJ IDE is unsurpassed in functionality of the editor, help system / CodeSense, customisability, debugging, syntax highlighting etc. Much more delightful to use than Eclipse in my experience. Also offers a well structured GUI and is also available in a community edition. - No, I am not affiliated ;)
* **Freepascal (LazarusIDE) / Delphi**: I do not know of any other system, where you have a running GUI within seconds. Also it is intuitive to change all the parameters with the ObjectInspector. All higher level concepts of OOP are supported.

  The Delphi-/LazarusIDE is mighty (provides all needed editor functions, debugging, customization, etc.). It is capable of compiling for multiple platforms. The syntax is a little cumbersome, but at the same time it is easy to grasp. Also it is verbose. The designer (N. Wirth) specifically designed it to be a language for beginners (therefore an emphasis on some discipline on formatting etc. because the language is not case-sensitive for example).

I learned Delphi in school and I am still using it today for personal projects.

Java mostly in the professional field, though.


---

### Answer by username_6 on 2024-05-07. Score: 0

Go with Python.

Python has a number of advantages that make it uniquely well suited for your situation:

* It is very easy to set up. Installing a Python interpreter is straightforward on any platform and many environments will already come with a pre-installed interpreter. This is absolutely essential since you want students to be able to play with the language at home on their own machines. There is no compilation step required. You don't need to talk about build systems or even IDEs for quite a while. Be sure to point out the differences between Python 2 and Python 3 to your students though, as that can be a common pitfall when setting up a dev machine on your own.
* Python's programming paradigm aligns well with the curriculum you are describing. It has all of the required features and seems to be a good fit for this kind of course.
* Python is extremely well documented and accessible to non-professional programmers. Your students will have no trouble finding additional material to either deepen their understanding of what is covered in the course, or expand their knowledge to new topics.
* Python has real value to students outside of your course. Be sure your students understand its potential for use in mathematical, science or economics classes and even for personal use at home.

That being said, Python has one major disadvantage from a Computer Science perspective: It's not a good language for Computer Scientists. It's untyped, it encourages writing quick and sloppy code, and it often hides away the essential properties of the code behind convenient syntax.

For a secondary school course, that's okay. Strong typing can be perceived as discouraging and frustrating. Languages with a lighter syntax like LISP or Haskell require a high degree of abstract thinking that is often beyond what students at this age are willing to put up with. If your class seems particularly motivated and time allows, give them a glimpse of how those other languages approach problems in a different way. But let Python be their main vehicle for this initial journey.


---

