3 systems to make self-learning easier, Mentors to follow on Twitter and Cool Project Ideas for learning
For a long time, I relied solely on my formal education. I put too much faith in it. Last year, when I joined college and all that faith fell off a cliff, I realised the importance of self learning and doing one’s own research. I think there are a lot of people who find themselves in my shoes.
I am writing to help them. I am writing because the generous online community of programmers have helped me and I want to contribute to this incredible trend.
TL;DR: I wrote about my personal experiences.
Back in my school days, I studied only to be able to solve a few exam questions, the trickiest were the ones in which I had to decide how a variable got updated in a fancy postfix/prefix statement.
We were also taught about loops, functions and classes but nothing more than their bare mechanics. Using these, we were asked to write programs to print various sorts of triangles made of asterisks (‘*’) or to find out if the input number is a Perfect number, an Armstrong number or one among a variety of these special numbers.
That was it. Just erratically coding a program to print a fancy triangle built of asterisks or checking for some arbitrary special number. No end game. No purpose.
Although, these didn’t feel completely boring, they failed to kindle an interest in programming.
How could I ever use these concepts to code anything more evolved than a program which is good only for finding out first `n` Fibonacci numbers?
I didn’t care enough to do my own research. I believed that all these gaps would be filled when I would join college.
As I mentioned, I had too much faith in it.
What I found when I joined college:
- The teachers taught us what functions did and how they worked but not why they were a better choice than just copying and pasting code.
- They taught us the very complicated syntax of declaring and using a pointer but failed to explain the desire of wanting to use that dreadful thing in our programs in the first place.
- They were teaching the syntax and rules of the programming language but paying no focus on how to write good programs.
It was the same as school all over again; no purpose but scoring marks, no inspiration to know more.
These were the kind of assignments we were given to do in the programming labs:
And the only thing that we were evaluated on was the output of the program, no matter how ugly and stupid the code was- even the indentation didn’t matter! Sometimes when a student asked one of the lab assistants for help with debugging his/her code, she would actually prescribe tweaking the indentation levels (C, unlike Python, does not care for indentation).
I didn’t think that I could call myself a programmer even after I graduate. After all, I wouldn’t really know programming, would I?
This incident was the final nail in the coffin
In the programming lab, our workstations ran on Fedora although we were never even told what Linux is. Instead, we were trained to press the button on the CPU and start the computer, then click on an icon labelled Terminal, type a few lines that felt like black magic, then finally type vi <filename>, press enter and press i— All of these steps just to.. open a simple text file! And missing that last i would cause a havoc!! Yet, for some reason, this Linux thing was supposed to be better than Windows for programmers.
Once I asked my teacher, “Why cant we just use Windows to write code?”
This is what he replied- “You people are going to become IT professionals in a few years. You should not use what normal people use!”
Not because Linux can enhance a programmer’s productivity or because it is free and open-sourced but because using a Linux distribution is showing off your IT professionalism. Now, I am pretty sure he has no clue why the real professionals prefer it over Windows (that’s because a few months later, when I had learned a little something about Linux, I saw him ‘using’ the vi editor- using the arrow keys and the mouse!).
Obviously, the gaps in my knowledge were not getting filled as I hoped they would. It seemed pretty clear that this path of learning is just going to make me into another IT professional who works on a Linux distribution because hey, all the other “hackers" use it!
Just to put things into perspective, I study at Jadavpur University- one of the more reputed colleges in India. All of my classmates suffered from this negligence. So have all my seniors who studied before me and so are all my juniors are currently studying. After talking to a few friends at other colleges, I found that lot of them have similar experiences.
The worst part is that the teachers don’t even bother to provide any motivation or even a bait, in the form of extra credits or something, to learn these things on one’s own.
Some of these students feel that there is something wrong with their education environment but they have accepted it and have adapted to it. Some think that maybe they were not lucky enough to get into a good college which has good teachers who could deliver the necessary intuitions and give deeper insights. Most of them don’t have a programmer friend or even some distant programmer relative who could guide them in the right direction.
This was true for me too.
Nowhere to go. A feeling of helplessness set in.
Obviously, I had not realised the power of the internet, yet.
One evening, in desperation, I googled my frustration out and stumbled upon this article- How to become a hacker by Eric S. Raymond.
(P.S. if you think that a hacker steals passwords, gains access to other people’s accounts without them having a clue or does other stuff on that line, you are a victim of the hypocrisy- read the above mentioned article a little bit.)
(Second P.S. looking back at the title of the article, I can’t help but feel a little ashamed of what I probably entered into the Google search 😜)
This was the longest non-fiction material I had ever read and I loved it! I had to look up the author’s name midway because design of the webpage sent a feeling of scepticism. I felt really happy when I found that he is a famous programmer (even has an abbreviation for his name- ESR) and that his webpage design is by choice! The article needed multiple readings to fully grasp its contents but none of them felt boring at all. Then, I followed the links he had mentioned in it and read them.
(Two of my favourite among those articles are: Great Hackers by Paul Graham [google him up if you don’t already know him] and Teach yourself programming in 10 years by Peter Norvig, director of research at Google).
What I learned
It was astonishing to find that these successful people had made such an honest effort to share their knowledge and insights to help newcomers into the programming world (just look at the length of those articles!). Judging by the authors’ credentials, I half expected them to be directed at programmers like these:
Also, it was surprising how stumbling upon just one good article could unearth a whole bunch of them.
They showed me how good programmers think. More importantly, they showed what it means to be passionate about programming.
Those articles told me how most of my intuitions regarding my formal education were accurate. They helped clear some doubts and provided answers to the questions that I thought could only be answered if I was lucky enough to have a good mentor.
Some insights that I took from them:
- Its not too late to start coding. This was a major concern of mine. I was always reading how all the famous programmers, be it Mark Zuckerberg or Bill Gates, had started creating software since the age of 12 or before. I thought that I was too late to the party. Therefore, it will be silly to even strive to be like them. So, reading ESR say- “Most people seem to get interested between ages 15 and 20, but I know of exceptions in both directions”, felt reassuring. Then finally, reading about a few real programmers’ journeys in their blogs gave me the confidence to start.
- Learning a programming language does not equal learning programming. Knowing the rules and syntax of a language does not teach programming. I had this feeling for a long time and now I was sure. It is worth only as much as knowing the rules of grammar is when your goal is to write stories. My college and school, both were focusing on teaching only the language.
- “People who are lazy or careless in their writing are usually too lazy and careless in their thinking to make good hackers — so take care to spell correctly, and use good grammar and punctuation, otherwise you’ll probably be ignored”- ESR. Do that and your answers will not go unanswered at any forum on the internet (definitely at the heart of Stack Overflow, although the community there is quite considerate towards people with weak grammar).
- There is an almost unanimous answer to the question- how to be a good programmer. It is on lines of: “Work on projects with other programmers”. Literally, every blog I have ever read advises a newcomer to do this to become good. If it is such an integral part then why wasn’t my college prescribing it? I don’t know and I have stopped caring for the answer.
- “The key to being a good hacker may be to work on what you like” — Paul Graham. Before committing to learning a new topic or working on some project, I find it useful to ask myself- “Can I do it for atleast 3-4 hours at a stretch? Or would I have to take frequent breaks to check my messages? Is it more interesting than scrolling through my news feed on Facebook?” It makes me sceptical about the topic if the answers aren’t — “Yes, no and yes!”
Finally, a quote that I can relate to because of the self learning experiences,
One of the greatest discoveries a man makes, one of his great surprises, is to find he can do what he was afraid he couldn’t do. — Henry Ford.
Owing to the past one year of educating myself on a variety of topics, including a little Linux, HTML/CSS, a little hands-on Arduino, Python and currently Machine Learning (I may be boasting a little but I am really proud of these), I think I am able to fully grasp what Mr. Ford might have meant in his statement.
I have realised that the internet, along with its amazingly helpful programmer’s community, is sufficient to teach programming in the best possible manner, to anyone who is willing to learn. It can be a better teacher than the best ones you can have in real life.
To learn, one only needs to be determined and patient enough to read the webpages, scour them and follow the links that they take you to.
I have tried this. In fact, I am still doing it and I assure you- it is fulfilling. If you find your college education unsatisfactory, don’t compromise or lose hope. Just keep feeding your curiosity by browsing the web, looking for answers.
This is self learning. This is true learning.
If you think this article might help someone, do share it with him/her.