Monday, December 19, 2022

What it Feels like to collaborate with ChatGPT

Higher Quality Products, in Less Time

Collaborating with ChatGPT, a large language model trained by OpenAI, gives the entire endeavor of writing software a much needed overhaul and ultimately, it can dramatically streamline the process top-to-bottom. 

In this article, we'll explore not just the benefits, but what it actually feels like to work with ChatGPT day-to-day, because it is a tool that has from one day to the next fundamentally how we are going to acquire knowledge as people in the future.

ChatGPT can help with everything from designing and implementing code to troubleshooting and documenting it.

By collaborating with ChatGPT, I've been able to get more work done in less time with less effort, making writing code itself, an entirely more enjoyable experience. 

However, it's not just the technical aspects of working with ChatGPT that are impressive.  

ChatGPT & Me, a brief history

I learned of ChatGPT's existence from my friend and colleague Edgar on Saturday, December 3rd at 2:44 PM - a date I will remember for the rest of my life, because it was immediately apparent that the world has changed. 

As my family will attest to 😅 I have spent most of every waking minute day since then talking to it. 

It started with a deep dive into my work over the last 20 years, including even extremely detailed and technical aspects the project. Pretty quickly it became clear GPT is by far, without a doubt, the smartest entity that I've ever had the opportunity of communicating with.  I think that's probably just a fact.

It is certainly the first entity that I've ever talked to in my life, where, with virtually no background or context it was able to jump right in, and then not just keep up virtually anything I talked about with it, but was also usually able to gently push back on things it disagreed with, or that I had not considered before. 

Mind boggling.

Almost to it's detriment in some cases, it will almost never actually say no. 

Even when it disagrees with you, it always starts with a "Yes, and..." approach to life, and always starts by steel-manning your position back to you, and then either agreeing or going on to say "..., however, ..." at which point is is usually able to fully flesh out it's counter position to whatever you have just proposed.  It might just be the most honest "interlocutor" that I've ever had the pleasure of talking to.  

So right out of the gate, it feels like it is "with" you, even as it goes on to tell you if/how you might be wrong.  And then, after it has corrected you, if it actually misunderstood you, it is able to take in additional information, and then proceed from that point forward. 

How Time Feels

Like any tool I suppose, it just significantly reduces the time and effort required for any specific task at hand. 

It turns out I actually love collaborating with ChatGPT

As terrifying as the unknown aspect of what all this will bring over the coming years is, for now what I can tell you is that if I'm being honest - I love working with ChatGPT.

But the benefits of working with ChatGPT go beyond just the code writing process. While the fact that it is dramatically faster and easier, the real benefits are actually side effect improvements to other parts of the process that cascade from these two important initial changes. 

Here are a few of the main things that make it such a game changer.

I dont' have do the grunt work

This means I can produce more high-quality work in less time and with dramatically less effort. So 2 hours of work feels one, and yet somehow the end result is the equivalent of having spent 10.

Thinking outside the box

In addition to streamlining the code writing process, ChatGPT also helps me think outside the box.  

Obviously everyone wants to better "think outside the box" - but I think I'll probably end up writing another article called a `"The Thinking Outside the Box" Black Box`.

This is because one of the major benefits of working with ChatGPT, is no doubt its ability to think outside the box and suggest solutions that I may not have considered on my own.  In fact, it can suggest solutions that I am literally incapable of considering on my own, because I am unaware of their existence. 

ChatGPT can help you to know what you don't even know you don't know.

When I have a problem, I can try to think of as many ways to solve the problem as possible, but I am inherently limited by the fact that I can't think of things that I don't know of.  When faced with a problem, ChatGPT is able to bring a vast amount of knowledge and information to the table, resulting in a wider range of options for solution.  So when I ask it a question, it is inherently going to bring many more options to the table than I am likely to think of.

But I can also just explicitly tell it the 5 things that I'm already thinking of, and ask it for a list of the NEXT 5 things (i.e. the things that are literally outside of my box.).  IN other words, We can literally just ask it to "think outside of our box", and it is capable of doing that (most of the time).

The process of working with ChatGPT

Design, Implement, Test & Document

In addition to these benefits, the process of working with ChatGPT involves using it to collaborate on the design, implementation, testing, and documentation of code.  For example, this is the basic process involved in writing an article like this one. 

  1. I start by writing a very rough draft, and then give that to ChatGPT to suggest a table of contents for the article, that would arrange the content in a reasonable order/flow.  It usually suggests a few changes to my original version that for this article as an example, resulted largely in the order/flow that you see here.

  2. Then and I make the changes suggested.  After each step, I take the current version of the article, and start a new conversation with that version.

  3. Now, with the basic flow nailed down, I can start to ask it questions about the content of the article.  Since my rough draft is usually mostly stream of consciousness, and so I actually don't know what the whole thing will be when I first start writing, often it's first suggestion will be that it doesn't have a good summary introduction and/or conclusion.

  4. Once it starts providing me with specific suggestions, I can often ask it to fix many of the corrections that it suggests.  For example, at this point I will often ask it to write a 1 paragraph introduction and conclusion.  I can then clean those up and add them to the article.

  5. Starting to look towards the content itself, I will usually next ask it for a list of the top 5 most problematic, structural elements of the article, and incorporate the feedback that it provides into the structure.

  6. At this point, with the article largely structurally complete, and flowing in a logical order, I can then begin to ask ChatGPT suggestions about the underlying ideas themselves. 

    Here again, I can ask it for a list of the top 5 most concerning issues with the content itself, and either I can just address those concerns if I agree, ignore them if I don't, or ask ChatGPT to solve them for me if it requires any editorial work.

  7. Once we have (together) addressed the major concerns with content, we can then shift our focus to talking about phrasing, typos, and grammar mistakes.

  8. I then use the Jasper images AI to generate a thumbnail for the article. This is also usually an iterative, collaborative process where my first prompt will potentially generate images that may not quite work, but suggest ideas for new prompts that are closer to what I need.  After going round and round a few times, I can usually find something acceptable.  This side of things has a long way to come, but it's already pretty impressive imho.

  9. Additionally, for this article I wanted a visualization for how time feels, so copy/pasted my description of time where 2 hours feels like one and produces 10 hours of work, and it came up with a few different ways to visualize this process. 

    After picking the Bar Charts approach, I asked if it could produce that image for me and it said "Sorry, I am a large language model, I can't create visualizations or artwork....".  Fail.

    So I said, Okay, do you speak any languages that would let you create a visualization of what you're picturing, and it said "Sure.  Here's some python code that will create the image you want, and then it went on to write 10 lines of python code that generated the artwork for this article.  I copied and pasted that into my Code Editor, Pressed run and that graph popped up on my screen.

    Actually - the first version of the graph had blue bars - so I asked it to change the bars to the colors above, and so it rewrote the python, I copied and pasted that over to my IDE and pressed F5 again - and THAT time I got the graph you see above, which I copied and pasted here into this article.

  10. I'll usually then have us both do a final review to make sure that we're "on the same page" as it were, and then I'm ready to publish the work.

So in addition to 5-10 hours of work taking only only 1-2 instead, The amount of effort involved is just dramatically less than it would be on my own.  I'm still deeply involved in the process, and these are all my ideas, but I have a collaborator helping me accomplish my goals, in a timeframe that would otherwise be unachievable.

ChatGPT as a problem-solver

ChatGPT is a large language model trained by OpenAI that can assist with the design, implementation, testing, and documentation of code, making the process of writing code more efficient and enjoyable.

For example, any time I run into a roadblock, often I can just copy/paste the message or error code over to ChatGPT and then conversationally, ChatGPT can tell me how to solve it.

One of the biggest things that makes it feel so effortless is that in a "traditional", non-ai development environment whenever we run into a problem, usually the process is fairly involved to get it sorted out. 

It starts with doing a deep dive mentally into understanding exactly what's going on, only once that understanding has been achieved, can we then work through and come up with a solution that we think is viable. Next, we have to implement and test that solution, and if it doesn't work for any reason, we essentially now have to go back to step 1.

With ChatGPT by contrast, this entire process is different.  In most cases, since I honestly don't care what the error is as long as it can be fixed, I can literally just copy/paste the error into the ChatGPT window without even reading it, then I can skim the answer it provides and often copy one/two lines of code that need to change to fix the issue back into my project and then keep moving.

So yes - there is a cost savings in terms of time and money, but for me, most importantly, one of the main benefits that I actually feel physically in my body, is that I had to do dramatically less work to reach the same end result.  This change in effort is repeated over, and over, and over again all day long.  

It is just a fundamentally different process than developing software on our own.

Even when copy/paste fails

Even when a simple copy/paste fails, and ChatGPT can not just literally "solve the problem on it's own", it can still collaborate to help work on a solution.  It can suggest alternatives, and if at any point I start to come up with a workaround, ChatGPT can help me through that. 

This is especially important in the event that the solution involves technologies or patterns that I haven't worked with before.  Usually this adds a whole other rabbit hole - where ChatGPT can help keep me focused on just getting the solution. 

So the whole step, of me first fully understanding whatever the roadblock is can often be entirely skipped, because ChatGPT already has that understanding, which can just be leveraged to get around the roadblock. 

This let's me stay focused on the actual problem I'm trying to solve, rather than all the little thorns that are likely to keep sticking us in the side as we go.

Software is never "done":

I've always said that software is never done, because unlike a widget from a manufacturers assembly line, software can be constantly improved and updated, and... is. 

As anyone who has ever used Chrome can testify to, with it's almost daily updates, software is clearly never "done".

But - another reason for this is just logistics.  Software involves the following 6 steps, and they basically become increasingly less likely as you move down the stack:

  1. Spec/Design/Prototype
  2. Implement MVP/Iterate
  3. Test/Quality Assurance
  4. Setup Continuous Delivery/Continuous Integration
  5. Add Automated Testing
  6. Add End User Documentation
  7. Ensure Adequate Technical Documentation
With ChatGPT, at least at this point, comparing the velocity and quality of output from ChatGPT with a traditional development approach, there is now potentially room in the process for crossing every t and dotting every i. 

A concrete example

This weekend, as a side project, I was able to create a NodeJS package in under 3 hours using ChatGPT, which normally would have taken me the better part of a week, by relying on ChatGPT to suggest approaches and provide sample code for the design, implementation, and testing of the package.

ChatGPT's assistance not only helped me save time, but also allowed me to try out different approaches and choose the best one quickly.

Conclusion

It is something else. In conclusion, working with ChatGPT is a game-changer for writing code. Its ability to help with everything from design to documentation and its problem-solving skills make the process of writing code much more efficient and enjoyable.

If you're looking to streamline your coding process and make it more enjoyable, I highly recommend giving ChatGPT a try.  Even if you don't intend to integrate it into your daily workflow, I would recommend checking it out, just to be familiar with what it is and what it is capable of.


ps. This is the Python code that ChatGPT wrote in order to generate the graph for how time feels, based on a copy/paste of the sentence in this article that described the numbers.

GenerateTimeGraph.py
import matplotlib.pyplot as plt # Define the data for the chart methods = ['Actual Time', 'Effort', 'Progress'] times = [2, 1, 10] # Create the bar chart plt.bar(methods, times, color=['mediumblue', 'blue', 'green']) # Add a title and axis labels plt.title('How time "Feels", working w/ ChatGPT') plt.xlabel('How it Feels') plt.ylabel('Time (hours)') # Show the chart plt.show() 

No comments:

Post a Comment