"Vibe Coding !== Low Quality Work: a guide to responsible AI-assisted dev" ✍️ My latest free article: https://lnkd.in/gjMdjMWV The allure of "vibe coding" – using AI to "move faster and break even more things" – is strong. AI-assisted development is undeniably transformative, lowering barriers and boosting productivity. But speed without quality is a dangerous trap. Relying uncritically on AI-generated code can lead to brittle "house of cards" systems, amplify tech debt exponentially, and introduce subtle security flaws. Volume ≠ Quality. A helpful mental model I discuss (excellently illustrated by Forrest Brazeal) is treating AI like a "very eager junior developer." It needs guidance, review, and refinement from experienced hands. You wouldn't let a junior ship unreviewed code, right? So how do we harness AI's power responsibly? I've outlined a field guide with practical rules: ✅ Always review: Treat AI output like a PR from a new hire. ✅ Refactor & test: Inject engineering wisdom – clean up, handle edge cases, test thoroughly. ✅ Maintain standards: Ensure AI code meets your team's style, architecture, and quality bar. ✅ Human-led design: Use AI for implementation grunt work, not fundamental architecture decisions. The goal isn't to reject vibe coding, but to integrate it with discipline. Let's use AI to augment our craft, pairing machine speed with human judgment. #softwareengineering #programming #ai
Mastering Coding Challenges
Explore top LinkedIn content from expert professionals.
-
-
In the last 15 years, I have interviewed 800+ Software Engineers across Google, Paytm, Amazon & various startups. Here are the most actionable tips I can give you on how to approach solving coding problems in Interviews (My DMs are always flooded with this particular question) 1. Use a Heap for K Elements - When finding the top K largest or smallest elements, heaps are your best tool. - They efficiently handle priority-based problems with O(log K) operations. - Example: Find the 3 largest numbers in an array. 2. Binary Search or Two Pointers for Sorted Inputs - Sorted arrays often point to Binary Search or Two Pointer techniques. - These methods drastically reduce time complexity to O(log n) or O(n). - Example: Find two numbers in a sorted array that add up to a target. 3. Backtracking - Use Backtracking to explore all combinations or permutations. - They’re great for generating subsets or solving puzzles. - Example: Generate all possible subsets of a given set. 4. BFS or DFS for Trees and Graphs - Trees and graphs are often solved using BFS for shortest paths or DFS for traversals. - BFS is best for level-order traversal, while DFS is useful for exploring paths. - Example: Find the shortest path in a graph. 5. Convert Recursion to Iteration with a Stack - Recursive algorithms can be converted to iterative ones using a stack. - This approach provides more control over memory and avoids stack overflow. - Example: Iterative in-order traversal of a binary tree. 6. Optimize Arrays with HashMaps or Sorting - Replace nested loops with HashMaps for O(n) solutions or sorting for O(n log n). - HashMaps are perfect for lookups, while sorting simplifies comparisons. - Example: Find duplicates in an array. 7. Use Dynamic Programming for Optimization Problems - DP breaks problems into smaller overlapping sub-problems for optimization. - It's often used for maximization, minimization, or counting paths. - Example: Solve the 0/1 knapsack problem. 8. HashMap or Trie for Common Substrings - Use HashMaps or Tries for substring searches and prefix matching. - They efficiently handle string patterns and reduce redundant checks. - Example: Find the longest common prefix among multiple strings. 9. Trie for String Search and Manipulation - Tries store strings in a tree-like structure, enabling fast lookups. - They’re ideal for autocomplete or spell-check features. - Example: Implement an autocomplete system. 10. Fast and Slow Pointers for Linked Lists - Use two pointers moving at different speeds to detect cycles or find midpoints. - This approach avoids extra memory usage and works in O(n) time. - Example: Detect if a linked list has a loop. 💡 Save this for your next interview prep!
-
After taking 75 Software Engineer interviews at Google in < 7 months, I’ve seen a range of mistakes all of us make in coding interviews. Here’s a compiled list to help you (and me) avoid these pitfalls in our future interviews! 1️⃣ Not Clarifying Requirements > Many candidates jump straight into coding. Often without fully understanding the problem. This can waste time and lead to errors. Tip: Always ask clarifying questions. To ensure you get the requirements. Confirm edge cases and input constraints early on. 2️⃣ Overcomplicating Solutions > In the heat of the moment, it is easy to overthink a problem. And this complicates the solution, both for you and your interviewer. Tip: Start with a brute-force approach (just explain it), then iterate towards optimization (code it up). Easy-to-understand solutions get bonus points. 3️⃣ Under-Communication > Interviews are not just about coding. They’re also about conveying your thought process. Silence takes away the only help you have during the interview—your interviewer. Tip: Think out loud! Explain your reasoning and approach as you code. This helps the interviewers understand you and even guide you if needed. 4️⃣ Ignoring Edge Cases > Many candidates create a working solution. But fail to consider edge cases. This can lead to catastrophic failures. Tip: After arriving at a solution, always discuss potential edge cases. Explain how your code handles them. This shows your thoroughness. 5️⃣ Neglecting to Optimize > Even if your solution works, failing to consider optimization can cost you points. Tip: After solving the problem, re-read your solution and discuss ways to improve time and space complexity. No micro-optimizations. Interviewers appreciate candidates who think about efficiency in big-oh notation. 6️⃣ Skipping Dry Runs > 80%+ candidates skip the dry run of their code, leading to overlooked mistakes. Tip: Walk through your code with sample inputs. This helps catch errors early and makes you look proactive. 7️⃣ Getting Flustered > Interviews are stressful. And it is easy to panic if you hit a roadblock. Tip: If you’re stuck, ask for a minute or 2 to gather your thoughts. Ask for hints if necessary—interviewers appreciate candidates who are willing to seek help. Those were my 2 cents on how to tackle coding interviews. But believe it or not, the best way to realize your interview mistakes would be to start taking interviews (even mock ones). After conducting so many interviews at Google, I realized how I often fell into the same traps as everyone. Like going completely silent or forgetting to do a dry run for the interviewer. Taking interviews altered my perspective, and now I advise everyone preparing for interviews to take a couple of them first. Total game changer! #codingInterviews #jobPrep #softwareEngineering #Google #interviewTips
-
My biggest takeaways from Lazar Jovanovic (a full-time vibe-coder at Lovable): 1. Vibe coding is now a full-time professional career. Lazar Jovanovic gets paid to build internal tools and public-facing products using AI. His work ranges from Shopify integrations and merch stores to complex internal dashboards tracking feature adoption. Companies across the S&P 500 are actively hiring people with these skills. 2. Not having a technical background can be an advantage when vibe coding. People without engineering experience don’t know what’s “supposedly impossible,” so they try things that technical people might dismiss. Lazar built Chrome extensions and desktop apps with Lovable because he didn’t know the technical reasons why those shouldn’t work. The willingness to try anything until proven wrong unlocks capabilities others overlook. 3. Coding is no longer the bottleneck—clarity is. Lazar spends 80% of his time planning and chatting with AI agents and only 20% building. The ceiling on AI output isn’t model intelligence; it’s what the model is told and shown before it acts. Your job is to provide clear context and instructions, not to write code. 4. AI tools have a limited context window that you must manage deliberately. Think of it like a genie granting you three wishes. Every request consumes tokens for reading, thinking, and executing. If you dump vague requests, the AI spends the most tokens figuring out what you want and has little left for quality output. 5. Start five parallel builds to find clarity your thinking faster. Instead of overthinking one design, brain dump into the first project, get more specific in the second, add visual references in the third, attach actual code snippets in the fourth, and compare all five. This costs more up front but saves hundreds of credits and days of iteration later. 6. When you get stuck, follow this four-step debugging sequence. First, let the tool try to fix it. Second, add console logs to track what’s happening and paste the output back to the agent. Third, bring in an external tool like Codex for deeper diagnosis. Fourth, revert a few steps and try a cleaner prompt. 7. Use rules files to make your findings permanent. After solving a problem, ask the AI how to prompt it better next time, and then add that guidance to your rules.md file. 8. Design and taste are becoming increasingly valuable in the AI era. When everyone can produce good-enough output instantly, the people who stand out are those who understand emotional design decisions—fonts, spacing, micro-interactions—that AI can’t yet replicate well. Invest time in studying elite design work. 9. Build in public to land vibe-coding jobs. Lazar got hired at Lovable because he was already shipping projects, teaching on YouTube, and sharing knowledge on LinkedIn. Hires at Lovable submitted Lovable apps instead of resumes. The fastest path to a professional vibe-coding role is doing the job before anyone pays you for it.
-
Your most talented software engineers left years ago, and they told their equally talented friends not to apply to your company. It hurts, but this is the impact of not creating a learning culture within your engineering organisation. As a leader, learning and growth needs to be your top priority. Ask your engineers: "what do they like about working here?". If "learning" is not mentioned, you have work to do! Some leaders believe that special days of learning are the way to do it - Hack days, learning days or “work on open source” day. I disagree. Those special days are fine, but it’s not enough. Learning needs to happen every day. Special days carved out for learning are also usually harder to do if you’re a middle or lower level manager. Don’t worry though, there are plenty of easy ways to incorporate learning into the daily job. Here are some methods I’ve used over the years that seemed to have worked well: 1. When you're kicking off something new, or you're thinking about refactoring something, don't just jump into building it. Ask your engineers to take a couple of days and have a go at a new stack, or a new way of doing something. Come back a few days later and compare solutions as a group. 2. Don't pre-assign tasks according to the strengths of a developer's current skill set. That just reinforces and deepens current skills, whilst other developers who've never worked in that stack or codebase will never have the opportunity to learn it. Instead, do the opposite! Assign tasks to the developer with the weakest skills in that space, or, at a minimum, randomize it. Continue to do that and the whole team will uplift together. 3. Create time in the plan to learn, incorporate it into estimations. If you’re doing point 2, you’re going to have the allow time for it because initially the team will slow down. If you're stepping into an unknown area as a team, it's a great learning opportunity! Make the most of it and carve out the right amount of time so that the team has the space to learn. 4. When you need to carve out dedicated time, tie it to a business objective. In point 3 above, those new unknowns are usually from a request to achieve a business outcome. Intentionally tie them together so that the learning achieves the business value. Of course, this means that relationship has to already exist. Your job is to make sure they stay connected and the value is known to stakeholders. 5. “Every day should be a learning day” say it to your team, often. Ask them to hold each other and you to account. Are you living up to that statement? Action things that get in the way of this being reality. 6. Hire growing learners and prioritise it over things like “experience with our stack”. You don’t actually need experience in your stack if you’re a sharp learner. Someone who has mastered the art of learning can be productive in something new in a week. I’m sure I’ve missed plenty of other methods. Share what you’ve seen work in the comments.
-
Top 5 Must-Know DSA Patterns👇🏻👇🏻 DSA problems often follow recurring patterns. Mastering these patterns can make problem-solving more efficient and help you ace coding interviews. Here’s a quick breakdown: 1. Sliding Window • Use Case: Solves problems involving contiguous subarrays or substrings. • Key Idea: Slide a window over the data to dynamically track subsets. • Examples: • Maximum sum of subarray of size k. • Longest substring without repeating characters. 2. Two Pointers • Use Case: Optimizes array problems involving pairs or triplets of elements. • Key Idea: Use two pointers to traverse from opposite ends or incrementally. • Examples: • Pair with target sum in a sorted array. • Trapping rainwater problem. 3. Binary Search • Use Case: Efficiently solves problems with sorted data or requiring optimization. • Key Idea: Repeatedly halve the search space to narrow down the solution. • Examples: • Find an element in a sorted array. • Search in a rotated sorted array. 4. Dynamic Programming (DP) • Use Case: Handles problems with overlapping subproblems and optimal substructure. • Key Idea: Build solutions iteratively using a table to store intermediate results. • Examples: • 0/1 Knapsack problem. • Longest common subsequence. 5. Backtracking • Use Case: Solves problems involving all possible combinations, subsets, or arrangements. • Key Idea: Incrementally build solutions and backtrack when a condition is not met. • Examples: • N-Queens problem. • Sudoku solver. Why These Patterns? By focusing on patterns, you can identify the right approach quickly, saving time and improving efficiency in problem-solving.
-
I’ve been working on a massive prompt that extracts structured data from unstructured text. It's effectively a program, developed over the course of weeks, in plain English. Each instruction is precise. The output format is strict. The logic flows. It should Just Work™. And the model? Ignores large swaths of it. Not randomly, but consistently and stubbornly. This isn't a "program," it's a probability engine with auto-complete. This is because LLMs don’t "read" like we do, or execute prompts like a program does. They run everything through the "attention mechanism," which mathematically weighs which tokens matter in relation to others. Technically speaking: Each token is transformed into a query, key, and value vector. The model calculates dot products between the query vector and all key vectors to assign weights. Basically: "How relevant is this other token to what I’m doing right now?" Then it averages the values using those weights and moves on. No state. No memory. Just a rolling calculation over a sliding window of opaquely-chosen context. It's kind of tragic, honestly. You build this beautifully precise setup, but because your detailed instructions are buried in the middle of a long prompt -- or phrased too much like background noise -- they get low scores. The model literally pays less attention to them. We thought we were vibe coding, but the real vibe coder was the LLM all along! So how to fix it? Don’t just write accurate instructions. Write ATTENTION-WORTHY ones. - 🔁 Repeat key patterns. Repetition increases token relevance, especially when you're relying on specific phrasing to guide the model's output. - 🔝 Push constraints to the top. Instructions buried deep in the prompt get lower attention scores. Front-load critical rules so they have a better chance of sticking. - 🗂️ Use structure to force salience. Consistent headers, delimiters, and formatting cues help key sections stand out. Markdown, line breaks, and even ALL CAPS (sparingly) can help direct the model's focus to what actually matters. - ✂️ Cut irrelevant context. The less junk in the prompt, the more likely your real instructions are to be noticed and followed. You're not teaching a model. You're gaming a scoring function.
-
🤔 Why does it feel like I’m stuck after watching hours of coding tutorials? Here's the hard truth: Watching someone code is like watching someone swim. You'll never learn to float by sitting on the beach. 🧠 You don’t become a better programmer by watching. You become one by doing. → If you’re learning web development, are you building websites from scratch? → If you’re learning data science, are you playing with datasets? → If you’re learning software engineering, are you coding small tools? → If you’re learning the fundamentals, are you coding basic challenges? Not sure where to start? Here are some great platforms to find challenges for any programming path: 👩🏾💻LeetCode - For algorithm and coding challenges. https://leetcode.com/ 👩🏾💻 HackerRank - Solve problems and build domain skills. https://lnkd.in/es9Qb3Gc 👩🏾💻 freeCodeCamp - Build projects while learning. https://lnkd.in/euXPmkfx 👩🏾💻Frontend Mentor - Real-world web development challenges https://lnkd.in/eFH9qud6 👩🏾💻 Kaggle - Explore data science competitions. https://www.kaggle.com/ 👩🏾💻 Exercism - Great for language-specific practice https://exercism.org/ 👩🏾💻 Codewars - Fun, gamified learning. https://www.codewars.com/ 👩🏾💻 Edabit - Short, fun coding challenges. https://edabit.com/ Remember: Active learning is more effective than passive learning. A single hour of writing code teaches more than 10 hours of watching tutorials. Tackle challenges, no matter how small. 𝗖𝗼𝗱𝗲. 𝗠𝗮𝗸𝗲 𝗺𝗶𝘀𝘁𝗮𝗸𝗲𝘀. 𝗙𝗶𝘅 𝘁𝗵𝗲𝗺. 𝗥𝗲𝗽𝗲𝗮𝘁. What small project will you start coding today? 💻 What other coding platforms will you recommend? #Programming #Tech #Growth #LearnWithSofiat
-
One of the most underappreciated challenges in building a great AI product is streaming. That's the feature where the AI's response appears on your screen as it's generated, like someone is typing in real-time. It seems simple, but getting it to work reliably is a nightmare. It's the source of 90% of my struggles building my app. There are virtually no tutorials or good examples online. Even my AI coding assistants are terrible at it—their first instinct is to just turn streaming off to "fix" the problem. You can't have a user staring at a loading spinner for 20 seconds; it kills the conversational feel that makes chat interfaces compelling. It’s a small detail that has a massive impact on user experience, and a perfect example of the hidden complexities in building seemingly simple AI tools. #AI #UX #ProductDevelopment #Coding #SoftwareEngineering
-
🧠 𝐄𝐯𝐞𝐧 𝐚𝐟𝐭𝐞𝐫 4 𝐲𝐞𝐚𝐫𝐬 𝐚𝐭 𝐒𝐃𝐄, 𝐃𝐲𝐧𝐚𝐦𝐢𝐜 𝐏𝐫𝐨𝐠𝐫𝐚𝐦𝐦𝐢𝐧𝐠 𝐬𝐭𝐢𝐥𝐥 𝐦𝐚𝐤𝐞𝐬 𝐦𝐞 𝐬𝐰𝐞𝐚𝐭… But here’s what I learned: It’s OKAY to struggle with certain topics, even as a fresh engineer. When I started my journey at Microsoft, I thought I’d have everything figured out by now. Reality check - some concepts still challenge me, and that’s perfectly normal. The truth about DSA learning: • Everyone has different strengths and weak spots • What clicks for one person might take another person months • Your background doesn’t define your potential • Small town, weak math, average English? So what! Logic and persistence matter more. Here’s my simple roadmap for mastering DSA: Phase 1: Know Yourself • Take honest stock of what confuses you • Don’t compare your day 1 with someone else’s year 3 • Write down specific topics that make you uncomfortable Phase 2: Build Strong Basics • Arrays and strings first (they’re everywhere!) • Master one pattern at a time • Practice explaining solutions in simple words Phase 3: Tackle the Tough Ones • Dynamic Programming (yes, the scary one!) • Break big problems into tiny pieces • Draw it out, don’t just code it out Phase 4: Consistent Practice • 30 minutes daily beats 5 hours once a week • Focus on understanding, not just solving • Celebrate small wins Remember: Every expert was once a beginner who refused to give up. Your journey is unique. Your timeline is yours. Your success story is waiting to be written. What’s that one DSA topic that still challenges you? Drop it in the comments - let’s learn together! P.S. - If you want help creating a personalized learning path based on your specific strengths and areas for improvement, I’m here to guide you through it: https://lnkd.in/gz44hDxm #SoftwareEngineering #DSA #Microsoft #LearningJourney #TechCareer #GrowthMindset
Explore categories
- Hospitality & Tourism
- Productivity
- Finance
- Soft Skills & Emotional Intelligence
- Education
- Technology
- Leadership
- Ecommerce
- User Experience
- Recruitment & HR
- Customer Experience
- Real Estate
- Marketing
- Sales
- Retail & Merchandising
- Science
- Supply Chain Management
- Future Of Work
- Consulting
- Writing
- Economics
- Artificial Intelligence
- Employee Experience
- Healthcare
- Workplace Trends
- Fundraising
- Networking
- Corporate Social Responsibility
- Negotiation
- Communication
- Engineering
- Career
- Business Strategy
- Change Management
- Organizational Culture
- Design
- Innovation
- Event Planning
- Training & Development