Hacker News new | ask | show | jobs
by nkangoh 4179 days ago
I would be interested to hear the opinions (or more accurately, experiences) of developers regarding "practice." I'm beginning my career as a software engineer this summer and I would like to become an "excellent" engineer. Employable, of course, but also the go-to for knowledge in a subset of computer science (let's say natural language processing, for example).

Given I have a very long life (hopefully) ahead of me, what would you say is the best way to do this? Yes, coding is good, but is it the best way? I spend a large amount of time doing side projects, but eventually I'll have a family and other obligations, so I would need higher impact, less time consuming practicing options.

An example of this I guess is how many expert violinists actually "practice" for a surprisingly small amount of time because the practice is so deliberate. What's the equivalent for us?

5 comments

I do martial arts and I program.

Nearly everything I do in martial arts is practice for the relatively few times I might spar with someone.

I don't do any skills practice for programming. I've never met anyone who did something equivalent to honing basic movement, practicing balance and similar things.

Reading about the latest programming methods is a good thing and can increase your repertoire but I don't think it's comparable to skills-practice in martial arts or music or something similar. In practices like this, there are fundamental skills that need to be in good shape to allow a person to anything creative in the discipline (I have no idea why expert violinists wouldn't spend significant periods practicing but I know little about that. I know that most music requires significant practice of basic skills to achieve mastery).

My suspicious is that programming is an activity that is strongly connected to the brain's language centers and so mastery of it on the skills-level is simple and the problems with it appear on the judgment and understanding level - which doesn't make it easy, rather gives it that extraordinarily hard quality that we programmers are familiar with.

Also, most skills-practice disciplines are performance arts rather than production processes. Machinist and auto-mechanics also have high skill levels but like programmers they are obligated to show some significant accomplishment for their entire time at work. We can contrast this with a musician or other artist, who if they give an amazingly beautiful performance once a month and have it recorded is considered remarkably successful. In contrast, a programmer gets few accolades if she can just "be a great programmer" for an hour a month - what is instead considered with programmers is their entire output, which puts an entirely different series of pressures and constraints on the programmer.

Cool, what martial arts do you do?

Brown belt in Brazilian Jiu-Jitsu here. I love coding for some of the same reasons I love training and sparring. It's endlessly complex, so you never run out of new challenges.

Lately I try to master one new concept every year. In 2014 it was monads in Haskell, 2013 lisp macros, 2012 basic functional programming in lisp and F#. 2011-2008 it was web dev, TDD, OO, Python, Ruby, PHP, Java, C#, access forms, basic relational database design, and VB.NET.

The last two years I also take a train to work, and in that time on the ride I've started a streak on github where I post all my practice. I commit at least one commit every day either on a side project, a course I'm taking, or a book with exercises I'm working through. The urge to keep the streak going is a big motivator.

https://github.com/steveshogren

I also like books with homework, those are awesome, like SICP, Let Over Lambda, etc.

I mix in side projects with the directed learning to help me apply the concepts.

I'm happy to help if you have any other questions!

Like with everything, it depends. The way you use time is key to pretty much everything. The right hurdles to go for, for learning, are always the ones where you are outside of your comfort zone and you have to struggle for some number of hours, days, etc. to pick up the concept.

But the other half of that is to have a well-rounded life that will keep you on track. If everything feels like homework, you're stressed or unhealthy, etc., it'll be hard to summon the energy to really struggle with a hard problem. Try slicing up your year into the fractions of time you'd expect to spend working on anything. When you budget it this way instead of making a rigid schedule, you spot opportunities to break away from everything else and spend a week or so just trying to do one thing.

I'm not particularly senior so other people might be able to give you better answers. Nevertheless I would definitely recommend that you do a lot of reading. It really helps to know current technologies and more importantly understand why they exist.

You should also try your hand at developing with technologies that you don't know. It's of course useful and more scalable to read and learn about technologies out there, but actually using or implementing something with them brings your understanding to a higher level in my opinion. After all, you could know that technology X is better for something, but until you actually have gone through the suffering it was meant to solve and then used X to resolve it, you won't really understand it.

>but eventually I'll have a family and other obligations,

Get them involved. I teach my nephews programming and math. I am teaching him javascript right now. I am not good at javascript myself, but it is an opportunity for me to learn.