I have super fond memories of high school math classes. That calculator was my first introduction to programming. I’d take the time to write programs for each unit we covered so that I could just input the variables and quickly solve. I had to understand the concept before I could program it so I didn’t really think it was cheating. I did get nervous when SATs came up because I knew my calcs memory would be cleared. I remember my solution was to painstakingly recreate the memory cleared screen and pulled it up before the proctor came around in hopes that they’d assume they already cleared mine.
My programming didn’t improve much after high school but I’m still kind of proud of my not-totally-cheating cheating.
Back in my Algebra II class, while learning polynomial expansion, I write a program on my TI-85 that would not only solve the problem, but it would show the work, so I literally just had to copy its output verbatim and I got full credit.
I showed it to my teacher and asked it if it would be considered cheating to use it on the test, and she said that if I knew the material so well that I could write a program that didn't just solve it, but showed the work, then clearly I knew the material so well that I'd ace the test even without the program, so I could go ahead and use it, just as long as I didn't share the program with my friends.
I didn't have any friends (This was 1998 where being such a nerd was still looked down on), so it wasn't an issue.
My Trig teacher, which was the class where I got my cherished TI-83+, had the exact same opinion of my little TI-Basic programs which worked the same way as yours.
I got an A in that class both semesters, which was better than the B I often got in Math (and a C- once in AlgII) because I hated doing homework. But starting on the program as soon as I grasped the concept and usually blasting through the homework with it by the end of the period meant an A was easily in my grasp.
That teacher was the best damn math teacher ever. He would work hard to help every last student get it, he'd gladly spend his whole lunch helping a kid if they needed it.
PS. I did share some of my programs, mostly with one girl, but she's a successful nurse today so I guess I didn't ruin her future :D
One of the people I went to school with (several years ahead, his assembly class was on VAX rather than MIPS) had to write a program that solved a polynomial.
As he was going through the tome that represented the CISC instruction set of a VAX system (long before easy search engines), he found POLY ( https://www.ece.lsu.edu/ee4720/doc/vax.pdf page 9-118).
So, his program, instead of doing all the calculations was setting up a few registers, a large comment block that explained it, a call to POLY, and reading out the registers.
He claimed to have gotten full credit and within a handful of semesters later the course was switched from CISC architectures to RISC.
The instruction you refer to is for evaluating polynomials, not solving them, so I’m a bit confused by your claims. It is pretty common to evaluate polynomials as part of solving them (if you’re aiming for numeric solutions), but solving tends to also require:
- some kind of root finding (note that methods like Newton–Raphson don’t work when zeros have multiplicity)
- dividing polynomials by (X - a) after finding one root to find the next root
The POLY instruction was the CISCiest of the VAX instructions. One machine instruction could evaluate a polynomial. I think it could even handle the situation where fetching one of the coefficients caused a page fault. If you knew the VAX instruction set well, writing code in VAX assembly was almost as easy as using a higher level language.
Was the instruction really much more complex than eg some byte-string comparison instruction? For string comparison you’re doing a simpler operation at each step, and the accumulation is much simpler, but maybe you have short-circuiting too. POLY corresponds to the following C, I think:
float poly(int d, float x, float *c) {
c+=d;
float y = *c;
while(d--)
y = *c-- + y * x;
return y;
}
I also don’t see why you consider this to be the CISCiest instruction from an architecture that includes a substring-search instruction, a vaguely printf-like instruction with its own mini instruction set for the pattern strings it takes, and an instruction to do polynomial division in the ring of polynomials over F_2 (ok this is just CRC)
The adult educator figures in 1958's _Danny Dunn and the Homework Machine_ had a pretty similar conclusion regarding automation as a demonstration of domain knowledge. The interesting thing is that this view is pretty rare when it comes to business domains.
oh wow, haven't heard anyone mention Danny Dunn in many years. My local library had the whole series and I think I read most of them, way back in the early 90s. I still remember Danny Dunn Invisible Boy and some of the others.
>> if I knew the material so well that I could write a program that didn't just solve it, but showed the work, then clearly I knew the material so well that I'd ace the test even without the program
Lol. So naïve. Half the point of programing and testing the software is so that you can then forget how to do the task yourself. I'd say that 90+% of the task-specific code I've written was for that I no longer remember how to do myself. Once upon a time I wrote a thing to calculate some of the specifics re water hammer effects in pipes. I still have the code but, for the life of me, I have totally forgotten the actual math.
I started using this username in...I think 2002? Well, actually, I started using just "Sohcahtoa" then. Then I tried signing up for some service a few years later and "Sohcahtoa" was already taken, so decided to just add my birth year to it, since that was a pretty common thing to do at the time, and now I'm Sohcahtoa82 everywhere except on EFnet, where nicks are limited to 9 letters. Still Sohcahtoa there.
In high school, after getting my TI-83+, I also started to learn to program things.
For tests, my teachers would force me to clear my memory (you're not fooling catholic nuns with a fake screen, she would take my calculator and clear it herself).
But I got good at programming. I was so fast that I would just spend the first 30 minutes of a 1-hour test re-writing the programs and then spend 5 minutes completing the test and be excused to go to the computer lab for the remainder.
Eventually I got so annoyed of typing things out on the TI-83+ keyboard, and as I progressed the programs got more complex, that I bought a TI-92 with a qwerty keyboard and would be able to write solvers the test in 5-10 minutes and fully solve a test in 5-10 minutes. I mostly did it so I could have more time in the computer lab.
I still have those calculators too, I should see if they still work some day :)
I absolutely did this as well, though for the most part you could hardly call them "solvers", just tools to help me more effectively check a stack of educated guesses. IIRC a lot of the problems could be bounded well enough to brute force on my TI-83+.
I did the same thing, implementing formulas we learned as interactive programs in TI-BASIC. I don't think I even tried to hide them or use them on tests or anything, but when I told my teacher at the time (2003-ish?) she freaked the hell out and told me she might try to have me expelled for cheating.
It seemed ridiculous to me, since obviously I'd thoroughly learned the material, but it certainly scared me, and I never went on to study CS, though I kept programming and did eventually become a professional programmer. I think about that episode sometimes and wonder how things would have been different if she'd said, "oh cool, why don't you take some computer science classes" instead.
It's difficult to teach ingenuity for a variety of reasons.
To give you an idea of what I mean: I used to maintain the content filter for a school. Students being students, they found all sorts of ways to get around it. I never took much issue with the students who found ways around it. They were exploring and learning. The issue was with the other students. The ones who just followed someone's instructions, never exploring and never learning.
I would imagine that calculators are much the same. Programming them to answer questions is a great way to reinforce concepts. Copying the program off of someone else and finding ways to hide thee program is just plain cheating (of the system and themselves).
Same! Also recreated the clear memory screen to protect all of that hard work.
Initially I was giving the programs to friends. Math teacher caught me and I thought I was getting in trouble for it. Nope! She said 'Never give away your work like that. Make them pay for it.'
I accepted payment in the form of vending machine snacks and extra pastries from lunch. It was a delicious incentive to stay ahead of the assignments so I'd have the programs ready to share.
The difference is they just wanted the end result, and didn't care about the source code or how the implementation worked. Just a means to an end. People pay for that willingly.
There was also "group", I think it was called? You could select multiple things, including programs, to copy into archive memory - that way the original would still be there so they could see they deleted something, then you ungroup it later to restore it.
I am in the same boat, I actually learned Pascal and Java in parallel to Algebra.
Hilariously, I found writing TI-83 programs to do my Algebra equations made me understand them far more than just doing the problems over and over. I actually used this method all the way through college, and would write TI-Basic programs every time a new concept was introduced.
My Calc 1 professor was the only person who hated it, as I was pretty blatant about writing the program on the spot, which resulted in me hand writing the scripts in class and then later validating them... Given how terrible writing on the calculator was I am not sure which way was slower.
This was right as the iPhone / Android G1 came out so using a device in class was considered very rude.
I think this is essentially the same reasoning that Sussman et al give for using a computer to explain classical mechanics in their famous textbook (see [0]). By insisting that the student compute with the concepts, they assert that they will get a deeper understanding than if they just read a bunch of formulas. Hard to argue with that, to my mind, although the choice of Scheme as the language is a bit of a mind bender for newbies.
> I had to understand the concept before I could program it so I didn’t really think it was cheating.
I showed mine to my Calculus teacher and she let me use it because she had this same viewpoint, on the condition I never shared it with the other students.
> I remember my solution was to painstakingly recreate the memory cleared screen and pulled it up before the proctor came around in hopes that they’d assume they already cleared mine.
My intro to programing was a TI-83, while bored in algebra 2 freshman year... I had no almost help so I was just figuring it out. Ended up making a 90% implementation of 2048, and about 1/2 of chess. While only knowing if, goto, matrix indexing, and drawling indvidual pixels. I learned Java later so I could mod Minecraft, and now can't stand the limitations of TI Basic.
TI basic was pretty frustrating. The best thing I made was a program to calculate default WEP keys for Verizon routers based on the SSID. Converting bases was only possible by recreating all alphabet strings and then indexing those and doing all the modulo math as well (at least it had that!). I hadn't gotten into any real languages at that point but was messing around with qbasic on a Win98 laptop at home so I was just starting to get comfortable with programming. While frustrating sometimes, the challenge of doing complex things with crude tools is pretty refreshing compared to nowadays where you can build an artificial intelligence in like 3 lines of code. For some of my personal projects, I make a point of avoiding any imports outside of built-in libraries if I can implement it good enough in less than an hour, kind of like "showing my work".
I remember there being a way where you could stash in memory even if the memory was cleared (my calc teacher used to clear memory before exams but I was able to retain some functions)
i learned to program on computers, spent my effort installing games on the ti-84s instead of cheating on high school math (lmao), and i did not need to get scared of the sat proctor because he might clear the memory on my calculator
My programming didn’t improve much after high school but I’m still kind of proud of my not-totally-cheating cheating.