¿Está muerta la ciencia de la informática? [cerrado]


18

Pregunta: ¿La ciencia y el arte de CS están muertos? Con eso quiero decir, los requisitos reales para pensar, planificar y resolver problemas de manera eficiente parecen estar alejándose de CS en estos días. El campo parece estar bajando la barrera de entrada para que más personas puedan 'programar' sin tener que aprender a programar realmente.

Antecedentes: soy un recién graduado con una licenciatura en Ciencias de la Computación. Estoy trabajando en una posición inicial en una empresa de tamaño decente en el departamento de TI. Principalmente hago .NET y otras tecnologías de Microsoft en mi trabajo, pero antes de esto hice cosas de Java a través de pasantías y similares. Personalmente, soy un programador de C ++ para mis propios proyectos divertidos.

En profundidad: a través del trabajo que he estado haciendo, me parece que las disciplinas intensas de una ciencia real ya no existen en CS. En el pasado, los programadores tenían que resolver problemas de manera eficiente para que los sistemas fueran robustos y rápidos. Pero ahora, con las tecnologías predominantes como .NET, Java y los lenguajes de secuencias de comandos, parece que la eficiencia y la solidez se han cambiado para facilitar el desarrollo.

La mayoría de los colegas con los que trabajo ni siquiera tienen títulos en Informática. La mayoría se graduó con títulos de Ingeniería Eléctrica, algunos con Ingeniería de Software, incluso algunos que vinieron de escuelas tecnológicas sin un programa de 4 años. Sin embargo, se las arreglan bien sin tener la formación técnica de CS, sin haber estudiado teorías y algoritmos, sin tener en cuenta la posibilidad de crear una solución elegante (solo buscan la solución más fácil y barata).

La compañía nos empuja a usar tecnologías de Microsoft, que eliminan todo el pensamiento real del asunto y lo reemplazan con bibliotecas y herramientas que pueden construir automáticamente su proyecto la mitad del tiempo. No estoy tratando de odiar los idiomas, entiendo que tienen un propósito y lo hacen bien, pero cuando sus empleados no saben cómo funciona una tabla hash y usan los métodos de clasificación incorrectos o ejecutan comandos SQL que son terriblemente ineficientes (pero hacen el trabajo en un tiempo aceptable), parece que se está poniendo más esfuerzo en desarrollar tecnologías que mimetizan a los nuevos 'programadores' en lugar de enseñarles a las personas cómo hacer las cosas bien.

Estoy interesado en hacer programas eficientes y, en mi opinión, hermosos. Si hay una mejor manera de hacerlo, prefiero volver y refactorizarlo que dejarlo pasar. Pero en el mundo corporativo, me empujan a completar tareas rápidamente en lugar de con elegancia. Y eso realmente me molesta.

¿Es esto lo que espero con ansias el resto de mi vida? ¿Todavía hay puestos disponibles para las personas que aman la ciencia y el arte de la CS en lugar de solo el sueldo?

Y en la misma nota, aquí hay una buena lectura si no la has visto antes de The Perils Of Java Schools


2
Dos cosas: 1. El desarrollo no tiene que ser difícil. 2. Los programas bien escritos serán esenciales en situaciones donde la escalabilidad es importante, que es donde presumiblemente brillará. Sin embargo, estoy de acuerdo con lo que estás diciendo en principio. Aunque me considero un programador novato, estoy interesado en aprender todo en un nivel bajo (hasta cierto punto) y no usar marcos preescritos, y así sucesivamente ... (al menos para empezar ... o cuando Yo uso cualquier tipo de marco, será el mío.
Anónimo

48
Creo que su CS confuso con la programación, estos están relacionados pero son dos cosas diferentes.
Darknight

1
@ Chris estoy totalmente de acuerdo. Hago un uso extenso de frameworks y bibliotecas, pero trato de hacerlo sin primero entender el problema y cómo la biblioteca lo resuelve. Una vez que sé, entonces puedo elegir lo que resuelve la biblioteca es mejor en este caso, en lugar de simplemente tirar una biblioteca genérica a todos los problemas y esperando que se pega
Veaviticus

8
¿Qué problema estás intentando resolver con esta pregunta?
Jeremy

15
@Veaviticus, ¿realmente espera que sus fontaneros conozcan la dinámica de los fluidos (para que puedan hacer mejor su trabajo?). La mayoría de las aplicaciones de Line Of Business (escritorio / web) no requieren resolver problemas altamente complejos (muy raramente). ¿Tener experiencia en CS ayuda sí? seguramente. ¿Es necesario para LOB -> no realmente.
Darknight

Respuestas:


25

Si y no

Buena pregunta, pero mala suposición.

Parece que falta la parte científica de la educación, pero la suposición de que la ciencia estaba allí simplemente para hacer que los programas sean eficientes es errónea.

La ciencia era necesaria para enseñar a las personas cómo definir y resolver problemas.

Lamentablemente, esta parte de algunos currículos de "CS" (¿currículos?) Parece omitirse por completo, reemplazarse por problemas de juguetes con soluciones triviales o conocidas, y tiene la intención meramente de enseñar la familiaridad con las herramientas.

Decepcionante; muchos graduados de la escuela Java tuvieron cambios cortos, nunca se les enseñó cómo descomponer un problema, diseñar un algoritmo, especificar una prueba o incluso depurar de manera efectiva.


2
Asistí a una escuela que ni siquiera enfatizaba tanto a Java, la mayoría de lo que hice fue en C ++. Pero todavía no nos enseñaron cómo hacer ninguna de las cosas que mencionas. Cubrieron los conceptos básicos, pasaron por alto algunas cosas y profundizaron en lo que cada profesor estaba interesado. Parece que las escuelas en estos días están tratando de bombear la mayor cantidad posible de "desarrolladores" en lugar de científicos.
Veaviticus

@Veaviticus: Eso sería para los estudiantes afortunados. En mi universidad, los profesores tienen un nivel esquizofrénico de abstracción y su idea de un examen es "recitar una definición formal".
DeadMG

El lenguaje no tiene nada que ver con las enseñanzas de descomponer un problema. Un problema es un problema independientemente de si es C, Java o Ruby.
Plataforma

29

¿Está muerta la ciencia de la informática? "..." Soy un recién graduado con una licenciatura en informática. Estoy trabajando en una posición inicial en una empresa de tamaño decente en el departamento de TI .

Honestamente, mis dos centavos: no encontrarás la "ciencia" de la informática trabajando en un departamento de TI en una empresa de tamaño decente, porque es el departamento de TI, no el departamento de CS. Intente volver a la escuela para obtener un doctorado, o trabajar en los departamentos de ingeniería de una empresa cuyo enfoque es la informática (por ejemplo, procesamiento de imágenes, redes de alto rendimiento, sistemas de álgebra informática, aeroespacial, etc.). Aquí es donde encontrará los problemas difíciles e interesantes donde el diseño descuidado [en general] no será tolerado.

"¿Todavía hay puestos disponibles para las personas que aman la ciencia y el arte de CS en lugar de solo el sueldo?

Sí, absolutamente, pero probablemente no en los departamentos de TI de empresas medianas.


16

Si eres programador, no te consideres un "científico de la computación"; los informáticos son los que crean la próxima generación de computadoras, algunas de las cuales siguen siendo ciencia ficción hasta que se obtenga la combinación correcta de materiales, miniatuización y teoría computacional. Son solo el comienzo de la tubería. Las personas que desarrollan software aquí y ahora son "ingenieros de software"; toman las teorías y las herramientas, a veces superponiendo la teoría práctica y las herramientas del mundo real para aprovechar el poder en potencia de esta compleja pieza de magia electroinica y hacer que haga lo que queremos. Esa es, a su vez, una especialización del campo de la "ingeniería informática", que toma las teorías de los científicos informáticos y las aplica, hardware y software, a soluciones electrónicas para usuarios finales del mundo real.

Esto es, OMI, donde los negocios se encuentran con la teoría. En este tipo de casos, el viejo adagio "el enemigo de lo mejor es lo suficientemente bueno" se puede cambiar fácilmente para leer "el enemigo de lo suficientemente bueno es mejor". Considerándose un "ingeniero" en lugar de un "científico", y poniendo lo que hace en paralelo con otras disciplinas de ingeniería, pone de relieve las diferencias.

Digamos que un cliente acude a usted, un ingeniero civil / estructural, y le pide que construya un puente. El puente debe abarcar 20 pies, sostenerse y una tonelada de carga, debería durar 10 años con mantenimiento de rutina, y lo quieren en un mes por $ 20,000. Esas son tus limitaciones; cumplir con los mínimos sin exceder los máximos. Hacer eso es "lo suficientemente bueno" y te da el sueldo. Sería una ingeniería deficiente para usted construir el Puente Golden Gate, superando con creces tanto las especificaciones de diseño como el presupuesto en varios órdenes de magnitud. Por lo general, terminas comiendo los excesos de costos y pagando multas por excedentes de tiempo. También sería una mala ingeniería para usted construir un puente de cuerda con el peso de 5 hombres adultos a pesar de que solo cuesta $ 1000 en tiempo y materiales; no obtienes buenas críticas y testimonios de clientes,

De vuelta al software, supongamos que tiene un cliente que necesita un sistema de procesamiento de archivos creado para digerir los archivos que ingresan y poner la información en el sistema. Quieren que se haga en una semana y tiene que manejar cinco archivos al día, alrededor de 10 MB de datos, porque ese es todo el tráfico que obtienen actualmente. Tus preciadas teorías en gran medida salen por la ventana; su tarea es crear un producto que cumpla con esas especificaciones en una semana, porque al hacerlo también cumple con el presupuesto de costos del cliente (ya que los materiales son generalmente una gota en el cubo para un contrato de software de este tamaño). Pasar dos semanas, incluso diez veces la ganancia, no es una opción, pero lo más probable es que tampoco lo es un programa construido en un día que solo puede manejar la mitad del rendimiento, con instrucciones de tener dos copias en ejecución.

Si crees que este es un caso marginal, estás equivocado; Este es el entorno diario de la mayoría de los usuarios. El motivo es el ROI; Este programa inicial no cuesta mucho y, por lo tanto, se amortizará rápidamente. Cuando los usuarios finales lo necesitan para hacer más o ir más rápido, el código se puede refactorizar y escalar.

Esa es la razón principal detrás del estado actual de la programación; La suposición, confirmada por toda la historia de la informática, es que un programa NUNCA es estático. Siempre deberá actualizarse y eventualmente será reemplazado. Paralelamente, la mejora constante de las computadoras en las que se ejecutan los programas permite una menor atención a la eficiencia teórica y una mayor atención a la escalabilidad y la paralelización (un algoritmo que se ejecuta en tiempo N cuadrado, pero que se puede paralelizar para funcionar en N núcleos) parece lineal y, a menudo, el costo de más hardware es más barato que el de los desarrolladores para diseñar una solución más eficiente).

Además de eso, existe el principio muy simple de que cada línea de código de desarrollador es algo más que puede salir mal. Cuanto menos escribe un desarrollador, menos probable es que lo que escribe tenga un problema. Esto no es una crítica de la "tasa de errores" de nadie; Es una simple declaración de hecho. Es posible que sepa cómo escribir un MergeSort hacia atrás y hacia adelante en 5 idiomas, pero si usa solo un identificador en una línea de código, todo el Sort no funciona, y si el compilador no lo captó, podría llevarlo horas para depurarlo. Contraste eso con List.Sort (); está ahí, es eficiente en el caso general y, aquí está lo mejor, ya funciona.

Por lo tanto, muchas de las características de las plataformas modernas y los principios de las metodologías de diseño modernas se construyeron con esto en mente:

  • OOP: cree datos y lógica relacionados en un objeto, y donde sea que el concepto de ese objeto sea válido, por lo que es el objeto o una derivación más especializada.
  • Plantillas preconstruidas: un buen 60% o más de código es un sintaxis sintáctico y lo básico para que el programa muestre algo en la pantalla. Al estandarizar y generar automáticamente este código, reduce la carga de trabajo del desarrollador a la mitad, lo que permite un aumento de la productividad.
  • Bibliotecas de algoritmos y estructuras de datos: al igual que en lo anterior, puede saber cómo escribir una pila, una cola, QuickSort, etc., pero ¿por qué tiene que hacerlo, cuando hay una biblioteca de código que tiene todo esto incorporado? No volvería a escribir IIS o Apache porque necesitaba un sitio web, entonces, ¿por qué implementar un algoritmo QuickSort o un objeto de árbol rojo-negro cuando hay varias implementaciones excelentes disponibles?
  • Interfaces fluidas: en la misma línea, es posible que tenga un algoritmo que filtre y clasifique los registros. Es rápido, pero probablemente no sea muy legible; a su desarrollador junior le tomaría un día comprenderlo, y mucho menos hacer el cambio quirúrgico necesario para clasificar en un campo adicional en el objeto de registro. En cambio, las bibliotecas como Linq reemplazan una gran cantidad de código muy feo, a menudo frágil, con una o dos líneas de llamadas a métodos configurables para convertir una lista de objetos en objetos filtrados, ordenados y proyectados.

2
Buena respuesta, pero se pierde un punto importante. "Lo que no puedo duplicar, no lo entiendo". Saber cómo funcionan no implica que los escriba a mano para cada proyecto; más bien, se asegura de que conozca cada una de sus fortalezas y debilidades que lo ayudarán a elegir la mejor. Entonces, todo lo que tiene que saber es si ese algoritmo / estructura de datos está en su biblioteca estándar.
Michael K

Excepto que tu adagio está mal; Puedo entender muy claramente los conceptos detrás de algo material que no tengo la esperanza de duplicar con éxito. Estoy de acuerdo en principio; Un ingeniero exitoso de cualquier tipo necesita saber suficiente teoría para elegir la solución que funcione. Eso no significa que un ingeniero tenga que poder construir todo tipo de bombilla para conocer las especificaciones de cada uno y, por lo tanto, elegir el adecuado para una casa. Del mismo modo, puedo usar un árbol rojo-negro, entendiendo su rendimiento y la aplicación adecuada, sin tener idea de cómo implementar uno desde cero.
KeithS

La analogía con la ingeniería no es buena. No es el caso de que un "mejor puente" en CS necesariamente cuesta mucho; a menudo es solo una cuestión de entender qué herramienta es adecuada para el trabajo correcto. Incluso implementar un algoritmo de libro de texto bastante complejo a menudo está fuera de la zona de confort de las personas, sin embargo, no es una noción difícil o costosa (dependiendo del alcance, pero suponiendo que este sea un proyecto en años-hombre, no en días-hombre). Por lo general, es aún más fácil: no es una implementación personalizada, solo se trata de conocer la herramienta adecuada y las palabras clave para buscar en Google.
Eamon Nerbonne 01 de

8

Me parece que estás haciendo TI y no CS y eso no debería implicar que CS está muerto. CS no está muerto, es solo que la mayoría de los trabajos están en desarrollo de software. Como la mayoría de los estudiantes de CS aprenden a programar, generalmente terminan contratados como programadores y no como informáticos. Los trabajos de informática son minúsculos en comparación con los trabajos de programación. Incluso podría hacer una aplicación compleja utilizando técnicas informáticas, pero en mi opinión (y no me gustan las respuestas de opinión porque son subjetivas), eso cae en el campo de la ingeniería que en el campo de los científicos.

Además, el código hermoso y elegante está en el ojo del espectador , pero para la mayoría de las empresas / gerentes, tener un diseño lo suficientemente bueno a tiempo es mucho más importante que un código hermoso pero nunca termina a tiempo.

Por último, está el mundo real y lala-land. Desafortunadamente, recibimos el cheque de pago del primero, y ahí es donde entra la "ciencia / arte" del desarrollo de software sobre cómo producir alta calidad de software con limitaciones de tiempo / presupuesto. Sentí el mismo tipo de sentimientos que tienes al comienzo de mi carrera. Siempre quise crear "lo mejor", pero pronto me di cuenta de que "lo mejor" no es el diseño más eficiente o elegante, sino el más rentable.


3
"código hermoso y elegante" vs "buen enuogh, pero a tiempo" es una falsa dicotomía. Es más fácil terminar a tiempo si su diseño es simple, y el diseño simple equivale a un diseño hermoso. Solo, simple no significa simplista .
pillmuncher

1
@pillmuncher, sí, estoy de acuerdo, para mí, un código hermoso es simple (pero no más simple) pero desafortunadamente esa premisa es subjetiva / relativa. "diseño simple es igual a diseño hermoso" no es una afirmación sino una opinión (una opinión muy popular en la que estoy de acuerdo al 100%, pero sigue siendo una opinión). Lo que no es una opinión, es horario, requisitos y costo. Esas restricciones tenderán a conducir a un diseño suficientemente bueno para las restricciones dadas.
Armando

"[1] TI me parece que estás haciendo TI y no CS y eso no debería implicar que CS está muerto. [2] CS no está muerto, es solo que la mayoría de los trabajos están en desarrollo de Software". Su primera declaración es correcta: el OP está en TI y no en CS. Sin embargo, estoy en desacuerdo con su segunda declaración, ya que muchos de los llamados "científicos informáticos" también hacen software de desarrollo. Se llama "investigación y desarrollo", y puede ser un ejemplo de científicos de la computación que definen, resuelven y prueban la corrección de un algoritmo de enrutamiento sobre ciertas topologías de red, y luego implementan la implementación "oficial" o prototipo
Bill VB

8

En primer lugar, te equivocaste. "pensar, planificar y resolver problemas de manera eficiente" no es ciencia, es ingeniería. La ciencia es mucho más sobre explorar nuevos campos. Y, en realidad, en el mundo académico, a la gente le importa mucho menos la eficiencia del código, mucho menos que a la industria. En la academia se trata más de pruebas de conceptos, etc.

No, lo que está describiendo es que se requiere un conocimiento menos profundo para el desarrollo de software. Lo que podría ser cierto, si los requisitos fueran los mismos. Pero hoy en día, se espera que el ingeniero de software sepa cómo lidiar con subprocesos múltiples, computación distribuida, escalado, etc. Se espera que sepan cómo liderar el proyecto de manera eficiente. La mayor parte de esto no estaba en los planes de estudio hace unas décadas.


Todavía no lo es, por lo que estoy leyendo aquí. Muchas escuelas no enseñan ingeniería, enseñan idiomas. Eso equivale a simplemente enseñar Autocad a un estudiante de ingeniería civil.
Michael K

@ Michael: No he visto ninguna universidad decente hacer eso.
vartec

1
Voy al RIT Tiene una clasificación alta y sigue siendo bastante malo. Ninguna escuela enseña programación correcta, porque simplemente no se puede hacer en solo cuatro o cinco años en el contexto de otros cursos.
Jon Purdy

4

No creo que lo que haya dicho sea exactamente correcto, pero de todos modos tiene algo de sentido. Específicamente, creo que con el tiempo, la informática y la ingeniería de software se han distanciado.

La ingeniería de software (como otras ingenierías) se trata de aplicar la ciencia para construir productos, resolver problemas, etc. La informática se trata principalmente de la investigación de algoritmos y (aunque esta parte a menudo se olvida algo) cómo implementar esos algoritmos (al menos en un sentido teórico - por ejemplo, quizás tratar todas las máquinas PRAM como equivalentes).

Teniendo esto en cuenta, creo que la razón detrás de la bifurcación se hace evidente: la mayoría de los problemas algorítmicos involucrados en algo como un sitio web típico ya se han resuelto, la mayoría de ellos, hace mucho tiempo. Quizás lo más importante es que la mayoría de ellos se han resuelto lo suficientemente bien como para que el desarrollador web promedio, el problema haya desaparecido casi por completo. Por ejemplo, hacer actualizaciones atómicas en bases de datos distribuidas definitivamente no es una tarea trivial, pero un desarrollador web típico simplemente escribe algo de SQL y no tiene idea (o preocupación) sobre la cantidad de investigación que tomó para descubrir cómo hacer el trabajo confiablemente

Hubo un tiempo en que era esencialmente imposible separar la informática de la ingeniería de software. Se habían resuelto tan pocos problemas que escribir incluso un programa relativamente trivial requería investigar los fundamentos. Si deseaba hacer algo tan simple como ordenar un grupo de datos a fines de los años 50 o principios de los 60, era muy probable que tuviera que hacer un análisis de sus datos e intentar diseñar un algoritmo que se ajusta lo mejor posible a lo que se necesitaría para clasificar esos datos en particular; ni siquiera se conocían tantos algoritmos de clasificación como hoy, e incluso los algoritmos que se conocían no se conocían tan bien como lo son hoy .

Sin embargo, 50 años de investigación y desarrollo han valido la pena: la mayoría del desarrollo típico puede usar no solo algoritmos conocidos, sino implementaciones preescritas. La mayoría de los problemas típicos se pueden resolver de manera bastante razonable basándose en el conocimiento existente (e incluso en las implementaciones existentes) de algoritmos.

Sin embargo, eso no significa que la informática esté muerta: todavía hay más algoritmos para investigar y las personas que investigan en ellos. Sin embargo, sí significa que la mayor parte de la investigación es más especializada y solo es probable que se aplique a áreas bastante especializadas. Probablemente también haya una mayor "brecha" entre la adquisición y la aplicación del conocimiento. En un momento, descubriste una mejor manera de clasificar en el proceso de escribir un programa de clasificación, y fue escrito en código real casi de inmediato. Ahora, mucha ciencia de la computación se dedica a cosas como cómo usar un número esencialmente infinito de procesadores, lo que probablemente será útil algún día, pero incluso las tribus primitivas no contarían los núcleos duales en mi computadora como "muchos" ... :-)


1

El desarrollo de software y la informática no son lo mismo, y descubrí que la mayoría de mis compañeros de clase en un B.Sc. El programa Comp Sci se sintió frustrado por esto.

Pienso en el software como un producto de la informática ... como las pinturas son un producto del arte visual.

Creo que la mayoría de las personas con títulos de CS son contratados para realizar trabajos de desarrollo de software, especialmente en las primeras etapas de sus carreras. Creo que mucha gente en este rol se queda allí y no va más allá.

Creo que la diferencia comienza a aparecer cuando aparecen nuevos problemas o paradigmas o cuando "juntarlos" no es lo suficientemente bueno. ¿Quién construye los nuevos marcos o lenguajes? ¿Quién se sienta y explica los detalles de un nuevo motor de física? ¿Quién usa la teoría de grafos / transformaciones de grafos para calcular algunos ciclos por iteración de rendimiento de un algoritmo?

Terminaré donde comencé, aceptando que hay muchos científicos informáticos en roles de desarrollo / ingeniería de software, tal vez no estén a la altura de su potencial.


1

Parece confundir la informática con la programación y el desarrollo de software en general. Los dos no son lo mismo, ni siquiera cerca. Independientemente de lo que digan nuestros títulos, la gran mayoría de nosotros somos programadores, no informáticos. A menos que esté involucrado activamente en la academia a un alto nivel, apuesto a que realmente no tiene idea de lo que está sucediendo en informática.


0

Puedo decirte que la informática está viva y bien. Tengo que resolver nuevos problemas a diario y encontrar una solución eficaz y elegante para esos problemas. Tengo que usar mis habilidades como ingeniero a diario y usar el conocimiento de mí y mis colegas para resolver esos problemas para nuestro cliente.

No estoy tratando de odiar los idiomas, entiendo que tienen un propósito y lo hacen bien, pero cuando sus empleados no saben cómo funciona una tabla hash y usan los métodos de clasificación incorrectos o ejecutan comandos SQL que son terriblemente ineficientes (pero hacen el trabajo en un tiempo aceptable), parece que se está poniendo más esfuerzo en desarrollar tecnologías que mimetizan a los nuevos 'programadores' en lugar de enseñarles a las personas cómo hacer las cosas bien.

Esto suena como un problema con el empleado y ciertamente no es cierto para todos los programadores.

El hecho de que existan herramientas que hacen que nuestro trabajo sea más fácil no significa que no debamos comprender la tecnología de subrayado, si no lo hacemos, no estamos ayudando a nadie y ciertamente no estamos haciendo nuestro trabajo para resolver los problemas de la manera correcta.


Estoy de acuerdo. No estoy tratando de decir que no hay trabajos que no necesiten pensar, o que todos los desarrolladores no tengan idea de lo que están haciendo, pero después de haber venido de un programa de CS, puedo decirles que mi escuela no enséñame la mitad de las cosas que sé ahora. Los aprendí por mi cuenta. Y ahora que los conozco, puedo usar marcos que lo hagan por mí. Pero si no lo hubiera aprendido por mi cuenta, estaría usando ciegamente un marco, la mayoría de las veces incorrectamente
Veaviticus

0

Simplemente no has entendido el problema en cuestión. El problema no es obtener el máximo rendimiento, sino obtener el rendimiento suficiente para que su aplicación responda y sea lo suficientemente rápida. Aprender a programar se trata de resolver el problema, por la menor cantidad de dinero.

Odio decirlo de esta manera, pero cualquier impresión que tenga sobre la muerte de CS es solo su propia preconcepción de lo que un programador "real" debería tener que hacer.


Correcto. Sé que las empresas necesitan ganar dinero. Y ciertamente no soy inocente de hacer que partes de mis aplicaciones sean "lo suficientemente rápidas" en lugar de lo mejor que pueden ser. Tengo más curiosidad acerca de la tendencia en general que muchos desarrolladores (al menos por lo que puedo decir) nunca han estudiado CS. Llegaron al campo desde otro lugar y tienen poca o ninguna teoría real detrás de ellos, solo experiencia con marcos
Veaviticus

@Veaviticus: el uso de un marco puede no ser una teoría académica innovadora, pero definitivamente sigue siendo CS.
DeadMG

0

Bueno, muerto o no es discutible!

El hecho es que en la era tecnológica actual, la mayoría de las empresas contratan personas para resolver tareas del tipo de flujo de trabajo del mundo real a través de la automatización del software. No están interesados ​​en qué tan elegante o rápido puede escribir un programa, siempre y cuando permita que el negocio se ejecute más rápido con mayor producción.

los estrés está en más salida en menos tiempo. (Piense en la comercialización de cultivos / alimentos; crecimiento más rápido y más rápido con menos costo). Lo mismo está sucediendo en el mundo tecnológico (la próxima nueva idea).

Recuerde, hoy en día, las cosas se están moviendo más rápido que nunca debido a la cantidad y el acceso al conocimiento que antes. En aquellos viejos tiempos, la producción era pequeña y mejor, las ganancias eran mayores. Ahora, el juego ha cambiado por completo. Basta con mirar las cosas como la calidad del servicio al cliente y, en general, las cosas no duran más.

La elegancia y la eficiencia son importantes para las empresas tecnológicas como Google, etc., mientras que incluso esos lugares no son perfectos, pero puede acercarse a ellos trabajando en una de esas empresas en los próximos años.

Siempre hay un compromiso en la vida. Puede encontrar un trabajo que pague menos, donde tenga todo el tiempo y atención. O bien, elige nadar con el resto de nosotros para pagar mejor e ignorar las cosas que no son perfectas. Cuanto más rápido se dé cuenta de esto, podrá prepararse para el mundo real. No digo que debas ignorar la calidad y la elegancia, sino conocer la dinámica. Serás más feliz :)


0

En mi opinión, algunas de las cosas más interesantes que podría deparar el futuro se basarán sin duda en la parte científica de la informática, específicamente en la mejora de la visión por computadora / aprendizaje automático y otros algoritmos de sematización. Estos probablemente se impulsarán en la industria (por ejemplo, tome el Microsoft Kinect), pero son problemas tan enormemente difíciles que ciertamente se basarán en la gran cantidad de investigación y progreso realizado en el mundo académico (nuevamente, tome el Microsoft Kinect).


0

Creo que la programación estándar del día a día es casi tanto un arte como una ciencia, pero ciertamente existen áreas que están profundamente interesadas en los aspectos científicos de la informática. Por ejemplo investigadores para empresas y universidades. Si realmente quieres involucrarte profesionalmente en las ciencias, entonces debes buscar un doctorado. Sin embargo, he encontrado que las partes científicas de mi educación son continuamente valiosas, ¡a pesar de que también necesito confiar en mi lado más creativo en la realidad!

Las personas que no saben lo que están haciendo pueden hackear las cosas con algunas de las herramientas que mencionó, pero generalmente contratan a personas reales de CS para hacer las herramientas, solo tiene que ser más abstracto para realmente esforzarse.

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.