4 ms·
This is a problem, and I've long mused over possible solutions. Every time I think about it, I come to the conclusion that the solution isn't a new approach to
by jarrett 13y ago
This is a problem, and I've long mused over possible solutions. Every time I think about it, I come to the conclusion that the solution isn't a new approach to software engineering, a new language that blows away every paradigm, some abstraction that promises to make app development simple, or any other silver bullet.
Indeed, the only "solution" I see is a solution in just the loosest sense. Namely: We continue incrementally improving languages, frameworks, libraries, and coding practices--a process that has been going on since software began. That's a disappointing answer, but I think it's the only answer, and I'll explain why.
The complexity of the tools we use is a result of their great flexibility and power. For example, a Ruby on Rails app is a huge agglomeration of technology, including HTML, JavaScript, jQuery, CSS, SCSS, Ruby, the Rails framework, and usually a number of other, project-specific technologies. All of these technologies must be learned (no small task), and their quirky interactions with each other must be managed. One sometimes thinks, "There must be a better way! There must be some abstraction that can hide all this technology." But I challenge anyone to design such a thing.
Each of those technologies is mature. Each one has had tremendous effort put into designing the simplest possible API without sacrificing power and flexibility. Even technologies with a lot of baggage, like HTML, CSS, and JavaScript, have seen substantial improvements in recent years. Given that, does anyone think they can do better? Can anyone do everything these technologies do and present a radically simplified API? Remember, you can't sacrifice power and flexibility and just support the most common use cases. Almost any application will need at least one thing that's unique or idiosyncratic.
This is why people use Rails (or similar tools) for custom apps instead of Wordpress. Wordpress has many off-the-shelf plugins that provide commonly-needed features. From a site maintainer's perspective, Wordpress abstracts away most of the complex web programming inherent in those features. But for serious app developers, that's almost never good enough. The plugins never seem to work exactly as you need them to, and they rarely talk to each other the way you would like. A short ways into the project, you're forced to either hack up your plugins, which is a maintenance disaster, or code your own plugins, which means you're really just using Wordpress as an inferior Rails substitute.
- Edmond 13y agoA good tool does not need to throwaway existing frameworks or paradigms in order to deliver. I am a firm believer in using what's already proven. >The complexity of the tools we use is a result of their great flexibility and power. This may see like a strength but it is actually a massive weakness. Existing IDEs attempt to be all things to all people and as a result are not actually delivering the best that they could if they were more focused. >Given that, does anyone think they can do better? Download our software (check my profile for link) and spend some time playing with it, you might just reconsider that position :) Or join the newsletter, we are coming out with an exciting update that is basically going to attempt to combine wordpress-like application composition within an IDE.
- jarrett 13y agoI looked at Crudzilla. (Is that the product you're referring to?) I don't really have the time to test-run a new framework right now. Perhaps you could give a quick overview of how you're solving the key problem I identified above? To recap, my argument is: The web stack must be flexible and powerful, because nobody's abstraction layer can anticipate the weird, idiosyncratic little needs of most real-world projects. Thus, the flexibility and power of the dominant tools, like Rails and Django, can't be sacrificed in the name of simplicity. Or if you do make that sacrifice, your tool will only be useful to the tiny subset of applications that fit into your narrow definition of how an app works or what it does.
- dj-wonk 13y agoI see intrinsic informational limitations. Software developers and managers learn, but they also forget. Also, technologies change, so knowledge "rusts" over time. So the rational ability to make information-based trade-offs is dynamic. Now, think about competition and you can see why this gets complex. I wouldn't be surprised if there is a system dynamics paper on this phenomena.