¿Cómo se aprende uno mismo a aprender ciencias de la computación (incluidos algoritmos y bases de datos)?

A continuación se muestra una ruta de aprendizaje que hice para estudiar Informática. Está compuesto casi enteramente de recursos gratuitos disponibles en línea.

He dividido los recursos en los siguientes grupos:

  • Básico : consiste en cursos que generalmente se encuentran en un programa de CS de pregrado
  • Desarrollo de aplicaciones para Android
  • Programación – Para mejorar habilidades en un lenguaje específico.
  • Libros

Núcleo

Termino 1

  1. CS50x
  2. Introducción al pensamiento matemático

Plazo 2

  1. Algoritmos, Parte 1
  2. Algoritmos, Parte 2
  3. Lenguajes de programación, parte A
  4. Introducción a las estadísticas

Plazo 3

  1. 18.06SC Algebra Lineal
  2. Aprendizaje automático
  3. Lenguajes de programación, Parte B
  4. Lenguajes de programación, Parte C

Plazo 4

  1. NAND2Tetris, Parte 1
  2. Introducción a la teoría de la computación.
  3. Diseño de programas informáticos
  4. Introducción a las bases de datos
  5. FastAI

Plazo 5

  1. Hackear el kernel
  2. Criptografía i
  3. Ingeniería de software
    1. Proceso de desarrollo de software
    2. Pruebas de software
    3. Depuración de software
  4. Procesamiento de lenguaje natural con Python
  5. Inteligencia artificial
    1. Introducción a la Inteligencia Artificial.
    2. Inteligencia Artificial: Un Enfoque Moderno

Plazo 6

  1. NAND2Tetris: Parte 2
  2. Criptografía II
  3. Compiladores
  4. Redes de computadoras
    1. Introducción a las redes informáticas
    2. Redes informáticas: un enfoque de arriba hacia abajo
  5. 6.034 Inteligencia Artificial

Término 7 : Proyectos y habilidades de desarrollo

Término 8 : Proyectos y habilidades de desarrollo

Desarrollo de aplicaciones para Android

Principiante

  1. Fundamentos de Android
    1. Interfaz de usuario
    2. Entrada del usuario
    3. Aplicaciones multipantalla
    4. Redes
    5. Almacenamiento de datos
  2. Componentes de la interfaz de usuario
  3. Diseño UX para Desarrolladores Móviles

Intermedio

  1. Desarrollando aplicaciones de Android
  2. Diseño de materiales
  3. Servicios
    1. Inicio de sesión y perfiles
    2. Mapas
    3. Ubicación y contexto
    4. Analítica
    5. Anuncios
  4. Diseño de producto
  5. Prototipado rápido

Avanzado

  1. Desarrollo avanzado de aplicaciones para Android
  2. Rendimiento de Android
  3. Base de fuego
  4. Gradle
  5. Desarrollando aplicaciones escalables

Programación

  1. do
    1. El lenguaje de programación C
  2. C ++
    1. El lenguaje de programación C ++
    2. C ++ moderno y efectivo
  3. Pitón
    1. Automatiza las cosas aburridas con Python
  4. Java
    1. Java efectiva

Libros

  1. Gödel, Escher, Bach: Una trenza dorada eterna
  2. Código Completo
  3. Perlas de programación
  4. Head First Design Patterns
  5. Estructura e interpretación de programas informáticos.
  6. Matematicas concretas

Esto no es de ninguna manera una lista exhaustiva. Estos cursos me parecieron muy interesantes, y espero que al menos te den un punto de partida.

Actualizaré la lista a medida que encuentre más recursos interesantes.

Diviértete aprendiendo 🙂

Ver también :

Para mas cursos

  • Coursera
  • edX
  • Udacity
  • Stanford en línea

Curso muy recomendable

  • Aprendiendo a aprender

Esta excelente entrada de blog.

  • Lo que todo estudiante de informática debe saber

Si vas a la academia de códigos y tomas su curso de introducción a Python, te dará los conceptos básicos de cómo construir programas simples. A partir de ahí, puede profundizar más con uno de los programas en línea como Code School o un par de series basadas en python en Coursera para familiarizarse con la programación.

Entonces se trata de crear una imagen conceptual más grande y un montón de código de escritura por su cuenta.

Podría trabajar con una serie de diferentes libros de teoría de ciencias de la computación (Foundations of Computer Science – es un código abierto gratuito que es bastante bueno [1]) o incluso Kahn Academy tiene algunas introducciones a los algoritmos y la informática, que también son gratis.

Realmente se trata de empeorar y ensuciar, programar y hacer preguntas sobre el desbordamiento de pila y, si puede, encontrar un mentor que lo ayude a comprender el contexto y cómo las cosas que aprende realmente se aplican en el desierto.

Python ciertamente tampoco es el único camino. Podría aprender Java, o C / C ++ en su lugar, también hay algunos recursos en línea para esos idiomas. Realmente no importa cuál elija, pero lo bueno de python es que la gramática es legible, por lo que si está aprendiendo por su cuenta, es más fácil comenzar aquí, pero los conceptos son los mismos y es probable que lea y eventualmente escriba muchos idiomas, así que no se deje atrapar por la elección del idioma perfecto a menos que tenga un objetivo específico e inmediato.

La única excepción en mi mente, si realmente desea comenzar a aprender y tener un camino claro hacia el empleo rápidamente (rápidamente me refiero a un año o menos con 20-30 horas a la semana de trabajo enfocado), sugeriría Javascript porque hay un montón de puestos de trabajo en esa área en este momento. Hay trabajos que puede obtener (como trabajos de publicidad y marketing) en los que podría aprender y crecer en el trabajo al apoyar a un equipo de desarrollo con algunas habilidades de JS y HTML y CSS sólidas antes de convertirse en un desarrollador completo. Si vas por esa ruta, Code School tiene un programa bastante bueno por $ 29 por mes.

Notas al pie

[1] Fundamentos Aho / Ullman de Ciencias de la Computación

Uno no puede aprender ciencias de la computación sin aprender un lenguaje de programación. Mi primer lenguaje de programación real es C Programar que el curso es demasiado antiguo incluso en el momento en que lo completé, pero aún ahora diría que es el mejor curso disponible para que un principiante entienda los conceptos fundamentales de la informática.

Después de un tiempo completé dos cursos en Udacity:

  1. Introducción a la informática | Udacity
  2. Desarrollo web | Udacity

Luego comencé mi carrera como desarrollador web de Full Stack, esos dos cursos realmente me ayudaron con eso y también como academia.

Siempre quise ser un desarrollador de juegos independiente, ya que he intentado varias cosas, incluido el aprendizaje de Programación en C / C ++, pero una cosa en la que hice un buen progreso es con Unity Course: Learn Unity 5 at Your Pace en Udemy.

Practicar:

  • Proyecto euler
  • El desafío de Python
  • karan / proyectos

Y lo más importante es que el conocimiento proviene de la experiencia.

Esta es una muy buena pregunta. Tanto es así que en realidad escribí un artículo detallado sobre todos los temas que debe cubrir para aprender ciencias informáticas.

Para resumir el artículo, hay tres pasos que debes seguir para aprender ciencias informáticas:

Primero: Aprende a Codificar

Esto es lo que debes hacer cuando empiezas. No es necesario esperar hasta que vayas a la universidad. De hecho, ni siquiera necesita un título para aprender a codificar.

Una pregunta común es “¿Qué lenguaje de programación debería aprender primero?” Y mi respuesta es que realmente no lo es y no debería importar.

En esta etapa, aprenderá conceptos de programación generales que serán útiles en el futuro para cualquier otro lenguaje de programación que desee aprender en el futuro. Elegiría Python y / o Java porque son ampliamente utilizados.

Segundo: ser un programador sofisticado

En esta etapa, no se trata solo de escribir código que haga cosas geniales.

Se trata de escribir código eficiente. Comprender cómo estructurar su código de tal manera que sea más eficiente, ya sea en términos de rendimiento o utilización de recursos.

Este es también el paso en el que comienza a aprender sobre las distintas capas debajo de su software. Por ejemplo, sistemas operativos, compiladores y hardware. Todos estos temas son cruciales para un programador completo.

Los temas en esta etapa incluyen: estructuras de datos, algoritmos, sistemas operativos, arquitectura de computadoras y diseño digital

Después de esta etapa eres deseable en una empresa decente.

Tercero: el científico informático avanzado

Esto es cuando tiene la experiencia suficiente para saber cómo diseñar sistemas altamente escalables para fines de rendimiento y tolerancia a fallos.

Esto es también cuando se ramifica a otros temas avanzados de informática que podrían ser interesantes para usted (por ejemplo, ciencia de datos y aprendizaje automático)

El tema general de esta etapa es que usted es un chico de imagen grande, usted es un arquitecto de sistemas. Otras personas se preocuparán por los detalles de la implementación.

Los temas en esta etapa incluyen: sistemas distribuidos, aprendizaje automático.

Existen múltiples formas a través de las cuales puede alcanzar diferentes niveles de comprensión en ciencias de la computación.
1. En las escuelas de posgrado: los estudiantes a menudo tienden a descuidar la importancia de los cursos fundamentales de informática en sus escuelas de posgrado, que a menudo son necesarios para una base sólida. Cursos como sistemas operativos, metodologías e ingeniería de software, redes informáticas, bases de datos y algoritmos.
2. Para la implementación práctica y los trabajos, los estudiantes también deben centrarse en las tecnologías. Una de las formas de hacerlo es hacer pasantías desde nuevas empresas.

Cuando comencé mi carrera en TI fue lo que uno hace cuando la otra carrera no funciona. Estaba destinado a tener una carrera militar, pero al final de la Guerra Fría … bueno, formé parte del “dividendo de la paz”.

La informática es un mundo GRANDE. Soy ingeniero de sistemas y he hecho bastante trabajo de integración. Claro, hago un poco de codificación pero estoy muy lejos de ser un programador. En mi tiempo libre, estoy diseñando y construyendo otra impresora 3D / CNC. Quiero dar un paso hacia el aprendizaje automático incorporando la visión artificial.

Mi punto es que creo que puedes encontrar algo interesante y simplemente seguir adelante. Si realmente te interesa, entonces encontrarás un camino. Cometerás errores pero aprenderás.

En estos días, la forma más fácil de comenzar es comprar algo como un Banana PI e instalar Ubuntu. Es una pequeña plataforma decente y al separar el trabajo de su computadora de su plataforma de computación normal, no tendrá que temer romper su única computadora. Estas cosas son realmente baratas, por lo que si necesita algunas de ellas no romperá el banco. Tengo cinco y solo puedo ver ese número aumentando.

Que te diviertas.

Si puede interpretar bien el idioma inglés, entonces hay un gran porque hay mucho material en línea sobre Ciencias de la Computación en inglés.
Pasos: –

  • Comenzar desde CS50 desde edx.
  • Aprender python.
  • Aprender la metodología de programación orientada a objetos.
  • Aprenda sobre la estructura de datos y los algoritmos (Introducción al algoritmo por T.cormen)
  • Comience a resolver problemas de hackerrank, codechef, topcoder, etc.
  • Aprenda cómo implementar la programación para problemas en tiempo real.
  • Aprenda sobre el sistema operativo.
  • Aprender sobre redes.

Lo harás bien en informática si sabes esto.
Estos pasos no son tan fáciles como parece.

Romper una pierna.

Al hacer clic en los enlaces de esta respuesta y si compra algo a través de mi publicación, es posible que obtenga una pequeña parte de la venta.

Puede probar este curso de Udemy, que es GRATUITO en este momento: High School Computer Science (Math) y Taller de Programación .

En este curso aprenderás cómo:

  • Comprensión en profundidad de las ideas y conceptos fundamentales en informática y programación
  • Un panorama y un fondo sólido en las principales áreas de la informática
  • Aprendizaje de programación en Snap! Herramienta de programación de UC-Berkeley
  • Aprendizaje de programación en la herramienta de programación de Scratch del MIT
  • Conocimiento y experiencia para comenzar a aprender nuevos lenguajes de programación
  • Capacidad mejorada en pensamiento crítico, razonamiento lógico, modelado, diseño, planificación e implementación

¡Buena suerte con sus estudios!

Una excelente manera de autoaprender casi cualquier campo de estudio enseñado a nivel universitario es la siguiente:

1) ir a un sitio web de una universidad con un departamento que sea bueno en ese campo
2) descubrir cuál sería un curso de estudio típico
3) comenzar con el primer curso
4) ir a la página del curso
5) mirar el programa de estudios
6) comprar el libro de texto
7) leer el libro de texto
8) pasar al siguiente curso …

Para muchos campos de estudio hay al menos un gran libro de texto introductorio. Mucha gente se sorprendería de lo útiles que son esas cosas. Están llenos de los resultados más importantes y acordados de cualquier campo, y la información en ellos casi nunca queda obsoleta. Los libros suelen estar muy bien escritos, se han sometido a múltiples revisiones y se han refinado en respuesta al uso en cientos de aulas que enseñan a miles de estudiantes de introducción.

Lamentablemente, no puedo nombrar tal libro de texto para Ciencias de la Computación, pero siga la lista y será bueno. Las matemáticas universitarias son de la misma manera; Es como que va tema por tema.

Tiene 12 años y su idea de comenzar temprano es una buena idea.

Golpea fuerte, golpea temprano!

Comience con el curso Harvard CS50 en EdX. Eso es lo mejor disponible para los principiantes en informática en internet. Con una comunidad de Facebook completamente vibrante y un canal de intercambio de pila separado, esto enseña mucho y, lo que es más importante, te introduce en las aplicaciones del mundo real de CS y te enamorarás de CS a partir de entonces. Estarás aprendiendo todo en el dominio CS desde Programación a Web, Encriptación y todo lo demás. Este es un curso gratuito y abierto y puede completarlo lo antes posible sin limitaciones de tiempo.

Luego, dependiendo de lo que haya disfrutado en CS50, conviértase en ese campo web / programación / seguridad, etc.

Aprendizaje feliz 🙂 Todo el mejor amigo 🙂

Comienza con este curso introductorio: De NAND a Tetris

Este curso le enseñará cómo, a partir de compuertas lógicas (componentes eléctricos), puede construir componentes y estructuras sucesivamente más complejos hasta que termine con una computadora moderna.

Luego, ¡te hará construir todas las capas de software hasta que puedas programar Tetris en la computadora que tú mismo construiste!

Esto le dará una buena visión general y la confianza para continuar.

En cuanto a dónde ir a continuación, hay una gran cantidad de material (gratuito o de pago) en línea. Si necesita una hoja de ruta, consulte cualquier programa de pregrado en informática.

Pero termina NAND a Tetris primero.

Comencé a codificar a mediados de los 70 mientras estaba en la escuela secundaria. Escribí programas en una computadora mainframe de tiempo compartido en la universidad local menor. No recuerdo el idioma, pero probablemente fue Fortran. No tomé ningún curso de programación de computadoras en la universidad, pero una vez que entré en el mundo de los negocios, ocasionalmente escribía programas para ayudarme a hacer mi trabajo. Comencé con Quick Basic y luego Visual Basic. Me incursioné en C y C ++ pero nunca conseguí hablar con fluidez.

Me retiré hace dos años y decidí ponerme seria. Le pregunté a un amigo programador que había asistido a MIT en qué idiomas debería enfocarme, y él recomendó que Python y R. Python es un lenguaje de propósito general con una tonelada de flexibilidad y simplicidad inherente, y R es un lenguaje de programación estadística de muchas maneras similar a Pitón. Bueno para el análisis de grandes datos.

Mi primer paso fue tomar un curso en línea de Coursera llamado “Introducción a la programación interactiva para Python”, impartido por profesores en Rice, donde aprendimos a crear videojuegos. Muy divertido. Luego tomé un curso de R de UPenn en Coursera, y luego, recientemente, “Introducción a la informática y programación utilizando Python”, se impartió en el MIT a través de edX. El último curso fue el mejor. Todos los cursos son gratuitos. Terminé todos los cursos, así que obviamente todos mantuvieron mi interés. Compromiso bastante grande. Harvard ofrece CS50, su curso de introducción a la informática en edX también. Lo empecé, pero es a mi propio ritmo, por lo que me resultó muy fácil postergarlo. Los demás tienen exámenes y tareas cada semana, así que no puedes dejarlos pasar.

Mi hijo vive en san francisco. Tiene 26. Tenía interés en aprender a codificar. Primero tomó un curso real en una escuela de programación local en los idiomas Ruby y Ruby on Rails. Tenía interés en el desarrollo web y ha trabajado en varios proyectos desde que tomó el curso. En el camino aprendió Java, Java Script, Coffee Script, HTML, CSS, Scala y Swift (el nuevo lenguaje de programación de Apple para el desarrollo de aplicaciones). Él tiene una comprensión básica de varios otros idiomas. Todo esto principalmente solo y con la ayuda de amigos que son programadores profesionales.

Por último, echa un vistazo a los codewars sitio web. Es gratis. Una vez que te registres, te darán problemas de programación para que los resuelvas, comiencen fácilmente y se vuelvan cada vez más difíciles a medida que adquieras más habilidad. Los problemas son propuestos al sitio web por programadores serios. El sitio web califica sus soluciones automáticamente cuando las envía. Esto está disponible para una tonelada de diferentes idiomas, incluido Python. Es una buena manera de mejorar y mantenerse fresco en un idioma.

Espero que esto ayude.

En mi humilde opinión creo que primero debes determinar en qué quieres convertirte en élite.

Ser elite en CS requiere años de práctica en diferentes materias y muchas habilidades diferentes según la materia.

Recomendaré a muchos antes de mí que empiecen con la teoría básica de la CS: lo que se llama “qué” y “CS50” es un gran curso para eso.

Pero mientras lo haces, empieza a mirar a tu alrededor y determinar qué te hace tic.

  • ¿Qué prefieres hacer? (solo para resolver problemas o contribuir a resolver problemas con otros, crear aplicaciones o juegos impresionantes, etc.)
  • ¿Cómo te ves en 5 años? (elite de escenario, elite de la comunidad, elite de hackers, elite de diseñadores, ingeniero de software de Google Facebook, nombre, desarrollador de juegos en Blizzard, etc.)

Y cuando sepas qué es lo que prefieres hacer, profundiza en él. Sigue la cuenta de Twitter de este tema. Construye un blog sobre él. Graba videos para que la gente sepa lo bueno que eres. Vaya a las entrevistas para los trabajos en esta industria, trabaje con otros y puede que algún día se convierta en élite en este campo o tecnología en particular.

El problema con la CS en general es que es GRANDE, hay muchos temas que necesitan conocimientos específicos y una mentalidad; algunas necesidades son muy altas, pero otras no solo necesitan una creatividad lógica pura y, sobre todo, curiosidad.

Muy bien mirar en convertirse 3l173.

Lee algunos buenos libros y tutoriales.

Lo más importante es la forma en que aprendes, ¡debes conocer la base de la informática antes de programar la computadora! significa lo que es una memoria, lo que es un poco, lo que es un procesador. Una vez que se entienda la arquitectura, entonces puedes leer el libro de programación. Puede aprender a programar sin saber qué es una dirección o una interrupción, pero muy pronto escuchará acerca de la interrupción, las señales y el puntero, y así volverá a la arquitectura. Por lo tanto, respete el pedido y será el mejor desarrollador de software.

Algo más, el análisis es mucho más relevante que el código. Por lo tanto, el modelado, el diseño, el esquema, el UML y los algoritmos son el núcleo de cómo funciona su programa o los enlaces de la base de datos. Esta es la parte de pensamiento. Si usa UML u otras herramientas de modelado como CPNTOOLS u otras, ¡el código se genera automáticamente!

Así que recuerda; Arquitectura, modelado, datos y código. Significa que el 80% del tiempo del ingeniero de software es análisis y el 20% es código de escritura.

Olvidé, existen muchos códigos y algoritmos (vea github, codeproject, … y así sucesivamente), así que no pierda el tiempo para escribirlo de nuevo, pero intente dedicar tiempo a entenderlo para mejorar.

Cosas del programa Tonterías. Imprimir “¡Hola, mundo!” a una consola. Codifica una función que devuelve el factorial de un número.

Luego, aprenda cómo usar un sistema operativo no convencional (¡Hola, Linux!) A través de la línea de comandos. Configure su propio archivo con las preferencias de cómo usará su terminal shell para interactuar con su sistema. Codifique algunas funciones para ejecutar comandos en valores dinámicos.

Después de eso, aprende cómo funciona ese programa. ¿Por qué hace las cosas como lo hace? ¿Cuál es la diferencia entre un lenguaje interpretado y un compilado? ¿Por qué es Java / C # un “caso especial”? ¿Cómo interactúa el hardware con el software? ¿Cómo puede una computadora intercambiar datos con otra?

¿Y que? Entonces sabrás lo suficiente para decidir qué estudiar a continuación sin sentir que estás ciegamente, tocando las paredes de una cueva oscura sin pensar. Tendrás una pequeña vela salvadora en tu mano.

Ambición y pasión. Sin estos fallarás especialmente en CS y programación.

No le proporcionaré una lista de lecturas obligatorias, etc., porque hay millones de libros y lo que quiere hacer depende de sus intereses.

Pero la verdad sea dicha: puedes y no lo sabrás todo. Centrarse en algunas áreas.

Soy autodidacta de programación y puedo decirles que es una tarea enorme. Cuando era un estudiante de sexto grado odiaba a CS al máximo. En unos meses lo estudiaré.

Creo que Google es tu mejor amigo aquí. Pero tenga un amigo o alguien que ya sea un desarrollador de software para hacer preguntas porque Internet le proporcionará mucha información errónea. Los problemas que experimenté con este enfoque es que usted tiene muchos “grupos” de conocimientos que no sabe qué hacer con los que se están conectando entre sí cuanto más leen.

Y HAGA PREGUNTAS. Podría jurar que mi “mentor” en CS quiere suicidarse cada vez que recibe una pregunta de mí, pero sigo preguntando. 😀

‘Lo importante es no dejar de cuestionar. La curiosidad tiene su propia razón de existir.’ – Albert Einstein

Con la cantidad de recursos que tenemos hoy, el autoaprendizaje es la mejor manera de aprender cualquier cosa. La informática es un tema fascinante. Debe seguir los libros de texto estándar y utilizar Internet para su beneficio. Hay tantos cursos en línea disponibles donde puedes registrarte y aprender cosas diferentes. Puedes ver tutoriales en línea también. Pero contarte a ti mismo en un grupo de élite requiere mucho trabajo duro. Será un proceso gradual para usted, pero una vez que comience a gastar su tiempo de manera productiva, definitivamente lo alcanzará.

También estoy tomando AP Compsci en mi escuela. Los recursos que utilizamos incluyen CodeHS y un libro de texto: Introducción a la programación en Java, versión completa (9ª edición), que puede simplemente buscar en Google y descargar en formato pdf. Por mi cuenta, me gusta practicar en CodingBat. AP compsci lleva mucho tiempo, por lo que es útil desarrollar una pasión por la codificación.

Otra herramienta que me ayuda es el pensamiento de arriba hacia abajo. Implica en gran medida comenzar desde el problema final y descomponerlo en problemas más pequeños y fáciles. Esto es útil porque necesitará organizar sus métodos y aún así tener la salida correcta.

Por último, sigue un montón de temas de CS aquí en Quora porque hay mucha gente con más experiencia que yo. ¡Buena suerte!

La informática es una gran carrera para perseguir. Pero no te obligues a que te guste. Sólo causará miseria. Si te apasiona lo sabrás.

Tengo este amigo que también quería hacer CS. Descubrió que estaba más interesada en la atención médica y se convirtió en enfermera. Ella me dijo que no podía estar más feliz con su trabajo. Soy todo lo contrario que empecé queriendo estar en la salud. Tuve mi primer contacto con el cuidado de la salud y lo odié. Fui un CNA por un momento muy breve. Busqué en informática y me enamoré.

Intenta enseñarte a ti mismo cómo programar. Mira si te gusta programar.
Aquí hay un gran comienzo:

http://learnpythonthehardway.org

Recuerde quedarse con él. En realidad aprender a programar. La parte de aprendizaje SERÁ aburrida y frustrante pero quédate con ella confía en mí. Aparte de eso espero que esto me haya ayudado.

A2A. No te recomiendo gastar más dinero a menos que lo necesites para un curso en particular. Los cursos de programación que recomendaré son gratuitos y lo prepararán para los Principios de Ciencias de la Computación de AP y las clases de secundaria de Ciencias de la Computación de AP.

Personalmente, no recomendaría comenzar con C / C ++ pero con la programación de computadora de Khan Academy. Puedes aprender lo básico allí. Se enseña a nivel de secundaria.

A continuación, recomiendo Stanford CS 106A, CS 106B y CS 107, consulte Stanford Engineering Everywhere. Aprenderás C / C ++ en CS 106B. El siguiente curso es Informática Algoritmos.

Finalmente, las matemáticas son un componente crítico para el aprendizaje de Ciencias de la Computación. Te recomiendo School Yourself para tus matemáticas de preparatoria. KhanAcademy también tiene tutoriales de matemáticas.