The thing I appreciate the most about a device like this is that it's largely self-contained. I can program my phone in Python, sure, but I largely can't program my phone in Python on the phone. There are tools which do this, but the device isn't optimized for it, and the usage metaphor isn't really compatible - coding UI applications with a soft keyboard doesn't sound fun or useful.
On the other hand, getting a text-based REPL that I can quickly enter some commands on is great - that was why I really loved TI-BASIC on my TI-83. In college it made it easy to write a small program, roughly when I needed that program. In one extreme example, my girlfriend and I took ours to the grocery store every week, and used a BASIC app I wrote for meal planning for the week (this was pre-smartphone era).
I'd hope that this is _something_ of an answer to the concern that computing is getting too complicated and detached. Just thinking about the near-ubiquity of the TI-83 when I was in high school, giving kids the ability to code out of their pockets without having to worry about UI mechanics, publishing to an app store, or _threads_ even (AFAIK Android throws exceptions if you do certain things on the main thread), sounds pretty powerful.
The new TI calculators are still Z80 based, so the Python interpreter runs on a separate ARM CPU that communicates with the Z80 over SPI. This creates such a large bottleneck for performance that in most cases TI-BASIC is much faster than Python (and due to TI banning assembly programs, that means that kids wanting to get anything resembling decent performance still get to program in TI-BASIC just like you remember doing). As far as I can tell the Python support is a toy feature mainly included to meet curriculum requirements in certain European countries. Additionally it's a calculator so text entry is very cumbersome, personally I would much rather write code on a smartphone than one of these.
TI's newer calculators actually use the eZ80, which is pipelined and generally much faster than the similarly-clocked Z80 processors in the older devices.
I don't see the TI-series graphing calculators as a general purpose computing device. If I need more horsepower than an old Z80 for some specific use case, TI actually has me covered, in the 68k-powered TI-89 and the ARM-powered TI nSpire.
What _is_ inexcusable to me is that the calculator still costs as much as it does. I'd bet the bill of materials for a TI-84 is cheaper than that of a Raspberry Pi at this point. A few years ago I had to take apart my -83 and discovered from references online that there were revisions A through at least K of the hardware, with many cost cutting measures made along the way. And while there's something to be said for the supply chain for a 20+ year old device probably having dried up several times over, none of those cost savings seem to have been passed onto the consumer.
Technically, yes, there's competition from Casio and HP.
However, all US textbooks contain examples specifically for TI calculators, all teachers get TI calculators for free and thus they don't recommend getting anything else but a TI calc.
TI does not ban assembly programming on their calculators. In fact, the AsmPrgm directive lets you punch in machine code in hex right on the device itself. I actually used this as the basis for a CTF challenge once: https://github.com/saagarjha/ictf-carprey
they did _what?!_ I recall TI-Basic programs running at a snail's pace on my TI-8whatever, without assembly nothing of any scale can be done, even numerical analysis.
> In one extreme example, my girlfriend and I took ours to the grocery store every week, and used a BASIC app I wrote for meal planning for the week (this was pre-smartphone era).
Ironically, in the smartphone era, devices aren't even supposed to be programmable anymore (to the end user). They're simply means of consuming content (and a way to be surveilled). The idea that a computer is a programmable machine has all but disappeared from the mainstream.
Can you give examples? To be clear I don't mean programming environments that a tech-minded 10 year old can learn on if he doesn't have a PC, I mean tools to let non-technical users program their devices (hypercard probably the best example I can think of)
Both Google and Apple invest heavily in development tools for their respective platforms. These tools may not be as accessible to end users as BASIC, but that is because these tools support much more than basic math and graphics. Android also has a number of development tools that are vastly easier for end users to use (and, from my meager understanding, the same is true for modern iOS).
The reason why you don't see this advertised for mobile devices is for much the same reason that you don't see programmability advertised for modern computers: it is a feature that only appeals to a tiny subset of the market. The reason why you see programmability advertised in a calculator is due to its utility for the target market (e.g. programming is often introduced in math class).
I disagree. There was a big push at some point in the development of personal computers to make programming something that even nontechnical persons could do. Think hypercard, or even smalltalk. A way for regular users to program their computer to do something else.
That's long gone. There's no such tools (that I'm aware of) in the mainstream for smartphones or even computers. You say two things: "they support so much more than TI-basic", well yes and that's the problem. They are developer's tools, not user-programmer tools. If you want to write a quick program to help you in some task you don't have a quick BASIC-like tool to do that. And you also say "a feature that appeals only to a tiny subset of the market", again a self-fulfilling prophecy. There are no tools for non-technical users to program their devices, so only a minority of users do want to program their devices (or even realise that they can do so!)
Which is funny, because I bet Apple could re-engineer hypercard for iOS and people would absolutely love it. Would probably attract more power users even, if they gave more more granular control (I realize this is anathema to Apple at this point). There are definitely ways to let users choose how "dangerous" to make themselves.
It's very interesting that you make the distinction between a 'developer' and a 'user-programmer'. I've never thought of it that way before, but I've come to the realization that all the programs I write are not written specifically for my computer, my computer is simply one of many compile targets and platforms which they can run on. It would be incredible if I could actually program the normal operations of my computer from user space, instead of writing programs for an abstract x86_64 device which, at runtime, happens to be my computer.
I suspect the biggest hurdle in this discussion is agreeing upon what we mean by a programming language for end users, or even what qualifies as a programming language.
Some examples that I can think of: Automator, AppleScript, Swift Playgrounds are all intended to be accessible to end users. Spreadsheets typically provide programming-like constructs (without resorting to lower level scripting). There are versions of BASIC for most platforms (including Android and the Nintendo Switch). The last time I looked into it Smalltalk (via Squeak) was still being maintained for computers and it looks like there are Smalltalk implementations available for Android.
While it can legitimately be pointed out that most of these options have to be sought out, they are a subset of what is available. While I agree that people not realizing that their devices can be programmed is a hurdle, a large number of people do realize that it is actually software that controls the operation of their devices yet have very little interest in writing their own programs.
While web based single page applications (SPA) are hardly a "sweet solution ", any kid can view source and take one apart.
I believe that devices are at least as accessible today as they were in 1981. Today's systems are phenomenally complicated, but you can start making them do stuff with virtually no extra parts. The web browsers are free. Tutorials online are free. Way better resources these days.
Those are some good points that reflect my own experience. My first language was TI-BASIC, self-taught during high school study halls on the TI-83 Plus. My second language was Z80 assembly on that calculator. I think the self contained nature of the programming and running environment in a portable device, along with limited features and power, is really what got me started.
And it ended up helping me choose Computer Science as my college degree and put me on the career path I'm on now. TI has its faults, but I'll be ever thankful for their roll in my job satisfaction.
Same here. I was programming "demos" with animations in class all the time. They were running really slow, so I even learned a bit of z80 assembler, and had to learn how to solder together diode + resitor to create a SERIAL cable to transfer programs (didn't have the budget to buy an official one). Good times.
I’ve recently been thinking of learning assembly, but I’m struggling to find resources. For those of us who don’t have an old TI calculator lying around, can you recommend anything?
(Honestly, what everyone’s saying about programming with the TI calculators sounds amazing… I wasn’t alive then, and it’s a pity I never got to have that experience.)
First off I want to note TI calculators are not anything special when it comes to assembler. It was more of a limitation of the platform (in order to get games that are fast, you had to write them in assembler because TI-BASIC was too slow).
Note also that assembly code is different for each CPU architecture. The TI calculator I had contained a z80 chip, so it was z80 assembler (Motorola assembler?). The x86 assembly language is a more complicated, but probably more useful to learn (can look at any program on your computer). Or maybe you could learn ARM assembly (e.g. this would allow you to write simple programs that blink lights on a Raspberri PI).
> [...] can you recommend anything?
I looked through my bookmarks and found some links you might want to check out:
2. The assembler project part of nand2tetris computing-from-first-principles course: https://www.nand2tetris.org/project04
I haven't gone thought this course, but I've heard many things about it.
> First off I want to note TI calculators are not anything special when it comes to assembler. It was more of a limitation of the platform (in order to get games that are fast, you had to write them in assembler because TI-BASIC was too slow).
> Note also that assembly code is different for each CPU architecture. The TI calculator I had contained a z80 chip, so it was z80 assembler (Motorola assembler?). The x86 assembly language is a more complicated, but probably more useful to learn (can look at any program on your computer). Or maybe you could learn ARM assembly (e.g. this would allow you to write simple programs that blink lights on a Raspberri PI).
Sure, I understand all this already. I suspect that x86 assembly might be most useful for me, but I also have access to an Arduino, so I might try writing assembly for that as well.
> 2. The assembler project part of nand2tetris computing-from-first-principles course: https://www.nand2tetris.org/project04 I haven't gone thought this course, but I've heard many things about it.
As it happens, I’ve already gone through nand2tetris. I can’t say it helped me that much: sure, it’s good for getting a conceptual understanding of how assembly works generally, but it doesn’t give me any idea about e.g. how to write a program for x86 or ARM.
Of course I understand TI calculators don’t run x86 assembly! That’s not what I want to do — I just want to get a better understanding of assembly, preferably x86 so I can run it on my own Windows computer. (I don’t even have a TI calculator.)
Ha, just making sure :P I do have one suggestion, though: try WSL, because it will give you access to Linux, where you can actually write programs entirely in assembly because the system call API is stable. The ABI matches with macOS's too, which is another plus.
Learn Assembly in 28 Days[0] is what I remember going through when I first started messing with assembly on TI calculators. Another great resource is Cemetech[1], a forum/community dedicated to (mostly TI) graphing calculators and hacking/programming them.
Ahh maybe I should read the entire comment before replying :P. Sorry. I only saw the wanting to learn assembly and asking for resources. Honestly though I think this could still be a great way to get into assembly. There's a myriad of emulators out there for TI calculators, so you could still use the links I posted.
> Honestly though I think this could still be a great way to get into assembly. There's a myriad of emulators out there for TI calculators, so you could still use the links I posted.
Good points — I’ll save those articles for future reference. Thanks for the recommendations!
Wouldn't it be even harder to code on this using its limited keyboard? On a phone the soft keyboard may take up half the screen, but that's still at the same size or larger that this calculator, with a higher resolution. That's not to say programming on a phone is a pleasant experience, just that it seems at least a little easier, with much higher cpu/ram/storage resources.
Yes and no - something that TI-BASIC on the TI-83 series has going for it is that it's tokenized, so directives like `While` or `ClrHome` are actually options, rather than full words. So I don't have to type "While" on the TI-83's cumbersome keyboard, but rather just hit Prgm+5.
I'm making a big assumption that the Python implementation is similar. I don't know this, but where this is a big feature of TI-BASIC, I'd hope it carried forward.
Typing on a soft keyboard sucks. Typing computer code, that has to be absolutely typo free, is totally unworkable. Even a chiclet keyboard like what was featured on the lowest-build-quality home computers from the 1970s and 1980s (e.g. early ZX Spectrum) is miles better than trying to input code on a phone touch screen.
(In fact a bare-membrane keyboard, that was only ever used on extremely-low-specced home computers where only trivial programs would ever be written, arguably provides a better feel than what you'd get from a touchscreen.)
I agree a physical keyboard is better for preventing typos, although one huge advantage of an on-screen keyboard is it can change based on context.
Especially considering the topic of a Python IDE, that seems like an application where predictive text and/or contextual menus could be a huge benefit for many users.
Python is a thoroughly dynamic language, so the scope for "predictive" coding just isn't there. The best language for that is actually something as strict as Agda, where you can build out your code step-by-step by picking your operands from a well-defined list of in-scope bindings, with powerful type constraints guiding your choice at all times. Python is the polar opposite of that, even with the newfangled 'gradual' typing systems that are now being suggested.
I agree even bad keyboards are often better than soft ones, but this calculator isn't qwerty which for my preferences would be too large a disadvantage even over a phone's soft keyboard.
Now, if you could attach a USB keyboard to the calculator, that would be perfect.
On the other hand, getting a text-based REPL that I can quickly enter some commands on is great - that was why I really loved TI-BASIC on my TI-83. In college it made it easy to write a small program, roughly when I needed that program. In one extreme example, my girlfriend and I took ours to the grocery store every week, and used a BASIC app I wrote for meal planning for the week (this was pre-smartphone era).
I'd hope that this is _something_ of an answer to the concern that computing is getting too complicated and detached. Just thinking about the near-ubiquity of the TI-83 when I was in high school, giving kids the ability to code out of their pockets without having to worry about UI mechanics, publishing to an app store, or _threads_ even (AFAIK Android throws exceptions if you do certain things on the main thread), sounds pretty powerful.