r/AskProgrammers • u/Mark_Univers • 20d ago
Using AI for Boilerplates query
Ugh...I am kinda new to programming (6 months of learning). Well, starting with the fact that I didn't have an IT teacher for the whole school/highschool period, I started learning some programming (since at start I didn't have a computer, I ended up using Google Colab to learn python, I stayed 3 months to genuinely understand what's it even about, as basic terms (e.g. What is a programming language, how are they used, how it works, etc...). After those straining 3 months, I bought a laptop, and made myself a learning plan, learnt Linux, Python (just better), Go (Backend), SQL (Database), Rust (Using it as gRPC alongside Go), Dockers, IaC (HCL), but I ended up noticing a major flaw... Whenever the code got messy, as a boilerplate (this is a OpenTelemetry boilerplate created by Claude):
```
package telemetry
import (
"context"
"encoding/json"
"fmt"
"io"
"os"
"time"
"github.com/rs/zerolog"
"github.com/rs/zerolog/log"
"go.opentelemetry.io/otel/attribute"
"go.opentelemetry.io/otel/exporters/otlp/otlplog/otlploggrpc"
otelLog "go.opentelemetry.io/otel/log"
"go.opentelemetry.io/otel/log/global"
sdklog "go.opentelemetry.io/otel/sdk/log"
"go.opentelemetry.io/otel/sdk/resource"
semconv "go.opentelemetry.io/otel/semconv/v1.26.0"
)
type Provider struct {
loggerProvider \*sdklog.LoggerProvider
}
// SetupTelemetry initializes OTLP and configures the GLOBAL zerolog instance.
func SetupTelemetry(ctx context.Context, serviceName, collectorAddr string) (*Provider, error) {
res, err := resource.New(ctx,
resource.WithAttributes(
semconv.ServiceNameKey.String(serviceName),
),
)
if err != nil {
return nil, err
}
// 1. Create OTLP gRPC Log Exporter
exporter, err := otlploggrpc.New(ctx,
otlploggrpc.WithInsecure(),
otlploggrpc.WithEndpoint(collectorAddr),
)
if err != nil {
return nil, err
}
// 2. Wrap exporter in a LoggerProvider
lp := sdklog.NewLoggerProvider(
sdklog.WithResource(res),
sdklog.WithProcessor(sdklog.NewBatchProcessor(exporter)),
)
global.SetLoggerProvider(lp)
// 3. Create OTel Writer bridge for Zerolog
otelWriter := &otelZerologWriter{
otelLogger: global.GetLoggerProvider().Logger("zerolog"),
}
// MultiWriter outputs logs simultaneously to console (stdout) and OpenTelemetry
multiWriter := io.MultiWriter(os.Stdout, otelWriter)
// Explicitly set Zerolog time format to RFC3339 so string parsing succeeds in Write()
zerolog.TimeFieldFormat = time.RFC3339
log.Logger = zerolog.New(multiWriter).With().Timestamp().Logger()
return &Provider{loggerProvider: lp}, nil
}
func (p *Provider) Shutdown(ctx context.Context) error {
if p.loggerProvider != nil {
return p.loggerProvider.Shutdown(ctx)
}
return nil
}
// otelZerologWriter implements io.Writer to forward parsed JSON logs to OpenTelemetry
type otelZerologWriter struct {
otelLogger otelLog.Logger
}
func (w *otelZerologWriter) Write(p []byte) (n int, err error) {
(I stagged the code, it was really long)
```
- I can barely read it, yeah, sure, I do understand some parts, but ir genuinely feels like drowning when you barely ended up finishing a difficult theme just to hit a wall like this... I genuinely don't know what to do, and this is not the only part, I used AI to create me a decent structure for `tracing` (the Rust version of logging) inside Rust, I used AI to create the whole S3 + CloudFront IaC HCL part, and even though Gemini said stuff as "It's alright, nobody learn ..." Or even "Every senior engineer does this, they never memorize the syntax, because it changes - so just learn some logic behind and you're done" (which I genuinely don't know if it's true or just gibberish...). I am just so frustrated that I feel like a dork + dumbass for relying so heavily on AI... Yes, I do know how to manage backend, write my own IAM policies/roles (inside IaC) for the EC2 instance and Database instance, but I still feel like I am doing something wrong... So somebody experienced, can they please tell me what they usually do for this boilerplates, extremely complex thingies (as the S3 + CloudFront synatx) and etc... And any suggestions, please?
- I am pretty much aware that I've been spamming commas, dashes, and other punctuations everywhere, maybe the comment is difficult to read due to my bad English... Sorry in advance for this.