De vez en cuando algunas personas me hablan para pedirme consejo sobre donde empezar en temas de programación, en la mayoría de ocasiones me dicen "Oye Ángel, ¿Sabes de algún tutorial de X lenguaje de programación/librería?.
Parece una pregunta simple y de rápida contestación, pero lo cierto es que me cuesta bastante dar una solución a esta pregunta. ¿Como he aprendido yo a programar? Tampoco lo se con seguridad, lo que si estoy seguro es que no aprendí a programar a través de un tutorial, sino de muchos tutoriales, a parte de mucha práctica, experiencia y Universidad.
Por tanto cuando me hacen una pregunta de este tipo intento ser lo más concreto posible y remitir a un tutorial sobre el lenguaje de programación/librería que me han preguntado, a ser posible siempre de la página oficial del lenguaje de programación/librería.
Pero esto no es suficiente para aprender a programar, para mi hay 2 partes en una buena enseñanza de programación.
- Los fundamentos o metodologías
- Lenguajes de programación concretos
Si aprendes los fundamentos te será relativamente simple usar varios lenguajes de programación con un mínimo de adaptación, pero si empiezas aprendiendo un lenguaje de programación carecerás de una buena base, aunque con el tiempo y debido al uso de dicho lenguaje de programación acabarás dominando los fundamentos.
Para los fundamentos no puedo más que poner enlaces a 3 asignaturas que tuve en la carrera
- Meotodologia y Tecnología de la Programación
- Programación Orientada a Objetos
- Tecnologías de Desarrollo de Software
Metodología y Tecnología de la Programación
- Tema1 - Introducción a la Programación
- Tema 2 - Principios de Diseño de Algoritmos
- Tema 3 - Elementos Básicos de la Programación Imperativa
- Tema 4 - Técnicas Básicas de Ordenación y Búsqueda
- Tema 5 - Introducción a la Complejidad Algorítmica
- Tema 6 - Recursividad
- Tema 7 - 12 - Tipos de Datos Abstractos
Programación Orientada a Objetos
- Tema 1 - Introducción al paradigma de Programación Orientada a Objetos
- Tema 2 - Clases y Objetos en Java
- Tema 3 - Herencia en Java (Parte 1)
- Tema 3 - Herencia en Java (Parte 2)
- Tema 4 - Genericidad
- Tema 4 - Colecciones
- Tema 4 - Patrones de Diseño
- Tema 5 - Corrección y Robustez. Excepciones en Java (Parte 1)
- Tema 5 - Corrección y Robustez. Excepciones en Java (Parte 2)
- Tema 6 - Programación Orientada a Objetos en C++
- Tema 6 - Programación Orientada a Objetos en C# Este tema no está en el temario actual
Tecnologías de Desarrollo de Software
- Tema 1 - Algunos Principios Básicos de Programación Orientada a Objetos
- Tema 2 - Patrones de Diseño
- Tema 3.1 - Desarrollo de Software Basado en Componentes
- Tema 3.2 - Desarrollo de Software Basado en Componentes
- Tema 4 - Desarrollo de Software Dirigido por Pruebas (TDD)
A continuación listo algunas librerías y lenguajes de programación que he usado, tanto personalmente como profesionalmente (se me quedan algunas tecnologías en el tintero como puede ser ObjectPascal, Ensamblador o Visual Basic, pero no descarto actualizar esta entrada en un futuro), con uno o varios enlaces hacia la documentación o tutorial, que por lo general es la documentación que yo he consultado para dicha tecnología.
PHP
Python
Ruby
HTML y CSS
- W3School - Tutorial de Html
- W3School - Tutorial de CSS
- W3School - Tutorial de Html5
- W3School - Tutorial de CSS3
Javascript
- W3School - Tutorial de JavaScript
- W3School - Tutorial de jQuery
- Libro de jQuery
- W3School - Tutorial de AJAX
Java
C#
C++
Bases de Datos SQL
Bases de Datos NoSQL
- MongoDB - Tutorial MongoDB
- PHP - Tutorial MongoDB + PHP
- MongoDB - Tutorial MongoDB + Java
- MongoDB - Tutorial MongoDB + C
- MongoDB(Github) - Tutorial MongoDB + C++
- MongoDB - Tutorial MongoDB + C#
- MongoDB - Tutorial MongoDB + Python
- MongoDB University - Cursos de MongoDB para Administradores, java, Node.js...
Laravel
Django
Ruby on Rails
- Ruby on Rails - Tutorial Ruby On Rails
- EDX - Curso de la Universidad de Berkeley Ingeniería de Software como Servicio donde se usa Ruby On Rails (Parte 1)
- EDX - Curso de la Universidad de Berkeley Ingeniería de Software como Servicio donde se usa Ruby On Rails (Parte 2)
Angularjs
Android
libGDX
Box2D
Ogre3D
GTK
Qt
Succinctly
Succinctly son una serie de libros gratuitos editados por la empresa SyncFusion que personalmente me gustan bastante
Jesús Conde
Jesús Conde es un profesor de secundaria que realiza videos en su canal de youtube sobre distintas tecnologías y aunque, a para mi gusto, son algo básicos y se limita a seguir la documentación hay gente a la que le pueden resultar útiles
Por supuesto, falta un recurso importantísimo a día de hoy que no podía faltar y que personalmente me ha resuelto bastantes problemas
StackOverflow
Para todo lo demás Google is your friend