¿Cómo mejorar mis habilidades informáticas? ¿Alguien puede recomendar formas para acortar la curva de aprendizaje?

El 90% de todas las personas que te darán sugerencias para mejorar tus habilidades de CS, te dirán que tomes algunos algoritmos y los aprendas, lo que te ayudará a mejorar tus habilidades.

Ahora, qué sucede, aquellos que aún son principiantes intentan seguir los consejos dados por las personas que ya están en algún nivel más alto en la programación. Pronto, comienzan a pensar que los algoritmos son todo y si no podemos saberlo correctamente, la codificación no es lo nuestro. Por lo tanto, van por los algoritmos y terminan confundidos debido a su complejidad. Toda la programación parece difícil porque comenzaron con algoritmos.

Bueno, los algoritmos son más avanzados, simplemente no son necesarios en un nivel inferior de implementación. Se agradece el conocimiento de los algoritmos, pero si no lo tienes, no significa que la programación no sea lo tuyo. Hay mucho que puedes hacer sin algoritmos.

No estoy dando a entender que uno no debe aprender algoritmos en absoluto. Lo que estoy diciendo es que no es necesario.

Ahora, lo que sugeriría es aprender lo básico y comenzar la implementación, hacer clones. Sí, eso es correcto, hacer clones de cualquiera de las aplicaciones funcionales existentes. Eso es altamente efectivo. Actualmente estoy trabajando en un clon reddit utilizando el framework de pila MEAN con la ayuda de thinkster. Te sugiero lo mismo. Olvida los algoritmos y todo y empieza a implementar. Haga un clon de Quora, Facebook, etc. Aprenderá a buen ritmo si hace esto.

Estoy casi en la misma situación, habiendo estudiado electrónica y comunicación engg. y se unió a la industria del software. He estado tratando de aprender algoritmos y estructuras de datos con varios cursos y libros en línea. Sin embargo, la mayoría de ellos tienen una curva de aprendizaje empinada o me dejaron deseando más.

Es importante señalar aquí que, aunque Algo & DS es uno de los temas importantes, un buen curso de CS también enseña las mejores prácticas de ingeniería de software, que creo que también es de gran importancia para una persona que no tiene educación formal de CS.

Después de muchas pruebas y errores, ahora comencé a completar los cursos de MIT OCW. He hecho una lista de ~ 20 cursos de CS que espero completar en unos 4-8 meses. Estoy teniendo buenos resultados hasta ahora con este enfoque.

Aquí está la lista de cursos que espero completar (en este orden):

6.00SC – Introducción a la informática y la programación

6.001 – Estructura e interpretación de programas informáticos.

6.005 – Elementos de construcción de software.

18.01 – Cálculo de una sola variable

6.042 – Matemáticas para informática

6.006 – Introducción a los algoritmos

6.033 – Ingeniería de sistemas informáticos

6.034 – Inteligencia Artificial

6.170 – Laboratorio de ingeniería de software + estudio de software

6.035 – Ingeniería del lenguaje informático

6.171 – Ingeniería de software para aplicación web

6.172 – Ingeniería de rendimiento de sistemas de software

6.046J- Diseño y análisis de algoritmos.

6.858 – Seguridad del sistema informático

6.857 – Seguridad de redes y computadoras.

6.851 – Estructuras de datos avanzadas

6.854 – Algoritmos avanzados

6.828 – Ingeniería de sistemas operativos

1. Primero, comience leyendo sobre algoritmos y estructuras de datos. Para ayudarlo con eso: ¿Cuáles son los recursos más fáciles de aprender para aprender sobre algoritmos?

2. La práctica. Al igual que cualquier otra cosa, practicar te ayudará a mejorar. Con el tiempo, encontrará que muchos algoritmos podrían reajustarse para adaptarse a múltiples necesidades, y que cada estructura de datos que domine podría ayudarlo a resolver un conjunto específico de problemas o mejorar ciertas áreas en un algoritmo.
Mis recursos típicos para problemas / rompecabezas son:
http://community.topcoder.com/tc
http://icpc.baylor.edu/info/Prob
http://www.leetcode.com/
http://www.careercup.com/

3. Tómate tu tiempo con el # 1 y el # 2 y mejorarás. Para dominar las entrevistas, también debe aprender a escribir un código impecable en papel. Así que practique resolver problemas, escribir código, probar, trazar y depurar en papel o en una pizarra blanca. Asegúrate de que para cuando lo escribas en tu computadora, ya habrías resuelto todos los casos de prueba, incluidos los casos de esquina, para que el código se ejecute tal como está.

4. Por último, pero no menos importante (y esto también aumentaría con el tiempo), tendrás que tomarte tu tiempo para resolver nuevos problemas y rompecabezas. Confíe en que tiene la capacidad de resolver un problema y tenga la paciencia para pensar y resolverlo.
En mi experiencia, muchas personas simplemente renuncian a un problema sin darse la oportunidad de tomarse el tiempo y seguir una lógica simple para resolverlo realmente.
A veces, está bien comenzar expresando lo obvio, lo fácil y lo que puede parecer una solución tonta al principio, y luego mejorar esa solución o pensar por qué considera que esta es una solución “mala”. Si contestó eso, entonces Debería poder trabajar en ello para mejorarlo.

Si está tratando de mejorar sus habilidades informáticas con el propósito de entrevistar, no busque más allá de este libro:


Es básicamente un problema estándar aquí en el Área de la Bahía de San Francisco, tanto para entrevistadores como para entrevistados.

Tengo numerosos amigos que se han encerrado en las habitaciones de un hotel y han utilizado este libro durante aproximadamente 3 semanas antes de entrevistarme con éxito en grandes compañías de tecnología.

Aquí está la última edición del libro: Cracking the Coding Interview, 6th Edition: 189 Preguntas y soluciones de programación: Gayle Laakmann McDowell

Recomendaría encarecidamente al juez de Pekín en línea ( http://poj.org/ )

Hay miles de problemas algorítmicos, y puede enviar su código. Puede comprobar inmediatamente si su solución está bien o no. Su código debería 1) producir la salida correcta Y 2) lo suficientemente rápido.

Este recurso se usó realmente en una de las clases de Stanford (CS 97SI) para enseñar habilidades de codificación algorítmica. Aprendí mucho de ello.

Puede utilizar el idioma de su elección, incluido C ++.

Además, puede medir la dificultad de cada problema leyendo las estadísticas: qué porcentaje de envíos fueron correctos, cuántos resolvieron el problema, etc.

Espero que haya ayudado!

Mi compañero de cuarto también tiene antecedentes en ingeniería informática, por lo que puedo entender su punto de dolor. Te recomendaré las mismas cosas que le recomendé.

  1. Resuelva tantos problemas en sitios de programación competitivos como Hackerrank, Leetcode, Topcoder, InterviewBit, etc. Comience desde la sección de algoritmos, luego avance hacia Estructura de datos, Lenguaje de programación y el dominio en el que está interesado, como Aprendizaje automático, SQL, Programación funcional , etc.
  2. Como mencionó, vaya a Introducción a los algoritmos de CLRS. No hace falta mencionar lo efectivo que es.
  3. Consulta un curso sobre algoritmos / estructuras de datos en Coursera, Udacity, etc.
  4. ESCRIBIR CÓDIGO. ESCRIBA EL BUEN CÓDIGO. ESCRIBA EL GRAN CÓDIGO.

    ¡Feliz codificación!

Debes revisar los cursos de Coursera. Tienen un par de REALMENTE buenos, especialmente los algoritmos uno (tenga en cuenta que habrá más de ellos por parte de otros presentadores). Estos cursos están diseñados para el aprendizaje en línea con algunos exámenes y ejercicios. También son buenos para principiantes.

Este es el enlace para el archivo de uno que terminó a principios de este año, más están subiendo. Coursera es genial porque no solo incluye videos y materiales, sino que también puedes encontrar una comunidad de personas que intentan aprender. De hecho, algunas personas organizan reuniones, etc.

https://class.coursera.org/algo/…

Oh, esto es bastante fácil: colabore o compita, aparte de simplemente estudiar / seguir clases.

La codificación en solo puede llevarte tan lejos, entonces es hora de unirte a otros para mejorar.

Respuesta secundaria: Todavía no estoy muy versado en lenguajes de bajo nivel, pero si realmente desea aprenderlo y no, digamos, lenguajes funcionales o algo más, me gustaría C ++, ya que parece ser una herramienta más sólida.

El sc6.00 es probablemente demasiado básico.

Lo que se desea es seleccionar cursos del currículo típico de CS de la división superior de la universidad: arquitectura de computadoras, diseño de sistemas operativos, teoría de computación, estructuras de datos y tal vez construcción de compiladores. Esto le permite conocer por qué las cosas son como son. En la práctica, esto le permite ver soluciones implementables y evitar malas decisiones técnicas. Esta es la diferencia entre, por ejemplo, poder realizar un barrido de 20 TB por día de registros detallados de llamadas en tiempo real y no.

C no debe ser una prioridad; C ++ debería ser incluso menos de uno. A menos que quieras trabajar cerca del silicio, omítelos por ahora. El lenguaje es, de hecho, bastante intrascendente.

La forma en que funciona en el mundo real es que recogerá lo que sea necesario para hacer el trabajo. Esto es dictado por el ecosistema alrededor del espacio problema. Por ejemplo, hacer cualquier cosa en el nivel del kernel de Linux significa C. Para la ciencia de la información, querrá ver Python.

La programación es valiosa para un científico de datos, pero no es indispensable. SQL es muy valioso. Pero la habilidad más importante es comprender lo que analizarás, que generalmente es un negocio. Los análisis sin perspectivas son solo ejercicios.

Para mejorar la programación, una vez que sepa lo básico, simplemente programe. Realmente es así de sencillo. Mire el código de otros cuando pueda aprender de ellos. Y el código. Experimentar. No aconsejaría a un científico de datos principiante que aprendiera lenguajes de sistema como C o C ++. Esos no son muy usados ​​en DS. R, Python y SQL te llevarán a la mayoría de los lugares en DS. Hoy también podrías considerar aprender algo de MapReduce y NOSQL. Todavía no están tomando el control de la industria, pero prevalecen y pueden darle una ventaja de contratación.

Cualquier libro con el título Estructuras de datos y algoritmos debe ayudar a la parte de conocimiento. En cuanto a los rompecabezas, hay sitios que tienen ejercicios de programación, por ejemplo projecteuler.net.