Filed under Programming

Sunday Selection 2012-02-19

Around the Web

UNIX as IDE I have a love-hate relationship with IDEs. While I understand that IDEs are useful (if not essential) for languages like Java and C++, I personally can stay away from those languages and hence I use Emacs + command line tools as my IDE. Working primarily in Linux (and sometimes OS X) makes this very easy. This series (it’s a long read) is chock full of useful tips to better use Unix as your IDE.

Don’t Fall in Love with Your Technology Our job is not to use the best technology or write code. Our job is to solve problems.

Letter to a Young PL enthusiast This pretty topic-specific, but I’m a PL enthusiast so it’s relevant. If you’re interested in PL research (or just like exposing yourself to new ideas) this is a worthwhile. I don’t know half the things mentioned, but I try to learn a little more everyday. Additionally there seems to be a new PL-oriented mailing list called LL.next.

Fromt the Bookshelf

How to Steal like an Artist Ok, I’m jumping the gun on this one. It just came out and I pre-ordered on Amazon so I’m going to get it in a few days. But judging from the talk and blog post that started it all, it’s going to be awesome. Amazon has it for the cost of a venti something-or-the-other from Starbucks.

Sunday Selection 2012-02-12

Around the Web

The Information Diet : A Case for Conscious Consumption You could consider this a counter-argument to my previous post on how we can use consume and use information. I think we’re still pretty early into the Information Age and we’re still coming to grips with the fact that we have the world’s knowledge just a few clicks away. I haven’t read the book yet, but it’s definitely on my reading list.

10 Rules of a Zen Programmer I’m not entirely sure why there seems to be a strong interest in Eastern meditation and mysticism in the hacker culture, but tit does lead to some interesting analogies. In that light, this article is both pragmatic and idealist. While I don’t agree with all of it (no. 5 for example) it’s a worthwhile read and might help change your perspectives.

How to be Relentlessly Resourceful This isn’t about technology or Zen (at least not directly). It’s more about how to get the job done. And we all want to get the job done.

Software

Spotify To be honest, I still have my doubts about streaming music. I do prefer to have my own collection that I’ve paid for and (mostly) have physical copies of. That being said, I do think Spotify is a really neat service and a good way to try out artists and albums before I decide to buy.

Sunday Selection 2011-12-11

Around the Internet

More shell, less egg It’s alway a joy to see two masters at the top of their craft engaged in a respectful, but determined duel. This is a short commentary on Donald Knuth and Doug McIlroy’s approaches to literate programming. Worth reading even if you’re not a big fan of literate programming.

Selective use of technology I firmly believe that science and technology is a good thing and that our world is better because of them. However I also understand that technology cannot do everything for us. In particular there are a lot of decisions it cannot make for us (yet). I also tend to get a lot of my best work when I am least partially disconnected and can hold at bay the full force of the Internet. All things in moderation.

Why sugar makes us sleepy (and protein wakes us up) As much as many of us would like to live as if we disembodied brains surviving on anything that barely resembled food, that is definitely not the case. Since we are stuck with our flesh-and-blood physical bodies for the foreseeable future, it is a good idea to figure out how it all works and make the most of it.

From the Bookshelf

Do the Work While I’m not entrely a fan of Steven Pressfield’s use of vaguely “spiritual” ideas and terms, this book is still worth reading for everyone. It’s especially useful if you have that big project you’ve been thinking about but never got around to actually starting. At $1.99 for the Kindle edition, it’s a steal.

Video

What we actually know about software development Despite the importance of software development, most developers are acutely unaware of the scientific studies in the area and rely mostly on anecdote. Luckily there is an increasing amount of research in software development (not to be confused with computer science) and it’s worth knowing what we actually know about the field and what is myth.

Tagged , , , ,

Getting to Work

There is a danger to doing what you love as part of your day job. For a few weeks I’ve been working on a programming project. The project should have been very interesting and motivating. It involved combining programming languages (which I love and have been learning about for years) and networks (which I don’t know that well, but have a growing interest in). This should have been an ideal project – a project with just the right combination of personal skill and challenge. It was a project with definite goals, with people who supported me and wanted me to succeed and were willing to give me regular feedback. And yet it was so hard to actually get myself to do the work.

The Motivation Problem

I think the problem is that for most of my life programming was something I did on the side. In school, programming and computers were never the main course of study. In fact, more than once my parents had to tear me away from the computer. In college I decided to be an Electrical Engineer because I wanted to know how the machine worked from the lowest level up. Though that was an interesting and very fulfilling learning experience I realized at the end of four years that I would rather use computers to do something interesting rather than improve the machine itself. Though I did do a good bit of programming in college, most of my classes did not involve programming as the focus.

But now I’m in graduate school and programming is supposed to be part of the job description. Yes, I know that large areas of computer science are essentially mathematics and you can get away with writing very little code, but that’s not where my interests lie. For me, programming is no longer just something I do for the fun of it. It’s something I do because my grades depend on it and because I’m getting paid for it. It has become work and that has been fairly disastrous to my ability to get things done.

As knowledge about our psychology improves one of the interesting facts that has come up is that intrinsic motivation is a much stronger force than any form of external motivation. In a specific sense that means I need to have an internal reason for doing my work. In a more general sense I need to have an autotelic personality: to “have a purpose in and not apart from itself”. The good news is that I’m in a line of work that favors autotelics. The bad news is that it seems to be all too easy to lose the sense of self-motivation, to feel like that the only reason I’m working is because I’m expected to and I’ll get something definite out of it.

However one more piece of good news is that starting is often the hardest part, especially for something you think you should want to do, but can’t muster the motivation for it. I’ve noticed that once I’ve started and am making progress it’s easy to keep going. The trick is to both start and end in the right way.

Start and Stop

Whenever I start out reading and thinking too much about my problem I sabotage myself. I tell myself the problem is too hard, there’s too much other stuff I need to know first, surely someone else has already solved the problem and I can just use their code. Down that path lies madness (and not getting anything done). Though I’m all for thinking before pumping out code, for starters I like to just jump in and get going.

Diving in and hacking away helps produce the feeling that I’m making progress. Whatever I do at this phase is pretty basic: code cleanup, documentation, minor refactoring, maybe fixing a small bug. The point isn’t to get productive immediately, it’s to load the working context of the program into my brain, to get minor victories that help get past the resistance to start. Once I’m past the initial hump I can pause and think deeply about the core of the problem. Since I’ve already loaded up the problem in my head that also becomes easier.

I’ve learned the hard way that stopping probably is just as important. The key is momentum. During each coding session I build up a certain amount of momentum as I build up a mental model of the problem and the solution. Unfortunately I have to re-acquire that momentum every time I start again. I want to pick the proper stopping points so that the re-acquisition is quick and smooth.

I make sure that I always leave code in a relatively clean state: everything has been committed, there is some amount of documentation and most importantly I’ve identified what I need to do next. That way the next time I sit down with the code I can look up the README or the TODO file and pick off the next thing on the list. If the last commit was broken the next thing is usually something to fix. If the last commit was good I can add a new feature. I use a version control system that makes it easy to roll back changes and commits so I don’t hesitate to put in a “checkpoint” commit, even if it’s broken. The less time and effort I have to spend in deciding what to do next the better a chance I have at actually getting something worthwhile done.

This isn’t about computers

…or computer science or programming. This is about getting work done, work that I love. But sometimes love isn’t enough to get me out of the browser and into the text editor. Habit is often stronger (and less demanding) than will power. The good thing about habits is that they can be both formed and broken. I’m starting to learn that the key isn’t to beat yourself up for being a slacker, but rather engineering your life so that getting stuff done is on the path of least resistance.

And now it’s time to get back to my project.

Sunday Selection 2012-12-04

Around the Internet

How I went from writing 2000 words a day to 10,000 words a day Writing is no easy business and writing a lot on a regular basis is even harder still. It’s good to know that there you don’t need some special gift to become super-productive, you just need to carve out the time and work to the patterns that let you get the most out of the day.

Eleven equations Computer Science geeks should know There’s not much consensus when it comes to how much mathematics computer scientists and programmers need to know. Personally I would say that if you are a computer scientist you need a fairly strong mathematics background (something I’m still working on, I’ll admit). Even if you’re just a programmer I think having some mathematical familiarity will make you a better thinker and give you a better bag of tricks to call upon.

Clay Johnson’s Information Diet Though I love social networks, both the technology powering them and the interesting interactions they produce, too much of anything is a bad thing. I’ve been considering going on an information diet (or perhaps more correctly an information consumption diet) so that I could more of that time into creating instead of consuming.

Videos

How Github uses Github to build Github I firmly believe that good tools and workflows can make your job easier and your production better. I also think Zach Holman is really cool. While this focuses on Github it’s easily applicable to any group of developers (or creators in general) working together to produce awesome stuff.

Tagged , ,
Follow

Get every new post delivered to your Inbox.

Join 338 other followers