¿Qué se necesita para ser un destacado ingeniero de software en Apple?

Ser un buen período de Ingeniero de Software significa que entiendes Sistemas de Computación / Arquitectura. Cualquiera puede escribir código que resuelva un problema, pero comprender cómo funciona el hardware / plataforma lo diferenciará de ser capaz de resolver un problema frente a resolverlo de manera eficiente.

Por ejemplo, supongamos que tiene un número X y desea saber si es una potencia de dos. Puedes resolver esto de diferentes maneras:

1. 2 ^ n = X -> Resolver esto usando cualquier método matemático que le enseñaron álgebra no es eficiente en un x86, ARM u otro microprocesador fabricado en masa. No tienen instrucciones nativas para ejecutar la resolución de expresiones matemáticas exponenciales.

2. Iterando a través de la variable ‘n’ desde arriba con un ciclo pero esto tiene sus propios problemas obvios.

3. O la mejor manera: dado que sabemos que los microprocesadores implementan una instrucción nativa para hacer operaciones de resta y bit a bit, podemos resolver esto con dos instrucciones más la cantidad de instrucciones necesarias para ejecutar una instrucción if (esto puede variar según la arquitectura )

Así es cómo:

Si tiene una potencia de dos y resta 1 de ella, pasará de una seguida de una cantidad arbitraria de 0 a cero en la misma ubicación seguida de 1. Por ejemplo:

0b1000 – 0b1 = 0b0111

Si a continuación, bit a bit Y el número que está probando (X) con (X-1) obtendrá lo siguiente:

0b1000
0b0111
———–
0b0000

El resultado de estos dos pasos en X siempre será cero para cualquier potencia de dos y es muy eficiente de implementar.

Comprender la arquitectura de la computadora, el álgebra booleana y la representación binaria de números, etc., le permite pensar esto y, en última instancia, hace que sus soluciones a problemas programáticos sean mucho más elegantes y optimizadas que otros codificadores.

More Interesting

Microsoft Redmond vs. Google Mountain View: ¿qué compañía tiene la mejor progresión profesional para un nuevo graduado en ingeniería de software?

¿Cómo pueden las organizaciones profesionales (IEEE, etc.) seguir siendo relevantes ahora que se puede encontrar tanta red y conocimiento de la industria fuera de esas organizaciones de forma gratuita?

¿Cómo puede un ingeniero mecánico más fresco ganar un paquete alto?

¿Qué tan alta es la barra de contratación de Square para ingenieros de software?

¿Los blogs de ingeniería ayudan a reclutar talentos de ingeniería de primer nivel?

¿Microsoft Research paga más que otras compañías de Silicon Valley como Google y Facebook?

¿Cuál es una buena estrategia para contratar ingenieros rápidamente?

¿Cuánto le paga Apple a un nuevo ingeniero de software graduado?

¿Cómo es el proceso de entrevista en Atlassian?

¿Puedes conseguir un trabajo (ahora) en Londres si eres un estudiante internacional graduado?

¿Es mejor contratar nuevos ingenieros y capacitarlos o contratar ingenieros con alguna experiencia?

¿Por qué hay una escasez global de ingenieros de software cuando parece que ya tenemos todo tipo de software que necesitamos?

¿Por qué tantas compañías de alta tecnología solo entrevistan a ingenieros de software y no contratan?

Al elegir una sucursal en una escuela de ingeniería, ¿debería uno mirar las ubicaciones en la sucursal o debería seguir adelante porque le gusta la sucursal?

¿Qué tipo de referencias verificaría para un vicepresidente de ingeniería?