I think the important thing is to focus on the end objective - so not programming just for the sake of programming, but programming as a means to do something else.
Start with an interpreted language that doesn't require convoluted compilation or build-steps. Or at the very least something with a "play button" that allows one-click runs. Anything else just distracts and confuses from the actual "programming" part.
I'll echo others and say building games is a good on-ramp for kids. I also recall enjoying playing around in Visual Basic as I could make a "real application" and it was satisfying to see my work as a "real" program I could see and use, and try to work out how to imitate other features I was seeing in apps I used every day.
As yours is 18 something like scratch is probably too "baby-ish" so perhaps python will feel like more of a grown up option for them with the option to do some fun stuff with game/graphic programming. Visual Basic .net (or even C#) will allow for building GUI apps nicely.
If they enjoy those they'll be able to broaden their horizons and learn more. Don't sweat the theory aspects - they don't need to know about runtime complexity and monads etc just to get started - if they get the bug for coding, they'll come across this stuff on their own eventually (e.g. when they end up creating a naive O(n^n) implementation, they'll end up spending some time trying to optimise it even if they don't realise they are doing that - be there to help guide and offer pointers to help open their eyes to it all)
Start with an interpreted language that doesn't require convoluted compilation or build-steps. Or at the very least something with a "play button" that allows one-click runs. Anything else just distracts and confuses from the actual "programming" part.
I'll echo others and say building games is a good on-ramp for kids. I also recall enjoying playing around in Visual Basic as I could make a "real application" and it was satisfying to see my work as a "real" program I could see and use, and try to work out how to imitate other features I was seeing in apps I used every day.
As yours is 18 something like scratch is probably too "baby-ish" so perhaps python will feel like more of a grown up option for them with the option to do some fun stuff with game/graphic programming. Visual Basic .net (or even C#) will allow for building GUI apps nicely.
If they enjoy those they'll be able to broaden their horizons and learn more. Don't sweat the theory aspects - they don't need to know about runtime complexity and monads etc just to get started - if they get the bug for coding, they'll come across this stuff on their own eventually (e.g. when they end up creating a naive O(n^n) implementation, they'll end up spending some time trying to optimise it even if they don't realise they are doing that - be there to help guide and offer pointers to help open their eyes to it all)
Good luck