Hi Everyone! My name is Dakota Lee Martinez. In the following post, I want to talk to you about why I wanted to learn Software Development. In my life, I’ve been passionate about many things. But, few things are as exciting to me as the developments in the field of software.
Some of my favorite conversations have been about the role of technology in our rapidly changing world. I think that the ability to think abstractly and to create tools is one of the things that really sets humanity apart. At present, the acceleration of progress in Software Development is extremely inspiring to me. These days, there are so many amazing things that we can do on the internet.
I have always been a creative person. I would always be inventing new ways of doing math problems, imagining how different the world would be if we changed the rules, and exploring how changes in the language I use to talk to myself could transform the way I felt about my life. I’ve written many songs, recorded them, read about countless techniques for getting the best sound in a recording or a live situation. Still, as I’ve gotten older, software has become a more substantial presence in all areas of my life.
Today, I am continually amazed by all we are able to do with recording software in our bedrooms. Ultimately, I have felt the value that great software can provide within the world of music long before I decided to learn software development. There is one particular story that I have to share, because it’s a wonderful example of just how big of an emotional impact software can have. For this story, I’ll take you back to my college days studying music in Claremont.
Understanding Bach for the First Time
For my final project in a music history class, I wrote a paper on historical systems of tuning and temperament used in the renaissance, classical and romantic periods. Assuming that you and I are similarly nerdy, I’ll take you through a little bit of what I learned researching that paper. During my research, I read an awesome book called How Equal Temperament Ruined Harmony (and Why You Should Care).
The advent of equal temperament, something that virtually all musicians take for granted today, radically transformed the experience of the sound of musical instruments and the ease with which they could be played together. Before Equal Temperament, it may surprise you to learn that there were many different methods of tuning a keyboard instrument. Before we get into the differences between them, let me give you a bit of background on why there was so much fuss.
The problem with tuning goes back to Pythagoras. The relationship between two notes can be looked at as a ratio of two different frequencies. In this way, we can describe a middle C and the note one perfect octave above as being related by a frequency ratio of 2:1. Similarly, the note one perfect fifth above is related by a frequency ratio of 3:2. But, there is an inconsistency. If we start at the lowest A on a Piano (referred to as A0) and go up to the A 7 octaves above (A7), we get a frequency ratio of 2^7:1 (128:1). However, if we start at A0 and go up 12 perfect fifths to what should be the same A7 as in the previous example, we get a frequency ratio of (3/2)^12 (129.746:1). So, when it comes to tuning keyboard instruments, some compromise between the various harmonies has to be made. We can have perfectly tuned perfect fifths or perfectly tuned perfect octaves, but not both at the same time. The only way a keyboard instrument could play everything perfectly in tune would be for each octave to have many more than 12 notes in it.
Before Equal Temperament, there were literally hundreds of different methods of tuning a keyboard instrument, all making different tradeoffs, sounding different when played in different keys. Most methods of tuning sought to make the more commonly used keys sound better, while those played less often would be farther out of tune. It doesn’t take too much thought to realize how complicated this system would have been with a larger group of instruments, all of which had tuning issues of their own!
After we developed both the technology to measure the frequency of a given note and the machinery necessary to precisely calibrate string tension to adjust the frequency of that note, equal temperament allowed a standardization of tuning. Just in case you’re wondering, equal temperament uses the perfect octave at 2:1 as its basis for tuning. All of the perfect fifths on a modern piano are tuned to 2^(7/12):1, which is 1.498:1. So, all the perfect fifths on a modern piano are slightly narrower than the perfect 3:2 frequency ratio. This was truly revolutionary. Without Equal Temperament, the entire genre of Jazz might never have come to be. (Everything being equally out of tune allowed for the kind of parallel motion from chord to chord used frequently in Jazz that would have sounded horrible with older tunings.)
Yes, but what does Software have to do with any of this? Well, I want to tell you about a feature I discovered in my Digital Audio Workstation (DAW) that allowed me to actually adjust the tuning system used for playback. First, let me give you the context for my little experiment.
One of the most famous works by Johann Sebastian Bach is the Well Tempered Clavier. It was composed to demonstrate the wonder of a keyboard instrument that could be played in every key without adjusting the tuning. This was quite a big deal at the time, as there was considerable skill involved in composing pieces in the more obscure keys whose tuning was sacrificed to make the common keys sound prettier. (The temperament Bach used is thought to be out of the irregular temperaments popular at the time that were tuned to favor common keys but still be playable in less common ones.)
Hearing these works on a modern piano, I never cared much for them. It always seemed to me like there were too many modulations (key changes) and decorations and not a whole lot of substance. But, thanks to modern software, I was able to play one of these pieces on a MIDI keyboard and adjust the temperament of the electronic piano on playback to reflect a tuning system prevalent at the time it was written. All I can say is… WOW. I will never forget the feeling I got when I first heard that piece in an appropriate temperament.
I remember in the music history classes the books talked about D minor and how it was an unbelievably sad key, and F Major was a Pastoral Key and so on. This always felt strange to me as I never had any sense of the keys having any different emotional character from one another. I can tell you now, though, that I felt instantly how each tonality took on a different character in these old tuning systems. Listening to Bach’s piece in one of these old tunings, each modulation takes the listener on an emotional journey. Without Software, I may have appreciated the genius of Bach, but I would never have experienced it the way that I did. I couldn’t help wanting to learn software development to be a part of something so cool!
Open Source Culture
Another thing that I find extremely exciting about the world of Software Development is the prominence of open source culture. In what other industry do you hear major players announcing that they are openly collaborating on huge projects that are all open to the public to view? Google and Microsoft agreed to collaborate on building Angular 2 in TypeScript, a language developed by Microsoft and expanded for use in Angular 2. The idea that openly sharing knowledge is actually more valuable than keeping your best ideas to yourself seems self-evident to me. But, in many industries, a culture of secrecy reigns.
Okay, of course there are “tech” companies that actively cultivate a culture of secrecy (Apple comes to mind). But, I would argue that Apple is an entirely different kind of company. I would definitely check out Chris Messina’s article Why Silicon Valley is all wrong about Apple’s AirPods for more on that idea. Many companies in the technology space have realized that the challenges we are facing deserve an open forum. In fact, the open forum encourages better software by opening the conversation to more people. More users leads to more feedback. More feedback leads to more focused work. And, in the end, more people involved leads to more contributors to the actual work itself.
There is just such a huge upside to an open discussion about the development and implementation of libraries of software as they are being developed. I am excited about the idea that the work I’m doing to solve problems that I face can be used by other people to solve problems that they face. I have benefitted so much from the generosity of strangers on the internet. Countless blog posts, podcasts, videos, and Stack Overflow posts have guided me on my quest to learn software development. I really appreciate how much sharing of information exists within this space and how much of that information is given freely, not just to an exclusive few.
Growth in the Industry and the Prominence of Education
Another big reason that I was excited to learn software development is the rapid pace of change in the industry. There is a tremendous amount of growth spanning many different technologies, industries and infrastructure. Software is everywhere and it’s very difficult to find any line of work where you don’t feel its influence. Because the demand for software is growing across nearly every industry, there is an intense need for more programmers. There is good money to be made in Software Development, so why aren’t there more programmers?
I think there’s an idea out there that learning to code is hard, that you have to be really good at science and math to even have a chance of being good at it. Now, there is quite a bit of debate about whether anybody can become a programmer. My full take on that is for another post, but I generally have a strong resistance to any arbitrary negative generalizations made about people. I don’t like it when people say that some people are born with abilities and others aren’t. I’ve felt like this for a long time, so I was delighted to read Peak: Secrets from the New Science of Expertise, which offers a great discussion of how humans become experts.
I believe that anyone who has the desire and dedication to put in the deliberate practice necessary to learn a craft can do it. This country has a need for talented programmers. We can’t afford to be talking about this skill as if only certain people can do it. We want to be spending our energy making it easier for kids to develop the desire to learn software development. We also need to be focusing on how to train people from an early age to develop the skills necessary to make meaningful contributions to the world of software development. In our lifetimes, software may be running inside of our bodies. It is imperative that we give all children the opportunity at an early age to see what fun can come from learning how to talk to computers.
Fortunately, I don’t think it has ever been easier to learn software development. The amount of quality resources available on the internet for free is staggering. Check out Udemy, Udacity, W3Schools, Codecademy, and Free Code Camp if you don’t believe me. And, if you’re willing to pay, the quality of those resources increases even more. I went through a 12-week part time Beta course called Codecademy Labs at the beginning of 2015 and it changed my life.
My Experience with Coding Bootcamps
Before attending Codecademy Labs, I hadn’t really been in an environment with other people who wanted to learn software development. When I was there interacting with the TAs and the other students, I knew that it was something I could learn how to do. In the end, it was clear to me that our instructors had faced a lot of problems and knew what resources they could use to tackle them. All I needed to do was put myself in the situation to face those problems and find the resources to solve them.
Codecademy labs was not an immersive bootcamp, but more of a part time taste of what a bootcamp could be like. We covered quite a bit of ground in just 12 weeks, and I definitely learned a lot. Still, I felt like there were things I really didn’t understand yet. I was still fuzzy on what was going on with the ORM (Object Relational Mapping) to generate database code from ruby code. I felt like I’d done a lot of coding, but not as much reading and understanding what I was doing.
After returning to WordPress to do some freelance work to test my skills, I really had the sense that the best way for me to learn software development would be as part of a group. That way, I would feel the pressure to level up my skills to keep up, and I’d be surrounded by people who were performing at a level that I wanted to reach. So, I upped the ante again and joined the Learn Verified Full Stack Web Developer Program, recently released by the Flatiron School. After being accepted, the program is designed to put students through 800 hours of training towards becoming a full-stack web developer.
At the time I took the course (starting in November 2015) the stack was AngularJS (1.x) running on a Ruby on Rails backend. I’m in the process of completing my final project for the course and I can say that my confidence working through problems and pushing through roadblocks has increased dramatically since I began studying with Flatiron.
The main appeal to me of the Flatiron School’s new online program was its focus on people looking to make a career change. A major factor in my decision to enter the program is that they offer job placement services with a career coach upon graduation. They offer guaranteed job placement upon completion of the program. To back this up, they release an independently verified job placement report which reports how long it took graduates to get a job after graduation and what their starting salary was. I have just begun interaction with my career coach and I can tell you it’s definitely worth it.
The Importance of Long Term Continuing Education
Learning has always been an important part of my life. I feel most excited when I am continuing to expand my thinking and when i’m learning new skills. This is one of the main reasons I wanted to learn software development. I have gotten the sense that it’s very important to continue learning new technologies and reading about changes in the development landscape. I think that being in an environment where you are forced to continually face new concepts and challenges is exhilarating. The commitment to learn software development is a commitment to a life of constant learning.
My first full time job was at a startup in the Music Accessory business, manufacturing products that are distributed all over the world. There, I found that one of my key roles was in finding software that we could use to run the business more effectively and efficiently. Still, I found myself wanting to look under the hood and figure out how they worked. Our website was built in WordPress, so I taught myself PHP and started reading the WordPress Codex.
At first, a lot of it went over my head. But, I found that when I returned to WordPress after studying Ruby on Rails and AngularJS at Codecademy labs, I had a much better sense of how the pieces were put together and the differences between the two approaches to building a web application. One of the things that is surprising when you learn software development is how much easier it is after you’ve been going at it for a while. I’m still shocked at how much progress I’ve made in the last month while working on my final projects. When I look back at code I wrote a month ago, I find myself thinking… Wow, that was really not the best way of doing that.
The experience of constantly being on the edge of my intellectual capacity is thrilling to me. I find myself growing in my capacity to solve problems every day. I feel my abilities to solve problems creatively growing every week and I am pumped to share my knowledge and start putting my skills to use in a professional capacity.
Cool Stuff We Can Do With Software
In the end, I am inspired by all of the amazingly cool stuff we can do with software today. By choosing to learn software development, I get to be a part of all of the wonderful things that the community is contributing to the world.
We can stay in touch with friends all over the world from virtually anywhere. When I run live sound for the 14-piece funk band that my wife, mom & I sing background vocals in, I can control my awesome digital mixer with my iPad via WiFi, adjusting any of the effects, monitor feeds or volume levels from anywhere in the venue. Logic Pro X’s new Drummer App sounds amazing and it allows you to adjust the way a drummer is playing by using a super simple UI.
You can go to Disney World and use a Magic Band to customize your whole experience. You can select all the rides you want to go on and you’ll automatically be scheduled with Fast Pass+ on all of the rides. When you walk around the park, the park responds to you personally and all of the photos taken of you throughout your stay are automagically available to you via your disney account.
Services like Uber and Lyft have made it extremely easier to get a ride in many cities all over the world. Air BnB has made it possible for people to find places to stay virtually anywhere they happen to be. This new generation of Web Applications have the potential to reshape existing markets and even create brand new ones.
At the end of the day, there has never been a better time to learn software development. It’s a great challenge, a rapidly changing industry with lots of opportunities and an exciting new frontier. If you have any sort of interest, I definitely recommend checking out some of the free resources I mentioned (Udemy, Udacity, W3Schools, Codecademy, and Free Code Camp.) If you work on those for a year or so and find yourself wanting to make the career change, check out a bootcamp like the Flatiron School and go for it!
Dakota Lee Martinez
P.S. Insert Awesomely Inspirational Video Here:
Also published on Medium.