{"id":25270,"date":"2025-07-11T16:30:00","date_gmt":"2025-07-11T13:30:00","guid":{"rendered":"https:\/\/forklog.com\/en\/ai-in-it-which-free-ai-model-writes-the-best-code\/"},"modified":"2025-07-11T16:30:00","modified_gmt":"2025-07-11T13:30:00","slug":"ai-in-it-which-free-ai-model-writes-the-best-code","status":"publish","type":"post","link":"https:\/\/forklog.com\/en\/ai-in-it-which-free-ai-model-writes-the-best-code\/","title":{"rendered":"AI in IT: which free AI model writes the best code"},"content":{"rendered":"<p>Contrary to popular belief, cutting-edge AI tools slow experienced software developers down when they work with familiar codebases, rather than speeding them up. That is the finding of a new <a href=\"https:\/\/metr.org\/blog\/2025-07-10-early-2025-ai-experienced-os-dev-study\/\" target=\"_blank\" rel=\"noopener\" title=\"\">study<\/a> by the non-profit research group METR.<\/p>\n<p>Researchers tracked a cohort of seasoned developers using the popular AI assistant Cursor on open-source projects. The expectation was a 24% reduction in task time thanks to AI.<\/p>\n<p>Even after the study, developers believed the language model cut task time by 20%. In reality, time increased by 19%.<\/p>\n<p>The results call into question the widely held view that AI always delivers big productivity gains for strong engineers. The slowdown stems from the need to check and correct the model\u2019s suggestions.<\/p>\n<p>Despite the longer development time, most participants\u2014and the study\u2019s authors\u2014keep using Cursor because the process feels less tiring and more pleasant with AI.<\/p>\n<p>For those who agree, ForkLog tested and compiled a detailed analysis of the programming capabilities of three popular models: Grok, ChatGPT and DeepSeek.<\/p>\n<p><em>Spoiler: Grok came out on top.<\/em><\/p>\n<h1 class=\"wp-block-heading\"><strong>Which model will write your code best?<\/strong><\/h1>\n<p><strong><em>Task:<\/em><\/strong> ask a model to write a Python REST API server for a To\u2011Do List app with create, read, update and delete (CRUD). Data should live in memory (no database). The model must produce working code and explain it.<\/p>\n<p>APIs are everywhere\u2014from mobile apps to websites. When you check the weather in an app, it uses a REST API to fetch data from a server. A To\u2011Do List REST API lets an app add, show, edit or delete a task.<\/p>\n<p><strong><em>Prompt:<\/em><\/strong><em> <\/em><\/p>\n<blockquote class=\"wp-block-quote is-layout-flow wp-block-quote-is-layout-flow\">\n<p><em>\u201cWrite a REST API server in Python using Flask or FastAPI for a To\u2011Do List app. The server must support creating, retrieving, updating and deleting tasks (CRUD). Store tasks in memory (no database). The code should be readable and understandable. Explain simply how the code works and how it can be tested.\u201d<\/em><\/p>\n<\/blockquote>\n<h2 class=\"wp-block-heading\"><strong>Grok<\/strong><\/h2>\n<p><strong>Code fragment:<\/strong><\/p>\n<blockquote class=\"wp-block-quote is-layout-flow wp-block-quote-is-layout-flow\">\n<p># Create a FastAPI app instance<\/p>\n<p>app = FastAPI(title=&#8221;To-Do List API&#8221;)<\/p>\n<p># Task model (defines what data a task must contain)<\/p>\n<p>class Task(BaseModel):<\/p>\n<p>\u00a0\u00a0\u00a0\u00a0id: int<\/p>\n<p>\u00a0\u00a0\u00a0\u00a0title: str<\/p>\n<p>\u00a0\u00a0\u00a0\u00a0description: str | None = None\u00a0 # Description is optional<\/p>\n<p>\u00a0\u00a0\u00a0\u00a0completed: bool = False\u00a0 # By default a task is not completed<\/p>\n<p># In-memory task store (list of tasks)<\/p>\n<p>tasks: List[Task] = []<\/p>\n<\/blockquote>\n<p><a href=\"https:\/\/github.com\/Atulupn\/AI-Code-Comparison\/blob\/main\/grok.py\" target=\"_blank\" rel=\"noopener\" title=\"\">Full code<\/a> \u2014 64 lines.<\/p>\n<p><strong>How it works<\/strong><\/p>\n<figure class=\"wp-block-image\"><img decoding=\"async\" src=\"https:\/\/lh7-qw.googleusercontent.com\/docsz\/AD_4nXeSgZj7nYNNoNB197CamSoq0sX9Z76Cj74CCiQ9eZzM4znOV-sNOqzXFOoMXIBxo8e-_NBb7BCQvj2c0OW7xqBhB_0r1sXrW8OXvGfCH21kOMdwp1SfWGNzvpgWK-dSqdo0i1cvpg?key=pJK-I_oK5RM3Ki3aEuT3VA\" alt=\"\u0418\u0418 \u0432 IT: \u0432\u044b\u044f\u0441\u043d\u044f\u0435\u043c, \u043a\u0430\u043a\u0430\u044f \u0438\u0437 \u0431\u0435\u0441\u043f\u043b\u0430\u0442\u043d\u044b\u0445 \u043d\u0435\u0439\u0440\u043e\u0441\u0435\u0442\u0435\u0439 \u043b\u0443\u0447\u0448\u0435 \u043f\u0438\u0448\u0435\u0442 \u043a\u043e\u0434\"\/><\/figure>\n<figure class=\"wp-block-image\"><img decoding=\"async\" src=\"https:\/\/lh7-qw.googleusercontent.com\/docsz\/AD_4nXc7aCaMwQlqTcJVjnSI-R7ovWaQuf3AFdd_MO5xdOmUuDfPl_tyqZWBvBNNo5Fj7aDQSOAcnpl_WIvdf5xZsqmCGeTSCVjri4qWJQHvC0mUlCHrH-iO0TdENhypna_ZJRwiXcIKYQ?key=pJK-I_oK5RM3Ki3aEuT3VA\" alt=\"\u0418\u0418 \u0432 IT: \u0432\u044b\u044f\u0441\u043d\u044f\u0435\u043c, \u043a\u0430\u043a\u0430\u044f \u0438\u0437 \u0431\u0435\u0441\u043f\u043b\u0430\u0442\u043d\u044b\u0445 \u043d\u0435\u0439\u0440\u043e\u0441\u0435\u0442\u0435\u0439 \u043b\u0443\u0447\u0448\u0435 \u043f\u0438\u0448\u0435\u0442 \u043a\u043e\u0434\"\/><figcaption class=\"wp-element-caption\">Data: Grok.<\/figcaption><\/figure>\n<p><strong>Result:<\/strong> the server started and the API behaved as expected. Submit a task and it appears in the list.<\/p>\n<figure class=\"wp-block-image\"><img decoding=\"async\" src=\"https:\/\/lh7-qw.googleusercontent.com\/docsz\/AD_4nXcHKXDmq2EZOaI-WfFN5riAMn9TP0dlyWPhy0xpr-9VOyMFNTadzVhNECDwpnCP_vAANSnspxswNsqcW0y1A8QBjlZDLHRli_av7ViAlKdjFmy13m4DvC2Jbcn9tIs6tuQ5h3zjAQ?key=pJK-I_oK5RM3Ki3aEuT3VA\" alt=\"\u0418\u0418 \u0432 IT: \u0432\u044b\u044f\u0441\u043d\u044f\u0435\u043c, \u043a\u0430\u043a\u0430\u044f \u0438\u0437 \u0431\u0435\u0441\u043f\u043b\u0430\u0442\u043d\u044b\u0445 \u043d\u0435\u0439\u0440\u043e\u0441\u0435\u0442\u0435\u0439 \u043b\u0443\u0447\u0448\u0435 \u043f\u0438\u0448\u0435\u0442 \u043a\u043e\u0434\"\/><\/figure>\n<figure class=\"wp-block-image\"><img decoding=\"async\" src=\"https:\/\/lh7-qw.googleusercontent.com\/docsz\/AD_4nXemnsmWjRW0-CcxevH6TPn8z_LiV1Iu57si4ECizXcdcQOMNb3ZaKcGjFie45zCc8WiHxRCvGSPQOfNdlsDL-HFPcMV8jxEuHJPMIVpRfmKl4GEaXi6_dYuvyHHuH6Eb04hLakEWw?key=pJK-I_oK5RM3Ki3aEuT3VA\" alt=\"\u0418\u0418 \u0432 IT: \u0432\u044b\u044f\u0441\u043d\u044f\u0435\u043c, \u043a\u0430\u043a\u0430\u044f \u0438\u0437 \u0431\u0435\u0441\u043f\u043b\u0430\u0442\u043d\u044b\u0445 \u043d\u0435\u0439\u0440\u043e\u0441\u0435\u0442\u0435\u0439 \u043b\u0443\u0447\u0448\u0435 \u043f\u0438\u0448\u0435\u0442 \u043a\u043e\u0434\"\/><figcaption class=\"wp-element-caption\">Data: Anton Tulupnikov.<\/figcaption><\/figure>\n<p><strong>How Grok rates its own work:<\/strong><\/p>\n<blockquote class=\"wp-block-quote is-layout-flow wp-block-quote-is-layout-flow\">\n<p><em>\u201cCode: 8\/10 \u2014 I wrote a simple, readable REST API with CRUD, but validation (for example, for title) and edge\u2011case handling could be added. Explanation: 9\/10 \u2014 I described how the code and testing work in detail; everything is structured and clear, though it could be a bit shorter. Overall: 8.5\/10 \u2014 the task is done well, with some room for improvement.\u201d<\/em><\/p>\n<\/blockquote>\n<h2 class=\"wp-block-heading\"><strong>DeepSeek<\/strong><\/h2>\n<p><strong>Code fragment:<\/strong><\/p>\n<blockquote class=\"wp-block-quote is-layout-flow wp-block-quote-is-layout-flow\">\n<p># Create a FastAPI app instance<\/p>\n<p>app = FastAPI()<\/p>\n<p># Class describing the task structure (data model)<\/p>\n<p>class Task(BaseModel):<\/p>\n<p>\u00a0\u00a0\u00a0\u00a0id: int<\/p>\n<p>\u00a0\u00a0\u00a0\u00a0title: str<\/p>\n<p>\u00a0\u00a0\u00a0\u00a0description: Optional[str] = None\u00a0 # Description is optional<\/p>\n<p>\u00a0\u00a0\u00a0\u00a0completed: bool = False\u00a0 # By default a task is not completed<\/p>\n<p># In\u2011memory \u201cdatabase\u201d \u2014 just a list of tasks<\/p>\n<p>tasks_db = []<\/p>\n<p>current_id = 1\u00a0 # Counter for generating unique IDs<\/p>\n<\/blockquote>\n<p><a href=\"https:\/\/github.com\/Atulupn\/AI-Code-Comparison\/blob\/main\/deepseek_python_20250703_9519ea%20(1).py\" target=\"_blank\" rel=\"noopener\" title=\"\">Full code<\/a> runs to 56 lines.<\/p>\n<p><strong>How it works<\/strong><\/p>\n<figure class=\"wp-block-image\"><img decoding=\"async\" src=\"https:\/\/lh7-qw.googleusercontent.com\/docsz\/AD_4nXeqN7fVSrhypBMaegrBYssVWXJHuYJ8uIY_L09azwwNBJ_w39-Ki0DFqmsX-p-BM-Cns_Q6H2uxn1ioK6eqjygmFL-s9XFLGp9sZcfemtL0xsKM0Ibgpgl3A9SD-cBRtIZ56Vsccg?key=pJK-I_oK5RM3Ki3aEuT3VA\" alt=\"\u0418\u0418 \u0432 IT: \u0432\u044b\u044f\u0441\u043d\u044f\u0435\u043c, \u043a\u0430\u043a\u0430\u044f \u0438\u0437 \u0431\u0435\u0441\u043f\u043b\u0430\u0442\u043d\u044b\u0445 \u043d\u0435\u0439\u0440\u043e\u0441\u0435\u0442\u0435\u0439 \u043b\u0443\u0447\u0448\u0435 \u043f\u0438\u0448\u0435\u0442 \u043a\u043e\u0434\"\/><figcaption class=\"wp-element-caption\">Data: DeepSeek.<\/figcaption><\/figure>\n<p><strong>Result:<\/strong> DeepSeek ran into trouble. Creating a task returned a 422 error (the server received the data but could not process it due to a format mismatch). The code requires an id to be provided when creating a task:<\/p>\n<blockquote class=\"wp-block-quote is-layout-flow wp-block-quote-is-layout-flow\">\n<p># Class describing the task structure (data model)<\/p>\n<p>class Task(BaseModel):<\/p>\n<p>\u00a0\u00a0\u00a0\u00a0id: int<\/p>\n<p>\u00a0\u00a0\u00a0\u00a0title: str<\/p>\n<p>\u00a0\u00a0\u00a0\u00a0description: Optional[str] = None\u00a0 # Description is optional<\/p>\n<p>\u00a0\u00a0\u00a0\u00a0completed: bool = False\u00a0 # By default a task is not completed<\/p>\n<\/blockquote>\n<p>but logically the id should be generated automatically (that is what the line task.id = current_id in create_task does). On the second attempt the model removed the extra line, and the function then worked correctly:<\/p>\n<figure class=\"wp-block-image\"><img decoding=\"async\" src=\"https:\/\/lh7-qw.googleusercontent.com\/docsz\/AD_4nXfYnsiTpzwoD29InEDayf46wJrHC57SdIuGhDLx_A4h5VspC32YM-OLhlx0Ox3yPgOmNlauafR7aFhLmL4WRjRlVmBcXZctMKAvqtAzfpgY8gtUIVGSVFjGJHzaDCknlkFLhPn2?key=pJK-I_oK5RM3Ki3aEuT3VA\" alt=\"\u0418\u0418 \u0432 IT: \u0432\u044b\u044f\u0441\u043d\u044f\u0435\u043c, \u043a\u0430\u043a\u0430\u044f \u0438\u0437 \u0431\u0435\u0441\u043f\u043b\u0430\u0442\u043d\u044b\u0445 \u043d\u0435\u0439\u0440\u043e\u0441\u0435\u0442\u0435\u0439 \u043b\u0443\u0447\u0448\u0435 \u043f\u0438\u0448\u0435\u0442 \u043a\u043e\u0434\"\/><figcaption class=\"wp-element-caption\">Data: Anton Tulupnikov.<\/figcaption><\/figure>\n<p><strong><em>How DeepSeek rates its work:<\/em><\/strong><\/p>\n<blockquote class=\"wp-block-quote is-layout-flow wp-block-quote-is-layout-flow\">\n<p><em>\u201cCode: 8\/10. I fixed the critical id bug and made task creation logic reliable. Could be improved by adding persistence to a file (so tasks survive restarts). Explanation: 9\/10. Simple, step\u2011by\u2011step instructions. Could be improved with more error examples and visuals. Verdict: Did well, but room to grow! Thanks for the trust!\u201d<\/em><\/p>\n<\/blockquote>\n<h2 class=\"wp-block-heading\"><strong>ChatGPT<\/strong><\/h2>\n<p><strong>Code fragment:<\/strong><\/p>\n<blockquote class=\"wp-block-quote is-layout-flow wp-block-quote-is-layout-flow\">\n<p># Temporary in\u2011memory store of tasks<\/p>\n<p>tasks: List[Task] = []<\/p>\n<p># Get all tasks<\/p>\n<p>@app.get(&#8220;\/tasks&#8221;, response_model=List[Task])<\/p>\n<p>def get_tasks():<\/p>\n<p>\u00a0\u00a0\u00a0\u00a0return tasks<\/p>\n<p># Get a task by ID<\/p>\n<p>@app.get(&#8220;\/tasks\/{task_id}&#8221;, response_model=Task)<\/p>\n<p>def get_task(task_id: int):<\/p>\n<p>\u00a0\u00a0\u00a0\u00a0for task in tasks:<\/p>\n<p>\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0if task.id == task_id:<\/p>\n<p>\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0return task<\/p>\n<p>\u00a0\u00a0\u00a0\u00a0raise HTTPException(status_code=404, detail=&#8221;Task not found&#8221;)<\/p>\n<\/blockquote>\n<p><a href=\"https:\/\/github.com\/Atulupn\/AI-Code-Comparison\/blob\/main\/gpt.py\" target=\"_blank\" rel=\"noopener\" title=\"\">Full code<\/a> from GPT \u2014 57 lines.<\/p>\n<p><strong>How it works<\/strong><strong><\/strong><\/p>\n<p>Data: ChatGPT.<\/p>\n<p><strong>Result:<\/strong> the server and all functions work properly.<\/p>\n<figure class=\"wp-block-image\"><img decoding=\"async\" src=\"https:\/\/lh7-qw.googleusercontent.com\/docsz\/AD_4nXfTnUrQ2t651UBgWX2G_r737JGJQHZaCHWSXEF9dXxNobkStoXOYYXpHczjg1q2rFy6LnZ5yJYrALuXaGeVas-s95BMEiq1VHUpNcGCzyugoAaOBdH_oddHBJ3CDTT8Ac6ew6TB3Q?key=pJK-I_oK5RM3Ki3aEuT3VA\" alt=\"\u0418\u0418 \u0432 IT: \u0432\u044b\u044f\u0441\u043d\u044f\u0435\u043c, \u043a\u0430\u043a\u0430\u044f \u0438\u0437 \u0431\u0435\u0441\u043f\u043b\u0430\u0442\u043d\u044b\u0445 \u043d\u0435\u0439\u0440\u043e\u0441\u0435\u0442\u0435\u0439 \u043b\u0443\u0447\u0448\u0435 \u043f\u0438\u0448\u0435\u0442 \u043a\u043e\u0434\"\/><figcaption class=\"wp-element-caption\">Data: Anton Tulupnikov.<\/figcaption><\/figure>\n<p><strong><em>How GPT rates its results:<\/em><\/strong><\/p>\n<blockquote class=\"wp-block-quote is-layout-flow wp-block-quote-is-layout-flow\">\n<p><em>\u201cCode: clean, simple, consistent with FastAPI best practices and the CRUD brief. Explanation: clear, step\u2011by\u2011step, with examples and alternatives (Swagger, curl). Score: 9.5\/10 \u2014 well balanced for a beginner: minimal code, maximum value. If there\u2019s anything to improve, I\u2019m happy to advise or refine.\u201d<\/em><\/p>\n<\/blockquote>\n<h2 class=\"wp-block-heading\"><strong>Interim verdict<\/strong><\/h2>\n<p>Each model produced working code with comments and explanations. ChatGPT and Grok did so at the first attempt; their Chinese rival did it on the second try and took a bit longer. All three used FastAPI, saying it is simpler and more modern than Flask. ChatGPT, Grok and DeepSeek also added error handling, although that was not in the prompt.<\/p>\n<p>Each \u201csubject\u201d explained how to run the server and test it. Grok\u2019s explanation is the most complete and comprehensible: it details how every function works\u2014server start\u2011up, FastAPI, in\u2011memory storage, error handling. DeepSeek was more laconic; ChatGPT kept it to a few words.<\/p>\n<p><em>Scores on a three\u2011point scale:<\/em><\/p>\n<figure class=\"wp-block-table\">\n<table>\n<tbody>\n<tr>\n<td><strong>Model<\/strong><\/td>\n<td><strong>Code functionality<\/strong><\/td>\n<td><strong>Clarity of explanations<\/strong><\/td>\n<td><strong>Code readability<\/strong><\/td>\n<\/tr>\n<tr>\n<td>Grok<\/td>\n<td>3<\/td>\n<td>3<\/td>\n<td>3<\/td>\n<\/tr>\n<tr>\n<td>DeepSeek<\/td>\n<td>2<\/td>\n<td>2<\/td>\n<td>3<\/td>\n<\/tr>\n<tr>\n<td>ChatGPT<\/td>\n<td>3<\/td>\n<td>1<\/td>\n<td>3<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<\/figure>\n<h1 class=\"wp-block-heading\"><strong>Broken code? You needn\u2019t fix it by hand<\/strong><\/h1>\n<p><strong><em>Task:<\/em><\/strong> analyse and fix poorly written JavaScript for a function that creates a simple web animation (for example, a moving square that changes colour).<\/p>\n<p><strong><em>Prompt<\/em>:<\/strong><\/p>\n<blockquote class=\"wp-block-quote is-layout-flow wp-block-quote-is-layout-flow\">\n<p><em>\u201cHere is some JavaScript (above). It\u2019s a function to animate a moving square on an HTML Canvas. Find the bugs, explain what\u2019s wrong and write a corrected version. If possible, optimise the code, add canvas boundary checks, the ability to stop the animation and comments. Explain your changes and how to run the animation.\u201d<\/em><\/p>\n<\/blockquote>\n<p><strong>Buggy code fragment:<\/strong><\/p>\n<blockquote class=\"wp-block-quote is-layout-flow wp-block-quote-is-layout-flow\">\n<p>setInterval(function() {<\/p>\n<p>\u00a0\u00a0\u00a0\u00a0context.fillStyle = &#8220;white&#8221;;<\/p>\n<p>\u00a0\u00a0\u00a0\u00a0for (var i = 0; i < snowflakes.length; i++) {<\/p>\n<p>\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0context.beginPath();<\/p>\n<p>\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0context.arc(snowflakes[i].x, snowflakes[i].y, 5, 0, Math.PI * 2);<\/p>\n<p>\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0context.fill();<\/p>\n<p>\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0snowflakes[i].y = snowflakes[i].y + snowflakes[i].speed;<\/p>\n<p>\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0if (snowflakes[i].y > 150) {<\/p>\n<p>\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0snowflakes[i].y = 0;<\/p>\n<\/blockquote>\n<p><a href=\"https:\/\/github.com\/Atulupn\/AI-Code-Comparison\/blob\/main\/function%20startSnowfall()%20%7B.js\" target=\"_blank\" rel=\"noopener\" title=\"\">Full code<\/a> was written without comments and contains errors.<\/p>\n<p>Here is the animation:<\/p>\n<figure class=\"wp-block-image\"><img decoding=\"async\" src=\"https:\/\/lh7-qw.googleusercontent.com\/docsz\/AD_4nXfjVHqQrYNbWm2v7Mdg7qlytTBRO5rgXPgEnIiFSMSq3LohVJsmMKI9iyyYYnq47vRt4ipUIJK65F-ZS7Fl_fomysX5kyb7JGwJCshHPpavwOoY73fAXqVbaWi_1q6V2b9gNuntVg?key=pJK-I_oK5RM3Ki3aEuT3VA\" alt=\"\u0418\u0418 \u0432 IT: \u0432\u044b\u044f\u0441\u043d\u044f\u0435\u043c, \u043a\u0430\u043a\u0430\u044f \u0438\u0437 \u0431\u0435\u0441\u043f\u043b\u0430\u0442\u043d\u044b\u0445 \u043d\u0435\u0439\u0440\u043e\u0441\u0435\u0442\u0435\u0439 \u043b\u0443\u0447\u0448\u0435 \u043f\u0438\u0448\u0435\u0442 \u043a\u043e\u0434\"\/><figcaption class=\"wp-element-caption\">Data: Anton Tulupnikov.<\/figcaption><\/figure>\n<h2 class=\"wp-block-heading\"><strong>Grok<\/strong><\/h2>\n<p><strong>Problems flagged in the code:<\/strong><\/p>\n<figure class=\"wp-block-image\"><img decoding=\"async\" src=\"https:\/\/lh7-qw.googleusercontent.com\/docsz\/AD_4nXd-5z1YRDq0QXDBzzi04dvOfwylVaX74dfTXgt2ZnKlN-tr421-d2LP5HkrfwYOUJ1yrwfgaZW8hlTTIRVHsacNPUlY9NnkF2yqLQmNrvoUH7_6BVMggoWoDlpuZk9p-SgyF0zg?key=pJK-I_oK5RM3Ki3aEuT3VA\" alt=\"\u0418\u0418 \u0432 IT: \u0432\u044b\u044f\u0441\u043d\u044f\u0435\u043c, \u043a\u0430\u043a\u0430\u044f \u0438\u0437 \u0431\u0435\u0441\u043f\u043b\u0430\u0442\u043d\u044b\u0445 \u043d\u0435\u0439\u0440\u043e\u0441\u0435\u0442\u0435\u0439 \u043b\u0443\u0447\u0448\u0435 \u043f\u0438\u0448\u0435\u0442 \u043a\u043e\u0434\"\/><figcaption class=\"wp-element-caption\">Data: Grok.<\/figcaption><\/figure>\n<p>The model found ten issues, including poor performance (use of setInterval instead of requestAnimationFrame), no checks on flake speeds and duplicated drawing.<\/p>\n<p><strong>Result:<\/strong> despite a less\u2011than\u2011clear prompt, Grok<a href=\"https:\/\/github.com\/Atulupn\/AI-Code-Comparison\/blob\/main\/groksnowfall.js\" target=\"_blank\" rel=\"noopener\" title=\"\"> rewrote the code<\/a> so the animation looks respectable:<\/p>\n<figure class=\"wp-block-image\"><img decoding=\"async\" src=\"https:\/\/lh7-qw.googleusercontent.com\/docsz\/AD_4nXdzJxzAAPMayotyLqS-19XHBBdE6xcmjJCg-Fr9D2CiNPLW-YqgMW0uXp_vaTwM7YgHbHVUen_Px6Iu3bJYB65oeFcgzRwU6S8oH_jtJm1cKvp0PNigm8CUt66nnSUsmuUquvqt?key=pJK-I_oK5RM3Ki3aEuT3VA\" alt=\"\u0418\u0418 \u0432 IT: \u0432\u044b\u044f\u0441\u043d\u044f\u0435\u043c, \u043a\u0430\u043a\u0430\u044f \u0438\u0437 \u0431\u0435\u0441\u043f\u043b\u0430\u0442\u043d\u044b\u0445 \u043d\u0435\u0439\u0440\u043e\u0441\u0435\u0442\u0435\u0439 \u043b\u0443\u0447\u0448\u0435 \u043f\u0438\u0448\u0435\u0442 \u043a\u043e\u0434\"\/><figcaption class=\"wp-element-caption\">Data: Anton Tulupnikov.<\/figcaption><\/figure>\n<p>One quibble: the code does not handle window resizing\u2014if the browser window changes size, the canvas dimensions remain fixed. That can cause incorrect rendering on large screens. In the same answer the model suggested adding a resize handler if needed.<\/p>\n<p><strong>Grok\u2019s comment:<\/strong><\/p>\n<blockquote class=\"wp-block-quote is-layout-flow wp-block-quote-is-layout-flow\">\n<p><em>\u201cI handled it well: identified all the bugs, proposed an optimised version with new features and detailed comments. The code is now more robust and flexible.\u201d<\/em><\/p>\n<\/blockquote>\n<h2 class=\"wp-block-heading\"><strong>DeepSeek<\/strong><\/h2>\n<p><strong>Problems flagged in the code:<\/strong><\/p>\n<figure class=\"wp-block-image\"><img decoding=\"async\" src=\"https:\/\/lh7-qw.googleusercontent.com\/docsz\/AD_4nXeNp_PUXhrXQmHdAmBjdpGfSPmLEdQoz3YdesjRCsgHpTsednEcWVyfYUFKHUux2sqXhqrDbnmM-ss03RrwcfD0tu3R-2LukbDeJGsImfzH6X7xHIJ3WgWUr7q6Kg5TjVmqZHh_Zw?key=pJK-I_oK5RM3Ki3aEuT3VA\" alt=\"\u0418\u0418 \u0432 IT: \u0432\u044b\u044f\u0441\u043d\u044f\u0435\u043c, \u043a\u0430\u043a\u0430\u044f \u0438\u0437 \u0431\u0435\u0441\u043f\u043b\u0430\u0442\u043d\u044b\u0445 \u043d\u0435\u0439\u0440\u043e\u0441\u0435\u0442\u0435\u0439 \u043b\u0443\u0447\u0448\u0435 \u043f\u0438\u0448\u0435\u0442 \u043a\u043e\u0434\"\/><figcaption class=\"wp-element-caption\">Data: DeepSeek.<\/figcaption><\/figure>\n<p>The Chinese model identified seven key issues and proposed fixes.<\/p>\n<p><strong>Result:<\/strong><\/p>\n<figure class=\"wp-block-image\"><img decoding=\"async\" src=\"https:\/\/lh7-qw.googleusercontent.com\/docsz\/AD_4nXeHrpcmc787lUKTjG1Pnvea7PaKBARdI_i5ubO0NvaSIWYFpLgTZ-o2pzdwZPvx_cBvHHFV9HF3LHuJBjncmrfy-XOVSZP0ZEihR68s_z_8dNQU4SVt7zgjK7ZqDioPfDsZxemE?key=pJK-I_oK5RM3Ki3aEuT3VA\" alt=\"\u0418\u0418 \u0432 IT: \u0432\u044b\u044f\u0441\u043d\u044f\u0435\u043c, \u043a\u0430\u043a\u0430\u044f \u0438\u0437 \u0431\u0435\u0441\u043f\u043b\u0430\u0442\u043d\u044b\u0445 \u043d\u0435\u0439\u0440\u043e\u0441\u0435\u0442\u0435\u0439 \u043b\u0443\u0447\u0448\u0435 \u043f\u0438\u0448\u0435\u0442 \u043a\u043e\u0434\"\/><figcaption class=\"wp-element-caption\">Data: Anton Tulupnikov.<\/figcaption><\/figure>\n<p><a href=\"https:\/\/github.com\/Atulupn\/AI-Code-Comparison\/blob\/main\/deepseeksnowfall.js\">Fixed code<\/a> is broadly functional but contains a few errors.<\/p>\n<p>The code tries to speed up flakes in an array that was created empty:<\/p>\n<blockquote class=\"wp-block-quote is-layout-flow wp-block-quote-is-layout-flow\">\n<p>for (const flake of snowflakes) {<\/p>\n<p>\u00a0\u00a0\u00a0\u00a0flake.speed += 0.5;<\/p>\n<p>}<\/p>\n<\/blockquote>\n<p>As a result, the \u201cIncrease speed\u201d button has no effect.<\/p>\n<p>The \u201cStop animation\u201d button works: the animation stops. But pressing it again calls startSnowfall, which creates a new array of flakes. That resets the current state (positions, speeds, sizes), so the animation \u201crestarts\u201d with new flakes instead of continuing. As with Grok\u2019s code, there is no window\u2011resize handling.<\/p>\n<p><strong>DeepSeek\u2019s comment:<\/strong><\/p>\n<blockquote class=\"wp-block-quote is-layout-flow wp-block-quote-is-layout-flow\">\n<p><em>\u201cBefore the edits the work was decent but had critical shortcomings. I handled it at 3\/5 \u2014 the basic animation worked, but control and reliability lagged. After your edits I fixed everything and brought it to 5\/5.\u201d<\/em><\/p>\n<\/blockquote>\n<h2 class=\"wp-block-heading\"><strong>ChatGPT<\/strong><\/h2>\n<p><strong>Problems flagged in the code:<\/strong><\/p>\n<figure class=\"wp-block-image\"><img decoding=\"async\" src=\"https:\/\/lh7-qw.googleusercontent.com\/docsz\/AD_4nXcA6zLLesL4L4t34Ci-P_b9shE21holx0ufQNKuEZUdMLWQ3JuXF7wrDn7_Yt3N-5rgLWu3Vt2ErbesnQyd31YH22_gO0D2Jv1fKze5et6o6FP4_Fx94NN7b_dzOWJeWjy_ohlM?key=pJK-I_oK5RM3Ki3aEuT3VA\" alt=\"\u0418\u0418 \u0432 IT: \u0432\u044b\u044f\u0441\u043d\u044f\u0435\u043c, \u043a\u0430\u043a\u0430\u044f \u0438\u0437 \u0431\u0435\u0441\u043f\u043b\u0430\u0442\u043d\u044b\u0445 \u043d\u0435\u0439\u0440\u043e\u0441\u0435\u0442\u0435\u0439 \u043b\u0443\u0447\u0448\u0435 \u043f\u0438\u0448\u0435\u0442 \u043a\u043e\u0434\"\/><figcaption class=\"wp-element-caption\">Data: ChatGPT.<\/figcaption><\/figure>\n<p>ChatGPT identified five key bugs and proposed fixes.<\/p>\n<p><strong>Result:<\/strong><\/p>\n<figure class=\"wp-block-image\"><img decoding=\"async\" src=\"https:\/\/lh7-qw.googleusercontent.com\/docsz\/AD_4nXdKMv-CBby6o6vNrOCRudf12g4LOdVY8ar6Upnm1ewfK-LAa15vdevhmXz8qUqi53T8JgTjrMIWQ6w030uaT-J9cyRj_DV6XDeJD2H2zSPWSOqM9x1ICKbyTdq7k-4Grra2BH5TEg?key=pJK-I_oK5RM3Ki3aEuT3VA\" alt=\"\u0418\u0418 \u0432 IT: \u0432\u044b\u044f\u0441\u043d\u044f\u0435\u043c, \u043a\u0430\u043a\u0430\u044f \u0438\u0437 \u0431\u0435\u0441\u043f\u043b\u0430\u0442\u043d\u044b\u0445 \u043d\u0435\u0439\u0440\u043e\u0441\u0435\u0442\u0435\u0439 \u043b\u0443\u0447\u0448\u0435 \u043f\u0438\u0448\u0435\u0442 \u043a\u043e\u0434\"\/><figcaption class=\"wp-element-caption\">Data: Anton Tulupnikov.<\/figcaption><\/figure>\n<p>As before, the model added a way to stop the animation. But you cannot restart it without reloading the page. Again, canvas size is not adaptive.<\/p>\n<p><strong>GPT\u2019s comment:<\/strong><\/p>\n<blockquote class=\"wp-block-quote is-layout-flow wp-block-quote-is-layout-flow\">\n<p><em>\u201cThe code is optimised, bugs are fixed, the animation is extended and ready to use.\u201d<\/em><\/p>\n<\/blockquote>\n<h2 class=\"wp-block-heading\"><strong>Takeaways<\/strong><\/h2>\n<p>The models completed the brief with greater or lesser success: they explained the main bugs, suggested alternatives and added comments to improve readability. Grok did best: it found ten issues, fixed them and suggested enhancements such as a slight horizontal drift to mimic wind. The others did slightly worse: the animation works, but with blemishes.<\/p>\n<p><em>Scores on a three\u2011point scale:<\/em><\/p>\n<figure class=\"wp-block-table\">\n<table>\n<tbody>\n<tr>\n<td><strong>Model<\/strong><\/td>\n<td><strong>Were bugs found<\/strong><\/td>\n<td><strong>Quality of fixes<\/strong><\/td>\n<td><strong>Optimisation<\/strong><\/td>\n<\/tr>\n<tr>\n<td><strong>Grok<\/strong><\/td>\n<td>3<\/td>\n<td>3<\/td>\n<td>3<\/td>\n<\/tr>\n<tr>\n<td><strong>DeepSeek<\/strong><\/td>\n<td>2<\/td>\n<td>2<\/td>\n<td>1<\/td>\n<\/tr>\n<tr>\n<td><strong>ChatGPT<\/strong><\/td>\n<td>2<\/td>\n<td>2<\/td>\n<td>1<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<\/figure>\n<h1 class=\"wp-block-heading\"><strong>A creative brief: build a video game<\/strong><\/h1>\n<p><strong><em>Task:<\/em><\/strong> create a simple PC game\u2014\u201cSnake\u201d, \u201cMinesweeper\u201d or similar. It should be minimally designed yet visually pleasing, with simple keyboard controls. The model must pick a genre (arcade, platformer, puzzle), choose a language, explain the code and describe how to run the game.<\/p>\n<p><strong><em>Prompt:<\/em><\/strong><em> <\/em><\/p>\n<blockquote class=\"wp-block-quote is-layout-flow wp-block-quote-is-layout-flow\">\n<p><em>\u201cDesign and write code for a simple visual 2D game that can be built in an hour, with keyboard controls and visually pleasant graphics. The game must be unique. Choose a genre (eg arcade, puzzle, platformer). Choose a suitable language (eg Python with Pygame or JavaScript with HTML5 Canvas). The game interface must be in Russian. Use only the minimal libraries needed for graphics. The code should be readable, with comments. After writing the code, explain how the game works, how to run it (including library installation, if needed) and why you chose this concept.\u201d<\/em><\/p>\n<\/blockquote>\n<h2 class=\"wp-block-heading\"><strong>Grok<\/strong><\/h2>\n<p><strong>Result:<\/strong><\/p>\n<figure class=\"wp-block-image\"><img decoding=\"async\" src=\"https:\/\/lh7-qw.googleusercontent.com\/docsz\/AD_4nXfIoA5WmIGDWBisU7ecTA51PmyU0WfUfxCxW3rFSmpGxRhTom1AZhuheMbv9MKVG2sjm5YDivYTVKrcHISFekL62Ie3A6FC2QG7EGGKlPaRYqMZT-T9ztBfxZN3albZSq9OR9uH?key=pJK-I_oK5RM3Ki3aEuT3VA\" alt=\"\u0418\u0418 \u0432 IT: \u0432\u044b\u044f\u0441\u043d\u044f\u0435\u043c, \u043a\u0430\u043a\u0430\u044f \u0438\u0437 \u0431\u0435\u0441\u043f\u043b\u0430\u0442\u043d\u044b\u0445 \u043d\u0435\u0439\u0440\u043e\u0441\u0435\u0442\u0435\u0439 \u043b\u0443\u0447\u0448\u0435 \u043f\u0438\u0448\u0435\u0442 \u043a\u043e\u0434\"\/><figcaption class=\"wp-element-caption\">Data: Anton Tulupnikov.<\/figcaption><\/figure>\n<p>The xAI model proposed a game called Star Collector.<\/p>\n<p><strong>Grok\u2019s description:<\/strong><\/p>\n<blockquote class=\"wp-block-quote is-layout-flow wp-block-quote-is-layout-flow\">\n<p><em>\u201cThis is a 2D game inspired by Pac\u2011Man, but with unique mechanics. You control a small spaceship (a simple sprite) that flies around the screen. Goal: collect stars (bright, twinkling objects) that appear randomly. Asteroids (moving enemies) fly across the field; colliding with them reduces health. If health (three lives) runs out, the game ends. Visual style: bright space with a black background, twinkling stars and animated asteroids.\u201d<\/em><\/p>\n<\/blockquote>\n<p>Creating the game took about 25 minutes. After producing the base, the model suggested improving it to make the game brighter and more engaging. After another 15 minutes, Grok added colourful planets to the background, sounds for collecting stars and hitting asteroids, and occasional hearts (extra lives).<\/p>\n<p>For the<a href=\"https:\/\/github.com\/Atulupn\/AI-Code-Comparison\/blob\/main\/star_collector.py\" target=\"_blank\" rel=\"noopener\" title=\"\"> code<\/a> it chose Python with Pygame.<\/p>\n<figure class=\"wp-block-image\"><img decoding=\"async\" src=\"https:\/\/lh7-qw.googleusercontent.com\/docsz\/AD_4nXegcDmYeeJhs7ji1wlKP-myZyNBMZtaWZIu01A0noUoq1lA7zYXuzsXKTrysW0haB1oF_qYPAOwAalgVSD9QcrnUUCc57yfE29r9urIT9n2BFPkqSlrhofozHiBLy12w5JaaJEQaA?key=pJK-I_oK5RM3Ki3aEuT3VA\" alt=\"\u0418\u0418 \u0432 IT: \u0432\u044b\u044f\u0441\u043d\u044f\u0435\u043c, \u043a\u0430\u043a\u0430\u044f \u0438\u0437 \u0431\u0435\u0441\u043f\u043b\u0430\u0442\u043d\u044b\u0445 \u043d\u0435\u0439\u0440\u043e\u0441\u0435\u0442\u0435\u0439 \u043b\u0443\u0447\u0448\u0435 \u043f\u0438\u0448\u0435\u0442 \u043a\u043e\u0434\"\/><\/figure>\n<figure class=\"wp-block-image\"><img decoding=\"async\" src=\"https:\/\/lh7-qw.googleusercontent.com\/docsz\/AD_4nXcZ4sgR8qcr60bpQzvjgGxyMlBK4cjOUBM1oPcSWbVgJGwNxorpK3MvbTQSPbbkVT56NMMt2D7HtMWk3tYz6NG1rp9TI5kIidm73BFETIKugcO9PgFv4KOt_8UCncJX3C7LvjAKMg?key=pJK-I_oK5RM3Ki3aEuT3VA\" alt=\"\u0418\u0418 \u0432 IT: \u0432\u044b\u044f\u0441\u043d\u044f\u0435\u043c, \u043a\u0430\u043a\u0430\u044f \u0438\u0437 \u0431\u0435\u0441\u043f\u043b\u0430\u0442\u043d\u044b\u0445 \u043d\u0435\u0439\u0440\u043e\u0441\u0435\u0442\u0435\u0439 \u043b\u0443\u0447\u0448\u0435 \u043f\u0438\u0448\u0435\u0442 \u043a\u043e\u0434\"\/><figcaption class=\"wp-element-caption\">Data: Grok.<\/figcaption><\/figure>\n<p>The result is genuinely engaging and easy on the eye, with the feel of classic arcade cabinets.<\/p>\n<p><strong>Grok\u2019s assessment:<\/strong><\/p>\n<blockquote class=\"wp-block-quote is-layout-flow wp-block-quote-is-layout-flow\">\n<p><em>\u201cI did well: I created a simple, engaging game\u2014Star Collector\u2014in Python with Pygame within an hour, as you asked. It\u2019s visually rich (background stars, trail, twinkle), controls via WASD, with bonuses and a high score. The code is beginner\u2011friendly, and I explained how to run it in detail. If anything needs tweaking, say the word!\u201d<\/em><\/p>\n<\/blockquote>\n<h2 class=\"wp-block-heading\"><strong>DeepSeek<\/strong><\/h2>\n<p><strong>Result:<\/strong><\/p>\n<figure class=\"wp-block-image\"><img decoding=\"async\" src=\"https:\/\/lh7-qw.googleusercontent.com\/docsz\/AD_4nXdvGcbpP5VQqcq3ap-xEonTBe_B60cq71b_rInPOgN4fMNg3K5OlxO8VcPT1C1VBZ_BfBlYWZ0RLBVWMZGuQ-DNjQTDBz8G6sy2MLyAsXekgc8JjaJjG4UbGJtXeGVdy9RHZExBdQ?key=pJK-I_oK5RM3Ki3aEuT3VA\" alt=\"\u0418\u0418 \u0432 IT: \u0432\u044b\u044f\u0441\u043d\u044f\u0435\u043c, \u043a\u0430\u043a\u0430\u044f \u0438\u0437 \u0431\u0435\u0441\u043f\u043b\u0430\u0442\u043d\u044b\u0445 \u043d\u0435\u0439\u0440\u043e\u0441\u0435\u0442\u0435\u0439 \u043b\u0443\u0447\u0448\u0435 \u043f\u0438\u0448\u0435\u0442 \u043a\u043e\u0434\"\/><figcaption class=\"wp-element-caption\">Data: Anton Tulupnikov.<\/figcaption><\/figure>\n<figure class=\"wp-block-image\"><img decoding=\"async\" src=\"https:\/\/lh7-qw.googleusercontent.com\/docsz\/AD_4nXeHZxvJLSvOerTsxu8M2TUmp30Pn6KoU5k2b_VHCNqH6YbNm-7JTsgkOH7zXUDBmuECKKgil6e2iEqn0UmrKmQ3i-n2Lim5U36kxmzay5Ssi08jqeArzRvR2k2dnzXV9a9eIXs6Ng?key=pJK-I_oK5RM3Ki3aEuT3VA\" alt=\"\u0418\u0418 \u0432 IT: \u0432\u044b\u044f\u0441\u043d\u044f\u0435\u043c, \u043a\u0430\u043a\u0430\u044f \u0438\u0437 \u0431\u0435\u0441\u043f\u043b\u0430\u0442\u043d\u044b\u0445 \u043d\u0435\u0439\u0440\u043e\u0441\u0435\u0442\u0435\u0439 \u043b\u0443\u0447\u0448\u0435 \u043f\u0438\u0448\u0435\u0442 \u043a\u043e\u0434\"\/><figcaption class=\"wp-element-caption\">Data: DeepSeek.<\/figcaption><\/figure>\n<p>DeepSeek proposed Treasure Maze, a puzzle about exploring a labyrinth.<\/p>\n<p><strong>DeepSeek\u2019s description:<\/strong><\/p>\n<blockquote class=\"wp-block-quote is-layout-flow wp-block-quote-is-layout-flow\">\n<p><em>\u201cThe player controls a treasure hunter who must collect all the coins in the maze while avoiding traps.\u201d<\/em><\/p>\n<\/blockquote>\n<p>On the first try it was dull and buggy: in places you could walk through walls, the mazes were narrow and primitive, and enemies (red squares) did not move. After several rounds of fixes it was much better: some bugs vanished, the red squares became ghosts and the hero\u2014a green square\u2014turned into a man in a hat. New bugs appeared, though: the ghosts could move through walls (logical, but not for gameplay). After applying the model\u2019s suggested fixes the game failed to start; later it started, but the character could no longer be controlled, and had reverted to a square.<\/p>\n<p>After more than three hours and many iterations, DeepSeek managed to fix most bugs and reach acceptable quality.<\/p>\n<figure class=\"wp-block-image\"><img decoding=\"async\" src=\"https:\/\/lh7-qw.googleusercontent.com\/docsz\/AD_4nXfMRh-GkoYCsX2leVfkLM7YmBDHaWii8o1r8GBzTvkiysjXy6_6WKDnvfkED6gYCoi40gWTBWCOPHcnxgmym96O29MPjw77UZ7F2-OkMzxiJN3C3-vf42aEaWp8JFbmua0kqlgYZQ?key=pJK-I_oK5RM3Ki3aEuT3VA\" alt=\"\u0418\u0418 \u0432 IT: \u0432\u044b\u044f\u0441\u043d\u044f\u0435\u043c, \u043a\u0430\u043a\u0430\u044f \u0438\u0437 \u0431\u0435\u0441\u043f\u043b\u0430\u0442\u043d\u044b\u0445 \u043d\u0435\u0439\u0440\u043e\u0441\u0435\u0442\u0435\u0439 \u043b\u0443\u0447\u0448\u0435 \u043f\u0438\u0448\u0435\u0442 \u043a\u043e\u0434\"\/><figcaption class=\"wp-element-caption\">Data: Anton Tulupnikov.<\/figcaption><\/figure>\n<p>It added comments to every block in the <a href=\"https:\/\/github.com\/Atulupn\/AI-Code-Comparison\/blob\/main\/deep.py\">code<\/a>, even though that was not requested. Despite the time spent, the game works and is even absorbing. Each level is harder: the maze grows more complex and there are more ghosts.<\/p>\n<p><strong>DeepSeek\u2019s assessment:<\/strong><\/p>\n<blockquote class=\"wp-block-quote is-layout-flow wp-block-quote-is-layout-flow\">\n<p><em>\u201cExcellent! What went well: clean, readable code with comments. Simple but engaging mechanics. Clear interface in Russian. What could be improved: add random traps in the maze.\u201d<\/em><\/p>\n<\/blockquote>\n<h2 class=\"wp-block-heading\"><strong>ChatGPT<\/strong><\/h2>\n<p><strong>Result:<\/strong><\/p>\n<figure class=\"wp-block-image\"><img decoding=\"async\" src=\"https:\/\/lh7-qw.googleusercontent.com\/docsz\/AD_4nXdbh2q4iRV33vpzVaRhkNHQy9AooUQrSx82eS8GYD5zu_mFZ0q9UpmjUshsh15-NmMuOHUCqXtpsHAW70XwjNidY6qWzXf8yonSNvgokYFztJofSIpTyb8w0ZvDsYRHDcEqhcXdxw?key=pJK-I_oK5RM3Ki3aEuT3VA\" alt=\"\u0418\u0418 \u0432 IT: \u0432\u044b\u044f\u0441\u043d\u044f\u0435\u043c, \u043a\u0430\u043a\u0430\u044f \u0438\u0437 \u0431\u0435\u0441\u043f\u043b\u0430\u0442\u043d\u044b\u0445 \u043d\u0435\u0439\u0440\u043e\u0441\u0435\u0442\u0435\u0439 \u043b\u0443\u0447\u0448\u0435 \u043f\u0438\u0448\u0435\u0442 \u043a\u043e\u0434\"\/><figcaption class=\"wp-element-caption\">Data: Anton Tulupnikov.<\/figcaption><\/figure>\n<p>ChatGPT decided to create a simple platformer with arcade elements.<\/p>\n<p><strong>GPT\u2019s description:<\/strong><\/p>\n<blockquote class=\"wp-block-quote is-layout-flow wp-block-quote-is-layout-flow\">\n<p><em>\u201cYou control a glowing orb that jumps across vanishing platforms. Each platform disappears a couple of seconds after you land on it. The goal is to reach the level\u2019s finish by jumping across platforms and avoiding falls. Some platforms appear only after a switch is activated.\u201d<\/em><\/p>\n<\/blockquote>\n<p>Initially the game was too simple\u2014visually and in gameplay\u2014so it was made longer and harder (radically):<\/p>\n<figure class=\"wp-block-image\"><img decoding=\"async\" src=\"https:\/\/lh7-qw.googleusercontent.com\/docsz\/AD_4nXe8LefF1zbyPxWaWGJpPngqLQfArqxWqKqvCmTntdYtcijh3ZlVI35R4KPb5fUn-tdEwRBysChR6MF5Syx6ZR2fRC2abiGSMZd26Vx0QbAplzvIQCR9robB1ohvU6hzfb3X71fYvQ?key=pJK-I_oK5RM3Ki3aEuT3VA\" alt=\"\u0418\u0418 \u0432 IT: \u0432\u044b\u044f\u0441\u043d\u044f\u0435\u043c, \u043a\u0430\u043a\u0430\u044f \u0438\u0437 \u0431\u0435\u0441\u043f\u043b\u0430\u0442\u043d\u044b\u0445 \u043d\u0435\u0439\u0440\u043e\u0441\u0435\u0442\u0435\u0439 \u043b\u0443\u0447\u0448\u0435 \u043f\u0438\u0448\u0435\u0442 \u043a\u043e\u0434\"\/><figcaption class=\"wp-element-caption\">Data: Anton Tulupnikov.<\/figcaption><\/figure>\n<p>After an hour of wrestling with bugs, GPT produced a working game about a dog collecting bones. The dog and bone assets were generated by the model itself.<\/p>\n<figure class=\"wp-block-image\"><img decoding=\"async\" src=\"https:\/\/lh7-qw.googleusercontent.com\/docsz\/AD_4nXf1rl1cIdbQbpjuIVOwTO2iFtfKocCJoXg1QDMoK4F6kMWkHliZrw2rJtKBegHDYiZvmT9gvpNfaEymFIfNeNaKrKMJRFIrDsXxFA_A8toIAQ8NPpoVXgb87lkhzyz7qjFQQrmG?key=pJK-I_oK5RM3Ki3aEuT3VA\" alt=\"\u0418\u0418 \u0432 IT: \u0432\u044b\u044f\u0441\u043d\u044f\u0435\u043c, \u043a\u0430\u043a\u0430\u044f \u0438\u0437 \u0431\u0435\u0441\u043f\u043b\u0430\u0442\u043d\u044b\u0445 \u043d\u0435\u0439\u0440\u043e\u0441\u0435\u0442\u0435\u0439 \u043b\u0443\u0447\u0448\u0435 \u043f\u0438\u0448\u0435\u0442 \u043a\u043e\u0434\"\/><figcaption class=\"wp-element-caption\">Data: Anton Tulupnikov.<\/figcaption><\/figure>\n<p>As before, the model chose Python with Pygame. This time GPT included no comments or explanations in the code.<\/p>\n<p><strong>GPT\u2019s assessment:<\/strong><\/p>\n<blockquote class=\"wp-block-quote is-layout-flow wp-block-quote-is-layout-flow\">\n<p><em>\u201cI think I did well: I followed your wishes, made platforms suitable for jumping and removed manual jump. If there\u2019s more to do, I\u2019m always ready to help!\u201d<\/em><\/p>\n<\/blockquote>\n<h2 class=\"wp-block-heading\"><strong>Takeaways<\/strong><\/h2>\n<p>We ended up with three decent visual PC games, for relatively little effort. Only Grok fulfilled the \u201cin an hour\u201d brief. GPT took about two and a half hours; DeepSeek took more than three.<\/p>\n<p><em>Scores on a three\u2011point scale:<\/em><\/p>\n<figure class=\"wp-block-table\">\n<table>\n<tbody>\n<tr>\n<td><strong>Model<\/strong><\/td>\n<td><strong>Does the game work<\/strong><\/td>\n<td><strong>Clarity of explanation<\/strong><\/td>\n<td><strong>Time taken<\/strong><\/td>\n<\/tr>\n<tr>\n<td><strong>Grok<\/strong><\/td>\n<td>3<\/td>\n<td>3<\/td>\n<td>3<\/td>\n<\/tr>\n<tr>\n<td><strong>DeepSeek<\/strong><\/td>\n<td>3<\/td>\n<td>2<\/td>\n<td>1<\/td>\n<\/tr>\n<tr>\n<td><strong>ChatGPT<\/strong><\/td>\n<td>3<\/td>\n<td>1<\/td>\n<td>1<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<\/figure>\n<h1 class=\"wp-block-heading\"><strong>So who wins?<\/strong><\/h1>\n<p>It comes down to details. Any model will write code faster than you and, with enough patience, will give you what you want. All three candidates for our jobs handled the tasks well, with small differences in speed and ease of use. Whether those are decisive is up to you.<\/p>\n<p>A model saves time, but it is powerless without the judgment of the person writing the prompt. You cannot offload all the work to GPT or DeepSeek and expect perfection on the first or second attempt. Poor, unoptimised code is not the model\u2019s fault, just as a bent nail is not the hammer\u2019s fault. The result is the responsibility of the person wielding the tool\u2014Chinese or American.<\/p>\n<p><strong>P.S. If you must have a league table, here it is (out of 10):<\/strong><\/p>\n<figure class=\"wp-block-table\">\n<table>\n<tbody>\n<tr>\n<td><strong>Model<\/strong><\/td>\n<td><strong>Coding<\/strong><\/td>\n<td><strong>Bug\u2011fixing and optimisation<\/strong><\/td>\n<td><strong>Creativity<\/strong><\/td>\n<td><strong>Clarity of explanations<\/strong><\/td>\n<\/tr>\n<tr>\n<td><strong>Grok<\/strong><\/td>\n<td>9<\/td>\n<td>9<\/td>\n<td>8<\/td>\n<td>9<\/td>\n<\/tr>\n<tr>\n<td><strong>DeepSeek<\/strong><\/td>\n<td>9<\/td>\n<td>7<\/td>\n<td>7<\/td>\n<td>7<\/td>\n<\/tr>\n<tr>\n<td><strong>ChatGPT<\/strong><\/td>\n<td>8<\/td>\n<td>7<\/td>\n<td>8<\/td>\n<td>7<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<\/figure>\n<p><em>Text:\u00a0Anton Tulupnikov<\/em><\/p>\n","protected":false},"excerpt":{"rendered":"<p>Contrary to popular belief, cutting-edge AI tools slow experienced software developers down when they work with familiar codebases, rather than speeding them up. That is the finding of a new study by the non-profit research group METR. Researchers tracked a cohort of seasoned developers using the popular AI assistant Cursor on open-source projects. The expectation [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":25269,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"select":"","news_style_id":"","cryptorium_level":"","_short_excerpt_text":"","creation_source":"","_metatest_mainpost_news_update":false,"footnotes":""},"categories":[1144],"tags":[438,1201,1626],"class_list":["post-25270","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-longreads","tag-artificial-intelligence","tag-chatbots","tag-experiment"],"aioseo_notices":[],"amp_enabled":true,"views":"72","promo_type":"","layout_type":"","short_excerpt":"","is_update":"","_links":{"self":[{"href":"https:\/\/forklog.com\/en\/wp-json\/wp\/v2\/posts\/25270","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/forklog.com\/en\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/forklog.com\/en\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/forklog.com\/en\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/forklog.com\/en\/wp-json\/wp\/v2\/comments?post=25270"}],"version-history":[{"count":0,"href":"https:\/\/forklog.com\/en\/wp-json\/wp\/v2\/posts\/25270\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/forklog.com\/en\/wp-json\/wp\/v2\/media\/25269"}],"wp:attachment":[{"href":"https:\/\/forklog.com\/en\/wp-json\/wp\/v2\/media?parent=25270"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/forklog.com\/en\/wp-json\/wp\/v2\/categories?post=25270"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/forklog.com\/en\/wp-json\/wp\/v2\/tags?post=25270"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}