Ninety percent of everything is crap

I repeat Sturgeon’s Revelation, which was wrung out of me after twenty years of wearying defense of science fiction against attacks of people who used the worst examples of the field for ammunition, and whose conclusion was that ninety percent of SF is crud. Using the same standards that categorize 90% of science fiction as trash, crud, or crap, it can be argued that 90% of film, literature, consumer goods, etc. is crap. In other words, the claim (or fact) that 90% of science fiction is crap is ultimately uninformative, because science fiction conforms to the same trends of quality as all other artforms.

Theodore Sturgeon, Venture 49, September 1957

How to become a better developer

Understand and respect your users

You are building something for someone. Whether that someone are other people just like you, people mostly like you, or people completely different from you, you need to understand your user. This also means that being a better developer isn’t a once-and-done event. It’s something you have to constant work at.

So, next time you get a project, care about the user. Understand the user, and make sure the software is the best possible product you can create for that user.

We easily forget how even the simplest of things that we can do are magic to so many others. That means we can’t just make them happy. We can’t just give them what they want. We have to give them the best experience we can. Great programmers can do that. They know their audience, they know the needs of the users, and they work hard to give them the best experience.

This is true for both GUI applications and libraries and frameworks. We’ve all had the joy of working with code that that was elegant to use and well documented. A well defined interface with solid documentation is a developer caring about his user: other programmers.

So, care about your users, whether they be other programmers or people who don’t know what a browser is.

Know your limitations

The best developers know they can’t do everything, and they also know what they don’t know. They aren’t afraid to ask for help, or to talk things over. Those great developers you know discuss and plan, and rely on a great team. If you want to become a better developer, you need to be willing to admit when you don’t know something.

This means asking questions when you are unsure. Checking your ego at the door, and being comfortable saying “I don’t know” or “I’m not sure.”

One of the hardest things for me to do is to ask for help. Which is silly, of course, because whenever I’ve asked for help, those I’ve asked have been more than willing to help. What I’m really afraid of is looking weak, like I don’t know what I’m doing, as if I don’t belong. It takes a real effort to remind myself that it’s okay to ask for help. That I don’t always have to have all the answers. That the best solutions I’ve ever come up with have been when discussing the topic with others.

This also means letting someone else take they lead when they are clearly better with a certain skill-set, and learning from that person. I don’t mean that you pass the problem off to them. What I mean is, don’t be afraid to adopt someone else’s solution. A part of you might think that it will highlight the fact that your solution wasn’t as good. What really happens is that you recognized that your solution could be better, and because you were stuck, you sought a better solution. And now you get to implement a better solution. And that better solution makes for a better experience for your end user.

And in the end, that’s what matters.

Challenge your limitation

Once you know your limitations, it’s important to try and break through those limitations. The obvious solution is to learn what you don’t know, and I cover that next. However, not all things are as simple as reading a book, finding an answer on StackOverflow, or finding some article on a blog.

In many cases, it’s doing things. Later, I talk about teaching. However, if you are afraid of speaking in front of people, or you aren’t comfortable doing it, you’ll be less likely to teach people. Granted, you could go the route of doing it from the comfort of your own blog, but you’ll be living within your self-imposed limits.

This means never saying you can’t. It’s fine to say you don’t know how, or you’ve never done something. And the more you do, the harder things will get (because I assume that you’ve tackled a lot of easier things along the way). But challenges and difficulties shouldn’t stop you. You should look at every challenge and difficulty as an opportunity. Treating them as opportunities puts you in the right frame of mind. One of overcoming those challenges and limitations.

Learn

This should come as no surprise, but at the end of the day, you also need to keep learning new things. There are many professions were constantly learning is the norm, and programming is one of them. You can, of course, stagnate, and not learn new languages or tools. You can allow yourself to fall behind the curve. But sooner or later, those new tools will become the norm, and you’ll be playing catch up.

This doesn’t mean you invest equally into all new languages and tools. You have to pick and choose what you are investing your time in. There are far too many new technologies coming out these days for you keep up to date on everything. However, many of these technologies are based around well-established principals.

There are two areas I’d say people should invest time into learning. One is JavaScript, and by extension, Node.js. The other is mobile development. If you have an Android phone, learn Android development. If you have an iPhone and a Mac, learn iOS development. Learn native development for either platform.

Learning JavaScript should be a no-brainer. With the power of Node.js, and every browser worth supporting having JavaScript, it would be silly not to spend time learning JavaScript. You’ll be able to handle server side programming, as well as client-side web programming in one language.

The mobile-side should be equally obvious. These are two areas that are growing, and as we see wearable technologies come out from Google, eventually Apple, and others, we’ll see an increase in the demand for knowing how to work on these mobile platforms. iOS and Android aren’t going away anytime soon, and knowing how to write applications for them will only make you a better developer.

Teach

It’s equally important to teach others. I’ve covered this briefly in my article on the benefits of speaking, but teaching forces you to learn the topic well enough that you can teach it to others so that they can make use of it.

As a developer, you might know a lot of frameworks and how to use various languages and editors, tools and systems to make yourself more productive. But until you’ve actually taught people how to use these tools, can you really say you know them? After all, at the comfort of your desk, you have Google and StackOverflow at hand to handle any problems you might run into. You can stop to check email, go get some coffee, and otherwise ponder what to do next.

But when you are teaching, you really are on the spot. Every eye is on you, and when someone asks a question, you either know it or you don’t. There is no harm in not knowing an answer to a question. But you have to admit it, and quickly. You have to humble yourself, because to give the wrong answer is the absolutely wrong thing to do at that point.

Is that all?

I’m not going to pretend this covers everything you can possibly do to become a better developer. However, I do know that these are things we should always be practicing. I’m curious if you have other things developers can do to better themselves.

WeGotYourSite

I’ve been on a Startup Weekend kick this past year.  I’ve attended the 3rd Philly Startup Weekend, the first Philly Health Startup Weekend, the 4th Philly Startup Weekend, and the Lehigh Valley Startup Weekend, where my team working on an idea I pitched took 3rd place.  I had a blast at each one.

I also attended the Lehigh Valley Hackathon, where I took first and tied for fan favorite.  I’ve also had the pleasure of helping to plan and participate in 2 hackathons (called Hack’d) at the place I work: MeetMe.

My projects have included Autistic Touch and Special Places, apps centered around children with autism, or their families, shopping services, a music-profile site for bands, and then WeGotYourSite, a service for businesses that lets you use Facebook as your CMS for your website.

I’ve continued to work on WeGotYourSite after the startup weekend.  The team is still active, and we hope to actually make this work.  Sure, there are challenges, and but the basic premise was sound, and we are making good progress.

These events have done a lot for me.  They force you into positions that are outside your comfort zone.  You are forced to pitch in front of everyone, you need to form groups with people you don’t know, and you need to look beyond just the technical side of things.  You need to validate the desires of your customers.  Are you building something people would pay for?  You need to understand how you would go about getting those customers.  You need to understand what’s important, and what can wait.  You come to understand the importance of having a simple message.  You start seeing all the problems that exist in this world, and what we can do to get there.

Whenever I have a problem, I don’t see a problem, but instead, a potential pain-point in need of a solution.

2012 – Reflection and Resolutions

The Story Thus Far

It’s safe to say 2011 was a big year for me.  In 2001, I moved to Montreal, Quebec to be wife my now-wife, Piera.  I got my first real job programming PHP for an online casino company.  After the company went bankrupt, I started my own company with 2 friends.  A credit card processing company called myVirtualCard.  This lasted for a good number of years, but we finally had to shut down.  Meanwhile, in 2007, I’d married Piera.  In 2009, I started work again at Gamma Entertainment handling their credit card processing department.  In 2008, we had our first son, Joseph Michael Robert Lotito.  In 2010, we had our second son, Julian Alfonso Lotito.  We also learned that summer that Joseph might be autistic.  We then spent the next year fighting with the Quebec medical establishment to get whatever helped we could for him (We got no support).  In the sprint of 2011, we’d had enough, and I made up my mind to move back to the US.  After all, we had that option.  In a few short months, I’d interviewed, got hired, found a place, made several flights all over the country, and in August of 2011, moved to Telford, PA to begin work at myYearbook.com.

Back in the U.S.A.

So, here I am, back home at the start of 2012.  If you’d asked me a year ago where I would be, here is not where I’d imagine.  But I’m glad we made the move.  As it turns out, Joseph does have Autism.  Had we waited a bit longer, he would be in much worse shape.  As it is, it will still require intense ABA therapy.  There is also some worry Julian might be autistic as well.  I believe the number was 90+ out of 150 autistic children are boys, and siblings of autistic children are 70% likely to be autistic as well.  Suffice it to say, we are keeping a close eye on him.  Luckily, he seems, if anything, to simply be mildly developmentally delayed.

The treatment we’ve received here in Bucks county in Pennsylvania has been outstanding.  Seeing the difference in care, I could never willingly return my children to Quebec.

2011

So for me, 2011 started with me in the US, on a trip to visit family, and it ended with me living here.  It’s rather humorous when you think about it, and the road it took to get here.  Most of 2011 can be summed up with this: “how did I manage to control this chaos.”  Between work, worrying about my son, finding a job, moving, getting acquainted with that new job, getting the wife and kids accustomed to a new country, and everything that entails: it was exhausting.  I had very little time for myself, it feels.  I put aside most of my hobbies since moving.  No painting, no gaming, no writing, very little exploratory programming (though it’s started getting better).

2011 was about the family.

2012

This year, with the family settled, I need to look at bettering myself.  Joseph is getting the help he needs to, I’m employed at a wonderful company and work with a lot of smart people, and I have immense opportunity to grow as a developer.

Resolutions are a traditional way to start the new year.  The problem is, this year started without me having thought of one.  I just simply forgot.  At my brother’s new years party, my sister-in-law handed me a card, and told me to fill it out with my resolutions.  She’d mail it to me at the end of the year.  This sounded like a great idea, except I had no idea what to write.  I simply hadn’t though of a resolution.

Since then, I’ve been pondering what I want to do.  There are the grand goals, the cliche goals: get in shape, make money, be happy, win the lottery.  I wanted something more concrete.  I want to change my life in small but meaningful ways.  Over the course of the year, I want to focus on one aspect, and carry over the habits I can.  My resolution isn’t to change any one thing.  Rather, my resolution is to better myself.

January – Freedom

I feel like I’ve already wasted half the month in coming up with what I want to do.  So, January is the month I’m giving to myself.  I’m not committing to anything in January.  No pressure.  I’m allowing myself to prepare for the coming months.

February – Hobby

In February, I want to start a hobby that isn’t related to programming or computers.  In fact, it shouldn’t involve computers at all.  This will most likely involve either wood working or miniature painting.  The former is possible with a garage, but I have no equipment.  The later I have everything for, including ample space.  However, the former involves me getting off my butt, which is something I should address at some point.

March – Getting Healthy

I really shouldn’t wait so long, but by March, I want to be on the road to health.  More importantly, this is the month when I want to start really learning more about getting healthy.  Eating right, exercising and enjoying it, and taking care of myself.  I’ve done this before, and by March, I was doing really well.  I can do this.

April – Ludum Dare

I want to write a game.  In my spare time, I’ve been playing with an event driven gaming framework in JavaScript.  It’s been a lot of fun, and come April, I want to take part in Ludum Dare 23.  I’ll probably take a couple days off before and after, and make sure the wife knows what I’m doing.  It will require training and practice before hand, but by April I should be ready to go.  This means, of course, having completed a game or two before hand.

May – Open Source All the Things!

I haven’t contributed to an open source project in a long time.  The goal here would be to contribute some libraries and code I’ve written (will write).  It’s not much, but I need to spend time putting them together and releasing them, or at least finishing them up.  I’d always want to release the JavaScript Game Event Engine I’m working on (for use with Ludum Dare).  May would be set aside for getting that up and released.

June – iOS App

By this time, I will have wanted to release an iOS App.  I have one in the works.  It’s a simple app, but great for learning the system, and something I would use (always a plus).  It’s also an app that isn’t covered well in the app store.  So, by June, I’ll want to have released it.

July – Learn a new language

I’m not really sure which language, but by this time, I’d want to try to learn something new.  I was introduced to Erlang back in August of 2011, and enjoyed it.  Maybe putting some more time into it would be fun.  Regardless, July should involve learning a new language.  The goal will be to write a simple HTTP server, I think.  That’s always fun, and a great way to learn the system, it’s libraries, and has a fairly practical value.

August – Node

If myYearbook holds Node the same time this year as the previous year, we’ll have it in August.  Node is the company developer retreat.  3-days away at some remote location having our own mini-conference.  2011 was fun, despite the storm and lack of power.  Besides of Node, however, I’ll also have time to continue learning that new language.

September – Talk More

I want to push myself to start giving more talks.  I’m already giving a talk this coming friday at a PHP meet up group, but it’s a small affair.  By September, I want to be in a position to give more talks, and really start pushing it.  I have no issue standing in front of people and talking (I actually enjoy it).  My issue has always been self-confidence.  I mean, do people really want to hear me give a talk?  By September, I want to make that a yes.  This will involve blogging more, writing more, contributing more of course.

October – Master Smaller Tools

There are a lot of tools out there in the Unix world, and I simply don’t know them all.  While over the course of the year, I’m sure I’ll learn many new things, I want to allow myself time in October to simply learning these smaller tools.  Maybe coming to better understand writing vim plugins, or getting a better handle on make or bash.  The goal here isn’t to learn anything in particular, but rather focused attention on learning these tools.

November – NANOWRIMO

NANOWRIMO.  Nuff said.

December – Reflection

With the holidays approaching, now is the time for reflection, relaxation, and discovering if I’ve achieved this rather grand list of things I want to accomplish.

Is it doable? Yes.  Can I do it? Sure.  Will I? Who knows?   So much can happen, but having a plan helps out.  I’d like to think that every every month now I have something to look forward to, something to keep me on track.  Many small goals that will, I imagine, improve myself.

I hope I am as resolved as I will need to be.

I picked the destination

In August, I moved from Montreal after almost 10 years to the small town of Telford, Pennsylvania, a little less than an hour north of Philadelphia.  It’s a beautiful little town.  Our home is nestled in a small development filled with couples with kids that are around the same age as Joseph and Julian.  Lots of prospective baby sitters in the next few years as well.  Within 10 minutes, we have pretty much everything we could be looking for in terms of local shopping, as well as several wonderful local pizza joints.

It’s a wonderful place.

I work at myYearbook.com, a wonderful social discovery site, in New Hope, Pennsylvania.  It’s a good hour commute in the morning, and a bit longer on the way back home.  The people that work there are incredibly smart, highly motivated, and know their field extremely well.  It’s wonderful working with them.  Every day is a learning experience.  It’s a wonderful place to grow and expand professionally.  Between the number of published authors and open source contributors, as well different technologies we are using, it’s hard for anyone not be learning something new every day.

But why did I move?

Joseph.  Born in November of 2008, he was pre-diagnosed with autism in the summer of 2010 at one-and-a-half years old.  For a year, my wife and I fought he Quebec government to get help for him.  Between both private and public care, he was constantly denied treatment.  Coming to Pennsylvania, the public care he receives as a child with autism is light years beyond what Quebec had to offer.  Before getting here, we’d gotten appointments.  Within the first month, he’d received more help for autism then he’d ever gotten in Quebec.  It was at the same time wonderful and sickening.  To know he was getting help, and to realize how many people are still suffering in Quebec.

My greatest hack was moving to Pennsylvania and getting my son help.  It was making that decision to move.  When you’ve lived in a place for 10 years, it’s hard to disrupt your life.  But one afternoon, after another major setback, I told my wife that I was going to move us to the US and get Joseph care.  It wasn’t a discussion.  It was a decision.  A few months later, we left Quebec hoping for the best.

There are times in your life you are given an opportunity, but those are far and few between.  Waiting on them is a mistake.  Instead, you need to make your own opportunities.  You need to make a decision.  There was a lot of work between deciding to move, and finally moving in to our new place.  I won’t say it was easy.  But it was easier than I thought it would be.  But still, it was a lot of work.  But the hardest part was finally admitting that the only person that could make this happen was my wife and me.  Making a decision.

We all make choices in our lives. They can be simple choices.  What to have for dinner?  What to name a variable?  What tree to use for this data set?  These are easy choices.  They are easy because we have control over them.

The decision to move, as big as it was, was easy to make when I understood I had to take control.  I couldn’t wait on a careless government.  Who could I trust, more than my wife and I, for my son’s well-being?  No one.

Since moving, Joseph has received a tremendous amount of real help tailored for his condition.  In November, when he turns 3, he goes in for more intensive treatment.  Everywhere doors are open.  The effort is on his treatment, not on finding treatment.

From the moment I made that decision until today, I never reflected on the difference of that decision as opposed to others I’ve made in my life. What, after all, truly made this decision different?

I made a choice about what I wanted.  After that was made, I simply had to make it happen.  Plot the course.  I didn’t make a choice to make a plan to reach an outcome.  I picked the destination.

People will tell you it’s not where we go but how we get there that matters.  And while I don’t disagree with the latter part, the destination had better matter, or else you’re just wandering aimlessly.  So what does all this mean?

Pick a destination.  Get there well.

My wife, the geek

Newly acquired and already making great use of it.

My wife is a geek.  A Mac geek, an Illustrator geek, and now a Photographer geek.   In light of this, she’s decided to start a blog of sorts. She is also putting together a web page at piera.ca where she will show off her photos.

Her reasoning for blogging is simple.  To track her journey from novice to professional.  To gain assistance in this journey.  To gain exposure.  To learn.

To get her to blog, and to also get me to start blogging more often, we made an agreement.  The agreement was simple.  Every time she posted something to her blog, I’d have to post something to my blog.  Every time I post something to my blog, she has to post something to hers.  It’s back and forth, and since we are fairly competitive between ourselves (in a loving caring way that only those in love can replicate), it should help.

Anyways, the picture is of my newly acquired tea set.  Well, except for the mug, which we’ve had a set of for some time (which goes with our plates).  Anyways, the free flowing tea cup on the right allows you to mix the tea leaves with the water freely, and when it’s done steeping, you simply place it on top of the mug, and the water drains out the bottom, minus the tea leaves.  It makes for some wonderful tea.

The water heater in the center there is also nice.  It’s not too big, but just the right size.  It heats water real quick.  All together, my tea drinking days are in full force.

Goals for 2011

It’s traditional, at least in my culture, to create goals, or resolutions, at the start of a new year. The new year is seen as a restart, a new beginning, and it’s a handy time to start new goals. It’s common.

So, not wanting to break with tradition, I feel I should record my goals for 2011. These are the goals I’ve spent some time thinking about, so I feel they are more meaningful then simply “Eat better, make more money, etc.”

Expand on the DuctMail concept. DuctMail was fun, and I still use it, but it could be so much more. The flaw in DuctMail is a flaw in myself: information management. It’s hard to handle so much information, and most systems that want you to use them for information management require you to learn how they do things. DuctMail doesn’t try to do this. However, it needs more work. I need to set aside time to do this. DuctMail could be turned into a side business, so I need to force myself to make this a side business.

Build 2NaW.com. 2NaW.com, or 2 Nights a Week is built up around a simple idea. I should note that the idea was inspired by reading this posting from HN about LetsPocket.com. Basically, the idea comes from something the poster said in his post: “I coded relentlessly every chance I could (which amounted to a mere 1-2 nights a week).” The idea is simple. Far too often projects get abandoned because people feel they aren’t making progress. However, countless times projects pop up from people who have spent a little extra time each week working on a project. 2NaW.com is going to encourage people to do just this. How? I don’t know. However, I want something that caters to the hacker who has a family, has a life, has little free time, but wants to find a way to get his hacking done. Also, it being a 4 character domain makes it fun. And the name sounds like ‘tuna’.

Outside of building these two sites, I also want to really learn another language. By that, I mean I want to make a second language apart of my toolbox. Far too long I’ve relied on PHP to do most of my grunt work. While I’m not afraid of other languages, anything I had to do was usually done easiest with PHP. The danger here is that most anything I have planned for this year is stuff I can already do in PHP. Which begs the question: what language should I learn? I don’t need to learn a language for my career. However, I think I should spend some time learning Lisp. It’s popular enough to make it useful, yet esoteric enough to make it a little more unique. Ruby is also up there as something I should learn. It’s practical enough that it can have an impact on my career in the future. Still not sure. Must decide soon!

Finally, I must contribute more. Contribute both in terms of blog posts with interesting ideas, as well as to projects. I can blog about my other goals and how they are going. Projects will be through code I release via these two projects. I also must contribute back to the communities I use so much, so I should venture to contribute to HN and Reddit. On the Reddit side, I’ve already started that, so hopefully that will seem some positive results. On the HN side, I’ll have to contribute with information about my above goals.

I have some other goals, but they are of the more personal side, and will not be sharing them with you, dear blog reader. My wife, however, knows what they are. They aren’t bad things, mind you. Merely goals. Not to correct wrongs, but to make our lives better in the long run. We’ve already started this, and maybe I’ll write about them in the future.

We’ll see.