The first law of software – and life – is change. It doesn’t matter how easy a programming language or tool makes things. If your code isn’t fluid – if your data and algorithms can’t flow between components – you will always run into problems.
Do you remember the time we went for ice cream? We tend to believe that when we remember something, it’s because that something actually happened in the past. When I remember walking to get ice cream this afternoon, I believe I actually did get ice cream this afternoon. But the reason I believe that, is because of memory. In other words, we use memory to justify the validity of memory…
I greatly appreciate being around inspiring people. This weekend I was fortunate enough to be around many inspiring people at ClojureConj , the kind of people who question their reality, not just their programming tools. When was the last time you spent an entire hour thinking about a problem? - a day - a month Practice to be good at something. Problem Solving 1. What is the problem? - out loud -…
Each AOP term and its HTML/CSS counterpart… If you’re viewing this in your Dashboard, you may need to click through to see this table. AOP HTML/CSS explanation join point every HTML element places you could possibly apply behavior pointcut CSS selector (e.g. #nav span.highlight ) expression that specifies which places to apply behavior advice CSS declarations (e.g. color: blue;…
…must be the worst fate imaginable. Question: How do you communicate how you really feel? How do you let your love know that she is loved? Really loved. You know you love her… but does she really get it? I struggled with these questions for a long time. Being naturally bad at communicating due to [programmers’ Asperger’s](…
When you try to change a little, your old mindset still has its old values and attachments, and you inevitably slide back into your old groove. But when you change enough to create a new mindset, you can free yourself from your old way of looking at things and create a _new_ groove. Homer Simpson’s ass groove comes to mind. Moving over a few inches would be painful at best. Moving across the…
When I was a kid, barely old enough to read, I saw this book Robot Visions , by Isaac Asimov in the bookstores. I poured over Ralph McQuarrie’s illustrations (long before I ever knew who he was) and wanted to read it more than anything else. Now, almost 20 years later, I discovered it in my uncle’s library – the original hardcover edition – and I’m finally reading it.…
I want to make software that people use. I’m tired of making stuff that gets used by one person once a month. The purpose of software ultimately boils down to one of these things: * To help people work * To entertain people * To teach people * To keep people safe * _To help people pursue happiness_ Software can help people. If it doesn’t, it hasn’t fulfilled its purpose. I always…
A skilled sculptor can form any shape. A skilled programmer can make any program. The only question is, what? I think this rings true with anyone who has spent 10 years in the field. After a certain point, you start to realize, there’s nothing you couldn’t program. Sure, there are challenges. How do you get it to be fast enough? How do you allow it to scale big enough? But at the end…
Conrad Barski of lisperati.com gives a taste of his new (not yet released) book, Land of Lisp , at Philly Lambda . On Lisp + Game Programming! Update 11/19/2010 : Land of Lisp is out! Get it here .
This is a little more obscure git-svn recipe I derived today. Thought I would share it. Basically, I was prototyping a new feature on a local branch in git. Later, I decided I wanted to push that local branch into an svn branch so that my svn comrades could see it. So I started with a local branch following svn trunk with purely fast-forward commits. And the following did the trick. Create the svn…
The entire [Arc language]( http://paulgraham.com/arc.html ) is just a few Scheme macros. …Or so the criticism says. I can’t use Common Lisp. `mapcar`, `lambda`, `destructuring-bind`, etc. These are things I use all the time, yet they have some of the longest, most unnecessary names. Scheme is the Java of Lisps. `define`, `begin`, `list-ref`, etc. It was seemingly designed to be as…
The desire to validate the structure of a document has come up a number of times recently. Say you have a public service where one of its operations takes in a complicated tree-structured document. You want a way to: use a programming-language-agnostic data format for your document; formally specify the expected structure of the doc; validate that input to calls to your service actually follow the…
The unspoken truth about managing geeks : Articulates the mindset of many developers. It’s not about being right for the sake of being right but being right for the sake of saving a lot of time, effort, money and credibility. IT is a team sport, so being right or wrong impacts other members of the group in non-trivial ways. Truly insightful. IT pros would prefer to make a good decision than to get…
Email has its place, but when it comes to short notifications – of the status of a job, for example – IMs work great. If you think of your software as your co-worker – someone you work with who helps you do your job – all kinds of functionality just make sense. Would you rather your co-worker emailed you or IMed you? Then the software should do that. This code snippet sends…
Here’s something I’ve noticed recently: if you would be Xed, be Xable. A few concrete examples… If you would be taught, be teachable. If you would be understood, be understandable. If your software would be used, make it be usable. And last but not least, the quote of Ovid that inspired it all: If you would be loved, be loveable.
Here’s the .gitconfig file I’ve been using. The aliases let you type “git ci” and execute “git commit -v” for example. And color is essential. Going back to svn is like going back to black & white TV. [user] email = you@blah.com name = Your Name [color] ui = auto diff = auto status = auto interactive = auto [alias] st = status au = add -u pt = add --patch ci =…
Notes I made back in April for setting up Clojure on my MacBook. Kyle is planning a workshop on this soon. # get Clojure and clojure-contrib library cd ~/projects svn checkout http://clojure.googlecode.com/svn/trunk/ clojure svn checkout http://clojure-contrib.googlecode.com/svn/trunk/ clojure-contrib # build Clojure cd clojure ant # make a clojure executable on your path echo 'java -cp…
When I write a program, what I’m essentially doing is writing down my best understanding of how to solve a problem or accomplish a task. My best understanding. For the sake of this discussion, let’s say the problem I’m trying to solve is how to best peel an orange for eating. An interesting thing happens, though, when I spend hours and hours talking about the problem, thinking…