Derek Sivers – “People kept telling me I was just not a singer – that I should give it up”

Derek Sivers: “After 15 years of practice…”.

Derek, you do the same as you did for singing, and you will become a great programmer in 10.

Related: A great thread at Hacker News.

Matt Linderman – “Mistakes happen. Character is revealed by how you handle them.”

37signals: Bad call, great apology. It should be something we all learn as children, that our culture should encourage, but somehow, that’s not the case, and so this speaks to us a special lesson.

YouTube: “Jim Joyce Tearfully Accepts Lineup Card From Galaraga”:

If you make a mistake, admit it. It doesn’t make you a mistake. By admitting it you can learn from it. Others can learn from it. And hopefully, there is growth.

Recent Journalist-Programmer reads

O’Reilly Radar: Mike Loukides: “What is Data Science?”

Media Shift: Marc Glaser: “Why Journalists Should Learn Computer Programming”

Rafe Colburn: “Why journalists should learn to program” – with a suggestion on what really to be digging into – and I agree.

Resource: Hacks/Hackers

Recent reads on API Design

ACM Queue: Ken Arnold: “Programmers are People, Too”

Communications of the ACM: “API Design Matters”

JavaWorld: “Joshua Bloch: A conversation about design”

InfoQ: Joshua Bloch: “Joshua Bloch: Bumper-Sticker API Design”

InfoQ: Video: Joshua Bloch: “How to Design a Good API & Why it Matters” (and a good thread on Hacker News).

Possible Resource: APIDesign Wiki

Making Emacs with emacs-starter-kit a little more friendly

Hopefully you’ve read the docs and know that you can override settings and implement your own extensions rather easily:

Create a Lisp file under ~/.emacs.d/ specific to your username ($USER-NAME.el) or system ($SYSTEM-NAME.el) that Emacs with emacs-starter-kit will load automatically at startup.

I’ve created mine specific to my user name – ~/.emacs.d/kmarti05.el. You can determine the value of your user-name in emacs by issuing C-h-v user-login-name.

Here is the contents of my ~/.emacs.d/kmarti05.el file:

;; visible bell
(setq visible-bell nil)
;; allow selection deletion
(delete-selection-mode t)
;; make sure delete key is delete key
(global-set-key [delete] 'delete-char)
;; turn on the menu bar
(menu-bar-mode 1)
;; have emacs scroll line-by-line
(setq scroll-step 1)
;; set color-theme
(color-theme-zenburn)
(defun my-zoom (n)
"Increase or decrease font size based upon argument"
(set-face-attribute 'default (selected-frame) :height
(+ (face-attribute 'default :height) (* (if (> n 0) 1 -1) 10))))
(global-set-key (kbd "C-+")      '(lambda nil (interactive) (my-zoom 1)))
(global-set-key [C-kp-add]       '(lambda nil (interactive) (my-zoom 1)))
(global-set-key (kbd "C-_")      '(lambda nil (interactive) (my-zoom -1)))
(global-set-key [C-kp-subtract]  '(lambda nil (interactive) (my-zoom -1)))
(message "All done!")

Reads: E.W. Dijkstra: “The Humble Programmer”

E.W. Dijkstra ACM Turing Lecture 1972: “The Humble Programmer”:

Automatic computers have now been with us for a quarter of a century. They have had a great impact on our society in their capacity of tools, but in that capacity their influence will be but a ripple on the surface of our culture, compared with the much more profound influence they will have in their capacity of intellectual challenge without precedent in the cultural history of mankind. Hierarchical systems seem to have the property that something considered as an undivided entity on one level, is considered as a composite object on the next lower level of greater detail; as a result the natural grain of space or time that is applicable at each level decreases by an order of magnitude when we shift our attention from one level to the next lower one. We understand walls in terms of bricks, bricks in terms of crystals, crystals in terms of molecules etc. As a result the number of levels that can be distinguished meaningfully in a hierarchical system is kind of proportional to the logarithm of the ratio between the largest and the smallest grain, and therefore, unless this ratio is very large, we cannot expect many levels. In computer programming our basic building block has an associated time grain of less than a microsecond, but our program may take hours of computation time. I do not know of any other technology covering a ratio of 1010 or more: the computer, by virtue of its fantastic speed, seems to be the first to provide us with an environment where highly hierarchical artefacts are both possible and necessary. This challenge, viz. the confrontation with the programming task, is so unique that this novel experience can teach us a lot about ourselves. It should deepen our understanding of the processes of design and creation, it should give us better control over the task of organizing our thoughts. If it did not do so, to my taste we should not deserve the computer at all!

It has already taught us a few lessons, and the one I have chosen to stress in this talk is the following. We shall do a much better programming job, provided that we approach the task with a full appreciation of its tremendous difficulty, provided that we stick to modest and elegant programming languages, provided that we respect the intrinsic limitations of the human mind and approach the task as Very Humble Programmers.

Great Spring and Maven tutorials

TheServerSide.com: Cameron McKenzie: “The Easiest Way to Get Started with Spring” – good toe-dip to the Spring container, dependency injection and inversion control.

java.net: Will Iverson: “Building Web Applications with Maven 2” – great intro to Maven, building a small web-app, and running it with Jetty.

JavaWorld: John Ferguson Smart: “An introduction to Maven 2” – a bit more detailed then the previously mentioned Maven tutorial, but does not include Jetty unfortunately.

If I could find one tutorial that brings these elements together, with a little Eclipse IDE configuration and usage thrown in, it would be great.