'software' Episodes

The App Store

     1/6/2020

Picture this. It’s 1983. The International Design Conference in Aspen has a special speaker: Steve Jobs from Apple. He’s giving a talk called “The Future Isn’t What It Used To Be.” He has a scraggly beard and really, really wants to recruit some industrial designers. In this talk, he talked about software. He talked about dealers. After watching the rise of small computer stores across the country and seeing them selling, and frequently helping people pirate, apps for their iconic Apple II, Steve Jobs predicts that the dealers were adept at selling computers, but not software. There weren’t categories of software yet. But there were radio stations and television programs. And there were record stores. And he predicted we would transmit software electronically over the phone line. And that we’d pay for it with a credit card if we liked using it. If you haven’t listened to the talk, it’s fascinating. https://www.youtube.com/watch?v=KWwLJ_6BuJA In that talk, he parlayed Alan Kay’s research into the DynaBook while he was at Xerox PARC to talk about what would later be called tablet computers and ebooks. Jobs thought Apple would do so in the 80s. And they did dabble with the Newton MessagePad in 1993, so he wasn’t too far off. I guess the writers from Inspector Gadget were tuned into the same frequency as they gave Penny a book computer in 1983. Watching her use it with her watch changed my life. Or maybe they’d used GameLine, a service that let Atari 2600 owners rent video games using a cartridge with a phone connection. Either way, it took awhile, but Jobs would eventually ship the both the App Store and the iPad to the masses. He alluded to the rise of the local area network, email, the importance of design in computers, voice recognition, maps on devices (which came true with Google and then Apple Maps), maps with photos, DVDs (which he called video disks), the rise of object-oriented programming, and the ability to communicate with a portable device with a radio link. So flash forward to 1993. 10 years after that brilliant speech. Jobs is shown the Electronic AppWrapper at NextWORLD, built by Paget Press. Similar to the Whole Earth Catalog, EAW had begun life as a paper catalog of all software available for the NeXT computers but evolved into a CD-based tool and could later transmit software over the Internet. Social, legal, and logistical issues needed to be worked out. They built digital rights management. They would win the Content and Information Best of Breed award and there are even developers from that era still designing software in the modern era. That same year, we got Debian package managers and rpm. Most of this software was free and open source, but suddenly you could build a binary package and call it. By 1995 we had pan, the Comprehensive Perl Archive Network. An important repository for anyone that’s worked with Linux. 1998 saw the rise of apt-get. But it was 10 years after Jobs saw the Electronic AppWrapper and 20 years after he had publicly discussed what we now call an App Store that Apple launched the iTunes Store in 2003, so people could buy songs to transfer from their Mac to their iPod, which had been released in 2001. Suddenly you could buy music like you used to in a record store, but on the Internet. Now, the first online repository of songs you could download had come about back in 93 and the first store to sell songs had come along in 98 - selling MP3 files. But the iTunes Store was primarily to facilitate those objects going to a mobile device. And so 2007 comes along and Jobs announces the first iPhone at the Apple Worldwide Developers Conference . A year later, Apple would release the App Store, the day before the iPhone 3G dropped, bringing apps to phones wirelessly in 2008, 25 years after Jobs had predicted it in 1983. It began with 500 apps. A few months later the Google Play store would ship as well, although it was originally called the Android Market. It’s been a meteoric rise. 10 years later, in 2018, app revenue on the iOS App Store would hit 46.6 billion dollars. And revenue on the Google Play store would hit 24.8 billion with a combined haul between $71 billion and 101 billion according to where you look. And in 2019 we saw a continued 2 digit rise in revenues, likely topping $120 billion dollars. And a 3 digit rise in China. The global spend is expected to double by 2023, with Africa and South America expected to see a 400% rise in sales in that same time frame. There used to be shelves of software in boxes at places like Circuit City and Best Buy. The first piece of software I ever bought was Civilization. Those boxes at big box stores are mostly gone now. Kinda’ like how I bought Civilization on the App Store and have never looked back. App developers used to sell a copy of a game, just like that purchase. But game makers don’t just make money off of purchases any more. Now they make money off of in-app advertising and in-app purchases, many of which are for subscriptions. You can even buy a subscription for streaming media to your devices, obviating the need for buying music and sometimes video content. Everyone seems to be chasing that sweet, sweet monthly recurring revenue now. As with selling devices, Apple sells less but makes much, much more. Software development started democratically, with anyone that could learn a little BASIC, being able to write a tool or game that could make them millions. That dropped for awhile as software distribution channels matured but was again democratized with the release of the App Store. Those developers have received Operating systems, once distributed on floppies, have even moved over to the App Store - and with Apple and Google, the net result is that they’re now free. And you can even buy physical things using in-app purchases, Apple Pay through an Apple credit card, and digital currency, closing the loop and fully obfuscating the virtual and the physical. And today any company looking to become a standard, or what we like to call in software, a platform, will have an App Store. Most follow the same type of release strategy. They begin with a catalog, move to facilitating the transactions, add a fee to do so, and ultimately facilitate subscription services. If a strategy aint broke, don’t fix it. The innovations are countless. Amazon builds services for app developers and sells them a tie to wear at their pitches to angels and VCs. Since 1983, the economy has moved on from paying cash for a box of software. And we’re able to conceptualize disrupting just about anything thanks to the innovations that sprang forth in that time where those early PCs were transitioning into the PC revolution. Maybe it was inevitable without Steve Jobs right in the thick of it. Technological determinism is impossible to quantify. Either way, app stores and the resultant business models have made our lives better. And for that we owe Apple and all of the other organizations and individuals that helped make them happen, our gratitude. Just as I owe you mine for tuning in, to yet another episode, of the history of computing podcast. We are so lucky to have you. Have a great day!


Java: The Programming Language, Not The Island

     9/25/2019

Welcome to the History of Computing Podcast, where we explore the history of information technology. Because understanding the past prepares us for the innovations of the future! Today we’re going to look at Java. Java is an Indonesian island with over 141 million people. Java man lived there 1.7 million years ago. Wait, wrong java. The infiltration of coffee into the modern world can really trace its roots to ancient coffee forests on the Ethiopian plateau. Sufis in Yemen began importing coffee in the 1400s to make a beverage that would aid in concentration and as a kind of spiritual intoxication. Um, still the wrong java… Although caffeine certainly has a link somewhere, somehow. The history of the Java programming language dates back to early 1991. It all started at Sun Microsystems with the Stealth Project. Patrick Naughton had considered going to NeXT due to limitations in C++ and the C APIs. But he stayed to join Stealth, a secret team of engineers led by a developer Sun picked up from Carnegie Mellon named James Gosling . Stealth was formed to explore new opportunities in the consumer electronics market. This came up when Gosling was writing a program to port software from perf to vax and emulating hardware as many, many, many programers had done before him. I wonder if he realized when he went to build the first Java compiler and the original virtual machine code that would go on to write a dozen books about Java and it would consume most of his professional life. I wonder how much coffee he would have consumed if he had. They soon added Patrick Sheridan to the team. The project was later known as the “Green” project and with the advent of the web, somewhat pivoted into more of a web project. You see, Microsoft and the clones had some runaway success but Apple and other vendors were a factor in the home market. But Sun saw going down market as the future of the company. They added a few more people and rented separate offices in Menlo Park. Lisa Friendly was the first employee in the Java Products Group. Gosling would be lead engineer. John Gage would direct the project. Jonni Kanerva would write Java FAQ1. The team started to build C++ ++ —. Sun founder Bill Joy wanted a language that combined the the best parts of Mesa and C. In 1993, NCSA gave us Mozilla. That Andreessen guy was on the news saying the era of the desktop was over. These brilliant designers knew they needed an embedded application, one that could even be used in a web browser, or an applet. The language was initially called “Oak,” but was later renamed “Java” in 1995, supposedly from a list of random words but really due to massive consumption of coffee imported from the island of Java. By the way, it only aids in concentration up to a point. Then you get jumpy. Like a Halfling. It took the Java team 18 months to develop the first working version. It is unknown how much Java they drank in this time. Between the initial implementation of Oak in the fall of 1992 and the public announcement of Java in the spring of 1995, around 13 people ended up contributing to the design and evolution of the language. They were going to build a language that could sit on top of the operating systems on the market. This would allow them to be platform agnostic. In 1995, the team announced that the evolution of Mosaic, Netscape Navigator, would provide support for Java. Java gave us Write Once, Run Anywhere platform independence. You could run the code on a Mac, on Solaris, or on Windows. Java derives its syntax from C and many of the object oriented features were influenced by C++. Several of Java’s defining characteristics come from—or are responses to—its predecessors. Therefore, Java was meant to build on these and become a simple, object-oriented, distributed, interpreted, robust, secure, architectural neutral, portable, high performance, multithreaded, and dynamic language. Before I forget. The "Mocha Java" blend pairs coffee from Yemen and Java to get a thick, syrupy, and highly caffeinated blend that is often found with a hint of cinnamon or clove. Similar to all other computer language, all innovation in the design of the language was driven by the need to solve a fundamental problem that the preceding languages could not solve. To start, the creation of C is considered by many to have marked the beginning of the modern age of computer languages. It successfully synthesized the conflicting attributes that had so troubled earlier languages. The result was a powerful, efficient, structured language that was relatively easy to learn. It also included one other, nearly intangible aspect: it was a programmer’s language. Prior to the invention of C, computer languages were generally designed either as academic exercises or by bureaucratic committees. C was designed, implemented, and developed by real, working programmers, reflecting how they wanted to write code. Its features were honed, tested, thought about, and rethought by the people who actually used the language. C quickly attracted many followers who had a near-religious zeal for it. As such, it found wide and rapid acceptance in the programmer community. In short, C is a language designed by and for programmers, as is Java. Throughout the history of programming, the increasing complexity of programs has driven the need for better ways to manage that complexity. C++ is a response to that need in C. To better understand why managing program complexity is fundamental to the creation of C++, consider that in the early days of programming, computer programing was done by manually toggling in the binary machine instructions by use of the front panel or punching cards. As long as programs were just a few hundred instructions long, this worked. Then came Assembly and Fortran and then But as programs grew, assembly language was invented so that a programmer could deal with larger, increasingly complex programs by using symbolic representations of the machine instructions. As programs continued to grow, high-level languages were introduced that gave the programmer more tools with which to handle complexity. This gave birth to the first popular programing language; FORTRAN. Though impressive it had its shortcomings as it didn’t encourage clear and easy-to-understand programs. In the 1960s structured programming was born. This is the method of programming championed by languages such as C. The use of structured languages enabled programmers to write, for the first time, moderately complex programs fairly easily. However, even with structured programming methods, once a project reaches a certain size, its complexity exceeds what a programmer can manage. Due to continued growth, projects were exceeding the limits of the structured approach. To overcome this problem, a new way to program had to be invented; it is called object-oriented programming (OOP). Object-oriented programming (OOP) is a programming methodology that helps organize complex programs through the use of inheritance, encapsulation, and polymorphism. In spite of the fact that C is one of the world’s great programming languages, there is still a limit to its ability to handle complexity. Once the size of a program exceeds a certain point, it becomes so complex that it is difficult to grasp as a totality. While the precise size at which this occurs differs, depending upon both the nature of the program and the programmer, there is always a threshold at which a program becomes unmanageable. C++ added features that enabled this threshold to be broken, allowing programmers to comprehend and manage larger programs. So if the primary motivation for creating Java was the need for a platform-independent, architecture-neutral language, it was to create software to be embedded in various consumer electronic devices, such as microwave ovens and remote controls. The developers sought to use a different system to develop the language one which did not require a compiler as C and C++ did. A solution which was easier and more cost efficient. But embedded systems took a backseat when the Web took shape at about the same time that Java was being designed. Java was suddenly propelled to the forefront of computer language design. This could be in the form of applets for the web or runtime-only packages known as Java Runtime Environments, or JREs. At the time, developers had fractured into the three competing camps: Intel, Macintosh, and UNIX. Most software engineers stayed in their fortified boundary. But with the advent of the Internet and the Web, the problem that the portability of software between platforms suddenly got important in ways it hadn’t been since the forming of ARPANET. Even though many platforms are attached to the Internet, users would like them all to be able to run the same program. What was once an irritating but low-priority problem had become a high-profile necessity. The team realized this pressing need and later made the switch to refocus Java from embedded, consumer electronics to Internet programming. So while the desire for an architecture-neutral programming language provided the initial spark, the Internet ultimately led to Java’s large-scale success. So if Java derives much of its character from C and C++, this is by intent. The original designers knew that using familiar syntax would make their new language appealing to legions of experienced C/C++ programmers. Java also shares some of the other attributes that helped make C and C++ successful. Java was designed, tested, and refined by real, working programmers. Not scientists. Java is a programmer’s language. Java is also cohesive and logically consistent. If you program well, your programs reflect it. If you program poorly, your programs reflect that, too. Put differently, Java is not a language with training wheels. It is a language for professional programmers. Java 1 would be released in 1996 for Solaris, Windows, Mac, and Linux. It was released as the Java Development Kit, or JDK, and to this day we still refer to the version we’re using as JDK 11. Version 2, or 1.2 came in 1998 and with the rising popularity we had a few things that the burgeoning community needed. These included event listeners, Just In Time compilers, and change thread synchronizations. 1.3, code named Kestrel came in 2000, bringing RMI for CORBA compatibility, synthetic proxy classes, the Java Platform Debugger Architecture, Java Naming and Directory Interface in core libraries, the HostSpot JVM, and Java Sound. Merlin, or 1.4 came in 2002 bringing the frustrating regular expressions, native XML processing, logging, Non-Blocking I/O, and SSL. Tiger, or 1.5 came in 2004. This was important. We could autobox, get compile time type safety in generics, static import the static part of a class, annotations for declarative programming, and run time libraries were mapped into memory - a huge improvements to how JVMs work. Java 5 also gave us the version number change. So JDK 1.5 was officially recognized as Java 5. JDK 1.6, or Mustang, came in 2006. This was a big update, bringing monitoring and management tools, compiler access gave us programmatic access to javac and pluggable annotations allowed us to analyze code semantically as a step before javac compiles the code. WebStart got a makeover and SE 6 unified plugins with webstart. Enhanced XML services would be important (at least until he advent of son) and you could mix javascript up with Java. We also got JDBC 4, Character Large Objects, SwingWorker, JTable, better SQL datatypes, native PKI, Kerberos, LDAP, and honestly the most important thing was that it was stable. Although I’ve never written code stable enough to encounter their stability issues… Not enough coffee I suppose. Sun purchased Oracle in 2009. Wait, no, that’s one of my Marvel What If comic book fantasies where the world was a better place. Oracle bought Sun in 2009. After ponying up $5.6 billion dollars, Oracle had a lot of tech based on Sun products and seeing Sun as an increasingly attractive acquisition target by other companies, Oracle couldn’t risk someone else swooping in and buying Sun. With all the turmoil created, it took 5 years during a pretty formative time on the web, but we finally got Dolphin, or 1.7, which came in 2011 and gave us compressed, 64-bit pointers, strings in switch statements, the ability to make a binary integer and use underscores in literals, better graphics APIs, more cryptography algorithms, and a new I/O library that gave even better platform compatibilities. Spider, or 1.8, came along in 2014. We got the ability to Launch JavaFX application Jars, statically-linked JNI libraries, a new date an time API, annotation for java types, unsigned integer arithmetic, a JavaScript runtime that allowed us to embed Javascript code in apps - whether this is a good idea or not is still tbd. Lambda functions had been dropped in Java 7 so here we also got lambda expressions. And this kickstarted a pretty interesting time in the development of Java. We got 9 in 2017, 10 and 11 in 2018, 12, 13, and 14 in 2019. Of these, only 8 and 11 are LTS, or commercial Long Term Support releases, basically meaning we got the next major release after 8 in 2018 and according to my trend line should expect the next LTS in 2021 or 2022. JDK 13, when released later in 2019, will give us text blocks, Switch Expressions, improved memory management by returning unused heap memory to the OS, improves application class and data sharing, and brings back the legacy socket API. But it won’t likely be an LTS release. Today there are over 45 billion active Java Virtual Machines and java remains arguably the top language for micro service, ci/cd environments, and a number of other use cases. Other languages have come. Other languages have gone. Many are better in their own right. Some are not. Java is not perfect. It was meant to reduce complexity. But as languages evolve they become more complex. A project with a million lines of code is monolithic and probably incorporates plugins or frameworks like spring security as an example, that make code even more complex. But Java is meant to reduce cyclomatic complexity, to allow for a language that is simple enough for a professional to pick up quickly and only be as complex as the quality of the code being compiled. I don’t personally love Java. I respect it. And I adore high-quality programmers and their code in any language. But I’ve had to redo so much work because other languages have come and gone over the years that if I were to be starting a new big monolithic web-app today, I’d probably use Java every time. Which isn’t to say that Java isn’t useful in micro-service architectures. According to what’s required from the contract testing on a service, I might use Java, Go, node, python or even the formerly hipster Ruby. Although I don’t love drinking PBR… If I’m writing an Android app, I need to know Java. No matter what the lawyers say. If I’m planning on an enterprise webapp, Java needs to be in the conversation. But usually, I can do the work in a fraction of the time using something like python. But most big companies speak Java. And for good reason. Because of the write once run anywhere approach and the level of permissions a JRE needs, there have been security challenges with running Java on desktop computers. Apple deprecated Java on the Mac in 2010. Users could still instal lications and is the gold standard for those. I’m certainly not advocating going back to the 90s and running Java apps on our desktops any more. No matter what you think of Java, one thing you have to admit, the introduction of the language and the evolution have had a substantial impact on the IT industry and it will continue to do so. A great takeaway here might be that there’s always a potential alternative that might be better suited for a given task. But when it comes to choosing a platform that will be there in a decade or 3, getting support, getting a team that can scale, sometimes you might end up using a solution that doesn’t immediately seem as well suited to a need. But it can get the job done. As it’s been doing since James Gosling and the rest of the team started the project back in the early 90s. So thank you listeners, for sticking with us through this episode of the History of Computing Podcast. We’re lucky to have you.


(OldComputerPods) ©Sean Haas, 2020