Book Review: Defying Gravity - The Making of Newton

Defying Gravity: The Making of Newton is a special and unique book. Photographer Menuez and author Kounalakis were provided extensive access to Apple’s Newton team throughout the product’s development over multiple years to document the process of its creation. When they finished writing the book in 1993 at the time of the Newton’s release, it was unclear whether the product would be successful. Of course it was not successful, but the book is still a gripping read as one experiences the ups-and-downs of high pressure product development at John Sculley era Apple. It also provides an incredibly high-bandwidth look into the early 1990s technology industry.

From its experimental layout, to its color palette and cultural references, Defying Gravity is very early ’90s. The photography by Menuez is skillful and reminiscent of his other photo book covering roughly the same period in the tech industry, Fearless Genius. However, this is much more than a photo book. The writing has depth and really takes you on the journey of Newton from idea to launch. The authors balance covering marketing and engineering well. It’s a much better balance than most tech business books achieve, which usually are overly focused on marketing. There are also photos and vignettes that add a personal touch—really letting you step into the shoes of the team members. In particular you really get to know marketer Michael Tchao and engineer Steve Capps, who could arguably be called the book’s protagonists. Interestingly, both of them have enjoyed long-and-illustrious careers in the technology world after Newton.

Defying Gravity’s only fault is that it is perhaps too uncritical. It seems eternally optimistic about the technology, also a very ’90s trait. While this makes for refreshing reading in the age of big-tech pessimism, it also seems like the authors perhaps traded access for spin. All of the Newton team members at Apple are presented in a flattering light. Maybe this is accurate, but it doesn’t always feel genuine. John Sculley in particular, with a quarter-century of further hindsight, could perhaps be better viewed as using the Newton as a desperate grasp for his own legitimacy, than as being a “visionary.”

Defying Gravity also paints a picture of an out-of-control work culture that celebrated continuous 16-hour days. There is something heroic about giving your all to a cause that you really believe in. And that was clearly portrayed throughout the book. However, there is also something troubling about pushing people to work beyond their limits. And for one team member this seems to have led to tragic consequences. I think a book written today would have a more balanced view of the pros-and-cons of such an environment.

Defying Gravity provides a unique look at the high pressure development of an early 1990s computing platform at Apple. It’s worth reading for anyone interested in that era of technology, Apple history, or who enjoys business dramas. It’s unimaginable a writing team today would be provided such unprecedented access, which is unfortunate because the result is really quite enjoyable and insightful.

Posted in , , , , , , , , , | Leave a comment

Book Review: Tim Cook

Leander Kahney deserves credit for taking on the task of writing the first full-length biography of Tim Cook—an important figure who’s successful leadership of the world’s most influential corporation deserves study. Kahney found a similar niche by being the first to write a book on Jony Ive. Unfortunately, both books suffer from a lack of access and a significant amount of superficiliaty around their subjects’ time in leadership at Apple. While well researched (at least from public sources) and competently written, Kahney’s Cook biography delivers little new insight, and comes off largely as a superficial hagiography.

The first third of Kahney’s “Tim Cook” is the most interesting. Kahney was able to elucidate important details about Cook’s early life including his time growing up in Alabama, his time in college, and his early career at IBM. Whie I would have liked even more details, the profile that Kahney builds clearly sets the stage for the work ethic and social values that Tim Cook is so well known for possessing. The roughly middle third of the book about Cook’s rise at Apple is fairly interesting for two reasons: it clearly explains the inventory and supply-chain issues that Apple was suffering from prior to Cook’s arrival and how he went about fixing them from a business perspective, and it includes original interviews with high-level Apple executives about Tim (although these interviews do not provide as much insight as one would hope). The last third of the book is largely about social issues, such as Apple’s stance on the environment and diversity. Doubtless these are important issues to cover, and it’s good that Kahney covered them, but there is so much about Tim Cook as a person and as a manager that are left out. You would think these pages, about Tim Cook as CEO of Apple, would be the most interesting, but instead they are the least because Kahney’s writing is largely driven by well publicized speeches, interviews, and press releases, with little original reporting.

When I read a biography about a business-person, I expect to gain an understanding of how they conduct business. How does Tim Cook manage his team? What is it like to sit in a meeting with him? What is his philosophy on R & D spending? How is he as a negotiator with other companies? Very little of this is in the book. We do get a strong sense that Tim Cook’s social values drive some of his decision making at Apple, but that doesn’t tell us what it’s like to work for Tim Cook, or how Tim Cook behaves as a manager.

While we get some insight into Tim Cook’s early life, Kahney provides little information about Tim Cook’s personal life as an adult. When you read a biography of someone, you do expect to learn about their personal life, because someone’s work life is only half the story. I’m not saying I need to read gossipy lurid details in a biography, but I do want to know what someone’s friends think of them. I do want to know how they interact with their family. However, Kahney seems downright opposed to this sort of reporting (or maybe it’s an excuse for his lack of access). On page 188, Kahney writes: “While researching this book, I didn’t pry into his personal life at all. Cook keeps his private life private, and I’m happy to respect that.”

There are some minor factual errors in the book, that probably only someone like myself, deeply enmeshed in books about Apple, would catch. They don’t take away at all from the overall narrative. For example on page 217 Kahney refers to well known former Apple employee Don Melton as “Doug Melton.” I noticed other similarly small errors. They are not a reason to not buy the book, but they do speak to perhaps the book being a little rushed to market, where it could have used more research into Cook’s business and personal life. Perhaps that’s reading too much into them though.

The subtitle of Kahney’s Tim Cook is “The Genius Who Took Apple to the Next Level.” I really like Cook, and I gained an even greater respect for him from reading this biography. But, Kahney did not provide enough new insight to justify his subtitle calling Cook a “genius.” Perhaps Tim Cook is a genius, but I would’ve liked to have seen more evidence. What I did take away is that Tim Cook has an incredible work ethic. And that in of and itself is inspiring. That someone can achieve so much just through determination, very hard work, extreme competence, and good social values is a great message in and of itself. As for Tim Cook, though, he deserves a more thorough biography.

Posted in , , , , | Leave a comment

Classic Computer Science Problems in Python is Published

My third book, Classic Computer Science Problems in Python, is now published in its final form. You can purchase the print edition from Amazon and Manning. Print copies come with a way to download the eBook for free from Manning’s website. You can also purchase the standalone DRM-free eBook (PDF, .mobi (Kindle), and .epub (Apple Books)) from Manning. As a special bonus for being a reader of this post on my blog, use code ccspkopec to get 40% off on Manning’s website on either edition.

Classic Computer Science Problems in Python teaches computer science problem solving techniques to intermediate and advanced Python programmers. It is a broad book, not a deep book, covering a wide swath of topics ranging from search algorithms to neural networks. You can think of it as a survey book for self-taught programmers without a formal CS education, although it has also been found useful by students and CS educated folks looking to brush up on some of the covered topics. What it is most definitely not is a textbook—it tries to minimize the barrier to entry for readers by using little formal notation and by not requiring much of a mathematical background. It does not aim to be academically rigorous. Instead, it is focused on actual code solutions to the many classic problems presented, and explaining those solutions in plain English.

This is the second book in the Classic Computer Science Problems series, published one year after Classic Computer Science Problems in Swift. I have created a website,, that provides detailed information about both books. If you read the site and your question about the book is still not answered, feel free to reach out to me on Twitter @davekopec. You can also listen to me answer host Tobias Macey’s questions about the book on episode 197 of Podcast init. Finally, I have recorded an episode of Talk Python to Me about the book with host Michael Kennedy that should be appearing in the next couple of months.

The book uses Python 3.7 and type hints throughout. The use of features from the latest version of Python has been praised by most readers. However, the use of type hints in particular was, as expected, controversial. I think the type hints ultimately add clarity, but I agree that they certainly take some getting used to for Python programmers who have not seen them before. To ease the transition, we included a crash course on type hints in Appendix C.

Classic Computer Science Problems in Python has already been very successful. Its pre-sales through Manning’s early access program have exceeded the total sales of my previous two books. In fact, prior to publication, translation rights have already been acquired for the book for the languages Korean, Japanese, and Traditional Chinese. I guess it’s true what they say—third time’s the charm. I’d like to thank all of the readers and all of my supporters, both online and offline. I hope you enjoy the book!

Posted in , , , , | Leave a comment

Building SeaTurtle, a Logo-like Language in Swift and SpriteKit

Today, my programming environment for teaching coding to young people, SeaTurtle, was released on the Mac App Store. SeaTurtle is inspired by the languages that were popular on microcomputers in education for teaching programming in the 1980s—Logo and BASIC. Like these languages, SeaTurtle has a very simple and approachable syntax. And like Logo in particular, SeaTurtle is centered on turtle graphics. My aim in this post is to explain what SeaTurtle is and then give you some insight into how I built it.

While most Logo programs can be fairly easily translated into SeaTurtle, SeaTurtle is not a version of Logo. It has a slightly different syntax, which in my opinion is even simpler. For example, there are no special characters in the SeaTurtle programming language. There are some other simplifications: all variables are global, variables can only hold integers, and variable and subroutine names are case-insensitive. Some experienced programmers might scoff, but SeaTurtle is purposely an extremely simple programming language. These simplifications might seem like they’re teaching bad practices, but the goal is to eliminate whole classes of beginner programming errors and not give them enough features to become overwhelmed.

In my opinion, SeaTurtle is the absolute least featureful and most basic syntax programming language you can have that is still fun to use and can serve its essential function: inspiring young people to learn coding. SeaTurtle has just enough syntax to teach important concepts like variables, loops, subroutines, and arithmetic. It’s not meant to go beyond that. It’s not even meant to be a long-term programming language. It’s simply a first stepping stone to pique a person’s curiosity, so that they then have the interest to pursue a “real” programming language like Python or Java. If you want to checkout SeaTurtle’s syntax, you can see the “Language Reference” section of the SeaTurtle documentation. I have also put together an introductory video tutorial on YouTube.

SeaTurtle is a native Mac app. It has modern features like syntax highlighting, a source code stepper, and animated GIF exports of SeaTurtle drawings. It still probably has some bugs and some useful features that would be beneficial to add. If you have ideas or run into problems, let me know on Twitter @davekopec.

How I Built SeaTurtle

SeaTurtle is a Cocoa app built in Swift. The main intepreter is built in pure Swift using just the Swift standard library and no external dependencies. The turtle graphics runtime is built using SpriteKit. I originally wrote SeaTurtle because I got interested in building an interpreter. The last time I had built a parser was in a compilers class I took in graduate school. It was my lowest grade in graduate school, frankly, probably for some reasons beyond my control, but that’s a story for another time. So, I wanted to retackle this material 7 years later.

I bought the famous Dragon book and started reading it (we used a different book in graduate school). I got some value out of it, but I got more value out of more modern, less academic, more interpreter and less compiler focused books like Writing an Interpreter in Go and Crafting Interpreters, as well as some online tutorials. The tokenizer was fairly easy to write after looking at some other Swift examples. I decided on a handwritten recursive descent parser after studying the alternative options. This seemed like the easiest choice to implement, and there didn’t seem like many downsides for a relatively simple project like this. The best tutorial I found on recursive descent parsers is actually the short article Parsing Expressions by Recursive Descent by Professor Theodore Norvell at Memorial University in Newfoundland, Canada.

The interpreter is written in a protocol-oriented fashion, with one implementer of the protocol being a subclass of NSViewController that manages a SpriteKit scene. SpriteKit was an obvious choice because I had experience in it, and its “actions” (SKActions) for things like movement and rotation of the turtle mapped perfectly to the timed actions I needed for the turtle. There were some frustrations with SpriteKit though during development. In particular, SpriteKit is not good at drawing primitive shapes like lines. There is SKShapeNode but you have to repeatedly add lines to a CGPath and reset the path of the SKShapeNode. The API is not ergonomic to say the least. It would be nice if SpriteKit had a better facility for graphics primitives.

I spent almost as much time as I did writing the actual interpreter on features like animated GIF export, syntax highlighting, printing, and line numbering. Line numbering was surprisingly obtuse for NSTextView. I could’ve used an open source implementation, but I decided to instead write my own as a kind of pride thing. However, I did look at the source code for some open source implementations of line numbering in Cocoa to get an idea of where to start. In the end SeaTurtle doesn’t have any external dependencies beyong Cocoa and SpriteKit.

Like on my last Mac app, Restaurants, I used Cocoa Bindings throughout SeaTurtle. It seems like a technology that’s on its last legs now that Marzipan is a thing. I cannot wholeheartedly recommend it to other developers. It just does not get the attention from Apple that it deserves. The documentation is also not great. The best documentation is really the book Cocoa Programming for Mac OS X, which being built on Swift 1 is quite outdated (hopefully a 6th edition will come out).

Finding an Audience

I don’t know if there is an audience for SeaTurtle. Logo revivals have been very popular on Hacker News the last few months, so my timing seems good. But do people want to use a Mac-native Logo-like language that’s actually lacking some of Logo’s features (subroutines can’t have parameters in SeaTurtle for instance, another simplification, and there are no arrays/lists) but has an even simpler syntax? And that’s not Logo? I guess I will find out shortly, now that SeaTurtle is finally out. I think there might be some software developer parents out there, who are Mac users, who learned on Logo themselves growing up, and think it would be fun to teach their kids programming in a similar environment.

That audience would certainly be a niche. And if there’s not such a niche, then I got to relearn about parsing and interpreters in my spare time, and I have something functional and fun to show for it. If you buy SeaTurtle and find a bug or want a feature added, do get in touch with me.

Posted in , , , , , , , , | Leave a comment

Book Review: Losing The Signal

Losing the Signal is the cautionary, underreported tale of the smartphone technology company Research in Motion (now BlackBerry) rising into the stratosphere and then fairly quickly falling from grace. The journalist authors are competent writers and story tellers who did a significant amount of background research to make the book happen. They interviewed all of the primary players, including extensive interviews with the co-CEOs of Research in Motion for much of the company’s lifespan, Mike Lazaridis and Jim Balsillie.

The authors are more than fair to the primary players, whom they enjoyed strong access to. As much as it tells the story of BlackBerry, Losing the Signal is equally a narrative of the careers of Mike Lazaridis and Jim Balsillie. The beginning of the book starts as almost a hagiography of the former co-CEOs as it weaves in and out of their respective childhoods and early careers in an effusively glowing tone. Through to the end, the authors seem cautious with their criticism of the two. They never quite blame either whole-heartedly, and instead just report the facts as they see it and let the reader make up his own mind. That shows some integrity as journalists, but perhaps it can also be read as conflicting gratefulness for the high level of access that the two provided them.

Not taking a stand can be frustrating for the reader. Throughout its 250 pages, Losing the Signal offers little meta-analysis of the events that are duly reported from an all access vantage point. It can’t help but be surmised that the authors either did not want to offend their subjects, or that they simply did not have a full grasp of some of the more technical issues that brought down the company. The latter certainly does bleed into the pages in parts.

There are numerous errors/misunderstandings/omissions in the book with relation to its coverage of software technologies. For example, on page 169, it says “Lazaridis realized that to match Apple, RIM would have to base its next browser on the freely available technology called WebKit.” However, in the following paragraph, it’s never mentioned that WebKit is actually an open source project sponsored by Apple itself, an ironic point that highlights just how much of a follower BlackBerry had become. Another example, is on page 172: “What made the Java system ideal to run a narrowly focused e-mail device left it ill-suited to handle the more complicated functions of a smarter smartphone.” There’s two problems: 1. throughout the book, the authors don’t seem to understand that Java is a programming language and virtual machine that systems are built from, and refer to it nebulously as an all encompassing system in and of itself and 2. of course Android, the smarter smartphone that is challenging Blackberry during the narrative, is powered largely by software also written in the Java programming language, making the authors blame of Java seem hollow.

There are more technical errors than the two illustrated above—which is always one of the issues when tech business books are written by journalists. It would’ve helped to have had a software specialist do a proofread of the manuscript, especially when software issues were one of the main reasons BlackBerry declined. The authors’ lack of understanding of this critical area is the main flaw of Losing the Signal.

If you do a book search for “BlackBerry” on Amazon, Losing the Signal is the only title related to the company that will come up. The authors deserve praise for their significant research and painstaking interviews to tell this important technology and business story. Losing the Signal is flawed, but it’s probably the best objective narrative of the BlackBerry story that will ever be produced. There just does not seem to be that much interest in BlackBerry now that it has dwindled into its diminutive form of today. That might be because it’s not an American company, or that might be because its contributions seem less important in retrospect. Either way, it’s good that two competent journalists took the time to lay down the historical record for posterity.

Posted in , , , , | Leave a comment

Book Review: Small Fry

Lisa Brennan-Jobs is a good writer: quick-witted, poignant, and observational. Her style reminds me of her aunt’s (Mona Simpson) novels. This is no surprise, since she mentions her in Small Fry as an inspiration. Also of note, is that her aunt has written a fictionalized account of the same period in Lisa’s life as is largely covered by Small Fry. I read that novel, A Regular Guy, when I was a teenager. In fact, I’ve been reading books about Steve Jobs for about two decades now. Like many readers, Steve Jobs is the reason I picked up Small Fry, but Lisa’s journey resonated with me almost as much as the moments about her father.

When you become interested in a historical figure and start watching and reading about them, there’s a cast of characters—their family, their friends—that you’re introduced to along the way. My first exposure to Lisa came through the 1999 film Pirates of Silicon Valley, in which the story of her relationship with her father plays prominently. By the time I had read The Second Coming of Steve Jobs by Alan Deutschman the following year, to me she was an important sidenote—his initial denial of paternity of her following her birth, a significant blemish, for an otherwise heroic figure. The deeper you go in a canon (and there is a Steve Jobs canon—at least fifteen books), the more you become interested in those peripheral characters. And somewhere along the way I became interested in Lisa’s story.

Lisa’s story is intertwined with that of her mother, Chrisann Brennan, Jobs’s high school girlfriend, first love, and financial dependent for a large portion of Lisa’s life. She wrote a memoir a few years ago, The Bite in the Apple. So, in actuality we have three books—A Regular Guy, The Bite in the Apple, and Little Fry—which overlap very significantly in the period and relationships that they capture. Each comes from a different perspective, and I think it was likely important to Lisa that she recapture her own narrative through this memoir. It’s not only a chance to correct the record, but also can provide some kind of closure.

Ostensibly this is more than a memoir about her relationship with her father. It’s a memoir about growing up with that as a backdrop, but I frankly found the first half of the book pretty slow. That’s probably because there’s less of her father in the first half, and the parts with her father were the parts that interested me the most.

Lisa has a tendency to write about events that occurred to her 30 years+ ago in great levels of detail. Levels of detail so great (exact words, imagery, and small happenings) that one has to conclude she either has a photographic memory, or is remembering things in the most dramatic way to suit her narrative. The Bite in the Apple also suffers from this flaw—overly exact ancient memories that cause the reader to question the veracity of their content. It is of course possible that both mother and daughter have incredible memories, but it’s also possible that there’s a little bit of dramatic license in their accounts.

Small Fry is emotionally powerful. The story is dramatic enough that even readers more interested in Lisa’s emotional journey than Steve Jobs will get something out of it. Ultimately, as most memoirs by definition tend to be, it’s also one-sided. The low points with her father seem awful, and the high points seem agreeable and fascinating but dulled. Mona Simpson and Laurene Powell Jobs (Steve Jobs’s widow) have put out a statement questioning Lisa’s harsh treatment of her father. I think, in wanting to recapture her narrative, Lisa did have something of an agenda in writing this book, even if she’s not willing to admit it to herself in its pages. However, that doesn’t mean it’s not a good book, that doesn’t take you on a meaningful emotional journey, and further develop your understanding of Steve Jobs.

Posted in , , | Leave a comment

Book Review: Grant by Ron Chernow

At nearly one thousand pages in length, Grant by Ron Chernow, is a true commitment for a casual reader. Chernow ably navigates the events of Grant’s life as well as the complex history and politics that surround them. One comes away from the book with a firm understanding of the civil war, mid-late 19th century American politics, and the characters that influenced Grant’s life. However, Grant himself remains an enigma for much of the book.

Chernow is one of the ablest biographers of our time. His masterful, award-winning biographies of Alexander Hamilton and George Washington are different from his treatment of Grant. Of the three, Grant, with his everyman persona and significant personal failings, is the most relatable to the average reader. And this comes across in Chernow’s work, but there is also a distinct difference in writing style. Almost emulating his subject, Chernow uses less of the grandiose language and vocabulary ever-present in his earlier books. That does not mean the writing is any less refined. If anything, it is just more approachable.

Chernow chooses the right level of detail with regards to discussing Grant’s family, friends, and rivals. We learn enough about them to understand how they affected Grant, and Chernow does not shy from interesting anecdotes. But the book, despite its length, never gets bogged down in unnecessarily long side stories about minor characters.

What was missing in most of the book was an understanding of Grant’s personality and what it would be like to sit in a room with him. There are constant references to his laconic manner in public, drinking issues, and also mentions that he was a good story-teller in private. However, unlike with Washington, Chernow does not paint the kind of personality portrait that makes you feel like you know what it would be like to talk to Ulysses S. Grant. Chernow tries to express Grant’s personality through his actions, but it’s not enough. Perhaps this is an over-correction for Chernow, who was criticized by some for playing pseudo-psychologist in Washington.

One does get a better sense of Grant’s personality in the final couple of hundred pages. The story stays compelling right through to the end. Perhaps this is because Chernow knows what to include and what to leave out, or perhaps this is because Grant’s life was just so compelling. Either way, Grant is worth reading through to the end. Not only is it a superb history lesson, it’s also a comprehensive portrait of a human enigma that deserves dissecting.

Posted in , , | Leave a comment
Copyright 2012-2019 David Kopec. Powered by Blogger.


Swedish Greys - a WordPress theme from Nordic Themepark. Converted by