Innlegg
5 måter å øke kodingsproduktiviteten din med generativ AI
31. januar 2025 • 8 min lesing

Som en Software Craftsman med mange års erfaring innen feltet, har jeg vært vitne til virkningen av generativ AI på programvareutvikling siden introduksjonen av ChatGPT i 2023. Gjennom praktisk anvendelse har jeg identifisert fem kraftige måter å utnytte denne teknologien for å forbedre produktiviteten.
1. Forbedret kodesøk
Den hyppigste måten jeg bruker generativ AI på er å søke etter teknisk informasjon. Tradisjonelle søkemotorer krever presis terminologi, mens generativ AI forstår konsepter og kontekst. For eksempel, når jeg søker etter prinsippet for optimalisering av metodeparametere, spør jeg:
Prompt
What's the name of the programming concept where you should only pass parameters that are actually used by the method? Passing parameters to a method that aren't used by the method creates unneeded dependencies.
Generativ AI forstår konseptet jeg beskriver (Law of Demeter) og gir det riktige svaret, noe som eliminerer behovet for flere søk.
2. Effektiv kodegenerering
Generativ AI utmerker seg i å automatisere repetitive kodingsoppgaver. Nylig trengte jeg å konvertere en stor JSON-fil til database-insert-setninger. I stedet for å skrive kjedelig konverteringskode, ga jeg JSON-dataene til AI-en med klare instruksjoner for å generere MS SQL Server insert-setninger. Denne tilnærmingen sparte timer med manuell kodetid og reduserte muligheten for feil.
Prompt:
Use the JSON data provided below and generate insert statements for MS SQL Server to be inserted into the dbo.Users table.
[
{
"Username": "musiclover87",
"Lastname": "Smith",
"Firstname": "Alice",
"Birthdate": "1987-06-12",
"Password": "password123",
"FavoriteIceCream": "Chocolate Chip Cookie Dough",
"FavoriteSuperhero": "Spider-Man"
},
{
"Username": "bookworm92",
"Lastname": "Johnson",
"Firstname": "Bob",
"Birthdate": "1992-03-21",
"Password": "securePassword",
"FavoriteIceCream": "Mint Chocolate Chip",
"FavoriteSuperhero": "Batman"
},
{
"Username": "gamergirl01",
"Lastname": "Williams",
"Firstname": "Carol",
"Birthdate": "2001-11-05",
"Password": "gamer4life",
"FavoriteIceCream": "Strawberry",
"FavoriteSuperhero": "Wonder Woman"
},
{
"Username": "techieguy95",
"Lastname": "Brown",
"Firstname": "David",
"Birthdate": "1995-08-18",
"Password": "techmaster",
"FavoriteIceCream": "Vanilla Bean",
"FavoriteSuperhero": "Iron Man"
},
{
"Username": "foodiequeen89",
"Lastname": "Davis",
"Firstname": "Emily",
"Birthdate": "1989-04-29",
"Password": "delicious123",
"FavoriteIceCream": "Salted Caramel",
"FavoriteSuperhero": "Captain Marvel"
},
{
"Username": "traveler76",
"Lastname": "Miller",
"Firstname": "Frank",
"Birthdate": "1976-12-02",
"Password": "adventuretime",
"FavoriteIceCream": "Coffee",
"FavoriteSuperhero": "Thor"
},
{
"Username": "fitnessfanatic98",
"Lastname": "Wilson",
"Firstname": "Grace",
"Birthdate": "1998-09-15",
"Password": "strongandfit",
"FavoriteIceCream": "Mango Sorbet",
"FavoriteSuperhero": "Black Widow"
},
{
"Username": "photographylover85",
"Lastname": "Moore",
"Firstname": "Henry",
"Birthdate": "1985-05-23",
"Password": "pictureperfect",
"FavoriteIceCream": "Pistachio",
"FavoriteSuperhero": "Superman"
},
{
"Username": "musicjunkie93",
"Lastname": "Taylor",
"Firstname": "Isabella",
"Birthdate": "1993-02-08",
"Password": "musicislife",
"FavoriteIceCream": "Rocky Road",
"FavoriteSuperhero": "Black Panther"
},
{
"Username": "sportsfanatic88",
"Lastname": "Anderson",
"Firstname": "Jack",
"Birthdate": "1988-10-30",
"Password": "goteamgo",
"FavoriteIceCream": "Cookies and Cream",
"FavoriteSuperhero": "Captain America"
}
]
Output:
-- Inserting records into dbo.Users table
INSERT INTO dbo.Users (Username, Lastname, Firstname, Birthdate, Password, FavoriteIceCream, FavoriteSuperhero)
VALUES
('musiclover87', 'Smith', 'Alice', '1987-06-12', 'password123', 'Chocolate Chip Cookie Dough', 'Spider-Man'),
('bookworm92', 'Johnson', 'Bob', '1992-03-21', 'securePassword', 'Mint Chocolate Chip', 'Batman'),
('gamergirl01', 'Williams', 'Carol', '2001-11-05', 'gamer4life', 'Strawberry', 'Wonder Woman'),
('techieguy95', 'Brown', 'David', '1995-08-18', 'techmaster', 'Vanilla Bean', 'Iron Man'),
('foodiequeen89', 'Davis', 'Emily', '1989-04-29', 'delicious123', 'Salted Caramel', 'Captain Marvel'),
('traveler76', 'Miller', 'Frank', '1976-12-02', 'adventuretime', 'Coffee', 'Thor'),
('fitnessfanatic98', 'Wilson', 'Grace', '1998-09-15', 'strongandfit', 'Mango Sorbet', 'Black Widow'),
('photographylover85', 'Moore', 'Henry', '1985-05-23', 'pictureperfect', 'Pistachio', 'Superman'),
('musicjunkie93', 'Taylor', 'Isabella', '1993-02-08', 'musicislife', 'Rocky Road', 'Black Panther'),
('sportsfanatic88', 'Anderson', 'Jack', '1988-10-30', 'goteamgo', 'Cookies and Cream', 'Captain America');
3. Sømløs kodeoversettelse
Kodeoversettelse er et annet område hvor generativ AI viser seg uvurderlig. Under et nylig prosjekt for å konvertere en C#-applikasjon til Python, brukte vi AI på to avgjørende måter:
-
Direkte funksjonskonvertering fra Python til C#
-
Kompleks ORM-oversettelse fra Entity Framework til SQLAlchemy
Denne kapasiteten akselererte migrasjonsprosessen vår betydelig og sikret konsistens på tvers av oversettelser.
Konvertering av Python til C#:
Prompt:
Convert the following Python code to C#.
def reverse_string(text):
"""
Reverses a given string.
Args: text: The string to be reversed.
Returns: The reversed string.
"""
return text[::-1]
Output:
/// <summary>
/// Reverses a given string.
/// </summary>
/// <param name="text">The string to be reversed.</param>
/// <returns>The reversed string.</returns>
public static string ReverseString(string text)
{
return new string(text.Reverse().ToArray());
}
4. Automatisert kodedokumentasjon
Dokumentasjon er essensielt, men ofte kjedelig. Generativ AI strømlinjeformer denne prosessen på to måter:
-
Kodesammendrag: Analysering av eksisterende kode og levering av klare, konsise sammendrag
-
Generering av dokumentasjonshoder: Opprettelse av omfattende metodedokumentasjon som opprettholder kodekvalitetsstandarder
For eksempel, når jeg dokumenterer sorteringsalgoritmer eller kompleks forretningslogikk, kan AI generere klar, nøyaktig dokumentasjon som følger teamstandarder og beste praksis.
Prompt:
Generate a doc header for the below function adding the header and printing the complete function with the doc header.
def bubble_sort(list_):
n = len(list_)
for i in range(n):
# Flag to optimize, if no swaps occur, the list is sorted
swapped = False
# Last i elements are already in place
for j in range(0, n-i-1):
# Swap if the element found is greater than the next element
if list_[j] > list_[j+1]:
list_[j], list_[j+1] = list_[j+1], list_[j]
swapped = True
# If no two elements were swapped in inner loop, the list is sorted
if not swapped:
break
return list_
Output:
def bubble_sort(list_):
"""
Sorts a given list using the Bubble Sort algorithm.
Args:
list_: The list of elements to be sorted. Elements must be comparable.
Returns:
A new list containing all elements from the original list in ascending order.
Example:
>>> bubble_sort([64, 34, 25, 12, 22, 11, 90])
[11, 12, 22, 25, 34, 64, 90]
"""
n = len(list_)
for i in range(n):
# Flag to optimize, if no swaps occur, the list is sorted
swapped = False
# Last i elements are already in place
for j in range(0, n-i-1):
# Swap if the element found is greater than the next element
if list_[j] > list_[j+1]:
list_[j], list_[j+1] = list_[j+1], list_[j]
swapped = True
# If no two elements were swapped in inner loop, the list is sorted
if not swapped:
break
return list_
5. Applikasjonsrammeverk
Kanskje den mest imponerende anvendelsen av generativ AI er dens evne til å generere innledende applikasjonsstrukturer. Gitt et klart skjema eller spesifikasjon, kan AI opprette:
-
Databaseopprettingsskript
-
ORM-mappinger
-
Grunnleggende API-endepunkter
-
Innledende UI-implementeringer
Denne kapasiteten reduserer betydelig tiden brukt på boilerplate-kode og sikrer et konsistent grunnlag for videre utvikling.
Prompt:
You are a Software Engineer working at a large corporation. Using the following database schema, generate the SQL scripts necessary to create these tables in Postgres. Then, generate the SQL Alchemy mapping files to use with FastAPI. Lastly, generate a simple web UI using FastAPI to list the orders.
User
- UserId
- FirstName
- LastName
- Address
- Address2
- City
- State
- ZipCode
- Username
- Password
- IsActive
Client
- ClientId
- Name
- Address
- Address2
- City
- State
- ZipCode
- IsActive
Order
- OrderId
- OrderDate
- InvoiceNumber
- DueDate
- ClientId
- UserId
OrderDetail
- OrderDetailId
- OrderId
- Description
- Rate
- Quantity
- LineTotal
Ledger
- TransactionId
- Debit
- Credit
- OrderId
- TransactionDate
Output:
...
Jeg sparer deg for utdataene, men den genererte en hel applikasjon ved hjelp av FastAPI.
...
La oss spørre hva vi kan gjøre for å forbedre det innledende designet.
Prompt 2:
That's a great start. What can we do to improve the application design?
Output:
Implementer logging for bedre feilsøking og feilhåndtering.
logging.py (Valgfritt)
import logging
logger = logging.getLogger(__name__)
logging.basicConfig(level=logging.INFO)
def log_error(error):
logger.error(f"An error occurred: {error}")
Prompt 3:
Can you implement your suggestion to use Error Handling and generate the code for me?
Output:
Du kan også definere globale unntakshåndterere i main.py
-filen din hvis du vil håndtere spesifikke unntak globalt.
main.py
from fastapi import FastAPI, Request
from fastapi.responses import JSONResponse
import app.routers.order_router as order_router
from .exceptions import OrderNotFoundException, InvalidInvoiceNumberException
app = FastAPI()
# Include the router
app.include_router(order_router.router)
@app.exception_handler(OrderNotFoundException)
async def order_not_found_exception_handler(request: Request, exc: OrderNotFoundException):
return JSONResponse(
status_code=exc.status_code,
content={"detail": exc.detail},
)
@app.exception_handler(InvalidInvoiceNumberException)
async def invalid_invoice_number_exception_handler(request: Request, exc: InvalidInvoiceNumberException):
return JSONResponse(
status_code=exc.status_code,
content={"detail": exc.detail},
)
Beste praksis og hensyn
Selv om generativ AI er kraftig, er det viktig å:
- Gjennomgå og validere generert kode
- Opprettholde konsistens med eksisterende kodebaser
- Vurdere sikkerhetsimplikasjoner
- Teste generert kode grundig
- Bruke AI som en assistent i stedet for en erstatning for ingeniørvurdering
Konklusjon
Generativ AI har blitt et uunnværlig verktøy i moderne programvareutvikling. Ved å utnytte disse fem tilnærmingene - forbedret søking, kodegenerering, oversettelse, dokumentasjon og applikasjonsrammeverk - kan utviklere betydelig øke produktiviteten sin samtidig som de opprettholder kodekvalitet.
Nøkkelen er å forstå disse verktøyenes kapasiteter og begrensninger og strategisk bruke dem for å forbedre i stedet for å erstatte menneskelig ekspertise. Etter hvert som disse teknologiene utvikler seg, vil integreringen deres i utviklingsarbeidsflyter bli stadig mer verdifull.
Forfatter: Chuck Conway spesialiserer seg på programvareutvikling og Generativ AI. Koble til ham på sosiale medier: X (@chuckconway) eller besøk ham på YouTube.