Como programador, ¿qué se supone que debo saber como el dorso de mi mano? [cerrado]


8

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?


2
Es del todo depende del tipo de trabajo. Lo que necesita saber para el front end web es diferente del back end web. Que es diferente de incrustado, que es diferente del trabajo del sistema operativo ...
Oded

1
Hola Michael, bienvenido a Programadores! Si bien esto podría ser un gran tema de discusión, es un tema demasiado amplio para el estilo de Preguntas y Respuestas de Stack Exchange . Si hay algo específico sobre el desarrollo de software que le gustaría que alguien le explique, no dude en preguntar sobre eso.

2
Debes conocer tu teclado como el dorso de tu mano.

2
No entiendo por qué este tipo de preguntas se cierran continuamente. WTF El tipo acaba de salir de la universidad. Es un Jr. Por lo tanto, sus preguntas SERÁN abiertas y no específicas. Probablemente ni siquiera sabe qué preguntar, por eso las respuestas que probablemente quiere son algo que pueda ayudarlo. Él quiere una visión general. No necesita un alcance específico para responder a su pregunta. Las respuestas en este hilo son excelentes. Incluso si esto se preguntara 100 veces, a quién le importa, obtendrás respuestas nuevas y diferentes y completamente nuevas que son incluso diferentes que en otros hilos.
WeDoTDD.com

1
Este es un problema con la pila. El punto central del foro de Programadores es que puede hacer preguntas específicas y / o subjetivas que sondeen, emitan opiniones, argumentos, etc. La opinión es lo que genera buenas respuestas a una pregunta como la suya. Todos han tenido su propia experiencia en la industria del software, por lo que la opinión es exactamente lo que este tipo necesita. Necesita una variedad de ideas, experiencias y conocimientos aquí. Entonces, ¿qué si no son específicos, se trata de un consejo general carrera ..
WeDoTDD.com

Respuestas:


14

Necesitas saber:

  1. Cómo pensar. Si no puedes pensar, ve a trabajar en otra profesión.
  2. Sepa dónde mirar. No tienes que saber todo acerca de algo, tienes que saber lo suficiente para ser útil, y lo suficiente para PENSAR "oye, debe haber una forma de hacer X" y luego buscarlo.
  3. Conoce tus límites. Esto significa tus habilidades, tu falta de conocimiento, el hecho de que no sabes todo (y nunca lo sabrás). Un poco de humildad hace mucho.

77
La humildad es rara en nuestra profesión, estoy de acuerdo. Necesitamos desarrolladores más humildes que puedan decir de vez en cuando oye, no sé cómo hacer x, y o z, y no tienen miedo de bajar la guardia y hacer preguntas ... incluso los arriendos del arquitecto ... necesitamos desarrolladores que realmente se preocupen por trabajar juntos, no desarrolladores egoístas que piensen que son dioses y se aíslen en su propio mundo divino en el trabajo.
WeDoTDD.com

@ CaféAddicat: +1. Y te daría más si pudiera.
rapid_now

1
@CoffeeAddict: Ser humilde está sobrevalorado en mi humilde opinión. Por otro lado, el café no es ... :-)
equivoca el

3
@Coffee - Hay una falta total de humildad en nuestra profesión por lo que he visto. Cuando trabajaba en un banco de inversión, solía acercarme a mi jefe y hacerle preguntas sobre cosas que no entendía y ella levantaba la voz tan fuerte que todos la oían. Obviamente fue un intento patético de hacerme sentir mal por hacer preguntas.
Desolate Planet

1
@Sip desolado, escucho tu dolor. No deberíamos tener que aguantar a personas así en una profesión de ingeniería. Es un problema de actitud de la mayoría de los desarrolladores (no lo digo todo). No entiendo por qué tiene que haber una guerra de "Soy más inteligente que tú" y una gran falta de respeto por tus colegas ... f eso. Todos deberíamos trabajar juntos ... aprender y seguir adelante.
WeDoTDD.com

8

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.


@Expresiones: Sí, no hay problema, al principio, aunque la pregunta era como uno podría adivinar un poco para terminar, pero lo pensé y desenterré esta lista de verificación que encontré hace unos años.
errores el

sí, me gusta este también ... bueno.
WeDoTDD.com

3

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.


Me gustaría agregar que resolver y particionar problemas descaradamente complejos es solo el segundo paso. El primero es reconocer que hay un problema y cuál es el problema.
John Weisz

1

Cómo descubrir lo que no sabes lo más rápido posible ...


¿Te refieres a encontrar lo que no sabes o encontrar la respuesta a lo que no sabes? Saber lo que sabes, lo que no sabes y lo que no sabes que sabes solo te llevará hasta cierto punto. Aprender de hacerlo, no sabiendo, es el camino hacia el camino brillante del futuro ... :-)
equivoca el

¡Hacer las cosas mal conduce al sufrimiento, hacer cosas que alguien más puede hacer más rápido y mejor conduce al sufrimiento, saber a quién y dónde acudir para obtener ayuda es el camino hacia el brillante camino del futuro! ¡Muchas personas de nivel junior se sientan y guisan cosas en las que sería mucho más fácil pedir ayuda y aprender a pescar antes de salir y construir un bote cuando no lo necesitan!

No lo sé, aunque estoy de acuerdo en que mirar a alguien golpearse la cabeza sin pensar en una pared es algo doloroso de ver, también creo que a menudo las personas le roban a otras personas la oportunidad de fallar, aprender de ello y seguir adelante . Fracasar en mi opinión es una gran parte del aprendizaje.
errores el

0

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.


0
  1. Aprende matemáticas. La programación es matemática si eliminas los efectos visuales.
  2. Use el idioma correcto para su programa. Luego, conozca al menos las capacidades de los idiomas.
  3. Dedique algo de tiempo al algoritmo antes de codificar. Si está codificando como miembro de un grupo, estudien el algoritmo juntos.
  4. Si la velocidad de ejecución es un problema y si es libre de arreglar el código para una arquitectura, use las rutinas especializadas para su CPU, GPU, etc.
  5. Pase buen tiempo para depurar y probar.
  6. Sea curioso acerca de casi todo sobre la programación. Aprenderás con el tiempo.

0

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

  1. Ordenación, búsqueda, algoritmos gráficos y básicos de programación dinámica.
  2. Matrices, matriz, pilas, colas, listas vinculadas, árboles y tablas hash.
  3. Programación orientada a objetos y conceptos de prueba

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


1
"Conozca a fondo su algoritmo y sus estructuras de datos": esa es una declaración bastante desalentadora dado el gran volumen de cada ... Quizás sea un poco más específico para una entrevista de nivel de entrada.
Demian Brecht

Gracias Damien por la sugerencia. Editado para ser más específico.
Priyadarshi Kunal

3
@demian y de hecho no es cierto. Por ejemplo, cuando quiero ordenar una lista, a menudo llamaré a .sort () en el objeto de la lista.

@Lee Resolver problemas para la aplicación en la vida real puede / será / puede ser diferente de hacerlo en una entrevista. Un entrevistador probablemente querrá que resuelva un problema en lugar de simplemente responderlo.
Priyadarshi Kunal
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.