Bootcamp CP-UPV - VSCode y Lenguajes de Programación

Instalación de VSCode y C++/Java/Python en Linux/Windows/MacOS

!OJO¡
Esta guía está desactualizada, antes usábamos VSCode pero hemos visto que CP-Editor es una mejor alternativa para simplificar la instalación de todo. Esta guía se queda para aquellos con más experiencia que quieran usar un editor más complejo, instalando los lenguajes de programación a parte.

A continuación se muestra cómo configurar el software necesario en los 3 sistemas operativos más comunes para programar en los 4 lenguajes del bootcamp, listo para empezar a programar. No hay que instalarse todos los lenguajes, solo los que quieras utilizar.

También es bastante importante familiarizarse un poco con la línea de comandos ('cmd' en Windows, 'Terminal' en macOS) para compilar nuestros programas antes de enviarlos al juez.

Contenidos

Instalación de VSCode

VSCode (al igual que VSCodium, la alternativa Open Source) es un editor de código multiplataforma que ofrece soporte y extensiones para todos los lenguajes de programación más comunes, además de tener todas las utilidades necesarias para programar en cualquier entorno. La instalación de VSCode es bastante trivial, solo hay que descargar el instalador para nuestra plataforma en:

VSCode: https://code.visualstudio.com/

VSCodium: https://github.com/VSCodium/vscodium/releases

Página de descargas de VSCode

La mayoría querrá descargar los instaladores 'Stable' de macOS y Windows y seguir las instrucciones de instalación. La instalación en Linux depende de la distribución, por ejemplo los usuarios de distribuciones de Debian, como Ubuntu deberían descargar el archivo .deb y ejecutar este comando en la carpeta donde se ubique el archivo descargado:

sudo dpkg -i code_XXXXXX.deb

Para otras versiones en Linux hay paquetes más específicos, portables y también se ofrece la posibilidad de compilar el código fuente: https://code.visualstudio.com/#alt-downloads, aunque ya sería más recomendable descargar la versión portable de VSCodium.

Una vez instalado, se pueden descargar las extensiones correspondientes al lenguaje que se va a utilizar, ayudará con el autocompletado y detección de errores en nuestros programas. Estas son las más recomendadas:

Extensiones de VSCode

Windows

C/C++

Seguir las instrucciones de la página web de VSCode: https://code.visualstudio.com/docs/cpp/config-mingw

Comprobar que los compiladores están correctamente instalados en la línea de comandos:

# Es necesario reabrir la terminal y/o VSCode para que puedan encontrar los comandos 
gcc --version
g++ --version
¡Ojo! Si el compilador o VSCode dan un error porque no se puede encontrar <bits/stdc++.h> hay que hacer lo siguiente:
  • Descarga una copia del archivo stdc++.h
  • Guarda el archivo en C:\msys64\ucrt64\include\c++\<version>\bits\stdc++.h (ruta por defecto, si msys64 está instalado en otro sitio, guardar en el lugar correspondiente)
  • Acuérdate de cerrar y volver a abrir VSCode para aplicar cambios

Python

Instalar el instalador en https://www.python.org/downloads/ y seguir las instrucciones, debería ser un archivo con el formato python-3.XX.X-amd64.exe. No es necesario customizar la instalación, se puede seleccionar 'Instalar ahora'. ES MUY IMPORTANTE MARCAR LA CASILLA 'Add Python 3.XX to PATH', como se muestra en la foto, de lo contrario no funcionará el comando python3.

Primera ventana del instalador de Python en Windows

Se puede comprobar ejecuntando el siguiente comando el la línea de comandos 'cmd'

python3 --version

Java

Descargar el instalador de la versión 17 del JDK desde este link: https://www.oracle.com/java/technologies/downloads/#jdk17-windows y seguir los pasos del instalador, cualquiera de 'x64 Installer' o 'x64 MSI Installer'.

Para comprobar que java esté instalado, ejecutar estos comandos en la línea de comandos:

javac -version
java -version

MacOS

C/C++

La manera más fácil es instalar XCode desde https://developer.apple.com/xcode/. Una vez descargado comprobar que los compiladores están correctamente instalados en la línea de comandos:

gcc --version
g++ --version

Python

Instalar el instalador en https://www.python.org/downloads/ y seguir las instrucciones, se debería descargar un archivo con el formato python-3.XX.X-macosXX.pkg. Comprobar ejecutando el siguiente comando el la Terminal:

python3 --version

Java

Descargar el instalador de la versión 17 del JDK desde este link: https://www.oracle.com/java/technologies/downloads/#jdk17-mac y seguir los pasos del instalador, uno de 'ARM64 DMG Installer' o 'x64 DMG Installer' dependiendo de la arquitectura del procesador.

Para comprobar que java esté instalado, ejecutar estos comandos en la línea de comandos:

javac -version
java -version

Linux

Todos los compiladores se pueden instalar usando los 'package managers' del sistema, como apt, pacman... Aquí solo se muestra la instalación en Debian/Ubuntu.

C/C++

Dependerá de la distribución de Linux, seguramente venga preinstalada.

# Instalar compiladores de C y C++
sudo apt install build-essential
# Comprobar que se han instalado correctamente, debería aparecer un mensaje con la version de los compiladores y su licencia
gcc --version
g++ --version

Python

Dependerá de la distribución de Linux, seguramente venga preinstalada

# Instalar python 3.8, la versión puede cambiar el futuro
sudo apt install python3.8
# Comprobar la instalación, debería mostrar la versión de python
python3 --version

Java

Dependerá de la distribución de Linux, seguramente venga preinstalada

# Instalar el JRE y el JDK
sudo apt install default-jre default-jdk
# Comprobar la instalación, debería mostrar la versión de javac y java
javac -version
java -version

Compilando y ejecutando un programa básico

Ahora que tenemos VSCode instalado, con el compilador y la extensión correspondiente, deberíamos tener autocompletado y detección de errores al escribir código. También deberíamos poder ejecutar nuestro programa usando la combinación de teclas Ctrl + Shift + P y escribir Terminal: Crear Nueva Terminal, ahora podremos compilar y ejecutar nuestro programa, que dependiendo del lenguaje se hará de una forma u otra. No hay que entender al completo lo que hace cada línea de estos segmentos de código que imprimen Hello World, solo hay que saber que tienen que estar presentes. Intenta compilar alguno de ellos:

C

helloworld.c:

// Importar librería para leer/imprimir a la consola
#include "stdio.h"
        
// Esta funcion será la entrada al programa
int main() {
    # Imprimir Hello World! a la consola
    printf("Hello World!");
}
# Compilar el programa
gcc helloworld.c
# El ejecutable creado por defecto tendrá el nombre a.out, se ejecuta así
./a.out    #Hello World!

C++

helloworld.cpp:

// Esta librería es la única que hay que importar en C++, incluye todo lo que hace falta para la programación competitiva
#include <bits/stdc++.h>

// Los namespaces en C++ sirven para encapsular clases y funciones. Es importante incluir esta línea para evitar especificar 'std::' delante de las clases y funciones de la librería estándar
using namespace std;

// Esta funcion será la entrada al programa
int main() {
    cout << "Hello World!";  // Imprimir "Hello World!""
}
# Compilar el programa
g++ helloworld.cpp
# El ejecutable creado por defecto tendrá el nombre a.out, se ejecuta así
./a.out    #Hello World!

Java

HelloWorld.java:

// En Java todo debe pertenecer a una clase, esta se llama HelloWorld porque se encuentra en el archivo HelloWorld.java
public class HelloWorld {
// Esta función es la entrada del programa
public static void main(String[] args) {
    // Imprimir "Hello World!"
    System.out.println("Hello World!");
}
# Compilar el programa, asegúrate que si el archivo se llama HelloWorld.java, existe una clase en el archivo con el nombre HelloWorld que contenga la función main()
javac HelloWorld.java
# Ejecutar el programa con el mismo nombre que el paso anterior, sin .java
java HelloWorld    #Hello World!

Python

hello_world.py:

print("Hello World!")  # Imprimir "Hello World!"
# Python es un lenguaje interpretado, solo hay que escribir un comando
python3 hello_world.py    #Hello World!

Es importante poder compilar las soluciones antes de subirlas y probarlas con los casos de prueba que aparecerán en el problema, ya que un envío incorrecto supone una penalización en concursos reales.

Comprobar soluciones rápidamente

Esta técnica ahorra mucho tiempo a la hora de comprobar si una solución funciona para los casos de prueba de ejemplo o nuestros propios casos. Crearemos un archivo cualquiera, por ejemplo in y copiaremos y pegaremos un caso de prueba en él. Ahora podemos leer el input de la siguiente manera:

# Compilar
g++ solution.cpp
# Ejecutar la solución, pero en vez de introducir los datos manualmente cada vez, se introducen desde el archivo 'in'
./a.out < in
# Esto nos permite también medir el tiempo de ejecución del programa, ya que si introducimos los datos manualmente cuenta como tiempo de ejecución
time ./a.out < in    # Funciona en Linux y Mac
# Para windows, leer esto https://superuser.com/questions/228056/windows-equivalent-to-unix-time-command
# Opcionalmente también podríamos guardar el output
./a.out < in > out

# Combinando todos los comandos, podemos compilar y ejecutar la solución en una sola línea, instantaneamente se mostrará la respuesta
g++ solution.cpp && ./a.out < in   # Funciona en Linux y Mac

# Y si además guardamos la respuesta esperada en un archivo 'out' podemos saber si se corresponden a la perfección porque el siguiente comando no produce ningun output
g++ solution.cpp && ./a.out < in > temp && diff temp out   # Funciona en Linux y Mac
# - Se compila el programa a a.out
# - Se ejecuta a.out, con la entrada del archivo 'in' y se guarda el output en una archivo 'temp'
# - Se compara el archivo 'temp' con la respuesta esperada 'out' y si no nos dice nada, ese caso está bien hecho

Si modificamos solution.cpp y usamos las teclas arriba (o abajo) y enter en la línea de comandos podemos ejecutar el comando de nuevo y así rapidamente comprobar si el pequeño cambio que acabamos de hacer a solution.cpp ya nos funciona.

Ejemplo de in

3 + 2

Ejemplo de out

5

Terminal en Linux

Ayudará desde el primer momento escribir comandos en una terminal. Para esto, se puede usar cualquier aplicación que lo permita, el Windows basta con buscar "cmd" en la barra de busqueda de aplicaciones. En Linux o Mac se puede buscar "term" en la lista de programas instalados para que aparezcan uno o múltiples emuladores de terminal. También se puede usar la terminal integrada de VSCode, basta con apretar a la vez Ctrl + Shift + P, y escribir "Terminal: Create New Terminal". Esta es la mejor opción para todos porque no habrá que moverse de directorio.

# BASICS en Linux

# Nos aparecerá una línea parecida a esta, fijate:
[pepe@ordenador23 ~]$ 
# Esta línea quiere decir:
# - Ejecutas comandos uario 'pepe'
# - 'ordenador23' es simplemente el nombre del ordenador
# - '~' quiere decir que los comandos se ejecutan en la
#   carpeta principal del usuario, que será /home/pepe

# Con el comando 'ls', podemos ver lo que hay en la carpeta
# actual ('~' = /home/pepe):
[pepe@ordenador23 ~]$ ls
Downloads  Desktop  Documents
# Estas carpetas se encuentran en /home/pepe

# Ahora movamonos de carpeta con el comando 'cd'
[pepe@ordenador23 ~]$ cd Downloads
[pepe@ordenador23 Downloads]$
# Podemos ver como ahora la carpeta en la que estamos ha 
# cambiado de '~' a Downloads

# Para movernos una carpeta hacia atrás, usaremos el 
# comando 'cd' con el argumento '..', que quiere decir la
# carpeta padre 
[pepe@ordenador23 Downloads]$ cd ..
[pepe@ordenador23 ~]$

# Y poco más, usa el comando 'pwd' para saber en que 
# directorio te encuentras
[pepe@ordenador23 ~]$ pwd
/home/pepe

Asumiendo que sabemos introducir comandos en la terminal, podemos movernos al siguiente paso

Compiladores en Linux

Ahora, podemos comprobar que los compiladores que necesitaremos están instalados. Si cualquiera de estos comandos genera un error, no está instalado.

# C
gcc --version

# C++
g++ --version

# Python
python3 --version

# Java
javac -version
java -version