Every year I set some short and long term goals. Some goals that I think make me better professionally and personally. One of this year's goals was to build more internal applications. Apps that I use, but I don't release on the web, so I don't have to deal with authentication and other issues. This allows me to play with technologies that I haven't before.
I decided to release all of this code, regardless of how bad it is. The first project has been pushed to GitHub. I hate the title of the app and will change it soon, but in the mean time, ProgrammersNotebook is up on GitHub with a minimal readme.
The application uses mongoid and mongoid_fulltext to search and generate a list of snippets that match what is being typed. An Ajax call fetches a formatted json collection of matching records and updates on every two keypress events.
"If you are trying to be focused and "productive" for more than 30 hours a week, you are probably working too hard. You should consider reducing your workload to become more effective and get more done."
"To avoid wasted work, you must allow time to observe the effects of what you are doing, reflect on the things that you see, and change your behavior accordingly."
"You need to spend evenings, weekends, and holidays educating yourself; therefore, you cannot spend your evenings, weekends, and holidays working overtime on your current project. Do you really expect brain surgeons to perform surgery 60 hours a week, or pilots to fly 60 hours a week? Of course not: preparation and education are an essential part of their profession."
CodeMash was my first big conference and I can see why conferences are so popular. Besides the great time I had at the after parties, hanging out with friends, and meeting new people; I took a few things away from CodeMash that will effect how I write code in the near future.
Using tools to evaluate complexity of code is a great way to catch problem areas before they become problem areas. Saikuru looks like the front runner for me.
A lot of Rails developers hate Rails helpers. I think it's because most people don't organize them well, and just throw all helper methods in application helper. Jeff Casimir has a gem for extracting view logic into classes versus helpers Draper. I'm not sure that is a good fit for me, but it's interesting and I'm curious where this type of thing is headed.
I should have went to me sessions that I knew nothing about. .NET, Java, etc.. Being that I read online a lot, most of the sessions were intro sessions that you can get from reading any one of many tutorials on a particular subject, like Node or Backbone.
How do you feel about JavaScript being taught as a first language? John Resig has a great post about the subject. He goes into detail about why he thinks it would work. I have a few thoughts also.
Prototypical inheritance is different from classical inheritance I'm still not sure I completely I understand how it works. Teaching prototypical inheritence from the start sure does have an upside. For starters, it gives a developer a great start with a language that is poised to have a solid future. Who knows where JavaScript is going from here, or what other technologies are going to branch off from it.
The bad side is that server side languages are vital to anything serious and I can't think of one that uses prototypical inheritence. It could be difficult for a developer to wrap their head around common design patterns. MVC specifically.
Strict data checking
John mentions not even introducing == as a method for performing any type of data checking, and instead use strict checking (===) for everything. I love this idea. I can still remember when I learned that I could create an if statement in JavaScript without any curly braces.
I remember it well because I was not taught that I could. Not because my instructor didn't know, but because he thought it was bad practice to leave them out. I do leave out braces occasionally, but never without thinking if I should be leaving them out.
Function literals
"Makes it easier to understand functions as an object. I've found that when you show new developers a function being assigned to a variable it suddenly becomes much more obvious that a function is actually an object and can be manipulated as such (and that a function can be passed as an argument to another function). Thus students are advanced along the path towards a better understanding of functional programming."
Coming from function statements in every language I know, function literals were difficult for me. Once I grasped the concept, tossing around anonymous functions started making more sense. Teaching tossing functions around from the beginning can be quite powerful.
John is a very advanced JavaScript developer that always seems to have revolutionary ideas. Worth the time to read.
Every once in a while, I find a site that is way above average. A site that makes you think when you read something that is published to it. http://swombat.com is one of those sites. I get inspired with every post I read. It reminds me of when I read Rework and I wanted to drop everything and build something.
Every Thanksgiving I think about what I am supposed to think about. What I am thankful for; it's been hard wired into my brain. But this year is a little different. I truly am thankful. This Saturday, two days after Thanksgiving, we will have a house full of family members. This is the first year we are giving my parents a break. No cooking, no cleaning; just relax and enjoy their time with the rest of the family. For this, I am thankful.
My kids are growing up so fast. One of them is off to college next year, another one not far behind, and one still in middle school. My wife and I know that our days our numbered. Soon they will be off to take on the world and we will in an empty house, confused as to what we are supposed to do with the just the two of us. For now, they are still living with us and we are savoring every second. For that, I am grateful.
I have a good job doing some pretty cool stuff. I get to program with Ruby all day and I have some nice freedom and flexibility in my schedule. I really couldn't ask for more. Well, that is unless Github calls, (Yeah right!). In addition to that, I get to teach some people about how to craft web applications in the evening, and I have the freedom to alter the content to what is happening on the web right now, for that, I am thankful.
Requiring a Facebook account in order to register for an application is a really bad idea. I'll concede that there is a very large segment of people that don't mind, but for every person that doesn't mind, there are two power users that do.
First, Facebook is a privacy nightmare; they have the potential to track your every move across the Internet and they will if given the chance. This scares the hell out of me. I mean who wants everything thing they do on the Internet broadcast for everyone?
Second, you've now created a Facebook plugin. You are so tightly coupled to Facebook that you will have trouble decoupling that relationship and having your own app. My guess is that you will have to start over.
I'm good with Facebook integration, but give me a choice. Let me decide if I want my information broadcast to Facebook. Apps should have their own identity and tie into other application as options, not requirements.
Cancer and cancer research is close to my heart. Like many other across the globe, I have a family member with cancer. In the beginning, I had a lot of questions and was extremely eager to help. But I had a problem. I am not a doctor or scientist. I have zero skills that can help find a cure for cancer.
Sure, I can build a website, but that's been done before. Those resources are already there. When I read the headline "Open Source Cancer Research", I knew it was perfect. Take the big money out and let the talented and qualified people that actually care about a cure collaborate transparently.