Tuesday, November 22, 2011

Music to Code To - Part 2

If you actually care to read about my background in music, please check out Music to Code To - Part 1, this port is going to be primarily about the songs that I really like to code to and would highly recommend for anyone to try out.

Music to code to has to have a couple of attributes for it to be good for coding:


  1. It can't be too overbearing
  2. It has to improve thought processes
  3. Sometimes it needs to pull you away a little from what you are doing.

It can't be too overbearing

Overbearing music is music that does not let you put it into the background to focus more on other things. There are some caveats to this (see attribute #3), but in general good coding music can sit in the background while still providing value to the coding experience. Really good examples of this attribute are:

Allison Krauss - Maybe

I normally don't like country music, but who can argue with her voice? This is subdued enough that it doesn't get in your way. It's mellow. It has good harmonies. Even the chorus is not overbearing, it just rides along and lets you listen without putting too much though into it. 


Dvorak's "From the New World" - Adagio

This just happens to be one of my favorite classical pieces of all time. It's one of the greatest pieces of music I know of to code to. It lays in the background, but peeks out at you a little bit (but not too much). It's also a nice long piece, so it can help you remain focused for a longer period of time (about 12 minutes depending on the group performing it).

Badly Drawn Boy - The Shining

The melody in this song is awesome. It flows very nicely and I even find myself humming along to it, even when I'm not really paying attention to it. It's not complicated at all, which lends itself to being in the background. I contend that strings and other classical instruments improve the minds ability (see attribute #2) and this song has both.


It has to improve thought processes

The three songs mentioned above all fall into this category as well (the last two better than the other); however, in addition, there are some songs that I will put into my playlist more so than other songs to help my mind get working. These songs come into the foreground just a little bit more than the once previous. The idea behind these songs is that they engage the mind to a point of interest, but don't take over the thought process. Trust me, this is a little bit different from attribute #1. Most of the songs in this category end up being classical songs for me.


Basil Poledouris - Hymn to Red October (Main Title)

While "The Hunt for Red October" is one of my favorite movies, that doesn't overshadow how awesome this piece of music is. The male choir at the beginning sets an awesome tone that picks up as the song goes along. A similar piece to this is "Eternal Father, Strong to Save" from the movie "Crimson Tide" (yes, I know it was around before that movie, but it is where I heard it for the first time). Both of these pieces have and ebb and flow to them in terms of intensity, which I find to be very good at getting the juices flowing in my mind.

Boots Randolph - Sleep Walk

You have heard this song a billion times. It is part of pretty much every movie that is about the 50's or 60's almost without fail. The original is by Santo and Johnny, but I prefer this version. The original is a bit more laid back (if possible) and a bit more ballad like. The nice saxophone sound on this one is enough to keep the mind going and get me hopped up a little. Before you poo-poo this song, remember the purpose of songs while coding, don't get in the way, grab interest now and then and improve the thinking. I think the instrumental nature of this song, the upbeat back tempo and the sweet sax do all those things.


Brad Mehldau - Dear Prudence

If you know me at all, you know I love The Beatles. I don't just like The Beatles all by themselves, I love their music, in many of its different forms. This is probably one of my favorite covers of a Beatles song, I think it does the song complete justice. At the same time, it definitely helps improve my train of thought with the nice slow tempo, with the clean piano over the top. It's a simple melody that is very familiar which lends itself coding very nicely.


Sometimes it needs to pull you away a little from what you are doing

This attribute brings out some harder stuff from my collection, because sometimes you need something to pull you away from what you are working on to give you a breather, but also to let you mind get free of the current train of thought. 

Buckcherry - For the Movies

This is one of my old favorites, it's not too heavy, but has some spots that pull you out of staring at the computer screen for a short time. That short time of being pulled away can gear you back up for another go at the problem at hand. I find this can be like a little pep talk. Give you a little breather and let you rock out for a minute before getting back to the code.


Camille Saint-Saƫns - Air et Danse Bacchanale

This is a classical song with some great parts that pull you away. Once the bells start shaking, this one gets my attention near the end. It builds up to that end very well. Some parts allow you to work through a problem and have it sit in the background, and then when you need it, it grabs you and lets you relax for a minute with some great brass and percussion.


Now, these are just a few examples of the songs I have in my coding playlists. Sometimes, I don't listen to any music at all and sometimes, I can barely function without music playing. For me, the three attributes I mention above are not always the rule either. Sometimes, I need something that will kick me in the pants while I code and pump me up a little.

What are some of the songs you code to?  


Music to Code To - Part 1

I go through spurts of time where I almost have to be listening to music for the creative coding juices to flow. A great coding song is one that can sit in the background, but provide a little bump now and then. Generally speaking, classical music is great for me to code to. I received the Classical Thunder CD set when I was back in high school doing a lot of music.

I'm getting a little bit ahead of myself, so let me give you a little background on music in my life.

Music plays an important role for me, I was originally a music education major when I started college (yes, only one semester though). When I was getting ready for junior high, we had the option of taking band, orchestra, choir, or something else that I don't remember. I had done a minimal amount of singing in church stuff, but it didn't really interest me, neither did orchestra and whatever that something else was that I can't remember, it didn't seem like something I would like either. Then there was band. Both of my siblings had done the band thing in junior high. My brother played the clarinet and my sister the trumpet. I don't remember ever going to their concerts or hearing them practice, but something made me feel interested in band. The next decision was what instrument to choose. Clarinet didn't seem interesting and neither did trumpet, but trombone, now there was an instrument! I wouldn't have to worry about pressing keys! So, I put trombone down on my registration form.

I played trombone, with some success, through junior high. I played in the top groups at the school and was the lead chair in those groups. I don't claim to have been great at all. I was probably more confident than the other trombone players in my group, so I put myself out there more and tried more things. My freshman year, I decided to get into marching band. I had a blast doing the summer parade band and decided I wanted to do the fall marching band as well, even though freshmen were at a different school from the sophomore through senior students. The fall marching band was a great time and I was starting to feel like music was what I wanted to do with my life.

High school was a whirlwind of music. I continued playing in the top groups and was invited to play in the full symphony my school had. I learned more about classical music that year than I had ever known before. I had often thought that classical music was just Beethoven and Bach, which I didn't like at the time. My musical world was opened up to Tchaikovsky, Dvorak, Offenbach, Sibelius and others. My sophomore year, we played Tchaikovsky's 5th Symphony Finale which I still love. We did not play a watered down version of it, it was the same as in that video. I purchased a lot of classical music that year. I was also involved with the top concert band at the school, where I learned about famous march composers such as Sousa, Reed and others. I loved playing.

Fast forward to the end of my senior year. I was completing AP Music theory, playing in the Wind Symphony, Symphonic Orchestra, Jazz Ensemble, a second year drum major in the marching band and also the pep band. I was accepted at Utah State University into the Music Education program. I knew what I wanted to do with my life.

My first semester of college was an eye opener, as it is for many people. On the semester system, I had 11 classes at 17 credit hours. I was learning to play piano, clarinet, flute, percussion and playing in the marching band, regular band, jazz band 2 and in the trombone choir. I took private lessons from a great trombone instructor Dr. Todd Fallis. I think that Dr. Fallis knew I was not really cut out for what I had chosen, but he didn't let on, he worked hard with me on getting better.

After my first semester, I was exhausted and was not enjoying music very much. The love of playing was not there anymore and I could see that the other trombone players were a lot better than I was. I got started into my second semester one week and decided I needed to make a decision. I wasn't enjoying the music anymore and didn't want to do it, so I looked back on some of the other classes I had taken in high school to see what else I might be interested in. I had taken only one programming class in high school, which was AP Computer Science. That was the last year they taught the class using C++, so the credit from that would get me out of the first semester of CS classes and I had really enjoyed that class. So, I went in and switched majors from Music Education to Computer Science.

The amazing thing was that I had 18 credit hours, but only 6 classes! I actually had a life. I wasn't constantly practicing or going to rehearsals and more importantly, I was enjoying music again. I continued in the CS major and received a BS with an emphasis in Digital Systems (I took some EE classes as part of the degree). I was really enjoying the classes and I was really enjoying music again. Music was still a big part of my life. My roommate was a big music person too and we shared bands and songs back and forth a lot, but it was no longer a burden.

Now that I've given the background on my history with music, in the next part I'll actually get to some of the songs that I consider essential programming music. You may understand a bit more why I choose what I choose with the background info.


Sunday, November 13, 2011

Dart and the Future of Web Development

Recently Google released information about the Dart programming language. Google touts it as the best way to overcome the shortcomings of JavaScript. I agree that there are issues with JavaScript. I've seen and dealt with many issues that I've shaken my head at for the implementation decisions, or things missing from the language (need I mention automatic semi-colons?).

While I agree that there are problems with JavaScript, I disagree that Dart is the best way to solve them. In my opinion, there shouldn't be ONE specific language for the web. A common runtime that other languages could target would be great. I'm not talking things like CoffeeScript, or even Dart that compile to JavaScript. I want to remove JavaScript from the equation completely and introduce something like Mono or the JVM into the browser. I want to use my favorite language to target the web.

I've seen this idea proposed before, it is not new. Miguel de Icaza brought this up on his blog last May. The idea took hold in my head and I haven't been able to forget it since then. I think it's a great idea. No, not just great, genius.

Google is going down a similar route with NaCl, but I think they are missing the point there too.

Web development is hard. I believe it should be easier, we shouldn't have to learn new languages as developers to write for the web. JavaScript is not terrible now, but the future of web development requires something better. That something better should allow developers from all backgrounds to come to the table and contribute in a language they are familiar with. Python on the client? Absolutely. Haskell? Sure. Intercal? Why not? If it can be targeted to the common runtime, it should be available.

Google needs to go one step forward on their idea, Dart is not enough to revolutionize the industry, but allowing developers to write in a language they are familiar with and good at, THAT would revolutionize the web.

Saturday, July 9, 2011

Developers, developers, developers, developers...

Lately I've been feeling the desire to change the way I do development. I've been using and developing with C# and .NET since pre-1.0 days (beta versions) and have stuck mainly to that set of tools for most of my development. My core development platform is Windows, but I would like to branch out. I've dabbled with Python, and looked at other languages (Go, Vala, etc), but have never made the jump to actually developing something meaningful in them. I haven't even gotten into Python enough to have written a full set of tools. In addition, I've looked at tools like Scons to replace make at work, and would love to do it, but it seems like I never get the chance to sit down and learn it and become proficient enough in it to make the move.

So, the question I pose is, how can I change my development life? I feel like I need something new. Something to keep development exciting. Just another .NET library or tool won't make the difference here. I feel too safe and secure with .NET, I need something that forces me outside my comfort zone a little and keeps me on my toes.

This is why I go through a period every year where I want to rewrite the main suite of tools I develop using C++/boost and friends. It would be something new and something that I haven't done in a while which would make me less comfortable. How do you do XML or JSON processing in C++? I don't know right now. How would I do a plugin architecture? I don't know right now. It would be the thrill of learning something again. The thrill of not knowing the answers to some questions and having to search and discover the way to do it.

I miss that right now. I still enjoy my work. I am writing both Windows apps and doing embedded development, but there isn't a lot of "new" going on there. I'd like to rekindle that by exploring new ways of developing; whether it be tools, languages or platforms.

There are so many cool projects out there, and I wish I could be part of them. I enjoy contributing and have picked up contributing a few things to a couple projects, but I'd like to start something as well. Something that would be useful to people. I guess that's the goal of most developers, providing something that is useful to someone.

Monday, October 18, 2010

Mono.CSharp

Back in April, I read this post by Miguel de Icaza about the C# REPL (read-eval-print-loop) feature coming to MS.NET framework (previously it had only run on the Mono framework, for reasons detailed in the blog post). I was pretty excited. The feature looked really awesome when Miguel first blogged about it back in 2008 and I was pretty bummed that it was only available for Mono. 

I hadn't had an opportunity to play with it as I had been pretty busy doing other stuff at work and really didn't want to touch the application that I wanted to add it to because it's pretty touchy for some reason. It's a very multithreaded application with networking, database and a bunch of other stuff, so trying to touch it can cause rippling effects. It's something I've really wanted to rewrite for a while anyway. I finally decided to implement a couple new features in the application and brave the problems that would come.

I implemented the features and it seemed like everything was working fine until the day before I went on vacation. Everything went to pot. Right down the drain. I patched up the app as best I could before I left and received some frantic pages from a colleague before I actually hit the road.

Once I got back from my vacation I set about to correct the application correctly. You know, actually implement mutual exclusion and so forth so that it wouldn't die a horrible death every couple days. I switched some of the threadpool stuff over to the new TPL (Task Parallel) that was released in .NET 4.0 and that has had a great improvement in speed, but I still wanted a way to break in and debug stuff at runtime. Enter the Mono.CSharp library.

I wrote a very simple network interface that received commands from a raw connection, would evaluate them and then print back the results to the client machine. I still have a few kinks to work out, but all-in-all the solution is AWESOME. I can now remotely login and run commands to see what is happening internally in the application. I used some of the code from the example csharp.exe that Miguel released in order to have some pretty-printing and other similar features, but nothing real intense.

If you haven't checked out the Mono.Csharp library, I highly recommend you do. It has some potential to be very powerful. MS has promised a similar feature for the next revision of C#, but you can have it now, and very easily by just using the Mono.CSharp library.

If you'd like more information about Mono, check out http://go-mono.com.