Estoy hablando de cosas relacionadas solo con la programación y no con la administración del sistema o la red.
Estoy a punto de terminar la universidad y conseguir un trabajo de programación, así que estoy interesado en saber sobre esto. Aunque esto puede parecer una pregunta subjetiva, creo que esto no es del todo y cae en la categoría de mejores prácticas.
No creo que un programador pueda saber todo sobre el sistema operativo en el que trabaja, todas las API del marco en el que trabaja, todas las características y peculiaridades de los lenguajes con los que trabaja, todas las estructuras de datos y algoritmos, todas las configuraciones para su compilador, enlazador, IDE, etc. Tampoco creo que sea práctico. ¿O puede él?
La respuesta habitual es "la mayoría". ¿Qué es esto más? Si entrevistaras a un programador con aproximadamente 5 años de experiencia, ¿qué esperarías que él supiera? O digamos si asistiera a una entrevista y tiene unos 10 años de experiencia detrás de usted, ¿qué repasaría?
Respuestas:
Necesitas saber:
fuente
Programmer Competency Matrix es una lista de verificación lo suficientemente buena, y es una lectura fácil e informativa, de una sola fuente.
El blog clásico de Norvig sobre " Aprender a programar en 21 días " también es una buena lectura.
fuente
Me gustaría comentar sobre esto porque creo que a pesar de que esta pregunta probablemente se ha hecho mucho en estos foros, no importa, obtienes diferentes perspectivas cada vez que se hace.
Con eso, aquí está mi experiencia y supongo que "sabiduría o insite" en nuestra profesión. Algo de esto se superpondrá con lo que otros ya han dicho, pero estoy enumerando mi experiencia y luego mi filosofía / opinión / sugerencias para cada uno.
1) Sí, como han dicho otros, es necesario tener algún nivel en el que pueda digerir ideas complejas, procesar y poder trabajar y llegar a sus propias soluciones en código para los problemas. Por otro lado: puede aprender a convertirse en un mejor solucionador de problemas con el tiempo si tiene una gran motivación positiva para seguir con ello, trabajar duro y hacer muchas preguntas. La mayoría de los desarrolladores que dicen que lo saben todo o intentan aparecer como si lo hicieran, simplemente ocultan el hecho de que han hecho muchas preguntas, han trabajado mucho en código, etc. para llegar a donde están y llegar tan bien como parecen ser
2) En nuestra industria, nuevamente, en mi opinión, hay muchos egos con los que tienes que lidiar desafortunadamente. No veo esto como algo bueno y es especialmente un rasgo para MUCHOS desarrolladores por ahí.
Lo que encontrará en mi experiencia es uno de los siguientes tipos de equipos:
Equipos "Code & Run". Esto significa que lo único que les importa es salir rápidamente, no les importa la calidad del código (código limpio) o el código que se puede mantener más adelante. Manténgase alejado de estas tiendas si puede. Es difícil porque incluso si perfora una empresa en una entrevista, no sabrá realmente cómo funciona el equipo hasta que obtenga el trabajo y tenga entre 4 y 6 meses para ver realmente cómo codifican o si realmente promueven el trabajo en equipo y fomentar la colaboración (ideas, etc.)
Tienda de desarrollo promedio que está "bien". Esto significa que les importa un poco la calidad del código. Es posible que tengan algunos buenos desarrolladores en el equipo que trabajen bien en un equipo y tengan una actitud positiva y luego una mezcla de algunos desarrolladores que puedan tener otros rasgos como egoísta, perezoso, etc. Así que quiero decir que es una especie de tienda hogposh pero donde el código no es el mejor pero tolerable
Gran tienda Esta tienda hace todo lo posible para realmente seguir buenos patrones de diseño. Puede que no sean expertos en patrones de diseño, pero conocen buenas prácticas como DRY, SOLID, cualquier otra cosa. No necesariamente esperan que las superestrellas se unan a su equipo, pero están buscando desarrolladores que al menos estén codificando un código limpio y que tengan una buena cantidad de experiencia primero. Estos son los equipos por los que quieres avanzar ... pero es posible que tengas que pasar por algunas tiendas para encontrar buenos equipos
Tienda Superstar. Esta es una tienda que solo busca los mejores programadores, pero también los mejores programadores que lo tienen todo. Se comunican bien y trabajan bien en equipo (positivamente con otros para el mejor tema). Tenga en cuenta que cada tienda le dirá que sí, solo buscamos lo mejor. La mayor parte de eso no tiene sentido ... tienen buenas intenciones, pero muchas veces es solo una charla de marketing. Pero hay un% de tiendas que realmente buscan los mejores talentos. Y lo sabrás cuando entres en la entrevista y hagan preguntas sobre hilos, patrones de diseño avanzados, etc. Entonces ... para llegar a ese nivel y si quieres trabajar en un equipo que tenga este tipo de expectativas , puede tomar algunos años llegar allí
Superstar Shop con vibraciones negativas / egos. Hay tiendas por ahí que contratan a los mejores desarrolladores, pero donde la mayoría de esa tienda puede tener un montón de pinchazos que son superestrellas. Por lo tanto, hay equipos que simplemente no toleran el código incorrecto, pero son verdaderos imbéciles al respecto. No es un entorno de equipo y desea mantenerse alejado de esta basura. Nuestra industria no lo necesita y tú tampoco
y uno de los siguientes tipos de desarrolladores:
a) Ego enorme, lo sabe todo, siempre quiere mantenerse alejado de todo, revela poco, tiene una actitud ... esencialmente no es un jugador de equipo y no alguien con quien quiere trabajar o tener en su equipo
b) Los desarrolladores que están allí solo para hacer un trabajo mediocre y hacer el trabajo e irse a casa. Personalmente, supongo que no tiene nada de malo desde un punto de vista inicial, pero al mismo tiempo creo que nuestra profesión necesita desarrolladores que sean apasionados y estén dispuestos a sacrificar y disfrutar su oficio para proporcionar valor, pero también para mejorar como desarrollador a largo plazo. transportar porque les importa mejorar
c) Desarrolladores que probablemente podrían lograrlo, pero son demasiado vagos, negativos o cualquier otro rasgo que posean que solo cause un infierno para todos, pero principalmente debido al factor de la pereza. No querría gente perezosa en mi equipo ... los ingenieros perezosos no son lo que necesitamos en nuestra profesión
d) Desarrolladores que son buenos para los grandes desarrolladores, que se preocupan por el trabajo en equipo, que están dispuestos a humillarse, enseñar a otros, comunicarse y estar abiertos a críticas constructivas sobre el proceso o el código (revisiones de código, etc.) y simplemente preocuparse por ser positivo en el trabajo mientras trabaja como desarrollador con todos los colegas. Desea trabajar con este tipo de personas, un entorno de desarrollo de apoyo positivo. Ahora no estoy diciendo que un equipo debería estar buscando líderes ... debes ser capaz de soportar tu propio peso, pero no quieres terminar en equipos donde esperan que seas un desarrollador "estrella" y nunca hacer preguntas ... ese es un mal ambiente. Manténgase alejado de eso ... es difícil encontrar este entorno en mi opinión en nuestra profesión en general en mi experiencia y la de otros amigos a lo largo de nuestras carreras. Puedes encontrar buenos equipos, pero son más difíciles de encontrar que aterrizar en tiendas caóticas con malas actitudes. Entonces, sepa en lo que se está metiendo, la hierba no siempre es más verde solo porque los desarrolladores son los llamados "profesionales". Estoy seguro de que esto puede relacionarse con cualquier trabajo, pero creo que lo es más con nuestra profesión que con la mayoría de los demás.
3) Una cosa que aprendí por las malas es que si eres perfeccionista y te preocupas demasiado por un buen proceso y un código perfecto, algún día te meterá en problemas. Encuentra ese equilibrio. No desea un código descuidado puro y no quiere perder demasiado tiempo hasta el punto de que su empleador se enoje porque le tomó 2 semanas realizar una tarea de tamaño relativamente mediano que generalmente se debe hacer, digamos 3-4 días porque querías que estuviera demasiado limpio. Un buen libro para leer y un buen tipo para seguir en nuestra industria es "Tío Bob". Soy un gran fan suyo al igual que muchos desarrolladores. Lea las publicaciones de su blog en código y compre su libro. No puedo decir cuánta sabiduría y experiencia tiene para ofrecer a las personas, incluido usted mismo, que acaba de salir de la universidad sobre nuestra profesión en términos de mejores prácticas, actitudes,
el blog de su compañía: http://blog.objectmentor.com/articles/category/clean-code (y visite http://blog.objectmentor.com/articles/2009/02/03/speed-kills )
uno de sus muchos buenos libros que creo que todo desarrollador debería leer o haber leído y tener en su estante: http://www.amazon.com/Clean-Code-Handbook-Software-Craftsmanship/dp/0132350882
Su blog personal: http://cleancoder.posterous.com/retarded-architecture
Y un buen video suyo en una conferencia que habló: http://www.viddler.com/explore/oredev/videos/36/
4) No te estreses por competir con todos los desarrolladores con los que trabajas. Debes darte cuenta de que te llevará unos años dominar los conceptos básicos de nuestra profesión, incluso si lo has hecho bien en CS. Se necesita tiempo, trabajar duro, hacer preguntas, investigar, ser paciente ... y especialmente dado que nuestra industria ahora está en constante cambio, no se sienta frustrado si no lo sabe todo. Concéntrese primero en lo básico ... conózcalos bien durante los primeros años. No compliques demasiado tus preocupaciones, eres un desarrollador Jr. que intenta mejorar y eso sucederá si trabajas duro y te vuelves bueno en la OOP básica primero. Muchos desarrolladores en nuestra industria todavía no conocen los fundamentos porque no se han esforzado en tratar de conocerlos y eso es negativo. Desea conocer los fundamentos primero bien (polimorfismo, Encapsulación, yada yada). Si no tienes muchas oportunidades de hacer una gran cantidad de OOP en tus primeros trabajos, haz un gran esfuerzo para investigar y practicar en casa jugando con el código con algún proyecto divertido para mascotas que disfrutes.
Podría hacer esta publicación más larga pero me detendré aquí. Si tiene más preguntas según mi publicación, solo responda en los comentarios y podemos continuar discutiendo.
En última instancia, si eres un genio, súper inteligente, inteligente, mediocre o imbécil, no importa quién seas a qué nivel, si quieres triunfar en nuestra profesión, siempre tendrás que trabajar muy duro e intentar aprender continuamente y mejorarte y apuntar a lo mejor que puedas ser (código, comunicación, etc.). Nuestra profesión no es para tomar a la ligera.
fuente
Cómo descubrir lo que no sabes lo más rápido posible ...
fuente
Con aproximadamente 10 años de experiencia, repasaría los algoritmos (clasificación, estructuras de datos, gráficos). El mayor problema para mí es que mis últimos años los he pasado desempeñando un papel de liderazgo o lidiando con problemas arquitectónicos de nivel superior que generalmente no requieren un diseño y análisis de algoritmos de nivel inferior como casi cualquier cosa que alguna vez necesitarías en ese momento. nivel ya ha sido escrito, optimizado para el infierno y ha sido probado en batalla.
También pasaría algún tiempo en projecteuler.com y en entrevistasstreet.com resolviendo problemas para ayudarme a aplicar esos aprendizajes recientemente reaprendidos para ayudarlos a seguir.
fuente
fuente
Conozca su algoritmo y estructuras de datos a fondo. Sepa cómo realizar tareas comunes con el lenguaje / marco y cómo un experto haría lo mismo. Trabaja, comete errores, mejora y deja que tu experiencia te enseñe más mientras estés en la industria.
Mi lista de verificación para una entrevista sería
No olvide tener en cuenta la complejidad de sus soluciones en el tiempo y el espacio si apunta a una de esas grandes empresas a las que la gente sueña ingresar :).
La mejor de las suertes
fuente