الثلاثاء، 19 أكتوبر 2010

Proposal for a new-style FCIS ACM chapter

As some of you know, I have long-term plans of creating a software company, إن شاء الله.

The question is: Where to get great programmers to work there?

What's a great programmer anyway? What types of programmers am I looking for? Think of someone who has some (not necessarily all) of those capabilities:

- Knows enough to create a basic computer vision application.
- Can write a compiler for a small but useful language in a couple of days.
- Can learn a new platform (say a mobile platform) in a short time.
- Invents his own tools to help with projects (e.g code generators, data editors such as level editors in games, verifiers...).
- Understands design trade-offs and the needs for real-world applications.
- Can mix concepts from different disciplines (e.g use techniques from AI when writing a database application).
- ...etc

The reader might now ask: Why do I want such a level of programmers? Does the market need anything like that at all? Well, my plan is to change the market a little. I have big ideas for creative hardware and software applications, many of which I hope are monetizable. Some of them are for internal markets (Egyptian, Arab...) and some for the international market. I should talk more later those projects. Some of their names may be familiar to readers who know me:
- Arwa
- Kalimat
- Awraq
- Kitty
- SketchCode
- Ideaz
- SenseWiki
- ...etc

Isn't this the dream of every computer-science student or graduate? A company where the valuable science they've learned is applied, improved and monetized? A place where you get paid for doing the things you love, and yet produce useful tools for society?

In order to have a chance at doing this, إن شاء الله , many things are needed: I need funding, good strategic planning, and more. But one of the things I'd need most is the existence of a growing number of smart, talented, capable programmers . The existence of those programmers is a major deciding factor for all of this.

How to establish a pool of talent then? Long-term I hope social changes help with this (like teaching children programming). Short-term we need to look at existing students and graduates and help them grow as programmers.

(Are you growing as a programmer?)

Now my opinion on the current FCIS ACM chapter activities. Before I go on I have to say two important things:

1- The ACMers have worked hard to organize competitions and educate students. Many of them have spent long hours of their own time helping others and expecting nothing in return. I'm not trying to discredit their hard work. I think it's clear that they deserve appreciation.

2- I'm not opposing their strategies for the sake of mere opposition. I've talked about these issues with several members of the organization. I think we all have the same goals for the faculty and society in general.

Now..criticism time :-) :-) :-)

1- The current ACM activities make students focus too much on algorithmic problem-solving and almost nothing else. Eventually there's a limit to the usefulness of repeatedly practicing the same topics over and over. After a while you learn nothing new.

2- Then there's no creation involved... The main aim of the competition is to give correct output for a given input. Real-world programming isn't like that. When creating a real product almost nothing is fixed in advance and you need to think hard about features, trade-offs, system constraints and user-interaction.

3- The training focuses almost exclusively on C++ console applications. This is a very small part of the development world. Again, real development has a very diverse ecosystem: Mobile applications, web apps, embedded systems, games, developer tools, scientific applications...etc. All these need a multitude of tools, techniques and languages.

4- The training talks a lot about "Computer science", "Math" and the like yet it only focuses on one aspect of CS and Math ignoring all other important aspects. This could give students the false idea that CS is only about algorithms.

5- ...Even then, the (few small) observations I've noticed make me think algorithms are not really taught in-depth. "Some lessons about graphs and dynamic programming" != "algorithms".

True, the ACMers make the occasional educational sessions or other activities but for me the real goal is achieved when people grow enough as programmers to reach and exceed the level I described at the beginning of this article. Success is when programmers are able to help with the kind of applications I described, for the kind of companies I described. (Yes, I said companies, I hope my own company helps set a wave of change in the local market).

I've talked with some ACM members and leaders and described a proposal for improving the organization. Here's some more details:

The new, new ACM

My proposal for the new ACM is all about changing the focus from one aspect (problem solving competitions) to other suggested aspects:

Creation
Students should train on creating real, working applications and not just idealized programming examples.

Diversity
Students should learn a variety of tools and languages, be capable of creating more than one type of application, and get good introductions to the various fields of computer science.

Depth
Students should have the opportunity of, and be helped with, getting deeper into the subjects that fit with their interests, both scientific and technical.


Activities

Here's a sample of suggested activities that could be made in the new ACM:

Events:-

Hackathons: Where students gather in labs (like in competitions) but instead have 2-3 hours to create a small, useful application. Like a game or a web tool.

Special topic weeks like "software engineering week", "game programming week", "programming language week", where several speakers interested in the same topic can all give presentations about the different sides of that topic.

Minimalist presentation days where several speakers can give sessions, but each session is very focused (say 15 or 20 minutes) so the speakers will have to really concentrate on what's important. And at the same time allow the audience to view many presentations without feeling tired.

Research days where TAs and other researchers can speak about their research and discuss their scientific interests with the audience.

Projects:-

Ongoing open-source projects where fresh members regularly join and learn from experienced members. I think the 2010 summer of code was a real important step forwards in this direction.

Dissect-a-project where a presenter takes some project (open source or developed by the presenter) and explains how it was designed and implemented, with a focus on how design decisions were made, how implementation problem were solved, techniques used, and the like.

Knowledge repositories: An online site where summaries, tutorials and example programs are regularly added and modified. Perhaps also a place to collect technical knowledge from the forum, blogs...etc. Perhaps in the long-term books could be authored that way.

Activities:-

Book rings where (say) five readers take five books, and each reader reads his book then passes it to the next 'element' in the ring.

Sessions of knowledge (مجالس علم) would be like mini-sessions where learners can exchange knowledge, discuss a book, plan for projects...etc

I'm sure that with some brainstorming more and more ideas could be found.

Moving forward

While this discussion is already going with existing ACM members/leaders, I decided to put this article on my blog for several reasons:
  • I wanted to raise awareness of the need for creation, diversity, and depth.
  • I wanted older ACMers (many of whom are outside Egypt) to know about these suggestions and join the discussion if they want.
  • I wanted a stable reference where my ideas are organized, written-down and publicly available.
If something stops improving, it stagnates. I think it's time to take FCIS programming activities (and perhaps the local software market) to the next stage.

هناك 7 تعليقات:

MS يقول...

هذه الخطة من شأنها احداث طفرة للمستوي التعليمى للطلبة. و لكن لماذا الACM committee بالذات؟ لماذا لا يقوم نشاط طلابى اخر بهذه الخطة؟ اعتقد ان الACM Committee هدفه تأهيل الطلبة للوصول الى ال finalist فى مسابقة الACM و شكرا يا دكتور على الاهتمام

Mohamed Samy يقول...

@MS:

هل أنت متأكد ان دور الACM committee هو تأهيل الطلبة للمسابقات؟

في الواقع أرى أن أهداف الACM student chapter الرسمية قريبة جدا مما وصفت في المقال. موضوع المسابقات ما هو إلا وسيلة تشجيعية لجذب الطلبة للcomputer science لا اكثر ولا اقل.

انظر مثلا إلى نشاطات الACM Student chapters في الجامعات الأخرى عالميا:

http://acm.cs.uchicago.edu/Events
http://www.acm.uiuc.edu/events
http://www.city.academic.gr/acm/events.html

Rehab Reda يقول...

الافكار جميلة جدا جدا جدا جدا ما شاء الله (Y)(Y)(Y)و حيعملو فرق كبيييير جدا ان شاء الله

غير معرف يقول...

اعتقد ان كل واحد كان فى الACM chapter فى يوم من الايام كان نفسه حاجه زى كده تحصل ..
اعتقد خلال السنين اللى فاتت الACM chapter نضج كفايه علشان يقوم بدور زى ده
شكرا على الفكره الرائعه

Esraa Ibrahim يقول...

جزاك الله كل خير يا دكتور فكار أكثر من رائعه ياريت فعلا ده يتم تنفيذه ويتم تطوير ال ACM

غير معرف يقول...

شكرا جدا علي هذه الأفكار الثورية
إن شاء الله سوف نقوم بمناقشتها و عمل "عصف ذهني" لنستطيع في النهاية إستخراج أفضل الأفكار

جزاك الله خيرا

Unknown يقول...

This will destroy the ACM chapter, forever.