Me estoy graduando con una licenciatura en Ciencias de la Computación, pero no siento que sepa programar


1050

Me estoy graduando con una licenciatura en Ciencias de la Computación, pero veo sitios web como Stack Overflow y motores de búsqueda como Google y no sé dónde incluso comenzaría a escribir algo así. Durante un verano tuve la oportunidad de trabajar como desarrollador de iPhone, pero sentí que estaba pegando principalmente bibliotecas que otras personas habían escrito con poca comprensión de la mecánica que se desarrollaba bajo el capó.

Estoy tratando de mejorar mi conocimiento estudiando algoritmos, pero es un proceso largo y doloroso. Encuentro los algoritmos difíciles y, al ritmo que estoy aprendiendo, habrá pasado una década antes de que domine el material del libro. Dada mi situación actual, pasé un mes buscando trabajo, pero mis habilidades (C, Python, Objective-C) son relativamente poco profundas y no son tan deseables en el mercado local, donde C #, Java y el desarrollo web son mucho más altos. en demanda. Eso no quiere decir que no existan oportunidades de C y Python, pero tienden a exigir más de 3 años de experiencia que no tengo. Mi promedio de calificaciones está bien (3.0), pero no es lo suficientemente alto como para aplicar a las grandes empresas como IBM o regresar para estudios de posgrado.

Básicamente me estoy graduando con un título en Informática, pero no siento que haya aprendido a programar. Pensé que unirme a una empresa y programar a tiempo completo me daría la oportunidad de desarrollar mis habilidades y aprender de aquellos con más experiencia que yo, pero estoy luchando por encontrar trabajo y estoy empezando a sentirme realmente frustrado.

Voy a ampliar mi red y mirar más allá de la ciudad en la que he crecido, pero ¿qué han intentado hacer otras personas en una situación similar? He trabajado mucho pero no tengo la confianza para salir solo y escribir mi propia aplicación. (Es decir, convertirse en un desarrollador independiente en el mercado de aplicaciones para iPhone). Si no aparece nada, tendré que considerar actualizar y aprender habilidades más populares o probar algo marginalmente relacionado como TI, pero dado todo el esfuerzo que he puesto en eso se siente como salir corriendo

Respuestas:


533

La mejor manera de aprender a programar es escribir programas.

Dos sugerencias:

  • desarrollar un juego
  • desarrollar un sitio web

Los algoritmos, si bien son útiles y deben entenderse, en realidad juegan un segundo violín al diseño de software. TDD / Patrones de diseño / Arquitectura / Refactorización / Pruebas unitarias / El proceso de creación de código / etc tiende a ser habilidades mucho más importantes.

Además, es mucho mejor hacer esto en su propio tiempo. No esperes para resolver esto en el trabajo. Creo que las personas que tienden a mejorar son las que al principio de sus carreras se esfuerzan por desarrollar sus habilidades en su propio tiempo. Por lo general, porque les apasiona el desarrollo de software.

  • Una cosa más es " Leer libros y muestras " y no se avergüence de preguntar. Si quieres aprender debes preguntar :)

70
+1 de acuerdo. Y si no QUIERES hacer estas cosas en tu propio tiempo, esta podría no ser la mejor carrera para ti. Si reúne todo ahora, puede crear una cartera que pueda complementar su GPA.
Chris

68
@Chris, -1. Es como decir que un abogado que no hace trabajo pro bono para indigentes en su propio tiempo está en la carrera equivocada. Conozco a muchos programadores que pasarían menos tiempo programando y más tiempo haciendo casi cualquier otra cosa.

21
en realidad, muchos abogados cuando se cortan los dientes, cobran mal y pasan muchas horas adicionales solo para salir adelante.

22
Realmente no se puede comparar un trabajo de abogado con un trabajo de programadores. Con la programación puedes adquirir habilidad por tu cuenta; No necesita ningún empleador o clientes para mejorar esa parte.

31
Realmente, debes dejar de pensar que la programación es especial. Los abogados pueden trabajar / aprender solos como nosotros. Pueden comenzar con trabajos mal pagados y trabajar largas horas, pero también lo hacen muchos programadores ... la línea "si no programa como pasatiempo no debería ser programador" es realmente muy subjetiva.

388

Sentí que estaba pegando principalmente bibliotecas que otras personas habían escrito

Si bien entiendo por qué siente que esto no era "programación real", la verdad es que el trabajo de integración constituye un porcentaje significativo de la carga de trabajo típica para un programador corporativo. Tu experiencia puede ser un poco más valiosa de lo que piensas :)


126
+1 para pegamento. Nadie contrataría a un grupo de profesionales para construir una nueva casa y esperaría que inventaran nuevas técnicas en la construcción de viviendas en el proceso. De hecho, cualquier persona interesada en gestionar el riesgo y el presupuesto probablemente preferiría no hacerlo.
Dan Bryant

14
Estoy de acuerdo en que existen algunos casos extremos, pero diría que entre el 75 y el 80% de los trabajos de programación son del tipo en el que solo se pegan bibliotecas.

15
Y no hay nada de malo en unir las bibliotecas. ¡Eso es lo que te hace productivo!

10
Definitivamente, como el 90% de mi trabajo es conectar el código de otras personas (bibliotecas o código heredado) o mantener el código anterior. Pero paso mi tiempo extra aprendiendo fragmentos a medida que avanzo, de modo que ahora sé cómo funcionan muchas de esas bibliotecas y tengo una comprensión mucho más profunda de lo que sucede debajo del capó en general. Aprende de por vida y eventualmente lo aprenderás todo.
CodexArcanum

53
Cuando no estoy pegando bibliotecas, generalmente estoy haciendo bibliotecas que luego pegaré juntas.

238

Primero, gracias por una pregunta inmensamente honesta. Hay varias formas de abordar los problemas en cuestión. Aquí hay algunos consejos, que consideraba muy útiles para mí en el pasado y aún los sigo utilizando para ampliar mi conocimiento.

  1. Aprende, aprende y aprende un poco más. Este es probablemente el consejo más importante que puedo darle. Nunca dejes de aprender . Saber un idioma es bueno, saber múltiples es aún mejor. Tener conocimiento de otros idiomas lo convertirá en un mejor programador y le facilitará abordar ciertas tareas y lo ayudará a obtener un mejor conocimiento de las estructuras de datos comunes.

  2. Comience pequeño .

  3. Comience un proyecto de pasatiempo en su tiempo libre. No hagas algo que puedas lograr con bastante facilidad. Asume un proyecto en el que no tienes idea de por dónde empezar. Lánzate al fondo. Los beneficios de esto es que aprenderá cosas que nunca supo que existían y cuando lo complete, sentirá un inmenso orgullo y satisfacción. Esto es lo que me mantiene en marcha.

  4. Ten una verdadera pasión por lo que haces. Aunque la gente no estará de acuerdo conmigo en este caso. No creo que pueda sobresalir en este campo si simplemente lo considera un trabajo de 9-5. Tiene que haber una pasión para hacerlo.

  5. ¡Ayuda a otras personas en SO! La mejor manera de entender es tratar de enseñarlo a otras personas.

  6. Estudie los programas de otras personas e intente descubrir cómo funcionan, luego implemente técnicas similares en sus propios programas. Intente leerlo y comprenderlo, luego hágalo usted mismo en función de ese entendimiento, en lugar de copiar y pegar.

  7. Sigue así . Las cosas pueden volverse muy frustrantes a veces, pero muy gratificantes cuando terminan. Si no comprende algo, tómese un descanso, aclare sus pensamientos e intente nuevamente. ¡Pregúntanos en SO! Somos un grupo dispuesto :)

  8. Nunca dejes de aprender nuevas tecnologías.

  9. Lee algunos libros. Entiendo que siendo estudiante, habrías leído una tonelada. Aquí hay un par de libros prácticos que pueden serle útiles ... con suerte - El programador pragmático: de oficial a maestro - Código completo: un manual práctico de construcción de software


13
Agregue código limpio a sus listas de lectura, es bastante bueno.

77
"Saber un idioma es bueno" -> incorrecto. Saber un idioma no es suficiente. Saber varios idiomas es bueno, aprender aún más idiomas es aún mejor.
Denilson Sá Maia

10
"Comenzar pequeño" se refiere no solo a seleccionar proyectos accesibles, sino también a comenzar a implementar porciones viables dentro de un proyecto. Un proyecto mío comenzó con un pequeño experimento en paralaje, y yo pensé "eso parece un campo estelar muy bueno para el fondo de un juego". Agregue una nave ... agregue un extraterrestre ... agregue algunos misiles, control de teclado y detección de colisión (cada problema simple, por sí mismos) uno a la vez y pronto, tuve un juego comercial que vendí (lo que pensé en el tiempo) un poco de dinero en efectivo. Por otro lado, "escribir un juego" es una tarea vaga e inaccesible. Un poco a la vez.
mmc

2
@Denilson OP ha declarado que no siente que sabe programar. Conocer un idioma para alguien que no está seguro acerca de la programación es bueno. Mi lista solo es aplicable a este contexto.

77
@Denilson, podría usted haber aprendido varios idiomas sin tener que aprender un idioma por primera vez?
Péter Török

141

Comience un proyecto personal. El problema con la escuela es que lo más complicado que hiciste allí fue un proyecto que tomó de 15 semanas a un año e involucró a un par de personas más. El dominio del problema fue bien entendido (su profesor no le dio ninguna tarea que no se ajustara perfectamente a su semestre). Este no es un lujo que el mundo real le ofrece.

Si tiene que hacer algo importante, de principio a fin, que le apasione, su cerebro comenzará a dar vueltas al proceso. Mientras esto sea solo una carrera y no te guste, aún sentirás que aún no lo has logrado.


He estado dividiendo mis días entre 1) enviar hojas de vida 2) leer libros, pero parece que 2) podría gastarse mejor escribiendo código. Creo que muchos empleadores no quieren correr el riesgo de contratar a alguien con muy poca experiencia en la industria, por lo que las prácticas que no tomé parecen realmente atractivas en este momento.

55
+1. Estoy completamente de acuerdo. Inicie una aplicación pequeña y luego agregue la funcionalidad como lo desee. A medida que avanza el edificio, y comienza a darse cuenta de qué más se puede hacer, puede agregarlo.

11
"El dominio del problema se entendió bien (su profesor no le dio ninguna tarea que no se ajustara perfectamente a su semestre)." Este es uno de los mayores problemas con la educación en informática. Existen algunos programas de ingeniería de software o CS que abordan este problema, pero la mayoría no lo hace pensar de manera innovadora. Realmente necesitas asumir tus propios proyectos. Si no sabe cómo se construyó Stackoverflow, intente hacer un clon usted mismo. Aprenderá mucho más de lo que cualquier clase puede enseñarle.
Matt Olenik

excelente idea. Pero comience con algo pequeño con funciones básicas y añádalo lentamente. Será más motivador de esta manera que tratar de obtener una aplicación perfecta gigante. También creo que nunca encontrarás tanta información y tutoriales como la gran cantidad de información en los libros
Xster

@ Xster, a eso me refiero. La tarea de escribir una aplicación de "preguntas y respuestas" que tenga una funcionalidad muy básica es un buen lugar para comenzar.
Matt Olenik

106
  1. Comience en uno de esos idiomas demandados, utilizando un proyecto como K. Nicholas dice.
  2. No te midas con StackOverflow. Eso te desanimará innecesariamente.

81
+1 para el n . ° 2 : no te compares con el conocimiento de una multitud.
gf

8
StakOverflow en sí es un producto virtuoso. Sin mencionar que hay personas que contribuyen con muchas décadas de experiencia en una gran variedad de productos.

66
No consideraría malo medirse contra StackOverflow, hay mucha gente inteligente aquí. Algunos son más inteligentes que nunca. Sin embargo, esas son las personas que te hacen querer seguir aprendiendo.

15
¡Hola, sé por qué soy adicto a SO! Es fabuloso por una docena de razones. Pero es humillante estar continuamente expuesto a todas las cosas que no sabes. Hay que tener un poco de cuidado para no sentirse intimidado, eso es todo.

@Georg - Bonita gravitar juego de go. KGS Smandoli

72

No puedo ayudarlo con su situación laboral, pero espero poder ayudarlo a desarrollar sus habilidades y también poner sus sentimientos sobre sus propias habilidades en perspectiva.

Me estoy graduando con una licenciatura en Ciencias de la Computación, pero no siento que sepa cómo programar.

Es posible que tus instructores tengan algo de qué avergonzarse. También es posible que su sentimiento de no saber programar sea natural y apropiado para esta etapa de su vida y educación. Aquí hay algunas ideas que pueden ayudar:

  • A muchos empleadores no les importa qué cursos están en su expediente académico o incluso cuál es su promedio de calificaciones. En cambio, quieren saber qué puedes hacer y, especialmente, qué has construido. Para un buen trabajo, lo que ha creado es más importante que la tecnología (C, C #, lo que tiene) en su currículum.

  • Si no tuvo la oportunidad de construir una serie de proyectos interesantes durante su educación, avergüence a sus instructores. Pero puedes construir esos proyectos ahora. Recorre los sitios web en busca de problemas interesantes. Nuestros estudiantes del segundo semestre apenas están terminando la "Búsqueda de canciones": extraemos una gran cantidad de letras para un sitio web, crean un índice invertido, usted lo alimenta con palabras clave y le muestra las letras que contienen esas palabras, en contexto. No es Google, pero está hecho con los mismos principios con estructuras de datos similares, y puede comenzar a construirlo ahora.

He trabajado mucho pero no tengo la confianza para salir solo y escribir mi aplicación.

¿Quizás no has trabajado duro en el tipo correcto de problemas? Es bueno encontrar problemas que

  • Son abiertos
  • Tener más de una buena solución.
  • Tener muchas soluciones malas

Si abordas este tipo de problemas, aprendes a tomar decisiones, a vivir con las consecuencias y, si las cosas no funcionan, a volver y revisar tus elecciones. Aprenderá más de sus fracasos que de sus éxitos, pero obtendrá más confianza de sus éxitos que de sus fracasos.

Los buenos problemas, con propiedades como las que enumero arriba, son como el oro, excepto que si alguien más le da un buen problema, no pierden nada. Explore la web en busca de buenos problemas, y practique, practique, practique. Si los problemas de Euler son donde debe comenzar, están bien para principiantes. Pero pronto querrás construir proyectos pequeños o medianos que consideres realmente geniales . Si está entusiasmado con algo que ha construido, eso impresionará a los posibles empleadores. Si no estás emocionado, es difícil contratarte.

Peter Norvig informa que lleva diez años convertirse en un experto . Por supuesto, no te sientes como un experto justo después de obtener tu título. Te contaré un pequeño secreto: la mayoría de los miembros de la facultad de Harvard (yo fui uno durante ocho años) sienten que realmente no pertenecen a Harvard, no saben lo suficiente, y debe haber sido un error que fueron contratados Este tipo de sentimiento es muy, muy común para las personas que hacen la transición de la escuela al lugar de trabajo, o de un tipo de trabajo a otro. Tan común que tiene un nombre: "el síndrome del impostor".

Aunque tengas tu título, tu universidad aún te hablará. Si tuviste profesores realmente buenos, probablemente todavía se preocupan por ti. Ciertamente les importa que uno de sus estudiantes se haya graduado con un promedio de B y sin embargo sienta que no ha dominado las habilidades básicas de su oficio. Por lo tanto, busque uno o dos de los profesores más enérgicos y comprensivos de su programa, y ​​obtenga ayuda para encontrar buenos problemas. A continuación, poner a sí mismo a cargo de sus habilidades, sus conocimientos y sus sentimientos acerca de ellos. Construye un poco de algo todos los días y no pierdas nada de tu precioso tiempo de construcción en algo que no sea realmente genial. Eventualmente, lo prometo, recuperarás una sensación de entusiasmo por la programación, y después de eso, también podrás generar confianza en ti mismo.


Tengo que estar de acuerdo. Sal y prueba a tus posibles empleadores que CONOCES C, Python, Objective-C y crea una aplicación independiente que haga algo. Las personas a menudo eligen juegos porque, dependiendo del juego, pueden implicar un diseño e implementación desafiantes, y muchas de las bibliotecas son gratuitas. Si creas un juego para Windows, GDI / + o DirectX son librerías gratuitas para que uses, etc.
DeadMG

La parte "La mayoría de los miembros de la facultad de Harvard (yo fui uno durante ocho años) sienten que realmente no pertenecen a Harvard, no saben lo suficiente, y debe haber sido un error que hayan sido contratados". del efecto Dunning – Kruger =)

2
+1 para construir algo: te distingue de la multitud, especialmente si es algo útil.

55
@ Alex, nunca pases por RRHH. Si tienes suerte, alguien que conoces conoce a alguien donde quieres trabajar.
Norman Ramsey

1
Ya sabes, ahora que lo mencionas, esa es la forma en que normalmente he encontrado trabajo. Supongo que quizás en el futuro debería centrarme más en los trabajos dentro (o al margen) de mi red y ahorrarme la indignidad de los escáneres de palabras clave.

59

Hubo una escena en una antigua Ley y Orden en la que un fiscal de distrito se queja de que no aprendió nada sobre cómo hacer su trabajo en la facultad de derecho, que no aprendió nada sobre el mundo real. El profesor ante el que se queja responde: "Es una escuela de derecho, no una escuela de abogados".

Lo mismo se aplica a la informática. Quizás no aprendió cómo contribuir de inmediato a algún proyecto que ve en línea, pero probablemente desarrolló la base que necesita para tener éxito a largo plazo.

Primero, consigue un trabajo, cualquier trabajo. Conviértete en autosuficiente. Particularmente en la economía actual, nunca culparía a ningún candidato para trabajar en una librería o lo que sea mientras buscan un empleo más apropiado. Tengo preguntas para las personas que se sientan sin hacer nada.

Encuentra un proyecto, cualquier proyecto. Hay muchos proyectos aplicables en github.com, por ejemplo.

La buena noticia es que mucho antes de lo que piensas, a nadie le importará dónde fuiste a la escuela, cuál fue tu promedio de calificaciones o algo así.

¡Cuelga ahí! Puede ser difícil, pero algún día te alegrará la experiencia.


8
Recientemente tuvimos una discusión en el trabajo sobre esto. ¿Realmente crees que conseguir un trabajo no relacionado con tu carrera va a ayudar a tu CV? Si necesita recoger fruta por razones financieras, está bien, pero no creo que tenga un lugar en su CV si está tratando de desarrollar una carrera como programador. Si no tiene restricciones financieras mejor para participar en un proyecto sin compensación económica o tratando de establecer su propio negocio. En mi opinión, participar en proyectos de código abierto o algo relacionado con el campo, incluso como técnico de campo, es mucho mejor.

1
@piotr - Lo dijiste tú mismo - "Si no tienes restricciones financieras". Cualquier graduado universitario reciente tendrá este problema a menos que viva con mamá y papá. Estoy de acuerdo con David M: si no puede encontrar un trabajo directamente en su campo, consiga un trabajo. Demuestre que no solo se sienta. Luego, cuando no esté trabajando en su trabajo diario, continúe aprendiendo por la noche y entendiendo su campo a través de proyectos, etc. Por supuesto, también llame y envíe currículums.

Cualquier trabajo se ve mejor en un currículum que una brecha.
Jim C

Al comienzo de su carrera, un trabajo no relacionado es mejor que ningún trabajo, en mi opinión. Sin embargo, no estoy de acuerdo en que cualquier trabajo sea mejor en un currículum que ningún trabajo. Si hay una buena razón para "no trabajo", entonces puede ser mejor que "cualquier trabajo". Voluntariamente he sufrido largos períodos de desempleo, pero tenía buenas razones que puedo explicar de manera coherente.

55
piotr: "¿Realmente crees que conseguir un trabajo no relacionado con tu carrera va a ayudar a tu CV?" Si, absolutamente. Pensaría mucho más en un programador que trabaja en la construcción durante el tiempo de inactividad que en un programador sentado en casa todo el día. Muestra una ética de trabajo. Nunca terminé queriendo contratar a un genio solitario que se sienta en casa escribiendo código solo. No tienden a saber cómo trabajar bien con los demás, ni a hacer la parte sucia de los trabajos.

59

¿Has mirado en ProjectEuler ? Aprendí Python haciendo los problemas en ese sitio. :] Si buscas aprender Java o C #, puedes probarlo. Además, recomiendo probar también la programación GUI.

Editar:

Aquí hay un gran tema sobre SO para muchos enlaces que puede consultar para la práctica de codificación:

https://stackoverflow.com/questions/662283/websites-like-projecteuler-net


44
He escuchado mucho sobre el sitio, pero nunca tuve tiempo para intentar los problemas, pero hoy en día parece que lo único que tengo es tiempo libre, así que podría estar ocupado.

44
El Proyecto Euler es de muy poca utilidad para un programador novato que quiera desarrollar conocimientos de programación. Está orientado a descubrir cómo resolver problemas matemáticos mediante la codificación de algoritmos. Puedes hacer un millón de esos sin convertirte en un buen programador (aunque probablemente te conviertas en un gran matemático). Escribir buenos algoritmos no es una alta prioridad para la mayoría de los trabajos de programación.

1
No estaría de acuerdo con Charles: Euler proporcionará motivación para comprender ciertos conceptos y ejecutarlos.
Broam

Usarlo como lo hizo Xavier Ho parece interesante y útil. Es decir, hacerse dominar los conceptos básicos de un nuevo idioma. Sospecho que PE te ayudará con la programación (en pequeña escala) O las matemáticas; para que puedas sumergirte de cualquier manera. Dejando de lado estos puntos, estoy de acuerdo con Charles.

66
¡pythonchallenge.com es la clave! Mientras Euler son problemas de matemáticas que deben resolverse por la programación, se pythonchallenge problemas de programación puros
Xster

48

Supongo por su nombre de usuario que es una mujer ... Si no, no dude en ignorar esto o adaptarlo a su propio punto de vista.

En mi experiencia, las mujeres que se gradúan de la universidad en ciencias de la computación se consideran mucho menos competentes que sus homólogos masculinos con habilidades similares. Se podría decir que las mujeres son (o, para ser exactos, las mujeres que conozco son) simplemente más honestas en relación con sus propias deficiencias, pero al final, tienen más problemas para venderse a los empleadores.

(Pasé la mayor parte de la escuela de posgrado sintiéndome como un fracaso total en comparación con mis compañeros, y terminé graduándome como el mejor de mi clase).

Entonces, mi consejo sería ser honesto contigo mismo y seguir trabajando duro para desarrollar tus habilidades. Pero no minimice lo que sabe cuando busca un trabajo, y no se limite a solicitar trabajos de "alcance".

  • Encuentre un mentor que pueda darle una evaluación real de su valor.
  • Realice entrevistas falsas y aprenda a proyectar confianza, energía y pasión.
  • Cuando aterrice una entrevista, hable sobre sus proyectos personales y haga preguntas técnicas. Su impulso para aprender y su energía es su mejor activo.

Agregado como una idea de último momento:

  • Cuando consigas tu primer trabajo, no tengas miedo de negociar tu salario. Demasiadas mujeres simplemente aceptan la primera oferta con gratitud y nunca obtienen lo que se merecen.

Esto se relaciona ...
Paul Nathan

+1, todos los puntos buenos. Encontré sentimientos similares con mis colegas colegas cuando estaba en la escuela.
Heather M

66
No solo una cosa femenina; Las personas que ya son competentes o capaces de ver que necesitan crecer (¡sí!) Tienden a cuestionar su propia competencia más que aquellos que no comienzan a sospechar de su propia incompetencia. Hay un nombre para este fenómeno. El efecto Dunning-Kruger. Su experiencia en la escuela ha sido un éxito fenomenal si deja la escuela capaz de continuar su camino de aprendizaje de por vida, en cualquier carrera en la que termine. ¡Le deseo la mejor de las suertes!
Warren P

1
Warren: absolutamente cierto; Muchos de mis compañeros varones menos francos tenían el mismo problema. En muchas culturas alrededor del mundo, incluso en América del Norte, a las niñas no se les anima a competir agresivamente y a mostrar sus habilidades tanto como los niños pequeños, así que he visto ese rasgo con mayor frecuencia en las mujeres. Pero definitivamente no es solo algo femenino.

Impresionante respuesta, estoy totalmente de acuerdo. Además, noté que en mi clase de graduación, las mujeres que sobresalían a menudo eran las mejores estudiantes. (Es decir, lamentablemente, muchas mujeres que abandonaron podrían haber sido programadoras perfectamente competentes ...)

39

Mucha gente ha dicho que debes comenzar un proyecto personal. En mi opinión, este es el mejor consejo aquí. Agregaría algunas cosas que no vi cuando leí las otras respuestas ...

  • Recoger algo en un área que usted es apasionado alrededor . El mejor lugar para encontrar esto es quizás en su interés fuera de la informática. Eso podría ser una organización sin fines de lucro en la que participa, un pasatiempo que le apasiona, un deporte que hace.

  • Encuentra un colaborador . La codificación por sí sola es difícil, por lo que otra cosa que sería de gran ayuda sería encontrar un amigo para colaborar con usted en este proyecto. Esto lo hace mucho más divertido y te mantiene motivado. En su reciente publicación en el blog, Jeff Attwood habla sobre esto exactamente en su experiencia de construir SO. http://www.codinghorror.com/blog/2010/05/on-working-remotely.html

  • Elige algo modesto (inicialmente) . El proyecto ideal comenzaría con algo pequeño. Si el objetivo fuera de la puerta es demasiado ambicioso, se volverá demasiado desalentador. Habiendo desarrollado para PC, teléfonos, sistemas integrados y la web, diría que la web es el mejor lugar para buscar algo que otras personas puedan comenzar a usar de inmediato.

  • Si es posible, elija algo que otras personas usarán . Incluso si solo tiene diez "clientes", la sensación de que otras personas usen lo que usted ha construido es como una droga. Increíblemente satisfactorio. Aprender de los clientes y responder a ellos también es una experiencia de aprendizaje tan valiosa.

Si este proyecto es un trabajo de amor en el que trabajas felizmente en lo profundo de la noche, y luego saltas de la cama a la mañana siguiente para volver a él, entonces seguirán cosas buenas. Aprenderás, la confianza crecerá. Y una vez que tiene algo que la gente puede ver, se convierte en el comienzo de su cartera. Nada impresiona a los programadores y gerentes de contratación (decentes) que algo real.


Si es posible, elija algo que otras personas usarán ... esa es la mejor manera de obtener comentarios
balalakshmi 05 de

34

Algunos comentarios, desde la perspectiva de alguien que ha sido desarrollador durante más de 20 años:

Veo sitios web como Stackoverflow y motores de búsqueda como Google y no sé dónde incluso comenzaría a escribir algo así.

Son el producto de equipos, construidos principalmente en bibliotecas e infraestructura (.net, java, asp.net, etc.) producidos por otros equipos y respaldados por experiencia y recursos. Que usted, individualmente, no sepa dónde comenzar a hacer algo similar es completamente comprensible. No te preocupes por esto.

Durante un verano tuve la oportunidad de trabajar como desarrollador de iPhone, pero sentí que estaba pegando principalmente bibliotecas que otras personas habían escrito con poca comprensión de la mecánica que se desarrollaba bajo el capó.

Mucho trabajo de desarrollo ahora es así, me temo. Pero hay mucho margen para hacer un trabajo interesante 'sobre' esas bibliotecas. Y no se preocupe por encontrar algoritmos difíciles: seguramente nunca tendrá que implementar una clasificación rápida, una lista vinculada o lo que sea durante su carrera. Para eso están las bibliotecas.

Básicamente me estoy graduando con un título en Informática, pero no siento que haya aprendido a programar.

Saber programar y saber cómo funcionar como desarrollador profesional son dos cosas muy diferentes. Solo necesita algo de experiencia, preferiblemente trabajando con otros desarrolladores en sistemas del mundo real. Intente agregar C # o Java a su conjunto de habilidades: no hay mucha diferencia entre ellos, por lo que el conocimiento es transferible. Tenga cuidado de volverse demasiado especializado demasiado pronto. Es posible que tengas que aceptar que no ganarás mucho dinero de inmediato, así que mantén tus costos personales bajos por un tiempo si puedes.

Comience a trabajar en el proyecto que mencionó, pero además de aumentar su conocimiento de programación, intente usarlo para obtener experiencia de habilidades relacionadas, como control de versiones, pruebas de unidad e integración, e incluso escribir documentación simple. Este tipo de habilidades son las que distinguen a un desarrollador de un programador, y son un buen escaparate para un posible empleador. Hay muchas herramientas gratuitas disponibles (las ediciones express de Visual Studio, github, nunit, Google apps) que pueden ayudar.

Por lo que ha escrito, parece que su título de CS le ha enseñado cómo pensar en problemas técnicos. También parece tener un buen nivel de autoconocimiento, incluso sobre sus límites técnicos y experiencia actuales. Úselos como ventajas. Ahora no es un buen momento para ingresar al mercado laboral, pero si trabajas duro estarás bien. No se preocupe, aprenda, obtenga experiencia, manténgase actualizado, intente hacer cosas que disfrute.

¡Buena suerte!


"es casi seguro que nunca tendrá que implementar una clasificación rápida, una lista vinculada o lo que sea durante su carrera" En mi posición actual, tuve que implementar una clasificación rápida para una lista vinculada personalizada. Sin embargo, no tuve que implementar la lista. Hay un valor definitivo en saber cómo funcionan las cosas básicas.

Estoy de acuerdo en que un buen desarrollador debe saber cómo funcionan estas estructuras de datos y algoritmos básicos y poder implementarlos. He tenido que rodar mis propias listas enlazadas un par de veces, pero nunca (por suerte para mí) tuve que escribir un resumen rápido. Mi punto fue que el OP no debería preocuparse demasiado por los algoritmos que pudo haber estudiado durante su licenciatura porque muchos lenguajes / plataformas (.net, Java, C ++, etc.) probablemente incluirán implementaciones preescritas.

31

La programación no se trata solo de tu comprensión de los algoritmos o tu promedio de calificaciones durante la universidad. La programación se trata de tener la capacidad de pensar fuera de la caja, el deseo y la voluntad de aprender y lo más importante de todo, la creatividad.

En una nota personal, me acababa de graduar de la universidad en mayo pasado y tuve un terrible promedio de calificaciones. Me había centrado más en mi vida social que en la academia y pagué el precio.

Sin embargo, durante mi reciente entrevista de trabajo fuera de la universidad, ( que me había llevado menos de un año para aterrizar ) mostré mi creatividad, pasión por el aprendizaje y habilidades analíticas, que me ayudaron a conseguir el trabajo.


27

Nota: espero que esta publicación sea rechazada. Esta no es una respuesta al póster original, sino una observación sobre la mayoría de los comentarios que he leído anteriormente.

Las respuestas que estoy leyendo arriba realmente me están asustando. Parece haber una sensación casi universal de que los grados de comp.sci son inútiles o no relevantes, o no te enseñan nada. ¿Los grados de comp.sci realmente se han vuelto tan malos, o todo esto es solo aire caliente de los desarrolladores sin títulos que intentan justificar su falta?

En serio, ¿qué le están enseñando a la gente en la universidad hoy en día? Cuando haces un título de CS (al menos cuando era estudiante) para cuando te gradúes, tendrás una buena comprensión del diseño del compilador, comp. complejidad, métodos formales y lógica, todo un zoológico de estructuras y algoritmos de datos, investigación de operaciones básicas (LP, etc.), bases de datos, cifrado y seguridad, algoritmos de programación, protocolos de red, desarrollo de Internet, diseño de SO y kernel, algoritmos paralelos y estructuras de datos, algoritmos numéricos y mucho más. Todo el lote generalmente se completa con un gran proyecto de programación que forma parte de la disertación final. No me digas que los graduados de comp.sci no obtienen suficiente programación de práctica.

También aprecio el hecho de que algunos de los grados de comp.sci más tradicionales omiten algunos aspectos del ciclo de desarrollo de software, probablemente no escuche mucho hablar sobre TDD, pruebas de unidades. Pero seamos brutalmente honestos: no es realmente ciencia espacial, ¿verdad? Tampoco escuchará sobre SCRUM o el análisis de puntos de función. Enseñar cursos detallados sobre temas tan básicos sería bastante redundante, aunque muchos títulos en la actualidad tienen un curso sobre diseño de sistemas en el que les dan a los estudiantes una idea de cómo funcionan estas cosas.

De acuerdo, es posible que no seas un experto en .NET, PHP u otros estándares actuales de la industria, pero eso debería ser irrelevante. En 5-10 años, los idiomas elegidos habrán cambiado de todos modos. El hecho de que aprenda a conducir un Peugeot no significa que no pueda conducir un Fiat, y lo mismo debe aplicarse a los lenguajes de programación. Debería llevar unos meses de práctica con algunos buenos libros para ser competente para trabajar en cualquier idioma.

Seguramente, si algo es una pérdida de tiempo, son estas costosas "certificaciones" que básicamente implican rendir un examen electrónico de opción múltiple y preguntarle acerca de las minucias (generalmente sin sentido) de una arquitectura o lenguaje en particular. Tienden a medir la competencia de un programador por su conocimiento de ciertos casos de programación patológica.

He trabajado en la industria de TI en varias compañías y también he estado involucrado en el proceso de entrevistas para otros desarrolladores de software. Hicimos algunas de las preguntas habituales sobre fizzbuzz, pero estaban dirigidas principalmente a personas sin entrenamiento formal o aprendices. Nunca he conocido a un graduado de comp.sci que no sea capaz de responder preguntas de programación básicas y no tan básicas.

Tenga en cuenta que vivo en Europa y solo sé sobre títulos universitarios europeos. Sin embargo, estoy bastante seguro de que el estándar universitario en los EE. UU. Es mucho más alto que el de la UE.


44
Esta es la misma forma en que todos se sienten acerca de todos los grados una vez que los obtienen. La escuela en general te prepara para una amplia gama de situaciones. Una vez que comienzas a trabajar, puedes volverte más especializado y tal vez sientas que desperdiciaste toda esa energía en la escuela, pero ¿cómo sabías lo que ibas a hacer realmente? Es mejor aprender mucho sobre lo que puede construir que nunca haber aprendido sobre eso.

1
Veo ambos lados del argumento. Conocí algunos títulos de CompSci realmente inteligentes, pero también conocí a algunos chicos con títulos de CompSci que ahora trabajan en un centro de atención telefónica porque realmente no les importaba CompSci. Aprendí mucho en mis cursos de CompSci, pero tengo que admitir la mayoría de las habilidades técnicas que me han permitido obtener trabajos que aprendí fuera de la escuela en mi propio tiempo. Cuando entrevisto para trabajos de ingeniería de software, generalmente evalúan su conocimiento para tecnologías específicas, estrategias de resolución de problemas y habilidades interpersonales. Ninguno de los cuales se enseña explícitamente en la universidad.
Cerin

1
Conocí a docenas de graduados de CS, mientras los entrevistaba, que no podían explicar ningún algoritmo de clasificación, incluso si lo dejaban pensar durante cinco minutos. Quizás el estándar universitario aquí en los estados no se aplica completamente bien en todos los ámbitos. Como señala @Chris S, es bastante fácil pasar un grado sin aprender mucho de nada.
Dean J

Estás mezclando dos cosas aquí. Descubrí que hacer un título es increíblemente útil: que me hizo un codificador mucho mejor, pero nunca puedo entender exactamente por qué (presumiblemente una combinación de un poco de conocimiento y un mejor enfoque para la resolución de problemas). Dicho esto, hay muchos graduados (de una universidad bastante prestigiosa) que ni siquiera saben cómo implementar (9,5) ECC con una tabla de búsqueda de 512 bytes. Los buenos programadores son los que van más allá de "No entiendo esto, pero puedo hacer las preguntas del examen".

1
problema interesante, pero ¿por qué harías normalmente una prueba de ECC;), a excepción del hardware, por supuesto, pero es un buen ejemplo de cosas de autoestima que no puedes / no puedes? aprender en compSci

24

Tu humildad te servirá bien. La mente del principiante es útil para todo tipo de aprendizaje, sin importar cuánta educación y experiencia tengamos.

Trabaje a través de ejercicios, como otros han sugerido, en el Proyecto Euler y en otros lugares.

Encuentre soluciones para ayudar a otros aquí en SO. El ejercicio de comprender la pregunta, determinar lo que sabe que puede aplicarse y, finalmente, articular una respuesta ayudará a desarrollar su confianza, a medida que los ejercicios desarrollen sus habilidades.

Quedarse con eso; estarás bien.


99
La humildad te servirá bien, excepto cuando no sea así : para poner el pie en la puerta ( incluso en un proyecto personal) necesitas una cierta cantidad de chutzpa, incluso es posible que tengas que ser irracionalmente seguro.

@ Ian, acepto humildemente tu corrección. ;-) En serio, es un buen punto y un buen artículo. No me gusta la conclusión, que las mujeres deberían ser imbéciles como los hombres, pero es difícil discutir con su practicidad.
Carl Manaster

@Carl: una conclusión demasiado rápida :-) La contratación de personal / gerentes se come esa arrogancia / autopromoción. Especialmente cuando se evalúan candidatos para puestos técnicos de los que no comienzan a comprender los requisitos. He visto a muchos hombres muy calificados en el mismo bote que estas pobres mujeres, cuando esa persona demasiado segura de sí misma y promotora aparece y roba el espectáculo. No creo que podamos considerar una victoria alentar a más mujeres a tener demasiada confianza. El lugar donde podemos hacer lo mejor, en mi humilde opinión, es capacitar a personas de recursos humanos para que tomen mejores decisiones, o revalorizar el proceso.

23

Graduarse con una licenciatura en ciencias no te convierte en un gran programador como graduarse de un programa de música te convierte en un gran músico.

No hay sustituto para la práctica, práctica, práctica y experiencia. Programa 8 horas al día y en 5 años podrías tener esa comprensión que te falta en este momento.


66
Eso es un catch-22, ¿no? Programa a tiempo completo para conseguir el trabajo que deseas.
Jim Schubert

16
No, en 5 años te darás cuenta de que no sabes nada :)
Earlz

1
@ Earlz, y la nada que finalmente sabes ya es obsoleta.
Dan Bryant

44
De hecho, con todas las "escuelas Java" (que pueden o no haber sido el caso aquí), es fácil olvidar que la informática no es programación. Conozco personas que obtuvieron un título de CS y fueron a la escuela de medicina, y biólogos que terminaron como programadores. Sin embargo, nadie pregunta por qué un título en biología no los convirtió en cirujanos: todos saben que estudiar biología no es practicar medicina.

1
@Earlz qué bien Zen :)
Tullo_x86

23

Una pregunta tan sincera, excelentes respuestas: voy a intervenir brevemente :)

Las respuestas hasta ahora me hicieron reír un poco: potencialmente celebran nuestra propia grandeza un poco irónicamente. Vengo a SO por falta de documentación y errores en los marcos. Obviamente, hay otro oro aquí, pero vale la pena retener tu humildad, incluso si te conviertes en un gran desarrollador, y lo digo desde la perspectiva de la arrogancia histórica (?) Personal.

Tenga en cuenta que es posible que no esté (probablemente no) siendo contratado por un técnico, aunque las mejores personas y gerentes de recursos humanos utilizarán un técnico para evaluarlo.

Los empleadores tienen un plan para sus empleados, intente percibir ese plan todo el tiempo y hágalo respetuosamente, tal vez dándole un poco de giro y mejora personal. Pueden surgir dificultades y oportunidades cuando un empleador realmente no tiene un plan específico: hacer buenas preguntas y ayudarlos a especificar el plan realmente puede hacer que se destaque en estas situaciones.

Los empresarios pueden ser (legítimamente) paranoicos acerca de los desarrolladores que los patrocinan, ya que a menudo tenemos que manejar un poco sus percepciones para ayudarlos con las decisiones que no entienden, y lo digo, irónico, para mostrarles la perspectiva de NO tener o desarrollar a sus compañeros de trabajo no tecnológicos. Humildemente creo que es importante entender que esto es a menudo la esencia de las relaciones entre técnicos y no técnicos, y es difícil de evitar, lo que hacemos es obtuso.

Ser profesional, de mente abierta y respetuoso sí consigue trabajo; si no sabe bien qué es profesional, estoy seguro de que hay lugares para resolverlo en la web, desearía que alguien me lo hubiera señalado cuando comencé. :)

Lo último que diría es que, a medida que mejora en el desarrollo y la arquitectura, y ya suena como si hubiera entrado en este camino, puede encontrar que su código profesional puede volverse muy insatisfactorio, incluso si es el solución adecuada

No estoy seguro de cuál es la solución, pero trata de encontrar una salida y estar menos involucrado emocionalmente en tu trabajo, te ayudará a mantener el ritmo y vivir una vida mejor. Ten mucho cuidado al tratar de hacer un esfuerzo adicional para hacer algo "correcto": muchas veces creará complicaciones para sus compañeros de trabajo y casi nunca podrá dedicar la cantidad de tiempo que necesita para realizarlo dentro del plazo de su proyecto. Un síntoma de esto es "oscurecerse", cuando no quiere explicar lo que quiere hacer a nadie. Muchos de los mejores desarrolladores pueden explicar la esencia de lo que le están haciendo a un laico: esta es una gran habilidad para aprender y me ha resultado intelectualmente liberador practicar.

Je, y al estimar, para empezar, divide tu tarea en pedazos, suma el tiempo y luego duplícalo (se llama, divide, conquista, marcha a casa;)

¡Buena suerte! Dejé la escuela esperando ser instructor de esquí y terminé siendo un desarrollador principal. Estoy seguro de que también te irá bien en lo que termines haciendo.


10
Su primera oración decía que intervendría brevemente ... sin embargo, aquí tiene una de las respuestas más largas. ;)

+1 para "divide tu tarea en pedazos, suma el tiempo y luego duplícalo (se llama, divide, conquista, marcha a casa;)" ... aunque en muchos trabajos deberías cuadruplicarlo ya que los gerentes esperarán que se haga en la mitad del tiempo y agregue otro proyecto que se debe hacer en el mismo período de tiempo sin permitir la extensión de su estimación. Incluso escuché "multiplicar por dos y aumentar la unidad (1 hora => 2 días, 1 día => 2 semanas, 1 semana => 2 meses, 1 mes => 2 trimestres, 1 trimestre => 2 años, .. .) y después de una experiencia laboral real no es tan divertido como siempre pensé

acabo de imprimir esto y pegarlo a la pared
¿Cuál es la pregunta?

22

Sí, es razonablemente normal: la mayoría de las escuelas, incluso las prestigiosas, hacen un excelente trabajo de enseñanza de la informática y un trabajo terrible de enseñanza del desarrollo de software. Esto está mejorando lentamente, pero todavía tiene un largo camino por recorrer.

De todos modos, parece que estás haciendo la mayoría de las cosas correctas:

  • Programa fuera del trabajo
  • Lea libros sobre desarrollo de software (Code Complete, Patrones de diseño, Mythical Man-Month, etc.).
  • Siga aprendiendo nuevas tecnologías: la escuela debería haberle enseñado cómo aprender idiomas, no los idiomas en sí. Aprenda nuevos marcos, IDE, apis, bibliotecas, herramientas de construcción, etc.
  • Pase el tiempo en sitios como SO y aquí. Interactuar con personas experimentadas de manera regular es uno de los pocos atajos a la sabiduría.

1
Honestamente, Mythical Man-Month está un poco sobrevalorado, ¿no? (Pero realmente me gustan los libros tipo "* in a Nutshell").
Camilo Martin

2
@Camilo no está de acuerdo. Mythical Man Month trata el tema de la ingeniería de software, mientras que los libros de resumen son solo sobre una sola tecnología. Eventualmente, necesitará una comprensión de los problemas de personal con el desarrollo de software. MMM es una de esas lecturas que cubre el tema.
Brian Wigginton

21

Muy buena pregunta. Estoy seguro de que hay muchas personas que están pasando exactamente por lo que ha descrito en todos los ámbitos de la vida y los mercados laborales.

Primero, no más preocupaciones por cosas que están fuera de tu control. No está permitido estresarse o incluso pensar en la escuela, lo que aprendió o no aprendió o qué tan bien lo hizo académicamente.

Segundo: especializarse. Siempre habrá demanda de personas que sean realmente buenas en lo que hacen, incluso si lo que hacen es oscuro. Debe elegir su lenguaje de programación favorito y resolver dominar por completo ese lenguaje y "personalizarlo". Ya tiene muchos buenos consejos sobre cómo mejorar las habilidades de programación, pero al final del día nada se compara con encontrar un libro autorizado sobre el tema y encerrarse en su habitación durante unos días mientras no hace nada más que leer cada página y escribir cada ejemplo que da el libro.

Tercero: publicítate. En esta historia de la informática, este paso nunca ha sido tan fácil como lo es hoy. Las respuestas que da y las preguntas que hace en SO son su currículum. Asuma la responsabilidad de convertirse en la autoridad líder en SO para ese idioma que ha decidido dominar. Asuma la responsabilidad de cualquier pregunta que surja a través de este servidor con su etiqueta, incluso si eso significa horas de investigación exhaustiva y llegar a respuestas tardías. Busque en los archivos y lea todas las preguntas que haya hecho sobre SO sobre su tema. Corrija la información errónea, proporcione sus propias respuestas y variaciones a las respuestas y combine algunas respuestas existentes en una mejor respuesta. Inundar SO con un flujo interminable de sus comentarios, respuestas y ediciones, debería ser su razón de ser (Además es divertido porque obtienes puntos de reputación).

Cuarto: trabaja en tu imagen pública. La confianza en uno mismo es esencial para conseguir el mejor trabajo. Las empresas quieren personas que sean excelentes compañeros de trabajo, colaboradores y comunicadores. Si crees que esto podría ser un problema, dile a tus amigos que los necesitas para aumentar tu ego y colmarte de infinitos complementos, luego ve a tu biblioteca local y recoge uno de estos .


2
+1 por mencionar la importancia de las habilidades de colaboración / comunicación. La mayoría de los graduados carecen de ellos.
Denis Otkidach

1
No estoy de acuerdo con la especialización, cada tecnología morirá algún día, por lo que si te especializas demasiado terminas sin trabajo ... ok, algunas tecnologías (=> COBOL) mueren muy lentamente, lo que te da tiempo suficiente para especializarte en una nueva tecnología Pero sigue siendo arriesgado.

1
La especialización tiene su lugar, pero no estoy seguro de que salir de la universidad sea el momento correcto. También abogaría por la oferta y la demanda: parte del truco para especializarse es encontrar el nicho que necesita llenarse, no el que ya está lleno. (y en el frente de COBOL, hace un par de años, mi compañero de asiento en un avión parecía tener entre 20 y 30 años, pero estaba lidiando con un proyecto que portaba un sistema heredado ... y como entendí todavía estaban con COBOL, solo tuvieron que mudarse a un nuevo hardware, por lo que potencialmente hay una nueva generación de programadores de COBOL)

21

Bien, entonces vi las noticias de los hackers y pensé "¡¡SANTA MIERDA ESO SOY MÍO !!"

Así que me gradué en diciembre pasado con un título en CS y sentí que de alguna manera había logrado aprobar mis clases y obtener un título sin realmente obtenerlo. Sentía que todos mis compañeros de clase tenían increíbles habilidades de codificación, y que todo lo que podía hacer era crear programas básicos de Java. Aprender a codificar y convertirse en un buen programador lleva mucho tiempo. Hay muchísimas cosas para aprender y mi consejo es tomarlo un poco a la vez. Aprenderás cosas sobre la marcha. Como todos los demás están tristes, la mejor manera de aprender es hacerlo especialmente con la codificación. Sin mencionar que hay tanto sobre la creación de aplicaciones que ni siquiera se molestan en decirte en la escuela. No te sientas mal, solo debes saber que hay mucho para que aprendas y date cuenta de que tomará tiempo aprenderlo.

Creo que definitivamente deberías mirar más allá de la ciudad donde creciste. Hay un montón de compañías que contratan graduados de CS, y no todas ellas requieren o esperan que seas un gran programador desde la escuela. Tuve muchas entrevistas en las que no me hicieron preguntas de codificación (también hubo muchas que me pidieron que resolviera algoritmos y que codificara). Solicite en empresas que se preocupan más por su capacidad de aprender de lo que ya sabe (en mi experiencia, las empresas más grandes se preocupan más por esto porque no las afectará tanto si no puede producir código de inmediato).

No sé si la codificación es algo que desea hacer y perseguir, pero también hay muchos trabajos que no son técnicos que requieren una formación técnica. Podrías buscar esas opciones.

No me enfocaría en aprender los entresijos de un lenguaje como C # o Java y me enfocaría en los principios de programación. Debería poder transferir buenas habilidades de codificación y aplicarlas en cualquier idioma (esto es importante para la longevidad en su carrera ... Java no va a estar caliente para siempre). Por otro lado, conocer las "habilidades candentes" puede ayudar a conseguir un trabajo. Las habilidades de entrevista son REALMENTE importantes. Tome cada entrevista que reciba, incluso si es solo para practicar.

De todos modos, no piense que grandes compañías como IBM están fuera de su alcance. Sentí lo mismo que usted hace unos meses, y ahora trabajo en IBM. Mi GPA tampoco fue tan bueno. Todavía apesta en la programación, pero sé que mejoraré con el tiempo. ¡Solo confía en tu capacidad de aprender!


1
Yo diría que las grandes empresas como IBM están más al alcance que muchos otros lugares: tienen suficiente gente allí para que puedan entrenar a su grupo de talentos, a diferencia de los lugares más pequeños donde se espera que comience a funcionar. Y siempre hay pasantías: puede ser un poco tarde que ya se haya graduado, pero muchas agencias gubernamentales traen pasantes de verano ... para que pueda obtener esa 'NASA' o similar en su currículum.

20

Wow, qué respuesta antes de esta.

¿Qué tal una respuesta completamente diferente ...

Vamos a replantear su problema en términos de ser humano.

"Me gradué de la clase de concepción y estoy a punto de nacer. Mi madre está coronando y me darán a luz mañana por la mañana. Pero cuando miro a atletas como Usain Bolt , pienso" ¿cómo puedo correr eso? ¿rápido?".

Pero aquí estás, eres un humano de pleno derecho, has pasado por la escuela, puedes caminar, hablar y, si has hecho un curso de informática, eres bastante inteligente. Nada de que avergonzarse.

Ahora, nació Usain Bolt y de repente comenzó a ponerse loco en la pista, o fue una gran cantidad de vida, descubrir lo que le interesaba, seguido de una increíble cantidad de aplicaciones y luego de repente " Bam! " Él estaba ahí.

Lo más probable es esto último. Así que no te des por mal tiempo por no saber lo que deberías estar haciendo. Se necesita tiempo para determinar qué es lo mejor para usted. Eso es para ti , no lo que piensan tus padres, no lo que piensan tus compañeros. Lo que es correcto para ti . Lo que enciende tu fuego . Lo que te hace pensar * sí, esto es genial "incluso cuando todos los demás piensan que son pantalones.

No es raro comenzar (y / o) dejar tu título sin tener idea de lo que quieres hacer.

Para mí, era bueno en la escuela en los niveles O (una calificación del Reino Unido) pero no me importaba un bledo los niveles A (requeridos para ingresar a la Universidad para obtener un título). Así que fui a un lugar menor para obtener mi título (y como resultado, no el título que hubiera preferido). Pero lo aguanté (todavía no tenía idea de lo que quería como carrera) y aprendí mucho sobre electrónica y cosas que la mayoría de los chicos de software nunca aprenden. Durante este tiempo trabajé como escritor de juegos de computadora.

¿El final resulto? Después de obtener mi título (con elogios), entré en un trabajo con una entrevista de trabajo con un salario más alto que aquellos que hacen electrónica directa y no tuve que cambiarme el pelo ni ponerme un traje. ¿Qué? Bueno, a los 23 eso importa (mirando hacia atrás ahora, a los 44 años, me río de eso, pero esa es la vapidez de la juventud para ti).

Esa compañía quebró y luego empecé a ponerme más seria. Pero probablemente no fue por otros años hasta que de repente encontré (por accidente) lo que realmente me interesaba. Resultó ser herramientas de software de bajo nivel. Debería haber sido obvio: todos los juegos de computadora que escribí fueron escritos en conjunto, siempre me gustaron las cosas de bajo nivel que nadie más podía entender. Pero para ver eso como un futuro, eso requiere más madurez y no sorprende que realmente no se manifestara hasta mis 20 años.

A menudo estoy impresionado (y asombrado) de que los jóvenes, a menudo todavía en la adolescencia, parecen saber lo que quieren hacer. Pero la verdadera pregunta es, ¿lo siguen haciendo a los 27 años? ¿O han cambiado de rumbo porque sus primeras ideas no eran correctas para ellos?

¿En términos de cómo hago algo tan impresionante como ESO (sea lo que sea, Google, SO)? Bueno, lo haces en trozos, al igual que lo haces con el software y todo lo demás en la vida. Empiezas con lo básico, obtén experiencia en él. Si eres lo suficientemente bueno, continúas y obtienes más experiencia, etc., o lo abandonas porque te das cuenta de que no eres lo suficientemente bueno o que es tan aburrido como el infierno (es por eso que no hago comunicaciones a pesar de que siempre es sido una mina de oro. ¡Para mí es aburrida!).

Por supuesto, mira a tus compañeros, mira a tus mayores, examina sus elecciones e intereses. Pero examina el tuyo también. A menudo, lo que a primera vista parece loco / loco es realmente el verdadero negocio. Hacer algo que le parezca interesante (en lugar de pagar las facturas) es SO mucho más gratificante.

Sí, sé que a los 23 años estás concentrado en el Audi TT y en el piso genial y, por lo tanto, te sientes atraído por el dinero en lugar de elegir opciones de carrera sensatas, pero en serio, en algún momento te darás cuenta de que el auto genial no está tan arruinado ser - esa chica debería quererte por lo que eres, no por lo que conduces.

En serio, piénsalo. La solución no tan genial puede ser la respuesta correcta.


-1: ¿Podría ajustar esto un poco y centrarse más en la pregunta y menos sobre usted?
Jim G.

2
No se trata de "mí", se trata de cómo llegué desde allí hasta aquí sin saber inicialmente dónde está "aquí". Solo estoy usando mi propia experiencia como ejemplo porque conozco mi experiencia mejor que la de otra persona. Si lo lees como sobre mí, lo lees desde una perspectiva incorrecta. A menudo, si "aprieta" las cosas como las expresa, no proporciona antecedentes para expresar el punto de vista y deja al lector confundido. Podría haber escrito "No tenía idea de lo que quería hacer cuando me gradué, pero ahora sí, bla, bla". Eso no inspiraría a nadie a continuar, no hay "una razón real para creer" (TM).

Buena respuesta, Stephen. Solo desde un punto de vista diferente que otras respuestas aquí.

+1, desearía poder agregar 1000 votos para que esta sea la respuesta principal. ¡Me tocó!

18

Además del gran consejo dado por otros, agregaría participar en eventos para desarrolladores en su área. Busque reuniones, grupos de usuarios, campamentos de bares, campamentos de código, etc. Esto lo ayudará a establecer contactos con otros desarrolladores, obtener oportunidades de trabajo, mantenerse al día con las nuevas tecnologías y proporcionar una visión realista de los niveles de habilidad de otros desarrolladores.


Quiero intervenir en este caso. Hacer esto. Acababa de salir de una escuela de tecnología trabajando en registros médicos en un hospital. Empecé a ir a reuniones locales de .NET. Tomó algo de tiempo, pero finalmente consiguió un puesto en una empresa de desarrollo haciendo soporte para servidores y aplicaciones. Si bien no es mi objetivo final en la vida, es mejor que escanear archivos médicos.

17

Sigue la regla de las 10.000 horas.

Para convertirte en un maestro de algo, debes practicar durante al menos 10,000 horas. Así que pasa 10.000 horas programando, y te convertirás en un maestro de eso. Si no ha pasado 10,000 horas programando y no se siente como un maestro del oficio, no se desanime, solo pase más tiempo codificando.

También tenga en cuenta que probablemente le llevará alrededor de 3 años y medio hacerlo si programa durante 8 horas al día. Si solo programa durante el horario comercial, probablemente le llevará unos 4 años. Si no ha pasado tanto tiempo durante su programación de grado de 3/4 años, entonces probablemente no se sentirá como un maestro.


1
¡y debes asegurarte de no estar haciendo la misma hora una y otra vez! Esfuérzate por seguir aprendiendo.
Froome

+1 para la regla de 10k. Lo escuché por primera vez, pero suena comercialmente genial y es muy real.

14

Solo un par de pensamientos, si puedo.

Wendy dice que uno puede graduarse con un título de CS, sin embargo, tiene poca idea de la práctica de la programación. ¿No es eso muy preocupante, incluso horrible? Es tan inquietante como el fraude que sumergió los departamentos de inglés en los años 70: la literatura no es una colección de ideas que uno puede entender e integrar, sino más bien un conjunto de 'textos' que el estudiante debe abstraer y 'deconstruir' ( http: / /www.answers.com/topic/deconstruction ). Afortunadamente, esa marea fétida está disminuyendo, tal vez porque los instructores que se desvanecieron en su maleza se están retirando ahora.

Hace años, hace décadas, mi primer curso de CS me enseñó el lenguaje ensamblador (antes de que se inventara C) usando problemas reales como la clasificación, el hash y la búsqueda (y, sí, la recursividad). Mi segundo curso enseñó el diseño y la realización de un compilador de trabajo real en vivo. Era un estudiante de medio tiempo en el MIT y esos dos cursos eran todo lo que necesitaba para comenzar a recibir un pago como programador; y llegar a ser algo productivo dos o tres meses después.

Así que esta mañana, al escuchar el grito de Wendy, estoy pensando que seguramente MIT, de todos los lugares, no puede haber diluido sus ofertas y engañado a sus estudiantes con (en el contexto de la práctica de programación) basura prácticamente inútil. Pero cuando miro el plan de estudios EE / CS del MIT, veo que eso es lo que sucedió:

http://student.mit.edu/catalog/m6a.html

¡Noto particularmente que el departamento usa Python como lenguaje de enseñanza! ¡En serio! Parece que un título de CS en MIT significa calificar a un estudiante para convertirse en maestro de CS en MIT. Hable acerca de la recursividad!

Luego me encontré con esta contribución a Coding Horror ( http://www.codinghorror.com/blog/2006/07/separating-programming-sheep-from-non-programming-goats.html ) y lo pensé mucho al grano de esta conversación:

"Llegué tarde a esta discusión [sobre la predicción del éxito en los candidatos a programadores], pero en mi experiencia como estudiante de último año de pregrado de CS de 30 años, he descubierto que las clases de programación son inútiles y menos mal enseñadas. no me enseñaron. Solo estuve en un colegio comunitario y luego en la Universidad de Illinois en Chicago, pero las clases introductorias de programación fueron:

"1. Orientado a objetos, que dejó a los estudiantes con poca o ninguna comprensión de los métodos de procedimiento, y

"2. Clases de eliminación. Las clases consistieron principalmente en descripciones de diferentes tipos de problemas y las matemáticas detrás de ellos, en lugar de una sintaxis y estructura, para lo cual se le dijo a la gente que solo leyera el libro.

"El código apenas se reconoció directamente hasta el núcleo de Data Structures, y luego aún dependía del instructor que obtuviera, algunos eran muy ligeros y otros muy amables. Se notaba que era una gran tentación para los maestros ser ligeros. en este punto, porque si se concentraran en el código, también tendrían que concentrarse en enseñar a los estudiantes que habían estado en un curso de informática durante dos años cómo programar.

"Dado que la codificación es un pasatiempo para muchos jóvenes, creo que las instituciones educativas han confiado en eso para establecer sus curvas de aprendizaje esperadas, dejando a las personas que tenían poca o ninguna experiencia en la programación cuando ingresaron a la escuela, no tuvieron más remedio que hacer trampa como locos, gastar todo de su tiempo libre estudiando código, o cambiar de especialidad. Y no es necesariamente un déficit en el pensamiento abstracto en mi experiencia, porque todos los que conozco que abandonaron CS terminaron en Ingeniería Eléctrica, lo cual no es nada para sacudir un palo. en el frente abstracto. Todavía no saben cómo programar, mientras hacen matemáticas que no puedo hacer cara ni cruz. Recuerdos más absurdos:

"1. Java como el lenguaje de programación requerido. No voy a criticar Java aquí, pero ¿no sería bueno para los estudiantes tener que aprender su propia recolección de basura? ¿Y no sería bueno aprender los punteros? incluso si nunca decidimos programar en un idioma con ellos nuevamente?

"2. ¿Tomar una clase básica sobre teoría de sistemas operativos, después de haber sido inundado con Java, y descubrir que estaba en C (por supuesto) sin siquiera una clase de C en el campus?

"Por supuesto, tengo treinta años, y también una de esas personas que siempre programaron, así que no tuve problemas, pero vi muchas personas que sabía que eran mejores en abstracción que yo (de Cálculo, DiffEQ y clases de física antes) ) y su agonía total al tratar de terminar un programa que se había apilado contra ellos ".

Solo un par de puntos de datos pero, como otros han dicho, inquietante.

- Pete


Estoy tan cansado de este punto de vista hastiado.
Andres Jaan Tack

Python es uno de los mejores idiomas de enseñanza que existen
Casebash el

@Icplben, Pete o Jamaal de codinghorror.com?
Zaki

14

En primer lugar, espera!

En segundo lugar, aquí hay algunas cosas que me ayudaron:

  1. Mantenga su búsqueda de empleo más allá de su región de interés. Definitivamente estar bien para reubicar. ¡Gran oportunidad de salir y ver un nuevo lugar!
  2. Debido a que la experiencia es baja, creo que los entrevistadores quieren asegurarse de que sea alguien que esté entusiasmado y enérgico por trabajar y resolver problemas. Así que me aseguré de estar interesado en codificar para la empresa. Que yo era;)
  3. Haga preguntas a su entrevistador. Investigue la compañía y tenga algo de material listo durante la entrevista. ¿Qué patrones de diseño usas? ¿Por qué la tecnología X en lugar de la tecnología Y? Siento que esto lo completa como persona durante la entrevista y le da la oportunidad de tomar un descanso.
  4. ¡Código para divertirse en casa! No tiene que ser exitoso, pero solo escriba código que tal vez utilice una técnica sobre la que haya leído o una tecnología como una base de datos.

En tercer lugar, estaba en un bote similar al tuyo cuando me gradué, así que agárrate y sigue buscando. Tu primer trabajo está ahí afuera.


14

Muy pocas personas se gradúan de alguna disciplina siendo expertos en algo que simplemente han estudiado. La informática no es de ninguna manera especial en ese sentido. No hay nada mejor que la experiencia empírica y solo se obtiene al desarrollar un software completo para clientes reales, con todas las demandas, limitaciones de tiempo, cambios y trabajo en equipo que esto implica.


1
Lamentablemente, eso es cierto. Una licenciatura es inútil, excepto como una insignia que lograste atravesar. Dicho esto, el plan de estudios de ciencia ficción es horrible a nivel de pregrado. El plan de estudios de CM requiere 5 matemáticas, pero combina lenguaje formal, autómatas y computabilidad en un curso y eso es una opción optativa.
MIA

44
De acuerdo al 100%. ¿Por qué serías un experto en algo para lo que acabas de calificar ?
Alex Feinman

13

Encontré este sitio malvado el otro día http://99designs.com/ Bajo el diseño del sitio web u otro diseño, probablemente pueda encontrar algunos proyectos relacionados con el software.

Esta sería una excelente manera de obtener codificación, desarrollar nuevas habilidades, conocer nuevas personas que pueden ser empleadores potenciales e incluso puede ganar algo de dinero.

He descubierto que los empleadores tienen un gran valor al demostrar que, a pesar de que no tenía un trabajo, no estaba sentado en su trasero. Muestre que salió e hizo algunos proyectos, preferiblemente los que puede mostrar en una entrevista.


He estado dividiendo mi día entre 1) enviando currículums 2) revisando libros pero no he estado trabajando en ningún proyecto. Ese es un sitio muy interesante por cierto. Parece dirigido más a artistas y diseñadores que a desarrolladores de software, pero tendré que investigar más a fondo.

No me preocuparía tanto por los libros. Como se mencionó en otra parte, la única forma segura de aprender es haciendo. No se desanime por tomarse un tiempo para encontrar un trabajo. Es lamentable, pero a veces encontrar el correcto lleva muchos meses. Sigue intentándolo :) Estoy de acuerdo contigo, el sitio está más dirigido al arte / diseño, aunque si estás interesado en sitios web, hay algunos de esos. La ventaja es que puede hacer un proyecto sin tener la idea usted mismo, y es posible que le paguen, de lo contrario puede buscar en sourceforge.net para otras ideas de proyectos

13

No te preocupes Roma no fue construida en un día.

For each P in PeopleYouKnow
Try
  ask/call P for a Job apply for job;
Catch Denial As Exception
  don be worry;
  //you'll get a job later
End Try

Finally
 If you haven't found a job yet
  For each programmingJobAd in internet

 Try
    apply for job;
    Follow up;
  Catch Denial As Exception
   don be worry;
  //you'll get a job later
 End Try
end
//Keep trying.
//find a bug from this code.

EDITAR: #! diff A B

3c3
<   ask/call P for a Job apply for job;
---
>   ask/call P for a Job job; if job is available apply for job;
9a10
>  //(sic)
14c15
<     apply for job;
---
>     apply for programmingJobAd;
20c21
< end
---
> End

12

Primero, no te preocupes porque no puedes codificar google. Google fue creado durante varios años por muchos programadores muy experimentados. Eso es como terminar un título en artes visuales y preguntarte cómo puedes hacer La Última Cena.

Para buscar trabajo, no se preocupe por los requisitos. Simplemente llámalos y di que no tienes años, pero que aún te gustaría postularte. Si realmente quieren la experiencia, pregunte si hay más puestos junior disponibles; es posible que puedan crear un nuevo puesto solo para usted. La mayoría de los trabajos se crean para una persona específica. Asegúrese de contactar al gerente del proyecto, no al departamento de recursos humanos. RR.HH. generalmente no crea nuevos trabajos, a menudo solo seleccionan a los solicitantes para trabajos existentes. Google es tu amigo en este caso;)

No intente codificar una aplicación web (como Google o desbordamiento de pila) a menos que desee invertir unos 6 meses. Es una gran curva de aprendizaje. Debe aprender a administrar un VCS, ejecutar un servidor web, codificación HTML JS y CSS, un sistema de base de datos y el idioma de la aplicación web. Es brutal. La mayoría de estas tecnologías no son transferibles a menos que desee hacer un trabajo web.

Si desea hacer aplicaciones web, puede considerar instalar una aplicación web simple (como esta aplicación de búsqueda de IP a país basada en django - http://www.coulix.net/blog/2006/aug/17/ip- country-flags-django-comments / ). Puede darse una vuelta por un código de descuento de Dreamhost de $ 90 (para que pueda trabajar en un servidor web real) e intentar configurar las cosas. No se preocupe demasiado acerca de la seguridad o el rendimiento (pero hacer uso de ssh) - es sólo un proyecto de aprendizaje.

Si quieres hacer cosas en el escritorio, puedes echar un vistazo a pygame.


¿Pensé que la primera versión de google se hizo en poco tiempo? Como durante un verano o algo así
Earlz

Apache que se ejecuta bajo Linux en su escritorio es un "servidor web real", no es necesario gastar dinero. ¿Qué crees que están ejecutando las empresas de hosting?
TMN

@ TMN, por servidor web, me refería a una pila de hardware y software de producción. Sé que DH usa Apache y MySQL, pero el desarrollo en un servidor de producción tiene ventajas (todo está configurado, incluidas las cosas difíciles como el correo, y hacen el registro del dominio por usted) y desventajas (como no root, y debe obtener acostumbrado al desarrollo remoto). Usar un servidor de producción te hace sumergirte en el trabajo web.

11

Puede leer todo sobre programación, pero no aprenderá cómo programar realmente hasta que esté bien ... ¡comience a programar!

Te recomendaría comenzar un proyecto personal. ¿Qué es algo que quieres crear? ¿un juego? ¿Un blog? No importa. ¡Solo haz algo!

Luego, después de hacer un poco de codificación real por un momento (algunas semanas o meses), recomiendo tratar de contribuir a proyectos de código abierto. El proyecto personal lo ayuda a descubrir cómo programar cuando el objetivo aún no está establecido para usted (saber cómo diseñar algo realmente no se enseña a menudo en la escuela). Contribuir a proyectos existentes le enseña a trabajar en equipo y a seguir los estándares del código.

No perdería mi tiempo leyendo mucho más. Yo diría que, como máximo, probablemente debería leer aproximadamente el 20% del tiempo y escribir código el otro 80%. (por supuesto, por tiempo, me refiero a tu tiempo reservado para programar cosas relacionadas)


9

Bueno, aquí están mis dos centavos ... junto con citas de algunas otras fuentes.

Una fracción sorprendentemente grande de solicitantes, incluso aquellos con maestrías y doctorados en ciencias de la computación, fallan durante las entrevistas cuando se les pide que realicen tareas básicas de programación.

- Dan Kegel a través de Jeff Atwood

http://www.codinghorror.com/blog/2007/02/why-cant-programmers-program.html

Este es un problema que he visto mucho, incluso hasta el punto en que las personas con años de "experiencia" en su currículum no pueden realizar tareas simples. Personalmente, creo que los institutos educativos son en gran parte responsables de esto, desde el profesorado que no conoce el tema o no puede enseñarlo a los consejeros que deberían dirigir a los estudiantes que solo quieren ingresar a un particular por el dinero sin Un interés razonable en el campo mismo.

Por el sonido de su pregunta, está saliendo de la universidad sintiendo que acaba de salir de unos pocos años de su vida para obtener un trozo de papel. Así es como muchas agencias de contratación ven un título en estos días para los programadores. Quieren personas que hayan demostrado que pueden programar, no solo alguien que tenga un papel. Pero el hecho de que hagas esta pregunta en primer lugar me muestra el deseo de aprender a programar.

Una de las mejores cosas que puede hacer para aprender ya se ha señalado varias veces, que es la programación. Desafortunadamente, si bien esto aumentará absolutamente su conocimiento y comprensión de la tecnología, no es increíblemente probable que lo ayude a encontrar trabajo a menos que sea algo que pueda incluir en su currículum.

Le sugiero que comience construyéndose algunas aplicaciones con un propósito específico, descubra qué puede hacer y qué lo desafiará a avanzar, luego vaya a algunos lugares donde puede obtener trabajo independiente. No esperes que te paguen una gran cantidad por el trabajo independiente que recoges en la web, estás buscando agregarlo a tu currículum, no a tu billetera. Una vez que tenga 3-5 elementos a los que pueda apuntar y decir "Construí eso" o "Diseñé esa funcionalidad para ellos", enumere todo eso y encuentre una agencia de contratación (están EN TODAS PARTES ... los cazadores de cabezas) y trabaje con algunas de sus personas para simplificar su currículum para que destaque su educación e ingenio para encontrar trabajo que hacer, y minimice el aspecto de su falta de experiencia.

Lo más importante para recordar cuando estás hablando con empleadores potenciales (que veo que la gente se equivoca todo el tiempo), y algo a lo que CUALQUIERA EN CUALQUIER CAMPO debe prestar atención, es que si bien no quieres venderte en corto o minimice lo que PUEDE hacer, NO SE VENDA EN SUPERVIVENCIA y haga que crean que puede hacer cosas de las que no tiene idea cómo. Los empleadores siempre tienen la habilidad de pedirle que haga cosas que no sabe cómo hacer, y es su trabajo en ese momento averiguarlo, pero si les dice que ya puede hacerlo, inevitablemente se comerá sus palabras más tarde. .

¡La mejor de las suertes para ti!

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.