Deep Dive into Code with ChatGPT

April 4th, 2023
Open Source libraries offer user documentation. But expert users and contributors have a deeper understanding of the inner workings stemming from a mental model and architecture derived from deep dives into the code. That understanding and model are helpful to employ the library more effectively, debug issues when using it, and teach interesting concepts on how to structure complex reusable code.
Deep diver

Learn more with less effort

Software engineers can always read the code of a library, in theory. In practice, it is too time-consuming to dive deep into the code. Moreover, getting your head around the broader software architecture takes time and reading before things fall into place. Documentation is aimed at usage and can help only so much.

Here a tool like ChatGPT is powerful. Given the right question, it can outline complex libraries for you. That can be useful when you debug an issue or try to contribute to it. It can also be a great teaching tool. Learning how some libraries are implemented draws from the experience of many talented engineers and actual use and limitations.

An attractive aspect of it is its interactive nature. You can dig deeper into certain parts that interest you more. While you can do the same in documentation and code by drilling deeper into it, you can cherry-pick your questions, drill down, and ask 'stupid' questions with ChatGPT. It happily explains references to vaguely remembered concepts and goes deeper, even if they do not relate to the library.

To illustrate my point, I created a small example of what I mean below with jQuery. I asked ChatGPT-4 to explain it in software engineering terms. I followed up with a drill-down question on the plugin system and generalisable learnings from it. Of course, you can modify it to be more or less technical and have a lengthy conversation on ever more detailed aspects.

A jQuery Deep Dive

Below the question I posed to ChatGPT-4.


Act as the Principal Software Engineer at a startup. Explain the `jquery` library at `https://github.com/jquery/jquery` to your team. You want to teach them the inner workings of the library and code. Do not repeat anything they can find in the user documentation.

Use markdown for the output.


A jQuery for Software Engineers introduction by ChatGPT-4

Below the response from ChatGPT-4 using its formatting.


jQuery Library Deep Dive

Hello team! Today, we will explore the inner workings of the jQuery library, beyond what you can find in the user documentation. By understanding the core functionality and structure of the library, we can leverage its capabilities more effectively.

Overview

jQuery is a popular, fast, small, and feature-rich JavaScript library. It simplifies HTML document traversal, manipulation, event handling, and animation. jQuery is built on top of the Sizzle selector engine, which powers its DOM element selection capabilities.

Core Structure

The jQuery library is structured as a self-contained, Immediately Invoked Function Expression (IIFE), which means it is executed immediately after being defined.

javascriptCopy code(function (global, factory) {
// jQuery initialization code
})(this, function (window) {
// jQuery core implementation
});

This structure prevents jQuery's variables and functions from polluting the global namespace and ensures its compatibility with other libraries and code.

jQuery Object

The core jQuery object is a function that serves as the main entry point for using the library. It is also an alias for the $ function. The jQuery object constructor creates a collection of DOM elements based on the provided selector:

javascriptCopy codefunction jQuery(selector, context) {
return new jQuery.fn.init(selector, context);
}

jQuery Prototype

jQuery's prototype (.fn) is an object containing all the methods and properties that are available to instances of the jQuery object. By extending the prototype, we can add custom functionality to the jQuery library.

javascriptCopy codejQuery.fn = jQuery.prototype = {
constructor: jQuery,
// ...other methods and properties
};

Key Components

Sizzle Selector Engine

The Sizzle selector engine is the heart of jQuery's DOM element selection capabilities. It is a standalone library that can be used independently of jQuery. Sizzle is used within jQuery to efficiently query and filter DOM elements.

javascriptCopy codejQuery.find = Sizzle;
jQuery.expr = Sizzle.selectors;

Event Handling

jQuery provides a robust event handling system that abstracts browser-specific implementations and makes it easier to work with events.

The event handling subsystem is built around the jQuery.event object. Key components include:

  • add

    : Binds event handlers to elements.

  • remove

    : Unbinds event handlers from elements.

  • trigger

    : Triggers a specific event on an element.

  • special

    : Contains definitions for custom event types.

AJAX

jQuery's AJAX capabilities are encapsulated within the jQuery.ajax object. It provides a simple, consistent API for making asynchronous HTTP requests.

Some key functions include:

  • jQuery.ajax

    : The core AJAX function.

  • jQuery.get

    : Shortcut for making GET requests.

  • jQuery.post

    : Shortcut for making POST requests.

  • jQuery.getJSON

    : Shortcut for making JSON requests.

Animation

jQuery's animation subsystem allows developers to create complex animations with minimal code. It is built around the jQuery.Animation object and a set of predefined effects that can be applied to elements.

Plugin System

jQuery provides a simple, powerful plugin system that allows developers to extend its functionality. Plugins are created by extending the jQuery.fn object with custom methods.

javascriptCopy codejQuery.fn.myPlugin = function () {
// Plugin implementation
};

Conclusion

By understanding the inner workings of the jQuery library, we can utilize its features more effectively and even extend its functionality to meet our specific needs. Let's leverage this knowledge to build robust, efficient, and maintainable applications.

If you have any questions or need clarification on any aspect of the library, feel free to ask. Happy coding!


Diving Deeper, the Plugin System

Question to ChatGPT-4:


Explain the Plugin System further and what can be learned from it if we were to implement a plugin system?


Answer from ChatGPT-4:


jQuery Plugin System: Deep Dive

The jQuery plugin system is an essential part of the library, as it allows developers to extend its functionality by adding custom methods. Let's dive deeper into the plugin system, its structure, and how we can learn from it when implementing our own plugin system.

Structure

The plugin system is built around the jQuery.fn object (jQuery's prototype), which contains all the methods and properties available to jQuery instances. By extending this object, we can create reusable plugins that can be called on any jQuery object.

Creating a Plugin

To create a plugin, you define a new method on the jQuery.fn object. The method should perform the desired functionality and return the modified jQuery object to maintain chainability. Here's a simple example of a plugin that adds a CSS class to all elements in a jQuery object:

javascriptCopy codejQuery.fn.addClassCustom = function (className) {
// Iterate over each element in the jQuery object
this.each(function () {
// Add the CSS class to the current element
jQuery(this).addClass(className);
});

// Return the modified jQuery object to maintain chainability
return this;
};

Usage:

javascriptCopy code$('div').addClassCustom('my-custom-class');

What Can Be Learned for Implementing a Plugin System

When designing your own plugin system, you can learn several key concepts and best practices from the jQuery plugin system:

1. Encapsulation

jQuery plugins are encapsulated within the library's prototype, which helps maintain a clean and organized codebase. When implementing your own plugin system, consider using a similar encapsulation strategy to keep your code organized and easy to maintain.

2. Chainability

One of jQuery's core features is chainability, which allows developers to perform multiple operations on a single object in a single statement. When designing your plugin system, consider returning the modified object to maintain chainability and improve the developer experience.

3. Extensibility

The jQuery plugin system makes it easy for developers to extend the library's functionality with custom methods. When creating your plugin system, ensure it is easy for developers to add new functionality without modifying the core codebase.

4. Compatibility

The jQuery plugin system is designed to be compatible with other plugins and code, thanks to its encapsulation and self-contained structure. When implementing your plugin system, consider the potential conflicts with other plugins or code and design your system to minimize such issues.

5. Documentation and Naming Conventions

To help developers understand and use your plugin system effectively, provide clear documentation and follow consistent naming conventions. This will make it easier for others to create plugins and contribute to your project.

Conclusion

By understanding the jQuery plugin system and its structure, we can learn valuable lessons for implementing our own plugin system. By following best practices and lessons learned from jQuery, we can create a flexible, extensible, and easy-to-use plugin system for our projects.


Limitations

We could go on further and further. Beware, though, that ChatGPT can occasionally trip when you get too specific, e.g. ask it to look up a specific line of code. It is not a search engine or code repository. At that point, you are better off reading the actual code.

    Let's talk

    You have a business problem in need for data and analysis? Send us an email.

    Subscribe to updates

    Join Bold Data's email list to receive free data and updates.

Related Posts

9 Proven Programming Productivity Prompt Tips for ChatGPT

Cyborg red eyes
Learn to harness the potential of ChatGPT4, your virtual programming partner, with nine prompting tips. Improve your programming skills by communicating clearly, engaging in conversation, using the proper syntax, and iterating on complexity. Keep context fresh, and ChatGPT4 will be invaluable in your coding journey.

How to create a Data Dictionary using ChatGPT

An abstract watercolour art of a robot reading a dictionary
ChatGPT can combine data with natural language and has extensive information about most subjects. That lends itself to novel applications like creating informative data dictionaries.

Python TDD with ChatGPT

Being tested
Programming with ChatGPT using an iterative approach is difficult, as I have demonstrated previously. Maybe ChatGPT can benefit from Test-driven development (TDD). Could it aid LLMs as it does humans?

How to code Python with ChatGPT

Meditating robot
Can ChatGPT help you develop software in Python? Let us ask ChatGPT to write code to query AWS Athena to test if and how we can do it step-by-step.

One simple thing companies miss about their data

When you can't see the wood for the trees
There is one simple thing most companies miss about their data. It has been instrumental in my work as a data professional ever since.

Your data lies: Be a data-driven Luddite

Manual labour
I have worked with data for decades. There are the two key lessons I share with every customer, stakeholder and beginner in the field. Firstly, follow the data, not (only) your gut or experience. Secondly, do not trust the data; never. Why and what has this to do with Luddites?

All Blog Posts

See the full list of blog posts to read more.
Subscribe for updates, free datasets and analysis.