Coding for kids, teens, and adults- the pros, cons, and myths
Aditya Vivek Thota
Senior Software Engineer | Technical Content Writer for Developer Blogs | Typescript, React, Next.js, Node.js, Python, Applied AI Research
Coding has become a modern-day gold rush. It does make sense when you think about it.
- It can be used in almost any field out there, and hence high demand.
- We are in the digital world. Almost everything is based on computers.
- It forms the backbone of automation that leads to better efficiency and lower costs.
- It is generally well paid (not always) and easy to get in.
- In 2021, you don't necessarily need a degree in computer science to be a programmer.
As a programmer myself, I wanted to explore a thought process, keeping a strong focus on the misconceptions people from non-tech backgrounds may have. I also hope I can give a different perspective that will help everyone to think beyond what society exposes us to in terms of "coding".
What actually is code?
You may have associated it with some sort of "syntax" as shown in the image or some computer screen with 1's-0's, the kind of stuff you see in movies. Even programmers would normally visualize code as such. That's kind of true, but it is not the entire truth.
In super simple terms, code is a representation of structured logic that can do something tangible.
In reality, this "representation" can be anything that you want. Literally anything. Take a look at the code snippet below-
my rose is "red " violet is "blue" Split my rose into petals with " " Unite petals into the flower with violet Shout the flower
Wait! This is code? Yep!
The beauty here is that it is an actual computer program that joins two strings. It is written in a language called "Rockstar". You can run the above code in an online compiler and you will get the output as "redblue".
Obviously, the language was built for fun where the "syntax" looks like a rock song, but this shows the endless possibilities of what "code" can look like. Vice-versa, code can do a lot of other things beyond our traditional use cases. For example, did you know that it can be used as a musical instrument? Sonic Pi is a tool where you code to make live music!
Remember the viral tweet where components of web pages were generated by giving instructions to OpenAI's GPT-3?
The description written to generate the component is essentially the "code", which is normal English in this case. This might be fine-tuned and a result of controlled experiments, but it clearly shows what is achievable.
Given this context, it is plausible that sometime in the future we will have conversational English as a programming language. It is not a question of "if it can be done", but "if we really need it and when".
So, code can be anything and can do anything. Our focus shouldn't be on that but "structured logic". When you write it down on a paper in simple English at the fundamental level, people would probably call it an "algorithm". I personally don't think "learning to code" has any inherent meaning. Learn algorithms instead.
The traditional code you see is just one of the ways to represent them and make the machine get things done. Once you understand an algorithm, you can represent it in any programming language you want. You don't even need to know that language. Just go to the official documentation and refer to the syntax (or simply refer to StackOverflow). Most times, I see people learning "programming languages" or asking questions like "How do I learn Python/Java?" Here's my take on that- learn algorithms first and then implement them in whatever languages you want based on what you want to build.
Keynote 1: "Coding is not exactly what we think it is. What matters are the algorithms that can be learned in plain simple English" —Click to tweet.
Who should learn these algorithms and why?
Irrespective of the background education, profession, or future goals, I think anyone who's even mildly interested in "logic" and math can learn them. It improves our overall thought process. The world around us is filled with algorithms. Doing a Google search, buying something on Amazon, streaming a movie on Netflix, ordering food on Swiggy, all of them are based on algorithms.
Hence, understanding the technology that powers our everyday life requires algorithmic thinking and awareness. It is of benefit to anyone out there. A digital marketer may be able to create better ads, a consultant might come up with unconventional solutions that work, or an artist can get inspiration for new possibilities, with such knowledge and exposure.
Take a live example I implemented in this article- Click to Tweet.
I wanted to have some personal customization. Something like in Medium where you can tweet highlighted text directly. I was aware of how Twitter worked and how it can be done, and being a developer, I wanted to make a simple tool that will help me create those "click to tweet" strings (instead of using some 3rd party tool/plugin or doing it manually). I made it in a new framework that I have never used before following the principle of learning by doing. (I'll cover that in a different article)
If you are a Twitter person, try it out.
This functionality helps me give the readers the power to tweet out specific sentences from the LinkedIn article and that, in turn, could result in better engagement and cross-platform presence. While this is a simple example, if you are a content marketer, you could probably come up with more detailed use cases, the more you understand technology.
Keynote 2: "Algorithmic awareness improves our thought process" —Click to tweet.
What about the whole "coding for kids" debate?
Firstly, I think the word "coding" itself is misleading as seen. Let's talk about if kids should learn algorithms. They are structured logic that can be explained using plain English (and math, in advanced cases). Irrespective of the age group, anyone who can comprehend such logic can learn them. You don't need to write a single line of formal code in that learning process. In many cases, they can be taught very creatively using real-world scenarios. However, in reality, a lot of the courses out there have misdirections and shortcuts. So much that it boils down to "money" and not "learning".
Keynote 3: "Code is temporary, algorithms are permanent (almost)" —Click to tweet.
It is also important to know why we are learning something. In the Indian context, the general trend is to get a good and well-paying job. People usually follow a structure-
- Learn a programming language.
- Learn how to solve different interview questions in that programming language.
- Do competitive coding for the same. (Leetcode, Geeksforgeeks, CodeChef, etc).
- Crack the interviews, where similar/same questions they prepared for are asked and get the jobs.
It is not necessarily bad. That's what gets you the job. Even I would recommend this routine for someone looking for a job. Students do learn algorithms, but only those that are asked in interviews, and not in terms of a business/design context and applied thinking.
If you are really interested in learning beyond that, I don't think this is the right approach.
If a kid is made to learn something with the "intent" to make money, that's a pretty bad sign. The knowledge acquired will rather be shallow and misinformed. In fact, it takes really special skills and a deep understanding of the subject to be able to teach "algorithms". Very few can do that effectively, and even fewer people focus on teaching those fundamentals. A simple reason is that it takes time. It is a gradual and exhaustive process.
As complex as they are, I do think it is possible to be self-taught. I don't mean all those paid online courses, boot camps, etc are not useful. It rather depends on the context of what is being sold (Just meaningless "coding" or something practical and in-depth), if the instructor can save your time and deliver quality content, and if you want to learn something in real-time (say live mentoring) or from the experiences of the instructor. If certain benchmarks are not met for a particular course, I think that may not be as useful.
If you have enough time, self-learning is still my best recommendation. Before getting there, there is something else I want to discuss.
Some realities about "coding"
- Developers don't code all the time. In fact, most of the time is spent thinking, debugging, testing, or simply procrastinating.
- Most (almost all) programmers google stuff and copy things from the internet. Knowledge in software is almost always a shared resource. It is an open ecosystem where everyone contributes and helps everyone else.
- All programmers don't make those millions or even 100Ks. The software industry is divided into service and product-based. On the service side which employs most of the Indian IT crowd, the pay is probably much lesser than many other professions.
- Doing business/Running a startup doesn't need the so-called "coding" knowledge.
- Most developers won't need in-depth knowledge of obscure algorithms and design concepts to do their normal everyday jobs. In fact, it is almost impossible to know everything, given the vastness. These days, we have pre-built libraries that help us use complex logic with ease. The idea behind deep self-learning is not for being a "software developer", but something beyond that- a creator and a better problem solver.
- "Making an app and launching it" is just a rudimentary step of a business. There are over 3 million apps on the Google play store right now, with 1000s published each day. "Making apps" as such doesn't mean anything, without deeper context. With templates and no-code tools, you don't even need to write a single line of code to make one.
Skills that are actually important
- Documentation/writing. If you code something which no one else understands, that's pretty much useless.
- Communication/presentation. If you can't present your work effectively, you lose out on a lot of visibility and opportunities.
- Creativity. It is something you can nourish by learning algorithms and not the syntax of programming languages.
- Ability to create problem statements and ask difficult questions in the context of the real world.
- Patience. If you are a developer, you know it's importance.
These lists are not complete. There are so many other parameters that lead to holistic growth. I think such skills are more important.
Keynote 4: "Computer science != programming != coding" —Click to tweet.
An approach to self-learning algorithms
I think I have given enough emphasis on algorithms. Now, how do you actually teach them yourself? I will share my approach, but I encourage everyone interested to spend some time exploring themselves and coming up with their own style if possible.
- Be aware of what algorithms exist out there. There are two amazing Wikipedia pages that have done this compilation for you- General topics, List of algorithms. Skim through them randomly to get yourself familiar with the different terms.
- Most explanations you find online will try to represent and explain the algorithm using maths. Remember that developers mostly won't use that math in the first place, but knowing it gives you a grasp of the fundamentals and an understanding that is good enough to modify or create new algorithms when needed. At a beginner level, you don't need to go that deep. Gaining a high-level understanding is important first.
- Once you have the awareness, how to get started? A good approach would be to connect the dots backwards. Think of any technology you see around in real life that you want to know about. Then, simply google search "The algorithm behind <some xyz>".
- Once you get the name/description of the algorithm, search for a simple/practical explanation for the same.
- This is your starting point. Go through all the links in the search results and filter out the good resources that explain it in a simple way. Search as deep as you need- page 3, 5, or even 10. Also, look into the wiki page for that algorithm for a solid overview (or some YouTube video if it exists).
- Try to look at everything in terms of the real world, not the math. Understand where the algorithm is exactly being used. Explain to yourself by visualizing what's happening on a piece of paper/google doc. (I will do a demo of this for better clarity in future editions)
- Once you have the understanding, look into the "pseudo-code" for that algorithm. (Simply google search "pseudo-code for XYZ algorithm". In most cases, you will directly find it on the wiki page)
- Think of where else you can use such an algorithm in the real world.
- If you want to take it a step further, you can build a new application using that algorithm (For more experienced tech folks).
Keynotes 5: "There are no shortcuts to deep self-education. You need to put in the time to explore the concepts" —Click to tweet.
In the next edition, I will be taking up one such algorithm with a real-world significance demonstrating the self-learning process I personally follow. It will be a very non-tech friendly tutorial that everyone can understand (hopefully). #StayTuned.
Note- All thoughts shared here are my current perspectives. It may not necessarily apply in all scenarios/contexts. That being said, do let me know your perception of coding and if you found this article to add new insights to the way you look at it.
I hope we can make this newsletter a two-way street. You can add your feedback, difference in views, etc. in the comments (or text me directly on LinkedIn). I will include the constructive points that come from such discussions in the next edition with a shout out to your LinkedIn profile (if you'd like that, of course)! I think this communication will also help everyone to learn and grow together.
For the Twitter fans- Click to tweet the entire article!
?? Leading Revenue at DhiWise | Ex-Head of Growth at being
3 年Aditya Vivek Thota This was lovely! Coming from a non-tech background, I've always wondered about this. I knew that coding is inherently based in logic, but never knew if it was possible for me to learn these fundamental logical concepts in a structured manner. I'm certainly going to try this out after going through your next edition. On a side note, someone should really structure a good crash course around this. I really think a lot of people (specially in the startup ecosystem) could benefit from it. Thanks a lot for sharing this! :)
??
3 年So inspiring for me in the subject of coding and algorithms. Keynote 3 I like most !
Junior Full-stack developer |ServiceNow developer |TDD | Springboot|Postgresql l Docker | Hibernate | Jpa | GitHub | Azure| Angular | React
3 年Interesting! I like
Emotionally Intelligent Leader | Top Producer in Sales | Creative Manager | Advocate | Highly Skilled Career Changer
3 年Aditya Vivek Thota Thank you for this generous article! I am doing lots of self learning these days, and this information is greatly appreciated!
Copywriter | Social media copywriter | Email copywriter
3 年Hey Aditya Vivek Thota I'm glad you invited me to subscribe to your newsletter. I'm falling in love with your content. Keep up the exquisite work!!