Now that I'm an independent developer again, I've been giving a lot of thought to what I should learn next. I still love Delphi for developing Windows desktop apps, but I've been doing that for (holy shit!) 15 years now and it's waayyy past time for me to update my skills.
I had been leaning towards iPhone development, and I even attended Macworld to get a feel for the development community. But as wonderful as the iPhone developers I met were, I'm completely turned off by the way Apple handles their App Store. Having a one-stop shopping source for the iPhone is great – I'd love to have something similar on Windows so customers wouldn't have to fill out their personal information every time they want to buy software online – but Apple's lack of respect for their developers killed any interest I have in iPhone or Mac development.
The obvious choice, then, is for me to drop desktop/single-device development completely and create web-based software. Nothing for customers to install – they just browse to a URL to use my app. The trick, of course, is to create a web app that people are willing to pay for. I'm not one of those developers who wants to rely on VC financing to stay afloat while they figure out a business model, and I'm far from convinced that every web developer can earn a living from advertising (yes, I recognize the irony of me saying that). Having a family to support sort of kills the willingness to create something and hope it somehow makes money down the road (I mean, have you seen the cost of health insurance these days?).
Strangely enough, I find myself leaning towards sticking with Windows development. I say "strangely enough" because I have a love/hate relationship with Microsoft, and I cringe every time I see a Microsoft app favor geekiness over simplicity and usability. But lately I've been impressed with what they're coming up with. Their moves with Azure, Silverlight and .NET are impressive and show that they're not down for the count. For the time being it may not be "cool" to develop for Windows, but if you care about being cool, then WTF are you doing being a geek in the first place? I'm perfectly fine being anti-cool if it enables me to keep my family covered and develop software that tons of people use.
So…if you've read this far, then there's a good chance you're a developer and not just someone who uses my software. If so, what would you do in my shoes? What platform and development tool(s) would you focus on now?
53 thoughts on “Thinking Out Loud: What Should I Learn Next?”
I’d say there’s a market for desktop apps that use/consume/interact with web apps. They bring that desktop feel to the networked and interoperable nature of the web app. Seems like your recent experience with FeedDemon and Google Reader is a natural move in that direction.
Why not find a service/webapp/api that interests you and figure out how a desktop app could enhance that service? I’m thinking of things like Propane for Campfire: http://propaneapp.com/ or Tweetie for Twitter: http://www.atebits.com/tweetie-mac/ (the world does not need another Twitter client, though).
You get the best of both worlds in a situation like this.
I would probably do go the Silverlight route, esp. with v4 merging desktop and web (or web and desktop) even more and the (sort of) true(ish) cross platformness of the thing. But then I am biased and in love with C# :)
I am still unsure what to think about Azure…
A couple of years ago, I moved from developing exclusively in Delphi to developing in Ruby on Rails, and the experience has been a joy. I’ve also moved from PCs to Macs and was unprepared for how much I enjoyed that, too.
Using Ruby has reminded me about what I found fun about programming in the first place. There have been tons of times where my jaw dropped when I realized how easy something that was otherwise complex would be to implement. It reminds me of my early days learning Delphi.
I even did a blog for awhile, giving an account of things I’d wished I’d known when I started with Rails, at http://delphitorails.com.
I have long been a proponent of .NET and WPF even though I hung up my developer hat a few years ago so my push in the right direction is obviously along those lines especially given the really cool and useful things that can be done UI wise.
As far as apps .. well I know I will be totally out in left field on this one but I think that the whole communications area in relation to the desktop is prime for a re-boot. Whether it me email, rss, IM, social media they are all a part of a larger communication platform that needs to be re-thought from a user’s point of view and I truly believe is prime for aome major disruption if the right ‘out-of-the-box’ imagination can be brought to bear.
Not sure if it is ‘hardcore’ enough for you, but the Adobe AIR platform supports fully featured, cross-platform desktop development with a simple web install process. Used by the wildly successful TweetDeck.
Also have you considered developing for Android via Java/Eclipse? Android usage is set to explode and the android market is not yet saturated unlike the iphone app store.
I don’t know Nick. Apple isn’t so bad, I say that because I haven’t been bitten yet, but hey, they do own the platform and they’d like to keep it nice. I don’t really have a problem with that. Look, if you play by the rules you can still do some killer stuff and they’ll approve it. I also like the fact they handle all the transactions. I don’t have to maintain a “storefront” site or the server it runs on, I just collect my part of the sale. Their 30% is just the cost of doing business.
That’s not to say the App Store is perfect, it’s not. There’s a lot of stuff I’d like to see change, but it ain’t so bad that I’d avoid the platform because of it.
Nick, I’ve been using your software for going on 13+ years now, at least as far back as HomeSite in its pre-CFStudio days. I once asked you to add a checkbox to HomeSite to allow me to insert strong and em instead of b and i because I was praying to the gods of Semantic Madness. And you did it!
I’ve been doing web development a bit longer than that (this is my 15th year), and I’ll be completely honest: it’s not for everyone. It’s fun, but it pretty much defines “moving target”. At least with OS/apps development, you have a fairly consistent release schedule and set of APIs. With the web … not even close. And bug hunting for web apps? Like being nibbled to death by ducks.
Of course, that’s not to say that web technologies aren’t fun, nor that they aren’t worth learning. The nice thing, of course, is that you can do RAD for web just like you did RAD for Delphi, so it may be worth your time to throw something together and see how you like it.
Try a few different options, though, because they all provide radically different experiences. jQuery, PHP, ASP.NET, ColdFusion, ActionScript, Ruby … there’s a common set of goals, and you’re working towards the same web app … but the taste of each couldn’t be more dissimilar.
I’ve chosen the path of iPhone software myself. I figure that after a while all of the great developers such as yourself will abandon the platform, leaving me as one of the best developers there.
On a more serious note, I do believe that Apple will straighten out the app store, and there are lots of app developers out there who aren’t having the problems you hear about.
Best of luck in whatever you do, Nick…
You do realize Embarcadero is working on an OSX compiler, right? I remember the Embarcadero CEO saying Delphi is “either everywhere or nowhere”. In other words: sometime in the future, you’ll be able to develop OSX apps, leveraging your existing Delphi knowledge, without having to learn another new language or IDE (well, except for learning Cocoa, maybe). You can actually take this route today via Lazarus/FreePascal, but it’s probably less smooth than the future Embarcadero solution.
The web is falling behind in shifting to multiple interfaces to support both desktop and mobile applications. Some web sites will offer the mobile interface if it detects a mobile device, but even large well know sites are still clueless.
Why isn’t there an easy development environment that makes it a no brainer to detect mobile devices and offer the mobile interface? I’ve got several clients who want to offer a mobile interface, but are appalled by the re-work necessary to do so. Maybe their views are an over reaction?
If not, there is a market niche for a development kit that will help web site developers get both desktop and mobile versions up simultaneously or convert a desktop site to also talk to the rest of the mobile world.
Plus, why would you go with the iPhone when the carrier, AT&T, reprotedly has the lowest customer satisfaction rating in the US?
@Alex: I agree with you about developing desktop apps that consume web apps – it many ways, that’s what FeedDemon does already :) The downside is that can be _very_ tricky integrating with a service that’s completely out of your control (I speak from experience!).
@Tim: I actually toyed with Ruby on Rails a while back, and really liked what I saw. Have you had any trouble fitting into the MVC framework?
BTW, thanks for the link to your “Delphi to Rails” blog – I just subscribed to the feed.
@Rob: I don’t have a problem with Apple wanting to keep the platform “nice” – but I do have a problem with their arbitrary rules, long waiting periods, and what seems to be an almost anti-developer attitude.
@Stefan: Yep, I’ve been following the Delphi for OS X discussions – but until they release something, I’m not going to count on it actually working as planned :)
I think C#/.NET is a safe bet to focus on. I wouldn’t be able to give you good advice on what kind of app you could make to sell, I think you would know that better then me, but C# itself is very versatile.
It can be used for desktop apps, web applications/web services. You can use it for Silverlight and with Mono you have access to Linux and Mac as well. With MonoTouch you could even use your C#/.NET skills to develop iPhone apps. I would assume Novell will be presenting an Android version of Mono too some time in the future.
@Guy: I’ve already had brain surgery, and I don’t recommend it (see http://nick.typepad.com/blog/2005/09/signs_of_life.html )
Since you know HTML forwards, backwards, inside-out, etc, and Embarcadero are working on a Delphi for OSX, do a “Live Writer” for the Mac. I know of several blogger-type devs who start using a Mac for development (say with VMWare Fusion and a Windows VM) who are bemoaning the fact there’s no nifty Mac-native equivalent to Live Writer.
I’d have to give the nod to .Net. You are covered with the same API no matter what client platform that you target. As much as I don’t always agree with what MS does, .Net is the cat’s ass. Hand’s down.
Me? I’d go with ASP.NET and Delphi Prism.
I think Silverlight 4 is going to be huge. It gives you the same platform to build for the web and desktop and probably mobile (via Windows Mobile 7). Plus you can port to the iPhone via MonoTouch.
I really recommend sticking with Windows even though you might not want to program in Delphi, there are other programming languages…
Microsoft is a giant for a lot of years and will still be.
The simplicity of Windows and the backwards compatibility made it what it is today, from my point of view, iPhone is something that is here today but tomorrow could be iLostMyJob :)
If you really wish to do something different, go for web apps.
I see Windows and silverlight/wpf apps being very strong for corporate developments, but for consumer apps I’m now trying web apps and a hybrid ad based and subscription model.
As for a web Framework i’m trying out django (Python based) and i’m liking it very much. Also it is available for Google app engine so you could transition a small web app to their scalable infrastructure with relative ease in case you need to.
The answer is in your post – “I’d love to have something similar on Windows so customers wouldn’t have to fill out their personal information every time they want to buy software online”.
A downloadable appstore for windows… like steam for apps.
From what I remember from talking to you years ago when I was a Macromedia, here’s what I think you wpuld enjoy.
.net is a joy to use and it’s obviously right up your alley. My guess is that the more freeform
ui possibilities of silverlight wouldn’t actually float your boat (although it’s nice to be able to do things in browser)
If you’re looking for something different, rails is fun, but in my (limited) experience with rails, performance issues and immaturity of support libraries led me to go around rails on many occasions (down to direct SQL calls and in some cases shelling out to Php). I understand that others have had better experiences with rails so I might be the exception here.
Django is worth a serious look.
iPhone development is a lot of fun, but the $$ isn’t there for most apps. Most of the top 100 apps are game / lifestyle apps. We did an iPhone app to test the waters and we found that at it’s high point (#35 or so on top productivity apps) it was still not makin enough $$ to justify doing significant future development. So if you think you can get to, say, #20 in the category, you might be able to eke out a living.
It might be counterintuitive but I think there’s a future in os x cocoa development if you’re looking to build tools for web guys. (broader products like feedemon are better on windows, obviously). I spent some time doing an editor for web guys that is kind of like coda + language intelligence. If you restrict yourself to mac only, you get to use fun things like core animation an core data.
For our current project I’m using php which I think you would hate. We’re building up our own orm framework and I like doing that kind of work, so it works out for us.
Anyway, good luck and let us know what direction you end up pursuing.
Speaking as someone who was primarily an MFC/C++ developer for about 10 years …
Flex/AIR/Actionscript is pretty nice. AIR is the best cross-platform desktop environment out there IMO.
I looked at C# when it first came out, thought it was kind of neat, but really impractical at the time. Recently I needed to bang out an app that used thread pools, low level file notifications, and HTTP comm… 2 of those are things AIR doesn’t handle so well… and was able to do that just fine, and really quick. I could have easily spent 4-6x the effort to do it in MFC/C++.
I do a lot of quick PHP hacks for web stuff, but having spent some time evaluating various web platforms, my hands-down favorite is ASP.NET/MVC. Haven’t done any long term, large scale projects with it though, so can’t speak to that aspect. Still fall back on PHP for most things.
I also tend to judge a platform/language more based on its usefulness and utility rather than its intrinsic beauty, FWIW. I judge that more by how much time I am spending on the language/platform vs. thinking about the problem I’m trying to solve. It’s probably because C# leverages all of my Windows/MFC experience, but I am really impressed with it in that respect. Banging out that project was really, really easy. But… I have MAC compatibility requirements for a lot of other projects, so AIR is still going to get used.
Have you looked at Google Wave? It seems to be a platform for development.
I’ve been using Delphi since D1 came out, and use still, now on D2010. Always the tool of choice for Windows desktop/laptop apps, as well as web services, not for religious reasons but because it is so highly productive, as Mark Miller’s challenge has demonstrated time and again. There are more opportunities for this that there have ever been, particularly if part of a service or product continuum. (I once told Borland that their marketing people were brain dead when they asked if they could do a case study on us; they did it anyway.)
The big problem I have with mobile is the death grip that the telcos have on them. Plus, the forked code base makes them a maintenance nightmare. The only thing I’d develop for mobile would be delivered in their browser, which avoids a whole gaggle of problems. If I had to choose one to work on it would be the Android.
Today, as others have already mentioned, going with ActionScript3 and Flex opens new opportunities. Flex is akin to a crippled version of D1, and ActionScript is more like assembly language, and both suffer from relatively limited compilers. Still, getting over these is well worth the investment. While writing new ActionScript classes will always be labor intensive, there are a lot of libraries that help prevent reinventing wheels; Flex has quite a few frameworks that help put RAD into the web world (which generally hasn’t grasped CRUD design as yet), with Mate and Vara being among the most versatile. While AS/Flex tools are no where near Delphi, they are lightyears ahead of the page oriented html based web architecture.
We still sell a lot of Windows programs, and are increasingly doing ‘subscription software’ service offerings, with an AS/Flex presentation, supported by a backend of choice (Delphi, java, even occasionally .NET), with tendrils to desktop/laptops.
@djysrv: believe it or not, but the world is actually bigger than the US. In your country, AT&T might be crappy, but in the rest of the world other telco’s are running the iPhone, and some people are actually happy with them. Also, I expect iPhone’s exclusivity with certain telco’s to end soon.
In the technology world things change with the time and to keep yourself alive in the technology business it is important to keep up with the pace. The only thing constant in this industry is CHANGE.
Delphi was very cool, I developed my projects as a free lancer in Delphi, FoxPro, Dbase etc. some 10-12 years back. Things changed, Visual Basic became more prominent so I swithed to VB. When .Net was intoduced it was purely my Gut Call, I tried learning C#. Since then I am keeping a pace with it. I also made many moves which in my perception were not correct in chosing the technologies viz. D2k, GTK, Linux etc. because the opportunies for these technologies were so less that all the painful learning was never used. Now with .Net, ASP.Net, C#, SQL Server, I am making my living since last 6-7 years and I am happy.
Nothing fancy but I will like to put it flat that, end of the day bread & beer comes for money and technology that pays well will be my choice.
@Julian: I’ve also heard a number of Mac people wishing for a blog editor similar to Live Writer. Given the design focus of much of the Mac audience, I’m surprised it doesn’t already exist.
@Sho: Nice to see you here! I toyed a little bit with PHP, and you’re right – I hated it. I think you’re also right that I’d enjoy .NET. I dabbled in C# a bit and *really* liked the broad library and the ease of doing so many things that take forever in Delphi, but the runtime library was a non-starter for me (but probably isn’t anymore, given how many users have it pre-installed now).
Despite my snide remarks in my post, OS X development (but not iPhone development) still remains attractive. Core animation looks great, and part of me would love to just get away from Windows completely. Not sure I’d want to build web tools again, though – I’ve kind of had my fill of creating web authoring software over the years :)
@John: I have looked at Google Wave, and although its complexity is daunting, the idea of building on a real-time communication platform is very attractive.
I’m dipping my toe into iPhone development myself – although more as a way to learn a new language than any serious desire to make a career of it. If it does make me any money it’ll be as a contract developer, not risking my own skin on the Apple approval process :)
The question you ask is one I wonder about as well.
Personally, I expect the “footprint” of desktop applications to shrink, steadily. If you have an Internet connection (more often a given), better to host more applications on the web. There are a few cases that will stay on the desktop, put that is going to be more the exception. I find working on web applications more interesting, if at times more difficult (easy stuff is not very good, good work is much harder).
Web applications will get steadily better, and desktop applications will lose ground.
But you still need to work off-line, at times. That leads to web-launched or web-distributed applications. Java Web Start is pretty interesting, but as a GUI framework it seems the Java community lacks critical mass. The Java Swing framework is a bit of a hash, and not really progressing. The C++ MFC framework is both more mature, and more of a mess. (Given it’s long history, not really a surprise. One of my personal goals is to never use MFC again.) Delphi is kind’a nice, but Pascal as a language is kind of limiting, and not my first choice. (My Pascal usage traces back to UCSD Pascal, through Turbo Pascal and Delphi.)
Have not looked at .Net for GUI building. I expect it is more mature and still progressing, but that pretty much locks you to Windows. (Not my personal preference.) Probably will pick this up someday.
What are the remaining niches for desktop applications? What is interesting?
Web applications are more interesting, but you need something that makes money. What is a good fit for an independent developer (or a small group)?
One of the curious variants is to write a web application that can “clone” itself and run off the desktop when disconnected from the Internet. Makes sense for some domains.
I wouldn’t worry about the .Net runtime if I were you. At this point, the big barrier is that no one wants to download and install desktop software. If you come up with a product that gets over that barrier (because it is so awesome, or because the product naturally lends itself to a desktop implementation) then the runtime download is (IMHO) a small barrier in comparison.
An iTunes like app for windows would be awesome.
Some ideas to consider:
– Since you have experience with editors and RSS why not integrate published RSS into FeedDemon or write a separate editor.
– See if the guys doing delphi work at DevExpress could use some help. Granted this isn’t creating a new app but it may be something interesting for you to do.
– What are your hobbies? Is there anything you could write that would make your hobby more enjoyable?
– Something I would would use is a program to synch GPS data with photos. I know programs that do this exist but there’s not a killer application available, IMO.
– Addins for IDEs such as Visual Studio and Sql Server Management Studio
.Net is pretty cool but one problem I have with Microsoft technologies is there’s a new release for some new technology every other month it seems. I wish they’d slow down a bit and things settle in. Silverlight 4 does look interesting since you can do desktop and web with same codebase. That’s something I’m planning to learn more about.
Whatever you do I’m sure you’ll be successful at it. I can’t count the number of hours I have spent running software you’ve written.
What about native Windows apps for 37signals products (especially Basecamp and Backpack)? Something done nice in WPF could be real interesting!
I think your overall idea of web based computing is a good idea. (If it suits you. I think it likely does.)
I also agree that advertising is not a really smart idea.
I’m involved in the area of web services driven from web pages.
This might be of interest to you.
1) Currently I’m using WCF style web services driven from jQuery web pages. Sorting out the marshalling is a bit of work to start with (I don’t use MS ASP.NET AJAX even though I use ASPX pages). It works great and I recommend it. I find that writing my own code generators takes much of the boring work out of these apps.
2) In future Silverlight / WPF may be of interest. I’m keeping an eye on market penetration. Performance from these platforms is superb and distribution is getting there.
3) The F# language is becoming official real soon now. It won’t be automatically installed with all web servers, which is unfortunate, but that can be overcome. As a language I think this has great potential, you can write OO style, functional style and concurrent threads are easy. I strongly suggest having a good look at it.
That’s enough for now.
Nick – To a large extent I think you’re putting the cart before the horse. I’m sure you’re looking for feedback on what other devs are using, but it seems like a better thing to figure out is what problem you’re trying to solve first before deciding what tools are the best tools to use to solve it. If you are just wanting to learn a new technology and whatever you develop is potentially a throw away app, then of course it doesn’t matter.
All of the answers you get from anyone (including me), are going to be based on our own biases and experience, check out Seth Godin’s blog post to further illustrate this: http://sethgodin.typepad.com/seths_blog/2009/11/hammer-time.html
It seems to me based on the products you’ve previously created that you saw a need (probably first a personal need), and then developed a product based on that. I’m sure you’ve got a couple of ideas…I think you’re previous desktop application experience would provide a higher probability of success developing another desktop application instead of a web application, but hey even Michael Jordan was able to go to the Minor Leagues in Baseball, because he had so much athletic ability he was going to be fairly good at most sports…So I wouldn’t rule web apps completely out for you.
After you’ve decided what you want to build, you should look at what tools are a better fit for the solution you are trying to provide…
Just one guys, unasked for opinion on your question :)
Silverlight! Powerful, fun, able to sling code in C# using the .NET library while still being very lightweight in terms of install plus you also get Mac-compat. It’s the perfect merger between desktop and web-based apps.
Now of course maybe I’m just a wee bit biased since I actually work on the Silverlight team :) but as a previous client Delphi developer for many years it was a great transition (and I still love Delphi for straight client-side development).
You should build something on top of Brightcove so that an Allaire can buy out your company. :)
I’m halfway kidding- there’s a lot of things that still need to be done in the video space with a lot of video players (Brightcove, JWPlayer, etc) that allow for third-party components.
Another idea would be to start figuring out how to build an app on Flash Player 10.1, one that can be used not just for the iPhone but for the other mobile devices that will have support.
As a consumer of online content FeedDemon was perfect for me. I didn’t want to have to visit a web site get to the information. FeedDemon presented what I wanted in the most easily accessible manner for me to consume in the fastest possible time.
I use Flickr/Twitter/Facebook regularly and will download and try any desktop based client that will give me some of the FeedDemon feel for these web apps (currently trying Flickroom/Seesmic for Windows/Fishbowl). I understand that the APIs are out of your control, but hopefully the more clients access them, the more stable they will remain. As someone who purchased FeedDemon many years ago I’d be happy to do the same for some more quality desktop Windows apps :)
Keep up the great work!
Interesting-to-me app-building spaces these days:
2. meta-apps (apps that run other GUI & cmd-line apps)
I’m a user/fan of all your work. Whatever you do will be just right.
ps — re: Apple: agreement. Their world of wonderful things is, unfortunately IMO, a locked trunk. Always has been. Always will be. Some folks like that. Some don’t. I’m in the latter group.
> Some folks like that. Some don’t.
Let me revise/clarify that thought. Shoulda writ:
Some folks don’t mind that. Some do.
> cart before the horse.
Deep agreement w/ Brian’s post.
What application do you really want that doesn’t exist ?
@Brian: You’re right that in some ways I’m putting the apple before the cart by choosing a platform before deciding on an app, but at the same time, I certainly don’t want to make my next app the first one I develop in a new language (that would be a support nightmare). So, a “throw-away app” is exactly what I’d create in order to learn the language, and there’s a good chance that process would lead to plenty of ideas for new apps.
Side note: that reminds me of how I ended up creating HomeSite. I originally used VB to develop HomeSite (that version was never released) while at the same time teaching myself Delphi by using it to create a simple text editor. That taught me enough about Delphi that I was able to redo HomeSite in Delphi, which became popular enough that I gave up my day job :)
@Stanley: While the “locked trunk” is definitely a concern, I think I’m more bothered by how little control iPhone developers have over the release of their apps. I can’t imagine releasing an app into the black hole of the App Store and then have to wait several weeks (or longer) for it to show up – and god help me if there’s a bug in that version that I want to correct right away.
Like you have I grown bored (and annoyed at times) doing the same type of work for a number of years, Windows desktop and web server development. I’m in the process of “re-inventing” my indie shop focusing on iPhone development at the moment with plans to include the Mac desktop in 2010. I prefer using and building native apps over web apps and Windows just doesn’t do it for me anymore, which is why I’ve moved to OS X both as a user and as a developer. It’s feels great to be “starting over” again with my career. I’m once again excited about writing code, which is something I lost in recent years.
@Kirby: I have to confess that boredom with Windows is one of my motivators here. I still really enjoy working on FeedDemon, but the thought of developing yet another Windows app doesn’t excite me the way it used to.
Like you, I prefer native (or hybrid) apps over web apps. And I also think that native apps will become more appealing to customers as privacy concerns increase over the next few years. This is one reason why native apps like FeedDemon which offer a “mixed” privacy model (ie: some data is synched/shared with the web, and some is private to your local machine) appeal to me so much.
Even though iPhone development has lost its luster for me, I’m still awfully tempted to develop Mac desktop apps. I guess a big reason I shy away from it is that starting over with a new OS at this stage would be much more challenging than it was in my 20s – I have a wife, two kids, and an ailing father now, so my “learning time” is far less than it used to be.
Comments are closed.