DEV Community

Discussion on: Which concept took you the longest to grasp?

Collapse
 
mellen profile image
Matt Ellen

Back in 1999 I was trying to learn c++, but I got stuck on template classes. A few years later I learnt about generics in c# and suddenly I understood what template classes were :D

I'm still stuck on monads, so I guess that will be the biggest gap when I finally get back to it.

Collapse
 
ducaale profile image
Mohamed Dahir

I can't say I fully understand what a monad is but after banging my head days against parser combinators, I am a bit more confident about it.

Collapse
 
madza profile image
Madza • Edited

Would you say it would be a great first language?
I'm not considering the learning curve, but the way the lang is designed to learn programming basics. Most say C is super solid. Although, I've heard C++ is good, too.

Collapse
 
mellen profile image
Matt Ellen

My first language was BASIC, which I think was a good place to start. It's more important to have fast feedback when you're first starting out (IMO) to get you hooked. So I would recommend an interpreted language over a compiled one, just because you can get the immediacy in a read-evaluate-print loop (REPL) where you type something and it causes something to happen.

Also, the "batteries included" nature of most popular interpreted languages means that you're going to find it easier to do things off the bat, not trying to figure out how and what to include.

I can't say I'm a C++ dev, because it's been well over a decade since I last wrote any, so maybe the STL and whatever exists now has a batteries included approach, so perhaps that's not a concern.

But for the basic concepts I'd start with a language that outputs comprehensible errors and doesn't make you wait to find out when you make a mistake.

C and C++ are good second languages.

Thread Thread
 
madza profile image
Madza

Fair enough πŸ˜‰
Some solid points there πŸ‘

Collapse
 
peerreynders profile image
peerreynders • Edited

but the way the lang is designed to learn programming basics.

"Programming Languages" are designed to represent programs that can get "stuff done" - not to teach programming basics - unless of course the language is expressly designed to "teach programming basics".

How to Design Programs, Second Edition

HtDP teaching languages

Pyret

PAPL - Programming and Programming Languages

The Structure and Interpretation of the Computer Science Curriculum (2004):

In general, we believe that the HTDP project has validated the usefulness of functional programming and functional programming languages in the first programming course. We have found that teaching Scheme for Scheme’s sake (or Haskell for Haskell’s sake) won’t work. Combining SICP with a GUI-based development environment for Scheme won’t work better than plain SICP. The two keys to our success were to tame Scheme into teaching languages that beginners can handle and to distill well-known functional principles of programming into generally applicable design recipes. Then we could show our colleagues that a combination of functional programming as a preparation for a course on object-oriented programming is an effective and indeed superior alternative to a year on just C++, Java, or a combination.

We are hoping that other functional communities can replicate our success in different contexts. We suggest, however, that using plain Erlang, Haskell, or ML and that teaching programming in these languages implicitly will not do. We all need to understand the role of functional programming in our curricula and the needs of our students. (p.13)

quote

β€œIt’s mind boggling that your HtDP students are better C++ problem solvers than people who went through the C++ course already”.

Collapse
 
dwd profile image
Dave Cridland

Python.

The advantage of Python is that it's quite a "broad church" language, supporting many different approaches to solving a problem - but it's also very consistent.

There are some things it won't teach you, most notably generics/templates (which are different, but similar, capabilities), but generally most concepts in other imperative languages exist in Python (and there are a few functional techniques about as well).

The lack of special-casing and "gotchas" makes it very simple to work with and explore, though, and things like Jupyter (a sort of web-based super-REPL) help things further.

Moving on from there, C++ is a great language to understand because it has both very low level elements to it and high level constructs built on top - allowing you do dig very deeply into how things like coroutines or containers actually work if you need to.

Thread Thread
 
madza profile image
Madza

I have no experience in using it, but as far as I've seen some code, I've liked the syntax of it πŸ˜‰ Very intuitive and easy to read for those starting out πŸ‘

Thread Thread
 
dwd profile image
Dave Cridland

There used to be quite a number of languages designed for teaching - BASIC was one (designed by, amongst others, a nun), and Pascal was another. Universities and schools seem to have universally ditched them all in favour of Python.

Thread Thread
 
keogami profile image
keogami

Sauce for the nun thing?

Thread Thread
 
dwd profile image
Dave Cridland

Sister Mary Kenneth Keller

Sister Mary image

Took vows in 1940, and while doing a PhD - the first woman to get one in Comp Sci - ended up in Dartmouth College, implementing the first version of BASIC.

Thread Thread
 
ballpointcarrot profile image
Christopher Kruse

Wow, I didn't expect to find a Sr. Keller reference on DEV!

I went to Clarke, where she founded the Computer Science department (and there's a building named after here there now).

Thread Thread
 
keogami profile image
keogami

Lol a nerdy nun, thanks for thr fact!