Batalha dos Gigantes: GitHub Copilot vs ChatGPT ⚔️⚔️
O lançamento do ChatGPT causou ondulações na comunidade de programação, pois poderia criar trechos de código incríveis.
Como ele se compara ao GitHub Copilot lançado no ano passado? A IA está atrás do seu trabalho? Vamos descobrir.
Se você ainda não leu meu artigo anterior sobre o GitHub Copilot , você pode conferir aqui .
Testando ChatGPT
Vamos passar brevemente pelos mesmos testes pelos quais colocamos o GitHub Copilot .
Teste 1: Busca de Preço de Ações
Infelizmente, na primeira vez gerou código incorreto.
A função não foi definida como async, e promisesnão foi tratada corretamente.
A próxima tentativa foi melhor
Estranhamente, funciona sem a chave da API (desde que os parâmetros de consulta contenham a apikeychave com qualquer valor aleatório).
Resultado : o GitHub Copilot deixa o ChatGPT comendo poeira.
Teste 2: BFS Traversal
Desta vez, o ChatGPT acertou de uma vez, infelizmente era tão longo que uma captura de tela não cabia na tela, então aqui está o código gerado:
class Node:
def __init__(self, value):
self.value = value
self.left = None
self.right = None
class BinarySearchTree:
def __init__(self):
self.root = None
def insert(self, value):
new_node = Node(value)
if self.root is None:
self.root = new_node
return
current_node = self.root
while True:
if value < current_node.value:
if current_node.left is None:
current_node.left = new_node
return
current_node = current_node.left
else:
if current_node.right is None:
current_node.right = new_node
return
current_node = current_node.right
def inorder_traversal(self, node, numbers):
if node is None:
return
self.inorder_traversal(node.left, numbers)
numbers.append(node.value)
self.inorder_traversal(node.right, numbers)
def get_numbers(self):
numbers = []
self.inorder_traversal(self.root, numbers)
return numbers
bst = BinarySearchTree()
bst.insert(10)
bst.insert(5)
bst.insert(15)
bst.insert(3)
bst.insert(7)
bst.insert(13)
bst.insert(17)
numbers = bst.get_numbers()
print(numbers) # [3, 5, 7, 10, 13, 15, 17]
Resultado : ChatGPT ganha este.
Teste 3: Matriz de 100 uns
O ChatGPT gerou várias sugestões para este
Quando o GitHub Copilot foi lançado, ele gerou uma sugestão um pouco instável, mas agora gera o mesmo código que o ChatGPT .
Resultado : empate (dependendo de qual versão do software você compara)
Criando um projeto TODO completo
Para levar os testes adiante, decidi criar um projeto TODO completo usando ambos os softwares.
ChatGPT
1. Como criar um projeto TODO ?
As etapas mencionadas pelo ChatGPT são bastante abrangentes
2. Como criar um Reactprojeto?
3. Crie um componente Todo
Essa é a parte que não gostei. O código gerado estava usando a sintaxe herdada do componente de classe . Também não estava lidando com a adição de todos
4. Otimize o componente Todo para lidar com a adição e exclusão de tarefas, bem como marcá-las como concluídas.
Aqui está o código gerado (muito longo para uma captura de tela)
import React from "react";
// TodoItem component
const TodoItem = ({
item,
onDelete,
onComplete,
}) => (
<li>
{item.text}
<button onClick={onDelete}>Delete</button>
<button onClick={onComplete}>
{item.isComplete ? "Undo" : "Complete"}
</button>
</li>
);
// TodoApp component
class TodoApp extends React.Component {
// Define the initial state of the component
state = {
todoItems: [],
};
// Method to handle adding new items to the todo list
addTodo = (text) => {
// Add the new item to the todo list
this.setState({
todoItems: [
...this.state.todoItems,
{ text, isComplete: false },
],
});
};
// Method to handle deleting items from the todo list
deleteTodo = (index) => {
// Delete the item at the given index
this.setState({
todoItems: this.state.todoItems.filter(
(_, i) => i !== index
),
});
};
// Method to handle completing/undoing a todo item
completeTodo = (index) => {
// Update the "isComplete" property of the item at the given index
this.setState((state) => {
const todoItems = [...state.todoItems];
todoItems[index].isComplete =
!todoItems[index].isComplete;
return { todoItems };
});
};
// Method to render the component
render() {
return (
<div>
{/* Form to add new items to the todo list */}
<form>
<input
type="text"
placeholder="Add a todo item"
/>
<button type="submit">Add</button>
</form>
{/* List of todo items */}
<ul>
{this.state.todoItems.map(
(item, index) => (
<TodoItem
key={index}
item={item}
onDelete={() =>
this.deleteTodo(index)
}
onComplete={() =>
this.completeTodo(index)
}
/>
)
)}
</ul>
</div>
);
}
}
5. Última tentativa, mencionando a criação de componentes funcionais e a manipulação de adição, exclusão e conclusão de todos.
import React from "react";
// TodoItem component
const TodoItem = ({ item, onDelete, onComplete }) => (
<li>
{item.text}
<button onClick={onDelete}>Delete</button>
<button onClick={onComplete}>
{item.isComplete ? "Undo" : "Complete"}
</button>
</li>
);
// TodoApp component
const TodoApp = () => {
// Define the initial state of the component
const [todoItems, setTodoItems] = React.useState([]);
// Method to handle adding new items to the todo list
const addTodo = (text) => {
// Add the new item to the todo list
setTodoItems([
...todoItems,
{ text, isComplete: false },
]);
};
// Method to handle deleting items from the todo list
const deleteTodo = (index) => {
// Delete the item at the given index
setTodoItems(
todoItems.filter((_, i) => i !== index)
);
};
// Method to handle completing/undoing a todo item
const completeTodo = (index) => {
// Update the "isComplete" property of the item at the given index
setTodoItems((state) => {
const todoItems = [...state];
todoItems[index].isComplete =
!todoItems[index].isComplete;
return todoItems;
});
};
// Return the component
return (
<div>
{/* Form to add new items to the todo list */}
<form>
<input
type="text"
placeholder="Add a todo item"
/>
<button type="submit">Add</button>
</form>
{/* List of todo items */}
<ul>
{todoItems.map((item, index) => (
<TodoItem
key={index}
item={item}
onDelete={() => deleteTodo(index)}
onComplete={() => completeTodo(index)}
/>
))}
</ul>
</div>
);
};
GitHub copiloto
Infelizmente , o Copilot não pode gerar um projeto React. Ele só pode sugerir trechos de código em um determinado contexto, então vamos começar criando um aplicativo react nós mesmos
1. Crie um projeto React
npx create-react-app react-copilot
3. Finalmente é hora do Copilot fazer sua mágica enquanto nos sentamos e saboreamos um mojito.
Um comentário foi adicionado na parte superior do arquivo, na tarefa a ser realizada
Item de tarefa
// Functional TodoItem component which takes onDelete,
// onComplete, and item ({ todo: string; completed: boolean })
// as props
// Functional TodoApp component which handles addition,
// deletion & completion of todos. The TodoItem component
// is used to render each todo item
export default function TodoItem({
onDelete,
onComplete,
item,
}) {
return (
<div>
<input
type="checkbox"
checked={item.completed}
onChange={() => onComplete(item)}
/>
<span
style={{
textDecoration: item.completed
? "line-through"
: "none",
}}
>
{item.todo}
</span>
<button onClick={() => onDelete(item)}>
Delete
</button>
</div>
);
}
5. GeradoTodoApp
import React, { useState } from "react";
import TodoItem from "./TodoItem";
export default function TodoApp() {
const [todos, setTodos] = useState([]);
const [todo, setTodo] = useState("");
const addTodo = () => {
setTodos([...todos, { todo, completed: false }]);
setTodo("");
};
const deleteTodo = (item) => {
setTodos(todos.filter((todo) => todo !== item));
};
const completeTodo = (item) => {
setTodos(
todos.map((todo) =>
todo === item
? { ...todo, completed: !todo.completed }
: todo
)
);
};
return (
<div>
<h1>Todo App</h1>
<input
type="text"
value={todo}
onChange={(e) => setTodo(e.target.value)}
/>
<button onClick={addTodo}>Add</button>
{todos.map((item, index) => (
<TodoItem
key={index}
onDelete={deleteTodo}
onComplete={completeTodo}
item={item}
/>
))}
</div>
);
}
Embora tenhamos que fazer trabalho adicional para configurar o projeto, o Copilot conseguiu gerar um código melhor para o Todo App em comparação com o ChatGPT .
No final das contas, o Copilot deve ser uma ferramenta para ajudar os desenvolvedores a escrever código mais rapidamente, enquanto o ChatGPT é de uso geral chatbot, mas ainda pode agilizar o processo de desenvolvimento, mas o GitHub Copilot vence quando a tarefa é focada em codificação! Isso nos leva à pergunta...
Quem ficará com o seu emprego?
(Em sua mente) Desenvolvedores da IA : * risada maligna *
Antes de pegar seus forcados para incendiar o GitHub HQ , vamos dar um passo para trás e ver o quadro geral. Essas são ferramentas para agilizar o processo de desenvolvimento e NÃO se destinam a substituir os desenvolvedores.
Ainda precisamos de desenvolvedores para escrever o código. Claro, essas ferramentas podem nos ajudar a codificar mais rapidamente, mas sem a entrada humana, elas ainda não podem criar tudo por conta própria .
A notícia de demissões se espalhando como fogo devido à recessão pode parecer extremamente assustadora, mas contanto que você continue atualizando e aprimorando suas habilidades, você ficará bem!
Tome uma pílula relaxante e feliz upskilling !
Siga -me para novidades quinzenais sobre o domínio da tecnologia !
Precisa de um freelancer de desenvolvimento front-end com a melhor classificação para acabar com seus problemas de desenvolvimento? Entre em contato comigo no Upwork
Quer ver no que estou trabalhando? Confira meu site pessoal e GitHub
Quer se conectar? Entre em contato comigo no LinkedIn
Sou nômade digital e viajo ocasionalmente. Siga-me no Instagram para conferir o que estou fazendo.





































![O que é uma lista vinculada, afinal? [Parte 1]](https://post.nghiatu.com/assets/images/m/max/724/1*Xokk6XOjWyIGCBujkJsCzQ.jpeg)