Table of Contents

Open all
Close all
Preface
17
Local Execution of Language Models
17
Coding with AI Support for Advanced Users
18
AI Makes Mistakes and Hallucinates
19
The Three Stages of Using AI
19
There’s No Getting around AI Tools
20
Part I Coding with AI Support
23
1 Introduction
25
1.1 Coding via Chat
25
1.1.1 Password Generator
25
1.1.2 Python: Searching and Replacing Dates
26
1.1.3 SQL: Analysis of a Table
28
1.1.4 PHP: Bearer Token Authentication
30
1.1.5 Porting a Bash Script for PowerShell
31
1.1.6 Paid ChatGPT Offers
33
1.1.7 Anthropic Claude
33
1.2 The Art of Prompting
34
1.2.1 Prompt Frameworks
37
1.2.2 A Question of Context
37
1.2.3 Custom GPTs
39
1.2.4 Comparing Custom GPTs, Fine-Tuning, and Retrieval-Augmented Generation
40
1.3 Code Wizards
41
1.3.1 Installing GitHub Copilot
43
1.3.2 First Steps with Visual Studio Code and GitHub Copilot
43
1.3.3 Switching between Code Suggestions
44
1.3.4 Tips and Tricks
45
1.3.5 Chat Mode with Additional Keywords
46
1.3.6 Chat Examples
48
1.3.7 Alternatives to the Chat Sidebar
49
1.3.8 Other Functions
50
1.3.9 Security and Data Protection
51
1.3.10 Trouble in Remote Mode
51
1.4 Chat or Wizard?
52
1.5 Basic Principles of Large Language Models
53
1.5.1 From the Human Brain to Neural Networks
53
1.5.2 Machine Learning through Backpropagation
54
1.5.3 Large Language Models
55
1.5.4 The Transformer Model
57
1.5.5 Generative Pretrained Transformer (GPT)
58
1.5.6 Training: From Training Material to Language Model
59
1.5.7 Large Language Model Application: From Prompt to Response
60
1.5.8 The Limits of Linguistic “Intelligence”
62
1.5.9 The Size of the Context Window
63
1.5.10 The Fill-in-the-Middle Approach
65
2 Pair Programming
67
2.1 Structuring Code into Functions
68
2.1.1 Defining Functions Yourself
68
2.1.2 Defining Functions and Parameters
69
2.1.3 Detailed Questions about Functions and Parameters
71
2.1.4 Code Optimization
73
2.1.5 Code Reuse
74
2.1.6 Splitting Code across Multiple Files
75
2.2 Example: IBAN Validation
76
2.2.1 Start
77
2.2.2 Checking the IBAN Length
78
2.2.3 Troubleshooting
78
2.2.4 Test
79
2.2.5 Removing Spaces from the IBAN
80
2.2.6 Checksum Test
81
2.2.7 Trouble with the Test Data
82
2.2.8 Code Optimization
83
2.3 Object-Oriented Programming
83
2.3.1 Example: User Account Class
84
2.3.2 Output of the Object
86
2.3.3 JSON Export and Constructor
86
2.3.4 Example: Bank Account
87
2.3.5 Example: Sorting Photos Based on EXIF Data
89
2.3.6 Example: Dealing with Singletons
90
2.4 Example: Quiz
91
2.4.1 Class Design
91
2.4.2 Implementing the Question Class
93
2.4.3 A Pool of Questions for Testing
94
2.4.4 Methods for the Question Class
94
2.4.5 UML Diagram
95
2.4.6 AI Bot or Code Wizard?
97
2.5 Example: Solving Sudoku
97
2.5.1 Class Setup
97
2.5.2 Detaching Individual Fields in Rows
99
2.5.3 Solving Individual Fields in Columns and in Blocks
100
2.5.4 Test Code and Issues with the Test Data
101
2.5.5 Brainstorming
101
2.5.6 Storing Solution Candidates per Field
102
2.5.7 Filling in Fields Where Only One Solution Number Is Possible
103
2.5.8 Personal Conclusion
104
2.5.9 Alternative Procedure
105
2.5.10 Prompting Correctly
106
3 Debugging
107
3.1 Web Applications
108
3.1.1 CSS Fixes
108
3.1.2 iCal Download in the Browser
110
3.1.3 Backend Frontend without a Proxy Server
111
3.1.4 JavaScript Fetch with the Wrong Content Type
113
3.1.5 JamGPT
114
3.2 App Development
116
3.2.1 Flutter and Null Safety Values
116
3.2.2 Layouts in Flutter
117
3.3 Developing on Raspberry Pi
119
3.3.1 Step-by-Step Debugging on a Raspberry Pi
120
3.3.2 Help for Creating Log Entries
121
3.4 Visual Studio and Visual Studio Code
122
3.4.1 Missing Python Modules in VS Code
123
3.4.2 Visual Studio Exception Debugging
123
3.5 Conclusion
125
4 Refactoring
127
4.1 Introduction to Refactoring
127
4.1.1 Objectives of Refactoring
128
4.2 Refactoring Using AI Tools
128
4.2.1 Recognizing the Need for Refactoring
128
4.3 Best Practices
141
4.3.1 Only the Internal Structure May Be Changed
141
4.3.2 Small-Step Approach
141
4.3.3 Test-Driven Refactoring
142
4.3.4 Defining Clear Goals
142
4.4 Conclusion
142
5 Testing Software
145
5.1 Generating Test Data
146
5.2 AI-Supported Test Automation
149
5.2.1 Creating AI-Supported Unit Tests
150
5.3 Test-Driven Development with AI
155
5.3.1 Implementing the First Test
155
5.3.2 The Second Test
157
5.3.3 The Third Test
158
5.3.4 Generating Test Data
160
5.4 Using Dependencies
161
5.5 Optimizing Tests
167
5.5.1 Optimizing Test Code
167
5.5.2 Writing Missing Tests
171
5.6 End-to-End Tests
174
5.6.1 Generating an End-to-End Test
175
5.6.2 Creating a Page Object
176
5.7 Conclusion
178
6 Documenting Software
179
6.1 Challenges with Documentation
180
6.2 Inline Documentation
181
6.2.1 Sample Inline Documentation
181
6.3 Function and Class Documentation
184
6.3.1 Benefits and Drawbacks of Function and Class Documentation
184
6.3.2 Sample Function and Class Documentation
185
6.4 API Documentation
187
6.4.1 Sample API Documentation
188
6.5 Outdated Documentation
191
6.6 Conclusion
194
7 Databases
195
7.1 Database Design
195
7.1.1 Example: Database for an Online Store
196
7.1.2 Database Management System Selection
200
7.1.3 Example: Cloud Shopping List
201
7.1.4 Changing the Database Schema
203
7.2 SQL Commands
205
7.2.1 Date Calculation
205
7.2.2 Troubleshooting
206
7.2.3 WordPress Image Search
207
7.2.4 Complex Query with Subquery or Self Join
209
7.2.5 Formatting an SQL Command
211
7.3 Administration
213
7.3.1 PostgreSQL: User Administration
213
7.3.2 SQL Server: Automated Backup
214
7.3.3 Determining the Schema of a Database
216
7.3.4 MariaDB Tuning
218
7.4 Client Programming
219
8 Scripting and System Administration
221
8.1 Scripting
221
8.1.1 Bash: Loop Over a Text File
222
8.1.2 PowerShell: Sorting Photos
222
8.1.3 Python: SQLite Application
224
8.1.4 Bash Troubleshooting
226
8.1.5 Python: Recursive Search for Files
227
8.1.6 Other Prompt Examples
227
8.2 Example: Converting a Python Script to PHP Code
228
8.2.1 Conclusion
229
8.3 Regular Expressions
230
8.3.1 Searching and Replacing Dates
231
8.3.2 File Search Using grep
232
8.4 System Administration
234
8.4.1 SSH Authentication by Key
234
8.4.2 Docker Setup
235
8.4.3 Proxy Server
236
8.4.4 Fixing Network Issues in a Virtual Machine with a Web Server
238
8.4.5 Linux Server Setup
239
8.4.6 Additional Prompts
240
8.5 Example: “wget” Script Plus “tmpfs” Configuration
240
8.5.1 Developing a “wget” Script
241
8.5.2 Linux Server Configuration with “tmpfs”
243
8.5.3 Conclusion
244
8.6 Calling GitHub Copilot and ChatGPT in the Terminal
245
8.6.1 GitHub Command-Line Interface (“gh”)
245
8.6.2 Shell-GPT (“sgpt”)
246
8.6.3 Using Language Models in the Terminal (“llm”)
247
Part II Local Language Models and Advanced AI Tools
251
9 Executing Language Models Locally
253
9.1 Spoiled for Choice of Large Language Model
254
9.1.1 Which Models Solve Which Problems?
254
9.1.2 Hardware Requirements
256
9.1.3 Alternatives to the Local Execution of Models
257
9.2 GPT4All
259
9.2.1 Installation and Use
259
9.2.2 Chat with Your Files
261
9.2.3 Conclusion
262
9.3 Ollama
262
9.3.1 Benefits of Ollama
262
9.3.2 General Structure of Ollama
263
9.3.3 Local Installation and Execution
264
9.3.4 Running Ollama in a Docker Container
266
9.4 Open WebUI for Ollama
267
9.4.1 Installing Open WebUI
268
9.4.2 Using Custom Documents in Open WebUI
270
9.4.3 Custom Workspace Models
271
9.5 Continue
275
9.5.1 Installation
275
9.5.2 Usage
276
9.6 Ollama API
277
9.6.1 Ollama REST API
278
9.6.2 Libraries for Accessing the Ollama API
280
9.7 Tabby
280
9.7.1 Installing the Tabby Server and the Plug-In
281
9.7.2 Usage
281
9.8 Conclusion
282
10 Automated Code Processing
285
10.1 OpenAI API
286
10.1.1 Setting Up an API Account
286
10.1.2 Hello, World!
287
10.1.3 Formulating the Prompt
289
10.1.4 Chat System
291
10.1.5 Processing the Response
293
10.1.6 Uploading and Downloading Files
294
10.1.7 Uploads for Special Applications
296
10.1.8 Playground
296
10.2 Ollama API
297
10.2.1 Manipulating Code
298
10.3 Groq API
299
10.4 Example: Automated Commenting of Code
301
10.4.1 Real-Life Experience
303
10.4.2 Extracting Code from the Response
304
10.4.3 Genuine Errors
305
10.4.4 Trouble with Large Code Files
306
10.4.5 Translating Existing Comments
307
10.4.6 Conclusion
308
10.5 Example: From Python 2 to Python 3
308
10.5.1 Real-Life Experience
309
11 Level 3 Tools: OpenHands and Aider
313
11.1 OpenHands
314
11.1.1 Installation
316
11.1.2 The Web Interface
317
11.2 Using OpenHands
320
11.2.1 Not Too Much at Once!
322
11.2.2 Conclusion
323
11.3 Aider
323
11.3.1 Installation
324
11.3.2 Start
325
11.3.3 Aider Commands
325
11.3.4 Multiline Prompts
327
11.3.5 Coding Rules and Conventions
327
11.3.6 Aider in the Web Browser
327
11.4 Using Aider
328
11.4.1 Example 1: Sorting Photos
328
11.4.2 Example 2: Web Scraping
332
11.4.3 Example 3: Implementing Changes in a Large Project
334
11.4.4 More Prompting Examples and Video Tips
335
12 Retrieval-Augmented Generation and Text-to-SQL
337
12.1 RAG Quick Start
338
12.2 The Viel-Falter (Many Butterflies) Project
341
12.3 Loading Documents
343
12.3.1 SimpleDirectoryReader and SimpleWebPageReader
344
12.4 Creating an Index
345
12.4.1 The Embedding Model
346
12.5 Vector Store Databases
348
12.6 RAG Queries
351
12.6.1 Source Code
352
12.6.2 Conclusion
355
12.7 Text-to-SQL
355
12.7.1 Database Export from MongoDB to SQLite
356
12.7.2 Text-to-SQL with LlamaIndex
360
12.7.3 Sample Queries
361
12.7.4 Conclusion
366
13 Risks and Outlook
367
13.1 Issues and Limitations of Using AI Tools
367
13.1.1 Old, Cumbersome Code
368
13.1.2 The Question of Maintainability
368
13.1.3 Privacy
368
13.1.4 A New Kind of Dependency
369
13.1.5 Learning to Program in the Age of AI
370
13.2 Exemplary AI Failure
370
13.2.1 Outdated Information
370
13.2.2 Hallucinations
372
13.2.3 Logic Errors
373
13.2.4 Security Issues
375
13.2.5 Less Than Ideal Solutions
379
13.3 Ethical Issues
381
13.3.1 The Origin of AI Knowledge
381
13.3.2 Jobless IT Experts
383
13.3.3 Unlimited Energy Consumption
383
13.4 Conclusions and Outlook
384
13.4.1 Better Results with More Prior Knowledge and Experience
384
13.4.2 Cloud or Local AI?
385
13.4.3 Quality Enhancement through Training with AI-Generated Code
386
13.4.4 The Coming Few Years
386
13.4.5 Conclusion
387
The Authors
389
Index
391