# 83 - Don't Let Vibe Coding Hinder Your Technical Growth

Published on

Article Image

A few days ago, a friend who had previously highly praised and fully embraced Vibe Coding posted a tweet expressing his recent frustration with AI-based programming:

“Recently, Vibe Coding hasn’t brought me any joy in writing code. On the contrary, I’ve felt frustrated by AI’s inability to get things right the first time. I’ve started reading official documentation and quality videos again, building knowledge from the ground up, and that sense of control over my projects has returned.”

I believe this sentiment resonates with many developers. Today’s large language models often demonstrate astonishing capabilities in areas we’re less familiar with, leaving a profound first impression that creates unrealistically high expectations. However, with deeper use, we gradually discover that AI’s limitations are far more significant than we initially imagined.

All along, I’ve limited AI’s role in my programming to specific areas: generating and refining documentation, optimizing code at the function level, and helping me understand and learn unfamiliar frameworks and technical details. Even with these constraints, the efficiency gains that AI brings remain impressive. More valuable still is that with AI’s assistance, I can feel my skills continuously improving, and this growth gives me confidence in mastering technology.

Thinking back to the social panic triggered when ChatGPT first appeared (fears of human replacement leading to massive unemployment), these predictions haven’t materialized. Instead, as people’s understanding of AI’s capabilities and limitations has become clearer, the focus has shifted to how AI can assist human work rather than completely replace it. AI, like all tools throughout human history, is essentially an extension of human capability. If you’re experiencing difficulties using it, perhaps you should reflect on whether your approach to viewing and using it is appropriate.

“Enjoy the vibe, but don’t get lost in it.” While Vibe Coding as an emerging programming paradigm certainly makes programming more efficient and enjoyable, it shouldn’t become an excuse for abandoning deep learning and understanding of technology. We should view AI’s capabilities rationally, improving efficiency while not forgetting the original intention of technical excellence. Perhaps in the future, AI may replace us in “typing” code, but we must retain the initiative in thinking and creativity.

Original

From 180 cm to 5′ 11″: A Complete Guide to Swift Measurement

In everyday life we constantly convert values between different units of measurement. For developers this seems easy—write a few formulas, sprinkle in a couple of switch statements and you’re done. But the moment you try to support dozens of units, seamless internationalisation, formatting, precision and rounding, the workload sky-rockets and the drudgery can make you question your life choices. The good news: starting with iOS 10 Apple added a comprehensive Measurement API to Foundation, taking all that “donkey work” off our hands. This article walks you through its usage and best practices.

【Tip】Controlling Access Within a Swift Package

Recent Recommendations

Ten Years Older, Voice Takes Over

The third Thursday of May marks Global Accessibility Awareness Day (GAAD). Despite Apple’s well-designed accessibility APIs, many developers still overlook this essential aspect of user experience because it “feels too complicated.” In this article, Edvinas Byla reflects on adding full VoiceOver support to his ten-year-old game Decrypto. Through SwiftUI’s accessibility APIs, he transitions from complete neglect to intentional, inclusive design. Byla emphasizes that most SwiftUI components come with solid default accessibility behavior, and a handful of modifiers cover 90% of what’s needed. This piece is not only a practical case study but also an honest call to design for everyone.

Adding Dependencies to Binary Swift Packages

SwiftPM’s .binaryTarget is a common distribution method for closed-source SDKs, but its inability to declare dependencies has long been a known limitation. Daniel Saidi shares a practical workaround: by including multiple binaryTarget entries in a single package and referencing them in the product’s targets, you can achieve a form of indirect dependency injection. While this approach hasn’t yet been proven for regular source packages, it’s a noteworthy breakthrough for managing dependencies in closed-source Swift modules.

SwiftUI View Model Ownership

When a SwiftUI view needs to own its ViewModel’s lifecycle but also initialize it based on a parameter, subtle bugs and state management issues often arise. In this article, Chris Eidhof analyzes common pitfalls and walks through several iterations toward a more robust solution. His key takeaway: “If you can’t initialize your @State immediately or make it private, you’re probably designing it wrong.”

Why We Keep Avoiding Tests in iOS—And What the Tools Should Do About It

If you don’t enjoy writing tests for iOS, this article might validate your feelings—it’s not laziness, it’s tooling. Karin Prater offers a sharp critique of Apple’s testing ecosystem, especially in the context of SwiftUI. While UI building has improved dramatically, testability still lags far behind. Prater outlines six essential pillars for better SwiftUI testing: speed, stability, feedback, interaction, precise assertions, and maintainability. A follow-up post will introduce a testable SwiftUI pattern worth watching.

Cocoa Basics

Despite SwiftUI’s maturity, some developers still prefer building native macOS apps with pure AppKit, entirely in code. That’s exactly what Luna Razzaghipour sets out to do in her Cocoa Basics series: no templates, no GUI editors—just code. The series begins with the smallest possible Cocoa app, manually building the .app bundle structure and compiling from the command line.

Reducing Noise by Searching LogUI’s Views

macOS app launches can generate tens of thousands of log entries in mere seconds, making analysis tedious and error-prone. In this article, Howard Oakley demonstrates how to use his tool LogUI to open multiple windows on the same log view, each searching for different keywords. This multi-angle approach helps break down and trace each stage of the app launch process, greatly improving clarity and efficiency.

Tools

xtool

xtool is a cross-platform alternative to Xcode that allows you to build and deploy iOS apps using SwiftPM on Linux, Windows, and macOS. It removes platform constraints while adding support for Apple Developer Services, device installation, and code signing—perfect for experimenting with cross-platform Swift development, CI deployment, and headless automation. A well-documented getting started tutorial is available.

Xogot

Godot is a popular open-source game engine, recently gaining official support for running on visionOS. Xogot takes things further by bringing the full Godot 4.4 experience natively to iPad. It supports in-app execution and debugging, includes 2D/3D scene editors, a native code editor, and full debugging tools. Optimized for iPadOS with support for touch, Apple Pencil, and multiwindow, Xogot’s entire UI is written in SwiftUI, offering a native feel for game developers on the go.

Weekly Swift & SwiftUI highlights!