kespernorth: (toast)
I've spent the last week or so in somewhat of a panic, as I was given my first bug and had no idea how to fix it. It was a very complex issue that touched on virtually every aspect of a large piece of software that I am new to, and involved sifting through a massive source tree to try and understand how the issue occurs and why. In the process I had to learn the language recognition parser generator ANTLR (whew!) whose syntax strongly resembles Sumerian cuneiform, and is truly understood by about as many people.

Well, I exaggerate. But given the level of documentation and the obtuse lack of explanation to be found in the tutorials, it feels like a major accomplishment to have any grasp of it at all.

(For you technical people, I'm working on a bug in the Hibernate object/relational persistence framework where invoking a composite ID in an "ORDER BY" or "GROUP BY" clause will cause invalid SQL to be generated. It *should* just throw an error, as the developers intended users to cite the key mappings directly, so SQL would know what order to, well, order by.)

Anyway, I've figured out how to solve the problem. It may not be an ideal solution, but that's what peer review is for. I've certainly learned a lot in the process.
kespernorth: (Default)
I have written of this before in years past, but as it is a state I am trying to promote in myself for reasons both practical and philosophical, so I feel it bears mentioning again.

There is a particular way of thinking that comes with coding. As one attempts to understand a program, or formulate it, you must hold that program in your mind, storing the values of each variable and remembering its state from instant to instant, accounting for all changes of state, accounting for forked processes and recursive function calls. Your mind becomes an emulator; you build a working model of the program in your mind, just as if you were the computer.

This requires a form of absolute focus in which all fear and all distraction drop away, simply because there isn't room in your head for them. There isn't time for them. One cannot understand something so complex and alien without giving it your full attention.

I believe that a coder's true measure is the degree of complexity he or she can emulate, much as a chess player can be measured by the number of moves they can project in advance. (Which is nearly identical to understanding a computer program, if you think if every piece's placement as a variable, and every possible move a function with a different potential outcome).

I can emulate simple programs, but I have difficulty following more than one or two levels of recursion. For some people -- the mathematically gifted -- this comes naturally.

It does not come naturally to me, but I believe it is a skill that can be learned, and refined. It will not come easily, but it will come, with practice.


kespernorth: (Default)
Kesper North

February 2011

27 28     


RSS Atom

Most Popular Tags

Style Credit

Expand Cut Tags

No cut tags