Occasional thoughts commited to the internet
Qualities of Quality Software →
What makes good software good? What attributes does it have, how can someone converge on better solutions?
Dealing with Unkown Unknowns →
Unknown Unknowns are things that you don’t know you don’t know, made infamous by Donald Rumsfeld’s comments around the Iraq War. Any sane / rational person can deal with known unknowns, it makes sense to get a grasp on things that you don’t have much context on or are uncertain about. Unknown Unknowns are more insidious and trickier to deal with. The question then is how do you take Unknown Unknowns and make them known and therefore easier to deal with?
Fokal: A Retrospective →
Reflecting on what made me excited about working on Fokal, and what ultimately made scaling the platform nearly impossible.
What Testing Gets You →
Often times testing is viewed as a guaranteed way to ensure your function behaves as you expect it to. However this is far from what is actually happening. A excellent example of this occurred a few years back and I want to take a look at the problem and see what standard testing practices would get you and the best way to approach the problem.
Values in Software Design →
I thought that the value of software comes for its reach, how much a person can accomplish using it. But that may have been a poor and disheartening way to view it. Poor in that it doesn't capture the true value of software and disheartening in that it forces a chase after more features and more complexity. Well designed software isn't really about what one _can_ accomplish while using it, but rather about how enjoyable it is for someone to use.
Computational Proximity →
The goal of the computer industry has been to make computers more accessible. Largely they have succeeded, more people have computers now than at any other point in history, and more individuals have access to smartphones then ever before. The wonderful thing about this access is that anybody with a connection can look the same content. We have made the content accessible, and the computers closer to everyone, but we have failed to allow users to manipulate their own data.
Reframing Goals →
I last wrote about my goals in Mission Briefing back in March of 2017. It's time to reframe that post, with more detail and view the same problems outlined there at a lower altitude.
Woodworking for Quality →
How woodworking also applies to software. As with woodworking the goal of software is not to produce a piece of software, but rather to produce a quality piece of software. Approaching software as a craft improves how we think about software development.
Visual Engineering →
When building some physical product the feedback loop between the creation of a new idea and actually testing it is far to high. Visual Engineering is a rapid feedback environment for validating hunches and answering questions about engineering.
Augmenting Human Intellect →
If you have not had the pleasure of reading Douglass Engelbart’s Augmenting Human Intellect take the time to browse through the concepts he presents, you won’t be disappointed. As in most papers the abstract is the most information dense. Engelbart’s goal is not to develop frameworks for a specific domain on human endeavor, but rather to make a fundamental shift in how individuals see the world, represent their problems and work towards solutions.
Unthinkable Thoughts →
Traditionally we create tools to augment our own faculties. We wanted to fell trees, so we created the saw. We wanted to combine pieces of wood, so we created the hammer. However, we can also augment how we approach those problems in the first place, this is what it means augment human intellect.
Mission Briefing →
What I'd like to do here is give a sense of my own direction and focus. I've gone into this a little bit in my about page, but I'd like to expand a bit on the core themes, explain their importance and my thoughts on how they play out in the market place.
2016 Trends →
In general I think there will be a trend towards raw materials becoming smarter and more efficient as well as computing becoming more contextual.
Information Overflow →
Each of us is walking around with a lot of data. Not only what is physically on our smartphones and laptops, but also what we’ve got backed up to the cloud. The cloud gives us automatic backups, and places to store content by the terabyte, but the current model by which we interact with the cloud is far from optimal.
On Muhammad Ali →
What I didn't know about Ali are perhaps his most defining attributes. He emphasized living a moral life. He was perhaps one of the most prominent people to do so. He used his prominence to advocate for tolerance, understanding and above all a focus on morality.
What we can learn from Unix →
The Unix Philosophy is a wonderfully cohesive way to thing about program execution and composition. Its beauty relies in its simplicity, somewhat unfortunately this is also tied to the fact that Unix is dealing with software on the operating system level. We’re going to explore what the Unix Philosophy is and what it allows us to do when working in a Unix shell. All the while exploring how Unix can guide our attempts to create simpler programs at a higher level of the stack.
Changefiles are an interesting way to approach thinking about updating a piece of software. Allowing for more productive programmers and better libraries that can be tuned for a specific use case.
I've found myself becoming increasingly dissatisfied with calendar applications. Fundamentally, I think they're solving the wrong problem. They should focus how to best spend your time, what’s the most optimal arrangement of these events for my productivity and well-being?
Introduction to Computing →
Programming languages at their core are very simple. There are at most about 6 things a simple programming language needs: iteration, assignment operations, Functions, data types, collections and control flow. I will explain why they exist in the simplest terms I can, while showing examples of different languages and syntaxes. This introduction assumes no knowledge of programming whatsoever.
No Silver Bullet →
Programming, Brooks argues, can be separated into distinct tasks. The first is dealing with incidental complexity, and the second managing essential complexity. Brooks asks, How do we approach incedental complexity, and do those approaches have limits? What is the way forward to make the essential logic easier to manage?
Designing for a use case →
When you develop an application or some software artifact you consider what task the program is to complete. You make a model of who your customers are, and how they interact with your service, and then you proceed to implement that.
Universal Types →
These types generally take the form of persistent trees. This allows people to modify them as they wish and recover from any unexpected changes. I have in mind that these objects will be stored in a collections framework that allows for common operations over most data structures
Symbol Manipulation →
The Chinese Room experiment places Searle inside a room, in which he receives inputs in Chinese and instructions on how to process those inputs in English furthermore Searle has no previous knowledge of Chinese or its grammatical structures. Suppose that Searle and the programmers who are giving him instructions get so good at their respective tasks that Searle’s Chinese outputs become indistinguishable from those of a native Chinese speaker.
Design Principles Behind Smalltalk →
Ingalls describes Smalltalk, a language that “Provides Computer support for the create spirit in everyone”. I love how the paper starts off with the describing the purpose of a language as communicating models between the user to the compuer, the goal is to develop an expressive yet simple language that that empowers its users. Ingalls goes over 17 principles that all languges ought to follow.
VTest is designed to allow you to see bugs that you did not anticipate. It does this by visualizing the results of function, and clustering their results. The goal is to show you the absence of bugs, in order to do this, the functions being tested have to be pure, and testing may be slow for functions that take complex objects.
Beyond Purpose →
Purpose is planned. It is calculated. Our core motivations transcend purpose, they well up inside of us waiting to burst forward. Most of the time it sits there, dormant, as we buy groceries it yawns, and while washing dishes it goes for a nap.
Death shows us the way to life →
I've spent the past few months obsessing over purpose, legacy and meaning. In Job's quotation I gain a glimmer of understanding, which is comforting. Death drives us to ask the hard questions, it forces us out of our complacency. It's ironic that in this way, death is what gives us life, and not the other way round.
America and The Beautiful Game →
I can't help but think that American's have a hard time understanding soccer. American sports emphasize the notion of an individual play, in which specific actions and therefore the entire play can be said to be good or bad. Part of the reason American's - in general - have a harder time understanding the dynamics of soccer.
Mental Models →
I recently had the pleasure of seeing Bjarne Stroustrup speak at an event at NYU. The talk focused on the role of C++ and his role at Morgan Stanley, but what was far more interesting was the manner in which he thought about programming concepts.
The Philosophy of vim →
For those of you who have not heard of the text editor vim, it is a text editor lauded for its adaptability, and supreme extensibility. You can basically do anything you want in vim, and that’s nice, but at the same time it has the steepest learning curve for any piece of software you will encounter.
An endless Void →
I awoke and found myself floating through a void. I was aware of it, but it seemed oblivious of my presence. I seemed to be moving quicker and quicker through space, I don't know how I know this to be true, but I do.
The Timid One →
The pods are all attached to an opaque dome, which lies in the middle of the circle formed by the pods. Inside the dome lies one of the 78 terraformed spaces on the surface of Karive.
Haskell Pattern Matching →
One of the most interesting aspects of computer science are programming languages, they are the means by which the user and the computer interact and in their choices support certain modes of thought.
Space Travel →
I awoke to the constant hum of the engines. These engines were different from ones I had heard before, they normally shook and reverberate throughout the ship, their tone always changing. These new engines were comforting, they had a sort of presence about them. They seemed to be content in their operation.
We shape the tools that shape us →
We build things in order to make us better at what we do, whether that be a saw to cut known materials more quickly or a piece of software to solve a well understood problem. This is well and good, but I can't help but wonder what it would have been like if the tools we created were not the best tools, and now we cannot escape the choices we have already made.
The Brave One →
The brave one thought that there is something honorable about going out in a blaze of glory. Perhaps he was right. Perhaps he wasn't. Either way his parent's spoke of the first expedition to Karive with great admiration.
A Unfortunate Dichotomy →
The majority of cognitive science is curious about the framework of how you work; That is, how your beliefs and intentions are formed, how data points on the retina are translated into thought or how representations about the world get from out there to in here. This is all well and good, but at the end of this quest we arrive at an understanding of how we work in its entirety, that is a complete understanding of how you work and operate, how you walk, talk and move about your world. At that point what you thought makes you you is no longer you, because you are now a system, and moreover a system that can be understood.
The Kids →
They giggled through the tall grass, the echoes of their voices bouncing off the small hills. They didn't stop running, they went and went, over shallow streams and smooth rocks, across large fields and sparse deserts they went. They didn't stop until they reached their destination, but their destination was unknown to them. When it was near they would know.
Coming to grips →
You may be able to say there is no answer, but that doesn't mean that it doesn't scare you, or at least that's the case for me. It's so easy to understand logically that it must be so, but it is still terrifying to look at it. There's a certain sort of deep sorrow that accompanies an idea like this. Something that wells up inside you, questioning everything you've ever thought and everything you've ever done.
Simple things are most impressive →
It seems as though the simple things, those we take for granted, are always the most complex and impressive.
What machine ethics should look like →
There’s a discussion going on over at USV regarding ethical algorithms. I can help but feel that a lot of these posts are missing the crux of the issue; which in this case isn’t really about applications of algorithms’ or differing value systems but rather the implications of having actors which lack values of their own making moral choices'
Hololens and Implications →
For those of you who haven’t heard, Microsoft has just released a new augmented reality device called the Hololens. This is very exciting, primarily because it is the first product that seems to do a good job of merging our reality with a virtual one. Google Glass attempted this, but the feature set seemed rather lacking and the concept of always having an AR device on didn’t really appeal to most. Hololens is going after something different entirely, and that is a more rich merger of the digital and physical, to the point where you are no longer overlaying a screen into the peripheral vision but instead augmenting your surroundings.
The Role of Artificial Intelligence →
The goal of Artificial Intelligence, and in many ways computing as a field, is to remove the busy work. To remove the clerical from the equation leaving us to glean greater insights. In this way, I don't think of Artificial Intelligence as taking away the jobs created by such tasks, instead creating thousands of new fields waiting for people to leap in and explore. This does, however, require a shift in thinking, from looking for steady reliable incomes to experimenting with different fields and taking on projects as opposed to careers. When people choose to devote themselves fully to a new idea and have the help of an AI to aid their research and learning, people will create more, and enjoy their work and the work of others more.
Group B Rally →
Taken during the height of the Group B Rally craze, this photograph shows the true nature of the sport. Walter Röhrl, the two-time world champion, commanding his 350 BHP Audi A2 Quattro through the bends of the Italian Countryside, is truly the epitome of rally. Inside the aluminum roll cage, surrounded by safety gear and spare parts, sit two men wedged into bucket seats and 6-point harnesses. Despite the heat, they wear woolen fire retardant polymer suits; despite the lack of air conditioning, they wear full crash helmets with woolen fire masks underneath. This is no game for mere mortals.