I am a musician Unfamiliar with the "learning style" of code, suggestions? (Explanation in body text)
Posted by Guitarshredder_1996@reddit | learnprogramming | View on Reddit | 10 comments
I have spent a large portion of my life dedicated learning music theory and intruments in general.
With music just by messing around you can get to an ok level and then study is what takes you to place where youre professional, a great musician or composer.
The learning process mess around with the instrument, its easy to see what certain things do. Piano keys for example make a sound, when multiple are played they can sound good or bad.
Without music theory I dont know why but I can trial and error things to see what sounds good.
Then at a certain point you must study theory and technique.
I have always been good at skills that are easy to learn the basics and then to progress you need advanced things. I understand what I have and learn what more they can do.
I do not for the life of me understand yet how anyone progresses to understand code.
I am progressing in the game dev side of audio, composing and making sfx for companies but if I could learn to implement them in unity myself using FMOD I would have enough work to quit my current job and do that.
So I have been practicing in unity following tutorials, and while many tutorials are helpful, is it normal to feel like it is far too impossible to ever get a grasp on this?
Ive always been mediocre/buns at school style learning but I am sweating my cheeks off here trying to make progress. Any suggestions?
Watsons-Butler@reddit
Ok, as a musician-turned-software engineer…
“Just messing around” gets you nowhere. You might accidentally make a cool noise, but you won’t have any idea why it was a cool noise, how to make that noise again, or why the cool noise sounds good in one context but not in another.
You have to learn the fundamentals. Learn how to read music, learn what chords are, how they work, how they move from one to another, how large scale forms work so you can construct a song, or a sonata, or a concerto, or a symphony. Then you also have to master the fundamentals of your instrument. How to produce a good sound, how to articulate, attack, sustain, release, control dynamics, range, speed, etc.
Coding is the same. You have to learn the syntax. Primitives, variables, memory pointers and references, functions, classes, inheritance, object-oriented design, data structures, algorithms…
Guitarshredder_1996@reddit (OP)
Thats the thing with coding. I guess my beginning message was a little rambling.
Thats what I mean, like where to start with music is fairly straight forward up until you get to the topics youre referring to.
I have no idea where to start with this, half the time im not sure if what im learning is above what I should start with or not if that makes sense.
AnswerInHuman@reddit
As both a musician and a programmer that has been into both for most of my life, I’ll share my perspective which is quite long but I hope you find it useful or interesting.
Same way we have music theory concepts like scales, harmony, rythym, etc… For software, we have principles, repeatable designs patterns, grammar/syntax… We have musical genres and styles, and programming languages with different conventions.
In music we apply these concepts to our compositions to make music people want to hear, while programmers apply theirs respectively in their code to make the computer do something.
In practice, as a composer you should know if you want to make something sound a certain way there are harmonic functions, scales and dynamics that imply certain things depending on what you want the music to feel like. If I tell you to create a blues, you know the blues has a certain form that implies certain harmonic sequence. The harmony feels a certain way and makes you think differently that if I say “Let’s play some Chopin”. You know you can use the blues scale to create melodies and you know the “blue note” color and how each chromatic approach to a chord tone has a different harmonic connotation if you analyze the musical context.
As a musician, you know this because you’re somehow familiar with it. Either you or someone close to you listened to or played blues a lot, maybe you studied music theory, experimented with the exercise of creating a blues composition, or whatever it may be…
As a software developer there are certain things you will have to build over and over again, similarly to how practice your scale runs. After you’ve built the same things over and over again, maybe with slight variations you kind of know what to expect, and how to make decisions depending on the situation, sort of how you would know the fingerings in your instrument to smoothly change between scales when improvising. For some instruments like guitar, you may even have multiple positions to play the same thing, and the performer will decide which one to play at the moment of performance. At first maybe you had to think about or be very aware of it but, with practice, you eventually don’t have to think much about it.
If tutorials are not working for you to learn coding, I don’t blame you because I can barely hold my attention on most video tutorials. You might be of those people that learn more by doing and figuring things out yourself, which is also why you might not have fit in well with traditional education systems if you say you’re not too good academically.
The issue is that you still need the fundamentals to understand what you’re doing so you gotta find the best way to learn those for you. You can probably find out how by observing and evaluating how you learn the things you are good at that are not driven by intuition. Think of how you do things you purposely know you gotta spend time to practice but yo enjoy doing it because “no pain, no gain”. Like going to the gym, if you’re a health conscious person.
Music feels intuitive because there are cultural codes that have been built into our DNA. It’s one of the oldest traditions and methods of communication. It’s partly why the major scale is so predominant in Western culture. Thank you Pythagoras and the Greeks…
Unlike computation, sound generation and repetitive rhythms are also things that happen in nature. So music has many more dimensions than computing in that sense. It involves physical aspect, emotional response, athleticism and discipline… And so more many things including some we do not even yet understand. Computation is kind of like a subject built out of other subjects including math/logic, physics/science and philosophy/linguistics.
To me computers are pretty intuitive too. I had a computer available before an actual musical instrument. I played puzzles and learned reading through computer games so I’ve literally have been working with computers all my life. When I started formal music lessons I loved the technical exercises for the instrument much more than the actual study pieces. So I also understand the inclination to technique and the athletic part of performance. And when I discovered recording and production my mind was blown that I could do both things I loved at once.
I kind of like thinking of music as a language like the bassist Victor Wooten claims. If you’re not familiar with Wooten’s philosophy of music as language, I’d suggest you look it up. It’s great because he speaks of learning music intuitively like you would your native language. Which is an interesting take considering there are people usually learn to speak and have conversations before they read and write. The issue with that approach is that unless you’re submersed in it, you kind of have to find a way to practice in a way you can build up to have a conversation.
When I was in university for computer science, doing my research project required for graduation I got a very ambitious goal. I wanted to integrate music and AI which was still an emerging field. When discussing it with one of my professors (objective the best profesor the school had, said even by students that disliked him) he told me something I have never forgotten:
“To show you know about something, you should be able to explain it to a child. To show you master something, you should be able to explain it to a computer.”
Anyway, instead of an actual AI application, my project ended up being a research of how LLMs principles could be used to generate music based on linguistic context, if it were considered a language in the computing world. And dissecting music concepts that way actually inspired me to audition to my local conservatory and study there for a while too to get a deeper understanding of music. If you’re interested I could share my research project with you. DM me if so, I’m always happy to talk or nerd out about this stuff. Maybe I can help you find your learning aptitude too!
Triumphxd@reddit
Unity is not a small thing to learn, especially for someone with low experience in software dev. Like yeah you can follow a tutorial and get stuff running but it’s not a simple system to interact with. You need a foundation. For that try cs50 in your spare time along with whatever stuff you are trying to accomplish in unity. It’s not impossible but will take effort, but that would be a “proper” way to understand programming.
Most people learn one step at a time, you won’t grasp the nth step until you understood all those before it.
Guitarshredder_1996@reddit (OP)
Thanks for the advice, I was under the understanding CS50 was for people far more advanced in programming.
Knowing thats not the case I will look into it. Thank you.
Triumphxd@reddit
Nope it’s an intro class. Same as anyone doing a degree. Assumes very little prior knowledge. That doesn’t mean it’s easy of course
PoMoAnachro@reddit
So, there's a couple of different stages of learning.
The first is like the raw syntax of a programming language. Like because we program in text, we can type a lot of letters that aren't valid code. For learning an instrument, I think an analogue is giving a child from a culture without manufactured instruments a saxophone and saying "This makes music" - it might take them a long time to learn how to make it make sound. They might just start off trying to bang on it or hit it with sticks! Once you learn the syntax of a programming language - what are valid "words" to use and roughly what they do, you're at the "knows how to blow into the mouthpiece and where to put your fingers" stage of learning.
Alternately, you might look at that stage as writing sheet music for someone else to play. Because, really, it is the computer who is executing the tasks, you're just giving it instructions. Can you imagine learning how to write sheet music through trial and error and never being told how the symbols work? It'd be pretty hard. You need to learn the relationship between the symbols and actions and the result.
But once you're past that stage, there's a long middle area where you're best off avoiding too much book learning and just try trial and error - learning to make the sounds you want, you know? You can go to reference materials when you're struggling, but you want to get to the point where you can make your instrument make any sound you want it to.
After you've got that level of proficiency, being able to make any sound you want, then you move on to "what sounds sound good?", start to learn about musical genres, how to play with others, etc. That's when you're going to want to start reading a lot more and studying some theory, though there'll remain no substitute for practice.
To abandon the music metaphor - I find it takes non-programmers about as long to become proficient in programming (getting through the first two stages and starting on the third) as it takes your average person to become fluent in a language not related to your native language (so as long as it'd take an English speaker to learn Russian or Chinese). Thankfully, all the subsequent learning after that comes much faster.
Anyways, learning programming is an endeavour measured in thousands of hours, so don't get disheartened if it feels slow starting out.
Guitarshredder_1996@reddit (OP)
Good advice and analogies. I know the skill ceiling for programmers is nearly infinite, but an understanding of how long everything takes at average levels is good to know.
Beregolas@reddit
In user interface design, we call this "discoverability". Programming doesn't have that. If you don't already know the concept (like how loops work, or recursion) you will have to learn that before you can really use it. Just typing things and trying doesn't really work (except for very few people).
I personally learned programming at university. It was a lot of banging my head against multiple conceptual walls, until I broke through them, one by one. Every single concept I needed to apply a few times until it clicked in with the rest.
And as far as I can tell, there is no shortcut to get through this. You will need to just spend more time on the basics. Starting with a game engine is more complicated, I suggest learning the basics of programming first.
Guitarshredder_1996@reddit (OP)
You know its good to know thats just part of it. I honestly just figured it was me sucking at learning these types of things.
Starting with unity was not so much a (I know this is the worse option) as it was im being pressured to at least do basic audio implementation ASAP.
I will try some basics as well, maybe that will end uo speeding things up in the long run. My goal is 20 hours a week for 6 months and by month 4 I hope to be able to implement basic audio without referring to a tutorial every step 😂