coding for musicians

a blog about the similarities between music and software and how to switch careers (if you want to)

Self-teaching is a concept that's become more and more popular and well known nowadays. With schooling going online for the foreseeable future, more and more people are seeking supplemental ways to boost their knowledge and education. Even folks like myself (and potentially you!) are using the internet to transition their careers.

I will vouch for self-teaching 100% of the time, but you should be aware, self-teaching is a skill that is learned and is not easy for everyone; even more so for complex subjects such as software development.

There are limitless things to learn and limitless resources to learn from, however, this poses a double edged sword. It is extremely easy to also get distracted- but with a little bit of practice and some insider tips (this blog post), you'll be able to stay focused, learn any skill on your own time, and leverage the world's decentralized knowledge database (the internet) to your fullest potential.

Below are my top 5 essential tips for successful self-teaching. Each of these tips were crucial for me during my self-taught programming journey and I hope they help you too!

1) Stay consistent: learn every day, even it's for only 10 minutes. Consistency is the most important tip I can give you. I would rather you learn for 10 minutes a day than do 2 hrs on only one day a week. The most frustrating thing I experienced was having to relearn concepts I knew I already went over- all because I wasn't consistent! The more you go over something, the more it becomes second nature and the longer you will retain it for.

2) Take notes (especially on paper): Taking notes on paper makes your note taking process more intentional than if you were to simply take notes on your computer. It separates your environments and lets your brain know, “hey, when I'm writing something down, I really think its important, and you should remember it, okay?” Even the simple hand, eye muscle memory that comes from writing things down is immensely powerful for how your brain retains information. For me personally, I've found taking notes via keyboard and the computer simply don't stick as much. Try both out and see what you like the most, at the very least, just take notes!

3) Follow the roadmap: While you're reading this, go get the roadmap I've created at https://selftaughtsoftware.com – It's a simple, one page PDF that outlines exactly what you need to learn and in what order. This is something that took me way too long to figure out when I was first beginning my journey. It's also diluted down to only the most important of topics that are required for getting a junior level job. If it's not on the roadmap, you don't need to worry about it for now.

4) Don't jump around or chase the squirrel: When you find a resource to learn one of the topics from the roadmap, make sure you absorb the resource in its entirety before moving on. One of my biggest mistakes was bouncing around resources way too much. I would start reading one article, get distracted, jump to another video, not like it, try a third tutorial, etc etc. until 30 minutes later I realized I was only skimming the material and using the quality of the material itself as an excuse for me not learning it. If you find an article for example, read the article as a whole several times over before moving, on or if you find a video, watch the whole thing.

Our attention spans are poison to our self-teaching journey, take control of yours and you will go much further, much faster.

5) Try and teach others, create a blog: This point might seem counter-intuitive to you. “How could I possibly teach someone anything about programming? I just started!” Trust me, I felt the same way, but it was a huge mistake for me looking back. The point of the blog isn't to gain some huge internet following, the point of the blog is to force you to communicate your thoughts and your knowledge in a way that someone else could learn from it.

Teaching is the fastest way to make sure you truly know something. You now have accountability! See how this works? It's a healthy pressure.

If you don't want to start a blog, just grab a friend and try communicating the completely foreign concept of whatever it is you learned to them. You'll have to teach them as if they were 5 years old! It's a truly powerful 'hack' you can use to absorb material fast and thoroughly.

While there are plenty more tips I could give you, these were the 5 most important to me in my journey and I think they will be for yours as well.

To download the roadmap I mentioned in this blogpost, go to https://selftaughtsoftware.com – The PDF will act as a guiding light for you through your self-teaching journey and will make sure you stay accountable to yourself and stay on track.

What this book is and what this book is not.

This book is not a code along, in depth tutorial series that will cover every nuance of every programming language you could ever think of – no.

This book is more of a safari guide, leading you through the jungle of self-taught education in the world of software.

It will save you hours upon hours of wasted study and out-of-order learning that will surely confuse you if left unsupervised.

It is the guide I wish I had 7 years ago.

It will help you organize your thoughts and help you see the trees amongst the forest and keep you on a steady track to make sure you stay on course to becoming a junior web developer.

Now of course, this book certainly will discuss concepts and code examples and will go fairly deep on a lot of different things, however there are plenty of free resources that exist that have already done that much better!

The power in this book is the organizing and prioritizing of those resources.

Like I mentioned in previous posts, I wasted six months because I didn't know what I was supposed to be learning and I kept jumping from topic to topic because I was so excited. While I made it out in the end, I wasted so much time.

This book will also provide cheat sheets and ideas for example projects that will help solidify concepts and will help bolster your portfolio.

Your time is important and valuable and I want to save you from yourself. I'm excited for the things you are about to accomplish and for what your life is about to become.

Let's do this!

I'm a classically trained musician and was a professional musician and producer in Nashville, TN for a few years. Now I'm a software engineer for a famous four-letter Aerospace organization. How did that happen?

I want to share my story of how I got here, and how you can get here too if you want it badly enough.

I'm a classically trained bassoonist and have played the instrument for over 15 years. I have two college degrees in Music Theory & Composition. I've worked as a professional music producer and sound engineer in one of the music meccas of the world.

But even with all of this experience, both in the classroom and real life, I was still barely able to pay the bills. This was incredibly frustrating for me. No one at my university was keen on telling me this while I was paying tuition. There was zero advice or foresight on what to expect in the real world once you graduated. It was just a silent assumption that everything would work out.

And while I would never trade my musical journey for anything, and some of that assumption is definitely my fault, it did leave me angry and jaded at the educational system. How was it possible I could pay so much money for so little return?

I was a diligent student and was extremely self-disciplined. I always got A's or B's and knew I could learn anything if I just stuck with it. Surely there was a skill out there I could learn for very little to no money out of my pocket and turn it into a career.

The time was around 2014 and I noticed online educational resources started to become decentralized. It seemed that you could search any topic and you could go pretty in depth with learning that topic- but only if you were diligent and knew how to sift through the garbage.

See, with things like YouTube, the barrier to getting your voice heard is next to nothing. However, that also means, there is that much more noise if you are a consumer.

Fast forward a few months and lo-and-behold, I decided that software engineering was the career path I wanted to pursue. The ceiling for income seemed limitless, and there was already a ton of free-to-cheap information online. Plus, I had even interned as a web developer in high school and really enjoyed it (funny how things work out). So why not?

Can you guess what happened when I began learning? There was too much information. I seemingly got distracted every 30 minutes and found myself spinning in circles and not actually absorbing any of the material.

I was extremely annoyed and discouraged. I even almost gave up at one point.

I was convinced that the self-taught route was impossible. Surely I was going to have to succumb to dropping another $10,000+ for going to a boot camp, or heck, dropping even more to get a Computer Science degree.

I collected myself and gave it one last shot to learn things the right way. I decided to plan out my education. I had to create a roadmap and a toolkit I could reference to guide me on my journey.

Now creating this roadmap was an adventure in itself. It took me a couple of weeks to create a curriculum I knew would encompass everything it would take to land me that first developer job.

Along the way, I also discovered techniques for learning and absorbing this complicated material. And surprise! It tied in perfectly to my musical background (and will for you too!).

See, as musicians, we are used to woodshedding and practicing hour after hour to learn a piece of music. We are used to and conditioned to delayed satisfaction. This is exactly the mentality you need to have when learning software engineering and web development.

Musicians are analytical and, believe it or not, very mathematical! Both are critical skills for learning and mastering software development (math isn't essential, but it certainly helps). Writing music and writing software have eerily similar parallels. It's why us musicians become successful software engineers at a much higher rate than other educational or professional backgrounds!

I want to emphasize though, it will not be easy, and it is not a get rich quick scheme.

However, if you follow my roadmap and toolkit and follow my advice for how you can leverage your already existing musical skill set, you can come out on the other end of this with unlimited potential for a new career and earnings.

Teaching myself software and landing my first job took about 15 months, however I know for a fact, I wasted about 6 of those months having to re-learn things I didn't absorb the first time around due to poor learning discipline and technique.

That's the time I want to save yourself from. 6 months! Would you invest 9 months in yourself for very little money to change the rest of your life?

I went from barely making $40,000 as a musical professional to now making $150,000 as an aerospace software engineer.

Learning these skills also don't mean you have to give up on music! I've had clients who have followed my guide so they could use the power of software to start a part-time, supplemental side hustle. I still produce music in my spare time! It's up to you what you want to do with this knowledge.

So please, don't wait another minute! Let me help you leverage your musical skills now for a better future. You are talented and brilliant and you deserve to get paid for it.

Sign-up for my newsletter and first few chapters of my roadmap and toolkit to get started on your self-taught software development journey at:

https://codingformusicians.com/

Web browsers: how do they work?

Considering how much technology and internet access is integrated across all of our devices nowadays, web browsers are basically a daily part of our lives. Heck, I know of some refrigerators that can even connect to the internet now...

Whether that's good or bad is a debate for another day but what we're going to discuss now, is how web browsers work under the hood and what you need to know as a soon-to-be web developer and how to use them to help you develop applications.

At the core level, Web browsers are just User Interfaces (UI) for navigating the internet. You can certainly view web pages and web resources in ways other than a web browser, but it won't be as pleasant nor as easy.

Web browsers are software ran on the client's computer. Typically, a user types in some web address such as http://google.com, and then hits enter in the URL navigation bar. When this happens, a request is sent to the desired website (web server) which then tells the server (Google in this case), “Hey! I want some information!” Google then makes sure you are allowed to access the information you are requesting, and if all looks good, sends the information back to the web browser which then displays the results on your computer.

The main function of a browser is to present the web resource you choose, by requesting it from the server and displaying it in the browser window. (html5rocks.com)

Typically the resources come in the form of HTML, CSS, JavaScript and/or other resources such as images, PDFs, files, etc. The web browser then interprets these files according to W3C standards (World Wide Web Consortium, the int'l org that determines specifications for web languages such as the three we just mentioned) and displays them in the window after parsing and interpreting the code.

While this standard exists, historically web browsers haven't always been uniform. While they are pretty darn close in today's world, they can each still choose to implement or restrict certain features or specifications for various reasons, so it's always good to check that if the code or language feature you are using is currently supported in a certain browser (there are ways around this we will discuss later).

The 5 most popular web browsers out today in 2020 are: * Google Chrome * Firefox * Safari * Microsoft Edge * Internet Explorer

While there are several different options when it comes to choosing a web browser, under the hood, they are functionally very similar and can be divided into several core categories of functionality.

The Browser Interface: this is the interface and functionality used to interact with the browser as well as tools that help you navigate websites and web resources. These include the address bar (where you type the web address), bookmark tabs, search history, password storage, plugins, preferences etc. These are features that are going to be the most different between browsers as they are completely left up to the company developing the browser, but for users' sake, they are all similar from a high level. Can you imagine if each browser searched the web in a completely different way? It would be a disaster.

The Rendering Engine: The rendering engine interpolates code sent from the web server. This is what does the heavy lifting in order to display a website to you, the user. The rendering engine interprets HTML, XML, images etc.

Each browser has its own rendering engine: * Internet Explorer: Trident * Firefox & other Mozilla browsers: Gecko * Chrome & Opera 15+: Blink * Chrome (iPhone) & Safari: Webkit

Networking: Browsers retrieve resources using internet protocols such as HTTPS, HTTP, or FTP (https://www.izooto.com/blog/understanding-http-https-protocols#:~:text=Hyper%20Text%20Transfer%20Protocol%20Secure,and%20the%20website%20are%20encrypted.).

JavaScript Parser/Interpreter: The JavaScript Parser/Interpreter reads and executes JavaScript code embedded in a website. The code is ran and then sent off to the rendering engine where everything is glued together.

Data Persistence & Storage: Browsers support storage mechanisms such as localStorage, sessionStorage, IndexedDB, WebSQL and FileSystem. You can think of them as small, temporary databases created on the local drive of the client's computer where the browser is installed. Each of these tools can manage user data such as cookies, bookmarks, preferences and also allows web developers to persist data and other important information (that doesn't necessarily need to be secure) across web requests and browser actions.

Hopefully all of these points help you understand at least a little bit more on how web browsers work. Check out these resources below for more exhaustive reading if you are still curious!

https://hackernoon.com/how-do-web-browsers-work-40cefd2cb1e1

https://www.godigi.org.au/digihouse/learning-guides/what-web-browser

https://www.webopedia.com/quick_ref/internet_browsers.asp

Best, CFM

Musicians make great software developers. It's a researched fact that's been written about a good bit over the last 5 years.

It's actually the reason I created this site! I am a classically trained musician with over 15 years of bassoon, music theory, and music composition experience- and I just happen to be one of the statistics that transitioned into software development.

However, I didn't make the jump because I read these articles, I made the move a few years before it was a trend people became aware of. I made the leap because making money in music is hard. Really hard.

That brings me to point #2 of why I created this site. I want to specifically help more musicians who were like me; needing a career that could actually sustain themselves and their family.

Don't get me wrong, it is definitely possible to make a living as a musician, I know plenty who do, however the ceiling is still pretty low in terms of max income, even for what many consider a 'successful' music career.

Sparing you my personal story and how I got here (will be another post I'm sure), let's get into the science behind why musicians make great software developers.

...thanks to their performance background, attention to detail, and innate need to perfect their parts, musicians tend to be analytical, logical and methodical—skills that the best coders also possess. (huffpost.com)

I remember going through two university music degrees and the amount of sheer practice (or woodshedding as we'd call it) it took for me and my fellow classmates to stay competitive and competent with the pieces we were learning. Parts vary greatly, from playing in a 60 person orchestra to a 3 person trio, you have to be flexible as a player and realize your role within the ensemble. You might even get stuck waiting 10+ minutes of counting bars (hopefully there's a cue!) only to play one or two notes. You can't lose focus for even a second, no one can, or else the entire work falls a part.

This skill naturally forces musicians to realize their place within the greater picture of a piece of music and forces their brain to analyze relationships and structure. These are skills that are wildly useful in a software development setting.

“There seems to be a high correlation between musical ability and reasoning skills,” Terry Skwarek, the director of SharePoint administration at DePaul University, once told CNN. “It has to do with recognizing and manipulating patterns. That happens in music and in programming.” (huffpost.com)

Software and music are both artful and creative. While there are certainly rules to both, both are encouraged to be broken if you can reason the decision. There are many ways to craft a piece of music as well as an application. It's why development tends to be such a natural transition for so many musicians.

It's counter-intuitive to some to hear that software is creative but it certainly is! Every programmer has a personality and you can see it in how they write their code, no two programmers will create an application the exact same way. Again, there are certainly best practices and frameworks to guide you by, just like in music, however, it is encouraged to think outside the box!

Math is also heavily involved in both music and software. With music for example, you are constantly surrounded by fractions, intervals, beats per minute, time signatures, etc..

Harmonic structure is merely the stacking of different intervals to create a chord, how fast a piece of music should be played, is notated by how many counts happen within 60 seconds. These are just a couple of examples of how musicians are constantly using the analytical side of their brain.

Software can get complicated fast when it comes to math, especially with things such as algorithms and complex computations. Musicians minds are naturally tuned to thinking in numbers already, so the sometimes rude awakening is softened a bit by the previous experiences.

Jumping back to the woodshedding quote ealier:

Both software development and music are skills that require finesse, so they can be learned similarly,”

As a musician, you are already predisposed to the grind required to learn a piece of music. It's not something that happens overnight. Instant gratification is a rarity in music. Therefore, when transitioning to learning software, a notoriously difficult, arduous process, musicians are less likely to hit the 'flight' response and abandon ship. They know what it takes to do something the right way and are more likely to stick with it through the end.

These are just a few of the many examples of why musicians make great software developers. I hope this gets you excited if you're looking to make the jump! Tomorrow, I'll pick back up on where we left off with the curriculum. See you then!

Best, CFM

How the internet works! Sounds pretty intimidating huh? Well let's spend this blog post breaking it down.

From the Mozilla Developer Network (https://developer.mozilla.org/en-US/docs/Learn/Common_questions/How_does_the_Internet_work)

The Internet is the backbone of the Web, the technical infrastructure that makes the Web possible. At its most basic, the Internet is a large network of computers which communicate all together.

(We won't get into the history here but feel free to check out that previous link at MDN, they touch on it a bit and it's super interesting!)

At its core, the internet is the infrastructure that allows The Web to work and exist. When two computers need to communicate they need to either be connected physically via wire, or wirelessly through some other protocol (Wi-Fi or Bluetooth for example).

Thankfully, your computer is not limited to connecting with just one other computer, however the more computers you connect with, the more complicated things become.

Again referencing MDN:

To solve this problem, each computer on a network is connected to a special tiny computer called a router. This router has only one job: like a signaler at a railway station, it makes sure that a message sent from a given computer arrives at the right destination computer. To send a message to computer B, computer A must send the message to the router, which in turn forwards the message to computer B and makes sure the message is not delivered to computer C.

Routers to the rescue!

tl;dr, routers drastically reduce the complexity, overhead, and sheer number of cables needed to connect computers. The next step becomes connecting routers to routers- suddenly you are able to scale infinitely!

However for the purposes of our demonstration, we've only built a large scale network for ourselves.

The penultimate piece of the puzzle is to connect our network to other networks around the world. In order to accomplish this we need what's called a modem.

From MDN:

...modem turns the information from our network into information manageable by the telephone infrastructure and vice versa.

Thankfully, the world already has a scaled infrastructure in place for communications- the telephone! The modern internet leverages that already-in-place infrastructure and just beefs it up a bit.

And finally we connect our modem to an ISP or Internet Service Provider which then takes care of the job of connecting modems to other modems.

See how this scales nicely?

In our next lesson we are going to go over how web browsers work and what happens when you actually try to connect to another computer.

Hope you learned something today!

Best, CFM

Today I'm going to be going over what we'll be learning during our journeys to become junior front-end web developers!

Each bullet point below will be its own blog post and I'll be going in order, breaking down each item, consecutively, until we've covered it all! I'll then go back in more detail on some of the more complicated subjects and do some pair programming videos or at the very least, some code snippets to help cement some concepts for you.

Without further adieu, here's the road map:

The Basics * How the internet works * How web browsers work * Protocols: what is HTTP?

HTML * The history of HTML and where it is today * Using Chrome dev tools to inspect HTML * Common HTML elements * Less Common HTML elements * HTML architecture

CSS * The history of CSS and where it is today * What is CSS used for? * Inspecting and changing CSS with Chrome dev tools * CSS basics * Advanced CSS * What are CSS pre-processors? * Common CSS Frameworks and what they're used for

JavaScript * Adding JavaScript to HTML * Variables * Primitive Types * Working with Strings * Thinking Logically with Conditional Statements & Loops * Working with APIs and Data

Version Control * Git & Github

Advanced JavaScript * this will be expanded on and developed when I get to it, we could go on and on forever in this one :) * Frameworks & Libraries, what are they and why are they needed? * jQuery, the history of and where it stands today * React * Vue

Topics to check out after you've completed this course

Whelp, that's it for now. Hopefully that gives you a good overview of whats to come! I look forward to kicking things off with you tomorrow discussing how the internet works!

Don't forget to subscribe if you want to stay up to date and not miss a beat, I'll be publishing every day. Thanks for reading!

Best, CFM

Greetings everyone, thanks for sticking around for post #2!

My goal with this is to blog every day for who knows how long, and to knowledge dump whatever's on my mind. The topics will stick close to music's relationship to software and how to transition from a career in music to one as a software engineer- hopefully along the way I'll be able to refine my message and give better content to you.

I fully plan on posting videos, audio clips, code snippets, links to projects/githubs etc. to help each of you learn as best you can.

I want to be the guide that I wish I had 8 years ago when I first began learning software development.

I'm what they call, 'self-taught'. Which is a misnomer in my opinion- I did not 'plug into the matrix' or rest my face upon textbooks and absorb knowledge via osmosis – no – instead of getting a Computer Science degree, or going to a trendy Bootcamp, I simply learned through open source educational materials and several paid resources, many of which you've probably heard of (and that I'll dive into at some point), but my point is that it was hard!

Without getting too deep into the pros and cons of self-teaching right now (that will be another post), a big con is simply distraction. There's a million shiny new things to learn when you're learning any new skill and unless you have a curriculum or road map (a big pro for boot-camps and traditional degrees for example), you're going to spin your wheels when facing the World Wide Web. However, you're also going to save a lot of $$$ (why I did it).

I want to save you the 6+ months I lost when chasing new technologies or languages. I want to save you the gutted feeling of realizing you actually haven't learned any of the stuff you've been watching or reading for the last 2 weeks (because you've actually been staying surface level with way too many topics).

To cut to the chase, I want to teach you the bare minimum skills needed to allow you to start seriously applying for junior web and software developer positions.

Those skills are:

  • HTML
  • CSS
  • JavaScript (and frameworks)

I will walk through how the internet works, how browsers work, how to think logically, what a day to day looks like as a developer, and every question under the sun you might have. I'm going to also point you to other free, open source resources to fill in the gaps but I'm going to *urge you to not skip ahead or jump around like I did.

I'm going to lay out a road map for us tomorrow and what will lie ahead in the coming days and months so you can get a rough understanding of what you'll be getting into. My expectation is that you, assuming you have zero experience, can get a junior level position in 6 months time if you follow this road map diligently and do the work I tell you to.

Will you accept the challenge?

And this blog/roadmap isn't just for musicians – I'll of course be leaning that way throughout this with anecdotes and cases that might make more sense to a musician for example but you're more than welcome to join along if you're not, this information can benefit anyone!

Switching careers to software development has been nothing short of life changing for me and if you're looking for it, I hope I can help change yours too.

Best, CFM

Welcome to the 'coding for musicians' blog! Where I write about the crossovers between music and software development and how musicians can use their skills to change careers.

Music and software have a lot more in common than you might think. So what if I told you that musicians are naturally inclined to be great software developers? Well it’s the truth! That’s exactly my story of how I got here and I want to spread the good news and help others make the leap.

I went to school for music and wound up getting my masters in music theory and composition (because I didn’t want to enter the real world, truthfully). I thought I was going to teach at a university but it turns out, you need a PhD for that! Crap. Truth is, I was burnt out from school and sick of paying thousands of dollars for a degree in a field that didn’t have many opportunities.

Fast forward to graduation, I immediately moved to Nashville, Tennessee to make it as a music producer and a sound mixer. Surprise, there's 50,000 people already there that are better than you! Anyways, I had some very meager success over those 5 years, but even that little bit of success wasn’t enough to pay the bills. I was starting to see the writing on the wall. Either I was going to have to get incredibly lucky, or I was going to go completely broke chasing ghosts.

I didn’t want to just ‘barely get by’, I wanted to have a better life for myself. But I also didn’t want to go back to school and pay thousands of dollars for just a ‘chance’ of getting a job. That didn’t make sense to me. I wanted a low cost education, with a field I’d enjoy, with a job market that was thriving. Sound too good to be true? Well it wasn’t!

Enter Software Development!

This blog is for me to dump my thoughts from my experience as a musician gone software engineer and to hopefully help others who are interested in making the same jump.

I'm targeting musicians because I am you and believe it or not, you are set up perfectly to build software. Your skills are worth more than a few measly tips at the local venue! I hope you'll join me on this journey and discussion as I think it's not only fascinating but can also be life changing if you're willing to put in a little bit of work.

Best, CFM