Entries from April 2007 ↓

Are You Interested in a Sequel to "Code"?

This news is via a post from Michael Neel:

Charles Petzold, author of Code: The Hidden Language of Computer Hardware and Software, has been working on a sequel to this book that explains Alan Turing’s work on computability. The problem? The new book has been turned down by his publisher, Microsoft Press.

If you enjoyed Code, or are interested in a well-written look at Alan Turing’s work on computability, please spread the word that Charles Petzold is looking for a publisher.

By the way, if you are a C or C++ developer migrating to .NET, Mr. Petzold also wrote a free eBook called What the C or C++ Programmer Needs to Know About C# and the .NET Framework.

An Interview with Lutz Mueller, Creator of newLISP

I recently had lunch with Lutz Mueller, creator and author of the programming language newLISP.

I’ve never used Lisp, but I’ve always had a fascination with the “AI” languages. There’s something magical about a language designed to solve ridiculously difficult problems.

In the same vein, there’s something magical about an individual who writes a programming language on his own. So someone who writes an AI language on his own ranks pretty high on the list of intelligent people I’ve met.

Like a renaissance man, Lutz’s experience runs far and wide: he has a PhD in Psychology, a background in statistics, and spent many nights programming punch cards (and many nights working for an internet startup). He’s now the one-man show behind the open source scripting version of Lisp called newLISP.

Rob: Give us some background on newLISP. How long has it been around, how has it evolved, etc…

Lutz: newLISP started on SunBSD in the early 90’s, then moved to Windows 3.0/1 as a 16-bit application, then to Windows 95/98 as a 32-bit program. During all that time newLISP was more like a hobby for me. Around 1999/2000 I made it Open-Source under the GPL license on Linux. At the end of 2002 I started working on newLISP full time and a community of users has been growing quickly since then. In 2005 it was adopted for the first time by an internet startup as the only development language for a large scale (~100 CPU’s) distributed application running a specialized (sentence) search engine.

Rob: How is newLISP different from LISP?

Lutz: newLISP is a scripting language very much in the culture of Perl or Python; quick to learn and to get the job done. newLISP takes its core elements from LISP, such as lists and lambda expressions, and adds name-spaces and implicit indexing.

The style of programming has changed dramatically during the 90s and the internet age. Programming is more casual, interactive, and performed by different people than before the internet and personal computer, and is now used for different sorts of applications. Scripting languages have made access to programming easier for people with no previous programming experience and has greatly increased speed of development for professionals.

Rob: What inspired you to create newLISP?

Lutz: I was always intrigued by LISP but found that the current standards of Common LISP and Scheme were behind modern times in their approach to programming, and too overloaded with academic concepts to be useful for solving real world problems. I wanted to create a LISP with a scripting feel, like Perl or Python, but still a LISP.

Rob: Creating your own language seems like a massive undertaking. How is writing a language different from other software development you’ve done?

Lutz: What you are creating has the potential to be used by many different people with different backgrounds, motivations, and on different applications. Making a language has as much to do with Psychology as it has with Software Engineering. It is very important to listen to users and to know many other programming languages: from machine assembly language to high level languages like SQL.

The core of a well designed programming language should be small. The bulk of the newLISP code consists of the newLISP API functions that are, internally, relatively independent from each other. But looking from the outside, from an API-level, those functions have to work together and should paint a cohesive picture of the language.

Designing and writing the software is only about 25% of the entire project. The rest is QA (Quality Assurance), documentation, and contact with the community of users via support and exchanging newLISP code and ideas. The way a programming language is used differs very much from person to person and from application to application.

Rob: Are you the sole developer on the project?

Lutz: For the core of the language I am the only developer, but many bits and pieces in the project come from other projects and programmers, as is typical for many Open-Source projects. I especially depend on help on the documentation side since I am not a native English speaker.

Rob: Most of my readers are enterprise developers using .NET, Java, or PHP. Why would an enterprise developer want to learn newLISP?

Lutz: Many people like the functional style of programming, but they feel that Common LISP and Scheme do not offer the API they have come to expect from .NET, Java, or PHP. Things like regular expressions, network functions and support for popular protocols like XML or HTTP are all built in to newLISP without the need of external libraries.

Many types of problems, i.e. complex statistical analytics, modeling and simulation are much easier to design and implement in a functional programming style using readily available functions in newLISP. This also includes financial functions and Bayesian modeling implemented on a high level.

newLISP has a documentation facility similar to JavaDoc, which makes it easier to use in an enterprise setting. It also allows splitting large programs into independent modules. But using newLISP is not an all-or-nothing decision, it can live and cooperate well with other languages in a project.

Rob: How does newLISP compare to Python in terms of AI programming?

Lutz: newLISP has better functional abstraction and symbol handling and is more flexible in modeling. The same list syntax for program and data makes it easier to write programs which generate or modify other programs. newLISP has built-in support for distributed applications.

For example, you can use the same function to read/write from/to the local disk or over the network, or the same functions to load program code locally or remotely. A built in function called net-eval exists to distribute processing to many remote nodes in one function call.

Rob: I’ve never used LISP or newLISP. If I want to learn newLISP, where should I begin?

Lutz: On http://newlisp.org you will find introductions created by professional writers and a few small tutorial movies. The newLISP manual and reference is full of examples and there is a ‘Code Patterns’ document describing common solutions for common problems. Traditional books on Common LISP or Scheme are not recommended for learning newLISP, because they emphasize a style of programming not suited for newLISP.

Here are some pointers to pages on the newlisp.org site:

For introductory and reference documentation:
http://newlisp.org/index.cgi?Documentation

Short code snippets:
http://newlisp.org/index.cgi?Tips_and_Tricks

User contributed short examples:
http://newlisp.org/index.cgi?Code_Contributions

Support and community:
http://www.alh.net/newlisp/phpbb/

A blog about newLISP:
http://newlisper.blogspot.com/

The last link also contains links to other newLISP related sites.

Rob: Have you seen the Netflix contest (www.netflixprize.com)? Is newLISP up to the challenge?

Lutz: I believe this is a typical problem that can be solved with newLISP, but I don’t have the time and do not quite agree with their terms. Perhaps someone else will take on the challenge using newLISP, it would be the best tool for this contest 😉

Rob: Thanks for your time, Lutz.

Lutz: Thanks for talking with me.

Local Job Market Reports from Dice

Dice just released their local job market reports for Q4 2006 for twenty U.S. metro areas. Some highlights:

Baltimore, MD
“We see a need for project managers, senior quality assurance/testers, web developers, and software engineers. Help desk and desktop support work is also starting to come on strong.”

Boston, MA
“…in-demand job titles: business analysts, project managers, developers (JAVA and .net), systems administrators (UNIX, Windows, DBA), systems engineers, network engineers, IT security personnel, and storage consultants.”

Chicago, IL
“[most in-demand are] project managers, developers, network engineers/administrators, SAP, QA, and programmers specializing in .NET, SQL, JAVA, J2EE, and C++.”

Denver, CO
“…the most requested skill sets are .NET developers and Oracle/SQL server DBAs.”

Detroit, MI
“…the most in-demand positions include all levels of consulting and project management, SAP, Oracle, system analysts, and network administrators.”

Hartford, CT
“Who is most in demand? .NET web developers, application developers, business managers, and project managers…”

Los Angeles, CA
“What’s hottest right now? According to MacKinnon, it’s project management and business analyst positions.” (Although my experience is that experienced .NET developers are in huge demand in L.A.)

Silicon Valley, CA
“…heaviest demand for: .NET developers, software developers, business analysts, project managers, QA experts, desktop support experts, data warehousing experts, and interface developers.”

Web Hosting Troubles

I apologize for the intermittent outages Software by Rob has experienced over the past few days. My web host lost a server and spent the better part of last night re-building it. Hopefully it’s all behind us.

Web hosting is an interesting business; a host might collect $15 per hosting account per month. A small host might have around 500 live accounts, which would carry a tremendous support load, with gross revenue around $7500 per month, or $90k per year. But the expense of hardware, connectivity, rackspace, and software licenses would chew deep into those profits, leaving little for compensation.

Add to that the constant tech support, angry customers, and the requirement for 24/7 uptime, and it’s one business I would never recommend.

Work for Me: I Need a .NET Contractor in L.A.

If you live in L.A., have at least 2 years of ASP.NET experience and are looking to work on some really cool, cutting-edge .NET projects, send your resume to rob@softwarebyrob.com.

If you’ve read my blog for any length of time you’ll know that I’m going to ask a lot of technical questions during the interview, and that I’ll only hire top notch developers. But on the flip side, I’m easy to work with, nearly all of the work is what we as developers consider “interesting” or “challenging,” and most of it will be done from home (with rare on-site meetings). The bulk of the work is for internet startups building public facing .NET web applications using .NET 2.0 and AJAX.

And since I want you to have top-notch equipment to complement your top-notch development skills, after our first project is complete I’ll buy you two brand new 22″ widescreen flat panel monitors (yours to keep).

Advertisement: DreamInCode.net Programming and Web Development Forums

Advertisement

DreamInCode.net is all about developer forums. I had not heard of the site before being asked to write this review and assumed it had recently launched, but it’s over 6 years old and contains a huge amount of technical information.

The site has over 25,000 forum topics and nearly 190,000 replies. The focus is enterprise programming and web development, but they have sections for game development, harware & mods, operating systems, audio & video, networking and games. Hey, all coding and no games makes Billy Joe Coder a dull developer.

And, of course, you can subscribe to everything via RSS – a single forum, new code snippets, unanswered programming topics, etc…

What caught my attention immediately (in fact, the first thing I clicked on from the home page) are their programming reference sheets. Someone at DIC is thinking; offering these guides for free and placing a prominent DIC logo at the top makes them a fabulous viral marketing tool. My only disappointment is the lack of variety: they have VB6, C++, Java and ColdFusion reference sheets at the moment – hopefully they will create some more modern guides in the future.

Finally, the tutorials section is pretty cool. I receive a couple emails a month asking where someone should go to learn about programming and would like to refer people to a site like this (for non-.NET languages, since they don’t have any .NET tutorials).

My complaints? It’s kind of a nit, but the pages load times are bad (at least a few seconds each). The slow page loads make the site seem sluggish, and with as much content as they have it’s hard to navigate around as quickly as I would like. My other complaint is the lack of .NET-related content, but I imagine that www.asp.net has a bit of an advantage with .NET-related web programming forums.

How to Attract Software Developers That Fit Your Company

I’ve worked for startups and stalwarts, small shops and large corporations, firms where software is the means to an end, and firms where it was an end in itself. After years of exploring what I love about building software I’ve realized that coding for a 17-person dot com is a far cry from building enterprise software for a 300-person credit card company. It only took me eight years to figure out why.

There are a myriad of articles on interviewing, evaluating, and hiring software developers, but a topic that’s rarely discussed is how to attract software developers that fit your company’s environment. With the current state of the software job market, it’s critical as a hirer that you determine not only what type of developers will be happy in your environment (your “developer demographic”), but how you can become more attractive to that particular slice of the market.

Your Developer Demographic
As an example, IndyMac and Countrywide are large financial institutions with development offices in Los Angeles. They attract people looking for stable jobs with good benefits where they can code 9 to 5 and then go home and not think about it from 5 to 9. I envy people who do not grow bored with this environment; I really do. Life would be much, much simpler if I could handle it.

There are also tech startups that attract caffeine-junkies. Long hours with potentially large reward, and the prospect of building something really cool in a short amount of time that could make a difference in peoples’ lives. Or, more likely, be relegated to the failed startup scrap heap. These companies should be looking for people who love using new technology, are typically younger, willing to take risks, and willing to shoot from the hip.

These may be extreme cases, but they illustrate the point: certain attitudes and personality traits play nicely with certain environments. Often, a developer who thrives in one environment will find that she slowly withers away in others.

The Three Dimensions
To get more specific, there are three dimensions to a company that most affect the internal environment for a software developer. It’s critical that you know which of these your company falls into, and not only market to, but ensure you can retain developers who fit that demographic. The descriptions of the software developers who like to work at each corporate classification are generalized, but they serve as a guide to get you thinking about the personality of your ideal candidate.

Your company may not match exactly with one of the choices below each dimension, but do your best to categorize it. Many companies start off as one thing and transition to something very different in the first year or two.

 

  1. Size
    • Small – Some small companies are startups, and some are 10-year old, profitable, mature businesses that make money hand over fist with 9 employees. Software developers who like small companies are typically social, they like the vibe of knowing everyone, going to lunch with the same people, and knowing that they contribute a great deal to the success or failure of the enterprise.
    • Large – The bulk of corporate development is for larger companies. They tend to have big teams, lots of process, and decent-sized QA and Change Management teams. Software developers who like large companies tend to enjoy more process, like working on larger teams where they can either lead or be led, and enjoy the possibility for growth that comes with a large organization.
  2. Chaos Level
    • Stable – Stable companies tend to be, um…stable. They have good benefits, and employees can often get away with working 8 or 9 hour days. Developers who prefer stable companies are likely a little further along in their career, may have a family, like the consistency of coming in to the same office each day, and enjoy their time out of the office when they don’t have to think about software.
    • Startup – Startups tend to be more risky with the possibility of more reward. The salary may not be as high as that of a stable company, but the stock options will be worth six-figures if you can get your bleeding-edge online calendar out the door before Google’s. Benefits tend to be spotty. The hours are long, but it’s more than worth it for developers who are passionate about technology (read: bring books about ASP.NET to the beach), love building software that matters, and enjoy the camaraderie of working on a team of people who share their interests.
  3. Focus
    • Software (or a technology that relies on software) – These companies rely on software for their main source of revenue, whether they sell it (Microsoft, Intuit), give it away (Google, Craigslist), or offer it on some type of “pay to play” basis (eBay, salesforce.com). Technology firms that rely on software are companies like Palm, Apple, or the guys who make the fingerprint readers I keep seeing at data centers. Software may not be their main source of income, but they are technology companies and software is critical to their product. Software developers who prefer these types of companies enjoy being around other software people; they like the idea that technology is at the core of their company, and they love that they work on real products that people use. In addition, they relish the fact that software firms tend to live towards the cutting edge and are able to constantly upgrade their skills to the latest and greatest.
    • Everything Else – These companies make up the majority of companies in the world; their main source of revenue is something other than software – credit cards, lawn furniture – you name it. “Everything else” companies use software to support their business: to track widgets, support their call center, and balance their books. The majority of corporate software jobs are working for companies under this umbrella. Software developers who enjoy this type of company like building applications to support accounting, management, and the people who produce or sell the company’s main product, and they are either very content to know they can go home at night and not think about developing software, or they go home at night and all they think about is they day they can leave the company and work for someone like Google.

Your Company, Your Developer Demographic, Your Job Description
Before writing your job description think hard about where you fall in each of the dimensions. Then think twice as hard about the kind of developer who will be happy at your company. Don’t kid yourself; you can convince the 24 year-old tech hot-shot to work for your financial services company by offering him a huge salary, but he’ll be gone in 9 months because you’re using three-year old technology and developing boring (from his perspective), back-office software.

Once you’ve determined who will be happy at your company, write your job description with that person in mind.

You’re a large company with great benefits? Spell it out in bullet points: plain, simple, and official. Play up your stability.

You’re a small startup with no benefits? Use a casual tone and create excitement. Make that 24-year old hot-shot be dying to work for you.

Even if he has to pay for his own health care

Deadlines: On Being a Professional Software Developer

When I was in college I was a professional comic book writer. After numerous submissions I had several stories accepted by three independent comic book companies, all slated for publication.

I even received a $100 advance for one of the stories, with all of them paying royalties on the “back end,” meaning I’d probably wind up making $100 per story if I was lucky. And back then $100 was a lot of…no, let’s face it, even back then $100 was nothing. But I could call myself a professional comic book writer.

On Being a Professional
Which is a joke, of course, because I wasn’t a professional. I was writing in a tiny bedroom, typically from 10 at night until 2 in the morning, cranking out a short script every week or two. Sure, I had honed my skills as a writer enough to match the myriad of others trying to make it, but I was not a professional writer. And I’ve had a hard time puting my finger on what it was that distinguished me from those whom I considered “legitimate” comic book writers. It wasn’t the fact that I worked out of a small apartment. Or that I wrote at night.

It was the fact that I didn’t consistently deliver under the pressure of deadlines.

I’m sure I’ll receive a few comments saying that a professional is someone who gets paid for what they do, or someone who does something as their main source of income, or someone who’s easy to work with, or someone who comments their code. Those are some of the components of being a professional, but one of the most important and often overlooked pieces of being a professional is consistently delivering a usable product in the face of deadlines.

How Many Deadlines Must a Man Walk Down…
I knew at least two guys who were amazing comic book artists. Both drew as well as the books on the shelves, but neither could draw an entire 22-page comic in a month…and that’s what it takes to be a professional in that game.

I’m not saying if you miss a deadline you’re suddenly an amateur – the continuum is much less binary than it is fuzzy. But during your career, your present job, or the past 6 months, how many deadlines have you hit? How many have you missed?

There are going to be extenuating circumstances. There are going to be times when a third party vendor flops and the project falls apart at the last minute. And there are going to be times when the deadline is set externally and you know from the outset you’ll never hit it. But if you find that there’s always a reason you aren’t hitting deadlines you have to start asking yourself: Is it you?

I know that somewhere between 55 and 90 percent of software projects fail. Missing deadlines is easy; I could get my mom, who knows nothing about software development, to come in and miss project deadlines. Does the fact that she showed up and collected a check make her a professional developer? She’s easy to work with and comments her code.

So here is my question: during your career, your present job, or the past 6 months, how many deadlines have you hit and how many have you missed?

This isn’t a show of hands, just a gut check.

Shock of the Day: I’m Moving to New Haven, Connecticut

Check your calendar. It’s not April 1st.

My wife, who is entering the sixth year of her PhD in Psychology, applied to several schools around the country for her final year of training, and was accepted to the only school in New Haven, CT that any of us have heard of: Yale. So we’re packing our stuff and moving East for 1-2 years.

East, where the winters are cold and the trees change color in the fall.

Yes, “that programming blogger from Los Angeles” is going to become “that programming blogger from Los Angeles who’s living in Connecticut for a couple years and then probably moving back to California, but most likely to the Bay Area.” I wonder if I can fit that on my business cards?

I’m in the process of reserving a couple of moving containers so we don’t have to drive a U-Haul across country (how many horror stories can you hear before you just won’t try it yourself?). I’ve contacted a company that can ship our cars. I’m finding renters for our house, and I’ve already scoped out the two 22″ widescreen Dell monitors I’ll be purchasing once we find our new, much larger living space (since New Haven is cheaper than L.A.).

As I mentioned in a previous post, I re-entered the world of consulting about 7 months ago when I once again opened the doors of my .NET consulting firm, The Numa Group. Since the majority of my workload is off-site development I’m in a great position to move across the country; all I need is a phone and a laptop…and two 22″ widescreen monitors.

Based on my initial research the tech community looks a little thin, but I have to imagine with all the brain-power at Yale that there are some really cool technology groups in the area. Also, if I want a big city tech fix it’s tough to beat a 90-minute train ride to New York City and a 2-hour ride to Boston.

I’m off to sell my surfboards and buy some coats. Big coats.

Poll Results: Software by Rob Reader Demographics

For those who are interested, here are the results of the four poll questions I’ve posted over the past for months (with commentary and my response to each):

Are you a...

  • Software Developer – 49%
  • Technical/Team Lead – 31%
  • Manager – 11%
  • Other – 9%

Commentary: 80% of my readers are developers or tech leads?! Gasp! Choke!

I’m kidding – no surprises here. I am curious what the “other” category consists of – I can only assume DBAs, network and sys admins, helpdesk, and QA folk.

For those who are curious, I marked myself as a Software Developer.

What is your main programming language?

  • A .NET language – 36%
  • Java – 22%
  • C/C++ – 14%
  • Other – 12%
  • PHP – 7%
  • Ruby – 5%
  • Perl – 3%

Commentary: I purposefully left this question ambiguous so people could choose their favorite language or the language they use the most.

72% of readers use enterprise languages such as .NET, Java, and C/C++, 15% use scripting languages, and 12% fall into “other.” I realized after I posted that I left out VB5/6…sorry about that.

For myself, I selected “A .NET laguage.”

How old are you?

  • 20-29 – 51%
  • 30-39 – 38%
  • 40-49 – 8%
  • 50-59 – 2%
  • Under 20 or over 60 – 1%

Commentary: I probably shouldn’t be, but I was shocked that 89% of my readers are 20-39 years old. I guess software development coupled with reading a blog really narrows the field to that age group. Way to break the mold 40, 50 and 60 year olds!

I marked 30-39.

What is your highest level of education?

  • Bachelor’s Degree – 54%
  • Master’s Degree – 24%
  • Up to a high school diploma – 20%
  • PhD or higher – 2%

Commentary: A pretty even distribution with Bachelor’s earners (myself included) at slightly more than half the readership.