How to learn Programming

07-Apr-2019

I was talking to a human today about the journey to become a programmer. I think I set them up for success as I told them to learn the fundamental data structures and algorithms, learn a few languages (especially SQL), and keep up to date on acculturating platforms like reddit, hacker news and lobsters.

It's a form of truth, because this is how I learned to program. It is a lie, because it is only one of the many paths. What is the strongest path? I don't know. Memes suggest that learning c and c++, then focusing on machine learning is the way to go. Or becoming a javascript developer.

I think that learning Lisp will make you strong, but what have I done with it? (Nothing notable.)


Such arrogance

28-Mar-2019

It was deleted, but now it is back. I guess I have to try harder. (Nee-naw-nee-naw It's the Internet Police).

EDIT: Gottem.


Wikipoodia

05-Mar-2019

I found someone's self-written Wikipedia last night. Guy thinks he is a Jazz musician. Watch this space.


Music, Life and Everything

05-Mar-2019

I want to try writing some train of thought and seeing where it goes. I feel that a thing that is not easily discussed is values. I recently read this article written by Tony Abbott on why he left the priesthood, and was struck by what an eloquent writer he is. This is not something that I was expecting as the general discourse that I have seen from him and his companions in the television media over the last decade has been appallingly low-brow. (And so seems to be the impression of Question Time in the Australian Parliament.)

Given that he is in fact an excellent writer, I must assume that in his own way, he is an intelligent person. This road of thinking leads down several paths, and questions, such as, "How can an an intelligent person continuously make choices that I disagree with?", "How does Mr Abbott manage to hold highly cognitively dissonant ideas without showing any signs of internal conflict?", and "Why would a person whom cares enough about morality to try entering the priesthood focus on policies that funnel money from the general Australian population into the hands of the already wealthy?".

I infer from this that he is not mad, or stupid, or even evil, simply that he holds a entirely distinct set of values from myself.

But what are those? Expressing what you believe to be your values (note the careful choice of words), can be fraught with ambiguity and in-determinations.

Once I was asked by an elder colleague as part of a workshop to describe what it is that I value. At the time I rather foolishly said, "I value equality of opportunity." (This is not intrinsically foolish, but in context we were supposed to be discussing which kinds of carrots we find motivating our work.) And even though I said this, I had not really thought through of what a world could really look like with equality of opportunity, or what the consequences of this could be. Given humanities proclivity towards zero sum games, a world like this might be highly competitive and lack diversity.

Such complexity. Trying to introduce something which feels like a good idea may backfire severely (just as so many of our Governments policies seem to). Is it even possible to simply express ones own values with clarity, let alone compare them with the strange-loop in your head that is somebody else's?

And does Tony like Jazz?


Getting Good

20-Sep-2018

I observe that numerous blog posts about getting good are secretly about the author rationalizing why what it is that they do is valuable. I will try and avoid that trap but still write down some of the things that I was thinking about when I was waiting for the computer to compile my code today.

How to get good:

Firstly, have some kind of critical reflective practice. I make no pretense of knowing how to do this as learning reflective practice is a kind of Wicked Problem.

Secondly, "Listen louder than you sing". Which when applying to software development can be said as, "Read more code than you write". This specifically pertains to making sure that you investigate how the code that you intend to be changing is used and what its responsibilities are before you change it.

Thirdly, have mutable opinions. That is, have a model for how you think everything fits together and be prepared to graciously change your model when it is wrong (rather than imposing your model on reality).


Identity: What's that all about?

11-Sep-2018

The quest to discover personal identity has become a mainstream movement. We are teaching courses about identity in our English classrooms. "Identity politics" is an oft-referred to term in certain circles, and more and more focus and value is being placed onto the celebration of our words gender and sexual identities. This ethical movement is certainly a win in that our society is finally acknowledging gays, aboriginal cultures and other disenfranchised minorities.

We are seeing extreme behavior coming from the fringes of some of these movements, especially in the US. Things such as humans identifying as animals, and contentious groups such as Antifa staging violent ideological protests that appear, at least to my foreign and uneducated eyes, to be examples of forming personal or group identities that are not adaptive, or valuable to our march towards human enlightenment.

Identity has become such a notable part of modern society that the term "gender politics" is bandied about to describe the battle over which lingua franca ought to become dominant. Should we allow anyone to choose their own gender identity? Or should each person be compelled to identify as their physical identity?

I am compelled to write this essay, because I feel that there is a tendency for our society to encourage identity exploration and expansions, without ever actually reflecting on or understanding what and identity actually is for. The purpose of this essay is to explore the purpose of identity in an abstract sense. The example of "gender identity" is only mentioned to acknowledge how emotionally laden this topic is. This author would rather avoid the typical vitriol that comes with opining the utility of personal or gender identity, but notes that typically debates around these issues do not choose a common frame of reference.

Much energy is poured into choosing the correct identity, and debating the reasonableness of a given identity. Saying "Humans should be allowed to identify as animals" at a party is bound to evoke a response. It is dryly observed that little of this energy is likely to discuss what identity is actually for.

To reiterate, this essay is not an attempt to form, portray or criticize any specific stance on gender identity. This essay only acknowledges these issues in order state that this essay is in no way an attempt to engage in the house-fire that is gender politics. :)

In my opinion, the purpose of identity in the abstract sense is often ignored when discussing identity. (Be it gender identity, or differentiating between cats and dogs.)

So What Is Identity?

As usually it's pretty difficult to discuss some word without defining it. Just remember to leave your Principle of Charity hat on here because this is a bit of a sensitive topic.

In this essay, the definition of "Identity" is:

Identity determines what a person or thing is and what characteristics it has. It is a word, or symbol that points towards some blob in our vision and says, "That furry meat-bag is a 'cat.'"

In practice, this means that a given identity such as "cat" or "dog" will have a bunch or characteristics associated with it (like "four legs", "barks") that can be observed, or inferred from observations.

What is identity for?

I am arguing that there are multiple uses of identity. Identity exists so that we can quickly determine how to deal with things that we think that we have seen before. Specifically, I am arguing that "Identity is an Optimization", in that it in each case where we apply identities to something it is in order to simplify and therefore speeds up our decision making. To do this, I will describe three ways in which we use identity to make decisions.

Identity to distinguish objects in language

The most simplistic form of identities are those that we apply to every day objects. In this, the meaning of identity is almost indistinguishable from the meaning of 'symbol', 'label' or 'word', in that we will identify some object or thing with a name.

This is all very abstract, so I will give an example. When we observe a certain furry, mouse-eating, walking sack of meat, we will all probably identify it as a "cat".

This may seem like a redundant or pointless thing to be writing about given that it is so fundamental, and as language-users, surely we are all familiar with this concept already. I believe that it is not, as this is an important frame of reference for when we are discussing personal and cultural identities. It is important, I think, not to to forget that when we are speaking of identity we are talking about a fundamental part of language. Any rules, cultural understanding, or identity politics that we happen to be engaging in to decide how identity should work needs to consider that outside of a few contentious ideas, identity is something that must be taken for granted in our day to day lives, lest we be unable to communicate with each other.

When we give a complex structure an identity this optimizes our thinking and communication. For example:

  • It is faster to say "cat" than "That furry meat-bag".
  • It is faster to say "man" than "person with XY genes".

Shared Identification

But identity is not just an optimization for our personal thinking, it is also a social optimization. That is, identities optimize our interactions with other people. The most obvious example of this is our shared language.

Any two English speakers will have shared meanings for what the word "cat" means. This shared meaning will not be perfect. This author may have very different associations with this word to the reader. For example, should a person who knows the authors relationships with the word "cat" ask, "Come over to my house so that you can pet my cat", the author who is allergic to cats, would be offended that this person wants to do him harm.

Less abstractly, this is applied to finding like-minded people. Simply by bagging a whole bunch of words into one label, we can quickly decide whether or not we want to hang out with someone or reject them based on what labels or identity we perceive them to have.

For example, "Fred" may have had valuable and empowering personal experiences when he bullied certain people at his school. He is able to apply a negative identity like "nerd" to identify those whom are more likely to give him a rewarding experience when he harasses them. When he meets new people, he will able to quickly describe this aspect of himself in a profoundly short sentence: "I hate nerds". This signalling allows him to quickly find people like-mind to himself allowing him to continue enjoying his learned reward-feedback loop.

In this way, our capacity to share identities with others, first enables, then (as we have more and more distinctive identities) optimizes our efficiency of communication.

Personal Identity

Beyond the identification we find in objects and community, most of us will have a personal identity. This has multiple facets and people like Freud try to categorize the various aspects of this with words like "Ego" and "Id". This is most used meaning of identity in current discourse, and it is considered with various degrees of seriousness. Reading material defining this aspect of identity is extensive, but so that we are all on the same page, I will describe what I think personal identity is.

A personal identity describes behavior, outcomes and relationships that we believe that we ought to maintain to fulfill that identity. For example, a self-identifying football fan will believe that true football fans ought to collect football memorabilia, watch football games, and know a lot of things about football.

In many cases, we will choose a personal identity to show what it is that we are already doing, but more interestingly, we will often choose an identity that we aspire to have rather than one that we naturally fulfill. This is more interesting because in this case, we will find ourselves acting in ways that we would not otherwise act in order to fulfill that role. For example a person that wants to be able to identify as a sports star will go through a grueling exercise regime for many years to achieve the identity that they are seeking out, and when they become a sports star, will maintain this regime.

In this case, the desire to have a personal identity is defining our desires, and we are using personal identity as the basis of our decision making. Because of this, I am arguing that personal identity itself is defining our choices. Asking an aspirational question "What would Michael Jordan do?" is a shortcut to deciding what it is that we want. Instead of deciding what to do in the afternoon based on physical desire, or careful reflection, many of us choose to go out for a run without really needing to have a deep think about why we'd bother.

This is the most sensible form of mental laziness, since it wouldn't do for us to be reevaluating our lives each day. And this applies to more than just maintaining healthy fitness. I would argue that a self-identifying musician plays music, because they think of themselves as a musician, and our geeks and nerds read books for the same reason. That is, the identity begets the behavior rather than the other way around.

As with all of the heading above, I declare that this form of mental laziness is in fact, and optimization to our thinking, since it enables us to more efficiently decide how we will behave. I note, that often attempting to maintain a valuable external identity makes us unhappy. (For example, someone who is aspiring to be successful may tend towards depression).

Commonalities

In each of the cases above you will see that things that we "know" about identities help us make snap decisions in our day to day lives. This could be called System 1 thinking in that the associations and decisions we make with identities are a form of pattern recognition. These decisions are making trade-offs between efficiency and avoiding bias.

Trade-offs in identity

"Premature optimization is the root of all evil" (D. Knuth), and in this respect dishing out labels that do not fit is a big problem. When you call someone with two heads a Tasmanian when they are born in Queensland, they could get offended.

There is a trade-off known as the "Speed-Quality" trade-off. When you are trying to make something new, you can either make it quickly or spend more time on it to make it high quality. Using identities is an example of this trade-off. Broad-stroke identities are useful as they can be applied to many things, but not as accurate as a fine grained identity.

A clear example of this is to compare the two identities "Eshay Lad" and "Australian": "Australian" is a form of national identity that describes over twenty million people. When one is called "Aussie", you can not even tell if they are of European, Asian, Aboriginal or whatever other cultural background. This makes "Australian" a pretty bad predictor of personality and behavior.

"Eshay Lad" is an identity with a much clearer definition: It is a young white male, who likes to wear striped polo-shirts and speak in pig-latin as an advertisement of his shared dissident culture. This is a much higher-fidelity description, but it has a problem: unless you have lived in Australia for a number of years, (and even then) you probably have never heard of an Eshay Lad.

This is the other side of this Speed-Quality coin. It is impractical to learn many distinct identities.

Then what are the aspects of a useful identity?

The main implication of this, is that identity is a practical language tool and it needs to be treated like one. That is, we ought to treat identity like we would treat our other tools. We should focus on making our cultural and personal identities safe and and ethical, without making them unusable.

When we are choosing our personal identities, we should keep them small. Paul Graham wrote an interesting essay on this. This way we will not be making uninformed decisions that keep us stupid, and closed to change.

I think that prescriptive-style gatekeepers that want everyone to memorize the special words for their special personal identity ought to leave alone. It is impractical, tragedy of the commons behavior. If it was truly ethical to learn each persons identity concepts then the ethical person would not have time to sleep for want of learning seven billion names.

Instead of focusing on deciding what labels we would like others to give us, humanities energy might be better invested in other things. Which things, I cannot be sure, but surely things that are not guaranteed to lead to separation, conflict and power struggles.

If gender were a tool, it would be a power saw as it when you are trying to cut the population into halves it sends bits of shrapnel everywhere.


Another year, another blog post

03-Sep-2018

It's been another year, so I suppose it is time for another blog post. Exciting times call for exciting changes, so I've made the background some kind of weird lavender colour that looks grotty when you turn Redshift) on.

This year, I learned... What? I joined a choir called Vox Canvas, and kept hammering away at the keyboard in the office. I caused some bugs and fixed more.

Here is my recommendation. Don't roll your own ORM. But if you have to, don't let people implement bespoke cache invalidation on top of it. There are just too many different data interactions that can happen. You will wind up spending months and months of your life just debugging shit, or edge-case after edge-case as you ham your way through one million data-integrity errors.

As a reward for reading this shit, how about you go listen to some weird throat-singing drone I recorded.


Books that I have read and remember

07-Oct-2017

Just for fun I wrote down a list of most of the fantasy novels that I read in my youth. Here it is, in no particular order, arranged by authors:


Thus Spake Zarathustra

23-Aug-2016

StumbleUpon is a fantastic website, and probably the best knowledge aggregation on the web. Let explain why - first by defining virtuous knowledge aggregation, and then via a comparison of StumbleUpon with other sites.

As is my usual overthink, I bucket everything into categories but then get bored and don't actually evaluate the outcome.

Here are the sites I compare StumbleUpon to:

  1. StumbleUpon
  2. Reddit
  3. YCombinator
  4. Wikipedia

These sites allow the community to index web pages and articles, so users can be both entertained and informed.

These sites are all virtuous or unvirtuous regarding several categories. These categories are:

  • Entertainment - What is the most fun that can be had reading the website?
  • Currentness - How recent are links?
  • Bias - How biased are links, on average.
  • Shitness - How much time do you spend parsing poo?
  • Positive Vibes - What is the general tone of links?

Isn't "spake" a fun word?


Snarky Cairo Etc.

07-Apr-2016

I'm tipsy, and listening to Snarky Puppy. And it is good. Speaking of Good, using 3D graphics API's for Common Lisp sure is a pain in the arse. Yes. Yes it is. Sure Common Lisp is an amazing language. I have spent most of this week trying to get things to build though, and that is not time well spent.

So what ought to be good? Sketch is a pretty cool idea. Or it would be if any of the examples would actually run. There is something to be said for having things work out of the box. Clinch also looks extremely cool. But the tutorial code does not work as described with the current version in QuickLisp. (The SDL window appears and the background turns blue, but no white triangle. I ought to raise a bug report, but I am sure the developers secretly know what they are doing.)

You know what does work though? The CL-SDL2 examples. That's pretty good right? I've been playing with these. Fun. What more could you want? How about a goal? The goal is to draw pretty pictures using only Common Lisp. Why Common Lisp? Because it doesn't hurt my hands. (Only my brain). And the debugger is pretty great too, unlike my limited experience debugging Clojure, which was not so good. -> This is because of stack-trace from hell see?

It is a shame that no programming language is perfect. There is something to be said for immutable by default data structures. I am dying for them with the work I am currently doing. There is also something to be said for being being able to hack using mutable structures. There is something to be said for macros, but also something to be said for having a stronger type system. Where is the balance though?

So I am listening to Snarky Puppy, and they are good. It is time to sleep.