JavaJosh Enterprises, Inc.

Custom software for small business.


If you've got a great software idea and want to make it a reality, and you want to hire an experienced, innovative, independant software developer to write it for you, then you've come to the right place! Email me at josh@javajosh.com and we'll grab a coffee and discuss your idea.(If you're here because you're just looking to waste time on the internet, then please proceed immediately to XKCD, The Oatmeal, or the ultimate time-waster, Hacker News. I suppose you could also read on to see what I do and how I do it, in which case you must be really bored. My sympathies.)


Applications

The applications I write can run on the desktop, on the web, on your iPhone, iPad, or Android device. From the client perspective (that would be your perspective) the process involves a lot of talking, diagrams, walk-throughs, and using of the software. From the coder perspective (that would be my perspective), writing custom software applications is a fairly complex task, and every programmer I've met approaches the problem of managing project execution differently. The way I do it is with an iterative process where I create something quickly initially. It will suck. You look at it and give me feedback, and I will modify it to be a little better, and we repeat this until it's done, then we release it. See, simple!

'Making the right thing' is often a surprisingly organic process that involves a lot of communication between developer, customer, and user. People are very visual, and usually the conversation only really starts when people have a first version in front of them. So I aim to get that in front of them as soon as possible, usually about a week.

Technical notes

Some people feel better if they know more about the technical details of what goes on behind the scenes when I go off to create another software iteration. This rather long-winded section gives you a glimpse into the dark and mysterious topic of how I do software development.

HTML, CSS, and JavaScript is the future of application development. It runs everywhere, it's open, and it's powerful. No other environment comes close. The kind of functional dynamic programming the web requires is a Good Thing ™ and extending this into data-storage, using so-called NoSQL storage rather than relational databases, is also the way of the future, at least for the majority of applications. Data structures change in time, and relational databases (and the applications built on them) always seem to be taken by surprise by this fact.

My favorite tools are Meteor (which combines nodejs and mongodb together and adds some great tooling and infrastructure - if you haven't used it you should), Resig's jQuery (of course), Mike Bostock's D3 visualization library, and Simpatico, my own application framework. My swiss army knife includes OSX, the command line, Sublime Text 2, Chrome and WebKit Inspector. For hosting duties I turn to Google App Engine for Java, Linode for other application hosting (Ubuntu, Nginx for proxy, Postfix for mail), and Namecheap for name hosting. I use Freshbooks for billing. I use PhoneGap as a mobile shim for targeting iPhone and Android (although I have my eye on Sencha). I prefer JSON to XML these days. Git has version control duties (I love GitHub for Mac for visualizing branches!). I don't always code Java, but when I do I use Eclipse, Tomcat, and Maven, and try to avoid ORM if I can. I generally don't use Clojure or Scala for JVM programming but would like to! I have a real fondness for Wireshark, and a love/hate relationship with D3.

Data is the key, the heart, of any application, and if I can't see the data flow then I don't understand it. Diagramming, visualizing, screen-shots, are critical parts of getting the job done, but usually I'm very informal about it and tend to lean on collaboration diagrams that depict example objects interacting more than anything. My JavaScript code is almost always functional rather than object-oriented: you'll rarely see 'this' or 'new' in my code. Closures are easier to reason about, in my opinion. Oh, and I think TypeScript looks awsome, and underscore is useful but overrated.


Background

1990-1999: The early years

I've been programming for a very long time. When I was 14 I programmed an application in FoxPro for my parents small mobile medical diagnostics business to handle their paperwork. In college I worked toward a BS in physics while also working for the UCI Office of Academic Computing doing basic web design when the field was new. I also did some VBA programming for research credit with a biology professor, Joe Arditti. After college I went into business for myself doing MS Access programming for small businesses and individuals. This got me noticed by Silicon Valley recruiters during the first internet boom, circa 1999, when I worked as a contractor for TCI-BR. I liked Access a lot but was frustrated by it's limitations, so I learned Java and was hired to work at HP Education, and then a (now defunct) SF startup called Spark Online. My focus was on desktop Java GUI programming with Swing interfacing with relational databases.

2000-2008: The Java years

Although my experience with HP doing Java was good, it was my connection with the LA Java User's group got me a job with Citysearch when things really got going. Eventually I led a team of five developers there and re-architected several customer-facing and internal systems using a (then new) Java/Hibernate/Spring stack. Evite and Match were sister companies under Vivendi and housed in the same building, and those teams learned from my team's experience. Also, that architecture was chosen to replace the mod_perl based system for the consumer Citysearch site. Citysearch was when I added consumer-oriented webapps to my 'enterprise Java' repertoire.

I worked briefly for the Blizzard Entertainment (now horribly renamed ActivisionBlizzard) web team in 2008 doing more Java webapp stuff. (Being a gamer myself, I was really happy there, and the circumstances of my departure were rather sad - ask me about it some time over a drink.) I had another interesting work experience at JPL in 2011, where I worked on a Lucene project for the ISS, and a cloud-hosted image processing system that used a novel distributed continuation library from EC2 destined to be used for processing images from the Curiosity Mars rover. (Personally I thought Hadoop was a much better fit, if more boring, but it's hard to change JPL's mind once it's made!)

2009-Present: The Age of the Open Web

These days I'm bullish on the open web, and that means HTML, CSS and JavaScript. Java (and occasional Ruby and Python) is still there, but JavaScript's native environment, the browser, makes JS the best language around, even with it's warts. All of my projects since 2003 have required at least some HTML, CSS and JavaScript - with the balance usually in Java. Node has really shaken things up, giving JavaScript a lot of reach, and the capacity to use one language for the whole stack. New products like Meteor are really shaking things up. And of course, browsers keep increasing their capabilities as well. The neat thing is that web technology will run anywhere: I have written programs using open web technologies that run on iPhone, Android, Mac and Windows desktop, and you'd be unable to tell the difference. JavaScript, HTML and CSS has fulfilled Java's promise of "write once, run anywhere".

Updated: Jan 30, 2013, Josh Rehman