You learn a lot being a high-performance oriented classical musician. Here are some lessons I learned along the way, especially in how I needed to practice so methodically to have any hope of making progress, which may be helpful to people as they learn to code.
1) Isolate small, difficult sections
- If you are having difficulty in a section of music, you don't go back and practice the entire piece over and over again. you isolate the measure (which is a very tiny segment!) of music you are most struggling with and practice that. You work smaller and smaller even until you can play it without getting it wrong. The same goes for coding. If you're struggling with a leetcode exercise, are you struggling with arrays? Objects? Maybe control flow? Go back and practice some short exercises focused on that one thing you are struggling with until you absolutely cannot get them wrong.
2) Practice until you can't get it wrong.
- Don't practice a section of music until you get it right. Practice it until you can't get it wrong. The same goes for difficult concepts in code. Don't just do an array exercise until you're like "oh, ok I got one right, I guess I understand arrays now." Do array exercises until you literally can do them in your sleep. That's not to say you need to memorize every array method ever, but you should understand in-depth how arrays work.
3) Simple and good is better than complex and a trainwreck.
- When singers audition, there is a lot of temptation to do a big, showy, frilly piece; however, those pieces can be exceptionally difficult and not necessarily showcase the singer in the best light. It's better to do a simple piece in the audition, but executed flawlessly, than a showy piece with lots of mistakes. Same with code, I think, is that its better to have solid, amazing basics and stretch from there in your work (of course, balancing this with pushing yourself forward is important), rather than biting off huge chunks of very complex projects that are way beyond your skillset and will ultimately lead you to get discouraged.
4) At the end of the day, you're telling a story.
- I think this one is the most ethereal tip, but in classical music, as obsessive as it is on technical perfection (and I'm not kidding when I say perfection), your job is to tell a story through the sound of your voice and your technical chops serve that end. I think the same thing in code is important; keeping in mind that working code is better than perfect and that if you can't serve the end-user with your work, then something is off.
And yes, you can hear me sing; in a live performance of Poulenc's Gloria:)
Top comments (4)
Hey! A fellow opera singer! Nice to see another one of us around here. :) Point #1 is something I hadn't actually thought about in this way somehow. Practicing coloratura like this is like, "Yeah of course" but applying that to a difficult coding concept would also be really helpful. Thank you!
Ha, right? Coding is coloratura. Or.. something like that :D Anyway, you are welcome, and, it's great to meet you! We need more singers in this field!
Great article! It's nice to know I'm not the only one who perceives code as an art.
There's one thing however, that I cannot find a parallel in music- testing. Just as you said, it's important to concentrate on small bits when dealing with something complex. And unit testing makes you do exactly that.
Above all, testing gives you confidence in your code and therefore the ability to change it as many times as you want. And with it you almost always have a second chance on anything you got wrong.
Cheers and good luck in your journey!
Thank you! I suppose testing could be related to the 1-1 learning from a private teacher experience, if anything. Since unit testing does provide a nice 1:1 map on if something is right/wrong, I've only truly only ever experienced a similar in a voice lesson or coaching session where I'm stopped/started quite often if a vowel is wrong or my breath is incorrect. My best teacher, Carol Kirkpatrick, stopped me so often I hardly got out more than a measure in a lesson, but wow, I learned! The best unit tests are the same; they are incredibly explicit and will absolutely call for you to fix what's wrong before you move on with your code. Less "bugs" all around!