On 4/5/2020 8:46 PM, ben via cctalk wrote: > On 4/5/2020 6:44 PM, Toby Thain via cctalk wrote: > >>> Q: If Bill Gates hadn't written a BASIC interpreter, where would we >>> be now? >>> >>> >> >> Sounds like you've never heard of Lisp. >> > > All the old programmers speak with a LISP. > I view computer science ... teaching is what 'trending now' since > schools promote grinding out students, not teaching real world problems. > As for Gates, the right place at the right time, and having access to a > main frame.
On 4/5/2020 8:46 PM, ben via cctalk wrote:> On 4/5/2020 6:44 PM, Toby Thain via cctalk wrote: > >>> Q: If Bill Gates hadn't written a BASIC interpreter, where would we >>> be now? >>> >>> >> >> Sounds like you've never heard of Lisp. >> > > All the old programmers speak with a LISP. > I view computer science ... teaching is what 'trending now' since > schools promote grinding out students, not teaching real world problems. > As for Gates, the right place at the right time, and having access to a > main frame. Well, I'd have called the PDP-10 a minicomputer nonetheless, but that's just me. ;) Plus, he was essentially stealing campus resources for personal aggrandizement. Its one thing to mess around learning stuff outside of a course setting. Quite another to take that time, without even asking, in order to turn a profit. Not a fan. As for Lots of Insipid Stupid Parentheses - I can't see that as a beginning language. For anyone. Of the many many (well over a hundred) programmers I worked with outside of a university setting, less than a handful had even *heard* of it. <RANT> As for teaching, there are multiple needs. One size doesn't fit all institutions. One is plain old programming. That does get taught in computer science at universities, but it really ought to be just a means to an end: learning about how programs get written, how to compile them, data structures, semaphores, and so on. During my ECE & CS studies, aside from my student job, I got exposed to: BASIC (1 day) and FORTRAN (both while still in HS), ALGOL (2 dialects), at least 4 different assemblers/machine languages, SNOBOL, LISP, PLUS (Programming Language for UNIVAC Systems - their PL/S), AMINOL (You won't find anything about that anywhere any more), PLUM (Maryland's PL/I subset). During my student jobs I picked up 1410 Autocoder, COBOL and a tiny bit of System/370 Assembler. I learned about data structures up the wazoo: linked lists, stacks, activation records for block structure languages (3 times), and heaven only knows what else, with exposure in many courses. Also multitasking/multiprocessing and all that went with that in multiple courses. And performance measurement and management. [FWIW, this was a time before PASCAL and databases] I got exposed to soooo much stuff that picking up anything else later was essentially trivial. So, when I got to a 360/65-MP and had to do Assember and COBOL no biggy. When we had an Amdahl 470 that was fast enough that poorly designed software had threading issues (as in an idiot developer of a commercial product that expected to use MVS task dispatching priority to avoid deadlocks), that was easy too. As was teaching my co-workers how to use a stack structure to implement a recursive algorithm without having to do recursive subroutine calls. I was able to explain to the other system programmers what happened when utilization of a resource gets to me more than about 80% (think disk queue) and how fast things go to Hades in a handbasket. Queing theory came in handier than heck when I was able to model the effect of response time store and retrieve image documents and demonstrate to our management and our vendor that we would have lines around the block - the project got delayed a year as a result. That is the kind of thing a Computer Science program ought to be doing. Teaching advanced techniques and concepts that can be used in situations folks haven't even discovered that show up 30 years hence. These are things that MOST ordinary programmers are not likely to learn or even need as long as they have access to that kind of expertise. Some call it "ivory tower", but I hope my explanation has shown that there is MUCH more to it than that. (Of course, there are some who learn such stuff and can never apply it, just as there are engineers that can't apply knowledge in that domain, either. That isn't the fault of the university. That is the fault of the student or whomever pushed the student into a situation they were either not a good fit for, or were not sufficiently prepared for.) BUT, outside of a 4 year degree environment, ah, that is an entirely different story. THAT is where we should be teaching "real world problems". Stuff that folks can use immediately to land, keep and succeed at a job. How to do the things that developers encounter each and every day. Current technology and practices and languages that folks are actually using every day. Think about it as an analog between carpentry and structural engineering. When a carpenter really needs engineering help, they go to an engineer (for example, as the contractor did to cantilever the deck off the back of my house), but that doesn't mean that every carpenter should have all the complex skills an engineer has, nor does it mean that an engineer needs all of the skills a carpenter has - though of course the engineer had better know practical and doable from crazy. ;) Trouble arises when you try to teach EITHER ONE broadly/completely in the other environment. The (MIX) assembler course I took focused WAY too much on "niceties" and trying to squeeze out every last bit of performance, instead of teaching conceptually how to wring bits from a turnip. It was a horrible waste of time (and pretty much out of date before it even started.) There can be exceptions, of course. There is a place, for example, for teaching non CS majors in a university setting Python (not my favorite) because they may need it in their studies and research these days. Sorta like teaching Calculus to broad numbers of student who are not math majors. I tried to teach my Linux OS students at a tech school a little bit about how virtual memory worked so that when faced with real world performance issues they might better cope rather than just rote numbers - with mixed results at best, but hopefully some of it stuck. Same thing with multi-processing and what could go wrong with programs and systems in that Linux OS class. But I would never ever dream of teaching them LISP -- wrong place for that. </RANT> JRJ
