TLDR: BruceEckel.substack.com I’ve noticed that I haven’t been writing here that much lately, and I began to suspect it is because of the necessary ceremony of creating a blog post. Which, really, isn’t that much but I’ve started to see that even the smallest amount can be an impediment. When I began trying to paint, I discovered these impediments, and they’re…
Returning from giving my Polymorphism Unbound presentation at StrangeLoop (not yet available on YouTube, but all the examples and presentation slides are on Github), I found myself dissatisfied. Part of this was certainly my failure to cram a 2-hour presentation into 40 minutes (after cutting it down from a day-long, workshop-length size). The bigger issue was my inability to answer the essential…
I was attempting to assist on an open-source project when I was stopped short by this (names have been changed): class DataPoint: measurement1 = None measurement2 = None measurement3 = None DataPoint was later used like this: d = DataPoint() d.measurement1 = 100 d.measurement2 = 200 d.measurement3 = 300 Why give names and initialization values to class attributes, then when you make an object,…
This is an update to the subsection “Testing Object Equivalence” in the “Operators” chapter of On Java 8. This will appear in the book in its next update. The relational operators == and != work with all objects, but their results can be confusing: // operators/Equivalence.java public class Equivalence { static void show(String desc, Integer n1, Integer n2) {…
Or: How to Remain Sane when Approaching Gradle (with apologies to Hans Dockter). (James Ward and I go into more detail about this article in the Happy Path Programming Podcast). I started using make in the 80’s. When I wrote Thinking in C++, I created a tool I called makebuilder which analyzed the examples extracted from the book and generated an appropriate makefile. make is a dedicated…
The goal of a developer retreat is to stop what you are doing for awhile and explore something new. This usually requires a shift in mindset, and the biggest shift is to suspend the focus around productivity and urgency. It’s important to give up the idea that “we must accomplish something in an amount of time.” Only with the sigh of relief that comes from liberating yourself…
I am the author, with Svetlana Isakova, of Atomic Kotlin. I suspect most people currently alive were introduced to the concept of zero quite early in their development—early enough that they internalized it as a foundational principle and don’t ask questions about it. In addition, many people probably know that zero was invented after the original number systems. The ancient Greeks…
I first heard about value-based pricing from an accountant who was creating a startup based on the idea. He tells a story about consulting for a family who inherited an estate. Because of the accountant’s extensive knowledge, he was able to give advice that saved the family a million or more. However, he only charged for his time, a couple of hours. To save that amount, the story goes, the…
For Atomic Kotlin, I’ve been struggling with an “atom” (very small chapter) during the last couple of months. It’s on object-oriented design, and it brought up a lot of feelings I’ve had for quite awhile about some of the various maxims and design guidelines that have appeared in recent decades, since OO became mainstream. I couldn’t quite put my finger on what…
A recent interview with The Six Figure Developer podcast. I talk about how much I’m enjoying the design of Kotlin while writing Atomic Kotlin and also my experiment with creating a “Teal” software consulting firm.
The recent developer retreat took place August 20-26th. We arranged it because my friend Luciano Ramalho (Thoughtworker and author of the best-selling Fluent Python) was doing a multi-stop trip to the US (from his native Brazil) and had a gap in his schedule, so he wanted to come to Crested Butte and have a retreat. This seems to have become a pattern: someone I know would like to come here, and…
The Hugo static-site generator can work with data files in the form of JSON, yaml or toml. If you place these in the data directory you can access them within Hugo templates (including Hugo shortcodes, which are called directly from a Markdown file) by saying .Site.Data.<filename>, and then use the contents as part of your static-site build. This feature came in handy for the AtomicKotlin.com…
I’ve been experimenting with different forms of events for many years now. Mostly this has been in the form of self-organizing conferences, but in recent years I’ve tried going further, to even less structure. I’ve held a number of “developer retreats” where we had a theme that everyone focused on, and those have been quite interesting and valuable. To be honest, what…
William Gross has posted Give Away Your Code, But Never Your Time, a potential and/or partial solution to the problem of funding open source projects, which I offered a solution for here. I’ve since heard from people pointing out projects that have actually used the “bounty” approach – I was unintentionally describing something that already exists. We’ve been solving…
I found Gophercon to be valuable and it restarted my interest in the Go language. I’m currently working my way through The Go Programming Language Phrasebook and plan to explore ways to call Go from Python (described later in this post). If I hadn’t been attending with my friend Luciano Ramalho it would have been a different experience. The conference is clearly commercial and I had a…
For many years I’ve been getting requests for some kind of sequel to Thinking in Java, 4th Edition. Over two years ago, I finally decided to “pull together something quickly.” After all, how much time have I spent writing about the language? I should be getting pretty fast by now. Self-delusion knows no bounds. No matter how many books I write, every one seems to take longer than…
This year I repeated my strategy of “Don’t go to any recorded sessions,” and also did more volunteering (one of these was at the green room, and again one of the session chairs failed to show up so you’ll see me introducing three of the talks). Dinners In the past I’ve kind of stumbled into dinner groups, but not always. This time I made more of an effort and was…
I gave the closing keynote at PyCaribbean, the Python conference held in Puerto Rico. It’s called Science is What Works, and you can see it on YouTube. The slides are available here. I think a closing keynote should provide perspective and look at things from a higher point of view. By then, the audience is full of technical information and, I believe, looking for relief rather than more…
When you imagine the construction process, it can be easy to think that it’s thread-safe. After all, no one can even see the new object before it finishes initialization, so how could there be contention over that object? Indeed, the Java Language Specification (JLS) confidently states: “There is no practical need for a constructor to be synchronized, because it would lock the object…
Even with the help of Java 7’s Objects.equals(), the equals() method is often written in a verbose and messy fashion. This article shows how you can write a succinct equals() in a format that allows easy checking with visual inspection. When you create a new class, it automatically inherits class Object. If you don’t override equals(), you’ll get Objects equals() method. By…
Because tasks can become blocked, it’s possible for one task to get stuck waiting for another task, which in turn waits for another task, and so on, until the chain leads back to a task waiting on the first one. You get a continuous loop of tasks waiting on each other, and no one can move. This is called deadlock.1 If you try running a program and it deadlocks right away, you can immediately…
This Developer Retreat was held Oct 6-9, 2016. So far the consensus seems to be that Thursday-Sunday is best, because Monday is often a big meeting day at companies (and taking two days at the end of the week is within tolerability). At peak, we had six attendees including myself; on the weekend we had two students from Colorado Mesa University in Grand Junction. There will be another retreat…
Developer Retreats are the most relaxed and low-ceremony events you can imagine, and I’ve been very satisfied with the first two. October 6-9 in Crested Butte CO, we are going to tackle the Elm programming language and make a start on building the Open-Spaces Board UI. You can find full details here. Some of us have been studying Elm a bit already but this will be a group exploration so if…
Synopsis Place a bounty on the next release of an open-source project. Until the bounty is met, those who need/want the newest release must pay an amount in order to get it. Previous releases remain free. Once the bounty is met, the new release becomes free. The Problem of Funding I think open-source is one of the most important cultural and business innovations produced (so far) by the computing…
Pycon was wonderful this year. It was held at the Portland convention center which I like, and there were about 40% women at the conference; my perception was that around the same percentage of women were speaking. I credit Guido Van Rossum with requesting that the conference and the community become more inclusive (his goal is 50%). This is an amazing accomplishment in our field; my usual…
As an exploration of the uncertainties of streams and parallel streams, let’s look at a problem that seems simple: summing an incremental sequence of numbers. There turns out to be a surprising number of ways to do this, and I’ll take the risk of comparing them through timing—trying to be careful, but acknowledging that I might fall into one of the many fundamental pitfalls when…
Here is the opening keynote presentation I gave at the Jet Conference in Minsk, Belarus, last Fall, titled A Language is More Than a Language. For some reason, all my travels in recent years have been exceptional, and this one was no different. Everyone there was really warm and enthusiastic.
(Significantly rewritten 11/25/2015) Based on what I’ve heard, I was surprised to discover that the short answer is “yes, with a caveat that, after explanation, isn’t terrible.” So, a qualified yes. For the longer answer, we must first explore the question of “why, again, are we doing all this?” Abstraction over Behavior The simplest way to look at the need for…
Here are the slides for my opening keynote at the JET Conference in Minsk, Belarus, Sept 28, 2015. Note that many of the slides also have notes. The evening before the conference, I will be presenting “Creating Trust Organizations,” and you can find the slides for that here.
I have a very narrow set of skills, which can be summarized as “delving into a language and helping others understand and (sometimes) solve problems involving that language.” That’s too simple, however – because I ultimately seek “the best” language, for my own personal definition of “best.” I also leave languages behind. While I once knew all the ins and outs of C++, for example, I stopped…
I will be giving the opening keynote at the JET conference in Minsk, Belarus on September 28. The title is “A Language is More Than a Language,” about the necessity for everything that surrounds a programming language. You can find the description here. An interview with me on Opensource.com. The creator of the Elm language about language design philosophy. This makes me want to learn Elm. Kent…
When Linus Torvalds started creating Linux, he managed the code base himself. People would email him patches and he would either include them or not. To maintain the code base – to have checkpoints and be able to back up to an earlier known point – he used a Distributed Version Control System (DVCS) which, as the name implies, is for managing versions. So there were these two…
Pycon is a community-organized conference, and if it’s not already there it’s steadily evolving towards a Teal organization (what I’ve started calling a Trust Organization). It’s not controlled from the top, so lots of people make great things happen. One example I discovered at this conference: some 50 (I think) students are fully sponsored to come to the conference. When you speak at Pycon, you…
While at the Python Conference in Montreal in April, I gave a presentation at VuWall titled The Next Big Challenge: Getting Better Ideas. Here’s the video.
The changes to the second edition include a large number of fixes to the exercises and solutions, corrections from bug reports, and any updates necessary for Scala version 2.11. Some examples are replaced or improved, and much of the book’s prose is improved. If you bought the first edition eBook, you automatically get an update to the second edition. Unfortunately, the number of changes to the…
I just finished the eBook of the 2nd edition of Atomic Scala. The PDF is, of course, the easiest since it gets created directly from Word (before you tell me I should use something other than Word — I have done numerous experiments, and Word still provides the most power of anything I’ve found that allows a single document to produce camera-ready publishable pages, and at the same time…
Websockets change the shape of Internet development by allowing communication both ways — not only can the client send messages to the server, but with a websocket the server can at any time push information to the client (not just when the client decides to connect to the server). In effect this brings us back to the convenient world of desktop applications where the program and the user…
While there are a LOT of things I really like about the Go language, the bottom line is that I don’t use it (mostly because when I studied it the libraries were kind of scarce, something that’s apparently changed a lot). It attracted me, but not enough for me to change over from Python. Go has made some brilliant design decisions. I especially like the built-in features that in most…
”) Photo courtesy JC Leacock Although the Java Posse has ended transmission, we are still having the conference, renamed to the Winter Tech Forum (yes, that’s WTF – because we’re always trying to figure things out). Come create conversation, generate ideas, hack projects, create workshops, ski, snowshoe, snowmobile and experience small-town living. The dates are Feb 23 -…
Here’s a place where Scala does some clever stuff which ultimately might produce a more complicated programming model than one would like. I discovered it while sorting out some issues with the first exercise in the References & Mutability atom in Atomic Scala. I’ll give you the examples directly out of the solution guide — this includes the use of our tiny AtomicScala test…
During my October trip to Europe to speak at Geecon Prague (see here, here and here), I traveled to Scotland to visit friends Jason and Brooke (just to my right in the photograph) and to see the place. While I was there Jason asked me to speak to the brand-new computer club that he was helping with, at the Aberdeen International School where they both teach. The club had decided to use Python as…
I really enjoy solving problems quickly and thoroughly. I especially enjoy solving annoying, repetitive problems that invite human error. The icing on the cake is when I learn some new tricks in the process. This last few days was a flurry of problem-solving and trick-learning. My favorite tricks are small bits of learning that make code easier to write, read and use. A couple of these are…
I’ve wanted to move this programming blog away from Artima for what seems like several years now (Here’s an earlier update on the process). My buddy Bill hasn’t found developing the blogging platform to be of much interest anymore, and in particular he realizes there are many better alternatives at this point. The conversion took a surprising amount of research, partly because…
(This post is an experiment to test a new blogging platform. This version is just straight out of MarkdownPad into Github pages, with no other software on my local machine) Balancing Uncertainty via Concrete Projects The Reinventing Business project is my “own personal Everest to climb,” my project that, once I saw it, I couldn’t unsee. It’s also very unclear whether I will…
Finally! My programming blog officially moves from Artima to this site, as of now. I’ve been poking at this problem for at least two years. It almost seems like I was unconsciously waiting for the right system to sort itself out, and it has: Jekyll on Github pages (with MarkdownPad for editing) has won over my heart and mind. I’m pretty darn happy about this — I had gotten to the…