Sharpening the Saw

That lumberjack story is just about the worst parable ever.

Oh and blogs are a good way to learn about interesting stuff, but sharpening your skills usually starts with some proper literature…

What? Look at the screenshot you posted about Hacker News: there is not a single link to an article about programming.

Your writings on Hacker News the last couple of days are pointing out how little preparation and thought go into your blog posts.

If you want to be a better programmer, write lots of code, learn a new language outside of your comfort zone (and I’m not talking about learning Python if you know C#, etc), and read the old classics.

What do you recommend for sharpening your saw as a programmer?

Studying some Computer Science. Even thought you might never need things like big-O notation, knowing them opens your mind.

Probably you shouldn’t try to implement a Neural Network in a regular comercial software, but knowing about them can help you adding new models (or ways to think about software) to you software designer toolbox. An example of this are regular expressions and automata theory. They were really theoretical stuff, but nowdays are commonly used (it can make things a lot easier)

Queue Theory can be really usefull in big systems. Generaly, when the complexity of the software increases, more theoretical stuff can be usefull.

Ummm, like anything else…

work/spend time with people who are better at something than you are, and, do some reading and practicing.

Probably you shouldn’t try to implement a Neural Network in a regular comercial software

This statement is ambiguous to me. Do you mean, Given a problem a neural network could solve, you probably shouldn’t use one in commercial software? Or do you mean You probably won’t encounter a problem a neural network could solve in commercial software development?

Most people don’t encounter problems NNs could solve, but most people don’t look for them, either. Machine learning has definitely escaped the RD lab and is everywhere in commercial applications.

I am addicted to StackOverflow in the worst sense. I spend entire hours perusing the various questions looking for new ideas, looking for questions I can answer and helping people out. I have learned so much from various StackOverflow posts it is amazing!

You should go away from the computer some time every day, not just for going to the bathroom or fetching coffee.

Some advice:

  1. Get enough sleep. Sleep deprivation is like going around slightly intoxicated, maybe you do already?

  2. Exercise, get’s oxygen to your brain so you can think, and the endorfins makes you relaxed and that feel good.

  3. Meditate, dream or visualize about a program or snippet of code you write. If you can’t see the code in your head you need to polish your skills. Go so basic you need!

Reading books ofcourse. Google for programmer developer recommended reading

I think you missed the point here, slightly. In the 7 habits sharpening the saw is doing non work things that make you human, like taking a break and spending time with your family or reading. Taking time to sort out the work life balance.

Looking at different perspectives is good. Personally I get a lot out of books like Jared Diamond’s - anything that is written in a clear analytical style about something interesting.

And taking time off to be a human. That’s why I stopped working for Oracle and being on the road all the time, even though it cost me 20% of my income.

Your focus here is much narrower than Covey’s. However thanks for the links - very useful.

Interesting that Braithwaite tries to encourage by warning that we would suck at being sales people. Salesmen actually frustrate me because of their superficiality, the salesman who mimics my views to the point of making a sale, and then completely loses interest. I think this helps understand this whole topic - developing is something where you completely internalise ideas and understand them deeply. We have to let a lot of superficial rubbish bounce off in order to concentrate on what matters. But at the same time, in order to better understand we need to listen to dissenting views. In the same way, the greatest salesmen have a deep understanding of their products.

Re the sharp spear, the Tao Te Ching says (in some translations) If you hammer and sharpen your sword, you cannot keep it long.

How do I sharpen my saw as a programmer? I get away from my keyboard and try and experience a bit of real life. When I look around me at software I encounter every day, the part that seems to be so often missing is real world touches. Most software I use doesn’t really seem to understand my goals or help me as much as it could towards those goals.

I think the reason for this is to become a really good programmer, you need lots of practice, as you’ve said many times. Good programmers are also obsessive about this stuff. Both of these factors combine to form people who don’t go out of their house for days on end (except maybe to pop down to the shops). In my opinion, this means you can really easily lose sight of what you’re trying to achieve with the software. I try to have at least one day out a week, where I get away from my computer and see the outside world. It gives me a chance to clear my head and refocus on what’s important, both in my life and in my current programming projects.

As humans, we’re not built to sit in front of screens for 40 hours a week (and I know that I spend way longer than this in front of mine). I think less time programming and more time experiencing the real world can help you build better software.

IMO blogs and sites like Hacker News and programming reddit are 99% of the time a waste and don’t help to sharpen the saw at all.

I teach entry level tech courses at a local school. It forces me to get in front of people and explain technical stuff in simple terms.

Also, I know you said anything but programming, but as a business developer (yeah boring databases) I will write side programs that have no immediate benefit, but stretch me in some way. When I was learning .NET, I wrote a program that rendered a fractal, could zoom in, and cycle through various color maps defined in other files. Pretty useless, but very valuable in teaching me about the language.

What do I do to sharpen my saw?

disclaimerI wrote for SD back when there was one, present frequently at the conference, and am friends with conference staff/disclaimer

I go to SD West whenever my employer can afford to send me. I learn useful things in the classes, but much more valuable are the casual conversations with other developers, including the speakers. Every single year I learn something by talking to someone who’s (A) Smart, (B) Knows a lot about development, and crucially © IS SOMEONE I DON’T TALK TO DAILY.

Oh, I almost forgot an even more important point: (D) Doesn’t agree with me!

The conference is an unending fount of people whose biases I don’t know and whose experience is wildly disjoint from mine, so I get exposed to contrarian opinions. Even if they don’t convince me, they cause me to examine my own assumptions and bolster my arguments.

For me it’s SD, because of my personal history. But which conference matters less than going to one. Better yet, presenting at one, because then you’re REALLY going to get some pointed questions! It takes a certain amount of nerve to assert that you know enough about something to stand up in front of 200 very sharp people and attempt to impress them. But nothing will hone your knowledge like preparing for such a talk, and being hammered with the questions. Hoo boy.

7 Habits is a great book!

Who said that software developers are infallible and too good for Personal Development?

– Lee

One of the biggest things that helps me think clearly and come up with the right approach to a problem is to WALK AWAY. When you’re hammering out code to figure out the solution to a problem, you can get to a point where it’s impossible to see the solution.

When this happens, I’ll grab someone on my team, go get a coffee (or a beer), and talk about what it is you’re trying to solve. Often once you’re out of the office and away from your computer, you can give yourself some perspective. The answer usually comes easily after that.

This statement is ambiguous to me. Do you mean, Given a problem a neural network could solve, you probably shouldn’t use one in commercial software? Or do you mean You probably won’t encounter a problem a neural network could solve in commercial software development?

I mean the first one. I believe -and I could be wrong- that in a regular job writing production code, a simpler model is better.

I fear I should sharpen my tools quite a bit by now. Maybe it’s just the fact I’m working on something really old and somewhat sad, but I feel my skills have been rather dull recently.

In the past, I’ve used to do that learning new languages. It proven time consuming, not so enjoyable to me and rather useless in the long run.

I used to surf the net alot, but a few months ago I found out that this actually grew out of control. I now keep my surfing to a bare minimum of selected sites (congratulations Jeff!) which seems a better idea.

I have to admit I am quite out of ideas.

BTW, I started sharpening my saw some time back by writing articles about programming (at http://www.safercode.com/blog/ ). It helped me in a couple of ways

Oh, absolutely. If you find yourself discussing stuff at length on these sites, why not take it one step further and start a blog?

I’ve seen many a long comment that really would have made an excellent blog post. For longer pieces that take significant time and energy to write, why not build your own site up rather than someone else’s?

But starting with comments is a good way to decide if it’s something that you intrinsically enjoy, or not.

Try doing the crossword puzzle in your daily newspaper. If/when it becomes too easy, only look at the across or down clues (pick one).

Learning a musical instrument or foreign language (I mean, for example, Sanskrit, not Modula-2) will expand your brain. Ballroom dancing will not kill you. Visiting the local museum will not kill you.

Play football - chase girls, just get off the sofa.