¿Qué consejo le daría a un estudiante de Ciencias de la Computación que desearía que le dieran cuando comenzó a aprender Ciencias de la Computación?

  • No espere que se le dé mucha instrucción sobre cómo programar en una escuela de CS. Aparte de algunos conceptos básicos, es probable que sus profesores se centren en los conceptos y dejen la implementación como una actividad autodirigida. Si esto te molesta, es posible que no te queden sin el CS.
  • Enfócate en tomar las clases donde aprenderás más. Nunca tome clases basándose en lo fácil que es obtener una calificación en ellas. Es mucho más importante aprender mucho que preocuparse por las calificaciones. El escenario ideal aquí es tomar una clase en la que se esfuerce por aprender, y aún así obtener excelentes calificaciones. Es muy factible. No tome atajos en el aprendizaje. (Por ejemplo, ver: ¿Qué es más beneficioso para aprender como primer lenguaje de programación, Java o C ++? ¿Por qué?).
  • Siempre trate de construir una visión unificada de la informática de las diferentes clases que toma. Su clase de Teoría de la Computación puede enseñarle algo valioso para su clase de Compiladores. Tu clase de algoritmos está relacionada con tu clase de gráficos. Tu clase de gráficos está relacionada con tu clase de álgebra lineal. Cuando haya una superposición de conocimientos en las diferentes clases, utilice esa superposición en su beneficio para reforzar continuamente su aprendizaje. Las condiciones previas y las condiciones posteriores a las que aprendió en las pruebas de corrección de los programas se asignan directamente a las afirmaciones. Sigue recolectando piezas del rompecabezas y ponlas juntas.
  • No sacrifique el aprendizaje teórico por el aprendizaje centrado en la implementación, y viceversa. Ambos son duales entre sí, y no en desacuerdo entre sí. Si sacrificas la teoría, te privará de un marco analítico muy necesario para examinar rigurosamente la complejidad de los algoritmos. Si sacrifica la implementación, también podría ser un especialista en matemáticas especializado en matemáticas discretas. Del mismo modo, no sacrifique la profundidad por la amplitud o viceversa.
  • No se preocupe por ignorar sus clases que no son de CS, especialmente si desea trabajar en la industria. No le presté atención a muchos de ellos, y tenía a B atascado en mi promedio de calificaciones, pero lo que sea.
  • Tus clases de algoritmos, sistema operativo y compilador serán probablemente tus clases más importantes. No se limite a lo que su maestro le dice, sea una esponja y absorba todo y todo lo que pueda aprender sobre esos temas. Te mantendrán en buena posición durante mucho, mucho tiempo. (Consulte: ¿Qué habilidades les faltan a los programadores autodidactas? ¿Qué debe estudiar un programador autodidacta para ponerse al día con sus compañeros educados formalmente?)
  • Elige bien a tus colaboradores y compañeros de estudio. Realmente pueden inculcar la mentalidad correcta para aprender en ti.
  • Ayuda a desarrollar buenas relaciones con sus profesores, en múltiples frentes. En general, se siente bien mirar hacia atrás y reflexionar sobre cómo no pensó en las personas que aprendió con un sentido de hostilidad. Esto es muy importante si desea postularse a una escuela de posgrado, desea investigar con un profesor o pedirle que lo ayude a publicitar los empleos para su compañía cuando más tarde trabaje en la industria.
  • No es genérico para CS, aunque no hace falta decir que debes establecer buenas amistades. Sus amistades universitarias durarán mucho tiempo y serán una red social y una red profesional para toda la vida.
  • Intente que sus proyectos de programación se realicen mucho antes de los plazos, lo ideal sería tenerlos listos para su presentación con una semana de anticipación para que siempre esté depurando y programando con una mentalidad relajada. Haga copias de seguridad de su trabajo de la paranoia.
  • Participa en competiciones de programación si puedes. No tienes nada que perder, y esforzarte para aprender será útil. (Consulte: ¿El éxito de ACM-ICPC o IOI se correlaciona con el éxito de la industria?)
  • Tu primer trabajo u otra actividad después de la escuela será muy formativo. Asegúrese de invertir adecuadamente para asegurarse de que elige bien. Elegir ingenuamente el trabajo que simplemente maximiza su salario puede ser una decisión subóptima.
  • Dedique tiempo a la milla extra para aprender sobre su sistema operativo (¿Cuáles son algunos consejos para ahorrar tiempo que todos los usuarios de Linux deberían saber?), Su depurador (por ejemplo: ¿Cómo puede uno ser tan eficiente en usar GDB como en usar un depurador visual?) y su editor (por ejemplo, ¿Cuáles son algunos de los comandos Vim favoritos (sin complementos, sin asignaciones, etc .; solo las cosas que puede escribir en una instalación nueva de fábrica)?). Pueden ser muy útiles para mejorar su productividad y lo que aprende que puede conservar.
  • Al final del día, debe darse cuenta de que una gran parte de su educación le está enseñando cómo aprender a aprender en lugar de cursos específicos.
  • A veces es tentador escribir programas que cumplan con los requisitos de su proyecto y que puedan superar la calificación de TA, pero que no cumplan con los requisitos para un programa real. Por ejemplo, es fácil para usted crear fugas de memoria en sus asignaciones y obtener el mérito completo, aunque trate de esforzarse para hacer un buen trabajo aquí e intente ser un perfeccionista en cualquier código que controle.
  • Aproveche las oportunidades para escuchar conferencias y charlas que no forman parte de los cursos oficiales. En el caso de oradores particularmente prolíficos, una buena charla puede influir en su pensamiento para toda la vida. Algunas conferencias de Dijkstra a las que asistí todavía hacen eco en mi cabeza.

Mis estudiantes más exitosos (y graduados) tienen una serie de cosas en común. Estos son rasgos que puedes desarrollar, con tiempo y práctica.

1) No dudes en ser curioso. Hacer preguntas. Probar cosas Aprende nuevas ideas. Añadir nuevas habilidades. Nunca dejes de preguntar “¿Por qué?” ¿y cómo?”. Tomar optativas que no sean necesarias. Es importante aprender sus límites (y ampliarlos), así como también aprender qué hace y qué no le gusta hacer. No evites algo porque piensas que es “demasiado difícil” hasta que lo hayas probado durante el tiempo suficiente para estar seguro.

2) Póngase cómodo y domine el lenguaje humano. Siéntete cómodo leyendo y aprendiendo lo que lees. Aprende a escribir bien – claramente, de manera organizada, con buena estructura e imágenes. Aprenda a hablar de manera clara y comprensible, tanto en grupos pequeños como a una audiencia. Considere involucrarse con una organización estudiantil, por ejemplo, el gobierno estudiantil o un capítulo ACM estudiantil.

3) Abrazar la resolución de problemas y habilidades de resolución de problemas. Esto significa, en parte, no tener miedo de las matemáticas (especialmente los temas matemáticos finitos y la teoría de números), sino cultivar su capacidad de pensar cómo resolver problemas. Los enigmas y los acertijos son un buen entrenamiento, no te desanimes si no los resuelves en el primer intento o en el 100. Busca oportunidades para desafiarte a ti mismo.

4) Cultivar la paciencia. Aprende a ser paciente, cuidadoso y persistente. Los programas no suelen funcionar en el primer intento, y si tiene prisa por codificarlos o probarlos o corregirlos, a menudo hace más trabajo por sí mismo. Algunos de mis alumnos han informado que pasatiempos como la costura, el soplado de vidrio, la construcción de modelos, etc., ayudan a enseñar paciencia; otros han tenido buena suerte con la meditación, las artes marciales, etc. No hay un “mejor camino” pero si tiendes a ser impaciente, debes tratar de dominar eso.

5) Las interacciones sociales son importantes. Aprende cómo interactúas mejor con los demás. Pule tus modales. Báñese regularmente (¡en serio un problema con algunos en el campo!) Y aprenda a lavar la ropa. Aprende a sonreir Únase a un club, invite a otros a almorzar, aprenda a hacer preguntas a otros (y ESCUCHE las respuestas). Por cierto, el consumo excesivo de alcohol o las drogas puede parecer más social, pero interfiere con varias de las cosas que he enumerado aquí, así como posiblemente descalificándote de varias carreras profesionales; ser social no significa someterse a la presión social en todos los casos.

6) Mantente al día con el campo, y con el mundo. Únase a la ACM y a la IEEE Computer Society (los estudiantes obtienen descuentos en los precios). Lea la literatura que sale sobre computación. Consiga reconocer los nombres de las personas en el campo, así como las empresas emergentes. Además, manténgase al día con algunas noticias sobre el mundo, incluso si solo lee algunos de los titulares (al principio). Los posibles empleadores y colegas pueden preguntarle su opinión sobre cosas que son “una gran noticia” y una mirada en blanco no es la mejor respuesta.

7) Obtener una base en al menos otro campo: química, aeronáutica, estadística, criminología … Considere un menor o incluso un segundo mayor. Mejorará sus posibilidades de trabajo y le brindará más oportunidades de cambiar de campo si alguna vez decide que desea abandonar la informática.

Estructuras de datos y algoritmos

Un gran programador o desarrollador debe ser fuerte en estructuras de datos y algoritmos. Una vez que se sienta cómodo con su idioma favorito de elección (recomendaría C ++), comience a dedicar tiempo a las estructuras de datos y algoritmos básicos.

  • El libro más recomendado para el estudio de estructuras de datos y algoritmos es Introducción a los algoritmos conocidos popularmente como CLRS.
  • También te recomendaría el Diseño y Análisis de Algoritmos en Coursera por la Universidad de Stanford.

Aquí hay un consejo que recibí de mi súper senior (Divanshu Garg, SE en Google Australia) cuando estaba en el primer año.

Como solía hacer un montón de SPOJ en el primer año, y seguí leyendo Cormen. Honestamente, en ese entonces, generalmente no podía entender todo porque el libro está avanzado pero aprendía algo cada vez que lo leo. Si no puedes entender un simple algo, léelo en INTERNET para entender más. luego practicar algunas preguntas relacionadas en SPOJ.

Programacion practicante

Es muy importante escribir el código cuando aprenda un nuevo algoritmo o estructura de datos. Una forma de lograr esto es a través de jueces en línea. Si te gusta resolver rompecabezas, te encantaría. Aquí están mis jueces favoritos en línea para principiantes.

  • Entrada de entrenamiento de USACO
  • SPOJ
  • LightOJ
  • Codechef
  • Codeforces

Entre ellos, la pasarela de capacitación de USACO contiene tutoriales y problemas organizados de manera sistemática. Este sitio le ayudará a aprender los fundamentos básicos rápidamente si no tiene mucha experiencia con los algoritmos.

LightOJ contiene problemas organizados por categorías y es un buen recurso para prepararse para ACM ICPC.

Convertirse en un hacker

Mover a Linux

Solo muévete a Linux. Linux sería difícil por unos días, pero pronto te parecería increíble. El shell (línea de comando en Linux) es tan poderoso que puedes lograr casi cualquier cosa con él. Puede automatizar el sistema completamente una vez que esté familiarizado con el shell. Además, puedes ajustar el sistema operativo en la apariencia que desees. La mayoría de todos los servidores web en Internet son alimentados por servidores Linux. Incluso Microsoft usa una versión personalizada de Linux para Azure.

Aún puedes mantener Windows ya que el entorno de juego de Linux apesta. Te recomiendo que arranques dual de Linux con Windows. He adjuntado un enlace que funcionó para mi mientras estaba iniciando dualmente Ubuntu con Windows8

Aquí están mis distribuciones de Linux favoritas en orden decreciente.

  • Sistema operativo elemental: un sistema operativo Linux hermoso construido sobre Ubuntu. Perfecto para principiantes.
  • Ubuntu – El Linux Distro más popular del mundo
  • Mint – Construido sobre Ubuntu y se parece a Windows.

Leer Noticias Hacker

Cualquier cosa que los buenos hackers encontraran interesante. Eso incluye más que hacking y startups. Si tuvieras que reducirlo a una oración, la respuesta podría ser: cualquier cosa que satisfaga la curiosidad intelectual de uno. Casi todos en la industria tecnológica leen las noticias de Hacker. Si haces algo genial, deberías publicarlo en Hacker News. ¿Quién sabe qué pasa después de eso?

Un millón de visitantes en 10 días

Hacer proyectos laterales

Sam Altman ha explicado por qué deberías hacer proyectos paralelos en su famoso blog post Projects and Companies. Aquí hay un extracto.

Las mejores empresas comienzan con ideas que no suenan muy bien. Comienzan como proyectos y, de hecho, a veces suenan tan intrascendentes que los fundadores no se dejarían trabajar en ellos si tuvieran que defenderlos como empresa. Google y Yahoo comenzaron como proyectos de estudiantes de posgrado. Facebook fue un proyecto que Zuckerberg construyó cuando él era un estudiante de segundo año en la universidad. Twitter fue un proyecto paralelo que comenzó con un solo ingeniero dentro de una empresa haciendo algo totalmente diferente. Airbnb fue un proyecto paralelo para ganar algo de dinero para pagar el alquiler. Todos se convirtieron en empresas después.

Desarrollo web

No puedes hacer proyectos de la nada. Necesitas tener algunas habilidades básicas de desarrollo para comenzar. Yo sugeriría comenzar con el desarrollo web. Asegúrese de tener un editor de texto decente antes de comenzar. Aquí están mis favoritos para desarrollo web en orden decreciente (VIM es mi editor de texto favorito para C / C ++ pero no lo uso para desarrollo web).

  • Código de Visual Studio
  • Átomo
  • Texto sublime

Te sugiero que sigas este orden.

  • Aprende HTML y CSS básico de W3C Schools.

Back End

  • Learn Flask – Flask es un framework de micro web escrito en Python. Es realmente fácil de aprender si conoces Python. Si no conoces Python, te recomiendo que lo aprendas lo más rápido que puedas. Python es muy fácil de aprender si tienes algún tipo de experiencia de programación antes. Una vez que haya creado algo utilizando Flask, le resultará bastante fácil comenzar con marcos web más complejos como Django. Simplemente vaya a la guía de inicio rápido en el sitio web de Flask e intente construir algo usándolo.
  • Learn SQL: SQL es un lenguaje de programación de propósito especial diseñado para administrar datos almacenados en un sistema de administración de bases de datos relacionales. En el caso de Facebook, todas las publicaciones y comentarios se almacenarán en una base de datos y se recuperarán a través de SQL. Una vez almacenado, puede obtener la publicación de SQL haciendo consultas como GET all the posts of user Vishnu which has more than 150 likes . La consulta para esto sería SELECT * from posts WHERE user = 'Vishnu' and likes > 150

Interfaz

Javascript es el lenguaje de programación para el navegador y ayuda a agregar cosas geniales al inicio. ¿Ha notado que las publicaciones se llenan automáticamente cuando llega al final del navegador? Esto se hace con la ayuda de Javascript. Así es el menú que aparece cuando haces clic en la página de configuración. Hay muchos recursos impresionantes para aprender Javascript.

  • Codecademia
  • Tutorial de JavaScript – W3Schools

Una vez que hayas aprendido todo esto deberías hacer algo impresionante.

Escalado y más allá

Es muy importante diseñar aplicaciones web que sean escalables. Si está interesado en este tema, le sugiero que tome el curso de Desarrollo Web en Udacity por parte del Cofundador / CEO de Reddit Steve Huffman.

Pon todo el código en Github.

Cualquiera que sea el código que escriba, asegúrese de ponerlo en Github el mismo día. Hay muchas razones detrás de esta práctica.

  • Sigues escribiendo el código todos los días para mantener tu racha.

  • Obtienes un increíble perfil de Github
  • Te conviertes en un colaborador de código abierto.

Convertirse en un Geek

Aquí hay algunas cosas más que debes hacer.

Un gestor de cuenta Cool

Siempre es bueno tener ese nombre de usuario que casi puedes usar en todas partes, para todas tus cuentas geek. Por lo tanto, cuando comience el viaje, tómese un tiempo para crear un nombre de usuario único y atractivo que crea que es probable que nadie use pronto. por ejemplo, humblefool, dragonslayer, hackerkid (ese soy yo)

Tu propio blog personal y sitio web

¿Necesitas inspiración?

  • Blog de Feross
  • El sitio web de Raj Vir
  • El sitio web de Victor Lourng

En línea

Una vez que haya terminado con su sitio web y blog, es hora de ponerlos en línea. Para poner un sitio web en línea se necesita un servidor. Hay muchos sitios gratuitos de alojamiento web por ahí, pero créeme que apesta. Vienen y desaparecen todo el tiempo. Afortunadamente, como estudiante, puedes usar el paquete Github para estudiantes. Es gratis para todos los estudiantes universitarios y viene con un montón de cosas útiles como

  • Crédito de hospedaje de $ 100 de Digital Ocean: puede iniciar un servidor ($ 5 por mes el servidor Ubuntu haría el trabajo) y poner su sitio web en línea. Solicita una tarjeta de crédito mientras te registras. Puede omitir este paso enviando por correo el servicio de atención al cliente con su ID de universidad.
  • Un año .me nombre de dominio gratis
  • Repositorios privados de Github
  • Toneladas de otras características

Otras alternativas

  • También puede alojar su sitio web en Github Pages si solo tiene contenido estático (es decir, no tiene un backend como Flask)
  • Use Openshift o Heroku siempre que su sitio web no atraiga demasiado tráfico.

Peliculas y libros

Hay algunas películas y libros que cambiarían tu forma de pensar. Aquí están algunos de mis favoritos

Películas

  • Red social
  • Cielo de octubre
  • Piratas de Silicon Valley
  • Latigazo
  • Búsqueda de la felicidad
  • El lobo de Wall Street

Libros

  • Sapiens: Una breve historia de la humanidad
  • Elon Musk: la búsqueda de un futuro fantástico por Ashlee Vance
  • Steve Jobs por Walter Isaacson
  • Zero to One de Peter Thiel

Resumiendo

Esta publicación de blog estaba dirigida a que comiences con la programación y el desarrollo. He ignorado muchas cosas, como pasantías, trabajos de investigación, etc. Si desea agregar más a esta publicación del blog, ¿por qué no?

  • Edite esta página y envíe una solicitud de extracción (si es nuevo en Github, esta puede ser su primera contribución de código abierto)
  • Hacer un comentario aqui

Publicaciones de blog / recursos más útiles

  • Camino a una educación autodidacta gratuita en informática.
  • Solo para principiantes: esta publicación de blog te ayudará mucho a comenzar a utilizar código abierto.
  • Ninguno de nosotros sabe lo que estamos haciendo por Feross
  • Ensayos de Paul Graham – Todo empresario aspirante debería leer esto
  • Siempre estar codificando
  • ¿Qué recomendaría la gente a un (hipotético) graduado universitario de 22 años de edad para hacer con su vida?
  • ¿Qué debe hacer un estudiante universitario de CS para competir globalmente?

Publicado originalmente en la Guía de programación de A Computer Fresher

Hay cuatro cosas diferentes que debes hacer, una en cada verano:

  • Hacer una pasantía de investigación, preferentemente en el ámbito académico.
  • Haga una pasantía en una gran empresa establecida como Google / Facebook, preferiblemente en su oficina del valle
  • Haga una pasantía con una startup que tenga un buen equipo técnico, preferiblemente local.
  • Haga al menos un proyecto significativo de código abierto. Google Summer of Code es una buena opción.

Si hace todo esto, es de esperar que para el momento en que se gradúe, sabría con precisión qué clics y qué desea hacer más en la vida.

Haz estas cosas entre los veranos:

  • Centrarse en el trabajo del curso.
  • Estudie gran cantidad de matemáticas discretas, álgebra lineal, algoritmos y algo de aprendizaje automático.
  • Hacer muchas competiciones de programación.
  • Intente dominar al menos dos lenguajes de programación, preferiblemente un lenguaje de muy bajo nivel como C, un lenguaje de nivel relativamente alto como Python, y familiarícese con paradigmas de programación no imperativos. Más, mejor.
  • Usa Linux, y aprende a usar shell efectivamente
  • Entienda cómo funciona Internet, aprenda algunas tecnologías básicas de desarrollo web y cómo usarlas diseñe su propia página de inicio
  • Manténgase actualizado con el mundo de la informática, tanto en el mundo académico como en la industria.

Y lo más importante: correr o nadar con regularidad o participar en algunos deportes que te gustan. Solo mantente saludable y físicamente en forma.

Estas son cosas específicas de los graduados de CS. Para obtener consejos generales, vea esta asombrosa pregunta: ¿Qué recomendaría la gente a un (hipotético) graduado universitario de 22 años de edad para hacer con su vida?

He sido profesor de CS en una universidad de enseñanza durante 25 años. Hay un montón de buenos consejos en las otras respuestas. Sin embargo, elegiría dos artículos como los más importantes:

1. Como han dicho otros, si eres nuevo en el campo, no te intimides si estás en una clase de primer año con otros que parecen saber mucho sobre la programación de la escuela secundaria o incluso antes. De todos modos, algunos de ellos solo son BSing, y aquellos que realmente saben lo que están haciendo estarán encantados de que estés interesado en un tema que les guste y que estén encantados de apoyarte. Y no sienta que está fuera de lugar si no se ajusta a la imagen estereotipada de un científico informático en blanco / asiático. Algunos de los mejores estudiantes a los que he enseñado no habían escrito una línea de código hasta su primer año, y provenían de todos los orígenes.

2. Una vez que conozca el área lo suficientemente bien como para emitir este juicio, pregúntese si realmente disfruta crear software. Está bien si a veces lo encuentras irritante, todos lo hacemos 🙂, siempre y cuando aún lo ames lo suficiente como para disfrutarlo por su propio bien. El software es un medio creativo, como el arte, la música o la escritura. El amor por el medio es esencial para una carrera exitosa en cualquier disciplina creativa, y más aún en un campo como CS, donde se exige un aprendizaje constante a lo largo de su carrera. Los buenos escritores escriben diarios o escriben poesía solo por el placer de hacerlo. Los buenos artistas pintan o esculpen simplemente porque les gusta. Y los desarrolladores de software exitosos construyen software por las mismas razones.

Uno de los distintivos de un buen desarrollador, y una pregunta que se hace a menudo en las entrevistas de trabajo, es si han realizado algún proyecto de software que no sea necesario para el trabajo o la escuela, simplemente por interés en el proyecto. Si no encuentra el software lo suficientemente interesante como para querer probar proyectos solo por diversión, eso es una mala señal, y quizás una indicación de que debería cambiar a un plan de carrera diferente. Es probable que no te mantengas al día con todos los idiomas nuevos, las nuevas áreas de la aplicación de software, etc. una vez que salgas de la escuela, y te encuentres fuera del desarrollo de software bastante rápido. Un título de CS te da la primera entrevista de trabajo. El entusiasmo por el medio creativo es lo que te permite obtener el primer trabajo y te mantiene actualizado en tu carrera.

Pregúntese qué tan bueno de programador desea convertirse.

Si la respuesta es ambiciosa, la mayor cantidad de daño que puede hacer a la mente de su programador en desarrollo es aprender lenguajes de alto nivel, API y sistemas exclusivamente, solo bajando cuando sea absolutamente necesario. Su ritmo de aprendizaje siempre será bajo y tendrá un límite general bajo.

¿Cuál es el mejor camino para convertirse en un mecánico de coches? A) aprenda una larga lista de reglas como: “si el modelo de automóvil X parte Y falla, aplique los pasos Z1 a Z10 para repararlo”, o B) comience por aprender los fundamentos del motor de combustión interna, cigüeñales y engranajes?

Del mismo modo, debe apuntar a aprender ciencias de la computación y programación de abajo hacia arriba . incluso la programación de más alto nivel tiene mucho más sentido si comprendes todas las capas debajo de ella. En lugar de una caja negra, es como ver un sistema en modo de marco de cable.

Mejor aún, hay menos conceptos totales para aprender de esta manera. El lenguaje ensamblador es fácil una vez que has estudiado arquitectura computacional. C es fácil una vez que haya hecho el montaje. C ++ es fácil una vez que haya hecho C. la mayoría de los lenguajes comunes que utilizará día a día es fácil una vez que haya hecho C ++.

En todos los casos, todo es solo una pequeña capa sobre cosas que ya conoce, y la claridad de comprensión de incluso los idiomas de más alto nivel será mucho más profunda, su código más sólido, eficiente y elegante. Debe haber hecho esas capas inferiores al menos una vez en su vida, incluso si nunca las toca de nuevo.

Ir en la otra dirección, sin embargo, es extremadamente doloroso y desorientador. Cuando aprendes un tema, tu organización mental se moldea según el orden en el que aprendes cosas. Más tarde, las cosas que aprendes solo se pueden hacer para encajar con el modelo anterior. Completamente “desaprender” modelos equivocados es extremadamente difícil. Es por esto que no se recomienda dejar lo anterior hasta más tarde.

Entonces, concretamente, haga una buena clase de arquitectura de computadoras desde el principio, especialmente si se trata de jugar con la memoria y los cachés en un lenguaje ensamblador (simulado). Haga de C (no C ++) su primer lenguaje de programación real. Intente comprender todo lo que sucede en términos de memoria (diseño de las cosas en la memoria, acceso y movimiento de datos). Una vez fluido en C, traiga esa clase de compilador. Tal vez entonces aprender C ++ de forma incremental. Aprender la concurrencia desde el principio, sistemas distribuidos después.

No te olvides de los temas de alto nivel, tampoco. En particular, doble esa mente tuya de von Neumann con algún Scheme, Haskell, ProLog o equivalente.

Como han dicho otros, las matemáticas. Sí, lo sé, pero hazlo de todos modos.

Además de lo anterior, mi segundo consejo sería seguir religiosamente la idea de “Once and Only Once”. Es la guía más simple y universal sobre cómo crear un buen código.

Comience a usar git y shell lo antes posible. Sé que no parece importante cuando TextEdit parece que es todo lo que podrías necesitar para tus miniproyectos independientes, yo de 17 años, pero te arrepentirás profundamente cuando alguien te muestre un comando de bash al mes de tu primera pasantía de software eso podría haberte ahorrado diez minutos al día si solo hubieras sabido que existía. O cuando arruinas tu rama.

Hacer más proyectos laterales fuera de clase. Hablar en serio sobre algunos de ellos.

Juega con algunos de los datos gratuitos que hay. ¡Es gratis!

Contribuye al código abierto.

Leer evaluaciones de cursos. Las clases con los nombres atractivos y atractivos no siempre serán útiles para ti.

Habla con tus profesores. Probablemente son más nerd y más interesantes que tú.

Imagina que, dentro de un año, vuelves y necesitas refactorizar el código que estás escribiendo en el presente. ¿Es modular? ¿Son tus líneas más anchas que tu pantalla? ¿Qué demonios está haciendo?

Sepa cómo pedir ayuda. Sepa cuándo desechar el código. No seas orgulloso, nunca. No es propicio para encontrar buenas soluciones.

Cada vez que se encuentre rechazando oportunidades sociales significativas para trabajar en proyectos, DETENGASE Y EVALUE SU VIDA. La universidad es el momento más fácil para hacer amigos; Los amigos que no solo estarán con usted, sino que también en CS, formarán una red profesional extremadamente valiosa en el futuro. Tendrá mucho tiempo para esconderse en su sótano en los puntos menos interesantes de su vida.

Aprende a programar por ti mismo. Podrían enseñarte algunos idiomas, aprender a salir de la zona de confort.

Trabaja en proyectos además de uni / college. Estos serán más interesantes para un reclutador

Obtener una pasantía. O iniciar un inicio. Este último es mejor pero más duro.

Las calificaciones solo importan mucho. Los mejores codificadores son hackers, los hackers no son tipos con 4.0s

Hacer tantos contactos como puedas. Ir a eventos, hablar si puedes, ser guiado. SOLO CONECTE

Haz un increíble proyecto de Grad, algo que va con una explosión

Oblígate a desarrollar buenas habilidades sociales si aún no las tienes. (Esto es principalmente una cuestión de práctica). No importa cuán patético seas al codificar o al razonamiento matemático abstracto, aún estarás deprimido y solo en el futuro si no eres capaz de hacer amigos y conocer gente. E incluso en un entorno profesional, es probable que tenga compañeros de trabajo; Su trabajo, donde sea que esté, será mucho más placentero si puede relacionarse y socializar fácilmente con ellos.

Hey Yash de 2012!

Enfócate en lo básico como lo estás siguiendo.

El primer año va a ser increíblemente difícil. Habrá momentos en que su código no funcionará. Habrá ocasiones en las que sabrás la respuesta, pero tendrás dificultades para escribir el código. No te dejes arrasar. Los laboratorios a los que asiste, algunos de sus amigos los terminarán lo antes posible y usted también lo terminará, pero tomará tiempo y ganas de comprender cada línea de lo que codifica. ¿La curiosidad de saber qué está pasando detrás de escena? no te conformes con eso Por cierto, vas a aceptar la teoría y el laboratorio en tu primer semestre. Así que, ¡chúpalo!

Sigue practicando y aprendiendo. Te encantarán los sistemas operativos [1], los algoritmos [2], Data Science [3] y los sistemas distribuidos [4]. Concéntrese en estos temas incluso mejor que lo que está haciendo en este momento.

Aprenda cuáles son las mejores prácticas [5] y comience a incorporarlas en esos pequeños proyectos suyos. Aprende qué es el pensamiento de diseño [6]. Lea libros sobre esos temas, aparte de su trabajo de curso, muchos de ellos.

Ah, y comienza a contribuir con el código abierto [7] y el kaggle [8]. Encontrará menos tiempo para esto cuando trabaje en una gran empresa.

Por último, debes saber que la informática necesita ser perseverante. Se requieren de 4 a 5 años para convertirse en un novato y de 10 a 15 años para convertirse en un experto en un pequeño dominio de la informática. Sepa que es vasto y hay que seguir aprendiendo constantemente.

¡Ah, y vas a escribir algunas pautas de codificación hermosas [9], las pautas de revisión [10] y algunos consejos [11] para los principiantes en Quora en 2017! Me gustaría poder trasladarte de la misma manera a través del viaje en el tiempo 🙂

No vayas gentil en esa buena noche.

Notas al pie

[1] Sistema operativo – Wikipedia

[2] Algoritmo – Wikipedia

[3] Ciencia de datos – Wikipedia

[4] Computación distribuida – Wikipedia

[5] Mejores prácticas de codificación – Wikipedia

[6] El pensamiento de diseño como estrategia de innovación.

[7] Desarrollo de software de código abierto – Wikipedia

[8] Tu hogar para la ciencia de datos

[9] ¿Cuáles son algunas cosas importantes que debo saber para convertirme en un buen programador?

[10] ¿Cuáles son algunas cosas a tener en cuenta en las revisiones de códigos?

[11] ¿Cómo se puede aplicar una aplicación más novedosa a Amazon para un rol de SDE? ¿Cuáles son las posibilidades de ser seleccionado?

Hay tanto…

– Primero que nada, si recién está comenzando, necesita entender que un título en ciencias de la computación NO es un grado de programación. Un buen plan de estudios de ciencias de la computación está diseñado para brindarle las herramientas básicas que necesita para aprender a ser un buen programador: algoritmos y comprensión de compiladores y sistemas operativos, y lo más importante, un sentido de lo que hay ahí fuera. También está diseñado para preparar personas para maestrías y trabajos posteriores de doctorado.

– En algún momento, necesitarás entenderte lo suficientemente bien como para saber si vas a ingresar a la industria con un BS y ser un programador, o seguir estudiando y profundizando en la teoría. Trabaja tan duro como puedas y aprende sobre ti mismo para que puedas tomar esa decisión. Una vez que te metes en el mundo laboral, es muy difícil volver a la academia.

– Tienes que tener una pasión por la programación. Si no lo haces, estás en el mayor equivocado. Y si tienes una pasión por la programación, entonces ve y programa! Y aquí hay una pieza clave, especialmente dado que muchos de los geeks somos un poco introvertidos: la programación es un esfuerzo social. Encuentra amigos que compartan intereses similares y trabaja en proyectos de programación con ellos. Encuentre proyectos de código abierto en github que le atraigan, corrija errores y agregue funciones.

– Sé muy humilde y escucha. Todo el mundo tiene algo que enseñar, y la forma en que está haciendo lo que sea que esté haciendo ahora puede mejorar mil veces. Me estremezco cuando pienso en la calidad del código que escribí cuando era más joven y estoy muy agradecido a todas las personas increíbles que se tomaron el tiempo para enseñarme cosas como la inversión de control y la calidad del código, sobre la burla y los patrones de diseño.

– Toma el código, y tus estudios, en serio. Es fácil escribir código que se encargue del comportamiento básico de la línea principal. El siguiente paso es dónde se separarán las niñas de las mujeres: ¿Cómo se comportará su código cuando se enfrente a enormes cantidades de datos? Enormes cantidades de solicitudes? ¿Fallos de red o almacenamiento? La lección es: la atención al detalle es lo que lo separará del paquete. Lo diré de nuevo: casi no hay ninguna herramienta que lo ayude más que la atención al detalle.

– Sea paciente, nunca sea codicioso, sea amable, sea optimista, cree una red social de personas que le gusten y respete, escuche más de lo que habla y ¡preste atención a los detalles!

La informática no se trata solo de programar, crear aplicaciones, hacer que se ejecute y mantenerla en funcionamiento. Hay optimización , escalabilidad , seguridad y muchos más a considerar. Hay tantas cosas que hacer aquí. Así que trata de entender los conceptos básicos y fundamentales de CS. Es muy importante de lo que piensas. Y ojalá lo supiera de antemano.

Recuerde que sus profesores son un cierto tipo de ingenieros; específicamente, viven en un mundo donde intentan abrir nuevos fundamentos teóricos y es probable que no pasen mucho tiempo en el mundo práctico del desarrollo de software. Es probable que esta diferencia solo sea visible / relevante en las clases de nivel superior que se supone que son clases más del “mundo real” (como Ingeniería de Software). Esta es una de las razones por las que es importante que realice una pasantía en una empresa bien dirigida.

La experiencia importa.

Es verdad.

No estás llegando a ningún lado con solo un título.

A pesar de que obtener una calificación de A puede verse bien para un futuro empleador, querrán ver la experiencia.

  • Tomar una pasantía. Intenta aprender diferentes vertientes de la informática. Algunos tipos de pasantías que deberías probar son:
  • Trabajar en una empresa establecida (Ej: A Fab 5 Company). Facebook, Google, Amazon, Microsoft, Apple son bien conocidos por tomar pasantes de estudiantes. Es crucial que pases un verano en una empresa bien establecida. Aprende qué hace que estas empresas sean exitosas y cómo funcionan. Si no ve de antemano cómo se ve la estructura, será difícil establecer metas más adelante.
  • Uniéndose a una startup. Si no vas a trabajar en uno de los Fab 5, probablemente te encuentres en un inicio. Hay mucho estrés que viene con trabajar en tu cosa. Sumérgete en ese mundo.
  • Investigación. Si es posible, intenta hacer esto durante el año escolar en tu universidad. No solo aprenderá mucho, sino que también se pondrá en contacto con sus profesores y la universidad.
  • Asistir a hackatones y / o trabajar en proyectos paralelos. Los empleadores quieren ver que te has sumergido en nuevas tecnologías y estás aprendiendo sobre cosas nuevas. Los hackathons son una excelente manera de probar y aprender de las nuevas tecnologías y conocer a futuros empleadores. Si no te interesa la cultura hackathon, es crucial que trabajes en proyectos paralelos y los subas a tu Github para mostrar dónde se encuentra tu experiencia.
  • El aprendizaje no viene fácilmente
    • Seriamente. Stack Overflow se convertirá en tu mejor amigo. Aprende a buscar tus respuestas. No vas a saberlo todo, y eso está bien.
  • Tu edad es un activo.
    • Utilízalo La gente va a estar mucho más dispuesta a enseñarte cuando seas joven + puedes salirte con la tuya mucho más.
  • Hacer amigos
    • Aprende a trabajar en equipo. Si no eres un jugador de equipo, a los empleadores les resultará difícil contratarte.
    • Red. Asiste a tus universidades de eventos de networking. Conozca a las personas exitosas que vinieron de su universidad y vea cómo usaron su universidad para tener éxito.
  • Cuídate
    • Ejercicio. Va a estar sentado frente a una computadora durante días y días trabajando. No dejes que tu cuerpo + yo se vaya. Cuídate y haz ejercicio regularmente.
  • Únete a clubes
    • Probar cosas nuevas. Sumérgete en campos que no tienen nada que ver con la informática. Únete al club de finanzas, médico o empresarial de tu escuela, etc.
    • No te limites a tu grado.
  • Enseña a los que te rodean
    • La mejor manera de aprender es enseñando a otros.
  • Manténgase actualizado sobre las últimas noticias tecnológicas
  • Pasé gran parte de los últimos seis años, dos en la universidad y cuatro en la licenciatura en informática, haciendo elecciones fáciles y divirtiéndome mucho. La vida es buena, pero me he dado cuenta de lo que realmente quiero dedicar a mi vida haciendo, y resulta que todos esos años de facilidad y diversión me han hecho mucho más suave que las personas que han tenido cuatro años difíciles (para obtener una sentido de lo que es difícil, hable con una, o lea acerca de la vida como un estudiante universitario del MIT). Así que ahora me quedo atrás en la carrera para ser el mejor, y tomará más de seis años difíciles ponerme al día. En retrospectiva:

    • Evite el crowdsourcing de sus decisiones: la mayoría de las personas toman decisiones basadas en lo que alguien dice; Amigos, maestros, periódicos, cualquier multitud lo suficientemente influyente para facilitar el proceso de elección. Esto es especialmente cierto para las empresas de tecnología. Debes ignorar todo eso completamente. Nada de eso importa; el “mejor lugar para trabajar” no existirá en su forma actual dentro de una década. Lo que realmente es atemporal es usted: su mente y su capacidad para resolver problemas. Si no mejora y mantiene esta habilidad con el tiempo, se quedará en la oscuridad cuando caiga el techo cómodo. Piensa profundamente acerca de lo que amas, qué harías gratis. Esa es tu decisión óptima. Es posible que las circunstancias no le permitan hacer eso de inmediato, pero mientras gana dinero o sus padres se enorgullecen, siempre esté atento a su desviación de la realidad. Siempre planea volver a lo que realmente te gusta hacer.
    • Evite el cómodo cojín: enfrentará un montón de decisiones con una elección obvia y fácil. Cuando te des cuenta de que apestas algo, te verás tentado a cambiar a un dominio diferente. Al elegir un trabajo, tendrá la tentación de elegir el que tenga menos horas y más paga. Esto es una violación grave del punto mencionado anteriormente. Tomar la decisión correcta nunca será fácil , como elegir una empresa prometedora en lugar de una compañía establecida. Se pondrá a prueba su paciencia, se le recordarán constantemente las posibilidades de fracaso y la mayoría de sus amigos tendrán el mejor momento de sus vidas. También se te recordará cuán poco calificado estás en tu dominio, si eliges religiosamente hacer lo que amas. Probablemente podrías usar estas características como una buena heurística para encontrar tu camino.
    • Evite buscar soluciones: cuando se enfrente a una implementación práctica de un problema de investigación, tendrá la tentación de leer un montón de papeles y tratar de implementarlos. Nunca busque soluciones hasta que haya pasado días, quizás semanas tratando de resolverlo usted mismo; A menos que alguien más sabio te diga lo contrario. Incluso si no logra resolverlo, apreciará las soluciones, verá a través de sus fallas y luego implementará algo propio de lo que puede estar orgulloso. Esto se aplica incluso a problemas que no son de investigación, como la implementación de un widget personalizado de Android. Aprenda los primitivos de la documentación de origen y aplique su comprensión antes de comenzar a buscar lo que existe.

    Quiero decir que esto es abstracto, pero buena música de fondo para las respuestas más específicas de Nikhil Garg y David Good.

    He leído muchos buenos consejos aquí, especialmente las respuestas de Nikhil Garg , Kartik Ayyar (un poco largo) y Wouter van Oortmerssen ; y bits en las respuestas de Artie Gold (la referencia de Dijkstra), Thiago Teixeira Santos (los cursos en línea), Jens Rantil (código de lectura) y David Good (Joel en Software, uno de los grandes comienzos en la comprensión de la codificación pro). Por lo general, agrego a los estudiantes de TU Delft que les aconsejo que deben:

    Produzca y publique una pieza de software sobre un tema que le interesa. Intenta convencer a un amigo para que te acompañe.

    • El tema puede ser cualquier cosa que realmente te importe . Un juego en línea sobre ingenieros de software. Una herramienta logística para UNICEF. Una base de datos de aves para tu papá que es un observador de aves. Un programa de gestión para tu club de fútbol o bridge. Cualquier cosa.
    • Intenta convencer a un amigo para que te acompañe . Puedes lograr algo significativo sin un amigo, pero es más fácil y personalmente más gratificante. Si puede convencer a un amigo para que lo acompañe, recompense a su amigo con su actitud: sea útil, le brinde apoyo y sea generoso al dar crédito. Ustedes dos pueden estar tramando algo a largo plazo. ¿Una start-up? ¿Una familia?
    • El resultado final debe ser de un buen tamaño. No se conforme con un proyecto de 200h, intente poner al menos 600h durante un año. Esto hará que su proyecto sea un trabajo de medio tiempo, 10-15 h / semana . Si le resulta difícil hacerlo constantemente, piense que está cargando una bala de plata en su CV.
    • El proceso de producción puede ser cualquier cosa que desee, siempre que, al final, entienda cómo debería haber producido el resultado final . También ayuda si puede probar tecnologías particulares (C, Python) y métodos (desarrollo ágil, programación en pares).
    • Discuta el proceso de producción con cualquiera que quiera escuchar. Tu mamá lo amará. La chica de al lado puede enamorarse de tu pasión. Tus compañeros estudiantes sentirán que estás hinchado. Tus amigos dejarán de responder a tus llamadas.
    • ¡Enviar! Trabaje implacablemente hacia el producto final y asegúrese de que se libere. Busque canales de distribución que coincidan con su producto. Comprender cómo se revisa y evalúa el software. Averigüe cómo recopilar y mejorar sus estadísticas de uso. En el año posterior a su envío, aprenda cómo debería haber gestionado el lanzamiento.
    • Presente el proyecto terminado a todos los que puedan convertirse en usuarios . ¿Hay algún club al que vayas? ¿Alguien allí compra software? OK, no, pero al menos usar software?
    • Mantenga su producto por al menos un año más . Pregunte a los usuarios qué piensan y agregue funciones hasta que haya terminado con el tema. Construir una comunidad alrededor del proyecto .
    • Un paso con muchos ifs: ¡ Puesta en marcha! Si ha construido una comunidad y / o tiene al menos un buen cliente. Si te importa lo suficiente como para hacer de este proyecto tu manera de ganarte la vida. Si has convencido a tu amigo y tu amigo todavía está contigo para hacer una puesta en marcha. Si tienes la energía para los próximos tres años. Si tiene el capital inicial y / o está dispuesto a perder su libertad para obtener más. Si ha hablado con un número de profesionales en el campo y piensan mucho acerca de su producto, es fantástico o es una tontería total. (Para este último, pueden estar en lo cierto al afirmar que su proyecto es una basura total, pero también puede ser que haya alcanzado el bote con un enfoque poco convencional).
    • Escriba el código, especialmente en un entorno en el que alguien tenga la oportunidad de decir: “Eso apesta. Inténtelo de esta manera …”
    • Enseñar a alguien más a escribir el código.
    • Recuerda que la informática no es ingeniería de software. Y la Ingeniería de Software puede no ser ingeniería en absoluto.
    • Date cuenta de que para cuando tengas 35 años, las cosas serán diferentes. Y cuando tengas 55 años, te darás cuenta de que las cosas se han mantenido igual todo el tiempo.
    • Date cuenta de que para cuando tengas 55 años, los de 35 años no lo entenderán.
    • Recuerda que el software es un poco como ser un atleta profesional o un rockero: a menos que seas uno de los pocos afortunados, siempre habrá alguien más joven, más guapo y más barato detrás de ti. Así que haz heno mientras brilla el sol, y disfruta de algo que te guste cuando caiga la noche.
    • Incluso cuando descubres que lo que acabas de inventar ya tiene un nombre, di, “la rueda”, disfruta mucho de tus logros.
    • Lea los archivos de Edsger Dijkstra ( http://www.cs.utexas.edu/~EWD/ ). Simplemente hazlo.
    • Entiendo realmente la Décima Regla de Greenspun.
    • El término “Ciencias de la computación” sonará extraño antes de que te des cuenta. ¿Qué es una “computadora”, de todos modos …

    El teorema del mono infinito establece que un mono que toca teclas al azar en un teclado de máquina de escribir durante una cantidad infinita de tiempo casi seguramente escribirá un texto determinado, como las obras completas de William Shakespeare.

    Pero en lugar de esperar ser el mono afortunado, refuerce las bases fundamentales de su lenguaje de programación.

    Aparte de esto sigue la respuesta de Nikhil Garg.

    Los programadores de computadoras generalmente obtienen una licenciatura en ciencias de la computación; Algunos, sin embargo, son contratados con un grado asociado. En la universidad, la mayoría de los programadores aprenden solo unos pocos lenguajes informáticos, pero desarrollan las habilidades necesarias para aprender nuevos lenguajes informáticos. Si bien los grados de TI y CS pueden llevar a trabajos similares, las diferencias entre los dos son bastante pronunciadas. Los profesionales de TI deberían disfrutar instalando sistemas informáticos, utilizando software y manteniendo redes y bases de datos, mientras que los informáticos deberían disfrutar de las matemáticas y el diseño de software. Creo que la programación es muy importante para TI, necesita al menos aprender los fundamentos de la programación de lenguajes como C ++, C #, etc. Para convertirse en un técnico de TI:

    1. Aprender sobre computadoras

    2. Ganar experiencia

    3. Obtener un título de asociado en un área de tecnología informática.

    4. Encuentra una pasantía

    5. Obtener una licenciatura en informática y tecnología de la información.

    6. Obtener la certificación

    7. Afina tus “habilidades blandas”.

    Si necesita aprender la programación que es necesaria para su carrera de TI, debe ir a Holberton School, donde se reunirá con todos los expertos y profesionales que lo guiarán al camino correcto y le enseñarán todas las habilidades necesarias para su futuro.

    No hay mundo en informática sin matemáticas, así que practica muchas matemáticas. Una muy buena referencia sería http://www.cs.princeton.edu/courses/archive/spr10/cos433/mathcs.pdf.&nbsp ; Vaya al portal de la comunidad de topcoder ( http://www.topcoder.com/ ) e intente resolver los problemas de 250 puntos de SRM división 2; si no puede leerlos y resolverlos en 10-15 minutos, practique hasta que pueda. Ahora sabes cómo convertir ideas simples en un programa, comenzar a leer algoritmos e implementarlo, nunca sientas que has entendido un algoritmo antes de implementarlo. Practica los problemas de la división superior de SRM, si estás atascado, lee los editoriales del partido, son muy buenos. Como dije, incluso si entendiste la solución, implementala. Also take math courses like calculus, probability, linear algebra and functional analysis. Once you are in a position to tackle complex algorithmic problems efficiently[SRM div 1 500-1000 problems], start working on a bigger project, you will see all how the algorithmic, coding skills you learned gonna make a big impact there. And as a computer scientist never quit your passion for algorithms, algorithmic thinking should sink in you. As Bernard Chazelle pointed out “Algorithm is the idiom of modern science”. La mejor de las suertes.