# What programming language to teach?

**URL:** <https://boards.straightdope.com/t/what-programming-language-to-teach/665992>\
**Category:** In My Humble Opinion\
**Created:** [August 12, 2013, 1:37am UTC](https://boards.straightdope.com/t/what-programming-language-to-teach/665992 "2013-08-12T01:37:18Z")\
**Posts on this page:** 10\
**Page:** 2

<div class="post-metadata">

**Author:** ![bump](https://avatars.discourse-cdn.com/v4/letter/b/7c8e57/32.png) [@bump](https://boards.straightdope.com/u/bump)\
**Post date:** [August 12, 2013, 6:15pm UTC](https://boards.straightdope.com/t/what-programming-language-to-teach/665992/21 "2013-08-12T18:15:51Z")

</div>

You really want a static type-checked language for learning; it separates the oddities that arise from type issues from other run-time issues.

Dynamically typed languages may be easier to do as a pro, but IMO just muddle things up and make it harder to debug for beginners.

My vote would be Pascal; it’s relatively easy, and it’s specifically designed as a learning language. It’s not sexy, and it has its warts, but it’s still miles better than teaching beginners C, which should be a crime.

---

<div class="post-metadata">

**Author:** ![UncleRojelio](https://sea3.discourse-cdn.com/straightdope/user_avatar/boards.straightdope.com/unclerojelio/32/3160_2.png) [@UncleRojelio](https://boards.straightdope.com/u/UncleRojelio)\
**Post date:** [August 12, 2013, 6:17pm UTC](https://boards.straightdope.com/t/what-programming-language-to-teach/665992/22 "2013-08-12T18:17:37Z")

</div>

Teach the little hackers C and have them write their own Pascal compiler with it. That’ll teach’em.

---

<div class="post-metadata">

**Author:** ![zoid](https://sea3.discourse-cdn.com/straightdope/user_avatar/boards.straightdope.com/zoid/32/336_2.png) [@zoid](https://boards.straightdope.com/u/zoid)\
**Post date:** [August 12, 2013, 6:32pm UTC](https://boards.straightdope.com/t/what-programming-language-to-teach/665992/23 "2013-08-12T18:32:24Z")

</div>

> [@Senegoid](#):
>
> [FORTRAN](http://www.ee.ryerson.ca/~elf/hack/realmen.html) is as good today as it ever was, and it was good enough for me!

Shit Yeah!  
Fortran 77

Then tell the little bastards to go read [this](http://www.amazon.com/Book-Programming-4th-Edition/dp/0201183994/ref=sr_1_1?ie=UTF8&qid=1376332255&sr=8-1&keywords=a+book+on+c) and not to come back untill they’ve mastered data structures and double linked lists.

---

<div class="post-metadata">

**Author:** ![filmore](https://avatars.discourse-cdn.com/v4/letter/f/7993a0/32.png) [@filmore](https://boards.straightdope.com/u/filmore)\
**Post date:** [August 12, 2013, 6:35pm UTC](https://boards.straightdope.com/t/what-programming-language-to-teach/665992/24 "2013-08-12T18:35:51Z")

</div>

> [@bump](#):
>
> You really want a static type-checked language for learning; it separates the oddities that arise from type issues from other run-time issues.
> 
> Dynamically typed languages may be easier to do as a pro, but IMO just muddle things up and make it harder to debug for beginners.
> 
> My vote would be Pascal; it’s relatively easy, and it’s specifically designed as a learning language. It’s not sexy, and it has its warts, but it’s still miles better than teaching beginners C, which should be a crime.

I agree with having a compiler. It will help beginners to have something looking over their work to find errors. However, I would recommend Java over Pascal. Pascal is a great teaching language, but it’s hardly used outside of school. It would be better to teach Java since it is widely used in business and will look better on a resume.

Do not have them use any sort of graphical IDE. They should use a plain editor to type in. An IDE will prompt them along too much and they won’t learn the language as deeply. They need to actually type the whole program in themselves for it to stick in their head. For example, I’m doing a project now in Python using an IDE. I cannot remember any of the imported methods and their parameters because the IDE automatically fills it in. Previously, I was writing Java in a plain editor and I could write out a complete program just from memory. So from a learning standpoint it’s probably better to write everything out and then switch to an IDE later for efficiency.

---

<div class="post-metadata">

**Author:** ![Animastryfe](https://avatars.discourse-cdn.com/v4/letter/a/8797f3/32.png) [@Animastryfe](https://boards.straightdope.com/u/Animastryfe)\
**Post date:** [August 12, 2013, 6:42pm UTC](https://boards.straightdope.com/t/what-programming-language-to-teach/665992/25 "2013-08-12T18:42:31Z")

</div>

MIT, at least in 2008, used Python. Also, Wesleyan university also uses Python.

---

<div class="post-metadata">

**Author:** ![Indistinguishable](https://avatars.discourse-cdn.com/v4/letter/i/90ced4/32.png) [@Indistinguishable](https://boards.straightdope.com/u/Indistinguishable)\
**Post date:** [August 12, 2013, 7:29pm UTC](https://boards.straightdope.com/t/what-programming-language-to-teach/665992/26 "2013-08-12T19:29:36Z")

</div>

> [@filmore](#):
>
> I agree with having a compiler. It will help beginners to have something looking over their work to find errors.

“static type-checking” and “having a compiler (as opposed to an interpreter)” are not synonyms, for what it’s worth. E.g., Haskell, Standard ML, etc., are statically type-checked but can be used with an interpreter.

---

<div class="post-metadata">

**Author:** ![bump](https://avatars.discourse-cdn.com/v4/letter/b/7c8e57/32.png) [@bump](https://boards.straightdope.com/u/bump)\
**Post date:** [August 12, 2013, 7:35pm UTC](https://boards.straightdope.com/t/what-programming-language-to-teach/665992/27 "2013-08-12T19:35:36Z")

</div>

> [@filmore](#):
>
> I agree with having a compiler. It will help beginners to have something looking over their work to find errors. However, I would recommend Java over Pascal. Pascal is a great teaching language, but it’s hardly used outside of school. It would be better to teach Java since it is widely used in business and will look better on a resume.
> 
> Do not have them use any sort of graphical IDE. They should use a plain editor to type in. An IDE will prompt them along too much and they won’t learn the language as deeply. They need to actually type the whole program in themselves for it to stick in their head. For example, I’m doing a project now in Python using an IDE. I cannot remember any of the imported methods and their parameters because the IDE automatically fills it in. Previously, I was writing Java in a plain editor and I could write out a complete program just from memory. So from a learning standpoint it’s probably better to write everything out and then switch to an IDE later for efficiency.

I don’t think anyone’s going to give a damn what language they took in high school.

IDEs come in different flavors, and most are configurable. I personally found the syntax checking and ability to set watches and breakpoints of IDEs indispensable for learning how to program… some 22 years ago. Typing it in and dealing with makefiles and compilers was a PITA step backward when we moved to UNIX machines a year or two later.

---

<div class="post-metadata">

**Author:** ![aceplace57](https://sea3.discourse-cdn.com/straightdope/user_avatar/boards.straightdope.com/aceplace57/32/3500_2.png) [@aceplace57](https://boards.straightdope.com/u/aceplace57)\
**Post date:** [August 12, 2013, 7:49pm UTC](https://boards.straightdope.com/t/what-programming-language-to-teach/665992/28 "2013-08-12T19:49:56Z")

</div>

A small Relational database project would be interesting. Mp3 songs for example. Create tables for Album Title, Song Title, Artist, , year, chart position etc. I did a lot of those types of projects in Dbase III. I had all my albums entered. Wrote reports and queries. For example, list all my Boston albums in my collection. Which album has _More Than a Feeling_ on it?

I taught myself a lot with projects like that and they were interesting enough to keep me motivated. I’m not sure whats popular today? MySQL seems too ambitious for a beginner. I strongly dislike Access but it’s fairly easy. DBase is still available. Whatever is current and easy to setup would be a good choice.

---

<div class="post-metadata">

**Author:** ![Archeonomist](https://avatars.discourse-cdn.com/v4/letter/a/7cd45c/32.png) [@Archeonomist](https://boards.straightdope.com/u/Archeonomist)\
**Post date:** [August 12, 2013, 10:37pm UTC](https://boards.straightdope.com/t/what-programming-language-to-teach/665992/29 "2013-08-12T22:37:43Z")

</div>

> [@Senegoid](#):
>
> [FORTRAN](http://www.ee.ryerson.ca/~elf/hack/realmen.html) is as good today as it ever was, and it was good enough for me!

We only had ones and zeroes! Most of the time we didn’t even have zeroes!

---

<div class="post-metadata">

**Author:** ![Saint\_Cad](https://sea3.discourse-cdn.com/straightdope/user_avatar/boards.straightdope.com/saint_cad/32/18907_2.png) [@Saint\_Cad](https://boards.straightdope.com/u/Saint_Cad)\
**Post date:** [August 13, 2013, 1:20am UTC](https://boards.straightdope.com/t/what-programming-language-to-teach/665992/30 "2013-08-13T01:20:35Z")

</div>

> [@ultrafilter](#):
>
> The current [AP computer science](http://apcentral.collegeboard.com/apc/public/courses/teachers_corner/4483.html) curriculum is based on Java, and so are most college-level introductory programming classes. As much as I personally dislike Java, I think you’d need a pretty good reason to teach something else.

I think this is the winner. If I work with java I can expand the current class into an AP class.

[Previous page](https://boards.straightdope.com/t/what-programming-language-to-teach/665992.md?page=1)
