¿Qué habilidades de codificación se requieren para conseguir un trabajo en Google, Facebook o Microsoft?

Habiendo respondido este tipo de pregunta antes, copiaría eso aquí (en realidad, esto es lo que dice Google):

Recomendaciones para aprendizajes académicos

  • Curso de Introducción al CS
    Tome cursos de Introducción a la informática que brinden instrucciones básicas sobre codificación.
    Recursos en línea: Udacity – introducción al curso de CS, Coursera – Computer Science 101
  • Código en al menos un lenguaje de programación orientado a objetos: C ++, Java o Python
    Recursos en línea para principiantes: Coursera – Aprenda a programar: los fundamentos, Introducción al MIT a la programación en Java, Python Class de Google, Coursera – Introducción a Python, Python Open Source E-Book
    Recursos en línea intermedios: Diseño de programas informáticos de Udacity, Coursera – Learn to Program: Crafting Quality Code, Coursera – Lenguajes de programación, Brown University – Introducción a los lenguajes de programación
  • Aprende otros lenguajes de programación
    Notas: Agregue a su repertorio: Java Script, CSS, HTML, Ruby, PHP, C, Perl, Shell, Lisp y Scheme.
    Recursos en línea: w3school.com – Tutorial HTML, CodeAcademy.com, Udacity – Desarrollo web móvil, Udacity – Desarrollo de juegos HTML5
  • Prueba tu código
    Notas: aprenda a detectar errores, crear pruebas y romper su software
    Recursos en línea: Udacity – Métodos de prueba de software, Udacity – Depuración de software
  • Desarrollar razonamiento lógico y conocimiento de matemáticas discretas.
    Recursos en línea: Matemáticas del MIT para la informática, Coursera – Introducción a la lógica, Coursera – Optimización lineal y discreta, Coursera – Modelos gráficos probabilísticos, Coursera – Teoría de juegos
  • Desarrollar una sólida comprensión de los algoritmos y las estructuras de datos.
    Notas: Aprenda sobre los tipos de datos fundamentales (pila, colas y bolsas), algoritmos de clasificación (clasificación rápida, combinación combinada, clasificación múltiple), estructuras de datos (árboles de búsqueda binarios, árboles rojo-negros, tablas hash) y Big O.
    Recursos en línea: MIT Introducción a los algoritmos, Coursera Introducción a los algoritmos Parte 1 y Parte 2, Lista de algoritmos, Lista de estructuras de datos, Libro: El manual de diseño de algoritmos
  • Desarrollar un sólido conocimiento de los sistemas operativos.
    Recursos en línea: UC Berkeley Computer Science 162
  • Aprender diseño UX
    Recursos en línea: Udacity – Diseño UX para desarrolladores móviles
  • Aprenda recursos de inteligencia artificial en línea:
    Stanford University – Introducción a la robótica, procesamiento del lenguaje natural, aprendizaje automático
  • Aprende a construir compiladores
    Recursos en línea: Coursera – Compiladores
  • Aprende criptografía
    Recursos en línea: Coursera – Criptografía, Udacity – Criptografía aplicada
  • Aprender programación paralela
    Recursos en línea: Coursera – Programación paralela heterogénea
  • Trabajar en proyectos fuera del aula.
    Notas: Cree y mantenga un sitio web, cree su propio servidor o cree un robot.
    Recursos en línea: Lista de proyectos de Apache, Google Summer of Code, Google Developer Group
  • Trabaje en una pequeña parte de un sistema grande (base de código), lea y comprenda el código existente, rastree la documentación y depure cosas.
    Notas: Github es una excelente manera de leer el código de otras personas o contribuir a un proyecto.
    Recursos en línea: Github, Kiln
  • Trabaja en proyectos con otros programadores.
    Notas: Esto lo ayudará a mejorar su capacidad para trabajar bien en equipo y le permitirá aprender de los demás.
  • Practica tus conocimientos algorítmicos y habilidades de codificación
    Notas: Practique su conocimiento algorítmico mediante competencias de codificación como CodeJam o el Concurso internacional de programación colegiada de ACM.
    Recursos en línea: CodeJam, ACM ICPC
  • Conviértete en asistente de enseñanza
    Ayudar a enseñar a otros estudiantes ayudará a mejorar su conocimiento en el tema.
  • Prácticas en ingeniería de software.
    Notas: Asegúrese de solicitar pasantías con bastante anticipación al período en que se realizan las pasantías. En los Estados Unidos, las pasantías se realizan durante el verano, de mayo a septiembre. Las solicitudes generalmente se aceptan con varios meses de anticipación.

Aquí está el enlace de Google a esta respuesta: http: //www.google.com/about/care…

Lo principal para codificar un problema es la lógica y la lógica se construye estudiando

  1. Análisis de algoritmos

2.Estructuras de datos

Para mejorar los conceptos del lenguaje, debes conocer el lenguaje C.

Para el lenguaje de orientación a objetos, puede elegir cualquier PYTHON que sea más preferible (porque es dulce y corto).

Codifique regularmente en sitios web de codificación

  1. Primero comience con HACKERRANK porque sabrá cómo funcionan estos sitios y aquí las preguntas comienzan desde el nivel 0, por lo que para principiantes es bueno.
  2. Después de cambiar a TOP CODER, CODE CHEF, estos sitios web tienen un alto nivel de preguntas.
  3. Participa en los concursos del sitio web TOPCODER.
  4. Para conocer los conceptos de estructuras de datos y algoritmos, lea en el sitio web GEEKS FOR GEEKS e IIT profesores conferencias sobre NPTEL (enseñan de una manera muy fácil con conceptos comprensibles)
  5. Si desea aprender de profesores extranjeros, aprenda de cualquier sitio web extranjero como (Coursera y EDX).
  6. Investigue un poco sobre el proceso de contratación de estas grandes compañías si no vienen a su universidad para ser reclutadas (como no lo hacen), entonces se debe hacer un esfuerzo adicional.

Así que puedo contarte sobre Google, ser un buscador de Google. Solo necesitas una habilidad: habilidad para resolver problemas. En Google, estamos más interesados ​​en saber si puede abordar un problema “invisible” y, si puede, qué tan eficiente es su enfoque.

En segundo lugar, estamos interesados ​​en darle el problema, que tiene una serie de obstáculos. Esto nos asegura que eres el adecuado y no un recluta por “suerte”.

Debe conocer las estructuras de datos básicos, cadenas, etc. Nuevamente, enfatizo las estructuras de datos básicos. Si es un graduado reciente, puedo pedirle que codifique un árbol avl o un árbol rojo negro y luego aplicarlo en alguna otra aplicación, pero si no es un graduado reciente, entendemos que puede no estar en contacto con árboles avl o rojo negro . Pero aún así, esperamos que conozcas listas vinculadas, pilas, colas, gráficos básicos, árboles básicos, etc. Entenderé que conoces el gráfico básico pero no el algo de dijikshtra, ya que no eres un graduado reciente y un cerebro oxidado.

Será bueno si puedes mostrarnos tus habilidades. Cree un perfil, cartera, github acc, etc. y solo muéstrenos. Conoceré tus habilidades y capacidades incluso antes de que comparezcas para la entrevista y nos ayudará a los dos.

No me preocupa mucho el idioma que use, pero es recomendable seleccionar un lenguaje popular como c / c ++ / java / scala / go / python, etc. No conozco erlang pero está bien hasta que entienda su sintaxis. Pero no elija el idioma que es … Debe haber entendido.

Código de práctica en papel. No te daré un compilador o ide y lo escribirás en la pizarra. No nos preocupa que falte un punto y coma en su código, pero si comete un error en los parámetros y argumentos de la función e intenta convertir char en char *, lo notaremos. Ide te da un error directo pero no un pizarrón. Confía en mí, sabemos todo tipo de errores que da el compilador y nuestras manos están muy sucias debido a la codificación. Entonces no vamos a perder esos errores. Escribimos toneladas de código sin esos errores de una sola vez.

¡¡¡Todo lo mejor!!!

Existe la idea errónea de que conseguir un trabajo en estos gigantes de software mencionados es una cuestión de la plataforma elegida. Pero por lo que he visto y oído, es más una cuestión de pensamiento algorítmico ” y menos de un lenguaje de programación particular.

Manteniendo las diferencias sintácticas separadas, las más comunes son:

  • Reducción de la complejidad del código.
  • Simplicidad lógica y
  • Resolución de patrones.

El ejemplo más simple es, ¿cómo multiplicas un número por una potencia de 2?
La mayoría de los idiomas tendrán una API preparada para hacer esto. Pero los tipos realmente buenos simplemente ” piensan en binario”.

Supongamos que x es un carácter y contiene los siguientes 8 bits. Cuando se desplaza a la izquierda por k bits, bi + k = bi . Si i + k> N , entonces el bit bi se cayó del borde izquierdo. Si i , entonces bi = 0 . En otras palabras, los bits K bajos son todos ceros, lo que significa que a medida que se desplaza hacia la izquierda, los bits en el extremo superior (hacia la izquierda) se caen y 0 se desplaza desde el extremo derecho.
EL CAMBIO IZQUIERDO SE MULTIPLICA POR 2K
Son estos detalles meticulosos de la codificación los que importan y si tiene un conocimiento sólido de cómo funcionan las cosas de forma genérica en lugar de tratar de dominar un lenguaje de programación específico, es un candidato válido.

Mi consejo personal sería, si eres un principiante y quieres entender bien tus conceptos básicos, no trates de usar las API prefabricadas, en su lugar, intenta descifrar la lógica del problema.

Por ejemplo, la función aleatoria en java es una API para obtener un número aleatorio para cualquier intervalo especificado. Sin embargo, si va a codificar esto por su cuenta, comprenderá la cantidad de lógica necesaria para obtener un número diferente en cada intento y lo agitado que es no permitir que un número se convierta a sí mismo con más frecuencia que el resto (sesgo).

Prima:
Los cursos algorítmicos en Coursera son el mejor lugar para comenzar.

Domina al menos uno de los lenguajes OO como C ++ / Java / Python.

Pero la habilidad más importante que desean es la capacidad de resolver problemas de manera eficiente.

Para eso resuelve muchos problemas e intenta optimizarlos.

Si desea la guía de Google para el desarrollo técnico, consulte esto:

Estudiantes – Guía para el desarrollo técnico – Google Careers