14

I'm a student at the University of South Florida who's frustrated with the educational environment in the Computer Science program. Right now, I'm taking "Program Design." I should be learning how to organize my source code into functions and modules in order to make my programs readable and maintainable; instead, I'm learning about arrays and recursion in C. Next semester, I have to take "Object-Oriented Design," which is taught through C++ (shudder.)

Two years ago, I fell in love with programming, and I've been learning as much as I could since then. The prospect of taking another C++ class bores me almost to tears. For that reason, I thought I would start a programming club in order to meet similarly ambitious students, learn new languages, discuss software development topics, and work with other students developers.

However, I'm beginning to realize that there may not be any other students who share my software development experience. It's not because of a lack of motivation but a lack of opportunity: I know of only one other programming class ("Programming Languages") and no classes on real-world software development. Everybody else only has experience writing trivial scripts in C and C++.

I've realized that if I want to work with other student software developers, I'm going to have to train them myself. Now, I'm planning to make the club a software development bootcamp, teaching members how to develop software with modern tools and languages. Obviously, starting an unofficial software development course is a monumental task with many possible approaches. My question to you, dear reader, is

What's my plan of attack?

Should I

  • lecture the club myself, trying to balance club work with homework?
  • ask the CS faculty to teach on topics within their expertise which may be less than relevant to members?
  • try to find a sympathetic, experienced developer inside or outside the school who can share my workload?
  • show video lectures (from MIT OpenCourseWare, Google Tech Talks, etc)?
  • hold hands-on programming workshops?
  • assign homework?
  • do something else?
24
  • 3
    Why do you shudder at OOP being taught through C++? Do you simply feel uncomfortable dealing with high-level languages? If so, how do you expect to learn OOP?
    – Cam
    Oct 17, 2010 at 18:57
  • 4
    @Evan : To be frank, if you think C++ is a low-level language, then a C++ course would be perfect for you. You'll learn a lot. C++ may seem low-level at first to beginners because it offers low-level features, but you definitely don't have to use them. In fact most of the time, you'll be using the STL and all of its high-level OOP features.
    – Cam
    Oct 18, 2010 at 2:09
  • 10
    C++ is low-level compared to, say, Java, Ruby, Javascript, C#, etc. It's high-level compared to many other langauges. Seems something of a pointless debate. Oct 18, 2010 at 4:55
  • 2
    @fishtoaster: I wouldn't say c++ is low-level compared to java and c#. It is as much high-level as those language at least (I don't know much about the other). There is just the added advantage that it can also be low-level so you get the best of both world.
    – n1ckp
    Oct 18, 2010 at 5:46
  • 1
    @n1ck: Pointers as a matter of course (I know C# has them but their use is rare), manual memory management, no lambdas (not sure what name C# gives them, python uses lambdas), no native foreach, a much smaller standard library, more frequent bit twiddling, recompilation needed for different platforms, etc. You don't need to be assembly to be lower level than those two.
    – Macha
    Oct 21, 2010 at 16:37

9 Answers 9

20

Frankly your whole attitude concerns me. You haven't even gotten the group together and already you assume you will be only one who has any knowledge to impart and the one who should decide what the group will do.

The best bet is to get the intial group together and, as a group, brainstorm what they want to do. What you personally want to do is irrelevant in terms of what the group wants to do. Deciding what to do without the input of the other group members before the first meeting, you will come across as an arrogant idiot that I wouldn't want to work with voluntarily. Thus you would kill the group before it got started.

1
  • You are absolutely right; I don't have to formulate and implement a set-in-stone master plan for the club by myself. Nevertheless, I need ideas for club activities and meetings to discuss with the rest of the club. Oct 23, 2010 at 4:32
5
+50

Since everyone in your club is coming voluntarily, you need to make it interesting and motivating. And homework isn't exactly motivating.

Teaching anybody is hard, but why not try teaching in a hands off kind of way with a goal at the end? Essentially at first you get everbody together and come up with a group project and a language. The project needs to be interesting and be able to show visible progress but not too hard. Once you've got the language nailed down, you teach them the basics (syntax, packages/namespaces, classes, static/dynamic typing, etc). You then give them resources (books, online tutorials, online documentation), an easy way to get a hold of you, and a specific part of the project to work on. Each person then works on the project in their spare time, consulting the documentation and you as needed.

What's the advantage of this process?

  • People don't get bored listening to you or somebody else drone on about something every single meeting
  • People learn how to self teach, a very important real world skill
  • You aren't overcommitting yourself since you aren't the sole resource of knowledge
  • You don't have to know the whole language before you can teach it since you only need to introduce them to the language. And when they need to ask you about something, you can quickly research it. You do however need to be a little ahead of everybody else, since some things require knowing what's 5 steps ahead
  • You're creating something, which tends to motivate people

The only way to see if it works is to try it out.

2
  • A group project would be a good idea, if I could keep the club membership below ten students. Past that, teams start to become unwieldy. However, I can't get university support if I bar students from joining the club, and I'm certain that more than 10 students will be interested in joining the club. Our hacking club always has more than thirty students at its weekly meetings. Oct 18, 2010 at 0:17
  • 1
    So more than one project? Try to find common interests among all group members. First meeting survey personal interests and then try to come up with projects revolving around those projects?
    – Chris
    Oct 21, 2010 at 16:17
4

Looking at the course flowchart for your major, you really are misunderstanding what to expect in different classes of a Computer Science major.

The classes that you're talking about are introductory classes that introduced students to various basic concepts in coding. It looks like "Programming Concepts" an intro to the profession with 1-week overviews of all of the basic areas of computer science, with no actual coding. From there, it's NORMAL to have an introductory course in C, and another introductory course in C++ is NORMAL for a Computer Science major. You may be coming into the program with some coding experience, but most people are not. The program has to teach concepts like recursion, and how to write classes, and operator overloading, and templates and all that stuff (not to mention teaching about variables, for-loops, if-statements, etc...), so there are two classes basically designed to teach you how to code in some programming language. And they usually have the kinds of misleading names that your university's classes do. Classes that teach the level of organization you want are usually named "Software Engineering" or "Design Patterns". The former is typically a requirement, and the latter is typically an elective (maybe at the graduate level), but both may be electives.

There's an academic and industry debate about whether the Computer Science curriculum focuses on software organization as much as it should, whether the major should be reorganized, and whether Computer Science and Software Engineering are different majors, but for now, your Computer Science program is NORMAL.

(And hang in there -- in another semester or two, you will get to more challenging classes that teach you things you haven't already taught yourself.)

2
  • I'm not satisfied with "normal." I want to leave college with a world-class education in software development, and I'm willing to work (hard) to achieve that. I had intended to transfer to MIT instead of USF, so I use MIT's Computer Science and Engineering program as my ideal CS education. Oct 23, 2010 at 4:49
  • @Evan @Ken heh. Then my college I would consider not normal. Intro To Computer Applications(ie, how do you use Word) -> Computer Logic and Algorithms(ie, flow charting and boolean logic. No algorithms to it actually) -> Programming In C++(syntax, OOP, the basics) -> Advanced Programming In C++(algorithms, recursion, pointers) -> Programming In Java(same thing as basic C++) -> Programming in Cobol(Haven't got that far yet, but god I'm dreading it)
    – Earlz
    Apr 13, 2011 at 2:40
1

What about programming competitions? Even something like Perl Golf (or PHP Golf), where you have people (or teams) work to solve a problem using the least amount of code possible? Its a great way to learn more about languages and competitions always make things interesting.

Of course you should offer more than just competitions, but they are pretty easy to set up and I've always enjoyed them.

1

You're right that you need some structure; you want to force yourself and the others to learn, and not just sit around gabbing about software/bitching about the lousy course selection. But I'm not sure treating this as a class with you as its teacher is the way to go; you're not an expert yet, and you're in this to learn something, too.

How about organizing the club around software projects? Not some toy homework programs, but something you think you might actually find useful. (Note that "marginally useful" still qualifies as "useful"; you're trying to learn-by-doing, not found a startup. :-) ) If the club has enough people for multiple teams, form multiple teams. The team decides what language it wants to use, what the specs are, how labor is to be divided, etc., etc., and works on it individually in their own time. Then at your weekly club meeting, you discuss how it's going face to face, where the roadblocks are, neat stuff you've learned, etc.

I also really like the idea of bringing in guest lecturers, be they faculty, professionals, or videos that you or somebody else thinks are worth sharing. So, you could organize a nightly meeting like this:

  1. Guest lecture on some software topic from somebody who knows it well.
  2. Q&A/gab session on the lecture (hopefully with the lecturer participating, but just amongst yourselves for videos).
  3. Divide into project teams, do project stuff.

That'll take up an evening and stuff it full of knowledge-enhancing goodness. Hopefully.

Regardless, I wish you luck with this project. When you get it off the ground, I hope you'll come back here and tell us how it's working out.

1

The group project is a great idea. Especially if the project is something that can help out the university, or your fellow classmates.

I joined a group while in college that was working on projects for students.
The most popular project was a 360 degree virtual tour of the campus.
We purchased the equipment needed and started taking photos around campus. Then we built a website to house the tour, figured out the hosting, and got it featured on the university's web site for prospective students. This project spanned more than just programming tasks, and got non-programmers interested as well.

Try identifying a new website or application that not only you would use, but everyone on campus would like to use. I think it's easier and more fun to learn if you have a goal in mind.

2
  • I really like this idea; there are plenty of ways that my new club could add to or improve the college's IT systems. Out of curiosity, where did you go to college? Oct 23, 2010 at 4:37
  • Clarion University in PA. I even went to an interview once where the interviewer mentioned having used the tour for her son's college search. It was very cool. Oct 25, 2010 at 15:37
1

If this is going to be an extra-curricular activity, don't do the homework thing. That's just lame.

You could probably get something cool going by just starting up a github group and postering/emailing in your school (I guess kids these days use Facebook and Twitter too? Might be a good idea to hit those points as well). When you get a group of 5-6 people who are really interested together, decide on a project and just work at it.

If there's no interest, it's pretty ridiculously easy to join an open source project if you're reasonably skilled. Simple as forking something you're interested in at github, and starting to talk to the developers.

The advantage you have that the previous generation didn't is that it's not difficult at all to connect to programmers at your level, and in your language, while being very geographically disparate. And I don't mean just send an email. Skype/iChat/Ventrilo make voice conferences easy, tools like git/mercurial (and the associated project pages online) make it easy to code as a group even if you're on opposite sides of the atlantic. There's really no reason not to code socially these days, if that's what you want to do.

Finally, don't make a habit of judging people by the languages they know/want to know. It's an easy trap to fall into when you're the only Smalltalker in a herd of people who think C++ represents the limit of programming, but it won't get you many friends, and it'll give you a bias against certain tools. I've met hackers who are miles ahead of me in skill and experience, who have used LISP, Perl and C on the same project. The people at the top of the professional developer heap tend to not care much what level their tools are as long as they do the job.

1

This sounds like a networking opportunity, I'm sure there are a number of students interested in programming with a similar level of experience/training... you're just not finding them...

Have you attended one of the Code Camps (free developer related training) in the Tampa Bay area, or joined one of the local programming user groups?

Both of these resources will provide you with networking opportunities. And instead of feeling like you have to train your fellow students, you'll be able to invite your friends along with you and then discuss what was covered.

You'll also gain access to people who are programming as a career and can get an idea of what kinds of situations you're likely to come up with in "the real world".

Once you've explored these local resources you may still find that you opportunities to share your knowledge by doing your own presentations, which is great. Sharing what you've learned with a user group or as a speaker of a code camp presentation is a good way to get feedback on what you've learned and opens you up to learning more as well.

I grew up in the Tampa Bay area and attended a lot of free Microsoft sponsored events, your local user group should have information on how to get involved in those events as well.

Well, this was a long winded reply...

The next Code Camp in Tampa is on Nov. 13th 2010 according to the tampacodecamp website.

Here's a link to your local INETA/programming user group:

http://www.tampadev.org/

(I'm new to this group and was only able to include one link.)

1

How about finding an open-source project (or more than one) that your group is interested in contributing to?

I think the biggest challenge you're likely to face is that while writing code is fun, it's all the surrounding admin etc. that can rapidly turn it into a painful experience. If you can find an existing open-source project you should at least have some of the support framework in place.

Open source will get you into some good habits, and although you'll be a bit wet behind the ears compared to some of the contributors you will have one major advantage over other people- you'll all be in the same location and able to hold conversations with your team members which is normally one of the biggest pains with open source community work...

Not the answer you're looking for? Browse other questions tagged or ask your own question.