RE:programador profesional?
Hola. Efectívamente difícilmente te pedirán sacar áreas de trabajo. Depende, por supuesto, de para qué sector se diseña un programa. Usualmente, aquellos sistemas que van directamente a IT, manejan datos y datos y más datos. Por ende, la lógica de negocio usualmente es mover datos de un lado a otro, actualizarlos, eliminarlos y -por supuesto- crear nuevos registros. Por ello, necesitas trabajar mucho con bases de datos. Por supuesto, necesitas conocer SQL y las diversas tecnologías que tiene tu plataforma para comunicarte con las BDs.
Ahora, también ocurre que en raras ocasiones harás programas de consola. En mis 5 años que llevo en esto, jamás me han pedido (o dejado) que el programa sea solamente por consola. Ello implica que necesitas conocer bien a tu plataforma y ver la forma de programación gráfica. En el caso de C++ bajo Windows, esto implica irte familiarizando mucho con el API (Win32), aunque hay varias librerías que facilitan el trabajo. De las más empleadas es MFC, y usualmente es requisito que conozcas ésta librería. Antes importaba que conocieras también COM/ATL, pero ahora ya no es tan necesario, aunque no estaría de más que le dieras una ojeada.
Finalmente, también necesitas tener conceptos básicos de programación con sockets para poder realizar comunicación entre redes. O por lo menos, siempre ten a la mano información al respecto. El API de Windows para redes se llama WinInet.
Con respecto a tu segunda pregunta... es muy difícil. Tras cinco años de programar en C++, todavía hoy me encuentro con cosas nuevas del lenguaje. Hace poco descubrí que es posible hacer esto:
void foo()
{
class C { ... };
C* c = new C();
...
}
Es decir, declarar clases dentro de funciones. Y además no solo es conocer el lenguaje, sino la plataforma. En el caso de C++, la Librería Estándar de C++. Es cierto que no es necesario que conozcas todos los métodos de, por ejemplo, los contenedores (vector, list, map, etc), pero sí es necesario que conozcas el concepto que subyace a éstos, como el concepto de iterador. La experiencia es la que te va diciendo, y siempre es bueno tener un libro de Stroustrup a la mano. Por cierto, que la versión 2.0 del estándar de C++ ya está a la vuelta de la esquina, así que hay que irse preparando.
Tu tercera pregunta es -tristemente- muy amplia. No te puedo decir con qué problemas se topan los programadores, pero te puedo decir qué problemas he tenido yo. El más grave usualmente es la falta de planeación. El hacer un programa de forma rápida para calmar al cliente, con la consecuente falta de planeación, implica que el diseño será malo, si es que siquiera existe alguno. La falta de diseño y de una visión de la arquitectura del programa ocasionan muchos conflictos, ya que luego se requieren características que la arquitectura no soporta, y ahí es donde vienen los bugs. Y por supuesto, jefes incompetentes que no entienden esto. En esos casos, tu trabajo no sólo será codificar y probar hasta altas horas de la noche, sino también (y en aras de conservar tu salud) hacerle ver a los jefes cuando se requieren rediseños, armarse de paciencia y explicarles los porqués y proponer rediseños en áreas no escalables o potencialmente peligrosas. Otro problema es la falta de control sobre el código. Esto se soluciona con una política fuerte en el empleo de repositorios como SourceSafe, pero tienes que estar alerta. Lo único peor a que un cliente te pida regresar a una versión anterior... es que no tengas el código de esa versión anterior. La documentación también suele ser un problema grave. O mejor dicho, la falta de ésta. Sin ella, es muy difícil tener una visión completa del negocio (las reglas de negocio). Tienes también que pensar como el usuario en particular, aquél que usará tu apliación , porque a final de cuentas, tu trabajo es que ellos hagan su trabajo de forma más rápida y eficiente. Un programa que no haga esto, por muy bonito y caro que sea, no sirve de nada.
Bueno, eso es lo que puedo pensar al momento. Suerte... y bienvenida :P
Saludos.
P.D. Tener recursos a la mano siempre es importante. El recurso que más me ha servido a mí se llama The Code Project: www.codeproject.com. Y si solo quieres charlar un rato, pues: www.codeproject.com/lounge.asp, jejeje. A mí me sirve para desestresarme :P.