How to Learn Programming in Small Groups

This article first appeared on DNA here.

In my previous column, I suggested several ways that one could start learning programming, at any age, on our own. The important thing to remember while doing all this learning is to keep things fun and what could be more fun than doing it with some like-minded individuals?

Although the stereotypical computer programmer is often depicted as a loner working from a dark basement or kitchen table, programming is actually a social activity. In fact, there are certain aspects of a programmer’s skillset that can only be cultivated if we do programming as a group activity.
The group does not need to be big – a pair is often good enough.

We can think of a program’s source code as a form of written communication. Besides being a systematic method to instruct computers on what to do, it also serves as an exact and unambiguous form of communication between those who understand the language.

Just like how we are often told to read and write more as a way to improve our language skills, by our English teacher, a good way to improve our programming skills is to write some code and have someone else read and critique it.

Another excellent way of improving our coding skills is to read code written by other programmers. It takes a good programmer to spot the bugs in someone else’s code. We can learn as much from the mistake that others make, as from our own.

Therefore, working in a small group is a good way of sharpening communication skills and ensuring that others are able to understand what we are trying to accomplish. If someone else finds it difficult to read and understand our code, then we are likely doing it wrong.

A popular cartooni illustrates this best: “the only valid measurement of code quality is WTFs a minute.”

Programming is an intellectual activity involving multiple layers of abstraction and many moving parts. Sometimes, things get complicated quickly. We can often discover better ways of doing things by simply discussing our code with others.

In addition to sharpening our communication skills, we will learn how to see things from a different viewpoint and learn to think at multiple levels of abstraction. It is often useful to discuss things with non-programmers too as they can offer a fresh perspective.

Useful real-world software is often created by programmers working together, sometimes across different geographical regions and time-zones. As a result, a lot of effort has been spent on developing tools that enable teams of programmers from around the world to work together.

While there are far too manyii such tools to list, they all have the same objective – to help manage source code and teams. So, the key is to just pick one and learn good house-keeping rules. Just like programming languages, good programmers know how to use several.

I would personally recommend learningiii to use Gitiv, simply because it is used to manage the source code of Linux, which has several million lines of code written by thousands of programmers from across the world. It is both capable of managing complex projects and quite useful for handling small individual projects.
There are many different methodsv to use Git but which one we ultimately choose will depend on individual preference and group dynamics.

That’s right, programming is a great way of learning how to work with other people.

Writing software gives us a chance to work with diverse people from around the world, and not just those from our own kampung. This is particularly true for major open-source projects. We will get to interact with others who share our interest, from all across the world.

A good programmer needs to know more than just how to write code. A good programmer must be capable of communicating clearly and concisely, able to see things from different perspectives, and able to work effectively with others including those who may not necessarily be programmers. These skills cannot be learned by working alone.

Genius of Drug Cartels

Very interesting TED talk.

Allah Judges

I have to admit that I am neither an Islamic scholar nor a Muslim.

However, my limited knowledge of Islam tells me that Islam is a monotheistic religion that believes in one and only one God. This is in contrast with a religion like Hinduism that is polytheistic in nature and believes in multiple gods, or a religion like Buddhism that is atheistic in nature and does not have a god at all.

So, the weird thing about the Court of Appeal judgement is that it seems to suggest that there are at least two gods, one that belong to the Muslims identified as ‘Allah’ and another that belongs to the Christians, that is identified by something other than ‘Allah’ in the Malay language.

Now, if the judges were atheists or polytheists, I wouldn’t think much about the decision at all. But I fear that the aqidah or faith of the judges is at risk of deviation simply because they seem to have pronounced that there are at least two different gods.

Personally, I think that the judgement itself is flawed in many other ways but this probably explains why. If they are lost within their own faith, it’s no wonder that they do not understand others.

That’s it.

If you want opinions by other people smarter than me on why this judgement is wrong, just search for the articles on-line.

How to Learn Programming – Solo

This article first appeared on DNA.

In my previous article, although I asserted that programming cannot be taught, I did clearly state that it can definitely be learned. If you look at major role-models in the tech industry, you will find that many were self-taught programmers at some point in their lives.

Unlike a lot of other skills, programming is something that can definitely be learned on your own. I have friends who started while studying for their biology degree; while doing their bio-chemistry doctorate; or even while working as a full-time lawyer. So, it is never too late to start.

Nor would you ever be too young to start. I knew someone who started programming at the age of four. Such a person is obviously rare, but as a regular judge for national LEGO robotics competitions, I see primary school kids doing programming all the time.

It is my personal opinion that within my lifetime, I will see programming turn into a basic skill for everyone. As intelligent machines invade, we cannot help but to have at least some rudimentary programming skills to effectively get through our lives in the future.

So, where do we start?

That’s a question that I often hear from undergraduates. I was also recently asked by a young father on how he might be able to encourage his kids to do programming. Unlike in the past, we’re now living in an age where learning how to program is accessible at any age.

Some people may research the pros and cons of different languages to determine which to learn first. The truth of the matter is that the language does not matter in the larger scheme. Decent programmers know several languages. Just pick any language to start with and grow from there.

Learning a language is simple. There are far too many online courses and materials for every single language imaginable. The Learn X the Hard Way online materials for learning a language is a good way to jump right in for Python, Ruby and C.

For younger children, something a little less abstract may be preferable. Starting with Logo as they do in Vietnam may be a good choice, but something like Scratch, Stencyl, or Alice might be more suitable. For older children, Code Academy and Khan Academy provide a guided platform to learn programming.

As with everything else, the key to learning programming is to keep things fun.

Besides learning a language, it is also quite important to build up a solid foundation in computing fundamentals. There are plenty of online courses that are available as well. Some of the best universities in the world give away their courseware for free.

For example, there is the MIT Open Courseware series that covers a wide range of topics, including computing fundamentals. For the younger children, there is also CS Unplugged that tries to present abstract computing concepts in a simple to understand way.

In addition to learning theory to understand the fundamentals, and learning a language to express the ideas as something real; we would also need to have some real-life scenarios to apply all that learning. This is where many people get a little lost, as the areas of application are numerous and various.

An area of personal interest is as good a starting point as any. Some people like playing games. For these people, a good gateway into programming might be to write some simple games. From this starting point, we can grow into related areas.

It is important to start small while growing our skills and knowledge, one step at a time. There is no sense in being too ambitious and trying to create an Angry Birds clone on your first attempt. Writing a simple tic-tac-toe game would already involve a lot of hard work.

And hard work it will be, if we wish to master The Art of Computer Programming (a recommended read for the advance programmer). There will be a lot of pain when confounded with difficult problems, but a sense of elation awaits those who never surrender.

I would also recommend getting a low-cost Arduino kit or a LEGO Mindstorms set. Both these things allow us to quickly build and program devices that interact with the real-world, which brings programming to life. There are a lot of cool projects on the Internet to copy from.

On that note, copying is an excellent way to learn how to program. Trying to build something from nothing can be a bit daunting for the beginner programmer. There are so many open-source projects to be found online. Learning from real-world examples will really help us in applying theoretical skills.

Regardless of the path that we choose to embark on, learning how to program is an invaluable tool in this modern age. Learning how to program is a fruitful adventure, though it is a dangerous one that risks sucking us in and never letting us go.

In my next column, I will look at how programming in small groups actually helps us develop into better programmers. – See more at: http://www.digitalnewsasia.com/insights/how-to-learn-programming-solo#sthash.pPgJgVkF.dpuf

Voting Problems Explained

The Voice of China Semis #4

This is a tough group.





The Voice of China Semis #3

The winner was obvious from the start.