By Christian Prokopp on 2023-04-04
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.
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.
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.
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!
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.
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.
Christian Prokopp, PhD, is an experienced data and AI advisor and founder who has worked with Cloud Computing, Data and AI for decades, from hands-on engineering in startups to senior executive positions in global corporations. You can contact him at christian@bolddata.biz for inquiries.
2024-03-14
Tax Shrink is a new online tool that helps owner-operators of Limited companies in the UK calculate and visualise the ideal salary-to-dividend rati...
2023-09-27
Over four months, I created a working retrieval-augmented generation (RAG) product prototype for a sizeable potential customer using a Large-Langua...
2023-02-14
Discover the power of the Delta Lake transaction log - ensuring Data reliability and consistency.
2022-12-04
OpenAI's ChatGPT has made the news recently as a next-generation conversational agent. It has a surprising breadth which made me wonder, could Open...
2022-12-02
Finally. AWS re:Invent 2022 brought the answer to both Databricks and Athena's worst limitations. Athena Spark promises to bring Delta Lake scale-o...
2022-06-29
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, fol...