When I type a prompt into the chat pane in Cursor, it is indistinguishable from programming to me. The part where I tap tap tap on the keyboard and code comes on the screen isn’t programming, that’s typing. The part where I use keyboard shortcuts to navigate the IDE isn’t programming either. Both of those parts (the typing and navigating) is being done by a robot when I prompt Cursor, but the programming is still done by me.
When I look at a ticket in JIRA that says, for example, “add a way to archive a contact” in my React/Node/MySql application, when I estimate, I think
- Add an
archived
field to the contact entity, default to false, set as non-nullable - Generate a migration and run it on my local database
- Add DB service functions to archive and unarchive contacts
- Write unit tests for those DB service functions
- Add GQL mutation functions to archive and unarchive a contact
- Add
archived
to client GQL queries - Add
archived
to the client-side contact model by running the GQL code generator - Make sure to set up the model’s
archived
field from the GQL query in Redux - Add a Redux reducer to set the archived field
- Add Client-side functions to optimistically update the redux and call the GQL mutation (undoing on error)
- Add an “archive”/“unarchive” button on edit on the contact edit dialog (show the one that applies to the contact)
- Look at lists that show contacts and decide if they need a way to filter archived contacts out or not
I can tell you from experience, that I can do steps 1, 3, 4, and 5 with a prompt that has basically what that says and at-mentioning the files that will be updated and that serve as a model (I probably have another entity with an archived
field). Step 2 is a yarn
script for me that compares the schema in my code to the one in my DB. Steps 6, 7, 8, 9, and 10 would be another prompt, and finally I will do 12 & 13 manually or with completions because I might want to adjust the UI.
Before Cursor, I still wrote out that list because I like to Build a Progress Bar for My Work that helps me make an estimate, keep on track, and know if I am not going to make it. When I work with Junior devs, I often develop this list with them to communicate what I want done with more details.
Is this programming? I think so. Instead of TypeScript, I am “programming” in a loosely specified, natural language inspired, custom DSL. I run scripts to generate my migration code from schemas and my client side models from GQL queries, and to me, prompting Cursor is basically the same thing.