# Progra - Temas Nati
### Algunas Herramientas Útiles:
- Intérpretes en línea de Python (para que no tengas que instalar nada)
- [Programiz: Online Python Interpreter](https://www.programiz.com/python-programming/online-compiler/)
- [Online Python](https://www.online-python.com/)
- [Jupyter Notebooks](https://jupyter.org/try-jupyter/lab/)
- Son como cuadernos con bloques de código, útiles para aprender y tener como notas/código. Se usan mucho en research y en la U.
- [Stack Overflow](https://stackoverflow.com/): En general googleá cualquier pregunta o cosas que necesités en programación. Usualmente te dirige a Stack Overflow donde está la respuesta de casi todo.
## Básicos de Programación
- Lenguaje recomendado: Python
- Python es usado en muchísimas muchas áreas, la mayoría de software libre trabaja en Python y es un lenguaje fácil de aprender y hay muchos recursos para aprender. Desde Data Sciente, Machine Learning o Research, Python es muy utilizado.
- Videito con el mismo bias mío: https://www.youtube.com/watch?v=Y8Tko2YC5hA&ab_channel=ProgrammingwithMosh
- Qué aprender?
- Variables
- Condicionales: If/Else
- Lazos (while/for)
- Encapsulación.
- Operadores Booleanos: AND, OR, XOR, NOT.
- Operadores matemáticos.
- Funciones
- Mi recomendación: [Harvard - CS50's Introduction to Computer Science](https://discover.edx.org/course/introduction-computer-science-harvardx-cs50x?g_acctid=724-505-4034&g_campaign=b2c_gdn_us_CS50_performance-max&g_campaignid=15252531060&g_adgroupid=&g_adid=&g_keyword=&g_keywordid=&g_network=x&utm_source=google&utm_campaign=b2c_gdn_us_CS50_performance-max&utm_medium=cpc&utm_term=&hsa_acc=7245054034&hsa_cam=15252531060&hsa_grp=&hsa_ad=&hsa_src=x&hsa_tgt=&hsa_kw=&hsa_mt=&hsa_net=adwords&hsa_ver=3&gclid=CjwKCAjws--ZBhAXEiwAv-RNL4MGZUz-NoS7oPzyBkqyaJ7DypDEZOVjB-gjiq1S2pZheoLDTPs7ehoCZswQAvD_BwE#!)
- Este es un muy buen curso para empezar con programación, puede ser un poco abrumador/fast paced pero es genial. Yo basé mi curso de intro a la programación un poco en este.
- Creo que también va más allá de los básicos de programación, pero te daría una buena perspectiva de qué hay en esas áreas.
- Otros cursos:
- [CS50 Introduction to Programming with Python](https://www.edx.org/course/cs50s-introduction-to-programming-with-python?index=product_value_experiment_a&queryID=1d854142d42b71613b73d47bc16c2bc8&position=1): Este no lo he visto, pero creo que va por la misma línea enfocandose en Python. Tal vez empezar acá no sea mala idea.
- [Programming for everybody with Python](https://www.edx.org/course/programming-for-everybody-getting-started-with-pyt?index=product_value_experiment_a&queryID=f6645b132af7411ea14c238d21778158&position=3): Este suena un poco más light, está empezando.
## Progra más avanzada:
- Qué aprender?
- Dictionaries, Arrays, Tuples.
- Recursion
- Clases: Programación Orientada a Objetos (Object Oriented Programing)
- Inheritance/Polymorphism.
- Design Patterns.
- Terminal, IDEs.
- Abrir/leer/escribir archivos.
- Con esto podrías entender y trabajar con programas más complejos.
- Para esto tal vez no haya un sólo curso, pero tal vez podás buscar cada uno de esos casos en internet y encontrar un pequeño tutorial.
- Tal vez podría darte pequeñas tareas para que aprendás cada una de estas cosas.
## Algoritmos y Estructuras
- Se trata de aprender cómo organizan y procesan información las computadoras. Se ve un poco de algoritmos un poco más especializados.
- La idea no es que te sepás de memoria todo esto, pero un poco más tipo: podés entender cómo estos algoritmos (binary searchs, sorting algorithms) funcionan? Por qué se son mejores que otros? Cuales son los trade offs?
- [Grokking Algorithms: An ilustrated guide for programmers and other curious people](https://edu.anarcho-copy.org/Algorithm/grokking-algorithms-illustrated-programmers-curious.pdf)
- [Introduction to Data Structures](https://www.edx.org/course/introduction-to-data-structures?index=product_value_experiment_a&queryID=2a1374b5e7fc6858052a518b917d5c5c&position=6&linked_from=autocomplete)
## Otras Areas:
### Artificial Intelligence (AI)
- [CS50 Introduction to Artificial Intelligence with Python](https://www.edx.org/course/cs50s-introduction-to-artificial-intelligence-with-python?index=product_value_experiment_a&queryID=1d854142d42b71613b73d47bc16c2bc8&position=3)
- Acá creo que lo útil sería que aprendás a usar algunos modelos de machine learning, ojalá en Computer Vision. Lo podríamos ver luego.
### Data Science
- [EDX - Using Python for Research](https://www.edx.org/course/using-python-for-research)
- Acá tal vez aprender un poco de librerías como:
- Numpy
- Scipy
- Scikit-learn