Code to joy: learning to code in middle age
1843magazine.com
1843magazine.com
He said he was interviewing one of the people who walked on the moon a while back. The guy stepped out of the interview to take a phone call, and when he came back he said he just learned that one of the other men who had walked on the moon had just died. Andrew reflected on this, and recognized that these men are dying and soon there will be no one left alive who has walked on the moon.
He decided to track down each of the people who were still living who had walked on the moon, and hear their stories firsthand. The premise of the conversations was, "What do you do after you've walked on the moon?" He wrote a book about it, called Moondust. I haven't read it yet, but it's in my Amazon cart at the moment.
When a friend asked me to teach him some python the most stressful part for him was setting up the editor, understanding the command line and how an API worked as well. Like the author he grasped fundamental python pretty quickly.
I think there's still no really good solution to make the whole process appealing. You can have people write puzzle solutions which circumvents the API and documentation issue but doesn't produce a real project, you can give them an IDE which avoids the command line but doesn't teach much and often is too complicated for a simple script, and so on but there's always some nasty issue for beginners in the process.
It is object pascal (with the attendant quirks) but it seems to be code-ish enough that people can transfer on to more modern languages without too much fuss.
The book’s mission is to be what Assembly Language Step By Step is to assembly language: An absolute beginner’s tutorial on programming in Pascal. This includes people who have not yet learned what programming is and have never written a line of code in their lives.
I will give Lazarus a go later on if I get into pascal again.
It certainly is. Back in the day, software developers were called "authors."
>BookOmatic9000
That's ... just ... horrible. Yea, naming things is tough.
Anyway, good luck. I've been doing it since 3rd grade in the 80s, and it's still interesting. Except Javascript; that's the opposite of interesting.
WebAssembly doesn't yet have garbage collection so Rust is currently the best choice targeting it, IMO.
Static typing is massively overvalued. It has non-zero value, but it's a tradeoff with other things, and the amount of importance that people tend to place on it is absolutely out of proportion with the actual value it provides.
EDIT: This extends beyond just 'static typing', as well. The design of programming languages is an exercise in tradeoffs, and people rarely take the time to understand the tradeoffs introduced by their pet language feature, instead presenting it as some inherently ideal thing where any language that doesn't have it must therefore be bad.
Hungarian notation 'solves' a problem here that doesn't exist in the first place.
In a strongly typed language, if I want to rename a parameter that is used in 20 places, I can hit "Rename," rename it, and it will rename all 20 instances with perfect precision, and that's it. With weakly typed languages, you have to search and replace, which is much more prone to error. This is much more of an issue for JS applications that are much larger than just doing some stuff on a page.
I agree, it's a tradeoff. Many languages these days can do both. The best is strongly typed until you are dealing with JSON or something of that nature.
You don't need static typing to do codebase-wide renaming, it just makes it a little easier to build the refactoring tools, but since that is a one-time cost it's not really a particularly important factor in the language design. Other language design decisions have much more influence on this development cost, too, such as reassignability and scoping rules.
"Strong typing" is also something totally different from "static typing" - I'm not sure why you're bringing it up here. The two are not interchangeable terms.
EDIT: Actually, doesn't Webstorm already do such mass-renaming for JS?
EDIT 2: I also object to the use of the word 'refactoring' to refer exclusively to renaming variables. Proper refactoring involves much more work, most of which isn't automatable regardless of the language you're using.
But you do. WebStorm isn’t magical. It can’t understand your untyped code like it can understand typed code.
The more I’m reading your comments on this thread the more I’m not sure you’ve ever used a static typed language with a good IDE. If I am correct, I think it makes more sense for you to try Java/IntelliJ and then weigh in on this subject. You may have a very different opinion.
I still like JS, but I do now appreciate some of the criticisms more.
But this isn't without a cost; it's much more expensive to build abstractions in Rust than in JS (although still cheaper than in most languages), for example, and the strictness does create problems with interoperability ergonomics in some places, especially when working with multiple third-party dependencies.
This goes back to my earlier remark about tradeoffs; strictness is not without its costs. The tradeoffs may be worth it to you, or not, or only for some projects - but it means that it makes no sense to paint things like dynamic typing as inherently bad; it just makes different tradeoffs.
I do share your sentiment of missing such 'upfront error-reporting'; that's precisely why I'm working on better tooling for this, of which the variable-renaming is just one aspect :)
Yeah I mean of course it’s not untyped. What runtime doesn’t have types? C?
> Static typing is massively overvalued.
Have you every worked extensively with Java/IntelliJ or some other combo like C#/VS? It’s night and day compared to wading through the muck of an untyped codebase.
I can accept we might have different tastes, but whenever people say they advantage of static typing isn’t that great I assume they are either exceptionally gifted and don’t benefit much from a static language/compiler or are ignorant on the subject and don’t know better.
Are you serious? If you job involves using a scripting language in the browser, then at least have to decency to look into TypeScript. I converted to TypeScript after having worked on a code base in JavaScript and realized that just adapting one module to TypeScript, the conversion revealed stuff I had no idea it could have possibly slept thru jslint. I am talking major stuff like string to number and non-existent method calls. Ugh.
New leadership, er, took over in late 2005 and re-oriented it as a DSL for Grails, and later Gradle. Grails has since died, with virtually no-one upgrading to version 3, or starting new projects in it. The Grails 2 plugin scene is dead. Many sites are converting their Gradle build scripts to Basel, so it's also starting a slow decline.
Around 2012, Groovy was repurposed again with static typing to compete with Java and Scala on Android. But it never succeeded, and the leadership was retrenched 3 yrs ago from VMWare and couldn't find anyone else to financially support them.
Groovy remains OK for scripting Java classes, but it's fast becoming irrelevant now that Java itself has lambdas and type inference.
I loved Python for years, going back to when I discovered it in the Red Hat Linux installer in 1999. But it seems to me that Python has been sliding into irrelevance for a while. Even now, 10 years after the introduction of the ihone App Store, I don't know of any mature way to develop a mobile app with a native UI in Python. The same goes for using Python in the browser. So for the things that most people actually want to do with code, Python is relegated to the server (assuming there is one), and they have to learn something else anyway. So, might as well start with the something else that will get you the farthest.
Very good article though.
After use of the turtle module is comfortable python offers no end to possibilities in other areas.
That said, "best" is surprisingly subjective when it comes to programming, so feel free to go a different route if that feels more appropriate.