Programming Links for May 27th, 2009

InfoQ: Bruce Eckel on Python, Java, Flex, and RIAs

O’Reilly: Dreaming of Rails as the Next Microsoft Access

It’s Only Software: 5 Minute Guide to Spring and JMX

Yet Another Java Blog: 5 Part Series: Intro to Caching,Caching algorithms and caching frameworks

Eli Bendersky: A year with Python

itzer.com: Java Kicks Ruby on Rails in the Butt

You a programmer? Practice your typing.

amphetype is an open source, python built, typing program that helps improve speed and accuracy.

For reasons why you’d want to do this, check out Coding Horror’s “We Are Typists First, Programmers Second” and Steve Yegge’s “Programming’s Dirtiest Little Secret”.

Some programming links and reading

On loving what you do and practice

I love what I do. That doesn’t mean I don’t recognize it as hard work – but I do believe I am one of the few lucky ones who has found a career that challenges, excites, and pays the bills. I repeat however – it is hard work. There are no free rides in life. You need to work at what you do in order to be a success at it.

Coding Horror: Programming: Love It or Leave It and the thread at Joel on Software that inspired the post – “Thinking of leaving the industry”.

Tim O’Reilly: Hard Work and Practice in Programming – an email thread discussion about programming, learning, and practice. via rc3.org.

On constructive criticism and feedback

ThousandtyOne!: Leadership, Constructive Criticism And Not Playing The Blame Game:

In the world of software development most managers are taught the blame game, right when they are young and budding management students, business analysts or programmers taking their first fumbling steps at managing a team. For most managers, blaming the process, an individual’s incompetence or the whole team’s incompetence is an easy excuse for all failures; including theirs. I’ve hardly ever seen managers personally attached to team members, spending genuine effort in trying to help them find their core competencies and coming forward to blatantly own up failures and take responsibility when things don’t work out.

I’ve hardly ever seen managers lending constructive one on one direct verbal criticism followed by genuine help. I’m not talking about a generalized you-need-to-get-better-at-coding-email followed by be-careful-next-time-email followed by I-am-going-home-but-check-in-the-code-and-email-me-the-status-as-soon-as-possible kind of criticism here.

I’m talking about the blatant and precise your-use-of-object-orientation-in-the-administration-module-sucks said with empathy, followed by a joke, followed by lets-go-out-for-a-cup-of-coffee, followed by lets-stay-late-and-refractor-together kind of constructive criticism. Or for that matter, let’s-meet-during-the-weekend-and-fix-this kind of constructive criticism; and that dear reader, irrespective of what they tell you, is not a waste of your time; it’s what you were hired to do; especially If you were hired to lead a team. If you weren’t specifically hired to do that, I suggest that you do it anyways.

If you work with a team, don’t criticize ruthlessly; if you lead a team don’t play the blame game; and remember, it doesn’t matter what they teach you in management schools or tell you at your workplace, if your project isn’t cruising along successfully, it’s always your fault.

If you must criticize, do so constructively, followed by empathy, followed by genuine help. I can’t teach you how to do that. What I can do, however, dear reader, is end this post abruptly and rather dramatically, leaving you with words of wisdom worth pondering on, from one of my all time favorite movies. Here’s Wishing you, good leadership, healthy teams and a good life.

Jonathan Lange: Your Code Sucks and I Hate You: The Social Dynamics of Code Reviews:

Code reviews provide an amazing opportunity to grow as a programmer and to improve the software we make. There are many choices that a project can make about how reviews are done and what they can achieve. By thinking carefully about how technologies and processes affect the basic human interactions involved in code review, open source projects can avoid traps that scare off newcomers or wear down longstanding contributors and instead focus on building the best software possible.

Some unrelated additional links

devChix: Beautiful Python: The programming language that taught me how to love again

Software for Civic Life: An Interview with Mike Mathieu of Frontseat.org

NYTimes on using GeoDjango

Nice work NYTimes.

Open: Represent:

We built Represent with Django, the Python web framework. Although we do most of our work with Ruby on Rails, we chose Django for this project so we could use GeoDjango, an add-on that supports geometry fields and extends the ORM to allow spatial queries.

We started with maps from New York City’s Department of City Planning showing district boundaries for City Council, State Assembly, State Senate and the U.S. House of Representatives. We used the Geospatial Data Abstraction Library, a translator library for raster geospatial data formats, through GeoDjango’s LayerMapping class to populate a PostgreSQL database extended with the PostGIS spatial extension. The geometry relationship functions provided by PostGIS allow for quick, accurate lookups to determine which legislative districts contain your address.

Represent shows you your address in relation to each of the political districts that contain it. To draw the maps of your districts, we used GEOS, a C++ port of the Java Topology Suite, an API for modeling and manipulating 2-dimensional linear geometry, via GeoDjango’s GEOS API. GEOS allows for the conversion of a geometry to KML, which can then be consumed by Google Maps.

But to do all that, we need an address: yours, hopefully, if you live in New York City. To turn that address into coordinates, we built a geocoding service based on Geo-Coder-US, the perl library that powers geocoder.us.