¿Cómo puedo iniciar una comunidad de desarrollo de software en mi escuela?

14

Soy un estudiante de la Universidad del Sur de Florida que está frustrado con el entorno educativo en el programa de Ciencias de la Computación. En este momento, estoy tomando "Diseño del programa". Debería aprender a organizar mi código fuente en funciones y módulos para que mis programas sean legibles y mantenibles; en cambio, estoy aprendiendo sobre las matrices y la recursividad en C. El próximo semestre, tengo que tomar "Diseño orientado a objetos", que se enseña a través de C ++ ( estremecimiento ).

Hace dos años, me enamoré de la programación, y he estado aprendiendo todo lo que pude desde entonces. La posibilidad de tomar otra clase de C ++ me aburre casi hasta las lágrimas. Por esa razón, pensé en comenzar un club de programación para conocer a estudiantes igualmente ambiciosos, aprender nuevos idiomas, discutir temas de desarrollo de software y trabajar con desarrolladores de otros estudiantes.

Sin embargo, estoy empezando a darme cuenta de que puede que no haya otros estudiantes que compartan mi experiencia de desarrollo de software. No se debe a la falta de motivación sino a la falta de oportunidades: solo conozco otra clase de programación ("Lenguajes de programación") y ninguna clase de desarrollo de software en el mundo real. Todos los demás solo tienen experiencia escribiendo scripts triviales en C y C ++.

Me he dado cuenta de que si quiero trabajar con otros desarrolladores de software para estudiantes, tendré que entrenarlos yo mismo. Ahora, estoy planeando hacer del club un campamento de desarrollo de software, que les enseñe a los miembros cómo desarrollar software con herramientas e idiomas modernos. Obviamente, comenzar un curso de desarrollo de software no oficial es una tarea monumental con muchos enfoques posibles. Mi pregunta para usted, querido lector, es

¿Cuál es mi plan de ataque?

Debería

  • dar una conferencia al club yo mismo, tratando de equilibrar el trabajo del club con la tarea?
  • ¿Solicitar a la facultad de CS que enseñe sobre temas dentro de su experiencia que pueden ser menos relevantes para los miembros?
  • ¿Intento encontrar un desarrollador comprensivo y experimentado dentro o fuera de la escuela que pueda compartir mi carga de trabajo?
  • mostrar video conferencias (de MIT OpenCourseWare , Google Tech Talks , etc.)?
  • realizar talleres prácticos de programación?
  • asignar tarea?
  • ¿hacer algo más?
Evan Kroske
fuente
3
¿Por qué te estremeces de que se enseñe OOP a través de C ++? ¿Simplemente te sientes incómodo tratando con lenguajes de alto nivel? Si es así, ¿cómo espera aprender OOP?
Cam
44
@Evan: Para ser sincero, si crees que C ++ es un lenguaje de bajo nivel, entonces un curso de C ++ sería perfecto para ti. Aprenderás mucho C ++ puede parecer de bajo nivel al principio para principiantes porque ofrece características de bajo nivel, pero definitivamente no tiene que usarlas. De hecho, la mayoría de las veces, usará el STL y todas sus características de alto nivel de OOP.
Cam
10
C ++ es de bajo nivel en comparación con, por ejemplo, Java, Ruby, Javascript, C #, etc. Es de alto nivel en comparación con muchos otros idiomas. Parece algo así como un debate sin sentido.
Fishtoaster
2
@fishtoaster: no diría que c ++ es de bajo nivel en comparación con Java y C #. Es tan de alto nivel como esos idiomas al menos (no sé mucho sobre el otro). Solo tiene la ventaja adicional de que también puede ser de bajo nivel para que pueda obtener lo mejor de ambos.
n1ckp
1
@ n1ck: Punteros por supuesto (sé que C # los tiene pero su uso es raro), administración de memoria manual, sin lambdas (no estoy seguro de qué nombre les da C #, python usa lambdas), sin foreach nativo, un estándar mucho más pequeño biblioteca, giro de bits más frecuente, recompilación necesaria para diferentes plataformas, etc. No necesita ser ensamblado para tener un nivel más bajo que esos dos.
Macha

Respuestas:

20

Francamente, toda tu actitud me concierne. Ni siquiera has reunido al grupo y ya asumes que solo serás uno que tenga algún conocimiento para impartir y el que debería decidir qué hará el grupo.

La mejor opción es reunir al grupo inicial y, como grupo, hacer una lluvia de ideas sobre lo que quieren hacer. Lo que usted personalmente quiere hacer es irrelevante en términos de lo que el grupo quiere hacer. Decidiendo qué hacer sin el aporte de los otros miembros del grupo antes de la primera reunión, te encontrarás como un idiota arrogante con el que no me gustaría trabajar voluntariamente. Por lo tanto, matarías al grupo antes de que comenzara.

HLGEM
fuente
Tienes toda la razón; No tengo que formular e implementar un plan maestro para el club solo. Sin embargo, necesito ideas para las actividades y reuniones del club para discutir con el resto del club.
Evan Kroske
5

Como todos en tu club vienen voluntariamente, debes hacerlo interesante y motivador. Y la tarea no es exactamente motivadora.

Enseñar a alguien es difícil, pero ¿por qué no tratar de enseñar de una manera no manual con una meta al final? Esencialmente, al principio uno reúne a todos y elabora un proyecto grupal y un lenguaje. El proyecto debe ser interesante y poder mostrar un progreso visible pero no demasiado difícil. Una vez que tenga el idioma definido, les enseñará los conceptos básicos (sintaxis, paquetes / espacios de nombres, clases, escritura estática / dinámica, etc.). Luego les das recursos (libros, tutoriales en línea, documentación en línea), una manera fácil de contactarte y una parte específica del proyecto para trabajar. Luego, cada persona trabaja en el proyecto en su tiempo libre, consultando la documentación y a usted según sea necesario.

¿Cuál es la ventaja de este proceso?

  • La gente no se aburre escuchándote a ti o a alguien más hablando sobre algo en cada reunión
  • La gente aprende a autoaprendizaje, una habilidad muy importante del mundo real
  • No te estás comprometiendo demasiado, ya que no eres el único recurso de conocimiento
  • No tiene que saber todo el idioma antes de poder enseñarlo, ya que solo necesita presentarles el idioma. Y cuando necesiten preguntarte algo, puedes investigarlo rápidamente. Sin embargo, debe estar un poco por delante de todos los demás, ya que algunas cosas requieren saber cuáles son los 5 pasos por delante
  • Estás creando algo que tiende a motivar a las personas.

La única forma de ver si funciona es probarlo.

TheLQ
fuente
Un proyecto grupal sería una buena idea si pudiera mantener la membresía del club por debajo de diez estudiantes. Más allá de eso, los equipos comienzan a ser difíciles de manejar. Sin embargo, no puedo obtener apoyo universitario si prohíbo que los estudiantes se unan al club, y estoy seguro de que más de 10 estudiantes estarán interesados ​​en unirse al club. Nuestro club de piratería siempre tiene más de treinta estudiantes en sus reuniones semanales.
Evan Kroske
1
¿Entonces más de un proyecto? Trate de encontrar intereses comunes entre todos los miembros del grupo. ¿Primero, conocer los intereses personales de la encuesta y luego tratar de idear proyectos que giran en torno a esos proyectos?
Chris
4

Mirando el diagrama de flujo del curso para su especialidad , realmente está malentendido qué esperar en las diferentes clases de una especialización en Ciencias de la Computación.

Las clases de las que está hablando son clases introductorias que introdujeron a los estudiantes a varios conceptos básicos de codificación. Parece "Conceptos de programación" una introducción a la profesión con una visión general de 1 semana de todas las áreas básicas de la informática, sin codificación real. A partir de ahí, es NORMAL tener un curso introductorio en C, y otro curso introductorio en C ++ es NORMAL para una especialización en Informática. Es posible que ingrese al programa con algo de experiencia en codificación, pero la mayoría de las personas no. El programa tiene que enseñarconceptos como la recursividad, y cómo escribir clases, y sobrecarga de operadores, y plantillas y todo eso (sin mencionar la enseñanza sobre variables, bucles for, sentencias if, etc.), por lo que hay dos clases diseñadas básicamente para enseñarle a codificar en algún lenguaje de programación. Y generalmente tienen el tipo de nombres engañosos que tienen las clases de su universidad. Las clases que enseñan el nivel de organización que desea generalmente se denominan "Ingeniería de software" o "Patrones de diseño". El primero es típicamente un requisito, y el segundo es típicamente un curso electivo (tal vez a nivel de posgrado), pero ambos pueden ser optativos.

Existe un debate académico e industrial sobre si el plan de estudios de Ciencias de la Computación se enfoca en la organización del software tanto como debería, si la especialización debe reorganizarse y si la Ciencia de la Computación y la Ingeniería del Software son especializaciones diferentes, pero por ahora, su programa de Ciencias de la Computación es NORMAL .

(Y espere, en otro semestre o dos, llegará a clases más desafiantes que le enseñarán cosas que aún no ha enseñado).

Ken Bloom
fuente
No estoy satisfecho con "normal". Quiero dejar la universidad con una educación de primer nivel en el desarrollo de software, y estoy dispuesto a trabajar (duro) para lograrlo. Tenía la intención de transferirme al MIT en lugar del USF, por lo que utilizo el programa de Ciencias e Ingeniería Informática del MIT como mi educación ideal en CS.
Evan Kroske el
@Evan @Ken heh. Entonces mi universidad consideraría no normal. Introducción a las aplicaciones informáticas (es decir, cómo utiliza Word) -> Lógica y algoritmos informáticos (es decir, diagramas de flujo y lógica booleana. En realidad no hay algoritmos) -> Programación en C ++ (sintaxis, OOP, lo básico) -> Avanzado Programación en C ++ (algoritmos, recursividad, punteros) -> Programación en Java (lo mismo que C ++ básico) -> Programación en Cobol (Todavía no he llegado tan lejos, pero Dios lo estoy temiendo)
Earlz
1

¿Qué pasa con la programación de concursos? ¿Incluso algo como Perl Golf (o PHP Golf), donde tienes personas (o equipos) trabajando para resolver un problema usando la menor cantidad de código posible? Es una excelente manera de aprender más sobre idiomas y las competencias siempre hacen que las cosas sean interesantes.

Por supuesto, deberías ofrecer algo más que competencias, pero son bastante fáciles de organizar y siempre las he disfrutado.

Colin O'Dell
fuente
1

Tienes razón en que necesitas algo de estructura; quieres forzarte a ti mismo y a los demás a aprender, y no solo sentarte a charlar sobre software / quejarse sobre la pésima selección de cursos. Pero no estoy seguro de que tratar esto como una clase contigo como su maestro sea el camino a seguir; aún no eres un experto, y también estás en esto para aprender algo.

¿Qué tal organizar el club en torno a proyectos de software? No algunos programas de tareas de juguete, sino algo que crees que realmente puedes encontrar útil. (Tenga en cuenta que "marginalmente útil" todavía califica como "útil"; está tratando de aprender haciendo, no encontró una startup. :-)) Si el club tiene suficientes personas para múltiples equipos, forme múltiples equipos. El equipo decide qué idioma quiere usar, cuáles son las especificaciones, cómo se debe dividir la mano de obra, etc., etc., y trabaja en forma individual en su propio tiempo. Luego, en su reunión semanal del club, discute cómo va cara a cara, dónde están los obstáculos, cosas interesantes que ha aprendido, etc.

También me gusta mucho la idea de traer profesores invitados, ya sean profesores, profesionales o videos que tú u otra persona piensan que vale la pena compartir. Entonces, podría organizar una reunión nocturna como esta:

  1. Conferencia invitada sobre algún tema de software de alguien que lo conoce bien.
  2. Sesión de preguntas y respuestas / gab sobre la conferencia (con suerte con la participación del profesor, pero solo entre ustedes para ver videos).
  3. Dividir en equipos de proyecto, hacer cosas del proyecto.

Eso tomará una tarde y estará lleno de bondad para mejorar el conocimiento. Ojalá.

De todos modos, les deseo suerte con este proyecto. Cuando lo despegues, espero que vuelvas aquí y nos cuentes cómo está funcionando.

BlairHippo
fuente
1

El proyecto grupal es una gran idea. Especialmente si el proyecto es algo que puede ayudar a la universidad, o sus compañeros de clase.

Me uní a un grupo en la universidad que trabajaba en proyectos para estudiantes.
El proyecto más popular fue un recorrido virtual de 360 ​​grados por el campus.
Compramos el equipo necesario y comenzamos a tomar fotos alrededor del campus. Luego construimos un sitio web para albergar la gira, descubrimos el alojamiento y lo incluimos en el sitio web de la universidad para futuros estudiantes. Este proyecto abarcó más que solo tareas de programación, y también hizo que los no programadores se interesaran.

Intente identificar un nuevo sitio web o aplicación que no solo usaría, sino que a todos en el campus les gustaría usar. Creo que es más fácil y divertido aprender si tienes un objetivo en mente.

Todd Bumbarger
fuente
Realmente me gusta esta idea; Hay muchas maneras en que mi nuevo club podría agregar o mejorar los sistemas de TI de la universidad. Por curiosidad, ¿a dónde fuiste a la universidad?
Evan Kroske el
Universidad Clarion en PA. Incluso fui a una entrevista una vez donde el entrevistador mencionó haber usado el recorrido para la búsqueda de la universidad de su hijo. Era muy intersante.
Todd Bumbarger
1

Si esto va a ser una actividad extracurricular, no hagas la tarea. Eso es simplemente cojo.

Probablemente podría obtener algo interesante simplemente iniciando un grupo github y publicando / enviando correos electrónicos en su escuela (¿supongo que los niños en estos días también usan Facebook y Twitter? Podría ser una buena idea también alcanzar esos puntos). Cuando consiga un grupo de 5-6 personas que estén realmente interesadas juntas, decida un proyecto y simplemente trabaje en él.

Si no hay interés, es ridículamente fácil unirse a un proyecto de código abierto si está razonablemente capacitado. Simple como bifurcar algo que le interesa en github y comenzar a hablar con los desarrolladores.

La ventaja que tiene que la generación anterior no tenía es que no es nada difícil conectarse con los programadores a su nivel y en su idioma, mientras que es muy geográficamente dispar. Y no me refiero solo a enviar un correo electrónico. Skype / iChat / Ventrilo facilitan las conferencias de voz, las herramientas como git / mercurial (y las páginas de proyectos asociadas en línea) facilitan la codificación como grupo, incluso si estás en lados opuestos del Atlántico. Realmente no hay razón para no codificar socialmente en estos días, si eso es lo que quieres hacer.

Finalmente, no tenga el hábito de juzgar a las personas por los idiomas que saben / quieren saber. Es una trampa fácil caer cuando eres el único Smalltalker en una manada de personas que piensan que C ++ representa el límite de la programación, pero no te dará muchos amigos y te dará un sesgo en contra de ciertas herramientas. Conocí hackers que están muy por delante de mí en habilidades y experiencia, que han usado LISP, Perl y C en el mismo proyecto . A las personas que están en la cima del grupo de desarrolladores profesionales no les importa mucho el nivel de sus herramientas, siempre y cuando hagan el trabajo.

Inaimathi
fuente
1

Esto suena como una oportunidad para establecer contactos, estoy seguro de que hay varios estudiantes interesados ​​en programar con un nivel similar de experiencia / capacitación ... simplemente no los encuentras ...

¿Has asistido a uno de los Campamentos de Código (capacitación gratuita para desarrolladores) en el área de Tampa Bay, o te has unido a uno de los grupos de usuarios de programación local?

Ambos recursos le proporcionarán oportunidades para establecer contactos. Y en lugar de sentir que tiene que capacitar a sus compañeros, podrá invitar a sus amigos junto con usted y luego discutir lo que se cubrió.

También obtendrá acceso a personas que están programando como una carrera y pueden tener una idea de qué tipo de situaciones es probable que surjan en "el mundo real".

Una vez que haya explorado estos recursos locales, aún puede encontrar oportunidades para compartir su conocimiento haciendo sus propias presentaciones, lo cual es genial. Compartir lo que ha aprendido con un grupo de usuarios o como orador de una presentación de campamento de código es una buena manera de obtener comentarios sobre lo que ha aprendido y también lo abre a aprender más.

Crecí en el área de Tampa Bay y asistí a muchos eventos gratuitos patrocinados por Microsoft, su grupo de usuarios local también debería tener información sobre cómo participar en esos eventos.

Bueno, esta fue una respuesta larga y sin aliento ...

El próximo Code Camp en Tampa es el 13 de noviembre de 2010 según el sitio web tampacodecamp.

Aquí hay un enlace a su grupo local de usuarios de INETA / programación:

http://www.tampadev.org/

(Soy nuevo en este grupo y solo pude incluir un enlace).

Jeff
fuente
1

¿Qué tal encontrar un proyecto de código abierto (o más de uno) en el que su grupo esté interesado en contribuir?

Creo que el mayor desafío que probablemente enfrentarás es que si bien escribir código es divertido, es todo el administrador que lo rodea, etc., lo que puede convertirlo rápidamente en una experiencia dolorosa. Si puede encontrar un proyecto de código abierto existente, al menos debería tener parte del marco de soporte.

El código abierto lo llevará a algunos buenos hábitos, y aunque estará un poco mojado detrás de las orejas en comparación con algunos de los contribuyentes, tendrá una gran ventaja sobre otras personas: todos estarán en el mismo lugar y podrán mantenga conversaciones con los miembros de su equipo, que normalmente es uno de los mayores problemas con el trabajo comunitario de código abierto ...

DanW
fuente