Record.JS - A new way to program
Look we have built business software the same now for 20 plus years. If not even 50 years for some of the concepts. We think of some great idea. We sit down and sketch out the idea, hopefully talk with others to get a visual concept. After that we site down at some text editor and type commands and patterns in one more more languages to build a system.
I don't think we need to do it this way. We as programmers spend so much time thinking about the problem and how to solve it that we don't step back enough and think maybe there is an easier way.
If you break down 99% of software written today you will find there is some data structor, in most modern systems we call this a Models. We tend to store this model in a database but it has many shapes depending on the layer we are in. What the user sees in a view is not what the database is always storing.
Then there is some workflow that these types go through to ether add, change, or remove data from the system. This has many names in systems these days. You might call them a controller or a service. We tend to build frameworks to try and simplify this and to just write less code. These tend to follow some pattern that we follow throughout the system like MVC, Active record, MVVM, or many more.
The last part of the software we write is the views. Most systems these days require multiple views of the same data. It might be based on some role they have in the system. Like an Admin vs the the guy that just needs the reports. Or we might put less or more data on the screen based on the device they are accessing the system on. The screen is much bigger on a desktop vs a phone. You also interact with them differently, one you use your touch screen with a finger and the other you use a mouse and keyboard.
What if I told you we could do this a different way. What if we could build a completely declarative way of stating what the types and the workflows the system will need to perform? Instead of writing the something 1,000's of times across each company and team. What if instead of defaulting to a text editor we could visually make changes to a system and even watch as the data goes through the system. This is the goal of this project.
Project Goals
- Build systems visually instead of having to type out files. This would include type editors, workflow editors, view editors, and possibly more.
- Build a code generator on the backside that uses the output from the visual editor to output APIs, databases structors, and code.
- Each code generator tells the visual editor what actions and types are allowed in the system. This will allow others to build systems to their liking.
- Code generators can have dependencies on others. So you can build a API code generator that can drive a iOS, Android, and Reach view code generator. That API code generator might also be dependent on an ORM generator and a database generator. This will allow you to build your stack exactly how you want.
- Have a repository of shared code generators that other teams within your company can share as well as open source it to the world if you would like too.
- Support multiple programming language the first being JavaScript/Node.js.
What do you think? Have any ideas? Please share them with me on twitter @JTWebMan.