¿Es “Computer Science! = Software Engineering” una excusa para enseñar mal la programación?

23

Todos lo hemos escuchado; cada vez que hay una discusión sobre los graduados de CS que tienen malas habilidades de desarrollo, alguien finalmente dice:

La informática no es ingeniería de software.

El problema que veo es que la programación y el desarrollo de software se imparten en cursos de CS. Simplemente se les enseña mal. Si se está enseñando, ¿por qué no enseñarlo bien la primera vez? * *

Así que me gustaría ver cuáles son las opiniones sobre 2 preguntas:

  1. ¿Es el argumento CS! = SE una copia o una excusa para no enseñar adecuadamente las habilidades de programación.

  2. Independientemente de su respuesta a la pregunta 1; si estuvieras en la posición todopoderosa de tomar tal decisión: ¿harías hincapié en la enseñanza adecuada de la programación en los cursos de CS?

*. Tengo la sospecha, según la evidencia anecdótica que obtuve a lo largo de mi educación, de que la mayoría de los académicos en el campo no han tenido que escribir código para mantenerse y no han mantenido el código, y como resultado no tienen el conocimiento / habilidades para enseñarlo de manera efectiva.

Steve Evers
fuente
77
Aclararé mi comentario; En mi opinión, son diferentes (CS! = SE). Entonces, si reemplazo CS y SE con otros 2 campos A, B, donde A! = B, ¡podría obtener algo como Bowling Lessons! = Japanese History. Entonces su argumento se convierte en: ¿es BL! = JH una excusa para no enseñar adecuadamente a JH? Esta es ahora una pregunta absurda y debe descartarse. Si vio a un graduado de CS que no sabía por qué usaría una tabla hash sobre una lista vinculada, se le enseñó mal. Si vio a un graduado de CS que hizo un mal trabajo refactorizando el código, eso puede ser excusado.
Jeremiah Nunn
2
@Jeremiag Nunn: Para usar su analogía: la historia japonesa no se enseña en conjunto con los bolos. Estoy argumentando que cada programa de CS, de hecho, enseña programación y que usan el argumento "CS! = SE" para excusarse de enseñarlo bien.
Steven Evers
2
Otro pensamiento: ¿la falta de habilidades SE en un graduado de CS en particular es culpa de la escuela o del estudiante? En cada clase, es probable que tengas una habilidad bastante amplia que se extiende de competente a horrible.
Adam Lear
2
@SnOrfus La ingeniería de software es el oficio de crear software. La informática es la teoría detrás del software. Conocer ambos es ideal, pero aún están separados. Una mejor analogía (IMO) que @ Jeremiah sería construir instrumentos en lugar de tocarlos.
dash-tom-bang
55
La nota al pie sobre los académicos que no tienen que escribir código mantenible es casi exactamente el punto. Eso no es lo que le importa a CS.
dash-tom-bang

Respuestas:

27

No creo que sea una copia, sino una afirmación de que la informática no es ingeniería de software, no es programación; es, bueno, la ciencia de la computación formalizada. En esencia, es matemática (de hecho, muchos programas de CS comenzaron como programas de matemáticas aplicadas).

Creo que el problema radica más en la industria que en la academia. La industria ve un título de CS en un currículum vitae y piensa: "Genial, este tipo es bueno con las computadoras", y lo contrata para hacer cualquier cosa relacionada con una computadora: TI, programación, desarrollo de software, lo que sea. Esas cosas no necesariamente se encuentran en el ámbito de la experiencia de un graduado de CS. A su vez, muchas personas a las que les gusta construir computadoras o jugar videojuegos ingresan a un programa de CS que esperan hacer ese tipo de cosas y reciben una sorpresa grosera; es decir, muchos estudiantes que van a CS no pertenecen realmente allí, y estarían mejor en un programa de grado más específico.

En segundo lugar, hay un tiempo muy limitado para enseñar CS, una asignatura muy amplia, en un currículo típico de pregrado. Mi plan de estudios de pregrado tenía 8 cursos de CS (para un BA) o 12 cursos de CS (para un BS), además de todos los cursos de matemáticas requeridos. No es mucho tiempo para enseñar CS y matemáticas e ingeniería de programación y software, por lo que en algún momento debes decidir qué es importante y qué puede aprender un estudiante por su cuenta.

Ese último punto es crucial: creo que un buen estudiante, en cualquier materia, explorará ideas por su cuenta. Tengo un título de CS, pero creo que salí de la universidad como un desarrollador decente, porque estudié y escribí software por mi cuenta . La universidad no se trata solo de clases; también se trata de darles a los estudiantes tiempo para desarrollar sus habilidades de manera semiautónoma, mientras que al mismo tiempo brindan orientación valiosa.

Mantengo que la teoría de la enseñanza (CS, matemáticas, etc.) es tan importante, si no más importante, que enseñar habilidades específicas relacionadas con el trabajo. Si le enseñas a un estudiante el por qué detrás de los métodos y técnicas, y no solo el qué , terminarás con alguien que es mucho más adaptable al aplicar sus conocimientos. Por ejemplo, fui a una "escuela de Java" muy difamada y, por lo tanto, me enseñaron en Java, pero también tuve cursos de teoría del lenguaje de programación, lo que explicaba el por qué detrás de muchos idiomas; Como resultado, aprendí a escribir un software mucho mejor que si no tuviera esa experiencia. Claro, no escribo software en Haskell en mi trabajo diario, pero conocer mucha teoría del lenguaje de programación me ha permitido comprender queha sido aplicable a mi trabajo como programador.

También creo que la industria espera demasiado de los estudiantes universitarios. La industria quiere reducir sus propios costos, por lo que en lugar de capacitar a nuevos reclutas para sus trabajos, esperan que las universidades se conviertan en escuelas técnicas / comerciales; en efecto, quieren que las universidades hagan su entrenamiento por ellos. No se puede esperar que los graduados universitarios sepan todo recién salido de la universidad. Ser un buen desarrollador se trata tanto de la experiencia como del conocimiento (especialmente en un campo relativamente joven como el desarrollo de software).

mipadi
fuente
Este es exactamente mi pensamiento, pero explicado mucho mejor que mi respuesta.
Jeremiah Nunn
+1: Tantas cosas buenas aquí, odiaría elegir 1 cosa, pero teniendo en cuenta que CS se originó como matemática aplicada, ¿eso no implica la importancia de su aplicación, en este caso, la programación?
Steven Evers
2
@SnOrfus: en la medida en que la programación es matemática aplicada, sí. Pero igual que la informática! = Ingeniería de software, programación! = Ingeniería de software, tampoco.
mipadi
1
@David Thornley: Primero, yo y todos los que conozco que tomaron física usaron un osciliscope cuando estudiaban ondas. Aún así, la analogía no se sostiene. A los estudiantes ya se les está enseñando programación como parte de un título de CS. Tú eras, yo era, todos los que asistimos a una falta de importancia lo fuimos. Ni siquiera era una sección única de un curso. Es una parte integral de al menos 1-2 clases por semestre.
Steven Evers
2
+1 por explicar que la escuela (colegio, universidad, lo que sea) debería enseñarte a pescar y no solo darte el pescado
Emiliano
25

Parte del problema aquí es el hecho de que 4 años no es tiempo suficiente para convertirse en un ingeniero de software pulido. Dado que queremos que el estudiante tenga exposición a más cosas que solo los cursos de matemática y CS y el hecho de que hay un montón de mecánica pura para aprender (algoritmos, estructuras de datos, sintaxis del lenguaje), no podemos esperar que una especialización de CS verde sea Un ingeniero de software.

Estoy de acuerdo en que CS! = SE y no estoy seguro de que puedas ir a la escuela y convertirte en un SE (incluso con un Máster)

bigtang
fuente
+! 1: Veo tu punto, pero no es solo 'pulido'. Muchos carecen de algunas habilidades muy básicas.
Steven Evers
Supongo que depende de lo que consideres habilidades muy básicas. Por ejemplo, SQL es una habilidad básica en mi mente, pero he descubierto que mis graduados de CS son bastante débiles y creo que es de esperar. Si usted está diciendo que son débiles en la sintaxis del lenguaje o conceptos básicos modularidad o programación orientada a objetos, entonces eso es un gran problema y me gustaría empezar a buscar para los graduados a partir de diferentes escuelas
bigtang
He estado programando profesionalmente durante 14 años. He analizado SQL e incluso puedo crear consultas básicas, pero incluso estas habilidades básicas solo llegaron el año pasado. SQL no es CS. SQL es una implementación de la teoría de bases de datos, que es CS.
dash-tom-bang
@ dash-tom-bang: ¿Consideraría que las declaraciones de flujo de control en lenguajes imperativos son básicas? Puedo confirmar que existen grados que incluyen nuevos graduados de CS que no conocen la mayoría de ellos.
Steven Evers
No consideraría que la implementación del control de flujo en ningún lenguaje en particular se encuentre entre "los fundamentos de la informática". Sin embargo, si alguien no entiende el control de flujo como un concepto, entonces no ha aprendido CS.
dash-tom-bang
10

CS de hecho no es SE. Y la gente parece combinar los dos todo el tiempo, incluso mientras lo admite. La informática realmente debería renombrarse como algo como Computología, o la ciencia de la informática. De hecho, la informática tiene muy poco que ver con las computadoras. Es teoría de grafos, análisis de algoritmos, estructuras de datos, etc.

La gente quiere asumir que un graduado de CS nuevo es en realidad un graduado de ITT; quieren a alguien que haya sido entrenado en una vocación. La informática es ciencia, la programación es un arte. Estos no son lo mismo.

Esto es como preguntar por qué un recién graduado de Física no es un buen ingeniero de automóviles. Es tonto

Jeremiah Nunn
fuente
2
La programación es un oficio, no un arte.
dash-tom-bang
66
La programación es artesanía, ingeniería y arte.
Maciej Piechotka
2
No lo cambiaría de nombre. ¿Qué es la informática, sino la ciencia de las computadoras? en otras palabras, el estudio de las máquinas calculadoras, lo que implica el estudio de los cálculos.
Michael K
1
Debería renombrarse porque la gente lo confundió como tú. ¿conoces a Edsger W. Dijastra? él dijo una vez, "la informática no se trata más de computadoras que la astronomía se trata de telescopios". :)
abucheos el
1
El arte crea belleza; la artesanía crea utilidad. El arte se crea por su belleza; El arte se crea por su utilidad. El arte puede ser útil; La artesanía puede ser hermosa. Ingeniería de software crea utilidad; por lo tanto, la ingeniería de software es un oficio.
systemovich
8
  1. Al menos en los Estados Unidos, la educación en su conjunto se ha convertido en ganancias. Las escuelas están reduciendo el plan de estudios en todos los ámbitos para aumentar la inscripción. Hay más personas en la universidad que no pertenecen allí que nunca. Aprender técnicas adecuadas no es algo que pueda enseñar fácilmente, por lo que no lo hacen.
  2. Personalmente, pondría más énfasis en SE de lo que normalmente existe, pero creo que CS como programa es menos apropiado para las personas que buscan ingresar a la industria. Creo que más instituciones deberían ofrecer un programa práctico de SE.
ChaosPandion
fuente
+1 para el n. ° 1. Me di cuenta de esto cuando fui a la escuela. Era una escuela con fines de lucro y sentí que muchos de los estudiantes no estaban calificados para estar allí. Además, la escuela solo recibió dinero por curso y el fracaso de un estudiante significaba que ya no recibían más dinero de ellos, por lo que con frecuencia los maestros se esforzaban por aprobar a los estudiantes. Tuvimos al menos una persona graduada con su título que creo que ni siquiera podría escribir un programa Hello World en su idioma elegido.
Rachel
desde que tocaste el sistema educativo de EE. UU. y el papel de las ganancias, aquí hay un coro obligatorio de Milton Friedman: youtube.com/watch?v=W3Seg0JE1PM
Trabajo
7

¿Es el argumento CS! = SE una copia o una excusa para no enseñar adecuadamente las habilidades de programación.

No. CS no es SE. Eso es un hecho, no una excusa.

Independientemente de su respuesta a la pregunta 1; si estuvieras en la posición todopoderosa de tomar tal decisión: ¿harías hincapié en la enseñanza adecuada de la programación en los cursos de CS?

No. Sería como obligar a los astrónomos a aprender los detalles de la construcción de telescopios. O forzar a los programadores a aprender los detalles de la construcción de computadoras. Cosas relacionadas, pero un hombre no necesita saberlo todo.

revs Joonas Pulakka
fuente
6

Sí, esto me parece una evasión y una señal de la inmadurez de CS como disciplina académica.

Un programa de BS acreditado por la American Chemical Society requiere que haya aprobado cursos específicos para demostrar habilidades particulares tanto en teoría (clases de lectura) como en práctica (clases de laboratorio). En la actualidad, CS no tiene nada de eso hasta donde yo sé.

Uno de mis profesores de posgrado era un teórico de torres de marfil cuya oficina nunca fue manchada con nada más químico que una pecera con Magic Rocks, pero cuando yo era su TA para química de primer año, también demostró ser un químico de banco bastante competente. .

Cuando trabajaba como químico de pintura industrial, se habrían reído de la idea de que tendría una licenciatura y sería incompetente en el laboratorio. Por supuesto, los detalles de lo que estaba haciendo en el laboratorio eran diferentes a los que había tenido en las clases de laboratorio en la escuela, pero los principios eran los mismos: solo usamos una mezcladora de pintura y una lata, en lugar de un vaso de precipitados y un agitador magnético. .

Si se aplicara el mismo enfoque a la CS, los detalles de lo que se podría enseñar como habilidades prácticas de desarrollo de software para un plan de estudios de CS / SE podrían variar de una escuela a otra y con el tiempo. Pero me parece una locura que sea aceptable que alguien pueda obtener un título en el campo y no ser competente para escribir, depurar y mantener algún tipo de código. (Por supuesto, así son las cosas en muchos programas de CS, pero sigue siendo una locura).

Bob Murphy
fuente
No es una locura, es una epidemia. Alrededor del 90% del código que he visto escrito por mis compañeros es tan fácil de mantener como la torre inclinada de Pisa.
Marcel Valdez Orozco
5

Estoy de acuerdo en que 4 años es suficiente tiempo para darles una buena base sobre la cual crecer. Sin embargo, creo que una cosa que realmente ayuda es cuando las personas de la industria se involucran en el desarrollo del plan de estudios e incluso en la enseñanza en el aula. El año pasado fui miembro de la industria en una clase de desarrollo de software en una universidad local. Fue una experiencia muy reveladora para mí. El profesor y yo trabajamos juntos en el contenido del curso y pusimos mucha más información sobre el proceso de desarrollo, las mejores prácticas de la industria y las situaciones del "mundo real" que habían estado haciendo antes. Lo que descubrimos fue que, debido a que la mayoría de los instructores no desarrollan código ampliamente utilizado y mantenido, traer a alguien de la industria ayudó a identificar y enseñar las habilidades necesarias para hacerlo.

Beth Whitezel
fuente
Me encantaría probar algo así.
ChaosPandion
Debes contactar a tu universidad local y ver si tienen algo así. ¿Dónde están ubicados?
Beth Whitezel
3
  1. Sí, es un copout 100%, deberían enseñar habilidades a largo plazo que serán útiles a lo largo de nuestra carrera. Independientemente de si su intención es ingresar a la academia o la industria, deberá poder programar de una manera que pueda mantenerse, incluso si es solo usted.

  2. Sí, aunque solo se enfatizaría en los cursos adecuados. Personalmente, si tengo que hablar con usted para comprender mejor cómo trató de implementar un algoritmo, rebajaría su calificación.

Incluso si realiza una investigación de CS pura, probablemente tendrá que crear código para demostrar sus ideas. Las habilidades de programación adecuadas te serán útiles en algún momento, entonces ¿por qué no comenzar en la universidad?

JustJohn
fuente
Las habilidades a largo plazo son las CS. "Java" no es una habilidad a largo plazo, como tampoco lo son .NET, SQL, Pascal o COBOL. A menos que por "largo plazo" se refiera a "estar feliz de tener un trabajo cuando necesitan a alguien para mantener esos sistemas heredados".
dash-tom-bang
Si bien estoy de acuerdo en que se necesitan las habilidades básicas (CS), me refiero a escribir código que sea fácil de leer y mantener, independientemente del lenguaje de programación en el que esté escrito. Habilidades de significado a largo plazo que van más allá de las tecnologías que se utilizan.
JustJohn
1
IMHO CS es necesario para poder abordar un problema más complejo, mucha gente por aquí, no necesita un título de CS para escribir código, pero si necesita manejar una matriz de 10x10 millones de datos y manipularla, no puedo entender cómo un SE puede manejarlo sin un título de CS.
abucheos
3

Creo que nuestro problema es que somos mucho más como médicos de lo que estamos dispuestos a admitir ... Tenemos la idea de que un título de cuatro años debería preparar a los estudiantes para escribir software. Ni siquiera está cerca.

Nuestra profesión está en su infancia en comparación con otras disciplinas. Quizás la pregunta debería ser: ¿cómo podemos mejorar el CS para que los estudiantes que se gradúen con ese título estén mejor preparados para convertirse en miembros productivos de un equipo de desarrollo de software del mundo real en un lapso de tiempo mucho más corto?

Quizás deberíamos ser más como la medicina. Cuatro años de trabajo básico (grado CS) y luego residencia: práctica del oficio bajo la supervisión de un ingeniero de software con más experiencia. Tal vez eso es lo que ya tenemos, pero es menos formal ... Quiero decir, como residente, aprendemos nuestras habilidades más valiosas en el lugar de trabajo en nuestros primeros trabajos.

Tal vez como disciplina solo necesitamos formalizar esto mejor.

Chris Holmes
fuente
O un programa Master Craftsman / Apprentice
Austin Salonen
1
El programa de MD no es un programa de ciencias. Si quieres estudiar ciencias, tomas biología. Sin embargo, si tiene un problema médico, no lo lleve a un biólogo.
David Thornley,
Esta es una muy buena idea: formalizar el hecho de que la Ingeniería de Software también es una cuestión de experiencia. Lo mismo aplica para abogados y doctores
Emiliano
¿Pero de qué estamos hablando David? ¿Cuántos de nosotros nos graduamos con un título en CS y luego pasamos nuestras carreras haciendo "Ciencias de la Computación"? Lo que la mayoría de nosotros realmente hacemos es salir al mundo y practicar el oficio de Desarrollo de Software. Es lo mismo que un MD: ellos "practican" la medicina. Practicamos la construcción de aplicaciones.
Chris Holmes
@ Chris Holmes: Estoy realmente molesto por la idea de que un título de CSci te convierta en un programador listo para contratar en un trabajo usando el último lenguaje candente. Hay mucho espacio para ese tipo de título o certificado, probablemente mucho más que CSci real. Creo que el desarrollo de software es análogo a la práctica de la medicina aquí, pero no obtienes tu MD de los departamentos de biología o psicología, lo obtienes de la escuela de medicina. Es un título muy respetado, pero no es un doctorado.
David Thornley
3

Tengo un título de CS, y durante todo un año de mi programa no hubo programación, solo teoría. Nos dijeron que no estamos obteniendo un título en programación sino en Ciencias de la Computación. Si quieres ser programador, ve a la universidad comunitaria.

Aprendimos sobre algoritmos, patrones de diseño y mucha teoría sobre la resolución de problemas sin un lenguaje específico. Los lenguajes de programación van y vienen, pero la teoría subyacente sigue siendo la misma.

Entonces, a su primera pregunta, no, no creo que CS! = SE sea una copia. Es un hecho.

A su segunda pregunta, no, no creo que lo haga. ¿Cómo enseña correctamente la programación? Más allá de loops, ifs, métodos, clases y OOP, ¿cuál sería la 'programación adecuada' y cómo lo haría relevante para cualquier lenguaje de programación? Necesitas experiencia escribiendo código, algo para lo que un título de 4 años no puede prepararte.

Sin embargo, una cosa que haría es proporcionar una clase sobre Desarrollo en el mundo real. El control de la fuente, el seguimiento de tickets / errores, el seguimiento de códigos y todo ese jazz sería un buen comienzo para preparar a los que pronto serán graduados para lo que enfrentarán en sus nuevos trabajos.

Creo que depende de nosotros cuando contratamos a un nuevo graduado para comprender que probablemente no escribirán un código galardonado. Necesitan orientación y dirección.

Tyanna
fuente
++ - excelentes puntos. Sería bueno si los currículums de CS ofrecieran una o dos clases sobre estas cosas del "mundo real", estoy de acuerdo. Habíamos hablado de eso en mi universidad (en 1993) pero nunca fue a ninguna parte.
dash-tom-bang
¿Cómo se esperaba que demostraras tu dominio en las clases que conformaron el año de la teoría sin programación solamente? ¿Exámenes puramente escritos?
Carson63000
@ Carson630000: tareas escritas, algunas veces escribiendo diagramas de estado, a veces escribiendo ensayos que denotan cómo abordaríamos y resolveríamos un problema o cómo aplicaríamos varios conceptos de CS. Nos obligó a comprender la teoría y no un lenguaje de programación específico.
Tyanna
2

Es importante que la universidad logre un buen equilibrio entre el conocimiento teórico y las habilidades prácticas. Mientras asistía a diferentes cursos aprendí ambos. Durante los primeros años hubo muchas matemáticas y algoritmos / estructuras de datos. Lo que siguió fue una elección: o podría continuar aprendiendo ciencias de la computación (tipo de camino artístico, donde podría, por ejemplo, asistir a cursos con sofisticados algoritmos de coincidencia de cadenas) o concentrarse en la ingeniería de software. Todavía tenía que obtener un fondo sólido de programación durante este tiempo.

Elegí la ingeniería de software, porque nunca me interesaron mucho los problemas abstractos. Pero incluso aquellos a quienes les gustaba la informática pura tenían que:

  • programar un sistema de archivos pequeños en el espacio del usuario, crear un linuxmódulo de kernel y modificar el kernel en sí mismo, escribir un juego orientado a objetos puros en SmallTalk,
  • escriba su propio protocolo de comunicación y luego implemente uno, elegido por el maestro (fue realmente genial, cuando los programas de dos estudiantes podían comunicarse fácilmente, aunque no habían colaborado antes),
  • crear un proyecto más grande Javaen un equipo de cuatro,
  • construir algún proyecto de programación funcional,
  • escriba varios programas sólidos Cpara programación paralela (las ideas eran abstractas, pero las revisiones fueron bastante duras, como perder puntos por no proporcionar una salida adecuada, cuando el programa falló, como programdebería hacer un buen Unix ),
  • crear un portal web usando un marco web (elegimos django, lo que me hizo amar este marco),
  • crear un programa bastante grande usando LAMP(todavía tengo pesadillas php, pero usé en postgresqllugar de MySQLy estoy muy feliz de saber esto DBMSahora),
  • y si alguien elige, podría escribir un programa para su tesis de maestría. Escribí un pythonprograma de escritorio de 10k líneas usando PyQt.

Tal vez hubo otros proyectos, pero ahora simplemente los olvidé.

Mi punto es: todo depende de la escuela. Me disgusta mucho el enfoque de ingeniería de software puro, donde Javaes el idioma principal. Tuve que ayudar a un amigo una vez, que asiste a esa escuela y tuvo que escribir algún programa para programación paralela. Tenía que escribir para él, básicamente, porque no obstante, que sizeof(some_string)en el Cda la longitud de la cadena.

Seré honesto: odiaba las matemáticas, me dolía, cuando tenía que prepararme para tareas abstractas, que se servirían en exámenes de algoritmos / estructuras de datos. Pero me da cierta ventaja: puedo pensar de una manera muy abstracta. Es como cuando aprendes artes marciales y no guardas la guardia (al menos en esos, donde se supone que debes hacerlo). El entrenador sigue viniendo y golpeándote en la cabeza, cuando bajas las manos, porque olvidaste o porque estás demasiado cansado para mantenerlas. Pero después de un tiempo, simplemente sigues así. Y se vuelve realmente difícil golpearte en la cara. Lo mismo con los problemas algorítmicos abstractos. Comprenda el contenido de Introducción a los algoritmos y realmente pocas cosas sorprenderán en el trabajo.

gruszczy
fuente
Suena como un buen programa. Alguna teoría. Mucha práctica
Mike Dunlavey
1

Creo que la respuesta es sí (en cierto modo).

La cuestión es que no es posible enseñar a los niños en un corto período de tiempo la programación. Deberían pensarse en el pensamiento lógico de los programadores, cómo resolver (en menor escala) los problemas del programador.

Estoy seguro de que los programas de la escuela deberían revisarse, en mi pequeño país del "tercer mundo", afortunadamente, se está haciendo un esfuerzo para que esto suceda. Somos el primer país en implementar el programa OLPC; http://laptop.org/en/

Trufa
fuente
1

Desde mi propia experiencia (soy estudiante en este momento), tengo que decir que sí, es una excusa. Todo el mundo se refiere a CS como una ciencia que nos enseña todos los conceptos básicos de las computadoras, y SE como una rama especial en CS que enseña explícitamente la programación. Imo, todos los que tienen BS en CS, deben saber cómo escribir código bueno y optimizado (incluso si la programación no es su área de especialidad). Entonces sí, si tuviera una posición poderosa de tomar tal decisión, obligaría a los estudiantes a adquirir buenas habilidades de programación.

Ilija Eftimov
fuente
Mi título se titula Ciencias de la computación e ingeniería de software, y estaba orientado a brindarle lo mejor de ambos mundos, es decir, ser un programador competente y conocer la teoría lo suficiente como para poder ir a la escuela de posgrado o la investigación. Creo que fue un buen enfoque.
Michael K
1

Asumiendo que el objetivo es educar a buenos ingenieros de software (programadores) porque el mundo los necesita, ¿está bien responder diciendo lo que creo que debería enseñarse?

Primero, esto es importante porque actualmente la transferencia de conocimiento es muy ineficiente. Cuando los posibles programadores están en clases, sus mentes están abiertas y absorben lo que se les enseña. Al mismo tiempo, los profesores (yo era uno) con demasiada frecuencia están más interesados ​​en llenar la tubería de la escuela de posgrado con estudiantes que pueden trabajar en materias esotéricas. Cuando se plantea la objeción de que los estudiantes no se están preparando para problemas del mundo real, he visto a los profesores afirmar que ese no es su trabajo . Ese es el trabajo del mundo real.

Entonces, cuando los estudiantes se convierten en programadores en el mundo real, ¿están ansiosos por aprender de sus nuevos colegas? No en mi experiencia. Más bien están ansiosos por difundir el evangelio que adquirieron en la escuela. Recuerdo que, como estudiante y joven practicante, pensé en lo difícil que sería fomentar nuevas ideas entre los viejos fanáticos del mundo. Ahora que soy un viejo loco, veo lo difícil que es abrir los ojos de los nuevos programadores a la diferencia entre teoría y práctica.

Yo era estudiante de ingeniería, en ingeniería mecánica y luego en ingeniería eléctrica. Una parte fundamental de eso fue a) fundamentos matemáticos, yb) solución práctica de problemas. La ingeniería de software debería ser así, no solo la programación.

Creo que la ingeniería de software (programación) debería enseñarse con suficiente ciencia informática para ser un conocimiento práctico : teoría básica de autómatas y teoría de la información. No es necesario hacer esto en gran profundidad. Después de enseñar las habilidades básicas de programación, debe haber proyectos cooperativos de tamaño no trivial. Una parte esencial de estos debe ser la propuesta y la consideración de soluciones alternativas de problemas específicos, con análisis de pros y contras, no solo la última religión o el "próximo gran acontecimiento" o una talla única para todos. Finalmente, debe haber cooperación y asociación entre la industria y la academia, para que las ideas y las mejoras se puedan comunicar en ambos sentidos, mejorando en gran medida el control de calidad.

Mike Dunlavey
fuente
0

Los que pueden, hacer; los que no pueden enseñar.

En mi universidad, la base de conocimiento de los maestros es lamentablemente deficiente. He visto a los maestros luchar por comprender cómo representar tablas semiestructuradas en XML mientras tienen un PHD en Diseño de bases de datos. He visto a mi profesor de ensamblaje preguntarme qué está haciendo mi código cuando copio y pegué su fragmento de código. He visto a mi maestro de diseño de software decirnos que el método Agile es el mismo que el método en cascada, pero más rápido, que el modelo de proceso de desarrollo iterativo tiene y solo puede tener 3 iteraciones porque eso es lo que la imagen que el libro usa como ejemplo representa. Uno de mis maestros ni siquiera sabía qué era otra declaración.

No creo que estén 'haciendo frente', o haciendo excusas, realmente creo que están haciendo lo mejor que pueden con sus experiencias, que tienen muy pocos.

Estoy de acuerdo con las otras personas que publican aquí que 4 años no son suficientes para convertirse en un programador experimentado, pero la experiencia que han tenido mis maestros tampoco es suficiente para hacerlos experimentados. Es muy parecido a Ender's Shadow, donde Bean se da cuenta de que las métricas utilizadas por los maestros en la escuela de batalla se quedan cortas porque la última guerra, que es la regla guía, fue demasiado corta para mostrar realmente lo que realmente se necesita. En otras palabras, los maestros estaban haciendo lo mejor que podían, pero no tenían la experiencia para saber lo que realmente se necesita para ser un buen comandante (o un buen programador en este caso).

Malfist
fuente
3
Creo que muchos de sus ejemplos son obviamente casos en los que su maestro está tratando de simplificar las cosas para su propio beneficio. Those that can, do; those that cannot, teach.Tampoco estoy de acuerdo con esto en absoluto: las carreras académicas e industriales conducen a estilos de vida completamente diferentes. Gran parte de la investigación mundial proviene de académicos. Y no veo ninguna manera en que hayas respondido la pregunta original.
Nadie
2
¿Qué tiene que ver XML con el diseño de la base de datos, además del hecho de que si uno no estuviera tan interesado en el rendimiento, podría usar XML como un almacén de respaldo para una base de datos? No quiere decir que algunos maestros pueden perder el punto (recuerdo haber discutido con un instructor sobre los puntos eliminados debido a "comentarios excesivos" cuando el plan de estudios hasta ese punto enseñaba "comentar como el viento"), pero es algo exagerado. Si alguien quiere aprender Java, hay formas más baratas de hacerlo que siguiendo un currículum de CS.
dash-tom-bang
1
También está el hecho de que algunas universidades son peores que otras, y la tuya puede tener un departamento de CS particularmente malo. Tradicionalmente, las personas de CS con títulos de posgrado han podido ganar mucho más dinero en la industria que en la academia, por lo que los académicos eran los que realmente querían estar allí y los que no podían tener un trabajo en el mundo real. He visto ambos y sospecho que la proporción varía según las universidades.
David Thornley
@ dash-tom-bang, XML es un ejemplo casi perfecto de bases de datos semiestructuradas. en.wikipedia.org/wiki/Semi-structured_model
Malfist
1
XML usado de esta manera sigue siendo una implementación de una teoría de base de datos. No es en sí la teoría.
dash-tom-bang
0

Los informáticos y los ingenieros de software son diferentes. Los científicos son los que realizan los experimentos locos y elaboran los algoritmos que nosotros, los ingenieros de software, aprovechamos para ser mejores.

Piense en los químicos que realizan experimentos para una empresa farmacéutica. No les importa cómo producir el químico en masa. Tampoco les importa el marketing, el empaquetado, la distribución o cualquier cosa que le pase al medicamento después de descubrirlo. Demonios, ni siquiera les importa el proceso de certificación. Lo único que les importa es encontrar una sustancia química que tenga efecto cuando se administra a los sujetos de prueba. La compañía es responsable de llevarlo más allá de eso.

Los informáticos son como esos químicos. Todo lo que hacen es probar las teorías con código. No les importa cuán sostenible sea el código. Demuestran una teoría y pasan a la siguiente. Alguien más empaqueta ese algoritmo y lo hace útil para las masas y tenemos MP3 o visión por computadora con Kinect o transmisión de video en su iPhone. Entonces CS! = SE es un argumento válido.

Escribe la segunda parte de tu pregunta. Si ofreciera un título en Teoría de la Música, podría haber un curso obligatorio de composición o algo así, pero no requeriría que nadie estudiara un instrumento. Depende del estudiante buscar el conocimiento que desea. La informática no es ingeniería de software ... si quieres aprender SE, toma una doble especialización.

Michael Brown
fuente
0

Edsger Wybe Dijkstra era un informático holandés.

Recibió el Premio Turing de 1972 por sus contribuciones fundamentales al desarrollo de lenguajes de programación , una vez dijo:

"LA CIENCIA DE LA COMPUTADORA NO ES MÁS SOBRE COMPUTADORAS QUE LA ASTROMÍA ES SOBRE LOS TELESCOPIOS".

CS es REALMENTE DIFERENTE de un SE. (CS! = SE).

Un CS es un científico que ha adquirido conocimientos de CIENCIAS INFORMÁTICAS.

La CIENCIA DE LA COMPUTADORA o ciencia de la computación (a veces abreviada CS) es el estudio de los fundamentos teóricos de la información y la computación y de las técnicas prácticas para su implementación y aplicación en sistemas informáticos. Con frecuencia se describe como el estudio sistemático de procesos algorítmicos que crean, describen, y transformar la información.

La informática tiene muchos subcampos, por ejemplo:

  • Informática teórica
  • Teoría de la computación
  • Algoritmos y estructuras de datos.
  • Elementos informáticos y arquitectura
  • Multiprocesamiento
  • Ciencia computacional
  • Inteligencia artificial
  • Sistemas de software

Muchos de nosotros no necesitamos ninguna de estas habilidades en el trabajo diario o al menos un poco de ella.

INGENIERO DE SOFTWARE (SE) es una profesión dedicada al diseño, implementación y modificación de software para que sea de mayor calidad, más asequible, mantenible y más rápido de construir. Es un "enfoque sistemático para el análisis, diseño, evaluación, implementación, prueba, mantenimiento y reingeniería de un software mediante la aplicación de ingeniería al software"

Como un experto en CS, se supone que tiene el conocimiento para manejar problemas realmente complejos sin conocer ningún lenguaje de programación realmente bueno. En mi humilde opinión, aquí podemos abrir otro hilo, donde un GRADO para mí es SOLO un PUNTO DE PARTIDA y no un OBJETIVO FINAL.

Como SE sabe, se supone que tiene los conocimientos necesarios para gestionar la producción de este problema realmente complejo y gestionar el desarrollo de un equipo o un proyecto sobre este campo.

Juntos realizan la investigación en ciencias realizada por un CS en Ciencias aplicadas con la ayuda de un SE.

No me refiero a CS es mejor que SE, me refiero a CS! = SE.

Este tipo de pregunta es la misma pregunta que las personas que no son informáticas se preguntan por qué, como programadores, no pueden solucionar por teléfono el problema del programa X, Y, Z en el sistema operativo J, M, NORTE. ;)

En realidad , estoy realmente aburrido de la codificación después de 10 años de desarrollo de sistemas Unix en el campo de la seguridad y después de leer esta pregunta, entiendo, ¡necesito estudiar más ciencias de la computación y menos lenguaje y sistema o protocolo de computadora!

¡Nadie en mi trabajo puede manejar la diferencia sobre SE y CS! Es realmente una mala cosa.

Si crees que un CS puede ser una excusa para una mala habilidad de programación, realmente estás perdiendo el punto sobre qué es un CS y qué es SE.

Supongo que eres un SE, ¿sabes, por ejemplo, que todo el lenguaje, todo el paradigma y todas las cosas relacionadas con el lenguaje de la computadora se pueden expresar matemáticamente en un conjunto de funciones recursivas parciales y lo que sea que aprendas un nuevo idioma, CUALQUIER NUEVO IDIOMA, solo eres aprendiendo una nueva abstracción sobre la MISMA función parcial recursiva?

que te diviertas :)

Boos
fuente