This is the gist of the keynote message I gave when I was invited to be the chief guest of the .hack(), the hackathon held at Mar Athanasius College of Engineering. Some people said they liked the message, so thought of penning it down in a little more elaborate form as the original talk was shorter. Most of the listeners had turned zombies after the 36-hour hackathon — so had kept it short and sweet.
My feeling is that it gives you a shortened capsule form of the essence of what you should get from your time in an engineering college.
To understand this, let us reflect on the question below.
What is it that you should try to get in the 4 years of your engineering life to become a great software engineer and how can hackathons help?
I had my own perspective in college, and that perspective has changed over my 25 years of professional life. You should definitely have fun, enjoy!! - It probably is the best fun year of your life. But what can add value to the four years of your engineering life to become a great engineer and how do hackathons help?
Most parents, students, and teachers have the understanding that we go to an engineering college primary to study. It is only one of the important things — to pick up the basics of the subjects you need to study. But there are other things more important than that.
1) Understand how to learn
First and foremost you should develop a learning process that works for you — one that will help you to understand and master a subject in a short period of time. Unfortunately, this is not given much importance - students are spoon-fed in most engineering colleges. Students go to these colleges, they are taught, they are given notes that they can mug up and pass exams. And the problem with that is it does not help the students to develop a learning process that works for them. It also does not build depth on the subject as you do not think deeply or reflect on the topics. And so most students forget most of what they learned right after exams.
Ideally, teachers should inspire the students on the subject, so students get motivated. Teachers give them the essence of the subject, and they learn by themselves. As Bertrand Russell said "Education is not to be viewed as something like filling a vessel with water but, rather, assisting a flower to grow in its own way"
There could be issues in the beginning with this approach as students are used to spoon-feeding, but it should eventually change for the better. This will help the students come up with a learning process that works for each one of them.
What is the learning process and why should you develop one that fits for you?
Each of us has an individual way of thinking and an individual style of learning. There are different ways by which you can absorb information — Visual (pictures, diagrams, charts, videos), Auditory (hearing), Reading/ Writing, Kinesthetic (by physical experience), and many others. A different combination of these applies to each one of us. Again each of us have a different mechanism of how this absorbed information is assimilated.
So if you are thinking about the process of learning to get food into your body, there would be different ways to absorb food and different ways to store it in your body. And that is why everyone needs to come up with a learning process that works for each one of us. And this can keep changing over time depending on how your brain develops through experiences and on how much you practice these different styles.
The below approach is an example of a learning process that I have personally developed —
Step 1 - Before you start, think and write down your understanding of the subject.
Step 2 - Understand the concept, and understand the landscape - topics, subtopics, etc. Write down the topics and sub-topics that you would like to learn.
Step 3 - What are the channels to learn?
I look for the best books, videos, and articles.
Learn from these channels - I read the book first if I want to seriously master the subject. Personally, I tend to reflect more as well as spend more time on the subject if I read a book, so the knowledge stays with me. If I watch a video first, I usually forget most of what I learned after some time. Moreover, I always lose interest in reading the book if I watch a video or a course. If I want to just pick up some knowledge on a subject quickly as against mastering it, I might choose an article or a video rather than a book.
Step 3 - After each sub-topic, recap and reflect for a short time on what you learned. Write notes.
Step 4 - In the end, read the notes and practice teaching the essence of the whole subject to a 10-year-old in your mind.
Step 5 - Have an eye on areas that you don’t know on the subject. Know of changes and advancements on the subject. That way, you will know that there are areas that you can pick up when necessary.
Why is developing a learning process so important?
You learn the concepts and ideas in computing from the college. This will later help you to learn a specific technology to put it into practice when you start working. You usually will not get to work on the languages, frameworks, or libraries you learn at college since the industry is moving at such a fast pace. And even if you get to work on one that you learned already (very unlikely), you would have to know it much deeper. And no one will be there to teach you.
There are hundreds of things that you need to take care of while you build a useful piece of software, so the more you learn, the better you are.
Changes are happening in technology, especially in computing at an increasing speed. A software engineer could stick to a technology for many years two or three decades back but not anymore. Technology stacks, frameworks, and libraries are developed and become obsolete at shorter intervals. There is more disruption around the corner with the developments in Artificial Intelligence, and maybe later due to quantum computing advancements in the future. We are staring at a future where we have to learn and unlearn in faster cycles.
So learning — the speed at which you learn, how fast you learn, and how fast you can put it into practice is critical to how successful you are. This is what is going to set you apart.
And hackathons are a great medium to help you with this. You have a short amount of time. You have to learn skills and technologies you do not know and you need to learn these by yourself — in the shortest possible time, hopefully while preparing for the hackathon.
2) Learn how to think, how to be creative, how to analyse problems, and find solutions
As engineers, our job is to either understand a problem, break it down, find the root cause, identify solutions, make plans & achieve it, or to understand a goal, identify solutions, make plans & achieve it.
Most of this comes through experience, but some of this can be partly taught. There are exercises and methods to help you think in different ways to inculcate creativity and to teach you how to think. Case studies are good for teaching you how to analyse problems and find solutions.
These are usually not taught in colleges. So currently the best way to develop this is to go on an internship. And another is to participate in hackathons. You are forced to think, be creative, analyse problems, and find solutions from the time you start thinking of the idea, all through building the idea and through executing the idea. Again all this in a short period of time. You also get to understand how differently & innovatively other people think and analyse problems, and develop solutions if you also see the pitches and demos of other participants. But more than everything, the questions that are put up to the participants by the judges as well as their feedback would be eye-openers. It would throw a completely different way of looking at things - both problems as well as solutions.
3) Learn how to develop a skill. Build expertise and confidence
“Tell me and I forget, teach me and I may remember, involve me and I learn” - Benjamin Franklin
You can’t develop a skill just by learning, you also need to practice. You can learn about the new skill using your learning process but you also need to develop patience, drive, and the minimum practice required to horn a skill. It also varies by your attitude, your knowledge level, your experience, etc. For example, it will be easy for you to pick up a new functional language if you have programmed earlier in any other functional language. You might not need to practice as much as someone who is new to functional programming. The more expertise you build, it becomes more and more easier to master newer ones since you pick up more and more patterns, you build on your confidence and you come up with your own unique ways to master a skill.
In a hackathon, you are trying to develop a small workable solution in the stipulated time. You need to pick up a lot of skills — from preparing a deck, UX design, DB and system design, multiple languages and frameworks, minimal deployment, etc. And you need to pick on these skills from the time you start preparing for the hackathon to sometimes when you are doing the hackathon itself. What could be better than a hackathon to inspire you to push yourself hard to build on your expertise?
4) Learn how to collaborate
You need a great team effort to build great software and great teams are built on trust. You need a feeling of oneness, camaraderie, compassion, and empathy to develop complete trust. So it is critical to know how to work in a team and achieve something together. How to fill gaps in a team and support each other best? How to be candid and open without hurting others? How to handle differences of opinion? How to brainstorm and get everyone on the same page?
Team sports are probably the best to teach you how to be a team player in a college setting, the other is doing projects together. You definitely learn how to build trust but some of the collaboration skills are probably not fully required in a sports setting.
Hackathons give you an experience of team collaboration very similar to what is in a professional setting. You understand that there are people with different mental models - biases, perspectives, and experiences in life. Still, everyone works together to achieve a common goal setting everything apart, nothing else matters.
5) Learn how to communicate
Communication is yet another thing that engineering students don’t probably know is important. Most students think that learning their subjects and picking up on a few skills are just what is required. Communication is one thing that is very important in a professional setting and found the most lacking from students out of the college.
They should know when to communicate an idea and how best to communicate it. They should know how to articulate and how to communicate clearly and precisely. They should know how to set expectations and how to say “No”. They should know how to communicate without hurting others.
You learn how to build a story and convey it when you pitch the idea. You learn how to articulate when you give the hackathon demo. You also learn from how other teams do it - but only if you are not tired by then.
6) Build self-awareness and connections
Most students realise the gap from what they should actually know to what they know only when they go for a hackathon. And in many cases, it starts a process of learning. Hackathons may also bring about an understanding of the strengths and weaknesses of your communication, collaboration, leadership, time management, planning, and execution skills.
Hackathons will give you an idea of where you stand with other good students. You also get to meet them during the hackathon as well as what and how they do things. It helps students to know students from other batches and other colleges and is a kind of cross-pollination exercise. You also get to meet the judges, moderators, and mentors who are usually from the industry and these are definitely great ways to build connections.
Hackathons may also give you a glimpse into the life of a software engineer. What is that like? Will you like it? Some students who have not done much development in college love it when they start working and some don’t. It is good to know either way. If you like it, you may as well spend more time on it, if you don’t you might as well think of doing something else.
It also changes their perception of work. Most people have this feeling that work is something you don’t like to do but do it to earn money. Some students realise after one or a few hackathons that “Work can be fun”
7) Bring a positive atmosphere of bonding and oneness among the students, a feeling of Pride
This is primarily for the organisers and for the college organising the hackathon. The experience of conducting a hackathon as an event is in itself a goal onto itself. I don’t think this needs further explanation.