Should you learn to code?

Should you learn to code?

Some months ago, I was attracted to a LinkedIn post were a 52 year old person announced that they were learning to code in Python and that "it was never too late to learn". If this person had said they were learning to swim or cook or ride a mountain bike at the age of 52, I suppose most of the comments would have been supportive. In this case however, because it was 'coding' many of the comments were centred around him eventually becoming a 'Junior Developer' at his age. Some went as far as asking (seriously or tongue-in-cheek) whether he (the 50+ years old learner) would hire someone like him in a junior developer position.

So many assumptions. Many of them bordered on 'ageism' while others were somewhat pitiful and ignorant of the benefits of coding. Nevertheless, there were a number of comments full of praise and support for the 50+ years old learner.

It was one of those LinkedIn posts that I could not resist chipping in and I decided to expand my comments into this article on the matter. Essentially because as an academic who is into the business of research-led teaching/learning - and being a self-taught programmer for that matter; I wanted to share some insights into this issue.

My argument was that there were a lot of misguided presumptions that learning Python at 50+ (or any age) means someone was aiming to become a "junior developer". Just as learning geography is not about you wanting to become a weather forecaster, learning to code is also not tied to developing applications (apps).

It is possible, if not necessary sometimes, to learn coding purely to communicate (and explore ideas) with professional coders. It is a programming "language" after all. Besides, the art of communication is not only vital but is the bedrock of management and collaboration in all successful projects.


PART 1: Bringing 'Domain Expertise' into coding

Knowledge of coding is a very useful skill nowadays, given the tremendous amount of digital transformation happening in every industry. Coding skill is especially valuable if you have vast experience or domain knowledge in a particular field (e.g. theoretical physics, medicine, agriculture, earthquake engineering, etc).

With such specialist knowledge and expertise, you are perfectly suited to help actualise new digital tools/apps or improve existing ones. Your specialist industry (and life) experiences cannot be taught in a coding bootcamp or with a computer science degree.

Some people may not know that whereas many professional programmers know how to write code very well, a lot of them know diddly squat (zero) about specialist fields. Whether you have a PhD in computer science or you learned how how to code from YouTube, you are not going to instantly acquire knowledge of engineering, healthcare or construction. Having a BSc, MSc and PhD in aerospace engineering, does not make you a pilot. So, while you can compute the aerodynamics of turbulence, you would need to work with experienced pilots when working on technology for flying aeroplanes.

Now consider that it is even more exciting if a pilot can learn to code himself. But why should they? So that they can become another coder? Nope! Not necessarily. Certainly, their input is vital when developing software for flying aeroplanes. Let's also imagine a medical doctor, say a specialist in genetics or cancer therapy who can code and who develops an app for diagnosis and treatment of cancer. There is every likelihood that his app will be more practical, intuitive, and user-friendly than what a typical programmer develops, assuming they even dare to try something similar on their own.

In fact the medical specialist who learns to code can imagine solutions and ideas that the generic / typical coder could not even dream of. Domain knowledge is invaluable and irreplaceable.

It takes years for a typical coder working side by side with domain experts (in a particular field) to develop enough understanding of that field to be able to programmatically tackle its problems all by themselves. More often than not, such programmers need to work hand-in-hand with specialists. Some people erroneously think all that a programmer has to do is apply some logic or equation to create an app of some sort. That's often not the case. Many apps rely on specialist knowledge about a field or end-users. Without having domain knowledge of the "process" involved in say, pile foundation or tunneling, how far would a lone typical programmer go in creating an app or tool that is actually useful for civil engineers?

Consequently, a domain expert (e.g. pilot, civil engineer, or surgeon) can/could learn coding so that they can work side-by-side with professional coders without sounding idiotic or being burdened by imposter syndrome since their goal was never to do the actual coding or app development themselves. In fact, it is easier for domain experts to learn/master coding than for coders to learn/master a domain, some of which (like medicine) often take years of specialist training - and practice!

Hence, the opportunities are endless for those who have years of experience in a specialist field (domain) and who wish to lead digital transformation in their specific industry. Digital transformation via automation of processes including the use of artificial intelligence (AI) is happening everywhere and if/when this happens without the core involvement of experienced domain experts, you end up with "solutions looking for problems". A good example is blockchain, which was a revolutionary idea, but at its inception, it was far ahead of most industries and people struggled to fit it into their processes (and needs).

It is important, therefore, for professionals in different fields/industries learn to code, not because they can apply for "junior or senior developer" roles, but so that they can take the skill back to their own industries and lead change from within. There is a TedEx talk from 2012 by Christian Genco about why you should learn to programme. His presentation (highly recommended) captures the essence of this point above i.e. coding leveraging on domain expertise.

Not everyone agrees with this line of thinking.

PART 2: Is coding like 'Accounting' or is it like 'English'?

In fact, there are two schools of thought concerning if/why someone should learn to code. On one hand, we have the purists, who see coding like accounting. They say you should leave it to professional accountants to do your tax returns. It may seem hard to argue with that logic. But is every challenge or problem in life similar to tax returns? Clearly not.

On the other hand, there is another school of thought: the eccentrics & non-conformists (to which I subscribe) whose proponents see coding like the English Language. Our position is analogous to a person learning English for several use cases such as: (1) to read the news or understand the subtitles of their Netflix series; (2) to send SMS, or compose emails; (3) to write a best-selling novel. These are just three of many ways that learning English could be of benefit to anyone, based on needs, abilities, or interests. So it's up to you why (and how far) you take up coding. So learning to code (learning English) should not mean you want to be a full-time professional developer (best-selling author of Fiction).

Besides, at any age, coding is fun! Yes, it can be frustrating for some people, but so is cooking (I know this, so don't ever eat what I cook)!

To add to this, knowledge of coding actually helps your approach to solving non-programming everyday personal and work-related problems. One way is that it can help you think step-by-step towards a solution, with a clear plan of what to do should something go wrong along the way (i.e. algorithmic thinking). Another way coding helps you is to break problems into manageable parts AND then reuse bits of a solution in different places, i.e. Classes and Objects. Just like the golden rule of CAD is "never draw the same thing twice".

Trivia: as a matter of fact, modern day object-oriented programming (OOP) was inspired by the work of an Architect (the building type, not software) called Christopher Alexander who developed the concept of pattern language and object-oriented design. Little wonder modern programming has 'software architecture' in its everyday lexicon.

Other programming concepts like Inherited Classes and Base Classes are useful in appreciating the right balance between standardisation (generalisation) and customisation (creativity) in product development. These two concepts always come to my mind when I am looking into the benefits and drawbacks of off-site construction. Concepts like Loops and Recursions are also helpful for approaching iterative problems that occur once in a while or repeat themselves. Coding also helps you think in abstraction and layers: the end user merely sees a nice simplified graphic user interface (GUI) but the coder sees/knows the underlying mechanisms behind all the magic.

Now of course you can approach and solve different life problems without coding skills, but what coding does is give you a blueprint or formula that explains why one approach always works. Or why one solution is more resource (data, time, computational power) efficient than another. This is certainly much better than ascribing your problem-solving prowess to the blackbox called "intuition" or just "experience" which is difficult to capture/explain when it is in tacit form.

There is a saying that if you want the most efficient way to solve a problem (e.g. clear a lawn full of dead leaves), then give that problem to a lazy person and they will figure a quick/simple way around it. In this regard, a coder can spend hours or days coming up with an algorithm for what seems simple but boring task. Yet afterward, everyone benefits from the script/code by clicking an unassuming button that gets things done 'magically'.

Coding is very useful and fun. If you were looking for a new hobby or want to give yourself that extra edge in the workplace or planning for a new career direction, consider learning to code. If you are on the verge of retirement or have retired, consider learning to code and see how you'd be (re)valued by your industry. You'd possibly be tempted to come back in some capacity by your former employer with carrots like "Age is just a number". The irony.


PART 3: So what programming language should you learn?

There are so many languages out there, but Python is one of the easiest and most utilitarian languages out there. Stay away from (no, in fact, feel free to laugh at) people who say this or that language is the best. There is no such thing as 'the best programming language'. That's like saying a Toyota Prius is the best vehicle in the world. In the UK for example, many Uber drivers may agree with this proposition, but I think most farmers and Formula 1 drivers would seriously disagree.

The best programming language depends on factors such as: (a) what kind of problems you are likely to encounter in your industry (don't use a Saloon car to plough your field); (b) what stage of involvement you fancy in the problem-solving process of programming (there's backend coding and frontend coding); (c) who you will be working with (don't bring a knife to a gunfight), and so on.

Nowadays, I would also highly recommend JavaScript because it has evolved from being a frontend HTML-based language (vanilla JavaScript) towards being powerful for creating whole applications with backend capabilities using variations like Angular, React-Native, etc. These have been helped by frameworks like NodeJS. In my opinion, JavaScript is as easy (possibly easier) to learn than Python and if you were interested in mobile applications, the previously mentioned JavaScript flavours would serve you well. That is not to say Python cannot be used for developing mobile apps.

Once you've learned and mastered Python or JavaScript, switching to other languages in future like Java and C# (pronounced see-sharp, not see-hashtag) could be done in a matter of weeks. Within months of regular use, your coding skills in the new language would be as good as in the previous language. The programming principles are the same for most OOP languages.


PART 4: Some tips on teaching yourself to code

Let's assume you don't have thousands of pounds/dollars to burn at a coding bootcamp, or you don't fancy dishing out 10s or 100s of dollars a month for some online subscription-based course. So how do you go about teaching yourself a language like say Python? Here are some tips:

1) Invest time in learning from video tutorials: Ditch the daily Netflix binging for watching quality video tutorials on programming. You could pay as little as ~$20 (with coupons) for a programming course on Udemy (they didn't ask or pay me to say this). This would be good value for money. If you are cash-strapped, look at New Boston's channel on YouTube, and so many others.

2) Practice makes perfect: Don't just watch the videos endlessly like you are watching a movie. After every lecture/clip (each typically being 10-15 mins long) practice, practice, practice. At first, you would be able to solve a programming problem faster with your pen and paper. But with practice, and as you learn to think algorithmically, you would be able to code a solution (an expression or a block of code) much faster than you can write down the answer with pen/paper.

3) Create a learning plan: You would benefit from using a systematic or scheduled approach to finishing an online video course. If a course is say 30 hours long, create a timetable to do (for example) 1 hour of video watching and 1 to 2 hours of practice per day. Plan to finish it in 30 days. So your schedule would allow for 2-3 hours of programming per day. Ideally, do this first thing in the morning or late in the evening, just be consistent. Any day missed MUST be made up.

4) Be disciplined, persistent, and consistent in your learning: Dedicating just 2 hours of practice every day (for 7 days) is more valuable and impactful to your learning and mastery than spending 14 hours over a weekend. It is definitely not the same impact.

5) Use "The Pareto Principle": When learning a language (e.g. French) it does not make sense to learn ALL the words/vocabulary in that language. So don't try to do the same with programming languages. I doubt there is any French person who knows all the words in a French dictionary anyway. An effective approach is to start by learning only the words and phrases you need for basic everyday conversation, right? And then you'd add more words, phrases, and sentences as the need arises, correct? The same goes with programming languages. Do not make the mistake of trying to master everything in Python (or JavaScript). It is a "language" so focus on the functionalities (vocabulary) that you need most of the time. Use Pareto (80-20) principle to select areas of focus in Python. Or any coding language for that matter. More or less, what 20% of Python will you need/use 80% of the time? Don't spend precious time mastering how to work with a "File Browser Class" unless the kind of app you will be developing is going to upload documents.

6) Focus on code, not user interface: Don't just learn how to create graphic user interfaces (GUI) so that magic happens when you click a button. That's not real coding and in fact, many software companies have people whose jobs are to create GUI and the User Experience (UX) but such people hardly know what goes on under the hood.

7) Create variety in your learning process: Don't always watch a structured course on platforms like Udemy. Go to YouTube and see how others have explained a particular concept. You'd be surprised how many times a difficult concept was simplified by an obscure Indian or Kenyan programmer who created a video from the late 1990s using Windows 95 in broken English. Also, read articles on various concepts to build your theoretical understanding. Go to GitHub and down a piece of code, change a few variables just to see what happens, or re-write lines of code using a different way (expression).

8) Create mini-projects of your own: Once you have enough confidence in your abilities (not necessarily at the end of the learning) embark on a project of your own interest. This would give you sense of accomplishment and something to put in your portfolio.

9) Get help from experts: When you are stuck in your mini project, ask questions in programming forums - Hint: when you go to forums like Stackoverflow, don't just ask "How can I do such and such", and expect people to tell you how to solve the problem. The contributors in Stackoverflow will 'eat you alive' with brutal replies. Instead, show them what you have done no matter how crude/bad the code is (i.e. copy and paste the problematic code blocks) and watch 4 or 5 different ideas or solutions - which would clarify how/why your approach was wrong. In addition to the solutions, the contributors will also teach you a thing or two about improving your "style" of coding. Yes, there is a style. Just as no two people write or speak the same way.

10) Stay hungry and motivated: On those annoying days when you just don't feel like programming/coding, or days when you feel coding is too difficult or not worth it, motivate yourself about the benefits at the end. Nothing good comes easy. Whatever is valuable in life (diamonds, gold, honesty, etc) is often hard to come by. Remember this qoute:

"If it wasn't hard, everyone would do it. It is the hard that makes it great" (Tom Hanks, League of Their Own).

11) Read a book called 'The Dip': There is a small book called "The Dip" that would help you understand how to get out of coding cul-de-sacs (or getting stuck in learning a new thing/skill). This is something that is bound to happen. If you do not know how to get out of those dips/trenches, you would give up and possibly hate programming (or whatever you are learning) for the rest of your life.

12) Consider peer learning and pair programming: Find a coding buddy (colleague, spouse, your child, etc) who would embark on the journey with you. They may be the ones to see light at the end of the tunnel (or cul-de-sac). Or show you an alternative approach to a solution, because there is more than one way to solve almost every programming problem.

13) Get a coding mentor: You could benefit from having someone you can meet up with, kick your feet, and talk coding. Just for inspiration and motivation. Perhaps that person has a coding-related job or career that you admire. It helps to have a coding mentor.

14) NEVER attempt to learn two languages at the same time: Master one language and you can easily transition to another language (with a decent amount of working knowledge) probably in a month. This is possible because all programming languages have similar concepts and it would be a matter of finding out how to implement X and Y in a new language, as long as you already know how it is done in at least one language. Additionally, once you have a workable algorithm, you can produce code for it in many languages.

Conclusion

These tips would be incomplete without mentioning the elephant in the room: ChatGPT. So yes, you can use this or similar AI tools to generate blocks of code that you can stitch together to create a functional programme/app. However, you will not be able to make sense of such code if you don't know how to code yourself. But once you do learn to code, such AI tools can be powerful to generate code, pseudocode, or algorithms (i.e. the step-by-step approach to solving a problem).

Since it is unlikely that AI will be used to create entire apps anytime soon, you still need to learn how to edit, cut and paste chunks of code as your application evolves. One key benefit of AI-generated code is that it can deliver optimized blocks of code. Besides, last time I checked, chatGPT was much more friendly in answering code-related problems than the folks at Stackoverflow, whose members can be ruthless if not mean to newbies.

I should also mention that there is a rise in 'code-free' app development platforms which enable the use of ready-made (drag-and-drop) components to create functional apps. These platforms can be very useful but in my opinion, they have limits. Those limits are imposed by what the drag-and-drop components allow you to do. For very serious applications, you will find that getting under the hood (raw coding) is very useful, if not inevitable. The same way you could use PowerBI to do data analytics, but if you learn Python, there is no limit to what you can do with data.

Happy coding! Share your thoughts and experiences below.

Christina Tueje, CIPP/E

AWARD FINALIST I PICCASO Award Europe | Creating Privacy Leaders | Strategy Director | AI, Privacy and Cyber Security | AI in HR | Visionary Founder UK Black Privacy Professionals Network | WiAIG London Chapter Chair

9 个月

Zulfikar Adamu, PhD Thanks for sharing your considered insight and you comprehensive experience?? The people who ridiculed the 52 year old are incredibly shortsighted. Personally, I think some of the crucial survival skills in our AI and digital world centre on learning agility and life long learning. Life long learners have the right idea.

回复
Ozair S.

Senior Engineer

1 年

Great summary Professor, I think we'll reach a stage where knowing how to code be like knowing how to read/write.

Gaylord BOOTO

Researcher LCA@NORSUS

1 年

Great!

"In my opinion, JavaScript is as easy (possibly easier) to learn than Python and if you ...". Glad that is an opinion. Hahaha. That was a refreshing read. Thanks

要查看或添加评论,请登录

Zulfikar Adamu, PhD的更多文章

社区洞察

其他会员也浏览了