All Products Pack subscription\u003C/a> (access to all IDEs), companies can get it for free.\u003C/li>\u003Cli class=\"content-block-list-item\">The price: allow JetBrains to collect work data — code snippets, terminal commands, editing history, and AI queries.\u003C/li>\u003Cli class=\"content-block-list-item\">This data will be used to train JetBrains' own language models.\u003C/li>\u003Cli class=\"content-block-list-item\">The data collection also applies to academic and open-source licenses (with an option to opt out in the settings).\u003C/li>\u003Cli class=\"content-block-list-item\">JetBrains promises that data will be stored in compliance with GDPR, with no third-party access.\u003C/li>\u003C/ul>\u003C/div>\u003Cdiv class=\"block-wrapper--default\">\u003Chr class=\"block-content content-block-delimiter\">\u003C/div>\u003Cdiv class=\"block-wrapper--default\">\u003Cp class=\"block-content\">In fact, JetBrains is giving away licenses for free today to have an advantage in the race for AI tools tomorrow.\u003C/p>\u003C/div>\u003Cdiv class=\"block-wrapper--default\">\u003Cp class=\"block-content\">\u003Ca href=\"/tag/jetbrains\" target=\"_blank\" rel=\"noopener noreferrer ugc\">#jetbrains\u003C/a> \u003Ca href=\"/tag/ai\" target=\"_blank\" rel=\"noopener noreferrer ugc\">#ai\u003C/a> \u003Ca href=\"/tag/news\" target=\"_blank\" rel=\"noopener noreferrer ugc\">#news\u003C/a>\u003C/p>\u003C/div>\u003C/div>",{"time":672,"blocks":673,"version":515},1759499366501,[674,678,682,686,711,714,718],{"id":675,"type":24,"data":676},"820d6c8a-b",{"text":677},"Major players are increasingly understanding that the gold of the 21st century is not oil or subscriptions, but data. And JetBrains demonstrates this particularly clearly. The company is willing to forgo quick profits and give away licenses for free — just to gain access to the unique 'fuel' for its AI models.",{"id":679,"type":24,"data":680},"b42cc62b-2",{"text":681},"Most LLMs are trained on public datasets that are far from real-world work scenarios. This leads to 'hallucinations' and errors on complex projects. JetBrains wants to fix this \u003Ca href=\"https://blog.jetbrains.com/blog/2025/09/30/detailed-data-sharing-for-better-ai/\">and collect real signals\u003C/a> — code editing history, terminal commands, AI queries, and responses.",{"id":683,"type":24,"data":684},"44062b4f-0",{"text":685},"What they came up with:",{"id":687,"type":56,"data":688},"c4b6e2e0-b",{"style":58,"meta":689,"items":690},{},[691,695,699,703,707],{"content":692,"meta":693,"items":694},"Instead of almost $1000 for an annual corporate \u003Ca href=\"https://www.jetbrains.com/lp/data-collection-program-for-organizations/\">All Products Pack subscription\u003C/a> (access to all IDEs), companies can get it for free.",{},[],{"content":696,"meta":697,"items":698},"The price: allow JetBrains to collect work data — code snippets, terminal commands, editing history, and AI queries.",{},[],{"content":700,"meta":701,"items":702},"This data will be used to train JetBrains' own language models.",{},[],{"content":704,"meta":705,"items":706},"The data collection also applies to academic and open-source licenses (with an option to opt out in the settings).",{},[],{"content":708,"meta":709,"items":710},"JetBrains promises that data will be stored in compliance with GDPR, with no third-party access.",{},[],{"id":712,"type":38,"data":713},"7Da10I0eXQ",{},{"id":715,"type":24,"data":716},"361e6a1e-6",{"text":717},"In fact, JetBrains is giving away licenses for free today to have an advantage in the race for AI tools tomorrow.",{"id":719,"type":24,"data":720},"PeOguh4vf-",{"text":721},"#jetbrains #ai #news",{"authorId":414,"name":415,"avatar":416,"username":417},"NEWS",[725],{"emojiId":726,"count":197,"reactedByUser":21},7,{"comments":527,"favorites":197,"views":728,"hits":429},61,"2025-10-03T13:47:37.404","2025-10-03T14:55:38.953",{"postId":732,"title":733,"slug":734,"preview":735,"html":736,"content":737,"author":1107,"authorUsername":1111,"topic":418,"status":419,"reactions":1112,"counters":1114,"createdAt":1117,"updatedAt":1118,"publishedPostId":433,"favorite":21},"262f7eb7-c71b-4871-a033-c71a5153342f","Java OOP: A Practical Guide to Object-Oriented Programming","370784-java-oop-practical-guide-object-oriented-programming","\u003Cdiv class=\"block-wrapper--default\">\u003Cp class=\"block-content\">This guide breaks down the core principles of Object-Oriented Programming (OOP), especially for those new to automation and software development. Understanding OOP is crucial for writing structured, maintainable, and reusable code, and it's a common topic in technical interviews.\u003C/p>\u003C/div>\u003Cdiv class=\"block-wrapper--media\">\u003Cfigure class=\"block-content content-block-image\">\u003Cimg src=\"https://media.suddo.io/file/2f3af38f-ffaf-465d-b6b8-b927250a64dc/53d06bdd-27e8-4d16-acb0-6de033c33f03/1184.webp\" alt=\"Class and Object: The blueprint and the car.\" class=\"rounded-xl medium-zoom-image\" loading=\"lazy\">\u003C/figure>\u003Cspan class=\"caption-text text-sm mt-3\">Class and Object: The blueprint and the car.\u003C/span>\u003C/div>","\u003Cdiv class=\"content-wrapper break-words\">\u003Cdiv class=\"block-wrapper--default\">\u003Cp class=\"block-content\">This guide breaks down the core principles of Object-Oriented Programming (OOP), especially for those new to automation and software development. Understanding OOP is crucial for writing structured, maintainable, and reusable code, and it's a common topic in technical interviews.\u003C/p>\u003C/div>\u003Cdiv class=\"block-wrapper--default\">\u003Ch3 class=\"block-content\">1. Classes and Objects: The Blueprint and the Product\u003C/h3>\u003C/div>\u003Cdiv class=\"block-wrapper--default\">\u003Cp class=\"block-content\">A \u003Cb>class\u003C/b> is a blueprint—a template that defines the properties and behaviors an object will have. An \u003Cb>object\u003C/b> is a specific instance created from that blueprint.\u003C/p>\u003C/div>\u003Cfigure class=\"block-wrapper block-wrapper--media\">\u003Cdiv class=\"block-wrapper__content\">\u003Cblockquote class=\"block-quote block-quote--text-small\">\u003Cdiv class=\"block-quote__line\">\u003C/div>\u003Cdiv class=\"block-quote__text\">A class is the description; an object is the concrete instance with its own state.\u003C/div>\u003C/blockquote>\u003C/div>\u003C/figure>\u003Cdiv class=\"block-wrapper--media\">\u003Cfigure class=\"block-content content-block-image\">\u003Cimg src=\"https://media.suddo.io/file/2f3af38f-ffaf-465d-b6b8-b927250a64dc/53d06bdd-27e8-4d16-acb0-6de033c33f03/1184.webp\" alt=\"Class and Object: The blueprint and the car.\" class=\"rounded-xl medium-zoom-image\" loading=\"lazy\">\u003C/figure>\u003Cspan class=\"caption-text text-sm mt-3\">Class and Object: The blueprint and the car.\u003C/span>\u003C/div>\u003Cdiv class=\"block-wrapper--default\">\u003Cp class=\"block-content\">\u003Cb>Real-world example:\u003C/b> Imagine you have a blueprint for a \"Car\" that specifies it must have four wheels, a steering wheel, an engine, and the ability to drive and honk. This blueprint is the \u003Ci>class\u003C/i>. A specific red Toyota in your driveway with the license plate \u003Ccode>A123BC\u003C/code> is an \u003Ci>object\u003C/i> created from that blueprint.\u003C/p>\u003C/div>\u003Cdiv class=\"block-wrapper--default\">\u003Cp class=\"block-content\">The process of creating an object from a class is called \u003Cb>instantiation\u003C/b>. When we write \u003Ccode>new Car(\"Toyota\", \"Red\", \"A123BC\")\u003C/code>, we are instantiating the \u003Ccode>Car\u003C/code> class to create a specific instance.\u003C/p>\u003C/div>\u003Cdiv class=\"block-wrapper--media block-content content-block-code\">\u003Cpre>\u003Ccode class=\"language-autohotkey hljs\">// The class - a blueprint for a car\nclass Car {\n // State (fields) - what the car has\n private String brand;\n private String color;\n private String licensePlate;\n private boolean isEngineOn;\n private int currentSpeed;\n\n // Constructor - a special method for creating objects\n public Car(String brand, String color, String licensePlate) {\n this.brand = brand;\n this.color = color;\n this.licensePlate = licensePlate;\n this.isEngineOn = false;\n this.currentSpeed = 0;\n }\n\n // Behavior (methods) - what the car can do\n public void startEngine() {\n this.isEngineOn = true;\n System.out.println(brand + 's engine has started!);\n }\n\n public void stopEngine() {\n this.isEngineOn = false;\n this.currentSpeed = 0;\n System.out.println(brand + 's engine has been turned off.);\n }\n\n public void accelerate(int speed) {\n if (isEngineOn) {\n this.currentSpeed += speed;\n System.out.println(brand + is accelerating to + currentSpeed + km/h.);\n } else {\n System.out.println(You need to start the engine first!);\n }\n }\n\n public void honk() {\n System.out.println(brand + honks: Beep-beep!);\n }\n\n // Getters - to check the state\n public String getBrand() { return brand; }\n public String getColor() { return color; }\n public int getCurrentSpeed() { return currentSpeed; }\n public boolean isEngineRunning() { return isEngineOn; }\n}\n\n// Using the class in a program\npublic class CarDemo {\n public static void main(String[] args) {\n // Create OBJECTS from the Car BLUEPRINT\n Car toyota = new Car(Toyota, Red, A123BC);\n Car bmw = new Car(BMW, Black, B777XX);\n\n // Invoke the behavior of the objects\n toyota.startEngine();\n toyota.accelerate(50);\n toyota.honk();\n\n System.out.println(Toyota's current speed: + toyota.getCurrentSpeed() + km/h);\n\n // The BMW's engine is off\n System.out.println(Is the BMW's engine running? + bmw.isEngineRunning());\n bmw.accelerate(30); // Won't work - the engine is off\n }\n}\u003C/code>\u003C/pre>\u003C/div>\u003Cdiv class=\"block-wrapper--default\">\u003Cp class=\"block-content\">In this code:\u003C/p>\u003C/div>\u003Cdiv class=\"block-wrapper--default\">\u003Cul class=\"block-content content-block-list-unordered\">\u003Cli class=\"content-block-list-item\">\u003Ccode>Car\u003C/code> is the class (blueprint).\u003C/li>\u003Cli class=\"content-block-list-item\">\u003Ccode>toyota\u003C/code> and \u003Ccode>bmw\u003C/code> are the objects (specific cars).\u003C/li>\u003Cli class=\"content-block-list-item\">Each object has its own state: different colors, license plates, and speeds.\u003C/li>\u003Cli class=\"content-block-list-item\">The behavior (methods) is the same for all objects, but the outcome depends on their individual state.\u003C/li>\u003C/ul>\u003C/div>\u003Cdiv class=\"block-wrapper--default\">\u003Ch3 class=\"block-content\">2. Encapsulation: Controlling Access to State\u003C/h3>\u003C/div>\u003Cdiv class=\"block-wrapper--default\">\u003Cp class=\"block-content\">Encapsulation is the principle of bundling an object's data (fields) and the methods that operate on that data into a single unit. It protects the internal state from outside interference by exposing only a controlled public interface.\u003C/p>\u003C/div>\u003Cfigure class=\"block-wrapper block-wrapper--media\">\u003Cdiv class=\"block-wrapper__content\">\u003Cblockquote class=\"block-quote block-quote--text-small\">\u003Cdiv class=\"block-quote__line\">\u003C/div>\u003Cdiv class=\"block-quote__text\">Encapsulation means hiding the implementation details.\u003C/div>\u003C/blockquote>\u003C/div>\u003C/figure>\u003Cdiv class=\"block-wrapper--media\">\u003Cfigure class=\"block-content content-block-image\">\u003Cimg src=\"https://media.suddo.io/file/2f3af38f-ffaf-465d-b6b8-b927250a64dc/6ab3e410-5f70-4696-8600-6237ca532b55/1184.webp\" alt=\"Encapsulation: An ATM machine.\" class=\"rounded-xl medium-zoom-image\" loading=\"lazy\">\u003C/figure>\u003Cspan class=\"caption-text text-sm mt-3\">Encapsulation: An ATM machine.\u003C/span>\u003C/div>\u003Cdiv class=\"block-wrapper--default\">\u003Cp class=\"block-content\">\u003Cb>Real-world example:\u003C/b> An ATM. It has internal state, like the amount of cash it holds and an operations log. You can't just open it up and take money. You interact with it through a public interface: inserting your card, entering a PIN, and selecting an operation. The ATM validates your request and only dispenses cash if everything is correct.\u003C/p>\u003C/div>\u003Cdiv class=\"block-wrapper--default\">\u003Cp class=\"block-content\">\u003Cb>Implementation in Java:\u003C/b>\u003C/p>\u003C/div>\u003Cdiv class=\"block-wrapper--default\">\u003Cul class=\"block-content content-block-list-unordered\">\u003Cli class=\"content-block-list-item\">\u003Cb>Access Modifiers:\u003C/b> Use \u003Ccode>private\u003C/code>, \u003Ccode>protected\u003C/code>, and \u003Ccode>public\u003C/code> to control the visibility of fields and methods.\u003C/li>\u003Cli class=\"content-block-list-item\">\u003Cb>Getters:\u003C/b> Public methods for safely reading private fields.\u003C/li>\u003Cli class=\"content-block-list-item\">\u003Cb>Setters:\u003C/b> Public methods for safely modifying private fields, often with validation.\u003C/li>\u003C/ul>\u003C/div>\u003Cdiv class=\"block-wrapper--media block-content content-block-code\">\u003Cpre>\u003Ccode class=\"language-autohotkey hljs\">class BankAccount {\n // private means these fields cannot be accessed directly from outside\n private String ownerName;\n private double balance;\n private String accountNumber;\n\n public BankAccount(String ownerName, double initialBalance, String accountNumber) {\n this.ownerName = ownerName;\n this.balance = initialBalance;\n this.accountNumber = accountNumber;\n }\n\n // Public methods provide our interface for interaction\n public void deposit(double amount) {\n if (amount > 0) {\n balance += amount;\n System.out.println(Deposited: + amount + . New balance: + balance);\n } else {\n System.out.println(Deposit amount must be positive.);\n }\n }\n\n public boolean withdraw(double amount) {\n if (amount > 0 && amount <= balance) {\n balance -= amount;\n System.out.println(Withdrew: + amount + . Remaining balance: + balance);\n return true;\n } else {\n System.out.println(Insufficient funds or invalid amount.);\n return false;\n }\n }\n\n // Getters for read-only access to information\n public double getBalance() {\n return balance;\n }\n\n public String getOwnerName() {\n return ownerName;\n }\n}\n\n// Usage\npublic class BankDemo {\n public static void main(String[] args) {\n BankAccount account = new BankAccount(John Doe, 1000.0, 123456789);\n\n // This is not allowed! It will cause a compilation error:\n // account.balance = 1000000; // ERROR! The field is private\n\n // This is the correct way, using controlled methods:\n account.deposit(500.0);\n account.withdraw(200.0);\n account.withdraw(2000.0); // Fails - insufficient funds\n\n System.out.println(Current balance: + account.getBalance());\n }\n}\u003C/code>\u003C/pre>\u003C/div>\u003Cdiv class=\"block-wrapper--default\">\u003Cp class=\"block-content\">\u003Cb>Why is this important?\u003C/b> Encapsulation protects data integrity. We can guarantee that the account balance never becomes negative because all modifications must go through our validation logic.\u003C/p>\u003C/div>\u003Cdiv class=\"block-wrapper--default\">\u003Ch3 class=\"block-content\">3. Inheritance: Building on Existing Code\u003C/h3>\u003C/div>\u003Cdiv class=\"block-wrapper--default\">\u003Cp class=\"block-content\">Inheritance allows a new class (subclass or child) to be based on an existing class (superclass or parent), inheriting its properties and behaviors while adding its own.\u003C/p>\u003C/div>\u003Cfigure class=\"block-wrapper block-wrapper--media\">\u003Cdiv class=\"block-wrapper__content\">\u003Cblockquote class=\"block-quote block-quote--text-small\">\u003Cdiv class=\"block-quote__line\">\u003C/div>\u003Cdiv class=\"block-quote__text\">Inheritance establishes an \"is-a\" relationship, promoting code reuse.\u003C/div>\u003C/blockquote>\u003C/div>\u003C/figure>\u003Cdiv class=\"block-wrapper--media\">\u003Cfigure class=\"block-content content-block-image\">\u003Cimg src=\"https://media.suddo.io/file/2f3af38f-ffaf-465d-b6b8-b927250a64dc/993be61d-d53c-466d-9575-f5c5e7ab6527/1184.webp\" alt=\"Image\" class=\"rounded-xl medium-zoom-image\" loading=\"lazy\">\u003C/figure>\u003C/div>\u003Cdiv class=\"block-wrapper--default\">\u003Cp class=\"block-content\">\u003Cb>Real-world example:\u003C/b> Consider vehicles. There's a general concept of a \"Vehicle\" that can move and stop. A \"Car\" \u003Ci>is a\u003C/i> vehicle, but it adds the ability to honk. A \"Bicycle\" \u003Ci>is a\u003C/i> vehicle, but it adds the ability to ring a bell. An \"Airplane\" \u003Ci>is a\u003C/i> vehicle, but it adds the ability to fly.\u003C/p>\u003C/div>\u003Cdiv class=\"block-wrapper--default\">\u003Cp class=\"block-content\">\u003Cb>Implementation in Java:\u003C/b>\u003C/p>\u003C/div>\u003Cdiv class=\"block-wrapper--default\">\u003Cul class=\"block-content content-block-list-unordered\">\u003Cli class=\"content-block-list-item\">The \u003Ccode>extends\u003C/code> keyword creates the inheritance hierarchy.\u003C/li>\u003Cli class=\"content-block-list-item\">The \u003Ccode>super\u003C/code> keyword is used to call constructors and methods of the parent class.\u003C/li>\u003Cli class=\"content-block-list-item\">Child classes automatically gain the functionality of the parent.\u003C/li>\u003C/ul>\u003C/div>\u003Cdiv class=\"block-wrapper--media block-content content-block-code\">\u003Cpre>\u003Ccode class=\"language-autohotkey hljs\">// Base class - Vehicle\nclass Vehicle {\n private String name;\n\n public Vehicle(String name) {\n this.name = name;\n }\n\n public void move() {\n System.out.println(name + starts moving.);\n }\n\n public void stop() {\n System.out.println(name + has stopped.);\n }\n}\n\n// Car class inherits from Vehicle\nclass Car extends Vehicle {\n public Car() {\n super(Car); // Call the parent's constructor\n }\n\n // New method specific to cars\n public void honk() {\n System.out.println(Beep-beep! The car is honking.);\n }\n}\n\n// Bicycle class inherits from Vehicle\nclass Bicycle extends Vehicle {\n public Bicycle() {\n super(Bicycle);\n }\n\n // New method specific to bicycles\n public void ringBell() {\n System.out.println(Ring-ring! The bicycle bell rings.);\n }\n}\n\n// Airplane class inherits from Vehicle\nclass Airplane extends Vehicle {\n public Airplane() {\n super(Airplane);\n }\n\n // New method specific to airplanes\n public void takeOff() {\n System.out.println(The airplane is taking off.);\n }\n}\n\n// Usage\npublic class InheritanceDemo {\n public static void main(String[] args) {\n Car car = new Car();\n Bicycle bike = new Bicycle();\n Airplane plane = new Airplane();\n\n // All objects have inherited methods\n System.out.println(=== Inherited Methods ===);\n car.move(); // Inherited from Vehicle\n bike.move(); // Inherited from Vehicle\n plane.move(); // Inherited from Vehicle\n\n System.out.println(\\n=== Unique Methods ===);\n // Each class also has its unique methods\n car.honk();\n bike.ringBell();\n plane.takeOff();\n }\n}\u003C/code>\u003C/pre>\u003C/div>\u003Cdiv class=\"block-wrapper--default\">\u003Cp class=\"block-content\">This example shows how inheritance allows for:\u003C/p>\u003C/div>\u003Cdiv class=\"block-wrapper--default\">\u003Col class=\"block-content content-block-list-ordered\">\u003Cli class=\"content-block-list-item\">\u003Cb>Method Inheritance:\u003C/b> All child classes can use the \u003Ccode>move()\u003C/code> and \u003Ccode>stop()\u003C/code> methods from the parent.\u003C/li>\u003Cli class=\"content-block-list-item\">\u003Cb>Functionality Extension:\u003C/b> Each child class adds its own unique behavior (\u003Ccode>honk()\u003C/code>, \u003Ccode>ringBell()\u003C/code>, \u003Ccode>takeOff()\u003C/code>).\u003C/li>\u003Cli class=\"content-block-list-item\">\u003Cb>Code Reusability:\u003C/b> We wrote the common logic for moving and stopping only once in the \u003Ccode>Vehicle\u003C/code> class.\u003C/li>\u003C/ol>\u003C/div>\u003Cdiv class=\"block-wrapper--default\">\u003Ch3 class=\"block-content\">4. Polymorphism: One Action, Many Forms\u003C/h3>\u003C/div>\u003Cdiv class=\"block-wrapper--default\">\u003Cp class=\"block-content\">Polymorphism allows objects of different classes to respond to the same method call in different ways. It enables you to write code that works with objects of a superclass type, but executes the specific behavior of the subclass object.\u003C/p>\u003C/div>\u003Cfigure class=\"block-wrapper block-wrapper--media\">\u003Cdiv class=\"block-wrapper__content\">\u003Cblockquote class=\"block-quote block-quote--text-small\">\u003Cdiv class=\"block-quote__line\">\u003C/div>\u003Cdiv class=\"block-quote__text\">Polymorphism means one interface, multiple implementations.\u003C/div>\u003C/blockquote>\u003C/div>\u003C/figure>\u003Cdiv class=\"block-wrapper--media\">\u003Cfigure class=\"block-content content-block-image\">\u003Cimg src=\"https://media.suddo.io/file/2f3af38f-ffaf-465d-b6b8-b927250a64dc/9288aba6-fc1d-47bd-a3d7-d6b46485d30e/1184.webp\" alt=\"Image\" class=\"rounded-xl medium-zoom-image\" loading=\"lazy\">\u003C/figure>\u003C/div>\u003Cdiv class=\"block-wrapper--default\">\u003Cp class=\"block-content\">\u003Cb>Real-world example:\u003C/b> A remote control with a \"Power On\" button. When you press it:\u003C/p>\u003C/div>\u003Cdiv class=\"block-wrapper--default\">\u003Cul class=\"block-content content-block-list-unordered\">\u003Cli class=\"content-block-list-item\">For a TV, it turns on the screen.\u003C/li>\u003Cli class=\"content-block-list-item\">For an air conditioner, it starts the fan.\u003C/li>\u003Cli class=\"content-block-list-item\">For a coffee machine, it starts brewing coffee.\u003C/li>\u003C/ul>\u003C/div>\u003Cdiv class=\"block-wrapper--default\">\u003Cp class=\"block-content\">The same command, \"Power On,\" results in different actions depending on the device.\u003C/p>\u003C/div>\u003Cdiv class=\"block-wrapper--default\">\u003Cp class=\"block-content\">\u003Cb>Implementation in Java:\u003C/b> Achieved through \u003Cb>method overriding\u003C/b> (redefining a parent method in a child class) and \u003Cb>interfaces\u003C/b> (defining a contract for multiple classes to implement).\u003C/p>\u003C/div>\u003Cdiv class=\"block-wrapper--media block-content content-block-code\">\u003Cpre>\u003Ccode class=\"language-autohotkey hljs\">// Base class for devices\nclass Device {\n // This method will behave differently for each device\n public void turnOn() {\n System.out.println(Turning on a generic device.);\n }\n}\n\n// Specific devices\nclass TV extends Device {\n @Override // Explicitly state we are overriding the parent's method\n public void turnOn() {\n System.out.println(TV: Screen lights up, displaying content.);\n }\n}\n\nclass AirConditioner extends Device {\n @Override\n public void turnOn() {\n System.out.println(AC: Fan starts, cool air begins to flow.);\n }\n}\n\nclass CoffeeMachine extends Device {\n @Override\n public void turnOn() {\n System.out.println(Coffee Machine: Starts brewing, hissing sound is heard.);\n }\n}\n\n// Demonstrating polymorphism\npublic class PolymorphismDemo {\n public static void main(String[] args) {\n Device tv = new TV();\n Device ac = new AirConditioner();\n Device coffee = new CoffeeMachine();\n\n Device[] devices = {tv, ac, coffee};\n\n System.out.println(Pressing the 'Power On' button for all devices:);\n\n // POLYMORPHISM IN ACTION: one method call, different behaviors!\n for (Device device : devices) {\n device.turnOn(); // Each device turns on in its own way\n }\n }\n}\u003C/code>\u003C/pre>\u003C/div>\u003Cdiv class=\"block-wrapper--default\">\u003Ch3 class=\"block-content\">5. Abstraction: Hiding Complexity\u003C/h3>\u003C/div>\u003Cdiv class=\"block-wrapper--default\">\u003Cp class=\"block-content\">Abstraction focuses on hiding complex implementation details and showing only the essential features of an object. It allows us to work with concepts rather than getting bogged down in specifics.\u003C/p>\u003C/div>\u003Cfigure class=\"block-wrapper block-wrapper--media\">\u003Cdiv class=\"block-wrapper__content\">\u003Cblockquote class=\"block-quote block-quote--text-small\">\u003Cdiv class=\"block-quote__line\">\u003C/div>\u003Cdiv class=\"block-quote__text\">Abstraction is about focusing on what an object does, not how it does it.\u003C/div>\u003C/blockquote>\u003C/div>\u003C/figure>\u003Cdiv class=\"block-wrapper--media\">\u003Cfigure class=\"block-content content-block-image\">\u003Cimg src=\"https://media.suddo.io/file/2f3af38f-ffaf-465d-b6b8-b927250a64dc/994406c4-249f-47dc-8159-e1e8f18f7a3f/1184.webp\" alt=\"Abstraction: A driver behind the wheel.\" class=\"rounded-xl medium-zoom-image\" loading=\"lazy\">\u003C/figure>\u003Cspan class=\"caption-text text-sm mt-3\">Abstraction: A driver behind the wheel.\u003C/span>\u003C/div>\u003Cdiv class=\"block-wrapper--default\">\u003Cp class=\"block-content\">\u003Cb>Real-world example:\u003C/b> When you drive a car, you don't need to know how the engine, fuel injection system, or electronics work. You use a simple interface—a steering wheel, pedals, and a gear stick. This is an abstraction that hides the immense complexity under the hood.\u003C/p>\u003C/div>\u003Cdiv class=\"block-wrapper--default\">\u003Cp class=\"block-content\">\u003Cb>Implementation in Java:\u003C/b> Primarily achieved using \u003Cb>abstract classes\u003C/b> and \u003Cb>interfaces\u003C/b>.\u003C/p>\u003C/div>\u003Cdiv class=\"block-wrapper--media block-content content-block-code\">\u003Cpre>\u003Ccode class=\"language-autohotkey hljs\">// Abstraction: Define WHAT a vehicle should do, without implementing HOW\ninterface Vehicle {\n void start(); // Abstract method - no implementation\n void stop(); // Abstract method\n int getMaxSpeed(); // Abstract method\n}\n\n// Concrete implementation - hides the complexity of the engine\nclass Car implements Vehicle {\n @Override\n public void start() {\n // Complex engine startup logic is hidden from the user\n System.out.println(Starting gasoline engine...);\n System.out.println(Engine started!);\n }\n\n @Override\n public void stop() {\n System.out.println(Vehicle stopped.);\n }\n\n @Override\n public int getMaxSpeed() {\n return 220;\n }\n}\n\n// Another implementation - hides the complexity of the electrical system\nclass ElectricScooter implements Vehicle {\n @Override\n public void start() {\n // Complexity of the electrical system is hidden\n System.out.println(Activating battery...);\n System.out.println(Scooter is ready to go!);\n }\n\n @Override\n public void stop() {\n System.out.println(Scooter stopped.);\n }\n\n @Override\n public int getMaxSpeed() {\n return 25;\n }\n}\n\n// Using the abstraction\npublic class AbstractionDemo {\n public static void main(String[] args) {\n // We work through the abstraction, unaware of implementation details\n Vehicle car = new Car();\n Vehicle scooter = new new ElectricScooter();\n\n // We don't care HOW they start, just THAT they start\n car.start();\n scooter.start();\n\n System.out.println(\\nMax Speeds:);\n System.out.println(Car: + car.getMaxSpeed() + km/h);\n System.out.println(Scooter: + scooter.getMaxSpeed() + km/h);\n }\n}\u003C/code>\u003C/pre>\u003C/div>\u003Cdiv class=\"block-wrapper--default\">\u003Cp class=\"block-content\">The key advantage of abstraction is flexibility. We can work with any object that implements the \u003Ccode>Vehicle\u003C/code> interface. If we add a new type of vehicle tomorrow (like an electric car), the code that uses the \u003Ccode>Vehicle\u003C/code> abstraction won't need to change at all.\u003C/p>\u003C/div>\u003Cdiv class=\"block-wrapper--default\">\u003Ch3 class=\"block-content\">Common Pitfalls of OOP\u003C/h3>\u003C/div>\u003Cdiv class=\"block-wrapper--default\">\u003Ch2 class=\"block-content\">The Fragile Base Class Problem\u003C/h2>\u003C/div>\u003Cdiv class=\"block-wrapper--media\">\u003Cfigure class=\"block-content content-block-image\">\u003Cimg src=\"https://media.suddo.io/file/2f3af38f-ffaf-465d-b6b8-b927250a64dc/0acf95fa-b02b-4bf9-88cf-37b2f07d49a2/1184.webp\" alt=\"Image\" class=\"rounded-xl medium-zoom-image\" loading=\"lazy\">\u003C/figure>\u003C/div>\u003Cdiv class=\"block-wrapper--default\">\u003Cp class=\"block-content\">Inheritance can create tight coupling. A small change in a parent (base) class can unexpectedly break multiple child classes. The more descendants a class has, the harder it is to modify safely.\u003C/p>\u003C/div>\u003Cdiv class=\"block-wrapper--default\">\u003Ch2 class=\"block-content\">The Square and Rectangle Problem\u003C/h2>\u003C/div>\u003Cdiv class=\"block-wrapper--default\">\u003Cp class=\"block-content\">A common mistake is creating an inheritance relationship that violates the Liskov Substitution Principle (LSP), which states that objects of a superclass should be replaceable with objects of its subclasses without affecting the correctness of the program. A square \"is-a\" rectangle mathematically, but not behaviorally in code.\u003C/p>\u003C/div>\u003Cdiv class=\"block-wrapper--media block-content content-block-code\">\u003Cpre>\u003Ccode class=\"language-autohotkey hljs\">class Rectangle {\n protected int width, height;\n public void setWidth(int width) { this.width = width; }\n public void setHeight(int height) { this.height = height; }\n public int getArea() { return width * height; }\n}\n\n// DANGER: Does a Square always behave like a Rectangle?\nclass Square extends Rectangle {\n @Override\n public void setWidth(int width) {\n super.setWidth(width);\n super.setHeight(width); // Breaks Rectangle's contract!\n }\n\n @Override\n public void setHeight(int height) {\n super.setHeight(height);\n super.setWidth(height); // Breaks Rectangle's contract!\n }\n}\n\n// A function that works with Rectangles\nstatic void testRectangle(Rectangle r) {\n r.setWidth(5);\n r.setHeight(4);\n // We expect the area to be 5 * 4 = 20\n if (r.getArea() != 20) {\n System.out.println(Test failed! Actual area: + r.getArea());\n }\n}\n\ntestRectangle(new Rectangle()); // Works fine.\ntestRectangle(new Square()); // Fails! Area becomes 16 because setHeight changed the width.\u003C/code>\u003C/pre>\u003C/div>\u003Cdiv class=\"block-wrapper--default\">\u003Cp class=\"block-content\">\u003Cb>The Fix:\u003C/b> Favor composition over inheritance. A \u003Ccode>Square\u003C/code> doesn't need to \u003Ci>be\u003C/i> a \u003Ccode>Rectangle\u003C/code>; it can \u003Ci>have\u003C/i> one or be an entirely separate shape.\u003C/p>\u003C/div>\u003Cdiv class=\"block-wrapper--default\">\u003Ch2 class=\"block-content\">Hidden Dependencies and Side Effects\u003C/h2>\u003C/div>\u003Cdiv class=\"block-wrapper--default\">\u003Cp class=\"block-content\">Objects can hide their dependencies by creating them internally, making the class difficult to test and understand. Methods can also have non-obvious side effects that are not declared in their signature.\u003C/p>\u003C/div>\u003Cdiv class=\"block-wrapper--media block-content content-block-code\">\u003Cpre>\u003Ccode class=\"language-autohotkey hljs\">class UserService {\n // HIDDEN DEPENDENCY: The service creates its own dependencies\n private Logger logger = new Logger(); \n\n public void registerUser(String email, String password) {\n repository.save(new User(email, password));\n\n // UNEXPECTED SIDE EFFECT:\n // This method also logs to a file, which isn't obvious from its name.\n logger.log(User registered: + email);\n }\n}\n\n// This class is now hard to test because we can't easily mock the Logger.\u003C/code>\u003C/pre>\u003C/div>\u003Cdiv class=\"block-wrapper--default\">\u003Cp class=\"block-content\">\u003Cb>The Fix:\u003C/b> Use Dependency Injection. Pass all dependencies (like the logger) into the constructor, making them explicit and easy to replace for testing.\u003C/p>\u003C/div>\u003Cdiv class=\"block-wrapper--default\">\u003Chr class=\"block-content content-block-delimiter\">\u003C/div>\u003Cdiv class=\"block-wrapper--default\">\u003Cp class=\"block-content\">OOP is a powerful paradigm for organizing complex code, but it requires thoughtful application. It excels at modeling real-world domains and creating flexible, reusable components.\u003C/p>\u003C/div>\u003Cdiv class=\"block-wrapper--default\">\u003Cp class=\"block-content\">\u003Cb>Key Strengths:\u003C/b>\u003C/p>\u003C/div>\u003Cdiv class=\"block-wrapper--default\">\u003Cul class=\"block-content content-block-list-unordered\">\u003Cli class=\"content-block-list-item\">Intuitive modeling of real-world problems.\u003C/li>\u003Cli class=\"content-block-list-item\">Encapsulation protects data integrity.\u003C/li>\u003Cli class=\"content-block-list-item\">Polymorphism makes code flexible and extensible.\u003C/li>\u003C/ul>\u003C/div>\u003Cdiv class=\"block-wrapper--default\">\u003Cp class=\"block-content\">\u003Cb>Common Pitfalls:\u003C/b>\u003C/p>\u003C/div>\u003Cdiv class=\"block-wrapper--default\">\u003Cul class=\"block-content content-block-list-unordered\">\u003Cli class=\"content-block-list-item\">Overly complex inheritance hierarchies.\u003C/li>\u003Cli class=\"content-block-list-item\">Hidden side effects in methods.\u003C/li>\u003Cli class=\"content-block-list-item\">Difficulty adding new behaviors across many classes.\u003C/li>\u003C/ul>\u003C/div>\u003Cdiv class=\"block-wrapper--default\">\u003Cp class=\"block-content\">The main takeaway is to use OOP where it genuinely simplifies your code, not where it adds unnecessary complexity. Combine it with other approaches and always remember the KISS principle (Keep It Simple, Stupid)—the simplest solution is often the best one.\u003C/p>\u003C/div>\u003Cdiv class=\"block-wrapper--default\">\u003Cp class=\"block-content\">\u003Ca href=\"/tag/java\" target=\"_blank\" rel=\"noopener noreferrer ugc\">#java\u003C/a>\u003Ca href=\"/tag/#oop\" target=\"_blank\" rel=\"noopener noreferrer ugc\"> #oop\u003C/a>\u003C/p>\u003C/div>\u003C/div>",{"time":738,"blocks":739,"version":515},1760380780626,[740,744,748,752,756,762,766,770,775,779,800,804,808,812,818,822,826,843,847,851,855,859,863,868,872,875,892,896,900,917,921,925,929,934,938,955,959,963,967,971,975,979,985,989,993,997,1001,1005,1009,1014,1018,1022,1026,1030,1034,1038,1042,1046,1050,1053,1057,1061,1078,1082,1099,1103],{"id":741,"type":24,"data":742},"intro_p_1",{"text":743},"This guide breaks down the core principles of Object-Oriented Programming (OOP), especially for those new to automation and software development. Understanding OOP is crucial for writing structured, maintainable, and reusable code, and it's a common topic in technical interviews.",{"id":745,"type":42,"data":746},"header_classes_1",{"text":747,"level":45},"1. Classes and Objects: The Blueprint and the Product",{"id":749,"type":24,"data":750},"classes_p_1",{"text":751},"A \u003Cb>class\u003C/b> is a blueprint—a template that defines the properties and behaviors an object will have. An \u003Cb>object\u003C/b> is a specific instance created from that blueprint.",{"id":753,"type":33,"data":754},"classes_quote_1",{"quoteText":755,"authorText":20},"A class is the description; an object is the concrete instance with its own state.",{"id":757,"type":16,"data":758},"cDhjbw5C0i",{"caption":759,"withBorder":21,"withBackground":21,"stretched":21,"file":760},"Class and Object: The blueprint and the car.",{"url":761},"https://media.suddo.io/file/2f3af38f-ffaf-465d-b6b8-b927250a64dc/53d06bdd-27e8-4d16-acb0-6de033c33f03/1184.webp",{"id":763,"type":24,"data":764},"classes_p_2",{"text":765},"\u003Cb>Real-world example:\u003C/b> Imagine you have a blueprint for a \"Car\" that specifies it must have four wheels, a steering wheel, an engine, and the ability to drive and honk. This blueprint is the \u003Ci>class\u003C/i>. A specific red Toyota in your driveway with the license plate \u003Ccode>A123BC\u003C/code> is an \u003Ci>object\u003C/i> created from that blueprint.",{"id":767,"type":24,"data":768},"classes_p_3",{"text":769},"The process of creating an object from a class is called \u003Cb>instantiation\u003C/b>. When we write \u003Ccode>new Car(\"Toyota\", \"Red\", \"A123BC\")\u003C/code>, we are instantiating the \u003Ccode>Car\u003C/code> class to create a specific instance.",{"id":771,"type":772,"data":773},"classes_code_1","code",{"code":774},"// The class - a blueprint for a car\nclass Car {\n // State (fields) - what the car \"has\"\n private String brand;\n private String color;\n private String licensePlate;\n private boolean isEngineOn;\n private int currentSpeed;\n\n // Constructor - a special method for creating objects\n public Car(String brand, String color, String licensePlate) {\n this.brand = brand;\n this.color = color;\n this.licensePlate = licensePlate;\n this.isEngineOn = false;\n this.currentSpeed = 0;\n }\n\n // Behavior (methods) - what the car \"can do\"\n public void startEngine() {\n this.isEngineOn = true;\n System.out.println(brand + \"'s engine has started!\");\n }\n\n public void stopEngine() {\n this.isEngineOn = false;\n this.currentSpeed = 0;\n System.out.println(brand + \"'s engine has been turned off.\");\n }\n\n public void accelerate(int speed) {\n if (isEngineOn) {\n this.currentSpeed += speed;\n System.out.println(brand + \" is accelerating to \" + currentSpeed + \" km/h.\");\n } else {\n System.out.println(\"You need to start the engine first!\");\n }\n }\n\n public void honk() {\n System.out.println(brand + \" honks: Beep-beep!\");\n }\n\n // Getters - to check the state\n public String getBrand() { return brand; }\n public String getColor() { return color; }\n public int getCurrentSpeed() { return currentSpeed; }\n public boolean isEngineRunning() { return isEngineOn; }\n}\n\n// Using the class in a program\npublic class CarDemo {\n public static void main(String[] args) {\n // Create OBJECTS from the Car BLUEPRINT\n Car toyota = new Car(\"Toyota\", \"Red\", \"A123BC\");\n Car bmw = new Car(\"BMW\", \"Black\", \"B777XX\");\n\n // Invoke the behavior of the objects\n toyota.startEngine();\n toyota.accelerate(50);\n toyota.honk();\n\n System.out.println(\"Toyota's current speed: \" + toyota.getCurrentSpeed() + \" km/h\");\n\n // The BMW's engine is off\n System.out.println(\"Is the BMW's engine running? \" + bmw.isEngineRunning());\n bmw.accelerate(30); // Won't work - the engine is off\n }\n}",{"id":776,"type":24,"data":777},"classes_p_4",{"text":778},"In this code:",{"id":780,"type":56,"data":781},"classes_list_1",{"style":58,"meta":782,"items":783},{},[784,788,792,796],{"content":785,"meta":786,"items":787},"\u003Ccode>Car\u003C/code> is the class (blueprint).",{},[],{"content":789,"meta":790,"items":791},"\u003Ccode>toyota\u003C/code> and \u003Ccode>bmw\u003C/code> are the objects (specific cars).",{},[],{"content":793,"meta":794,"items":795},"Each object has its own state: different colors, license plates, and speeds.",{},[],{"content":797,"meta":798,"items":799},"The behavior (methods) is the same for all objects, but the outcome depends on their individual state.",{},[],{"id":801,"type":42,"data":802},"header_encapsulation_1",{"text":803,"level":45},"2. Encapsulation: Controlling Access to State",{"id":805,"type":24,"data":806},"encapsulation_p_1",{"text":807},"Encapsulation is the principle of bundling an object's data (fields) and the methods that operate on that data into a single unit. It protects the internal state from outside interference by exposing only a controlled public interface.",{"id":809,"type":33,"data":810},"encapsulation_quote_1",{"quoteText":811,"authorText":20},"Encapsulation means hiding the implementation details.",{"id":813,"type":16,"data":814},"p5vnGwnfLv",{"caption":815,"withBorder":21,"withBackground":21,"stretched":21,"file":816},"Encapsulation: An ATM machine.",{"url":817},"https://media.suddo.io/file/2f3af38f-ffaf-465d-b6b8-b927250a64dc/6ab3e410-5f70-4696-8600-6237ca532b55/1184.webp",{"id":819,"type":24,"data":820},"encapsulation_p_2",{"text":821},"\u003Cb>Real-world example:\u003C/b> An ATM. It has internal state, like the amount of cash it holds and an operations log. You can't just open it up and take money. You interact with it through a public interface: inserting your card, entering a PIN, and selecting an operation. The ATM validates your request and only dispenses cash if everything is correct.",{"id":823,"type":24,"data":824},"encapsulation_p_3",{"text":825},"\u003Cb>Implementation in Java:\u003C/b>",{"id":827,"type":56,"data":828},"encapsulation_list_1",{"style":58,"meta":829,"items":830},{},[831,835,839],{"content":832,"meta":833,"items":834},"\u003Cb>Access Modifiers:\u003C/b> Use \u003Ccode>private\u003C/code>, \u003Ccode>protected\u003C/code>, and \u003Ccode>public\u003C/code> to control the visibility of fields and methods.",{},[],{"content":836,"meta":837,"items":838},"\u003Cb>Getters:\u003C/b> Public methods for safely reading private fields.",{},[],{"content":840,"meta":841,"items":842},"\u003Cb>Setters:\u003C/b> Public methods for safely modifying private fields, often with validation.",{},[],{"id":844,"type":772,"data":845},"encapsulation_code_1",{"code":846},"class BankAccount {\n // private means these fields cannot be accessed directly from outside\n private String ownerName;\n private double balance;\n private String accountNumber;\n\n public BankAccount(String ownerName, double initialBalance, String accountNumber) {\n this.ownerName = ownerName;\n this.balance = initialBalance;\n this.accountNumber = accountNumber;\n }\n\n // Public methods provide our \"interface\" for interaction\n public void deposit(double amount) {\n if (amount > 0) {\n balance += amount;\n System.out.println(\"Deposited: \" + amount + \". New balance: \" + balance);\n } else {\n System.out.println(\"Deposit amount must be positive.\");\n }\n }\n\n public boolean withdraw(double amount) {\n if (amount > 0 && amount <= balance) {\n balance -= amount;\n System.out.println(\"Withdrew: \" + amount + \". Remaining balance: \" + balance);\n return true;\n } else {\n System.out.println(\"Insufficient funds or invalid amount.\");\n return false;\n }\n }\n\n // Getters for read-only access to information\n public double getBalance() {\n return balance;\n }\n\n public String getOwnerName() {\n return ownerName;\n }\n}\n\n// Usage\npublic class BankDemo {\n public static void main(String[] args) {\n BankAccount account = new BankAccount(\"John Doe\", 1000.0, \"123456789\");\n\n // This is not allowed! It will cause a compilation error:\n // account.balance = 1000000; // ERROR! The field is private\n\n // This is the correct way, using controlled methods:\n account.deposit(500.0);\n account.withdraw(200.0);\n account.withdraw(2000.0); // Fails - insufficient funds\n\n System.out.println(\"Current balance: \" + account.getBalance());\n }\n}",{"id":848,"type":24,"data":849},"encapsulation_p_4",{"text":850},"\u003Cb>Why is this important?\u003C/b> Encapsulation protects data integrity. We can guarantee that the account balance never becomes negative because all modifications must go through our validation logic.",{"id":852,"type":42,"data":853},"header_inheritance_1",{"text":854,"level":45},"3. Inheritance: Building on Existing Code",{"id":856,"type":24,"data":857},"inheritance_p_1",{"text":858},"Inheritance allows a new class (subclass or child) to be based on an existing class (superclass or parent), inheriting its properties and behaviors while adding its own.",{"id":860,"type":33,"data":861},"inheritance_quote_1",{"quoteText":862,"authorText":20},"Inheritance establishes an \"is-a\" relationship, promoting code reuse.",{"id":864,"type":16,"data":865},"OFCGlgHyzL",{"caption":20,"withBorder":21,"withBackground":21,"stretched":21,"file":866},{"url":867},"https://media.suddo.io/file/2f3af38f-ffaf-465d-b6b8-b927250a64dc/993be61d-d53c-466d-9575-f5c5e7ab6527/1184.webp",{"id":869,"type":24,"data":870},"inheritance_p_2",{"text":871},"\u003Cb>Real-world example:\u003C/b> Consider vehicles. There's a general concept of a \"Vehicle\" that can move and stop. A \"Car\" \u003Ci>is a\u003C/i> vehicle, but it adds the ability to honk. A \"Bicycle\" \u003Ci>is a\u003C/i> vehicle, but it adds the ability to ring a bell. An \"Airplane\" \u003Ci>is a\u003C/i> vehicle, but it adds the ability to fly.",{"id":873,"type":24,"data":874},"inheritance_p_3",{"text":825},{"id":876,"type":56,"data":877},"inheritance_list_1",{"style":58,"meta":878,"items":879},{},[880,884,888],{"content":881,"meta":882,"items":883},"The \u003Ccode>extends\u003C/code> keyword creates the inheritance hierarchy.",{},[],{"content":885,"meta":886,"items":887},"The \u003Ccode>super\u003C/code> keyword is used to call constructors and methods of the parent class.",{},[],{"content":889,"meta":890,"items":891},"Child classes automatically gain the functionality of the parent.",{},[],{"id":893,"type":772,"data":894},"inheritance_code_1",{"code":895},"// Base class - Vehicle\nclass Vehicle {\n private String name;\n\n public Vehicle(String name) {\n this.name = name;\n }\n\n public void move() {\n System.out.println(name + \" starts moving.\");\n }\n\n public void stop() {\n System.out.println(name + \" has stopped.\");\n }\n}\n\n// Car class inherits from Vehicle\nclass Car extends Vehicle {\n public Car() {\n super(\"Car\"); // Call the parent's constructor\n }\n\n // New method specific to cars\n public void honk() {\n System.out.println(\"Beep-beep! The car is honking.\");\n }\n}\n\n// Bicycle class inherits from Vehicle\nclass Bicycle extends Vehicle {\n public Bicycle() {\n super(\"Bicycle\");\n }\n\n // New method specific to bicycles\n public void ringBell() {\n System.out.println(\"Ring-ring! The bicycle bell rings.\");\n }\n}\n\n// Airplane class inherits from Vehicle\nclass Airplane extends Vehicle {\n public Airplane() {\n super(\"Airplane\");\n }\n\n // New method specific to airplanes\n public void takeOff() {\n System.out.println(\"The airplane is taking off.\");\n }\n}\n\n// Usage\npublic class InheritanceDemo {\n public static void main(String[] args) {\n Car car = new Car();\n Bicycle bike = new Bicycle();\n Airplane plane = new Airplane();\n\n // All objects have inherited methods\n System.out.println(\"=== Inherited Methods ===\");\n car.move(); // Inherited from Vehicle\n bike.move(); // Inherited from Vehicle\n plane.move(); // Inherited from Vehicle\n\n System.out.println(\"\\n=== Unique Methods ===\");\n // Each class also has its unique methods\n car.honk();\n bike.ringBell();\n plane.takeOff();\n }\n}",{"id":897,"type":24,"data":898},"inheritance_p_4",{"text":899},"This example shows how inheritance allows for:",{"id":901,"type":56,"data":902},"inheritance_list_2",{"style":344,"meta":903,"items":904},{"counterType":346},[905,909,913],{"content":906,"meta":907,"items":908},"\u003Cb>Method Inheritance:\u003C/b> All child classes can use the \u003Ccode>move()\u003C/code> and \u003Ccode>stop()\u003C/code> methods from the parent.",{},[],{"content":910,"meta":911,"items":912},"\u003Cb>Functionality Extension:\u003C/b> Each child class adds its own unique behavior (\u003Ccode>honk()\u003C/code>, \u003Ccode>ringBell()\u003C/code>, \u003Ccode>takeOff()\u003C/code>).",{},[],{"content":914,"meta":915,"items":916},"\u003Cb>Code Reusability:\u003C/b> We wrote the common logic for moving and stopping only once in the \u003Ccode>Vehicle\u003C/code> class.",{},[],{"id":918,"type":42,"data":919},"header_polymorphism_1",{"text":920,"level":45},"4. Polymorphism: One Action, Many Forms",{"id":922,"type":24,"data":923},"polymorphism_p_1",{"text":924},"Polymorphism allows objects of different classes to respond to the same method call in different ways. It enables you to write code that works with objects of a superclass type, but executes the specific behavior of the subclass object.",{"id":926,"type":33,"data":927},"polymorphism_quote_1",{"quoteText":928,"authorText":20},"Polymorphism means one interface, multiple implementations.",{"id":930,"type":16,"data":931},"OsB1I0m4Tl",{"caption":20,"withBorder":21,"withBackground":21,"stretched":21,"file":932},{"url":933},"https://media.suddo.io/file/2f3af38f-ffaf-465d-b6b8-b927250a64dc/9288aba6-fc1d-47bd-a3d7-d6b46485d30e/1184.webp",{"id":935,"type":24,"data":936},"polymorphism_p_2",{"text":937},"\u003Cb>Real-world example:\u003C/b> A remote control with a \"Power On\" button. When you press it:",{"id":939,"type":56,"data":940},"polymorphism_list_1",{"style":58,"meta":941,"items":942},{},[943,947,951],{"content":944,"meta":945,"items":946},"For a TV, it turns on the screen.",{},[],{"content":948,"meta":949,"items":950},"For an air conditioner, it starts the fan.",{},[],{"content":952,"meta":953,"items":954},"For a coffee machine, it starts brewing coffee.",{},[],{"id":956,"type":24,"data":957},"polymorphism_p_3",{"text":958},"The same command, \"Power On,\" results in different actions depending on the device.",{"id":960,"type":24,"data":961},"polymorphism_p_4",{"text":962},"\u003Cb>Implementation in Java:\u003C/b> Achieved through \u003Cb>method overriding\u003C/b> (redefining a parent method in a child class) and \u003Cb>interfaces\u003C/b> (defining a contract for multiple classes to implement).",{"id":964,"type":772,"data":965},"polymorphism_code_1",{"code":966},"// Base class for devices\nclass Device {\n // This method will behave differently for each device\n public void turnOn() {\n System.out.println(\"Turning on a generic device.\");\n }\n}\n\n// Specific devices\nclass TV extends Device {\n @Override // Explicitly state we are overriding the parent's method\n public void turnOn() {\n System.out.println(\"TV: Screen lights up, displaying content.\");\n }\n}\n\nclass AirConditioner extends Device {\n @Override\n public void turnOn() {\n System.out.println(\"AC: Fan starts, cool air begins to flow.\");\n }\n}\n\nclass CoffeeMachine extends Device {\n @Override\n public void turnOn() {\n System.out.println(\"Coffee Machine: Starts brewing, hissing sound is heard.\");\n }\n}\n\n// Demonstrating polymorphism\npublic class PolymorphismDemo {\n public static void main(String[] args) {\n Device tv = new TV();\n Device ac = new AirConditioner();\n Device coffee = new CoffeeMachine();\n\n Device[] devices = {tv, ac, coffee};\n\n System.out.println(\"Pressing the 'Power On' button for all devices:\");\n\n // POLYMORPHISM IN ACTION: one method call, different behaviors!\n for (Device device : devices) {\n device.turnOn(); // Each device turns on in its own way\n }\n }\n}",{"id":968,"type":42,"data":969},"header_abstraction_1",{"text":970,"level":45},"5. Abstraction: Hiding Complexity",{"id":972,"type":24,"data":973},"abstraction_p_1",{"text":974},"Abstraction focuses on hiding complex implementation details and showing only the essential features of an object. It allows us to work with concepts rather than getting bogged down in specifics.",{"id":976,"type":33,"data":977},"abstraction_quote_1",{"quoteText":978,"authorText":20},"Abstraction is about focusing on what an object does, not how it does it.",{"id":980,"type":16,"data":981},"2ynaW9mhkY",{"caption":982,"withBorder":21,"withBackground":21,"stretched":21,"file":983},"Abstraction: A driver behind the wheel.",{"url":984},"https://media.suddo.io/file/2f3af38f-ffaf-465d-b6b8-b927250a64dc/994406c4-249f-47dc-8159-e1e8f18f7a3f/1184.webp",{"id":986,"type":24,"data":987},"abstraction_p_2",{"text":988},"\u003Cb>Real-world example:\u003C/b> When you drive a car, you don't need to know how the engine, fuel injection system, or electronics work. You use a simple interface—a steering wheel, pedals, and a gear stick. This is an abstraction that hides the immense complexity under the hood.",{"id":990,"type":24,"data":991},"abstraction_p_3",{"text":992},"\u003Cb>Implementation in Java:\u003C/b> Primarily achieved using \u003Cb>abstract classes\u003C/b> and \u003Cb>interfaces\u003C/b>.",{"id":994,"type":772,"data":995},"abstraction_code_1",{"code":996},"// Abstraction: Define WHAT a vehicle should do, without implementing HOW\ninterface Vehicle {\n void start(); // Abstract method - no implementation\n void stop(); // Abstract method\n int getMaxSpeed(); // Abstract method\n}\n\n// Concrete implementation - hides the complexity of the engine\nclass Car implements Vehicle {\n @Override\n public void start() {\n // Complex engine startup logic is hidden from the user\n System.out.println(\"Starting gasoline engine...\");\n System.out.println(\"Engine started!\");\n }\n\n @Override\n public void stop() {\n System.out.println(\"Vehicle stopped.\");\n }\n\n @Override\n public int getMaxSpeed() {\n return 220;\n }\n}\n\n// Another implementation - hides the complexity of the electrical system\nclass ElectricScooter implements Vehicle {\n @Override\n public void start() {\n // Complexity of the electrical system is hidden\n System.out.println(\"Activating battery...\");\n System.out.println(\"Scooter is ready to go!\");\n }\n\n @Override\n public void stop() {\n System.out.println(\"Scooter stopped.\");\n }\n\n @Override\n public int getMaxSpeed() {\n return 25;\n }\n}\n\n// Using the abstraction\npublic class AbstractionDemo {\n public static void main(String[] args) {\n // We work through the abstraction, unaware of implementation details\n Vehicle car = new Car();\n Vehicle scooter = new new ElectricScooter();\n\n // We don't care HOW they start, just THAT they start\n car.start();\n scooter.start();\n\n System.out.println(\"\\nMax Speeds:\");\n System.out.println(\"Car: \" + car.getMaxSpeed() + \" km/h\");\n System.out.println(\"Scooter: \" + scooter.getMaxSpeed() + \" km/h\");\n }\n}",{"id":998,"type":24,"data":999},"abstraction_p_4",{"text":1000},"The key advantage of abstraction is flexibility. We can work with any object that implements the \u003Ccode>Vehicle\u003C/code> interface. If we add a new type of vehicle tomorrow (like an electric car), the code that uses the \u003Ccode>Vehicle\u003C/code> abstraction won't need to change at all.",{"id":1002,"type":42,"data":1003},"header_problems_1",{"text":1004,"level":45},"Common Pitfalls of OOP",{"id":1006,"type":42,"data":1007},"header_problems_2",{"text":1008,"level":197},"The Fragile Base Class Problem",{"id":1010,"type":16,"data":1011},"PO7HDm8WJE",{"caption":20,"withBorder":21,"withBackground":21,"stretched":21,"file":1012},{"url":1013},"https://media.suddo.io/file/2f3af38f-ffaf-465d-b6b8-b927250a64dc/0acf95fa-b02b-4bf9-88cf-37b2f07d49a2/1184.webp",{"id":1015,"type":24,"data":1016},"problems_p_1",{"text":1017},"Inheritance can create tight coupling. A small change in a parent (base) class can unexpectedly break multiple child classes. The more descendants a class has, the harder it is to modify safely.",{"id":1019,"type":42,"data":1020},"header_problems_3",{"text":1021,"level":197},"The Square and Rectangle Problem",{"id":1023,"type":24,"data":1024},"problems_p_2",{"text":1025},"A common mistake is creating an inheritance relationship that violates the Liskov Substitution Principle (LSP), which states that objects of a superclass should be replaceable with objects of its subclasses without affecting the correctness of the program. A square \"is-a\" rectangle mathematically, but not behaviorally in code.",{"id":1027,"type":772,"data":1028},"problems_code_1",{"code":1029},"class Rectangle {\n protected int width, height;\n public void setWidth(int width) { this.width = width; }\n public void setHeight(int height) { this.height = height; }\n public int getArea() { return width * height; }\n}\n\n// DANGER: Does a Square always behave like a Rectangle?\nclass Square extends Rectangle {\n @Override\n public void setWidth(int width) {\n super.setWidth(width);\n super.setHeight(width); // Breaks Rectangle's contract!\n }\n\n @Override\n public void setHeight(int height) {\n super.setHeight(height);\n super.setWidth(height); // Breaks Rectangle's contract!\n }\n}\n\n// A function that works with Rectangles\nstatic void testRectangle(Rectangle r) {\n r.setWidth(5);\n r.setHeight(4);\n // We expect the area to be 5 * 4 = 20\n if (r.getArea() != 20) {\n System.out.println(\"Test failed! Actual area: \" + r.getArea());\n }\n}\n\ntestRectangle(new Rectangle()); // Works fine.\ntestRectangle(new Square()); // Fails! Area becomes 16 because setHeight changed the width.",{"id":1031,"type":24,"data":1032},"problems_p_3",{"text":1033},"\u003Cb>The Fix:\u003C/b> Favor composition over inheritance. A \u003Ccode>Square\u003C/code> doesn't need to \u003Ci>be\u003C/i> a \u003Ccode>Rectangle\u003C/code>; it can \u003Ci>have\u003C/i> one or be an entirely separate shape.",{"id":1035,"type":42,"data":1036},"header_problems_4",{"text":1037,"level":197},"Hidden Dependencies and Side Effects",{"id":1039,"type":24,"data":1040},"problems_p_4",{"text":1041},"Objects can hide their dependencies by creating them internally, making the class difficult to test and understand. Methods can also have non-obvious side effects that are not declared in their signature.",{"id":1043,"type":772,"data":1044},"problems_code_2",{"code":1045},"class UserService {\n // HIDDEN DEPENDENCY: The service creates its own dependencies\n private Logger logger = new Logger(); \n\n public void registerUser(String email, String password) {\n repository.save(new User(email, password));\n\n // UNEXPECTED SIDE EFFECT:\n // This method also logs to a file, which isn't obvious from its name.\n logger.log(\"User registered: \" + email);\n }\n}\n\n// This class is now hard to test because we can't easily mock the Logger.",{"id":1047,"type":24,"data":1048},"problems_p_5",{"text":1049},"\u003Cb>The Fix:\u003C/b> Use Dependency Injection. Pass all dependencies (like the logger) into the constructor, making them explicit and easy to replace for testing.",{"id":1051,"type":38,"data":1052},"mDMLCUFCrI",{},{"id":1054,"type":24,"data":1055},"conclusion_p_1",{"text":1056},"OOP is a powerful paradigm for organizing complex code, but it requires thoughtful application. It excels at modeling real-world domains and creating flexible, reusable components.",{"id":1058,"type":24,"data":1059},"conclusion_p_2",{"text":1060},"\u003Cb>Key Strengths:\u003C/b>",{"id":1062,"type":56,"data":1063},"conclusion_list_1",{"style":58,"meta":1064,"items":1065},{},[1066,1070,1074],{"content":1067,"meta":1068,"items":1069},"Intuitive modeling of real-world problems.",{},[],{"content":1071,"meta":1072,"items":1073},"Encapsulation protects data integrity.",{},[],{"content":1075,"meta":1076,"items":1077},"Polymorphism makes code flexible and extensible.",{},[],{"id":1079,"type":24,"data":1080},"conclusion_p_3",{"text":1081},"\u003Cb>Common Pitfalls:\u003C/b>",{"id":1083,"type":56,"data":1084},"conclusion_list_2",{"style":58,"meta":1085,"items":1086},{},[1087,1091,1095],{"content":1088,"meta":1089,"items":1090},"Overly complex inheritance hierarchies.",{},[],{"content":1092,"meta":1093,"items":1094},"Hidden side effects in methods.",{},[],{"content":1096,"meta":1097,"items":1098},"Difficulty adding new behaviors across many classes.",{},[],{"id":1100,"type":24,"data":1101},"conclusion_p_4",{"text":1102},"The main takeaway is to use OOP where it genuinely simplifies your code, not where it adds unnecessary complexity. Combine it with other approaches and always remember the KISS principle (Keep It Simple, Stupid)—the simplest solution is often the best one.",{"id":1104,"type":24,"data":1105},"BBN-ImXE8f",{"text":1106},"#java #oop",{"authorId":1108,"name":1109,"avatar":1110,"username":1111},"Cc2RcMZ6g9bOUvnctzP8e9kY5iy2","Clemens Henk","https://media.suddo.io/file/2f3af38f-ffaf-465d-b6b8-b927250a64dc/abf3ca70-dbd1-491c-a7f8-35bcaec8bee4/1184.webp","id410791393077",[1113],{"emojiId":422,"count":422,"reactedByUser":21},{"comments":527,"favorites":422,"views":1115,"hits":1116},9,21,"2025-10-13T12:22:46.035","2025-10-13T18:40:55.175",{"postId":1120,"title":1121,"slug":1122,"preview":1123,"html":1124,"content":1125,"author":1204,"authorUsername":417,"topic":723,"status":419,"reactions":1205,"counters":1207,"createdAt":1210,"updatedAt":1211,"publishedPostId":433,"favorite":21},"c50d3b9e-783e-481d-98ff-f91e99ef0f6a","Study: British banks use software from the 1960s–70s","543856-british-banks-use-software-from-1960s-70s","\u003Cdiv class=\"block-wrapper--default\">\u003Cp class=\"block-content\">According to consulting company Baringa, British banks are still \u003Ca href=\"https://www.computerweekly.com/news/366631494/UK-banks-still-run-software-code-written-more-than-60-years-ago\" rel=\"noopener noreferrer nofollow\">using\u003C/a> software written in the 1960s and 1970s. Only a few senior employees understand it.\u003C/p>\u003C/div>\u003Cdiv class=\"block-wrapper--media\">\u003Cfigure class=\"block-content content-block-image\">\u003Cimg src=\"https://media.suddo.io/file/2f3af38f-ffaf-465d-b6b8-b927250a64dc/dce7ce34-1765-40f8-9cd1-b75235f00664/1184.webp\" alt=\"Image\" class=\"rounded-xl medium-zoom-image\" loading=\"lazy\">\u003C/figure>\u003C/div>","\u003Cdiv class=\"content-wrapper break-words\">\u003Cdiv class=\"block-wrapper--default\">\u003Cp class=\"block-content\">According to consulting company Baringa, British banks are still \u003Ca href=\"https://www.computerweekly.com/news/366631494/UK-banks-still-run-software-code-written-more-than-60-years-ago\" rel=\"noopener noreferrer nofollow\">using\u003C/a> software written in the 1960s and 1970s. Only a few senior employees understand it.\u003C/p>\u003C/div>\u003Cdiv class=\"block-wrapper--media\">\u003Cfigure class=\"block-content content-block-image\">\u003Cimg src=\"https://media.suddo.io/file/2f3af38f-ffaf-465d-b6b8-b927250a64dc/dce7ce34-1765-40f8-9cd1-b75235f00664/1184.webp\" alt=\"Image\" class=\"rounded-xl medium-zoom-image\" loading=\"lazy\">\u003C/figure>\u003C/div>\u003Cdiv class=\"block-wrapper--default\">\u003Cp class=\"block-content\">According to a survey of 200 banks, 16% of them use software from the 1960s, and almost 40% maintain code from the 1970s. \u003C/p>\u003C/div>\u003Cdiv class=\"block-wrapper--default\">\u003Cul class=\"block-content content-block-list-unordered\">\u003Cli class=\"content-block-list-item\">At the same time, 50% of bank representatives admitted that they use software understood by only one or two employees of or approaching retirement age. Another 31.5% stated that they rely on one or two employees not yet of retirement age to understand the legacy systems.\u003C/li>\u003C/ul>\u003C/div>\u003Cdiv class=\"block-wrapper--default\">\u003Cul class=\"block-content content-block-list-unordered\">\u003Cli class=\"content-block-list-item\">About 38 bank representatives responded that they still use code designed to run on physical systems, such as punch cards, and 15% use code written for room-sized mainframes.\u003C/li>\u003C/ul>\u003C/div>\u003Cdiv class=\"block-wrapper--default\">\u003Chr class=\"block-content content-block-delimiter\">\u003C/div>\u003Cdiv class=\"block-wrapper--default\">\u003Cp class=\"block-content\">\"The accumulation of legacy technology is an inevitable situation in complex technological environments. Banks are huge organizations serving millions of customers across countries, and it would be impossible to require them to restart their infrastructure from scratch every time a technological innovation appears. However, the age and criticality of some systems are astounding: if you have a current account, your money might be encrypted by code written during the time of Prime Minister Harold Macmillan (a British prime minister who participated in World War I),\" noted Paul Mihajlovic, Head of Banking and Technology Marketing at Baringa. \u003C/p>\u003C/div>\u003Cdiv class=\"block-wrapper--default\">\u003Cp class=\"block-content\">One respondent noted that his bank works with Microsoft software from 1993. The bank's ATM network uses outdated Windows NT servers.\u003C/p>\u003C/div>\u003Cdiv class=\"block-wrapper--default\">\u003Chr class=\"block-content content-block-delimiter\">\u003C/div>\u003Cdiv class=\"block-wrapper--default\">\u003Cp class=\"block-content\">Another noted that the core banking systems were created in the 1970s and still use the Cobol programming language. It was the primary technology for financial and administrative systems.\u003C/p>\u003C/div>\u003Cdiv class=\"block-wrapper--default\">\u003Cp class=\"block-content\">One of the leading IT specialists in the UK banking sector, who wished to remain anonymous, said that he had worked on many systems created in the 1960s, 1970s, and 1980s.\u003C/p>\u003C/div>\u003Cfigure class=\"block-wrapper block-wrapper--media\">\u003Cdiv class=\"block-wrapper__content\">\u003Cblockquote class=\"block-quote block-quote--text-small\">\u003Cdiv class=\"block-quote__line\">\u003C/div>\u003Cdiv class=\"block-quote__text\">\"There are many legacy systems, and the reason for their longevity is that they were very simple, worked correctly, and allowed for large volumes of simple transactions. Banks are abandoning these systems because the people who understand them are leaving, and young specialists do not want to learn languages like Cobol\"\u003C/div>\u003C/blockquote>\u003C/div>\u003C/figure>\u003Cdiv class=\"block-wrapper--default\">\u003Chr class=\"block-content content-block-delimiter\">\u003C/div>\u003Cdiv class=\"block-wrapper--default\">\u003Cp class=\"block-content\">A similar situation is observed not only in the UK. In the US, as of 2021, over 80% of personal transactions at financial institutions were conducted using COBOL. In 2012, the Bank of New York Mellon discovered that it was using 112,500 separate COBOL programs, comprising nearly 350 million lines of code.\u003C/p>\u003C/div>\u003Cdiv class=\"block-wrapper--default\">\u003Cp class=\"block-content\">However, companies are beginning to conduct a \"soft\" modernization of COBOL systems. For example, NN Group — one of Europe's largest insurers — in collaboration with Deloitte, phased the migration of its key insurance applications from a mainframe to a modern Java platform over 23 months without interrupting services.\u003C/p>\u003C/div>\u003Cdiv class=\"block-wrapper--default\">\u003Cp class=\"block-content\">Meanwhile, Morgan Stanley has implemented an internal artificial intelligence tool called DevGen.AI, which has analyzed 9 million lines of legacy code this year alone, saving developers approximately 280,000 hours. The tool translated outdated programming languages into simple English specifications that can be rewritten in modern code.\u003C/p>\u003C/div>\u003Cdiv class=\"block-wrapper--default\">\u003Cp class=\"block-content\">\u003Ca href=\"/tag/news\" target=\"_blank\" rel=\"noopener noreferrer ugc\">#news\u003C/a>\u003C/p>\u003C/div>\u003C/div>",{"time":1126,"blocks":1127,"version":515},1759125382350,[1128,1132,1137,1141,1150,1159,1162,1166,1170,1173,1177,1181,1185,1188,1192,1196,1200],{"id":1129,"type":24,"data":1130},"5fadeac4-5",{"text":1131},"According to consulting company Baringa, British banks are still \u003Ca href=\"https://www.computerweekly.com/news/366631494/UK-banks-still-run-software-code-written-more-than-60-years-ago\" rel=\"noopener noreferrer nofollow\">using\u003C/a> software written in the 1960s and 1970s. Only a few senior employees understand it.",{"id":1133,"type":16,"data":1134},"a4e41bf7-9",{"caption":20,"withBorder":21,"withBackground":21,"stretched":21,"file":1135},{"url":1136},"https://media.suddo.io/file/2f3af38f-ffaf-465d-b6b8-b927250a64dc/dce7ce34-1765-40f8-9cd1-b75235f00664/1184.webp",{"id":1138,"type":24,"data":1139},"AQm9Ok2WRg",{"text":1140},"According to a survey of 200 banks, 16% of them use software from the 1960s, and almost 40% maintain code from the 1970s. ",{"id":1142,"type":56,"data":1143},"oj8uEf0bMd",{"style":58,"meta":1144,"items":1145},{},[1146],{"content":1147,"meta":1148,"items":1149},"At the same time, 50% of bank representatives admitted that they use software understood by only one or two employees of or approaching retirement age. Another 31.5% stated that they rely on one or two employees not yet of retirement age to understand the legacy systems.",{},[],{"id":1151,"type":56,"data":1152},"gm1pBx_1hl",{"style":58,"meta":1153,"items":1154},{},[1155],{"content":1156,"meta":1157,"items":1158},"About 38 bank representatives responded that they still use code designed to run on physical systems, such as punch cards, and 15% use code written for room-sized mainframes.",{},[],{"id":1160,"type":38,"data":1161},"OOdZutEpk1",{},{"id":1163,"type":24,"data":1164},"7e8ab80b-a",{"text":1165},"\"The accumulation of legacy technology is an inevitable situation in complex technological environments. Banks are huge organizations serving millions of customers across countries, and it would be impossible to require them to restart their infrastructure from scratch every time a technological innovation appears. However, the age and criticality of some systems are astounding: if you have a current account, your money might be encrypted by code written during the time of Prime Minister Harold Macmillan (a British prime minister who participated in World War I),\" noted Paul Mihajlovic, Head of Banking and Technology Marketing at Baringa. ",{"id":1167,"type":24,"data":1168},"26120373-c",{"text":1169},"One respondent noted that his bank works with Microsoft software from 1993. The bank's ATM network uses outdated Windows NT servers.",{"id":1171,"type":38,"data":1172},"6mSP2lxud2",{},{"id":1174,"type":24,"data":1175},"79677f02-0",{"text":1176},"Another noted that the core banking systems were created in the 1970s and still use the Cobol programming language. It was the primary technology for financial and administrative systems.",{"id":1178,"type":24,"data":1179},"9690fa50-e",{"text":1180},"One of the leading IT specialists in the UK banking sector, who wished to remain anonymous, said that he had worked on many systems created in the 1960s, 1970s, and 1980s.",{"id":1182,"type":33,"data":1183},"xXXw4NaS8u",{"quoteText":1184,"authorText":20},"\"There are many legacy systems, and the reason for their longevity is that they were very simple, worked correctly, and allowed for large volumes of simple transactions. Banks are abandoning these systems because the people who understand them are leaving, and young specialists do not want to learn languages like Cobol\"",{"id":1186,"type":38,"data":1187},"UFkGCmIE8I",{},{"id":1189,"type":24,"data":1190},"b2d5aaad-5",{"text":1191},"A similar situation is observed not only in the UK. In the US, as of 2021, over 80% of personal transactions at financial institutions were conducted using COBOL. In 2012, the Bank of New York Mellon discovered that it was using 112,500 separate COBOL programs, comprising nearly 350 million lines of code.",{"id":1193,"type":24,"data":1194},"e18e5588-1",{"text":1195},"However, companies are beginning to conduct a \"soft\" modernization of COBOL systems. For example, NN Group — one of Europe's largest insurers — in collaboration with Deloitte, phased the migration of its key insurance applications from a mainframe to a modern Java platform over 23 months without interrupting services.",{"id":1197,"type":24,"data":1198},"d224edc5-4",{"text":1199},"Meanwhile, Morgan Stanley has implemented an internal artificial intelligence tool called DevGen.AI, which has analyzed 9 million lines of legacy code this year alone, saving developers approximately 280,000 hours. The tool translated outdated programming languages into simple English specifications that can be rewritten in modern code.",{"id":1201,"type":24,"data":1202},"19rTQFkgCR",{"text":1203},"#news",{"authorId":414,"name":415,"avatar":416,"username":417},[1206],{"emojiId":422,"count":422,"reactedByUser":21},{"comments":527,"favorites":197,"views":1208,"hits":1209},11,48,"2025-09-28T20:29:15.504","2025-09-29T05:57:35.278",{"postId":1213,"title":1214,"slug":1215,"preview":1216,"html":1217,"content":1218,"author":1256,"authorUsername":417,"topic":596,"status":419,"reactions":1257,"counters":1259,"createdAt":1261,"updatedAt":1262,"publishedPostId":433,"favorite":21},"c45d17a2-65f5-4364-9761-6d2a40f5c0ba","A popular tourist village in the Netherlands will start charging a €17.5 entry fee.","420133-popular-tourist-village-netherlands-charging-entry-fee","\u003Cdiv class=\"block-wrapper--default\">\u003Cp class=\"block-content\">The authorities expect the fee to bring more than €20 million to the local budget annually. \u003C/p>\u003C/div>\u003Cdiv class=\"block-wrapper--media\">\u003Cfigure class=\"block-content content-block-image\">\u003Cimg src=\"https://media.suddo.io/file/2f3af38f-ffaf-465d-b6b8-b927250a64dc/35d92d53-bd0c-495a-98de-f720a858de6a/1184.webp\" alt=\"Source: Getty Images\" class=\"rounded-xl medium-zoom-image\" loading=\"lazy\">\u003C/figure>\u003Cspan class=\"caption-text text-sm mt-3\">Source: Getty Images\u003C/span>\u003C/div>","\u003Cdiv class=\"content-wrapper break-words\">\u003Cdiv class=\"block-wrapper--default\">\u003Cp class=\"block-content\">The authorities expect the fee to bring more than €20 million to the local budget annually. \u003C/p>\u003C/div>\u003Cdiv class=\"block-wrapper--media\">\u003Cfigure class=\"block-content content-block-image\">\u003Cimg src=\"https://media.suddo.io/file/2f3af38f-ffaf-465d-b6b8-b927250a64dc/35d92d53-bd0c-495a-98de-f720a858de6a/1184.webp\" alt=\"Source: Getty Images\" class=\"rounded-xl medium-zoom-image\" loading=\"lazy\">\u003C/figure>\u003Cspan class=\"caption-text text-sm mt-3\">Source: Getty Images\u003C/span>\u003C/div>\u003Cdiv class=\"block-wrapper--default\">\u003Cul class=\"block-content content-block-list-unordered\">\u003Cli class=\"content-block-list-item\">Access to the village of Zaanse Schans in the Netherlands, famous for its windmills, will become paid in the spring of 2026, \u003Ca href=https://www.bbc.com/news/articles/cn4ly3mr443o target=_blank>writes\u003C/a> the BBC. In 2024, it was visited by more than 2.6 million tourists, while its population is about 100 people.\u003C/li>\u003Cli class=\"content-block-list-item\">The entrance ticket price will be €17.5. It will also include free access to the local museum and inside one of the windmills. Tickets must be booked and paid for online.\u003C/li>\u003Cli class=\"content-block-list-item\">Local authorities expect that the paid entry will help reduce the number of tourists and bring additional income to the budget. According to officials' estimates, even if the tourist flow is halved, the revenue from the fee will be about €25 million per year.\u003C/li>\u003Cli class=\"content-block-list-item\">This money is planned to be spent on maintaining attractions and building new infrastructure. Meanwhile, representatives of local businesses fear that the introduction of the fee will negatively affect their income, the publication notes.\u003C/li>\u003C/ul>\u003C/div>\u003Cdiv class=\"block-wrapper--default\">\u003Cp class=\"block-content\">\u003Ca href=\"/tag/news\" target=\"_blank\" rel=\"noopener noreferrer ugc\">#news\u003C/a> \u003Ca href=\"/tag/travel\" target=\"_blank\" rel=\"noopener noreferrer ugc\">#travel\u003C/a>\u003C/p>\u003C/div>\u003C/div>",{"time":1219,"blocks":1220,"version":515},1759137493316,[1221,1225,1231,1252],{"id":1222,"type":24,"data":1223},"f3d24ba1-e",{"text":1224},"The authorities expect the fee to bring more than €20 million to the local budget annually. ",{"id":1226,"type":16,"data":1227},"ef06df47-e",{"caption":1228,"withBorder":21,"withBackground":21,"stretched":21,"file":1229},"Source: Getty Images",{"url":1230},"https://media.suddo.io/file/2f3af38f-ffaf-465d-b6b8-b927250a64dc/35d92d53-bd0c-495a-98de-f720a858de6a/1184.webp",{"id":1232,"type":56,"data":1233},"70a59b49-b",{"style":58,"meta":1234,"items":1235},{},[1236,1240,1244,1248],{"content":1237,"meta":1238,"items":1239},"Access to the village of Zaanse Schans in the Netherlands, famous for its windmills, will become paid in the spring of 2026, \u003Ca href=\"https://www.bbc.com/news/articles/cn4ly3mr443o\" target=\"_blank\">writes\u003C/a> the BBC. In 2024, it was visited by more than 2.6 million tourists, while its population is about 100 people.",{},[],{"content":1241,"meta":1242,"items":1243},"The entrance ticket price will be €17.5. It will also include free access to the local museum and inside one of the windmills. Tickets must be booked and paid for online.",{},[],{"content":1245,"meta":1246,"items":1247},"Local authorities expect that the paid entry will help reduce the number of tourists and bring additional income to the budget. According to officials' estimates, even if the tourist flow is halved, the revenue from the fee will be about €25 million per year.",{},[],{"content":1249,"meta":1250,"items":1251},"This money is planned to be spent on maintaining attractions and building new infrastructure. Meanwhile, representatives of local businesses fear that the introduction of the fee will negatively affect their income, the publication notes.",{},[],{"id":1253,"type":24,"data":1254},"86d0b9f5-d",{"text":1255},"#news #travel",{"authorId":414,"name":415,"avatar":416,"username":417},[1258],{"emojiId":422,"count":422,"reactedByUser":21},{"comments":527,"favorites":422,"views":600,"hits":1260},52,"2025-09-29T09:17:17.738","2025-09-29T09:18:30.617",{"postId":1264,"title":1265,"slug":1266,"preview":1267,"html":1268,"content":1269,"author":1470,"authorUsername":417,"topic":1471,"status":419,"reactions":1472,"counters":1474,"createdAt":1477,"updatedAt":1478,"publishedPostId":433,"favorite":21},"dd548b04-9dcc-4d06-a6e9-23ed2c6a31ad","Startup in a Night: How low-code and AI are breaking the development market","236119-startup-in-a-night-how-low-code-and-ai-break-development-market","\u003Cdiv class=\"block-wrapper--default\">\u003Cp class=\"block-content\">Yesterday: to test an idea, you had to assemble a team, write a technical specification, and spend months and a substantial amount of money.\u003Cbr data-empty=\"true\">Today: a low-code platform and a neural network are enough to throw together a working prototype in an evening based on the vibe. This is no longer a joke from developer chats—it's how products are actually launched.\u003C/p>\u003C/div>\u003Cdiv class=\"block-wrapper--media\">\u003Cfigure class=\"block-content content-block-image\">\u003Cimg src=\"https://media.suddo.io/file/2f3af38f-ffaf-465d-b6b8-b927250a64dc/cac8e22c-b814-4595-8eec-173027534752/1184.webp\" alt=\"Image\" class=\"rounded-xl medium-zoom-image\" loading=\"lazy\">\u003C/figure>\u003C/div>","\u003Cdiv class=\"content-wrapper break-words\">\u003Cdiv class=\"block-wrapper--default\">\u003Cp class=\"block-content\">Yesterday: to test an idea, you had to assemble a team, write a technical specification, and spend months and a substantial amount of money.\u003Cbr data-empty=\"true\">Today: a low-code platform and a neural network are enough to throw together a working prototype in an evening based on the vibe. This is no longer a joke from developer chats—it's how products are actually launched.\u003C/p>\u003C/div>\u003Cdiv class=\"block-wrapper--media\">\u003Cfigure class=\"block-content content-block-image\">\u003Cimg src=\"https://media.suddo.io/file/2f3af38f-ffaf-465d-b6b8-b927250a64dc/cac8e22c-b814-4595-8eec-173027534752/1184.webp\" alt=\"Image\" class=\"rounded-xl medium-zoom-image\" loading=\"lazy\">\u003C/figure>\u003C/div>\u003Cdiv class=\"block-wrapper--default\">\u003Cp class=\"block-content\">\"Vibe-coding\" sounds like a meme, but it's already a perfectly viable approach. The concept is simple: instead of spending weeks thinking about architecture and drawing diagrams, a developer or product manager opens an AI tool, provides a text description, and within an hour has a basic interface or even a complete application in their hands.\u003Cbr data-empty=\"true\">For example, you open Cursor, type in the chat, \"I want to create an app for tracking personal expenses,\" and half an hour later, you have a working prototype. No studying documentation, no architectural planning, no 40-page technical specifications. You simply described the task in plain language and received the code.\u003C/p>\u003C/div>\u003Cdiv class=\"block-wrapper--default\">\u003Cp class=\"block-content\">It's actually similar to a jam session in music: you gather ideas, play \"by ear,\" and record a track. In IT, this translates into rapid MVPs, where the speed of hypothesis testing is valued more than a perfect architecture.\u003C/p>\u003C/div>\u003Cdiv class=\"block-wrapper--default\">\u003Chr class=\"block-content content-block-delimiter\">\u003C/div>\u003Cdiv class=\"block-wrapper--default\">\u003Cp class=\"block-content\">Previously, building an MVP required a team, months of work, and a budget comparable to a small startup's fund. Now, things look completely different.\u003C/p>\u003C/div>\u003Cdiv class=\"block-wrapper--default\">\u003Cul class=\"block-content content-block-list-unordered\">\u003Cli class=\"content-block-list-item\">Low-code platforms eliminate routine. Ready-made blocks, visual interfaces, out-of-the-box integrations. According to Gartner, by 2025, \u003Ca href=https://research.aimultiple.com/low-code-statistics/ target=_blank>70% of enterprise applications will be created using low-code\u003C/a>, compared to 25% in 2020. The market is growing from \u003Ca href=https://www.mordorintelligence.com/industry-reports/low-code-development-platform-market target=_blank>$26.3 billion (2025) to $67.12 billion by 2030\u003C/a>.\u003C/li>\u003Cli class=\"content-block-list-item\">Neural networks provide a powerful boost: GitHub Copilot, for example, \u003Ca href=https://www.wearetenet.com/blog/github-copilot-usage-data-statistics target=_blank>speeds up task completion by 55%\u003C/a>, and up to 46% of the code in projects is written automatically.\u003C/li>\u003Cli class=\"content-block-list-item\">A new generation of tools like V0 or Claude Artifacts can turn a text description into a ready-made interface or application. Now, it's realistic to build an MVP in just a couple of hours.\u003C/li>\u003C/ul>\u003C/div>\u003Cdiv class=\"block-wrapper--default\">\u003Cp class=\"block-content\">In effect, businesses have gained an \"idea accelerator\": conceive it — build a prototype — show it to the market — gather feedback — refine.\u003C/p>\u003C/div>\u003Cdiv class=\"block-wrapper--default\">\u003Cp class=\"block-content\">Real-world stories demonstrate better than any forecast that \"vibe-coding\" is already a reality.\u003C/p>\u003C/div>\u003Cdiv class=\"block-wrapper--default\">\u003Cul class=\"block-content content-block-list-unordered\">\u003Cli class=\"content-block-list-item\">The French marketplace Comet \u003Ca href=https://www.nomtek.com/blog/no-code-startups target=_blank>was built on Bubble\u003C/a>. In three years, the startup attracted €14 million in investment and reached $800,000 in monthly revenue.\u003C/li>\u003Cli class=\"content-block-list-item\">Toyota \u003Ca href=https://superagi.com/case-studies-in-ai-workflow-automation-real-world-examples-of-process-optimization-and-efficiency-gains/ target=_blank>implemented an AI system\u003C/a> for predictive maintenance. The result: a 25% reduction in downtime, an ROI of 250-300%, and $10 million in annual savings.\u003C/li>\u003Cli class=\"content-block-list-item\">Barclays accelerated loan approvals threefold: from 10–15 days to 3–4, reduced errors from 20% to 5%, and increased customer satisfaction to 90%.\u003C/li>\u003C/ul>\u003C/div>\u003Cdiv class=\"block-wrapper--default\">\u003Cp class=\"block-content\">What do these stories have in common? In each case, there's a focus on speed and tools that allow testing an idea before competitors have a chance to enter the market.\u003C/p>\u003C/div>\u003Cdiv class=\"block-wrapper--media\">\u003Cfigure class=\"block-content content-block-image\">\u003Cimg src=\"https://media.suddo.io/file/2f3af38f-ffaf-465d-b6b8-b927250a64dc/4c8b38f9-1b0f-4f1a-b809-1186f6031eb8/1184.webp\" alt=\"Image\" class=\"rounded-xl medium-zoom-image\" loading=\"lazy\">\u003C/figure>\u003C/div>\u003Cdiv class=\"block-wrapper--default\">\u003Cp class=\"block-content\">If you're going to vibe-code, here are five tools leading the charge:\u003C/p>\u003C/div>\u003Cdiv class=\"block-wrapper--default\">\u003Cul class=\"block-content content-block-list-unordered\">\u003Cli class=\"content-block-list-item\">\u003Ca href=https://bubble.io/ target=_blank>Bubble\u003C/a> — a builder for web applications of any complexity. It's used to build everything from marketplaces to fintech.\u003C/li>\u003Cli class=\"content-block-list-item\">\u003Ca href=https://github.com/features/copilot target=_blank>GitHub Copilot\u003C/a> — an AI assistant that writes up to 46% of your code for you.\u003C/li>\u003Cli class=\"content-block-list-item\">\u003Ca href=https://v0.app target=_blank>V0\u003C/a> — turns a text description into a ready-made interface in minutes.\u003C/li>\u003Cli class=\"content-block-list-item\">\u003Ca href=https://claude.ai/ target=_blank>Claude Artifacts\u003C/a> — creates full-fledged application prototypes on the first try.\u003C/li>\u003Cli class=\"content-block-list-item\">\u003Ca href=https://www.directual.com/ru target=_blank>Directual\u003C/a> — a low-code platform for MVPs and complex projects with API and automation.\u003C/li>\u003C/ul>\u003C/div>\u003Cdiv class=\"block-wrapper--default\">\u003Cp class=\"block-content\">These five tools are enough to build a prototype in a day and test an idea without needing a whole team.\u003C/p>\u003C/div>\u003Cdiv class=\"block-wrapper--default\">\u003Cp class=\"block-content\">Here's what it usually looks like in practice:\u003C/p>\u003C/div>\u003Cdiv class=\"block-wrapper--default\">\u003Cul class=\"block-content content-block-list-unordered\">\u003Cli class=\"content-block-list-item\">\u003Cb>Formulate the task in plain language.\u003C/b> You don't need a 50-page document. I want an expense tracking app with Google login plus a more or less clear description in natural language is enough.\u003C/li>\u003Cli class=\"content-block-list-item\">\u003Cb>Choose the right tool for the job:\u003C/b> A web app? Use Bubble or Directual. A landing page? Tilda will work. Need to connect services? Zapier or Make. Want to speed up coding? GitHub Copilot, Cursor, V0, Claude Artifacts.\u003C/li>\u003Cli class=\"content-block-list-item\">\u003Cb>Build a draft.\u003C/b> Describe the task or click blocks in the builder—you get a working interface without a single line of code.\u003C/li>\u003Cli class=\"content-block-list-item\">\u003Cb>Add basic logic.\u003C/b> Forms, buttons, a database, authorization. For anything complex, it's better to entrust it to an AI assistant.\u003C/li>\u003Cli class=\"content-block-list-item\">\u003Cb>Test it on people.\u003C/b> Launch the prototype for colleagues or friends. If the idea doesn't fly, kill it. Quick and cheap.\u003C/li>\u003C/ul>\u003C/div>\u003Cdiv class=\"block-wrapper--default\">\u003Cp class=\"block-content\">\u003Cb>Important:\u003C/b> Vibe-coding isn't about perfect architecture. It's about rapid experimentation. If a hypothesis proves successful, then you bring in a team and write the code \"for real.\"\u003C/p>\u003C/div>\u003Cdiv class=\"block-wrapper--default\">\u003Cp class=\"block-content\">\u003Cb>Pros:\u003C/b> results in an evening, cheap experiments, not just developers but also marketers and designers can get involved.\u003C/p>\u003C/div>\u003Cdiv class=\"block-wrapper--default\">\u003Cp class=\"block-content\">\u003Cb>Cons:\u003C/b> platform dependency, lack of customization, the risk of being left with a raw MVP that never makes it to production.\u003C/p>\u003C/div>\u003Cdiv class=\"block-wrapper--media\">\u003Cfigure class=\"block-content content-block-image\">\u003Cimg src=\"https://media.suddo.io/file/2f3af38f-ffaf-465d-b6b8-b927250a64dc/02cf04e5-db7b-4975-bb3f-4d5b56643c8e/1184.webp\" alt=\"Image\" class=\"rounded-xl medium-zoom-image\" loading=\"lazy\">\u003C/figure>\u003C/div>\u003Cdiv class=\"block-wrapper--default\">\u003Cul class=\"block-content content-block-list-unordered\">\u003Cli class=\"content-block-list-item\">\u003Cb>Don't try to make it pretty right away.\u003C/b> The goal is to test an idea, not to build a perfect system. Save the aesthetics and architecture for later.\u003C/li>\u003Cli class=\"content-block-list-item\">\u003Cb>Limit your time.\u003C/b> Set a deadline for yourself: No more than one evening for the prototype. This helps cut out the fluff and focus on the core.\u003C/li>\u003Cli class=\"content-block-list-item\">\u003Cb>Write down your hypotheses.\u003C/b> Before you dive into Bubble or Directual, note down exactly what you want to test. It will be easier to determine later if it worked or not.\u003C/li>\u003Cli class=\"content-block-list-item\">\u003Cb>Gather feedback immediately.\u003C/b> Don't wait for a perfect MVP. Show the prototype to colleagues, friends, or a few target users. Mistakes at this stage cost next to nothing.\u003C/li>\u003Cli class=\"content-block-list-item\">\u003Cb>Don't fall in love with the prototype.\u003C/b> Vibe-coding is about experiments. Sometimes the best strategy is to throw the project away and start over.\u003C/li>\u003Cli class=\"content-block-list-item\">\u003Cb>Think about the grown-up stage.\u003C/b> If the hypothesis is a success, be prepared for the fact that the code will have to be rewritten and the architecture rebuilt from scratch.\u003C/li>\u003C/ul>\u003C/div>\u003Cdiv class=\"block-wrapper--default\">\u003Cp class=\"block-content\">Vibe-coding isn't about laziness or \"hacker chaos.\" It's about not procrastinating and testing ideas immediately. Come up with an idea in the morning—by evening, you're already \"feeling out\" the prototype. The next day, you show it to friends or early users and figure out if it's worth pursuing or if you should pivot and move on.\u003C/p>\u003C/div>\u003Cdiv class=\"block-wrapper--default\">\u003Chr class=\"block-content content-block-delimiter\">\u003C/div>\u003Cdiv class=\"block-wrapper--default\">\u003Cp class=\"block-content\">Of course, there are downsides: platforms create lock-in, customization is limited, and AI can sometimes be sluggish. But the truth is, the market doesn't wait. And the winner isn't the one who writes the most beautiful code, but the one who tests hypotheses the fastest.\u003C/p>\u003C/div>\u003Cdiv class=\"block-wrapper--default\">\u003Cp class=\"block-content\">\u003Ca href=\"/tag/vibecoding\" target=\"_blank\" rel=\"noopener noreferrer ugc\">#vibecoding\u003C/a> \u003Ca href=\"/tag/ai\" target=\"_blank\" rel=\"noopener noreferrer ugc\">#ai\u003C/a>\u003C/p>\u003C/div>\u003C/div>",{"time":1270,"blocks":1271,"version":515},1758897513805,[1272,1276,1281,1285,1289,1292,1296,1313,1317,1321,1338,1342,1347,1351,1376,1380,1384,1409,1413,1417,1421,1426,1455,1459,1462,1466],{"id":1273,"type":24,"data":1274},"6ff08cc2-3",{"text":1275},"Yesterday: to test an idea, you had to assemble a team, write a technical specification, and spend months and a substantial amount of money.\u003Cbr data-empty=\"true\">Today: a low-code platform and a neural network are enough to throw together a working prototype in an evening based on the vibe. This is no longer a joke from developer chats—it's how products are actually launched.",{"id":1277,"type":16,"data":1278},"91f8a2d4-4",{"file":1279,"caption":20,"withBorder":21,"stretched":21,"withBackground":21},{"url":1280},"https://media.suddo.io/file/2f3af38f-ffaf-465d-b6b8-b927250a64dc/cac8e22c-b814-4595-8eec-173027534752/1184.webp",{"id":1282,"type":24,"data":1283},"b5497290-a",{"text":1284},"\"Vibe-coding\" sounds like a meme, but it's already a perfectly viable approach. The concept is simple: instead of spending weeks thinking about architecture and drawing diagrams, a developer or product manager opens an AI tool, provides a text description, and within an hour has a basic interface or even a complete application in their hands.\u003Cbr data-empty=\"true\">For example, you open Cursor, type in the chat, \"I want to create an app for tracking personal expenses,\" and half an hour later, you have a working prototype. No studying documentation, no architectural planning, no 40-page technical specifications. You simply described the task in plain language and received the code.",{"id":1286,"type":24,"data":1287},"91bca96c-b",{"text":1288},"It's actually similar to a jam session in music: you gather ideas, play \"by ear,\" and record a track. In IT, this translates into rapid MVPs, where the speed of hypothesis testing is valued more than a perfect architecture.",{"id":1290,"type":38,"data":1291},"n8XGBrJO5w",{},{"id":1293,"type":24,"data":1294},"e9a0ad74-a",{"text":1295},"Previously, building an MVP required a team, months of work, and a budget comparable to a small startup's fund. Now, things look completely different.",{"id":1297,"type":56,"data":1298},"bc5b8f5c-8",{"style":58,"meta":1299,"items":1300},{},[1301,1305,1309],{"content":1302,"meta":1303,"items":1304},"Low-code platforms eliminate routine. Ready-made blocks, visual interfaces, \"out-of-the-box\" integrations. According to Gartner, by 2025, \u003Ca href=\"https://research.aimultiple.com/low-code-statistics/\" target=\"_blank\">70% of enterprise applications will be created using low-code\u003C/a>, compared to 25% in 2020. The market is growing from \u003Ca href=\"https://www.mordorintelligence.com/industry-reports/low-code-development-platform-market\" target=\"_blank\">$26.3 billion (2025) to $67.12 billion by 2030\u003C/a>.",{},[],{"content":1306,"meta":1307,"items":1308},"Neural networks provide a powerful boost: GitHub Copilot, for example, \u003Ca href=\"https://www.wearetenet.com/blog/github-copilot-usage-data-statistics\" target=\"_blank\">speeds up task completion by 55%\u003C/a>, and up to 46% of the code in projects is written automatically.",{},[],{"content":1310,"meta":1311,"items":1312},"A new generation of tools like V0 or Claude Artifacts can turn a text description into a ready-made interface or application. Now, it's realistic to build an MVP in just a couple of hours.",{},[],{"id":1314,"type":24,"data":1315},"680f2560-c",{"text":1316},"In effect, businesses have gained an \"idea accelerator\": conceive it — build a prototype — show it to the market — gather feedback — refine.",{"id":1318,"type":24,"data":1319},"afd45b7e-b",{"text":1320},"Real-world stories demonstrate better than any forecast that \"vibe-coding\" is already a reality.",{"id":1322,"type":56,"data":1323},"b5d07ab6-2",{"style":58,"meta":1324,"items":1325},{},[1326,1330,1334],{"content":1327,"meta":1328,"items":1329},"The French marketplace Comet \u003Ca href=\"https://www.nomtek.com/blog/no-code-startups\" target=\"_blank\">was built on Bubble\u003C/a>. In three years, the startup attracted €14 million in investment and reached $800,000 in monthly revenue.",{},[],{"content":1331,"meta":1332,"items":1333},"Toyota \u003Ca href=\"https://superagi.com/case-studies-in-ai-workflow-automation-real-world-examples-of-process-optimization-and-efficiency-gains/\" target=\"_blank\">implemented an AI system\u003C/a> for predictive maintenance. The result: a 25% reduction in downtime, an ROI of 250-300%, and $10 million in annual savings.",{},[],{"content":1335,"meta":1336,"items":1337},"Barclays accelerated loan approvals threefold: from 10–15 days to 3–4, reduced errors from 20% to 5%, and increased customer satisfaction to 90%.",{},[],{"id":1339,"type":24,"data":1340},"f3382c38-5",{"text":1341},"What do these stories have in common? In each case, there's a focus on speed and tools that allow testing an idea before competitors have a chance to enter the market.",{"id":1343,"type":16,"data":1344},"2b854ed2-3",{"file":1345,"caption":20,"withBorder":21,"stretched":21,"withBackground":21},{"url":1346},"https://media.suddo.io/file/2f3af38f-ffaf-465d-b6b8-b927250a64dc/4c8b38f9-1b0f-4f1a-b809-1186f6031eb8/1184.webp",{"id":1348,"type":24,"data":1349},"4bc8a775-0",{"text":1350},"If you're going to vibe-code, here are five tools leading the charge:",{"id":1352,"type":56,"data":1353},"bdb2f7b3-4",{"style":58,"meta":1354,"items":1355},{},[1356,1360,1364,1368,1372],{"content":1357,"meta":1358,"items":1359},"\u003Ca href=\"https://bubble.io/\" target=\"_blank\">Bubble\u003C/a> — a builder for web applications of any complexity. It's used to build everything from marketplaces to fintech.",{},[],{"content":1361,"meta":1362,"items":1363},"\u003Ca href=\"https://github.com/features/copilot\" target=\"_blank\">GitHub Copilot\u003C/a> — an AI assistant that writes up to 46% of your code for you.",{},[],{"content":1365,"meta":1366,"items":1367},"\u003Ca href=\"https://v0.app\" target=\"_blank\">V0\u003C/a> — turns a text description into a ready-made interface in minutes.",{},[],{"content":1369,"meta":1370,"items":1371},"\u003Ca href=\"https://claude.ai/\" target=\"_blank\">Claude Artifacts\u003C/a> — creates full-fledged application prototypes on the \"first try.\"",{},[],{"content":1373,"meta":1374,"items":1375},"\u003Ca href=\"https://www.directual.com/ru\" target=\"_blank\">Directual\u003C/a> — a low-code platform for MVPs and complex projects with API and automation.",{},[],{"id":1377,"type":24,"data":1378},"960982a7-e",{"text":1379},"These five tools are enough to build a prototype in a day and test an idea without needing a whole team.",{"id":1381,"type":24,"data":1382},"d69a3645-f",{"text":1383},"Here's what it usually looks like in practice:",{"id":1385,"type":56,"data":1386},"989c7cb1-8",{"style":58,"meta":1387,"items":1388},{},[1389,1393,1397,1401,1405],{"content":1390,"meta":1391,"items":1392},"\u003Cb>Formulate the task in plain language.\u003C/b> You don't need a 50-page document. \"I want an expense tracking app with Google login\" plus a more or less clear description in natural language is enough.",{},[],{"content":1394,"meta":1395,"items":1396},"\u003Cb>Choose the right tool for the job:\u003C/b> A web app? Use Bubble or Directual. A landing page? Tilda will work. Need to connect services? Zapier or Make. Want to speed up coding? GitHub Copilot, Cursor, V0, Claude Artifacts.",{},[],{"content":1398,"meta":1399,"items":1400},"\u003Cb>Build a draft.\u003C/b> Describe the task or click blocks in the builder—you get a working interface without a single line of code.",{},[],{"content":1402,"meta":1403,"items":1404},"\u003Cb>Add basic logic.\u003C/b> Forms, buttons, a database, authorization. For anything complex, it's better to entrust it to an AI assistant.",{},[],{"content":1406,"meta":1407,"items":1408},"\u003Cb>Test it on people.\u003C/b> Launch the prototype for colleagues or friends. If the idea doesn't fly, kill it. Quick and cheap.",{},[],{"id":1410,"type":24,"data":1411},"75b32f37-8",{"text":1412},"\u003Cb>Important:\u003C/b> Vibe-coding isn't about perfect architecture. It's about rapid experimentation. If a hypothesis proves successful, then you bring in a team and write the code \"for real.\"",{"id":1414,"type":24,"data":1415},"4f6247db-5",{"text":1416},"\u003Cb>Pros:\u003C/b> results in an evening, cheap experiments, not just developers but also marketers and designers can get involved.",{"id":1418,"type":24,"data":1419},"b4283f14-b",{"text":1420},"\u003Cb>Cons:\u003C/b> platform dependency, lack of customization, the risk of being left with a raw MVP that never makes it to production.",{"id":1422,"type":16,"data":1423},"7466d6d7-f",{"file":1424,"caption":20,"withBorder":21,"stretched":21,"withBackground":21},{"url":1425},"https://media.suddo.io/file/2f3af38f-ffaf-465d-b6b8-b927250a64dc/02cf04e5-db7b-4975-bb3f-4d5b56643c8e/1184.webp",{"id":1427,"type":56,"data":1428},"080ce6f2-e",{"style":58,"meta":1429,"items":1430},{},[1431,1435,1439,1443,1447,1451],{"content":1432,"meta":1433,"items":1434},"\u003Cb>Don't try to \"make it pretty\" right away.\u003C/b> The goal is to test an idea, not to build a perfect system. Save the aesthetics and architecture for later.",{},[],{"content":1436,"meta":1437,"items":1438},"\u003Cb>Limit your time.\u003C/b> Set a deadline for yourself: \"No more than one evening for the prototype.\" This helps cut out the fluff and focus on the core.",{},[],{"content":1440,"meta":1441,"items":1442},"\u003Cb>Write down your hypotheses.\u003C/b> Before you dive into Bubble or Directual, note down exactly what you want to test. It will be easier to determine later if it worked or not.",{},[],{"content":1444,"meta":1445,"items":1446},"\u003Cb>Gather feedback immediately.\u003C/b> Don't wait for a perfect MVP. Show the prototype to colleagues, friends, or a few target users. Mistakes at this stage cost next to nothing.",{},[],{"content":1448,"meta":1449,"items":1450},"\u003Cb>Don't fall in love with the prototype.\u003C/b> Vibe-coding is about experiments. Sometimes the best strategy is to throw the project away and start over.",{},[],{"content":1452,"meta":1453,"items":1454},"\u003Cb>Think about the \"grown-up\" stage.\u003C/b> If the hypothesis is a success, be prepared for the fact that the code will have to be rewritten and the architecture rebuilt from scratch.",{},[],{"id":1456,"type":24,"data":1457},"2b855bc6-c",{"text":1458},"Vibe-coding isn't about laziness or \"hacker chaos.\" It's about not procrastinating and testing ideas immediately. Come up with an idea in the morning—by evening, you're already \"feeling out\" the prototype. The next day, you show it to friends or early users and figure out if it's worth pursuing or if you should pivot and move on.",{"id":1460,"type":38,"data":1461},"ZF6b_KG2br",{},{"id":1463,"type":24,"data":1464},"3c881d61-6",{"text":1465},"Of course, there are downsides: platforms create lock-in, customization is limited, and AI can sometimes be sluggish. But the truth is, the market doesn't wait. And the winner isn't the one who writes the most beautiful code, but the one who tests hypotheses the fastest.",{"id":1467,"type":24,"data":1468},"b530b031-f",{"text":1469},"#vibecoding #ai",{"authorId":414,"name":415,"avatar":416,"username":417},"SERVICES",[1473],{"emojiId":422,"count":422,"reactedByUser":21},{"comments":527,"favorites":422,"views":1475,"hits":1476},13,64,"2025-09-26T14:23:15.653","2025-09-26T14:39:18.633",{"postId":1480,"title":1481,"slug":1482,"preview":1483,"html":1484,"content":1485,"author":1526,"authorUsername":1530,"topic":1531,"status":419,"reactions":1532,"counters":1534,"createdAt":1537,"updatedAt":1538,"publishedPostId":433,"favorite":21},"c645f9ca-1315-4590-aafa-03ebd88bb9aa","Germany proposes to pay schoolchildren €10 monthly and the profit from investing this money as an “early pension”","661995-germany-proposes-to-pay-schoolchildren-10-monthly-and-profit-from-investing-as-early-pension","\u003Cdiv class=\"block-wrapper--default\">\u003Cp class=\"block-content\">Income tax will not be levied until retirement. \u003C/p>\u003C/div>\u003Cdiv class=\"block-wrapper--media\">\u003Cfigure class=\"block-content content-block-image\">\u003Cimg src=\"https://media.suddo.io/file/2f3af38f-ffaf-465d-b6b8-b927250a64dc/89d03129-157e-44d5-9cc0-e1c73f2482bc/1184.webp\" alt=\"Image source: Wikipedia\" class=\"rounded-xl medium-zoom-image\" loading=\"lazy\">\u003C/figure>\u003Cspan class=\"caption-text text-sm mt-3\">Image source: Wikipedia\u003C/span>\u003C/div>","\u003Cdiv class=\"content-wrapper break-words\">\u003Cdiv class=\"block-wrapper--default\">\u003Cp class=\"block-content\">Income tax will not be levied until retirement. \u003C/p>\u003C/div>\u003Cdiv class=\"block-wrapper--default\">\u003Cul class=\"block-content content-block-list-unordered\">\u003Cli class=\"content-block-list-item\">It is proposed to accrue an early pension for students aged six to 18 into a special account, writes CNBC. Over their entire period of study, they could accumulate around €1500.\u003C/li>\u003Cli class=\"content-block-list-item\">They plan to finance the program using state fund budgets. Who will be responsible for investing the money deposited into the accounts, what instruments they plan to invest in, and what the potential accumulated sum with interest might be by retirement – is currently unknown.\u003C/li>\u003Cli class=\"content-block-list-item\">After reaching adulthood, a German citizen will be able to transfer personal funds to the account, among other things, within annual limits. However, withdrawing the money will only be permitted upon reaching retirement age.\u003C/li>\u003Cli class=\"content-block-list-item\">German authorities expect that the measure will provide future pensioners with starting capital and also help increase the awareness of the young population regarding savings and investments.\u003C/li>\u003Cli class=\"content-block-list-item\">Some experts surveyed by CNBC believe that the final amounts will be symbolic and are not confident that this program will increase the level of financial literacy among young people, as they will only passively receive money and interest. Investment decisions will be entrusted to third parties.\u003C/li>\u003C/ul>\u003C/div>\u003Cdiv class=\"block-wrapper--media\">\u003Cfigure class=\"block-content content-block-image\">\u003Cimg src=\"https://media.suddo.io/file/2f3af38f-ffaf-465d-b6b8-b927250a64dc/89d03129-157e-44d5-9cc0-e1c73f2482bc/1184.webp\" alt=\"Image source: Wikipedia\" class=\"rounded-xl medium-zoom-image\" loading=\"lazy\">\u003C/figure>\u003Cspan class=\"caption-text text-sm mt-3\">Image source: Wikipedia\u003C/span>\u003C/div>\u003Cdiv class=\"block-wrapper--default\">\u003Cp class=\"block-content\">\u003Ca href=\"/tag/news\" target=\"_blank\" rel=\"noopener noreferrer ugc\">#news\u003C/a>\u003C/p>\u003C/div>\u003C/div>",{"time":1486,"blocks":1487,"version":412},1748763200770,[1488,1492,1517,1523],{"id":1489,"type":24,"data":1490},"488pMe3Y7I",{"text":1491},"Income tax will not be levied until retirement. ",{"id":1493,"type":56,"data":1494},"Pr_-MxIPwc",{"style":58,"meta":1495,"items":1496},{},[1497,1501,1505,1509,1513],{"content":1498,"meta":1499,"items":1500},"It is proposed to accrue an \"early pension\" for students aged six to 18 into a special account, writes CNBC. Over their entire period of study, they could accumulate around €1500.",{},[],{"content":1502,"meta":1503,"items":1504},"They plan to finance the program using state fund budgets. Who will be responsible for investing the money deposited into the accounts, what instruments they plan to invest in, and what the potential accumulated sum with interest might be by retirement – is currently unknown.",{},[],{"content":1506,"meta":1507,"items":1508},"After reaching adulthood, a German citizen will be able to transfer personal funds to the account, among other things, within annual limits. However, withdrawing the money will only be permitted upon reaching retirement age.",{},[],{"content":1510,"meta":1511,"items":1512},"German authorities expect that the measure will provide \"future pensioners\" with \"starting capital\" and also help increase the awareness of the young population regarding savings and investments.",{},[],{"content":1514,"meta":1515,"items":1516},"Some experts surveyed by CNBC believe that the final amounts will be \"symbolic\" and are not confident that this program will increase the level of financial literacy among young people, as they will only \"passively\" receive money and interest. Investment decisions will be entrusted to third parties.",{},[],{"id":1518,"type":16,"data":1519},"3K7fqpMSyw",{"file":1520,"caption":1522,"withBorder":21,"stretched":21,"withBackground":21},{"url":1521},"https://media.suddo.io/file/2f3af38f-ffaf-465d-b6b8-b927250a64dc/89d03129-157e-44d5-9cc0-e1c73f2482bc/1184.webp","Image source: Wikipedia",{"id":1524,"type":24,"data":1525},"om-3KOYEil",{"text":1203},{"authorId":1527,"name":1528,"avatar":1529,"username":1530},"bXyJq2SEceaJYmv2nKAKx3pQvAJ3","Volha Mamrouskaya","https://imagedelivery.net/GddChH1E0WF04e4jdxRnoA/bbfdfbc9-2aac-4c90-e721-73e91dc1bb00/public","id357938428483","MONEY",[1533],{"emojiId":422,"count":422,"reactedByUser":21},{"comments":527,"favorites":422,"views":1535,"hits":1536},92,160,"2025-06-01T07:30:52.526","2025-06-01T07:54:15.91",["Reactive",1540],{"$si18n:cached-locale-configs":1541,"$si18n:resolved-locale":20,"$sshowLoginModal":21},{},["Set"],["ShallowReactive",1544],{"feed-tag-none-none-hot-money-0":-1},true,"/tag/money",{"auth":1548,"app":1549,"theme":1550,"main":1638,"i18n":1640,"ui":1644},{"logged":21,"user":433,"authReady":21},{"lastUpdatedPostId":433,"lastUpdateTime":433},{"layout":1551,"themeName":1552,"routerTransition":1553,"routerTransitionDuration":527,"rtl":21,"boxed":1554,"sidebar":1556,"footer":1561,"responsive":1562,"toolbarHeight":1569,"viewPadding":1566,"headerBarHeight":1571,"colors":1572,"borderRadius":1600,"lineHeight":1603,"fontSize":1605,"fontWeight":1608,"fontFamily":1611,"typography":1613,"isThemeSetByUser":21},"VerticalNav","light","fade-up",{"enabled":1545,"toolbar":1545,"width":1555},1600,{"autoClose":1545,"collapsed":21,"autoCloseBreakpoint":1557,"animEase":1558,"animDuration":1559,"openWidth":1560,"closeWidth":1476},1000,"ease-in-out",0.3,300,{"show":1545},{"breakpoint":1563,"override":1564},700,{"viewPadding":1565,"toolbarHeight":1568},{"desk":1566,"mobile":1567},40,20,{"desk":1569,"mobile":1570},80,70,60,{"light":1573,"dark":1588},{"sidebarBackground":1574,"bodyBackground":1575,"background":1574,"backgroundSecondary":1576,"text":1577,"textSecondary":1578,"textTertiary":1579,"border":1580,"hover":1581,"primary":1582,"info":1583,"success":1584,"warning":1585,"error":1586,"extra1":1583,"extra2":1587,"extra3":1585,"extra4":1586},"rgb(255, 255, 255)","rgb(245, 247, 249)","#F2F2F2","rgb(0, 0, 0)","#000","rgb(114, 115, 115)","rgb(226, 230, 233)","rgba(221, 224, 225, 0.5)","hsl(221.2, 83.2%, 53.3%)","rgb(97, 102, 255)","rgb(0, 179, 122)","rgb(255, 183, 0)","rgb(255, 0, 85)","rgb(255, 97, 200)",{"sidebarBackground":1589,"bodyBackground":1590,"background":1589,"backgroundSecondary":1591,"text":1592,"textSecondary":1593,"textTertiary":1594,"border":1595,"hover":1596,"primary":1597,"info":1583,"success":1598,"warning":1585,"error":1599,"extra1":1583,"extra2":1587,"extra3":1585,"extra4":1586},"rgb(35, 35, 36)","rgb(22, 22, 23)","rgb(44, 44, 45)","rgb(201, 204, 207)","#c9cccf","rgb(150, 157, 160)","rgb(53, 52, 54)","rgb(58, 58, 58)","rgb(65, 138, 244)","rgb(51, 160, 62)","rgb(214, 51, 62)",{"default":1601,"small":1602},"8px","4px",{"default":1604},"1.25",{"default":1606,"cardTitle":1607},"16px","18px",{"default":1609,"strong":1610,"cardTitle":1610},"400","600",{"default":1612,"display":1612,"mono":1612},"Roboto, system-ui, -apple-system, Segoe UI, Roboto, Ubuntu, Cantarell, Noto Sans, sans-serif",{"h1":1614,"h2":1619,"h3":1622,"h4":1625,"h5":1628,"h6":1631,"p":1635},{"fontFamily":1615,"fontSize":1616,"fontWeight":1617,"lineHeight":1618},"{fontFamily.display}","30px","700","38",{"fontFamily":1615,"fontSize":1620,"fontWeight":1617,"lineHeight":1621},"26px","33",{"fontFamily":1615,"fontSize":1623,"fontWeight":1617,"lineHeight":1624},"22px","28",{"fontFamily":1615,"fontSize":1607,"fontWeight":1626,"lineHeight":1627},"500","23",{"fontFamily":1615,"fontSize":1629,"fontWeight":1617,"lineHeight":1630},"14px","18",{"fontFamily":1632,"fontSize":1633,"fontWeight":1626,"lineHeight":1634},"{fontFamily.default}","12px","15",{"fontFamily":1632,"fontSize":1636,"lineHeight":1637},"{fontSize.default}","20",{"API_URL":-1,"forceRefresh":1639,"loadingBar":433},1760429470372,{"locale":1641,"availableLocales":1643},["Ref",1642],"en",[1642],{"feedRefreshKey":527}]