hi Hugh, I bought your course on C pointers few years ago. I not only refreshed my memory bot got even better grasp than ever. Its so cool I stumbled upon your video, cheers!
I was working as a systems programmer for ICL in the 70s. My boss was telling me about Xerox Parc - it seemed space-age to me, compared to the ICL 7502 green screen terminals and the ghastly screenedit editor. Thank you so much for doing this - I used to enjoy your articles in the mags. Best wishes.
Ah, you have a long memory (my magazine articles, I mean!) - yes, the Xerox PARC stuff way so far ahead of what people in the real world were using that I couldn't make head or tail of the Byte Smalltalk special when I first read it. Windows? Graphics? Mice? What are those?
@@LearnWithHuwThanks for imparting your decades of programming knowledge to us. There was a lot of wisdom back in the 50s to 70s that seemed lost in the OO hype of the 90s; wisdom that we are rediscovering now thru you and others thanks to the wonders of the youtube algorithm. Cheers!
Smalltalk was not the first object oriented language. That award goes to Simula, which appeared in 1967. Simula is a superset of Algol, and the addition was Classes…objects. I learned Simula in 1978 and it was my favorite language in school. Smalltalk was important in developing OOP concepts, but it was not the first OOP language.
Smalltalk was the first object-oriented programming language _to be widely popularized._ Remember the famous August 1981 BYTE magazine cover? It revolutionized programming. Smalltalk is the simplest, purest, most consistent, most elegant, and easiest-to-learn object-oriented language. Ever. Smalltalk is the longest-lasting object-oriented language. Today, it remains vibrant and well-supported by no fewer than three major Smalltalk vendors (Instantiations, GemTalk Systems, Cincom). And Pharo is a fabulous open source Smalltalk based off of Squeak; it is highly innovative.
@@horridohobbies I still treasure my copy of that Byte magazine. It took me years after reading it before I really began to understand what it was all about! 🙂
Was early Simscript object oriented? It dated from the early sixties. I used it for discrete event simulation and within a program you could spawn processes and have them talk to each other. The originators of Simula said that they used some ideas from Simscript.
I loved Smalltalk. I was in that initial wave of developers in the late eighties/early nineties designing/coding event driven systems that had to run on both PC's and Mac's. It took my 3rd app before I really got OOP.The most rewarding part for me was when the "Patterns" book came out a few years later and I realized I had already discovered many of them on my own. I thought Java was a complete abomination but fortunately I got kicked upstairs around that time and no longer was writing any code. @@horridohobbies
Yes. Kay and Linus Torvalds have both been a bit scathing of C++. No comment on the matter from me (I don't want to get into those arguments!) apart from agreeing that C++ has very little in common with Smalltalk.
Simula-67 may have laid the groundwork for object-oriented programming, but it was C++ that catapulted OOP into the spotlight. Moreover, the effectiveness of object-oriented design can't be quantified by numerical metrics. Thus, Alan Kay's assessments come across as subjective and perhaps a touch envious, especially since he hasn't revealed how he measures C++.
Huw, this sort of lesson delivered in a story is such an excellent way to teach as well as to help people understand and remember what they learn. It also really shows how amazing the development of code is and how far it's come. I have your udemy course and really enjoy the passion you share!
Seems you are Welsh and I’ve heard they have a long storyteller tradition. I also think stories are the best way to convey information. Mankind’s oldest and greatest invention. Also being an ObjC guy for a while I always liked its influence from small talk.
@@LearnWithHuwid also say it’s good you were a journalist during the time you were. There is something like the cosmological time horizon in computing. Eventually galaxies will be so far apart no one will see other galaxies and have clues to the prior universe. So too already now, are people that will never know that brief microcomputer explosion that set all the paradigms we take as obvious. There will never be such leaps of tech so quickly and such a maelstrom of adoption and exuberance I think. Perhaps AR and BMI will be the next frontier.
At 10:59: "Add the language that started it all (object orientation), and that is smalltalk". That is not correct. "Simula" was a decade ahead of smalltalk and is the origin of oop.
It's true that Simula preceded Smalltalk but it failed to have anything like the impact that Smalltalk had. For most people (myself included) Smalltalk was the first OOP language that they'd heard of or had the opportunity to use. It is also the language that generated the interest in OOP that has led to all the object oriented languages that followed. The "idea" of OOP probably goes back even further than Simula, to Sketchpad. The term, "object oriented", however, was coined by Alan Kay and popularised with Smalltalk.
@@LearnWithHuw You are both wrong. Ivan Sutherland's _Sketchpad_ pioneered both the data structures + functions that operate on them in a taxonomic organisation and its use to implement a graphical user interface in 1963. "Sketchpad’s implementation of class and instance-based inheritance (though not called objects) predated Simula by several years." www.cl.cam.ac.uk/techreports/UCAM-CL-TR-574.pdf#page=4
"Back in 87... this was cutting edge hardware" ... Amiga: "Am I nothing?"... Also, the Amiga had mouse, windows, menus, icons, proper editors and the list goes on. Amazing computer for it's time, really ahead of the curve.
Thank you so much for posting this video. I’ve been telling my engineers that their view of OO is wrong and missing part of the concept for years but never had the time to demonstrate why
@@LearnWithHuw I confess that when I first learned this stuff it made no sense, just couldn’t get my head around it, coming from pascal but for the couple of decades it has frustrated me that OOP isn’t actually doing it right 😂 None of my engineers get it…
@@julianbrown1331 For me, OOP is as much a general approach to programming as it is a set of built-in features of a language (though naturally, it helps if a language does OOP well!)
@@LearnWithHuw I treat every language on its own merits (and deficiencies- not saying JavaScript has problems but there are whole books on the subject of avoiding the bad bits). It does mean that teaching and coaching the broader concepts can become a minefield
Huw! I own your book of Ruby and I love it and would like to take the chance to say Thank you! Very interesting video, thanks for taking us back to the times. Helps to realize how far we have come in basically no time. Looking forward to see what the series can teach me.
Many thanks. I'm glad you like the book! You may want to browse through the playlists on my channel. I already have a great many videos, some of which you may find of interest. And more will be uploaded soon!
Thank you for this Video, Huw. Brought back some happy memories. For what it's worth (very little), I worked with the PenPoint OS and applications in the era of the Apple Newton. This provided an API that was an object oriented disaster. Firstly there was no language support (being written in C), so it was all done by convention and pre-processor magic. Secondly the OO "purists" who wrote it though it would be a really good idea to have inheritance deeply nested in frequently used classes, such as a text entry box. Speaking from memory, that was about 14 levels of object inheritance deep. Why did this matter? It was virtually impossible to find the answer to a question in the documentation unless you already knew the answer - because there was not way to know where in those 14 levels a particular function you were looking for was defined. My job was to port the debugger to the Hobbit processor (big-endian stack-based). The debugger was written by another computer science magister who thought it would be a really good idea to have the debugger include a full C interpreter, and to be able to declare individual variables and functions as "host" or "target", meaning that it had to do cross-compiling on the fly, and packing and byteswapping too. Another example of *Something You Should Never Attempt* (tm). I got it working, which was fun, but I shouldn't have needed to. Usually I can achieve information hiding (encapsulation) in virtually any language I stumble across, and that is usually enough for my limited requirements. Keep it simple is my mantra, particularly in my waning years.
I too have worked with some terrible supposedly "object oriented" code. I can think of one example in particular (written by a very big company), that gave me nightmares. Individual methods would span hundreds of lines with multiple "returns" to break out at various points. It's this sort of thing that convinces me that everyone should learn Smalltalk before they get let loose on some modern OOP language.
Graduated as software engineer in 2006. The first 5 years I worked solely in Smalltalk - then we made a new system in Java that gradually took over. The system is still in use by the way, and though the Java web system is the only system being developed by that company, but the Smalltalk system is still being used and gets updates once in a while. I left the company in 2015, and have since worked in Java, C#, Javascript, typescript and other, but I miss Smalltalk dearly, I have never been able to code that fast in anything else...
I love Smalltalk too. Mind you, I still miss Modula-2 as well. I was addicted to TopSpeed Modula many years ago. Even if some of those languages are no longer mainstream, I think programmers will learn quite a lot by at least learning their basics.
I never saw that one. There was also TopView from IBM and DesqView too, but they were both text-mode. Mind you, it's amazing what people were able to do given the low powered hardware and simple operating systems we had back then. The version of Smalltalk/V for MS-DOS was incredibly ambitious for the late 1980s.
I've just played back the video at those times and I don't have any problem with the sound. I'm sorry but I don't know why you've experienced that problem.
A good reason for Turbo Pascal to have a screen editor was that Pascal is a language that cannot be interpreted one line at a time. You needed to write the whole infrastructure of the module before it could make sense.
The Atari 800 had a full screen editor and it was a rare feature when it released. Even basic on pc didn’t have full screen editing until QBasic if I recall
The first full screen editor I used was Turbo Pascal 3. On the PC in the early days most programmers used line-editors (literally entering 1 line of code at a time on the comandline) or very basic editors, using compilers such as Lattice C. I thought the Turbo Pascal editor was cutting edge (actually it wasn't much more powerful than Notepad) but I'd never seen anything like Smalltalk.
My first computer was a ZX80, which had 1K of memory, of which 512 bytes was used for video, and more for the os, leaving me with 368 bytes to program in.
@@explosiver The BASIC is tokenised, so keywords such as PRINT or FOR or NEXT only take one byte each. Also, the screen doesn't take 512 bytes - on a 1K ZX80 or ZX81, an empty screen takes 25 bytes which then expands as the screen is filled with characters, up to a maximum of 768 bytes (32x24 characters). There's a whole load of tricks to minimise memory use on a 1K machine, one of which is to use as little of the screen as possible. Of course, most people ended up buying the 16K RAM pack.
Douglas Englebart was using a mouse and graphical use interface back in the late 1960s... it was his team that literally inspired Xeros to begin research and start Xeros Park. :)
Sketchpad from 1963 also seems to have been a major inspiration. Amazing in retrospect that the computers most of us were still using in the mid-80s were well behind what was being developed way back in the 60s!
"Even if you don't want to write real world programs in small talk. Just studying small talk and understanding its big ideas would really really help you to write better oriented programs in other languages". This is linda what is happening to Rust right now
I was happy to find this channel: small talk and adventure games? Amazing content. I have to go through your video series but I’ve been getting deep into languages and was surprised to discover that Sierra Online’s homegrown scripting language: SCI was completely modeled after SmallTalk after their lead systems engineer Jeff Stephenson saw the issue of byte magazine (with the parachute). This ended up being a catalyst for Sierra’s rich history of modern adventure games going forward.
Wow, I used to work for Olivetti, in the M24 era. I worked for the peripheral division, but a friend of mine was a PC Bios developer. Great to know you worked on it!
I've never programmed Simula. I believe it was Smalltalk that introduced the environment and tools. I think the Simula language itself was derived from Algol (so, broadly-speaking, Pascal-like). There was, incidentally, a very nice OOP system called Actor, in the early 80s, that had a Smalltalk-like IDE with a Pascal-like language. I used Actor for a while so I may think about talking a bit about that in a future video (maybe a series on forgotten programming languages?).
@@LearnWithHuw the reason i asked was that the makers of Simula claimed it was the first oop. bjarne stroustrup and gosling (Java) have both said in interviews that they drew inspiration from Simula.
Wow, that brought back memories to see that Compaq portable 3 and if I remember right the 5.25" floppy drive has a pushbutton eject. UUsed to repair those things to component level, the PSUs were regarded (with some evidence) as being an absolute git to repair.
There is a story about how we got that Compaq working again. I bought it when it was first released (a LONG time ago) but when I turned it on recently, smoke came out of it. It took quite some effort to bring it back to life!
strangely the most oop language i can think of is go. it makes it so easy to build up systems of actors, each running independently and talking to each other through message passing. it also allows you to shut them down in an orderly fashion. i haven't yet found another technology that allows this.
What a find! What most people don’t know is that even today, the world practically runs on Smalltalk - from finance to international shipping to power generation to semiconductor manufacturing… the companies shall remain unnamed but they are there, and regard their Smalltalk based systems as their crown jewels and highest valued intellectual property.
My first computer was a Commodore 64. It had a magnetic tape drive. It took about 5 minutes to boot. It came with a book about how to program it. I tried following the lessons, but I was only 10 and didn't have the patience to do more than the first lesson. I wish I had stuck with it.
I had one of those. A friend and I created some games and other things. Eventually we bought one of those 1541 floppy drives. I didn't stop, and became software developer 28 years ago.
In my University, the 2021 third year of license degree, had a course on OOP languages. In which we passed two weeks on pharo who is a direct decedent of small talk. They sadly removed the course the year after that due to change in the learning norms.
That's a shame. Still, there are lots of Pharo tutorials on their site. I'm sure lots of programmers would find Smalltalk/Pharo of interest if only they give it a go!
Being of an age, I studied smalltalk and formal computational models like CSP and ACTORS in university. I've programmed in smalltalk and many other environments. So none of this came as a surprise. Smalltalk is nice in terms of language purity, but weak in terms of features you can use to get stuff done.
There are certainly some good reasons why Smalltalk never became one of the big mainstream languages. Even so, I think many programmers (who may be a bit younger than we are!) are missing out on an understanding of many of the core ideas of OOP if their only experience has been of one of the modern languages like C#, Java, Ruby and so on. Anyway, I'm hoping my Smalltalk series may give people a few ideas to ponder on.
"Only messaging, local retention and protection and hiding of state-process"... Doesn't that sound a lot like a description of microservices? 😉 In the end, OOP is much more about the design&architecture than about the language used to implement
Difference being: Even in the microest of micro-services (eg. Erlang/OTP); sending a message is a massively expensive undertaking, as measured in processor cycles. While in Smalltalk, messages are effectively "free." (passing a memory pointer.) So, in Erlang, you end up passing the equivalent of documents (datagrams) around. Not engaging in massively chatty smalltalk between very fine grained objects. Microservervices are trivial to distribute, and ideal if your domain needs to pass massive amounts of data across a fabric with reliability and predictive latency, as well as scale beyond what any single machine can handle. But it does put a floor under how fine grained and chatty your interobject communication can be. Hence, is not even remotely agnostic wrt to object modelling. OTOH, if your Smalltalk system outgrows its ability to run on one machine, you can't just replace pointer passing one-for-one with inter machine RPC, as your message passing cost could increase million fold. Different priorities.
It was invented by a researcher in their research lab, yes. But photographic film was a huge part of their business, so they were unwilling to develop it further. And as a result lost a big chunk of their income when digital finally took off. What was left of their film branch was eventually acquired by Kodak Alaris which was the pension fund of Kodak employees in the UK (a separate company). They still produce and sell some of the film types that were originally produced by Kodak and sell it under the Kodak brand. Kodak itself apparently still exist and now makes ingredients for medication, according to Wikipedia. How the mighty have fallen.
Hi Huw. I have been using C++ for the past few years but I'm still not very comfortable with pointers. I'd appreciate it if you can recommend any book on pointers. Thanks
Which version of Pascal are you using? There's probably far more learning material about Object Pascal (Delphi or Free Pascal) these days. The version I learnt so long ago was entirely procedural - Turbo Pascal 3. And I didn't even have TH-cam (or the Internet!) to help me. Oh, how old that makes me feel!
keep at it pashkuli you get there in the end I been following Huw since his PCPlus days thats how i learned delphi seams like yesterday to me picking up pcplus and getting a free copy of delphi 3 professional
@@LearnWithHuw Hi, Huw Yes it is Delphi (Community Edition)… to be honest I do net even know the difference. I got books as well ("Oh, Pascal!", Doug Cooper, 1993) and plenty of new (more recent) .pdf books. I want to build a music notation desktop (Windows) program, but non-standard score notation. Rather it is a heavily modified text-editor. I have also a UI concept with vector based GUI → simple vector icons\buttons, detachable and occupying the borders of the screen (auto-hide). I know I need virtual paper (rectangle), margins (for text containers), screen space and virtual 2D world-space (zoom under mouse pointer, pan, scroll). First I want to make my custom font to appear in the virtual 2D space (paper) in rows (margins), in mono-type fashion (cells only) but with some kerning functionality for the symbols (glyphs\letters) inside those cells. So, can I do this with Pascal (Delphi) and VCL\FMX libraries? I know it is a bit too much. Experienced programmers told me it is "a lot" for a beginner.
@@PASHKULI Oh! Pascal was a great book in its day but I wouldn't recommend it now. The version of Pascal it describes is hugely different from Delphi. I have, however, written a book myself which might help you. 😊 www.amazon.com/Little-Book-Delphi-Programming-Program/dp/1913132099/ You project sounds interesting. When not programming I like to play guitar (and occasionally mandolin) - quite badly, but it makes me happy!
@@LearnWithHuw Oh, that is even better. "Oh, Pascal!" was £4 with delivery included, but I see how outdated it is, though it seems informative about how things have evolved ever since. Will start your book when it gets delivered. I know it is for beginners and hope to get more familiar with the modern Pascal state (have no aspiration on becoming a developer as a career choice). I just want to see my ideas on screen, function and produce results. I am even more amazed you are a hobby musician (such as myself). I watch your videos on the evenings. I missed out the time in mid 90s to start dig deep into coding (some of my best friends are software developers though since early 2000s, also hobby musicians… I guess - quite a common trend). 😄
6:00 Xerox is beatifull example how patent system hamper progress!! Xerox Parc did gather most briliant scientis, Bob Robert Taylor did “great job” by taking scientist from Douglas Engelbart team…. Now it looks like that his job was to prevent any computer progress into mainstream.
16K. We were lucky if we had 18 bytes! To be serious, though, the first "BIG" computers I ever saw were in the Cambridge University machine room. The vast majority of the terminals were teletype (printers, no screens). Most people's mobile phones now have more computing power than the entire student body at Cambridge had access to in the late 70s.
@@LearnWithHuw I used to work for a company that claimed to have the largest privately-owned computer in western Europe. One of the programmers told me that the operating system was so big that it needed a megabyte to run!
Sorry. I'm not sure which paper you mean. Do you mean the article in the Byte Smalltalk issue? You can get that here: archive.org/details/byte-magazine-1981-08
Great trip to History! I still remember my wonder when I compiled a scroll down menu in Clipper! I enjoyed my developer work and still love trying new languages and technologies :)
I recall the horror of trying to to anything in the least bit graphical in Windows 3.x. All the more amazing that Smalltalk/V had a version that ran on MS DOS!
I have a question. Can one get into sofware engineering at an older age? I'm 35 and just starting to really learn about programming. I'm taking my second programming class in c++ this semester and will be taking two more programming classes next semester to finish my basics and move on to finish my degree at a university (I am doing my basics at a community college). I really love hearing about the histoy of computer languages and I think your channel is a gem. Thank you.
Thank you. I can't comment on the specifics of employment opportunities but if you mean: can you learn this at your age, oh, absolutely. It's not something you have to start when you are in your teens. In fact, a slightly more "mature" approach might be a distinct advantage! 🙂 Best wishes Huw
Don't forget about Atari ST and Amiga computers which were much more affordable than Macs or PCs and actually paved the way for large-scale adoption of GUI technology.
128K is massive... my Jupiter Ace had 3K On our PDP-11/73 at college,, we had a line editor... until a kiddie from the second year showed us all how to switch it into full screen mode... nobody ever used command mode ever again. They taught us about Smalltalk VERY BRIEFLY in computer studies at school in 1982... it was a simplified language for teaching children, they told us... if only they'd had a clue. We had 2 amazingly stunning GUIs on the BBC Micro... but without a mouse: "The Music System" and "Fleet St. Editor"... they were both rather mind blowing.
Software engineer here working in automation. This seems like a fantastic series and I will be following along with you, Huw! Thanks for taking the time to put this together! I am fascinated! What part of Wales are you from, I’m from Newport (or as some locals call it “Zooport”) 😅
Ahhh BYTE, the Olivetti M20, Borland's Turbo Pascal .. Osborne 1, Kaypro.... Sir, I've read your book on Ruby. In fact I had to look up something yesterday. Thank you.
So you’re saying that Apple was onto something when making object Pascal the main language in Macintosh programmers workshop. Then subsequently again with the awful Objective-C which is smalltalk bolted onto C. Now they call Swift “Objective-C without the C” so isn’t it basically just a modern version of smalltalk??
Smalltalk isn't synonymous with OOP, in that not everything in Smalltalk is specific to OOP. Some core ideas of Smalltalk were derived from LISP, especially the extreme late binding. Other early OOP languages, such as Simula and CLU, were much different and I can't find any reason to treat them like they are less "true" than Smalltalk. At this point anyway, I can't even think of OO as a coherent concept anymore : it's just a collection of language features that are implemented in much different ways across languages and that have often lots in common with languages that haven't been dubbed "OO", such as those supporting ADT without inheritance, and those supporting polymorphism without inheritance. The Self language doesn't have classes, and CLOS doesn't have data hiding nor a concept of "receiver", and they've been dubbed OO anyway.
Hi Huw, I'm so glad you're starting this series. I have done procedural programming in the past and have recently started to learn C# and OOP. This series could not have come at a better time. Other than following this series do you have any advice on how I can get OOP to click? I can follow tutorials and books quite happily, but when I come to write my own programs something is missing, like the pieces are not quite connecting in my mind, which sometimes makes writing OOP code very frustrating. Do you know how frequently you will be releasing videos in this series?
Hi. I hope to have another episode online in about a week. It's going to be quite a long one as I want to cover most of the essential Smalltalk syntax in that video so that I will be able to move on to talk in more depth about the big ideas (message passing, encapsulation and so on) in later videos. If you are just starting with C#, pick some tutorials that you like (or buy my book, The Little Book Of C#, from Amazon if you'd like to support me! 🙂) but if you really want to explore the key ideas that form the foundations of object orientation, be patient and I'll try to get around to that in this series. I'll try to keep them coming fairly often but they are going to be quite time consuming for me to make so I can't guarantee a specific schedule.
@@LearnWithHuw Thank you for all the effort you put in to creating these videos. While I'm waiting for the next episode of this series I'll take a look at your C# book.
@@bluesquirrel3257 Many thanks. I'm editing the next video this weekend. It's quite a long one (about half an hour) so it's taking me quite a while. Should be online in a few days.
i know it's a little bit late to comment, but i would recommend not to focus on OOP. in fact, for me OOP really clicked after i've learned FP (functional programming). i would recommend "structure and interpretation of computer programs" to learn FP basics. it's written for Scheme, but most things can be easily replicated in any weakly-typed language (worst case scenario, you could install Clojure, which is almost like Scheme, but runs on JVM). anyway, i find combination of FP and plain old procedural style to be the most effective: FP gives you mathematically rigorous theory to reason about the code (algebraic data types, function types, algebraic side effects), and procedural code gives you the speed. in terms of FP, OOP is mostly a partial function application technique and i recommend to think of it as such. Encapsulation and message passing are easy to mess up (that's why people end up with a tonn of setter&getter methods, and interdependent classes), their benefit is dubious in most cases, but they can make code much harder to reason about (can result in unpredictable flow of control).
yeah, i'm with you here. a lot of oop is about finding an intuitive abstraction over classical iterative programming. at some stage the whole thing gets reduced to assembly running on the chip. i find the areas interesting where the shell-game fails, for example, concurrency can be a huge problem if you have global state or singletons.
@@LearnWithHuw Here is a video description of it. I still haven't seen how the actually programming looks like. I think it doesn't use Cyrillic for the main instructions etc. th-cam.com/video/ztcS5hwx9-Q/w-d-xo.html
128k? Luxury! :D I started out with a VZ-200 -- shoebox with wires, I called it -- with its massive 8kb RAM/ROM (of which around 4.5kb was available for programming, the rest taken up by the BASIC OS. 🙂
I would argue that the Amiga pre-dates MS as a Windowing OS and it was more advanced than the first MS Windows and Mac versions, neither of which had a true preemptive multitasking OS.
I brought in and developed major Smalltalk applications for large corporations including headless ST on and IMB mainframe. Our team was never more productive, easily translating real-world business objects into ST objects. Learning Python now , it's disappointing to learn how inelegant and cryptic it is compared to how highly polished ST is. Bring back Smalltalk!
Ok, this is very interesting and I'm certainly interested to learn more. But... This is a bit like pointing out that the modern usage of the word "meme" isn't what Dawkins meant when he coined it. Sure, that's true but ultimately it doesn't matter, OOP is what it has become. That caveat aside, I'm keen to learn more.
@@LearnWithHuw Yes, completely agree. Very often things start as one thing and evolve into another (and not always for good reasons!) but regardless, it is good to understand the germ of the idea and the problems it was built to solve.
I’ve only ever played with Smalltalk. But it spoiled me bad, it’s just a pleasure to program in! It holds your hand perfectly through TDD. It’s IDE features make every other language look bad… seriously how has nobody made a versions in other languages that work like Smalltalk? Edit: Typo
It is addictive, isn't it! There was once another language called Actor that had a very similar environment but with a more Pascal-like syntax. That was around in the very early days of Windows. I'm not aware of any more recent language and IDE that has really been very close to Smalltalk. Unless you count Pharo which is, however, based on Squeak so probably doesn't really count.
@@LearnWithHuw I got one on Google... but it had only 1 page... can you tell me how many pages are there in the original... And , I really tried but that's the only one website I was able to find till now...
Hi Huw, I’ve been writing code since 1982 (BASIC on a RML 380Z, running CP/M). Now write a lot of Pascal (Lazarus IDE), PHP and a version of C++ for my Arduino projects. Will definitely be following this series, looking forward to learning a few new wrinkles. Quite a novel concept for a 56 year old!! 😂😂
You're just a youngster! 😃 I may do some more Pascal projects soon too. (Search out my playlist on how to write a collapsible outliner with Delphi. It'll take a bit of work to adapt it to Lazarus but it certainly can be done).
I got some books on smalltalk as well, with the same idea. The problem with object orientation in general is that programmers said something like: Programmer: I have 10 ways to program! Object guru: I have a method that is so revolutionary it will replace all that! Programmer: Thanks. I have 11 ways to program. ie., object dudes are a religion and want you to replace all of your programming methods.
My approach to ALL programming problems: keep it simple. Far too many people seem to try to make object orientation as complicated as possible. At heart OOP is really simple. So I always try to keep my code simple too.
man them floopy disks take me back to my school days playing on the good old BBC computers then our school upgraded to the old skool Macintosh lol seams like yesterday with the green screens.
Well, my 1st (HOME-) Computer C64 (1984) with Datasette and ROM-BASIC was not enough for graphics programming, so I bought a C64 inside and learned about its graphics hardware and 6510 assembly language for graphic programming. My 2nd Computer became an ATARI 1024 ST (1987) which I used many years. My 1st OOP Language was Turbo Pascal v5.5 which I used for my engineering calculation software programming diplom thesis (1989/1990). Later when working on software development IBM compatible PCs an IBM compatible Pentium Windows 95 PC came into home (1997) followed later by Windows XP Multimedia PC (2003 for nearly 7 years) than replaced by affordable Notebook-PCs Windows VISTA (2007), Windows 7 and Windows 10. Until today I used several programming languages and sometimes one might be surprised what programming concept possibilities (like OOP) can be used in unlucky way, just to to avoid over-complicated or over-engineered...
Thanks. Yes, it's worth looking at the entire series in which I do my best to explain how Smalltalk's ideas have been mutated into slightly different things in most modern OOP languages: th-cam.com/play/PLZHx5heVfgEvuveKG1T7BBSuDOTHl1eLl.html Best wishes Huw
I cannot agree on the need to learn it in the first language that implements this natural law first. Just start with a high-level language and design it in parallel with UML using known design patterns. 🤷♂️
I remember reading the edition of "Byte" that was dedicated to Smalltalk, and thought it was an elaborate exercise in odd typography. I'm still not convinced that Object Orientation is more than a fashionable source of religious wars for programmers to fight. Smalltalk expertise has never been likely to get you a job or make money, and it still isn't,
I agree. OOP makes sense in Smalltalk. Many supposedly OO programs written in other languages might have been as good or better if they were written without OO (except for adventure games, that is - I'm a big fan of object orientation for those! 🙂).
Xerox did try and commercialise it though. It was just so offensively expensive even major corporations couldn’t afford to buy them. That’s why the unix and then DOS stacks won. Because they were in the realms of affordability. Even a Mac which spawned from the Xerox cedar mesa OS was $2500 and was nothing like as comprehensive. It could basically run only MacPaint and MacWrite for the first two years. Didn’t come with its own app making environment such as smalltalk. And xerox machines were all fully networked with Ethernet and full email! It would really take Bill Gates up until windows 95 to even partly catchup. And consumer grade tech to be able to handle it. But xerox did try. But history is always full of weaker less great technology succeeding against more advanced but expensive. The only time Steve jobs at Apple ever understood this lesson was with the iPod and to a lesser extent the early iPads.
The OO programming has practically nothing to do with an asynchronous msg based systems, I say it more aligned with event driven programming. It requires a completely different skill and programming architecture. After nearly 35 years of programming I prefer a standard functional C programming as the easiest and fastest way to deliver applications. User interfaces are best written in Excel or some Windows environment, working off a common database. So nothing really changed 😕 for me at least, banking is very conservative.
@codewithhuw That’s great quote from Kay, but I’d disagree that it doesn’t apply equally to Java and such like. (Except, perhaps, for the late binding of all thing part, since I’m not sure what he meant by that.) As for whether Java (etc) programmers have heard of message passing; when I taught OOP using Java they certainly did. I’ll be viewing the rest of the series to try to better understand the ideas.
Ah, well, I think thoughtful disagreement is always for the good in programming! It's been my experience that many ideas that were once common in programming have tended to be forgotten. Which is one reason why I decided to record this series. I wouldn't say that all those ideas cannot be bettered, but they are worth at least knowing about.
when i heard late binding i immediately thought of dependency injection. things get bound at runtime rather than at compile time, though some one else in this thread seemed to suggest that late binding came from lisp, which makes me think of dynamic scoping. i think the problem with message passing and languages with such bad concurrency support as java is that if you don't spend a LOT of time wrestling with threads and joins and notify and etc. you're stuck with one thread of execution, at which point message passing becomes tricky, e.g. if object A is waiting on 2 messages before emitting a message, it can't just wait in the middle of a method until the second message arrives, but instead you need to split up receiving the messages into 3 methods and store some state as to which message has already arrived. it gets messy very quickly.
@@EdouardTavinor “Late binding” is a phrase that’s been applied to a lot of things. Dynamic scoping is binding of names to (for lack of a better term) definitions run time. Just about everyone agrees this not a good idea. (Sometimes good ideas are forgotten; but sometimes bad ideas die for good reason.) Late binding is also applied to the binding of types to expressions. This is central to OOP, but different languages take different approaches. The Smalltalk approach is that any variable can refer to object of any class. The Java approach is that a variable refers to only to an object whose class is a subtype of the its static type -i.e., declared type. These are both late binding, but the Java approach allows late binding to be combined with static type checking. The SmallTalk approach is more flexible, but makes static analysis more difficult. As for message passing. What I meant, and what I think Kay meant, is passing messages from one object to another. Nothing to do with concurrency. Message passing as a concurrency model came along a bit later than SmallTalk, around 1978 with Hoare’s first CSP paper. So I don’t think that’s what Kay meant. But what you say about message passing is interesting. What would be an example of a language (or library) that supports concurrent message passing in a way that you suggest?
@@teeesen I think any language which supports an actor model can do it. The most common language would be go. It has excellent support for message passing between (light weight) threads
7:10 Microsoft, nor Apple, did not ever make what Xerox PARC had 60 years ago! We today have fractions of this technology. You can look here how Xerox PARC technology looks and work: th-cam.com/video/AnrlSqtpOkw/w-d-xo.html
hi Hugh, I bought your course on C pointers few years ago. I not only refreshed my memory bot got even better grasp than ever. Its so cool I stumbled upon your video, cheers!
Many thanks.
I was working as a systems programmer for ICL in the 70s. My boss was telling me about Xerox Parc - it seemed space-age to me, compared to the ICL 7502 green screen terminals and the ghastly screenedit editor. Thank you so much for doing this - I used to enjoy your articles in the mags. Best wishes.
Ah, you have a long memory (my magazine articles, I mean!) - yes, the Xerox PARC stuff way so far ahead of what people in the real world were using that I couldn't make head or tail of the Byte Smalltalk special when I first read it. Windows? Graphics? Mice? What are those?
@@LearnWithHuwThanks for imparting your decades of programming knowledge to us. There was a lot of wisdom back in the 50s to 70s that seemed lost in the OO hype of the 90s; wisdom that we are rediscovering now thru you and others thanks to the wonders of the youtube algorithm.
Cheers!
@@mehtubbhai9709 Thank you! I'm glad you found this of interest. 🙂
Hi Huw, this series sounds great to me and I'm looking forward for the next episodes.😃
Smalltalk was not the first object oriented language. That award goes to Simula, which appeared in 1967. Simula is a superset of Algol, and the addition was Classes…objects. I learned Simula in 1978 and it was my favorite language in school. Smalltalk was important in developing OOP concepts, but it was not the first OOP language.
You are right. Smalltalk was the first OOP language to make any real impression but Simula preceded it.
Smalltalk was the first object-oriented programming language _to be widely popularized._ Remember the famous August 1981 BYTE magazine cover? It revolutionized programming.
Smalltalk is the simplest, purest, most consistent, most elegant, and easiest-to-learn object-oriented language. Ever.
Smalltalk is the longest-lasting object-oriented language. Today, it remains vibrant and well-supported by no fewer than three major Smalltalk vendors (Instantiations, GemTalk Systems, Cincom). And Pharo is a fabulous open source Smalltalk based off of Squeak; it is highly innovative.
@@horridohobbies I still treasure my copy of that Byte magazine. It took me years after reading it before I really began to understand what it was all about! 🙂
Was early Simscript object oriented? It dated from the early sixties. I used it for discrete event simulation and within a program you could spawn processes and have them talk to each other. The originators of Simula said that they used some ideas from Simscript.
I loved Smalltalk. I was in that initial wave of developers in the late eighties/early nineties designing/coding event driven systems that had to run on both PC's and Mac's. It took my 3rd app before I really got OOP.The most rewarding part for me was when the "Patterns" book came out a few years later and I realized I had already discovered many of them on my own. I thought Java was a complete abomination but fortunately I got kicked upstairs around that time and no longer was writing any code. @@horridohobbies
The obligatory Alan Kay quote: "I invented the term "object-oriented programming", and I can tell you I didn't have C++ in mind."
Yes. Kay and Linus Torvalds have both been a bit scathing of C++. No comment on the matter from me (I don't want to get into those arguments!) apart from agreeing that C++ has very little in common with Smalltalk.
Simula-67 may have laid the groundwork for object-oriented programming, but it was C++ that catapulted OOP into the spotlight. Moreover, the effectiveness of object-oriented design can't be quantified by numerical metrics. Thus, Alan Kay's assessments come across as subjective and perhaps a touch envious, especially since he hasn't revealed how he measures C++.
Huw, this sort of lesson delivered in a story is such an excellent way to teach as well as to help people understand and remember what they learn. It also really shows how amazing the development of code is and how far it's come. I have your udemy course and really enjoy the passion you share!
That's very kind of you to say so. It's always good to know when people get something useful from my videos!
Seems you are Welsh and I’ve heard they have a long storyteller tradition.
I also think stories are the best way to convey information.
Mankind’s oldest and greatest invention.
Also being an ObjC guy for a while I always liked its influence from small talk.
@@LearnWithHuwid also say it’s good you were a journalist during the time you were.
There is something like the cosmological time horizon in computing. Eventually galaxies will be so far apart no one will see other galaxies and have clues to the prior universe.
So too already now, are people that will never know that brief microcomputer explosion that set all the paradigms we take as obvious.
There will never be such leaps of tech so quickly and such a maelstrom of adoption and exuberance I think.
Perhaps AR and BMI will be the next frontier.
@@jhoughjr1 Looking back I am still amazed at how much has changed.
@@jhoughjr1 Yes, I'm Welsh. We do talk a lot! 🙂
really loved the little history lesson esp since it came from your personal experience. looking fwd to the rest of the playlist.
Thanks. I have a few more ideas for videos on "programming history" (which I remember all too well!) so I hope you'l enjoy them too!
At 10:59: "Add the language that started it all (object orientation), and that is smalltalk".
That is not correct. "Simula" was a decade ahead of smalltalk and is the origin of oop.
It's true that Simula preceded Smalltalk but it failed to have anything like the impact that Smalltalk had. For most people (myself included) Smalltalk was the first OOP language that they'd heard of or had the opportunity to use. It is also the language that generated the interest in OOP that has led to all the object oriented languages that followed. The "idea" of OOP probably goes back even further than Simula, to Sketchpad. The term, "object oriented", however, was coined by Alan Kay and popularised with Smalltalk.
@@LearnWithHuw You are both wrong. Ivan Sutherland's _Sketchpad_ pioneered both the data structures + functions that operate on them in a taxonomic organisation and its use to implement a graphical user interface in 1963.
"Sketchpad’s implementation of class and instance-based inheritance (though not called objects) predated Simula by several years."
www.cl.cam.ac.uk/techreports/UCAM-CL-TR-574.pdf#page=4
"Back in 87... this was cutting edge hardware" ... Amiga: "Am I nothing?"... Also, the Amiga had mouse, windows, menus, icons, proper editors and the list goes on. Amazing computer for it's time, really ahead of the curve.
I would say the Amiga was cutting edge. I had one.
This sounds like an amazing series, should be so informative!
Thanks. I hope you enjoy it!
Thank you so much for posting this video. I’ve been telling my engineers that their view of OO is wrong and missing part of the concept for years but never had the time to demonstrate why
Many thanks. Some people seem to understand this quite quickly. But other people really struggle to see what it's all about.
@@LearnWithHuw I confess that when I first learned this stuff it made no sense, just couldn’t get my head around it, coming from pascal but for the couple of decades it has frustrated me that OOP isn’t actually doing it right 😂
None of my engineers get it…
@@julianbrown1331 For me, OOP is as much a general approach to programming as it is a set of built-in features of a language (though naturally, it helps if a language does OOP well!)
@@LearnWithHuw I treat every language on its own merits (and deficiencies- not saying JavaScript has problems but there are whole books on the subject of avoiding the bad bits). It does mean that teaching and coaching the broader concepts can become a minefield
Huw! I own your book of Ruby and I love it and would like to take the chance to say Thank you!
Very interesting video, thanks for taking us back to the times. Helps to realize how far we have come in basically no time.
Looking forward to see what the series can teach me.
Many thanks. I'm glad you like the book! You may want to browse through the playlists on my channel. I already have a great many videos, some of which you may find of interest. And more will be uploaded soon!
Thanks for sharing this. This makes me grateful as a developer as there are so many options, tools to choose from.
There are some programmers who just want to use their favourite language and some (myself included) who love discovering new languages and new ideas.
I just wanted to tell you I'm so incredibly impressed by you!
Oof! I'm flattered. I hope I deserve it. 🙂
Thank you for this Video, Huw. Brought back some happy memories.
For what it's worth (very little), I worked with the PenPoint OS and applications in the era of the Apple Newton. This provided an API that was an object oriented disaster. Firstly there was no language support (being written in C), so it was all done by convention and pre-processor magic. Secondly the OO "purists" who wrote it though it would be a really good idea to have inheritance deeply nested in frequently used classes, such as a text entry box. Speaking from memory, that was about 14 levels of object inheritance deep. Why did this matter? It was virtually impossible to find the answer to a question in the documentation unless you already knew the answer - because there was not way to know where in those 14 levels a particular function you were looking for was defined.
My job was to port the debugger to the Hobbit processor (big-endian stack-based). The debugger was written by another computer science magister who thought it would be a really good idea to have the debugger include a full C interpreter, and to be able to declare individual variables and functions as "host" or "target", meaning that it had to do cross-compiling on the fly, and packing and byteswapping too. Another example of *Something You Should Never Attempt* (tm). I got it working, which was fun, but I shouldn't have needed to.
Usually I can achieve information hiding (encapsulation) in virtually any language I stumble across, and that is usually enough for my limited requirements. Keep it simple is my mantra, particularly in my waning years.
I too have worked with some terrible supposedly "object oriented" code. I can think of one example in particular (written by a very big company), that gave me nightmares. Individual methods would span hundreds of lines with multiple "returns" to break out at various points. It's this sort of thing that convinces me that everyone should learn Smalltalk before they get let loose on some modern OOP language.
Graduated as software engineer in 2006. The first 5 years I worked solely in Smalltalk - then we made a new system in Java that gradually took over.
The system is still in use by the way, and though the Java web system is the only system being developed by that company, but the Smalltalk system is still being used and gets updates once in a while.
I left the company in 2015, and have since worked in Java, C#, Javascript, typescript and other, but I miss Smalltalk dearly, I have never been able to code that fast in anything else...
I love Smalltalk too. Mind you, I still miss Modula-2 as well. I was addicted to TopSpeed Modula many years ago. Even if some of those languages are no longer mainstream, I think programmers will learn quite a lot by at least learning their basics.
Commodore also designed an early GUI for the C64 called GEOS but abandoned the project.
I never saw that one. There was also TopView from IBM and DesqView too, but they were both text-mode. Mind you, it's amazing what people were able to do given the low powered hardware and simple operating systems we had back then. The version of Smalltalk/V for MS-DOS was incredibly ambitious for the late 1980s.
They made up for it though with the Amiga operating system.
Commodore didn't design GEOS - it was written by Berkeley Softworks.
@@Zeem4 I was in error 😀
This is the tutorial series I did not know I needed thank you!
Ha! Many thanks. 🤗
The sound in 11:36 was cut out until 12:09.
I've just played back the video at those times and I don't have any problem with the sound. I'm sorry but I don't know why you've experienced that problem.
A good reason for Turbo Pascal to have a screen editor was that Pascal is a language that cannot be interpreted one line at a time.
You needed to write the whole infrastructure of the module before it could make sense.
A full screen editor for a PC language was unusual at that time. Very liberating, however.
The Atari 800 had a full screen editor and it was a rare feature when it released.
Even basic on pc didn’t have full screen editing until QBasic if I recall
The first full screen editor I used was Turbo Pascal 3. On the PC in the early days most programmers used line-editors (literally entering 1 line of code at a time on the comandline) or very basic editors, using compilers such as Lattice C. I thought the Turbo Pascal editor was cutting edge (actually it wasn't much more powerful than Notepad) but I'd never seen anything like Smalltalk.
My first computer was a ZX80, which had 1K of memory, of which 512 bytes was used for video, and more for the os, leaving me with 368 bytes to program in.
Happy days!
How does a program even fit in that little memory? That's only 368 characters if it's in ASCII.
@@explosiver Learn Z80 and find out :-) or better yet, learn 6502 and try one of the emulators for that.
@@explosiver The BASIC is tokenised, so keywords such as PRINT or FOR or NEXT only take one byte each. Also, the screen doesn't take 512 bytes - on a 1K ZX80 or ZX81, an empty screen takes 25 bytes which then expands as the screen is filled with characters, up to a maximum of 768 bytes (32x24 characters). There's a whole load of tricks to minimise memory use on a 1K machine, one of which is to use as little of the screen as possible.
Of course, most people ended up buying the 16K RAM pack.
Douglas Englebart was using a mouse and graphical use interface back in the late 1960s... it was his team that literally inspired Xeros to begin research and start Xeros Park. :)
Sketchpad from 1963 also seems to have been a major inspiration. Amazing in retrospect that the computers most of us were still using in the mid-80s were well behind what was being developed way back in the 60s!
"Even if you don't want to write real world programs in small talk. Just studying small talk and understanding its big ideas would really really help you to write better oriented programs in other languages".
This is linda what is happening to Rust right now
I have only just started using Rust. I'll be interested to see how I get on with it over time.
I was happy to find this channel: small talk and adventure games? Amazing content. I have to go through your video series but I’ve been getting deep into languages and was surprised to discover that Sierra Online’s homegrown scripting language: SCI was completely modeled after SmallTalk after their lead systems engineer Jeff Stephenson saw the issue of byte magazine (with the parachute). This ended up being a catalyst for Sierra’s rich history of modern adventure games going forward.
Thanks for that information. I didn't know about SCI. I shall have to go and do some research into that!
Was Xerox park the future of computing or are we stuck in the pass for decades?
I suspect the influence of various Xerox Parc projects will have an effect for years to come.
Wow, I used to work for Olivetti, in the M24 era. I worked for the peripheral division, but a friend of mine was a PC Bios developer. Great to know you worked on it!
I loved it!
I believe nowadays if asked what is OOP? And you respond it with your definition. I think even the interviewer won't consider your answer.
How different/similar are smalltalk to simula?
I've never programmed Simula. I believe it was Smalltalk that introduced the environment and tools. I think the Simula language itself was derived from Algol (so, broadly-speaking, Pascal-like).
There was, incidentally, a very nice OOP system called Actor, in the early 80s, that had a Smalltalk-like IDE with a Pascal-like language. I used Actor for a while so I may think about talking a bit about that in a future video (maybe a series on forgotten programming languages?).
@@LearnWithHuw the reason i asked was that the makers of Simula claimed it was the first oop. bjarne stroustrup and gosling (Java) have both said in interviews that they drew inspiration from Simula.
@@bareMinimumExample I wish I could find a working implementation. I'd love to give it a try.
The CLOS in Common Lisp is also radically different than the C++ notion of Classes.
Wow, that brought back memories to see that Compaq portable 3 and if I remember right the 5.25" floppy drive has a pushbutton eject. UUsed to repair those things to component level, the PSUs were regarded (with some evidence) as being an absolute git to repair.
There is a story about how we got that Compaq working again. I bought it when it was first released (a LONG time ago) but when I turned it on recently, smoke came out of it. It took quite some effort to bring it back to life!
My understanding is that Xerox did not have overlapping windows. Lisa/Macintosh introduced that, along with all sorts of other modern GUI conventions.
Here's an old video of the Smalltalk-80 user interface: th-cam.com/video/M_TXM0Jsglk/w-d-xo.html
:43 - my fil had one of these. It was portable. His bank required him to have it. It was a 20 Kg loadstone (he doesn't like computers).
Good content! Does anyone found the link for the article that appeared at the beginning seconds?
Do you mean "Byte". I believe that is on archive.org.
Best wishes
Huw
strangely the most oop language i can think of is go. it makes it so easy to build up systems of actors, each running independently and talking to each other through message passing. it also allows you to shut them down in an orderly fashion. i haven't yet found another technology that allows this.
What a find! What most people don’t know is that even today, the world practically runs on Smalltalk - from finance to international shipping to power generation to semiconductor manufacturing… the companies shall remain unnamed but they are there, and regard their Smalltalk based systems as their crown jewels and highest valued intellectual property.
Xerox PARC designed the modern world (and gave it away).
Dude this series looks so promising, I'm excited to watch the rest. Thank you Huw.
Thanks. I hope it lives up to your expectations! 🙂
My first computer was a Commodore 64. It had a magnetic tape drive. It took about 5 minutes to boot. It came with a book about how to program it. I tried following the lessons, but I was only 10 and didn't have the patience to do more than the first lesson. I wish I had stuck with it.
I had one of those. A friend and I created some games and other things. Eventually we bought one of those 1541 floppy drives. I didn't stop, and became software developer 28 years ago.
In my University, the 2021 third year of license degree, had a course on OOP languages.
In which we passed two weeks on pharo who is a direct decedent of small talk.
They sadly removed the course the year after that due to change in the learning norms.
That's a shame. Still, there are lots of Pharo tutorials on their site. I'm sure lots of programmers would find Smalltalk/Pharo of interest if only they give it a go!
Being of an age, I studied smalltalk and formal computational models like CSP and ACTORS in university. I've programmed in smalltalk and many other environments. So none of this came as a surprise. Smalltalk is nice in terms of language purity, but weak in terms of features you can use to get stuff done.
There are certainly some good reasons why Smalltalk never became one of the big mainstream languages. Even so, I think many programmers (who may be a bit younger than we are!) are missing out on an understanding of many of the core ideas of OOP if their only experience has been of one of the modern languages like C#, Java, Ruby and so on. Anyway, I'm hoping my Smalltalk series may give people a few ideas to ponder on.
@@LearnWithHuw Looking forward to it.
They should have called it MOP: Message-Oriented Programming , rather than OOP.
I wonder how different modern software would be had they done that?
Oops
My first introduction to OO was with IBM's Visual age for SmallTalk.
Something I never really understood. Time to add it to my bucket list.
Fantastic video! You're a great historian. You should have way more subscribers.
Many thanks!
This really brought back memories. Thanks.
Ah, the good old days! I know the feeling. 🙂
Where do you hand crank that thing?
I can't give away all my secrets! 🙂
"Only messaging, local retention and protection and hiding of state-process"... Doesn't that sound a lot like a description of microservices? 😉
In the end, OOP is much more about the design&architecture than about the language used to implement
Difference being: Even in the microest of micro-services (eg. Erlang/OTP); sending a message is a massively expensive undertaking, as measured in processor cycles. While in Smalltalk, messages are effectively "free." (passing a memory pointer.) So, in Erlang, you end up passing the equivalent of documents (datagrams) around. Not engaging in massively chatty smalltalk between very fine grained objects.
Microservervices are trivial to distribute, and ideal if your domain needs to pass massive amounts of data across a fabric with reliability and predictive latency, as well as scale beyond what any single machine can handle. But it does put a floor under how fine grained and chatty your interobject communication can be. Hence, is not even remotely agnostic wrt to object modelling. OTOH, if your Smalltalk system outgrows its ability to run on one machine, you can't just replace pointer passing one-for-one with inter machine RPC, as your message passing cost could increase million fold.
Different priorities.
Did not Kodak do something very similar with the digital camera technology?
It was invented by a researcher in their research lab, yes. But photographic film was a huge part of their business, so they were unwilling to develop it further. And as a result lost a big chunk of their income when digital finally took off.
What was left of their film branch was eventually acquired by Kodak Alaris which was the pension fund of Kodak employees in the UK (a separate company). They still produce and sell some of the film types that were originally produced by Kodak and sell it under the Kodak brand. Kodak itself apparently still exist and now makes ingredients for medication, according to Wikipedia.
How the mighty have fallen.
Hi Huw. I have been using C++ for the past few years but I'm still not very comfortable with pointers. I'd appreciate it if you can recommend any book on pointers. Thanks
I have a book all about pointers. Go to Amazon and search for "The Little Book Of Pointers". I think that should help!
Sir, you have a new subscriber. Thank you!
Many thanks.
Great content, Huw! I'm trying to get my head around Pascal and it's been a struggle…
Which version of Pascal are you using? There's probably far more learning material about Object Pascal (Delphi or Free Pascal) these days. The version I learnt so long ago was entirely procedural - Turbo Pascal 3. And I didn't even have TH-cam (or the Internet!) to help me. Oh, how old that makes me feel!
keep at it pashkuli you get there in the end I been following Huw since his PCPlus days thats how i learned delphi seams like yesterday to me picking up pcplus and getting a free copy of delphi 3 professional
@@LearnWithHuw Hi, Huw
Yes it is Delphi (Community Edition)… to be honest I do net even know the difference. I got books as well ("Oh, Pascal!", Doug Cooper, 1993) and plenty of new (more recent) .pdf books. I want to build a music notation desktop (Windows) program, but non-standard score notation. Rather it is a heavily modified text-editor. I have also a UI concept with vector based GUI → simple vector icons\buttons, detachable and occupying the borders of the screen (auto-hide).
I know I need virtual paper (rectangle), margins (for text containers), screen space and virtual 2D world-space (zoom under mouse pointer, pan, scroll).
First I want to make my custom font to appear in the virtual 2D space (paper) in rows (margins), in mono-type fashion (cells only) but with some kerning functionality for the symbols (glyphs\letters) inside those cells.
So, can I do this with Pascal (Delphi) and VCL\FMX libraries? I know it is a bit too much. Experienced programmers told me it is "a lot" for a beginner.
@@PASHKULI Oh! Pascal was a great book in its day but I wouldn't recommend it now. The version of Pascal it describes is hugely different from Delphi. I have, however, written a book myself which might help you. 😊 www.amazon.com/Little-Book-Delphi-Programming-Program/dp/1913132099/
You project sounds interesting. When not programming I like to play guitar (and occasionally mandolin) - quite badly, but it makes me happy!
@@LearnWithHuw Oh, that is even better. "Oh, Pascal!" was £4 with delivery included, but I see how outdated it is, though it seems informative about how things have evolved ever since. Will start your book when it gets delivered. I know it is for beginners and hope to get more familiar with the modern Pascal state (have no aspiration on becoming a developer as a career choice). I just want to see my ideas on screen, function and produce results.
I am even more amazed you are a hobby musician (such as myself). I watch your videos on the evenings. I missed out the time in mid 90s to start dig deep into coding (some of my best friends are software developers though since early 2000s, also hobby musicians… I guess - quite a common trend). 😄
6:00 Xerox is beatifull example how patent system hamper progress!!
Xerox Parc did gather most briliant scientis, Bob Robert Taylor did “great job” by taking scientist from Douglas Engelbart team….
Now it looks like that his job was to prevent any computer progress into mainstream.
What a great and interesting episode! 😊👍👌
Greetings from Sweden 🇸🇪🇸🇪🇸🇪
Many thanks.
I feel the Four Yorkshiremen sketch coming on!
You were lucky, a screen, 640k and a disk? Luxury! In my day we had a teletype, 16k and paper tapes.
16K. We were lucky if we had 18 bytes! To be serious, though, the first "BIG" computers I ever saw were in the Cambridge University machine room. The vast majority of the terminals were teletype (printers, no screens). Most people's mobile phones now have more computing power than the entire student body at Cambridge had access to in the late 70s.
@@LearnWithHuw I used to work for a company that claimed to have the largest privately-owned computer in western Europe. One of the programmers told me that the operating system was so big that it needed a megabyte to run!
I'd like to download the paper you presented but I can't seem to find it anywhere. Mind dropping the link ?
Sorry. I'm not sure which paper you mean. Do you mean the article in the Byte Smalltalk issue? You can get that here: archive.org/details/byte-magazine-1981-08
@@LearnWithHuw that's exactly it, page 74. Thanks you very much !
@@anthonycyrille The entire issue is worth reading. Have fun!
Great trip to History! I still remember my wonder when I compiled a scroll down menu in Clipper! I enjoyed my developer work and still love trying new languages and technologies :)
I recall the horror of trying to to anything in the least bit graphical in Windows 3.x. All the more amazing that Smalltalk/V had a version that ran on MS DOS!
I have a question. Can one get into sofware engineering at an older age? I'm 35 and just starting to really learn about programming. I'm taking my second programming class in c++ this semester and will be taking two more programming classes next semester to finish my basics and move on to finish my degree at a university (I am doing my basics at a community college). I really love hearing about the histoy of computer languages and I think your channel is a gem. Thank you.
Thank you. I can't comment on the specifics of employment opportunities but if you mean: can you learn this at your age, oh, absolutely. It's not something you have to start when you are in your teens. In fact, a slightly more "mature" approach might be a distinct advantage! 🙂
Best wishes
Huw
Don't forget about Atari ST and Amiga computers which were much more affordable than Macs or PCs and actually paved the way for large-scale adoption of GUI technology.
128K is massive... my Jupiter Ace had 3K
On our PDP-11/73 at college,, we had a line editor... until a kiddie from the second year showed us all how to switch it into full screen mode... nobody ever used command mode ever again.
They taught us about Smalltalk VERY BRIEFLY in computer studies at school in 1982... it was a simplified language for teaching children, they told us... if only they'd had a clue.
We had 2 amazingly stunning GUIs on the BBC Micro... but without a mouse: "The Music System" and "Fleet St. Editor"... they were both rather mind blowing.
Great appetizer! Makes you hungry for more.
Software engineer here working in automation. This seems like a fantastic series and I will be following along with you, Huw! Thanks for taking the time to put this together! I am fascinated! What part of Wales are you from, I’m from Newport (or as some locals call it “Zooport”) 😅
Many thanks. I'm from the Rhondda originally but I've lived all over the place (now in North Devon).
Nice work. Thanks for sharing! Live long and prosper!
Thank you!
love object oriented programming, wish it was real.
Next time you see a rainbow in the sky - run as fast as you can - a book revealing OO 's elusive secrets can be found at the end.
Ahhh BYTE, the Olivetti M20, Borland's Turbo Pascal .. Osborne 1, Kaypro....
Sir, I've read your book on Ruby. In fact I had to look up something yesterday. Thank you.
Many thanks.
So you’re saying that Apple was onto something when making object Pascal the main language in Macintosh programmers workshop. Then subsequently again with the awful Objective-C which is smalltalk bolted onto C. Now they call Swift “Objective-C without the C” so isn’t it basically just a modern version of smalltalk??
I love it. I also have a Compaq 3 with Smalltalk/V installed! ;)
Ha! We must be the members of a very exclusive club! 😉
Smalltalk isn't synonymous with OOP, in that not everything in Smalltalk is specific to OOP. Some core ideas of Smalltalk were derived from LISP, especially the extreme late binding. Other early OOP languages, such as Simula and CLU, were much different and I can't find any reason to treat them like they are less "true" than Smalltalk. At this point anyway, I can't even think of OO as a coherent concept anymore : it's just a collection of language features that are implemented in much different ways across languages and that have often lots in common with languages that haven't been dubbed "OO", such as those supporting ADT without inheritance, and those supporting polymorphism without inheritance. The Self language doesn't have classes, and CLOS doesn't have data hiding nor a concept of "receiver", and they've been dubbed OO anyway.
huh... i actually DO have 128gb of RAM. i play games n' stuff. how far we've come indeed.
Amiga was ahead of PCs with Workbench ...
Hi Huw, I'm so glad you're starting this series. I have done procedural programming in the past and have recently started to learn C# and OOP. This series could not have come at a better time. Other than following this series do you have any advice on how I can get OOP to click? I can follow tutorials and books quite happily, but when I come to write my own programs something is missing, like the pieces are not quite connecting in my mind, which sometimes makes writing OOP code very frustrating.
Do you know how frequently you will be releasing videos in this series?
Hi. I hope to have another episode online in about a week. It's going to be quite a long one as I want to cover most of the essential Smalltalk syntax in that video so that I will be able to move on to talk in more depth about the big ideas (message passing, encapsulation and so on) in later videos. If you are just starting with C#, pick some tutorials that you like (or buy my book, The Little Book Of C#, from Amazon if you'd like to support me! 🙂) but if you really want to explore the key ideas that form the foundations of object orientation, be patient and I'll try to get around to that in this series. I'll try to keep them coming fairly often but they are going to be quite time consuming for me to make so I can't guarantee a specific schedule.
@@LearnWithHuw Thank you for all the effort you put in to creating these videos. While I'm waiting for the next episode of this series I'll take a look at your C# book.
@@bluesquirrel3257 Many thanks. I'm editing the next video this weekend. It's quite a long one (about half an hour) so it's taking me quite a while. Should be online in a few days.
i know it's a little bit late to comment, but i would recommend not to focus on OOP. in fact, for me OOP really clicked after i've learned FP (functional programming). i would recommend "structure and interpretation of computer programs" to learn FP basics. it's written for Scheme, but most things can be easily replicated in any weakly-typed language (worst case scenario, you could install Clojure, which is almost like Scheme, but runs on JVM). anyway, i find combination of FP and plain old procedural style to be the most effective: FP gives you mathematically rigorous theory to reason about the code (algebraic data types, function types, algebraic side effects), and procedural code gives you the speed. in terms of FP, OOP is mostly a partial function application technique and i recommend to think of it as such. Encapsulation and message passing are easy to mess up (that's why people end up with a tonn of setter&getter methods, and interdependent classes), their benefit is dubious in most cases, but they can make code much harder to reason about (can result in unpredictable flow of control).
Sounds like a very interesting challenge. Count on me Huw!
You filmed yourself in green screen and put in front of your own room? That's cool.
Well, I couldn't afford all of Middle Earth plus an army of Orcs! Maybe one day... :-)
Creating objects in any OOL is all about abstraction and not a whole lot more than that. You can catagorize and containerize in an abstract fashion.
yeah, i'm with you here. a lot of oop is about finding an intuitive abstraction over classical iterative programming. at some stage the whole thing gets reduced to assembly running on the chip. i find the areas interesting where the shell-game fails, for example, concurrency can be a huge problem if you have global state or singletons.
Oh and here I thought 25+ years of writing C++/C#/Java/Obj-C meant I knew what OOP was.
I saw a video today which described the comp lang of 1955..Address Programming Language , having aspects of OOP. Made in Russia.
That's a new one on me. I even had to look it up in Wikipedia. Interesting. Thanks.
@@LearnWithHuw Here is a video description of it. I still haven't seen how the actually programming looks like. I think it doesn't use Cyrillic for the main instructions etc. th-cam.com/video/ztcS5hwx9-Q/w-d-xo.html
That definition of OOP sounds a lot like a description of REST.
128k? Luxury! :D
I started out with a VZ-200 -- shoebox with wires, I called it -- with its massive 8kb RAM/ROM (of which around 4.5kb was available for programming, the rest taken up by the BASIC OS. 🙂
I would argue that the Amiga pre-dates MS as a Windowing OS and it was more advanced than the first MS Windows and Mac versions, neither of which had a true preemptive multitasking OS.
Omg BYTE my late Dad, RIP ha like every issue. We had a Timex sinclair zx81 and 1000 before Apple II C
I still miss Byte!
@@LearnWithHuw at 50, I'm going back to school - I'm doing a advanced diploma in game programming.
@@TakaShitake-rt8bz The best sort of programming! Good luck.
I brought in and developed major Smalltalk applications for large corporations including headless ST on and IMB mainframe. Our team was never more productive, easily translating real-world business objects into ST objects. Learning Python now , it's disappointing to learn how inelegant and cryptic it is compared to how highly polished ST is. Bring back Smalltalk!
Smalltalk can be quite addictive. There is a conceptual elegance to it that is far too rare in programming languages.
Ok, this is very interesting and I'm certainly interested to learn more. But... This is a bit like pointing out that the modern usage of the word "meme" isn't what Dawkins meant when he coined it. Sure, that's true but ultimately it doesn't matter, OOP is what it has become.
That caveat aside, I'm keen to learn more.
Which, I would say, is well worth knowing! 🙂
@@LearnWithHuw Yes, completely agree. Very often things start as one thing and evolve into another (and not always for good reasons!) but regardless, it is good to understand the germ of the idea and the problems it was built to solve.
When you have Sun Java 1.0 in your bookcase and you see this title. 😂😂😂😂😂
I’ve only ever played with Smalltalk. But it spoiled me bad, it’s just a pleasure to program in! It holds your hand perfectly through TDD. It’s IDE features make every other language look bad… seriously how has nobody made a versions in other languages that work like Smalltalk?
Edit: Typo
It is addictive, isn't it! There was once another language called Actor that had a very similar environment but with a more Pascal-like syntax. That was around in the very early days of Windows. I'm not aware of any more recent language and IDE that has really been very close to Smalltalk. Unless you count Pharo which is, however, based on Squeak so probably doesn't really count.
PLEASE PLEASE PLEASE PLEASE PLEASE PLEASE PLEASE PLEASE !!!!! GGIVE THE LINK TO THE PAPER ON OOP SHOWN AT 0:23 IN THE VIDEO
It's from the Byte special Smalltalk issue. I have a physical copy but I think there is a pdf online if you search hard!
@@LearnWithHuw I got one on Google... but it had only 1 page... can you tell me how many pages are there in the original...
And , I really tried but that's the only one website I was able to find till now...
@@adityamishra7711 Here it is. archive.org/details/byte-magazine-1981-08
@@LearnWithHuw but this seems to be a book... and I was talking bout that paper on oops by Rob davidaon... xerox Palo alto research ....
@@LearnWithHuw ohh.... it's the whole magazine.. I got the paper on pg 74...
Thanks a lot Sir...
The language Simula 68 was the first OO-language. I'm not sure that the inventors really knew, what they had invented.
I'm loving all this.
Thanks!
3.1 was the real deal. Id love to have had small talk in windows over c++
Hi Huw, I’ve been writing code since 1982 (BASIC on a RML 380Z, running CP/M). Now write a lot of Pascal (Lazarus IDE), PHP and a version of C++ for my Arduino projects. Will definitely be following this series, looking forward to learning a few new wrinkles. Quite a novel concept for a 56 year old!! 😂😂
You're just a youngster! 😃 I may do some more Pascal projects soon too. (Search out my playlist on how to write a collapsible outliner with Delphi. It'll take a bit of work to adapt it to Lazarus but it certainly can be done).
I got some books on smalltalk as well, with the same idea.
The problem with object orientation in general is that programmers said something like:
Programmer: I have 10 ways to program!
Object guru: I have a method that is so revolutionary it will replace all that!
Programmer: Thanks. I have 11 ways to program.
ie., object dudes are a religion and want you to replace all of your programming methods.
My approach to ALL programming problems: keep it simple. Far too many people seem to try to make object orientation as complicated as possible. At heart OOP is really simple. So I always try to keep my code simple too.
man them floopy disks take me back to my school days playing on the good old BBC computers then our school upgraded to the old skool Macintosh lol seams like yesterday with the green screens.
I still love green text on a black screen. Though I'll take orange as a reasonable alternative!
I'll still play with BBC Basic from time to time
Well, my 1st (HOME-) Computer C64 (1984) with Datasette and ROM-BASIC was not enough for graphics programming, so I bought a C64 inside and learned about its graphics hardware and 6510 assembly language for graphic programming. My 2nd Computer became an ATARI 1024 ST (1987) which I used many years. My 1st OOP Language was Turbo Pascal v5.5 which I used for my engineering calculation software programming diplom thesis (1989/1990). Later when working on software development IBM compatible PCs an IBM compatible Pentium Windows 95 PC came into home (1997) followed later by Windows XP Multimedia PC (2003 for nearly 7 years) than replaced by affordable Notebook-PCs Windows VISTA (2007), Windows 7 and Windows 10. Until today I used several programming languages and sometimes one might be surprised what programming concept possibilities (like OOP) can be used in unlucky way, just to to avoid over-complicated or over-engineered...
But aren't messages just functions rebranded? *Edit: I found your video explaining the difference!
Thanks. Yes, it's worth looking at the entire series in which I do my best to explain how Smalltalk's ideas have been mutated into slightly different things in most modern OOP languages: th-cam.com/play/PLZHx5heVfgEvuveKG1T7BBSuDOTHl1eLl.html
Best wishes
Huw
@@LearnWithHuw Thank you!
1:00 man these old machines have character to them!
I agree!
I cannot agree on the need to learn it in the first language that implements this natural law first.
Just start with a high-level language and design it in parallel with UML using known design patterns. 🤷♂️
My dev machine has 128 GiB of memory.
My Amiga had 1 MiB
My first computer had 1KB lol
Used to read your stuff in PC Plus! Seems like a long time ago 😀
I remember reading the edition of "Byte" that was dedicated to Smalltalk, and thought it was an elaborate exercise in odd typography. I'm still not convinced that Object Orientation is more than a fashionable source of religious wars for programmers to fight.
Smalltalk expertise has never been likely to get you a job or make money, and it still isn't,
I agree. OOP makes sense in Smalltalk. Many supposedly OO programs written in other languages might have been as good or better if they were written without OO (except for adventure games, that is - I'm a big fan of object orientation for those! 🙂).
Xerox did try and commercialise it though. It was just so offensively expensive even major corporations couldn’t afford to buy them. That’s why the unix and then DOS stacks won. Because they were in the realms of affordability. Even a Mac which spawned from the Xerox cedar mesa OS was $2500 and was nothing like as comprehensive. It could basically run only MacPaint and MacWrite for the first two years. Didn’t come with its own app making environment such as smalltalk. And xerox machines were all fully networked with Ethernet and full email! It would really take Bill Gates up until windows 95 to even partly catchup. And consumer grade tech to be able to handle it. But xerox did try. But history is always full of weaker less great technology succeeding against more advanced but expensive. The only time Steve jobs at Apple ever understood this lesson was with the iPod and to a lesser extent the early iPads.
The OO programming has practically nothing to do with an asynchronous msg based systems, I say it more aligned with event driven programming. It requires a completely different skill and programming architecture. After nearly 35 years of programming I prefer a standard functional C programming as the easiest and fastest way to deliver applications. User interfaces are best written in Excel or some Windows environment, working off a common database. So nothing really changed 😕 for me at least, banking is very conservative.
@codewithhuw That’s great quote from Kay, but I’d disagree that it doesn’t apply equally to Java and such like. (Except, perhaps, for the late binding of all thing part, since I’m not sure what he meant by that.) As for whether Java (etc) programmers have heard of message passing; when I taught OOP using Java they certainly did. I’ll be viewing the rest of the series to try to better understand the ideas.
Ah, well, I think thoughtful disagreement is always for the good in programming! It's been my experience that many ideas that were once common in programming have tended to be forgotten. Which is one reason why I decided to record this series. I wouldn't say that all those ideas cannot be bettered, but they are worth at least knowing about.
when i heard late binding i immediately thought of dependency injection. things get bound at runtime rather than at compile time, though some one else in this thread seemed to suggest that late binding came from lisp, which makes me think of dynamic scoping.
i think the problem with message passing and languages with such bad concurrency support as java is that if you don't spend a LOT of time wrestling with threads and joins and notify and etc. you're stuck with one thread of execution, at which point message passing becomes tricky, e.g. if object A is waiting on 2 messages before emitting a message, it can't just wait in the middle of a method until the second message arrives, but instead you need to split up receiving the messages into 3 methods and store some state as to which message has already arrived. it gets messy very quickly.
@@EdouardTavinor “Late binding” is a phrase that’s been applied to a lot of things. Dynamic scoping is binding of names to (for lack of a better term) definitions run time. Just about everyone agrees this not a good idea. (Sometimes good ideas are forgotten; but sometimes bad ideas die for good reason.) Late binding is also applied to the binding of types to expressions. This is central to OOP, but different languages take different approaches. The Smalltalk approach is that any variable can refer to object of any class. The Java approach is that a variable refers to only to an object whose class is a subtype of the its static type -i.e., declared type. These are both late binding, but the Java approach allows late binding to be combined with static type checking. The SmallTalk approach is more flexible, but makes static analysis more difficult. As for message passing. What I meant, and what I think Kay meant, is passing messages from one object to another. Nothing to do with concurrency. Message passing as a concurrency model came along a bit later than SmallTalk, around 1978 with Hoare’s first CSP paper. So I don’t think that’s what Kay meant. But what you say about message passing is interesting. What would be an example of a language (or library) that supports concurrent message passing in a way that you suggest?
@@teeesen I think any language which supports an actor model can do it. The most common language would be go. It has excellent support for message passing between (light weight) threads
7:10 Microsoft, nor Apple, did not ever make what Xerox PARC had 60 years ago!
We today have fractions of this technology.
You can look here how Xerox PARC technology looks and work:
th-cam.com/video/AnrlSqtpOkw/w-d-xo.html