Dan Appleman: Kibitzing and Commentary

My personal blog

New course: Force.com and Apex Fundamentals for Developers

I’ve just had my very first online course published at Pluralsight. Here’s a brief description:

Apex is the native language of the Force.com platform, and there is a huge demand for skilled developers in this space. The Java/C# like Apex language looks familiar enough that experienced developers often expect a short learning curve, but the platform is actually radically different, and requires use of a unique set of set of design patterns. In this course, you’ll learn the core concepts that are essential for every Apex programmer to learn, and a roadmap to further resources to help you quickly become an expert in this rapidly growing space.

You can read more about it on the AdvancedApex.com blog.

Force.com is the next Visual Basic

I just came back from the Dreamforce conference with an epiphany – Force.com is the next Visual Basic. Some less experienced software developers might think that’s an insult, but those of us who have been around know that it’s not merely a compliment – it’s an observation that, if true, represents a potential tectonic shift to our industry.
To understand why, I need to take you back over 20 years.
When Visual Basic 1.0 came out (I participated in the original beta program), the reactions to the product fell into three categories:

  • Most professional C++ programmers dismissed it. VB was a “toy language” or a “glue language” for components – not for serious software development.
  • Increasing number of software engineers embraced the language because, to put it simply, when it came to desktop applications you could be an order of magnitude more productive in VB than in C++. It may not have had the stature and features of a “real” professional language, but it sure was profitable to work in it.
  • VB was easy enough for anyone to use, so everyone did. Doctors, lawyers, students – millions of VB developers sprang up out of nowhere and wrote a lot of code. Much of it was very bad code, but that’s what happens when a bunch of amateurs get in the game. Entire book, magazine and training industries grew up to help them get better, and many of them did and built entire careers around the platform.

By the time VB6 came around, it was the most popular software development language and platform in the world. Simply because it was easy, and it was productive.
Why was it productive? Because VB put an abstraction layer over the Windows API that was infinitely easier to use than coding to the native API or other available frameworks such as MFC or ATL. You couldn’t do everything in VB6, but you could do most of what you needed, and could call the API directly if you really needed to. Having a rich set of available components to purchase didn’t hurt either.
Microsoft did a lot of things right building the VB community. They had great developer and ISV relations. They supported several conferences. There were books, documentation, whitepapers and so on. They really set the standard on how to build a platform.
Then they created the .NET framework.
There was a lot of negative reaction from the original VB6 community towards VB .NET, some calling it “VB .NOT” or VB.Fred (coined by Bill Vaughn). Some programmers made the transition. Some switched to C#. But two things were clear. First, VB .NET was indeed a powerful, serious, professional language and platform for software developers. Personally, I love it, and still use it all the time. But it was equally clear that VB .NET is not easy. In fact, the entire .NET framework is robust, powerful, sophisticated and complex. It’s a great platform for software developers, but is it a platform that makes it easy for non-programmers to write line of business applications? Not even close.
Both VB .NET and C# are native languages to the .NET framework – the Windows API of today’s software. Missing was the magic of the original VB – that layer of abstraction that made it easy for anyone to write software.
I’ve been searching for that magic for a long time. I kept waiting for it to appear out of nowhere the way VB 1.0 did. I sure didn’t expect it to sneak up on me from behind.
(more…)

Advanced Apex Programming for Salesforce.com and Force.com

Advanced Apex Programming for Salesforce
As many of you know, I do enjoy writing books. Which is a good thing given that I’ve written quite a few of them. I’m proud of all of my books, but there are a few that fall into a special category – and that includes my latest effort.
If you’ve looked at the book market, you’ve probably noticed that a lot of books are very similar. Most subjects offer dozens of competing books that have pretty much the same content. Personally, I’ve always felt that if a good book exists on a particular subject, I shouldn’t waste my time writing another one. As a result, most (if not all) of my books have been either unique, or the first one in a given space. For example: my original Visual Basic Programmer’s Guide to the Windows API was the only book for a long time that dared to teach Visual Basic programmers to use the Windows API. My recent book on teaching leadership skills to teens is nothing like anything else on the market.
Which brings us to Advanced Apex Programming.
As I mentioned in my previous blog post, I’ve been spending more and more time over the past few years working in Apex – the native language of Salesforce.com. I’ve learned a great deal in the process and… well, you know how it is. Sooner or later, if I learn something, I end up writing a book to teach it. In this case, I was astonished to find that nobody has written an advanced Apex book yet. There’s lots of great reference material, a good selection of articles, and plenty of beginner’s texts out there. But there was no book to help the intermediate developers take the next step, and give the advanced developers something to geek out to. Even the domain, AdvancedApex.com was available!
I couldn’t resist.
You can read about the book at AdvancedApex.com. I’m as excited about it as I was that original VB Programmer’s guide. As with that book, I think it’s going to help a lot of programmers write a lot of great code and become more successful. And as an author, hearing from readers that a book I’ve written has helped them build their careers is what really makes it worth the effort.

Leaving stealth mode

For the short version of this story, check out http://angel.co/full-circle-crm
Has it really been over a year since I last posted? Wow. The main reason things have gone quiet is because, somewhat to my surprise, I’m doing another startup, and we’ve been in that mysterious state of being known in the industry as “stealth mode”. And now, it’s finally possible (even advisable) to write about what I’ve been up to.
In some ways, it’s a rather “boring” startup. We must forgo the drama of wondering if we can develop a prototype into a real product, if that product will find demand, if we can recruit an executive team and if we can find a business model that works or a way to monetize the business.
We have a great executive team. We have a product (and believe me, I know the difference between a product and a prototype). We have a simple business model – providing a solution to a business problem that companies are willing to pay for. And we have paying customers.
Of course there’s still plenty that needs to be done, but I think we have a pretty good foundation to grow on.
So what do we do? Our team calls it “Moneyball for Marketing” – it runs on Salesforce.com and provides a way for companies to accurately figure out the value of marketing campaigns, understand their sales and marketing funnels, and market to existing customers as easily as to new leads. I’ve been assured by my co-founders (and customer responses) that these are all good things and very exciting.
As a software developer, I’m much more excited by the product itself. It represents the culmination of another unexpected twist in my career. As many reading this know, I’ve spent most of my career as a developer, author and speaker on Microsoft technologies. Well, about 5 years ago, I was called in by a friend to help write some triggers for a Salesforce.com organization. As time went on, I found myself doing more work on the platform, including some larger customizations and applications, to the point where I was actually doing most of my development work in Apex (the underlying language of the Force.com platform). I still do .NET code of course, but now it includes Force.com/.NET integration as well. I find writing Apex to be a uniquely interesting and challenging experience, and (to be perfectly honest) a great deal of fun.
Full Circle CRM Response Management (that’s the name of the product), is one sweet piece of code. I’ll be writing more about that shortly – there’s more to this story. But for now, suffice to say that I’m quite proud of what we’ve built. It’s reliable, scalable and even innovative (and yes, I do consider reliable and scalable to be as important, or more important, than mere innovation).
I invite you to check out the company profile at http://angel.co/full-circle-crm, and visit our website at  fullcirclecrm.com
And stay tuned. I promise my next post won’t take a year.

Specialization is for Insects

Recently, for a variety of reasons, I’ve been asked about my background. It’s a question that can take some time to answer. To answer why, allow me to share one of my favorite quotes by Robert A. Heinlein:

Specialization is for Insects
A human being should be able to change a diaper, plan an invasion, butcher a hog, conn a ship, design a building, write a sonnet, balance accounts, build a wall, set a bone, comfort the dying, take orders, give orders, cooperate, act alone, solve equations, analyze a new problem, pitch manure, program a computer, cook a tasty meal, fight efficiently, die gallantly. Specialization is for insects.

I can only do about half of these myself, but I’ve always agreed with the sentiment. Back in college my advisors all explained why it is important in one’s career to specialize. But I’ve always chosen breadth over depth. My ideal has never been the specialist, but rather, the synergist – someone who can combine multiple skills and talents to come up with creative and unique solutions to problems.
Some would argue that when one tries to do many things, it becomes impossible to do any of them well. This is not true. What is true, is that if you do not specialize, it becomes impossible to be the very best at something. I know this, because for a time in my career I did specialize in a specific area of technology and became one of the best at it anywhere. Now, I can safely say that I am not the best at anything. But it does not mean I don’t do a lot of things very well.
What might Heinlein add to his list if he were writing for today’s technical society?

A human being should also be able start and run a company, speak in front of a group (any size), write a book, film and edit a video, plan an event, write and place an ad, teach a class, read or write a financial statement, manage investments, work with spreadsheets, write production quality code (on several platforms and in multiple languages), handle a TV or radio interview, mentor a kid, build a computer, wire a network, play an instrument, configure a firewall, architect a complex software system.

Ok, that might not be his list, but it is at least part of mine. It turns out that if you spend time doing a lot of different things over enough years, you can actually become surprisingly good at them. You can even find connections – ways different knowledge sets overlap – that a specialist might never see.
So if you are still early in your career, I encourage you to create your own list. Don’t limit yourself to the confines of what you are taught in school or at work, or what you think you are supposed to be learning. And please don’t limit yourself just to technology – there’s a lot more going on out there.
And if you’re visiting this site to gain some insight into my background, suffice to say – it’s a long story. I like to think that were it possible for me to meet Heinlein today, he would, after some conversation, judge me to be a human being. Coming from him, I would consider it the highest of compliments.