At times I’ve thought the same myself, but I’ve read accounts from at least two different CS professors who said that student outcomes improved dramatically when switching from statically typed languages to Python as a first language. I suspect Python works well because it makes it easy to introduce just a few concepts at a time.
I started with Python and I didn’t have any trouble learning statically typed languages.
Static typing isn’t really the issue. C and Java are constrained and fussy and demand a level of forethought and attention to detail that is absent from something like Perl or Python. This is mostly because they’re compiled, although static typing also plays a role. The point is they’re unforgiving, and teach you a level of discipline and rigour that you otherwise may not need to learn.
Personally, I hate working in C or Java, and avoid them precisely because prototyping all my functions annoys me and I don’t care whether my objects are public or private. I’m still glad I learned them when I did, in a training environment where I was obliged to do so. If I hadn’t, and I’d started on Python, I would have had absolutely no motive to learn them unless someone made me.
I see what you are saying. As a newbie I found it hard to stick to C or Java for long enough to get past Hello World. If you’re relying on internal motivations, you aren’t so likely to stick it out long enough to get the fundamentals from these. The problem is you need rewards within a certain time limit for the brain to become addicted. This does happen, but only after a certain amount of coding has been done.
On the other hand something like Python (or Basic for that matter) is easy, but your inner lazy person is going to keep on thinking certain things are magic because they are automated and work without you thinking about them.
With Forth I like to think there’s a bit of the best of both worlds. IME, you can get addicted to Forth without too much effort, but it is very hard to get anything serious done in it until you’ve been doing it for several years. Essentially you end up building your own language from first principles.
For example pretty much every language has a stack for passing values, but most hide this from the user. Likewise every language represents memory addresses as numbers, but this also tends to be hidden from the user. In Forth if you want to hide complexity you pretty much have to do the hiding of information yourself—concatenate functions and primitives to generate complexity, factor them into smaller functions to hide it.
Factoring is necessary for every language of course, but most of them don’t punish you as hard for not factoring, and most ship with tons of complexity already pre-factored and ready for you to magically wave your hands at. I’m not saying that’s bad, just that it is (or seems to me) a trade-off people may not be aware they are making.
Fair enough. I guess I could say the same thing, I’m glad I was made to learn C for school. C is the ideal language for a data structures class in my opinion, since you can implement all the data structures yourself and understand what’s really going on under the hood.
At times I’ve thought the same myself, but I’ve read accounts from at least two different CS professors who said that student outcomes improved dramatically when switching from statically typed languages to Python as a first language. I suspect Python works well because it makes it easy to introduce just a few concepts at a time.
I started with Python and I didn’t have any trouble learning statically typed languages.
Static typing isn’t really the issue. C and Java are constrained and fussy and demand a level of forethought and attention to detail that is absent from something like Perl or Python. This is mostly because they’re compiled, although static typing also plays a role. The point is they’re unforgiving, and teach you a level of discipline and rigour that you otherwise may not need to learn.
Personally, I hate working in C or Java, and avoid them precisely because prototyping all my functions annoys me and I don’t care whether my objects are public or private. I’m still glad I learned them when I did, in a training environment where I was obliged to do so. If I hadn’t, and I’d started on Python, I would have had absolutely no motive to learn them unless someone made me.
I see what you are saying. As a newbie I found it hard to stick to C or Java for long enough to get past Hello World. If you’re relying on internal motivations, you aren’t so likely to stick it out long enough to get the fundamentals from these. The problem is you need rewards within a certain time limit for the brain to become addicted. This does happen, but only after a certain amount of coding has been done.
On the other hand something like Python (or Basic for that matter) is easy, but your inner lazy person is going to keep on thinking certain things are magic because they are automated and work without you thinking about them.
With Forth I like to think there’s a bit of the best of both worlds. IME, you can get addicted to Forth without too much effort, but it is very hard to get anything serious done in it until you’ve been doing it for several years. Essentially you end up building your own language from first principles.
For example pretty much every language has a stack for passing values, but most hide this from the user. Likewise every language represents memory addresses as numbers, but this also tends to be hidden from the user. In Forth if you want to hide complexity you pretty much have to do the hiding of information yourself—concatenate functions and primitives to generate complexity, factor them into smaller functions to hide it.
Factoring is necessary for every language of course, but most of them don’t punish you as hard for not factoring, and most ship with tons of complexity already pre-factored and ready for you to magically wave your hands at. I’m not saying that’s bad, just that it is (or seems to me) a trade-off people may not be aware they are making.
Fair enough. I guess I could say the same thing, I’m glad I was made to learn C for school. C is the ideal language for a data structures class in my opinion, since you can implement all the data structures yourself and understand what’s really going on under the hood.