Puede ChatGPT reemplazar a los desarrolladores?

29 Jan 2023 20 min (0) Comentarios

Este post llega algo tarde, ya que lo tengo en mente desde hace varias semanas, bueno desde que salió ChatGPT al mercado. 

 

En este post vamos a ver qué es ChatGPT y si, como muchos auguran, le puede quitar el trabajo a los desarrolladores. 

 

 

1 - Qué es chatGPT?

ChatGPT es un modelo de lenguaje desarrollado por OpenAI. Es un modelo de lenguaje de tipo "Transformer" que ha sido entrenado en una gran cantidad de texto para generar respuestas coherentes y naturales en una variedad de contextos. Se utiliza comúnmente para tareas de procesamiento del lenguaje natural, como la generación de texto, la traducción automática y el procesamiento de preguntas.

 

1.1 -  Para qué se utiliza ChatGPT?

ChatGPT se utiliza principalmente para tareas de procesamiento del lenguaje natural, como la generación de texto, la traducción automática y el procesamiento de preguntas. Algunos ejemplos de cómo se puede utilizar ChatGPT incluyen:

  • Generación automática de respuestas coherentes y naturales en una conversación: ChatGPT puede generar respuestas coherentes y naturales en una conversación, lo que lo hace útil para aplicaciones como chatbots y asistentes virtuales.
  • Generación de contenido: ChatGPT puede generar texto automáticamente en una variedad de estilos y temas, lo que lo hace útil para aplicaciones como la generación de noticias, la escritura de ficción y la creación de descripciones de productos.
  • Procesamiento de preguntas: ChatGPT puede responder preguntas de manera coherente y natural, lo que lo hace útil para aplicaciones como motores de búsqueda y asistentes virtuales.
  • Traducción automática: ChatGPT puede ser entrenado para traducir texto automáticamente de un idioma a otro.

 

Ambas respuestas me las ha dado el propio ChatGPT, yo me he limitado a copiar y pegar. 

 

Ahora con mis palabras, ChatGPT es una IA a la que le haces preguntas y te devuelve respuestas, que pueden perfectamente pasar por un humano. 

Las respuestas son bastante coherentes y si no pides nada extraño, también son correctas. Aunque algunas veces se enrolla demasiado, o te dice lo mismo en tres párrafos distintos (como a la pregunta "para qué se utiliza ChatGPT?"). 

 

Por cierto la version actual es ChatGPT3, dicen que ChatGPT4 es mil veces más potente.

chatgpt 3 vs chatgpt4

Antes de continuar, debemos tener en cuenta que ChatGPT3 está entrenado en un dataset de 2021, lo que quiere decir que no sabe nada de lo que ha pasado a partir de ahí.

Por ejemplo le puedes preguntar quién ganó el mundial de fútbol de 2010 pero no el de 2022:

chatgpt on world cup

 

2 - Puede ChatGPT reemplazar a los desarrolladores? 

El motivo principal de este post, es ver si esta IA ChatGPT es capaz de quitarnos el trabajo. 

 

Para ello lo que voy a poner es un supuesto, vamos a imaginar que somos un taller mecánico que está especializado en ruedas de coche, las cambia, las calibra, etc, pero si alguien tiene un accidente y chafa el coche, pues no es el taller al que vas. 

 

Para esto, otro amigo tiene un taller, pero como sois amigos decide comprarte las ruedas a ti. Ambos, tanto tu taller como el otro, tienes un CRM de gestión de pedidos, pero este CRM no es capaz de comprobar los datos del otro, y decides, pedirle a tu sobrino, que te haga algo para que el otro taller se pueda conectar y en tiempo real consultar si en ese momentos tienes ruedas de X tamaño. 

  • Como podemos ver es un ejemplo bastante sencillo, pero este ejemplo sencillo, solo en desarrollo, una consultora, que sería lo que el dueño del taller tendría que contratar para crearlo puede costar miles de euros. de hecho, algo tan simple como esto (y desplegarla en internet) te puede costar fácilmente 5 o 10 mil euros. Lo cual para el pequeño empresario es impensable. 

 

2.1 - Implementar la solucion de ChatGPT en C#

Como este blog está centrado en C#, vamos a suponer que el sobrino, está empezando a estudiar C# o es junior y sabe C#. 

 

Obviamente tu no puedes ir a ChatGPT y decirle directamente que te cree una aplicación en C# para que haga lo que he dicho, al menos directamente, ya que bueno si le pedimos que nos haga una api en C# nos devuelve lo siguiente:

using System;
using System.Linq;
using Microsoft.AspNetCore.Mvc;

[Route("api/[controller]")]
public class InventoryController : Controller
{
    private readonly InventoryContext _context;

    public InventoryController(InventoryContext context)
    {
        _context = context;
    }

    [HttpGet("{id}")]
    public ActionResult<int> GetAvailable(int id)
    {
        var inventory = _context.Inventories.Find(id);
        if (inventory == null)
        {
            return NotFound();
        }
        return inventory.Available;
    }
}

Y si bien es cierto que este código funciona, tienes que saber lo que es el context y la inyección de dependencias, y no es algo que alguien que acaba de empezar en el mundillo lo sepa. 

Lo que sí puedes hacer es, con conocimientos técnicos pedirle que te haga cosas específicas. por ejemplo:

"can you create an endpoint on a C# web API controller called WheelsController that Queries a mysql database table called inventory that contains a column called available and the relation between inventory and product is done by the product.id column in the product table.

the endpoint should be called available and receive a parameter called wheeld which references to the product ID, and the return will be an int which is the available column."

Y este es el resultado que nos da:

using System.Linq;
using Microsoft.AspNetCore.Mvc;
using MySql.Data.MySqlClient;

[Route("api/[controller]")]
[ApiController]
public class WheelsController : ControllerBase
{
    private readonly string _connectionString = "Server=localhost;Database=mydb;Uid=user;Pwd=password;";

    [HttpGet("available/{wheeld}")]
    public ActionResult<int> GetAvailability(int wheeld)
    {
        using (var connection = new MySqlConnection(_connectionString))
        {
            connection.Open();
            var query = $"SELECT available FROM inventory WHERE product_id = {wheeld}";
            using (var command = new MySqlCommand(query, connection))
            {
                var reader = command.ExecuteReader();
                if (reader.Read())
                {
                    return reader.GetInt32(0);
                }
                else
                {
                    return NotFound();
                }
            }
        }
    }
}

Como podemos observar nos devuelve un resultado que funciona, lo cual para nuestro caso de uso actual nos sirve completamente. 

 

Pero claro, una vez eres un programador con más experiencia te das cuenta de que fallan cosas, por ejemplo tiene la conexión a la base de datos en el propio controlador, o la consulta como tal.

 

Así que ahora le vamos a pedir que utilice Entity Framework:

using System.Linq;
using Microsoft.AspNetCore.Mvc;
using Microsoft.EntityFrameworkCore;

[Route("api/[controller]")]
[ApiController]
public class WheelsController : ControllerBase
{
    private readonly MyDbContext _context;

    public WheelsController(MyDbContext context)
    {
        _context = context;
    }

    [HttpGet("available/{wheeld}")]
    public ActionResult<int> GetAvailability(int wheeld)
    {
        var inventory = _context.Inventories
            .Where(i => i.ProductId == wheeld)
            .FirstOrDefault();

        if (inventory != null)
        {
            return inventory.Available;
        }
        else
        {
            return NotFound();
        }
    }
}

El código nos viene con una explicación sobre las librerías que debemos instalar y que debemos configurar el DbContext.

 

El código está ya casi ahí, para un caso de uso sencillo, nos sirve, pero no para una aplicación más empresarial, bueno, en teoría sí. Pero vamos a hacerla mejor, y únicamente vamos a pedirle ahora que nos modifique el código para utilizar repository pattern.

 

Y este es el resultado, el cual es bastante sorprendente; Primero el código del controlador:

using Microsoft.AspNetCore.Mvc;
using Microsoft.EntityFrameworkCore;

[Route("api/[controller]")]
[ApiController]
public class WheelsController : ControllerBase
{
    private readonly IInventoryRepository _inventoryRepository;

    public WheelsController(IInventoryRepository inventoryRepository)
    {
        _inventoryRepository = inventoryRepository;
    }

    [HttpGet("available/{wheeld}")]
    public ActionResult<int> GetAvailability(int wheeld)
    {
        var inventory = _inventoryRepository.GetByProductId(wheeld);

        if (inventory != null)
        {
            return inventory.Available;
        }
        else
        {
            return NotFound();
        }
    }
}

Luego la interfaz:

public interface IInventoryRepository
{
    Inventory GetByProductId(int productId);
}

La implementación del repositorio utilizando EF:

public class InventoryRepository : IInventoryRepository
{
    private readonly MyDbContext _context;

    public InventoryRepository(MyDbContext context)
    {
        _context = context;
    }

    public Inventory GetByProductId(int productId)
    {
        return _context.Inventories
            .Where(i => i.ProductId == productId)
            .FirstOrDefault();
    }
}

 

Y finalmente la respuesta de ChatGPT termina con una explicación de los beneficios de la separación de responsabilidad y por supuesto de que no se te olvide anadir la interfaz y la implementación al contenedor de dependencias utilizando inyección de dependencias

services.AddScoped<IInventoryRepository, InventoryRepository>();

Como puedes ver ChatGPT trabaja mejor si le pides cosas pequeñas de una en una, que si se lo pides todo de golpe, pero como hemos visto, funciona también.

 

2.2 - ChatGPT en otros lenguajes

Primero decir que ChatGPT está entrenado en ingles, pero “habla” cualquier idioma, así que le puedes preguntar en castellano, y por supuesto sabe cualquier lenguaje de programación; 

 

Por ejemplo este sería el primer caso de uso que hemos visto en ruby:

require 'sinatra'
require 'sequel'

DB = Sequel.connect('sqlite://db/inventory.db')

get '/api/inventory/:id' do
  inventory = DB[:inventories].where(id: params[:id]).first
  if inventory.nil?
    status 404
    return 'Inventory not found'
  end
  inventory[:available].to_s
end

 

 

3 - Mi opinión sobre ChatGPT

Para mi ChatGTP es una herramienta más con las que trabajar día a día, en este mismo post hemos visto cómo nos puede facilitar la vida bastante, pero no todo lo que dice es cierto, y aquí es donde tenemos que tener cuidado.  

Ya que hablando sobre programación, la gran mayoría de las cosas están bien, digamos que hay un 80% del contenido que está bien, pero hay un 20 restante que eres tú, el que tiene que saber que no está 100% correcto y hay que cambiarlo.

 

Si se lo explicas a la IA, “se da cuenta” y lo cambia, pero no lo hace por sí misma, como hemos visto en el ejemplo, por ahora su poder es muy limitado, a ver y hacer lo que tiene enfrente, y no es capaz de pensar a gran escala o en el futuro.

 

Y sobre la pregunta que he lanzado anteriormente sobre si la IA nos puede quitar el trabajo es que no, la IA nos va a facilitar la vida y ya está, al menos por ahora.

 

Por supuesto su poder no acaba en el código si  no que le puedo poner que me cree posts con pros y contras sobre temas complejos que me servirán para contenido tanto de la web como de youtube. Pero ese 20% que no es correcto, requiere del conocimiento de uno mismo para poder hacer las cosas bien.

 

Dicho esto, viendo el poder que tiene a uno le entran ganas de dejar de hacer posts y de invertir tiempo, ya que en un futuro, no muy lejano, le preguntaremos a ChatGPT en vez de a un buscador de información, lo cual está bien. Pero no hay que olvidar que ChatGPT se ha entrenado con información de blogs como este y que si dejamos de escribir, ChatGPT no tendrá donde entrenarse y “bajará la calidad”, un poco como la pescadilla que se muerde la cola. 

 

 

Por cierto, este tipo de tecnologías actualmente no se usan para hacer el mal, pero nada lo prohibe, nada va a prevenir que todos esos emails de phishing que se reciben en vez de tener a una persona detrás tengan una IA que nos da conversación hasta convencernos de darle nuestro dinero. Así que hay que tener cuidado.

 

Finalmente, para terminar, decir que hay rumores de que la versión final de ChatGPT, puede llegar a costar hasta 42 dólares al mes. Es caro, pero probablemente es algo que todos deberíamos pagar. 

 


Uso del bloqueador de anuncios adblock

Hola!

Primero de todo bienvenido a la web de NetMentor donde podrás aprender programación en C# y .NET desde un nivel de principiante hasta más avanzado.


Yo entiendo que utilices un bloqueador de anuncios como AdBlock, Ublock o el propio navegador Brave. Pero te tengo que pedir por favor que desactives el bloqueador para esta web.


Intento personalmente no poner mucha publicidad, la justa para pagar el servidor y por supuesto que no sea intrusiva; Si pese a ello piensas que es intrusiva siempre me puedes escribir por privado o por Twitter a @NetMentorTW.


Si ya lo has desactivado, por favor recarga la página.


Un saludo y muchas gracias por tu colaboración

© copyright 2024 NetMentor | Todos los derechos reservados | RSS Feed

Buy me a coffee Invitame a un café