Comment démarrer une communauté de développement logiciel dans mon école?

14

Je suis un étudiant à l'Université de Floride du Sud qui est frustré par l'environnement éducatif du programme informatique. En ce moment, je prends "Program Design". Je devrais apprendre à organiser mon code source en fonctions et modules afin de rendre mes programmes lisibles et maintenables; au lieu de cela, j'apprends les tableaux et la récursivité en C. Le semestre prochain, je dois prendre "Object-Oriented Design", qui est enseigné par C ++ ( shudder .)

Il y a deux ans, je suis tombée amoureuse de la programmation et depuis, j'apprends autant que possible. La perspective de prendre une autre classe C ++ m'ennuie presque aux larmes. Pour cette raison, j'ai pensé créer un club de programmation afin de rencontrer des étudiants aussi ambitieux, d'apprendre de nouveaux langages, de discuter de sujets de développement logiciel et de travailler avec d'autres étudiants développeurs.

Cependant, je commence à réaliser qu'il n'y a peut-être pas d'autres étudiants qui partagent mon expérience de développement logiciel. Ce n'est pas à cause d'un manque de motivation mais d'un manque d'opportunités: je ne connais qu'une seule autre classe de programmation ("Langages de Programmation") et aucune classe sur le développement de logiciels réels. Tout le monde n'a qu'une expérience dans l'écriture de scripts triviaux en C et C ++.

J'ai réalisé que si je veux travailler avec d'autres développeurs de logiciels étudiants, je vais devoir les former moi-même. Maintenant, je prévois de faire du club un bootcamp de développement logiciel, enseignant aux membres comment développer des logiciels avec des outils et des langages modernes. De toute évidence, commencer un cours de développement logiciel non officiel est une tâche monumentale avec de nombreuses approches possibles. Ma question, cher lecteur, est

Quel est mon plan d'attaque?

Devrais-je

  • donner des conférences au club moi-même, en essayant d'équilibrer le travail du club avec les devoirs?
  • demander à la faculté CS d'enseigner sur des sujets relevant de leur expertise qui peuvent être moins que pertinents pour les membres?
  • essayer de trouver un développeur sympathique et expérimenté à l'intérieur ou à l'extérieur de l'école qui peut partager ma charge de travail?
  • montrer des conférences vidéo (de MIT OpenCourseWare , Google Tech Talks , etc.)?
  • organiser des ateliers de programmation pratique?
  • assigner des devoirs?
  • faire autre chose?
Evan Kroske
la source
3
Pourquoi frémissez-vous devant la POO qui vous est enseignée en C ++? Vous sentez-vous simplement mal à l'aise face aux langues de haut niveau? Si oui, comment espérez-vous apprendre la POO?
Cam
4
@Evan: Pour être franc, si vous pensez que le C ++ est un langage de bas niveau, alors un cours C ++ serait parfait pour vous. Tu apprendras beaucoup. Le C ++ peut sembler de bas niveau au début aux débutants car il offre des fonctionnalités de bas niveau, mais vous n'avez certainement pas à les utiliser. En fait, la plupart du temps, vous utiliserez la STL et toutes ses fonctionnalités de POO de haut niveau.
Cam
10
C ++ est de bas niveau par rapport à, disons, Java, Ruby, Javascript, C #, etc. Il est de haut niveau par rapport à de nombreux autres langages. Semble quelque chose d'un débat inutile.
Fishtoaster
2
@fishtoaster: Je ne dirais pas que c ++ est de bas niveau par rapport à java et c #. C'est autant de haut niveau que ces langues au moins (je ne connais pas grand-chose de l'autre). Il y a juste l'avantage supplémentaire qu'il peut également être de bas niveau afin que vous obteniez le meilleur des deux mondes.
n1ckp
1
@ n1ck: pointeurs bien sûr (je sais que C # en a mais leur utilisation est rare), gestion manuelle de la mémoire, pas de lambdas (je ne sais pas quel nom C # leur donne, python utilise des lambdas), pas de foreach natif, un standard beaucoup plus petit bibliothèque, twiddling de bits plus fréquent, recompilation nécessaire pour différentes plates-formes, etc. Vous n'avez pas besoin d'être assemblé pour être de niveau inférieur à ces deux-là.
Macha

Réponses:

20

Franchement, toute votre attitude me préoccupe. Vous n'avez même pas réuni le groupe et vous supposez déjà que vous ne serez que celui qui aura des connaissances à transmettre et celui qui devrait décider de ce que le groupe fera.

Le meilleur pari est de rassembler le groupe initial et, en tant que groupe, de réfléchir à ce qu'il veut faire. Ce que vous voulez personnellement faire n'a pas d'importance en termes de ce que le groupe veut faire. Décider quoi faire sans la contribution des autres membres du groupe avant la première réunion, vous vous retrouverez comme un idiot arrogant avec lequel je ne voudrais pas travailler volontairement. Ainsi, vous tueriez le groupe avant qu'il ne démarre.

HLGEM
la source
Tu as tout à fait raison; Je n'ai pas à formuler et à mettre en œuvre un plan directeur défini pour le club par moi-même. Néanmoins, j'ai besoin d'idées d'activités et de réunions de club pour discuter avec le reste du club.
Evan Kroske
5

Puisque tout le monde dans votre club vient volontairement, vous devez le rendre intéressant et motivant. Et les devoirs ne sont pas vraiment motivants.

Il est difficile d'enseigner à quelqu'un, mais pourquoi ne pas essayer d'enseigner de façon peu pratique avec un objectif à la fin? Essentiellement, au début, vous réunissez tout le monde et trouvez un projet de groupe et une langue. Le projet doit être intéressant et pouvoir montrer des progrès visibles mais pas trop dur. Une fois que vous avez cloué le langage, vous leur enseignez les bases (syntaxe, packages / espaces de noms, classes, typage statique / dynamique, etc.). Vous leur donnez ensuite des ressources (livres, didacticiels en ligne, documentation en ligne), un moyen facile de vous joindre et une partie spécifique du projet sur laquelle travailler. Chaque personne travaille ensuite sur le projet pendant son temps libre, consultant la documentation et vous au besoin.

Quel est l'avantage de ce processus?

  • Les gens ne s'ennuient pas en vous écoutant ou en écoutant quelqu'un d'autre à propos de quelque chose à chaque réunion
  • Les gens apprennent à s'auto-enseigner, une compétence très importante dans le monde réel
  • Vous ne vous engagez pas trop car vous n'êtes pas la seule ressource de connaissances
  • Vous n'avez pas besoin de connaître toute la langue avant de pouvoir l'enseigner car il vous suffit de les initier à la langue. Et quand ils ont besoin de vous poser une question, vous pouvez rapidement la rechercher. Vous devez cependant être un peu en avance sur tout le monde, car certaines choses nécessitent de savoir ce qui vous attend
  • Vous créez quelque chose qui a tendance à motiver les gens

La seule façon de voir si cela fonctionne est de l'essayer.

TheLQ
la source
Un projet de groupe serait une bonne idée si je pouvais maintenir l'effectif du club en dessous de dix étudiants. Après cela, les équipes commencent à devenir lourdes. Cependant, je ne peux pas obtenir de soutien universitaire si j'interdis aux étudiants de rejoindre le club, et je suis certain que plus de 10 étudiants seront intéressés à rejoindre le club. Notre club de piratage compte toujours plus de trente étudiants lors de ses réunions hebdomadaires.
Evan Kroske
1
Donc, plus d'un projet? Essayez de trouver des intérêts communs parmi tous les membres du groupe. Rencontrez d'abord les intérêts personnels et essayez de trouver des projets qui tournent autour de ces projets?
Chris
4

En regardant l' organigramme du cours pour votre majeure , vous ne comprenez vraiment pas à quoi vous attendre dans les différentes classes d'une majeure en informatique.

Les cours dont vous parlez sont des cours d'introduction qui ont initié les élèves à divers concepts de base du codage. Il ressemble à "Programming Concepts" une introduction à la profession avec des aperçus d'une semaine de tous les domaines de base de l'informatique, sans codage réel. De là, c'est NORMAL d'avoir un cours d'introduction en C, et un autre cours d'introduction en C ++ est NORMAL pour une majeure en informatique. Vous venez peut-être dans le programme avec une certaine expérience de codage, mais la plupart des gens ne le sont pas. Le programme doit enseignerdes concepts comme la récursivité, et comment écrire des classes, et la surcharge d'opérateur, et des modèles et tout ça (sans parler de l'enseignement des variables, des boucles for, des instructions if, etc ...), donc il y a deux classes conçues pour vous apprendre à coder dans un langage de programmation. Et ils ont généralement le genre de noms trompeurs que font les cours de votre université. Les cours qui enseignent le niveau d'organisation que vous souhaitez sont généralement appelés «Génie logiciel» ou «Modèles de conception». Le premier est généralement une exigence, et le second est généralement un choix (peut-être au niveau des études supérieures), mais les deux peuvent être au choix.

Il y a un débat académique et industriel sur le point de savoir si le programme d'informatique se concentre autant sur l'organisation de logiciels que sur la question, si la majeure doit être réorganisée et si l'informatique et le génie logiciel sont des majors différentes, mais pour l'instant, votre programme d'informatique est NORMAL .

(Et accrochez-vous - dans un autre semestre ou deux, vous allez arriver à des classes plus difficiles que vous enseignent des choses que vous ne l' avez pas déjà enseigné vous.)

Ken Bloom
la source
Je ne suis pas satisfait de "normal". Je veux quitter l'université avec une formation de classe mondiale en développement de logiciels, et je suis prêt à travailler (dur) pour y parvenir. J'avais l'intention de passer au MIT au lieu de l'USF, alors j'utilise le programme informatique et d'ingénierie du MIT comme mon éducation CS idéale.
Evan Kroske
@Evan @Ken heh. Alors mon collège, je ne le considérerais pas comme normal. Introduction aux applications informatiques (c.-à-d. Comment utilisez-vous Word) -> Logique et algorithmes informatiques (c.-à-d. Diagramme de flux et logique booléenne. Aucun algorithme en fait) -> Programmation en C ++ (syntaxe, POO, principes de base) -> Avancé Programmation en C ++ (algorithmes, récursivité, pointeurs) -> Programmation en Java (même chose que le C ++ de base) -> Programmation en Cobol (pas encore loin, mais Dieu je le
redoute
1

Et les compétitions de programmation? Même quelque chose comme Perl Golf (ou PHP Golf), où des personnes (ou des équipes) travaillent pour résoudre un problème en utilisant le moins de code possible? C'est un excellent moyen d'en savoir plus sur les langues et les compétitions rendent toujours les choses intéressantes.

Bien sûr, vous devriez offrir plus que de simples compétitions, mais elles sont assez faciles à mettre en place et je les ai toujours appréciées.

Colin O'Dell
la source
1

Vous avez raison, vous avez besoin d'une structure; vous voulez vous forcer vous-même et les autres à apprendre, et ne pas simplement vous contenter de bavarder sur les logiciels / râler sur la mauvaise sélection de cours. Mais je ne suis pas sûr de traiter cela comme une classe avec vous car son professeur est la voie à suivre; vous n'êtes pas encore un expert et vous êtes là pour apprendre quelque chose aussi.

Que diriez-vous d'organiser le club autour de projets logiciels? Pas certains programmes de devoirs de jouets, mais quelque chose que vous pensez pouvoir trouver utile. (Notez que "marginalement utile" se qualifie toujours comme "utile"; vous essayez d'apprendre par la pratique, pas trouvé de startup. :-)) Si le club a suffisamment de personnes pour plusieurs équipes, formez plusieurs équipes. L'équipe décide de la langue qu'elle souhaite utiliser, des spécifications, de la répartition du travail, etc., etc., et y travaille individuellement en son temps. Ensuite, lors de votre réunion hebdomadaire du club, vous discutez de la façon dont cela se passe en face, où se trouvent les obstacles, des trucs sympas que vous avez appris, etc.

J'aime aussi beaucoup l'idée de faire venir des conférenciers invités, qu'il s'agisse de professeurs, de professionnels ou de vidéos qui, selon vous ou quelqu'un d'autre, méritent d'être partagées. Vous pouvez donc organiser une réunion nocturne comme celle-ci:

  1. Conférence sur un sujet logiciel par quelqu'un qui le connaît bien.
  2. Séance de questions / réponses sur la conférence (si tout va bien avec le conférencier participant, mais juste entre vous pour les vidéos).
  3. Divisez-vous en équipes de projet, faites des projets.

Cela prendra une soirée et le remplira de bonté améliorant les connaissances. J'espère.

Quoi qu'il en soit, je vous souhaite bonne chance avec ce projet. Lorsque vous l'aurez décollé, j'espère que vous reviendrez ici et nous direz comment cela fonctionne.

BlairHippo
la source
1

Le projet de groupe est une excellente idée. Surtout si le projet est quelque chose qui peut aider l'université ou vos camarades de classe.

J'ai rejoint un groupe au collège qui travaillait sur des projets pour les étudiants.
Le projet le plus populaire était une visite virtuelle à 360 degrés du campus.
Nous avons acheté l'équipement nécessaire et commencé à prendre des photos sur le campus. Ensuite, nous avons construit un site Web pour héberger la visite, trouvé l'hébergement et l'a présenté sur le site Web de l'université pour les étudiants potentiels. Ce projet s'est étendu sur plus que des tâches de programmation et a également intéressé les non-programmeurs.

Essayez d'identifier un nouveau site Web ou une nouvelle application que non seulement vous utiliseriez, mais que tout le monde sur le campus aimerait utiliser. Je pense que c'est plus facile et plus amusant d'apprendre si vous avez un objectif en tête.

Todd Bumbarger
la source
J'aime vraiment cette idée; il y a beaucoup de façons que mon nouveau club pourrait ajouter ou améliorer les systèmes informatiques du collège. Par curiosité, où êtes-vous allé au collège?
Evan Kroske
Université Clarion en Pennsylvanie. Je suis même allé à une entrevue une fois où l'intervieweur a mentionné avoir utilisé la visite pour la recherche de l'université de son fils. C'était très cool.
Todd Bumbarger du
1

Si cela va être une activité parascolaire, ne faites pas les devoirs. C'est juste boiteux.

Vous pourriez probablement obtenir quelque chose de cool en démarrant simplement un groupe github et en affichant / envoyant des e-mails dans votre école (je suppose que les enfants utilisent aussi Facebook et Twitter de nos jours? Ce pourrait être une bonne idée de toucher ces points également). Lorsque vous obtenez un groupe de 5-6 personnes vraiment intéressées, décidez d'un projet et travaillez-y.

S'il n'y a aucun intérêt, il est assez ridiculement facile de rejoindre un projet open source si vous êtes raisonnablement qualifié. C'est aussi simple que de créer quelque chose qui vous intéresse chez github et de commencer à parler aux développeurs.

L'avantage que vous avez que la génération précédente n'a pas, c'est qu'il n'est pas difficile du tout de se connecter à des programmeurs à votre niveau et dans votre langue, tout en étant très géographiquement disparate. Et je ne veux pas simplement envoyer un e-mail. Skype / iChat / Ventrilo facilitent les conférences vocales, des outils comme git / mercurial (et les pages de projet associées en ligne) facilitent le codage en groupe, même si vous êtes de l'autre côté de l'Atlantique. Il n'y a vraiment aucune raison de ne pas coder socialement ces jours-ci, si c'est ce que vous voulez faire.

Enfin, ne prenez pas l'habitude de juger les gens en fonction des langues qu'ils connaissent / veulent connaître. C'est un piège facile à tomber lorsque vous êtes le seul Smalltalker dans un troupeau de personnes qui pensent que le C ++ représente la limite de la programmation, mais cela ne vous amènera pas beaucoup d'amis et cela vous donnera un parti pris contre certains outils. J'ai rencontré des hackers qui ont des milles d'avance en compétences et en expérience, qui ont utilisé LISP, Perl et C sur le même projet . Les personnes au sommet du tas de développeurs professionnels ne se soucient pas beaucoup du niveau de leurs outils tant qu'ils font le travail.

Inaimathi
la source
1

Cela ressemble à une opportunité de réseautage, je suis sûr qu'il y a un certain nombre d'étudiants intéressés par une programmation avec un niveau d'expérience / de formation similaire ... vous ne les trouvez tout simplement pas ...

Avez-vous assisté à l'un des camps de code (formation gratuite pour les développeurs) dans la région de Tampa Bay, ou rejoint l'un des groupes d'utilisateurs de programmation locale?

Ces deux ressources vous offriront des opportunités de réseautage. Et au lieu de vous sentir obligé de former vos camarades, vous pourrez inviter vos amis avec vous et ensuite discuter de ce qui a été couvert.

Vous aurez également accès à des personnes qui envisagent une carrière et pourrez vous faire une idée des types de situations que vous risquez de rencontrer dans «le monde réel».

Une fois que vous avez exploré ces ressources locales, vous pouvez toujours constater que vous avez la possibilité de partager vos connaissances en faisant vos propres présentations, ce qui est formidable. Partager ce que vous avez appris avec un groupe d'utilisateurs ou en tant que conférencier d'une présentation de camp de code est un bon moyen d'obtenir des commentaires sur ce que vous avez appris et vous permet également d'en apprendre davantage.

J'ai grandi dans la région de Tampa Bay et assisté à de nombreux événements sponsorisés par Microsoft, votre groupe d'utilisateurs local devrait également avoir des informations sur la façon de s'impliquer dans ces événements.

Eh bien, ce fut une réponse de longue haleine ...

Le prochain Code Camp à Tampa aura lieu le 13 novembre 2010 selon le site Web de tampacodecamp.

Voici un lien vers votre groupe d'utilisateurs INETA / programmation local:

http://www.tampadev.org/

(Je suis nouveau dans ce groupe et je n'ai pu inclure qu'un seul lien.)

Jeff
la source
1

Que diriez-vous de trouver un projet open-source (ou plus d'un) auquel votre groupe souhaite contribuer?

Je pense que le plus grand défi auquel vous serez probablement confronté est que même si l'écriture de code est amusante, c'est tout l'administrateur environnant, etc. Si vous pouvez trouver un projet open source existant, vous devriez au moins avoir une partie du cadre de support en place.

L'open source vous donnera de bonnes habitudes, et bien que vous soyez un peu mouillé derrière les oreilles par rapport à certains des contributeurs, vous aurez un avantage majeur sur les autres - vous serez tous au même endroit et en mesure de tenir des conversations avec les membres de votre équipe, ce qui est normalement l'une des plus grandes difficultés avec le travail communautaire open source ...

DanW
la source