Monday, June 11, 2018

How I Started Learning Machine Learning

This is a long post where I would like to share how I started learning ML.

I first learned about machine learning from Andrew Ng's Coursera course. I did not complete the course or the assignments. Just went through the videos. The videos were short and I completed it in 2-3 weeks. I got a good overview of what ML was and where it could be applied.
Then I moved on to Michael Nielsons Deep learning booklet. Another little gem which is easy to understand and requires no prior knowledge of ML. It took me one week to finish it.

I then decide to get into some machine learning projects. I found some interesting competitions in Kaggle. In the beginning, I used Matlab but soon realized it did not have enough support in DL community and Python was more popular (and definitely more intuitive). So, I decided to learn Python. I started using a popular mobile app for learning Python. It was a good app but I found the process slow. Therefore, I started learning code straight from the Kaggle Kernels. I found some amazing people there, who wrote really good tutorials. Especially, exploratory data analysis (EDA) and beat the benchmark (BTB) notebooks from users like Anokas (he's a prodigy) and ZFTurbo were extremely useful. I tried to run their code each line at a time. Whenever I had questions regarding any functions, I read the documentation.

Fortunately, Python and Matlab have a few similarities. For Python, I had to learn how to manipulate some widely used data structure such as list, numpy array, and dictionary. I learned the data structures (series, dataframe) in the pandas library from their website (10 minutes to pandas). Also, I had to get used to the for loop implementation in Python which is quite different but extremely intuitive when you get the hang of it. Another useful concept was list comprehension. Once I got those down, all I had to do was get familiar with different libraries used in ML (e.g., keras, scikit-learn). While using the libraries, I found the tutorials in machine learning mastery website extremely useful.

To know about the current state of AI, I have subscribed to medium, a very popular blogging platform. This is an excellent source to learn about current technological advances. I get notifications through gmail and often find interesting articles to read. One of the most popular bloggers in AI, Andrej Karpathy (Tesla) writes on this platform. His blogs in github and medium are gold-mines. Another wonderful source for the advances in AI is the two-minute paper channel on Youtube. This youtuber gives a non-technical overview of recent papers. I like his enthusiasm :p

Another course that was very interesting was Jeremy Howard's Fast.AI. He takes a top-down approach where he gives an overview of all the state of the art concepts used in DL and shows how to use the tools. But the details exploration are left upon the participants. Which means you will find everything extremely difficult to comprehend in the beginning. Nevertheless, by getting exposed to the applications of such concepts you will understand what might be useful to you and you can focus on that instead of learning everything as a whole. The videos can be found on youtube. When I watched the videos (around 2017) there were seven of them, each were 2 hours long, and he was using keras. But in his updated videos he has included tons of stuff and he is probably using Pytorch.

So, that's the end of this post. I might have forgotten/never seen some great tutorials. Let me know your thoughts. Thanks for reading.

I encourage you to share the story of your journey in ML. It is great to know about people having a different approach to learning ML!

Resources:

Andrew Ng's Course:
https://www.youtube.com/watch?v=qeHZOdmJvFU&list=PLZ9qNFMHZ-A4rycgrgOYma6zxF4BZGGPW

Michael Nielson's book:
http://neuralnetworksanddeeplearning.com/

Anokas:
https://www.kaggle.com/anokas

ZFTurbo:
https://www.kaggle.com/zfturbo

10 minutes to Pandas:
https://pandas.pydata.org/pandas-docs/stable/10min.html

Machine Learning Mastery (Deep Learning part):
https://machinelearningmastery.com/category/deep-learning/

Karpathy blog:
http://karpathy.github.io/
https://medium.com/@karpathy

Two minute papers:
https://www.youtube.com/channel/UCbfYPyITQ-7l4upoX8nvctg

Jeremy Howard's fast.ai:
http://www.fast.ai/
https://www.youtube.com/user/howardjeremyp

* Tahsin Reasat

Tuesday, May 15, 2018

How to Extract Multiple Integers from a String Input with Python

"How do I extract multiple integers from a string input?" is a very common question.

The most common answer is "use map( )."

Nope. There are many ways to extract multiple integers from a string, like using map( ) or the ast module or writing your own function. If you use these methods, it's cool because all of them work.

The problem is that these are not good answers for new Python learners. Functions like map( ), filter( ) and reduce( ) belong to a different style of programming called functional programming. The ast module depends on the user to provide input in the correct format. And writing your own function is redundant because Python already has elegant, built-in solutions.

Introducing LIST COMPREHENSIONS and GENERATOR EXPRESSIONS, to those who didn't already know.

These are built-in Python tools to process items in a list/tuple/dict/set or other iterators. I won't go into details; you can read about them on the internet. Instead, I'd like to show three examples.

A list comprehension can process a string of integers and return a list of those integers.

```
>>> s = input( )
1 2 3
>>> x = [ int( i ) for i in s.split( ) ]
>>> x
[ 1, 2, 3 ]

```

A generator expression can be used to process a string of integers and get a tuple.

```
>>> s = input( )
1 2 3
>>> x = ( int( i ) for i in s.split( ) )
>>> x
( 1, 2, 3 )

```

You can also use a generator expression to assign the extracted integers to individual variables.

```
>>> s = input( )
1 2 3
>>> a, b, c = ( int( i ) for i in s.split( ) )
>>> a
1
>>> b
2
>>> c
3
>>> a + b + c
6

```

That's all. Note that these methods work for any numerical data type, not just integers.

If you're used to map( ), then by all means continue using it because it's a great tool. But please, let us not propagate the use of map( ) to new Python learners, when a simple 'for' loop is more Pythonic and can be used to do the job neatly and efficiently.

- Sharif Muhaha

Sunday, May 13, 2018

যে প্রজেক্টটা অলরেডি অনেকদূর ডেভলপ করা হয়েছে অন্য ডেভলপার দ্বারা। সেই ডেভলপারের বদলে আপনাকে দায়িত্ব দেয়া হলো।

"ধরুন, আপনাকে একটা প্রজেক্টের জন্য হায়ার করা হলো, যে প্রজেক্টটা অলরেডি অনেকদূর ডেভলপ করা হয়েছে অন্য ডেভলপার দ্বারা। সেই ডেভলপারের বদলে আপনাকে দায়িত্ব দেয়া হলো।

প্রজেক্ট এর কোডবেজ ওপেন করেই বুঝলেন অনেক কপ্লেক্স আর পেচানো হয়ে আছে এবং আগের ডেভলপার তার পার্সোনাল ফ্লেভারে ডেভলপ করেছে (কমেন্ট, ডক স্ট্রিং ইত্যাদি বলতে গেলে নেই)।

এই মুহুর্তে আপনার দায়িত্ব কি হবে?

অর্থাৎ আরেকজন ডেভলপারের কোনো লার্জ স্কেল প্রজেক্ট এ আপনাকে মডিফাই, আপডেট, বাগ ফিক্স, নতুন কিছু এড ইত্যাদি কাজ করতে দিলে আপনি কিভাবে আগাবেন?"

**কোড পড়ে বুঝতে হবে প্রথমে । এইটা চ্যালেন্জিং হবে । অন্য ডেভেলপারের জানার বা স্কিলের ঘাটতি থাকতে পারে, যেমনটা আমারও আছে, তাই তার কোড যত বেশী জাজমেন্টাল হয়ে এ্যানালাইজ করতে যাবেন, নিজের মধ্যে ততো বেশী বায়াস কাজ করবে, ভিতর থেকে একটা বাধা আসবে । জাজমেন্টাল হওয়া যাবে না ।

আগের ডেভেলপারের স্টাইলটা বোঝার চেষ্টা করতে হবে, তাহলে কোড এক্সপ্লোর করতে পরে সুবিধা হবে । মডার্ন আইডিই ব্যবহার করতে হবে যাতে দ্রুত কোড এক্সপ্লোর করা যায়, প্রয়োজন হলেই যাতে ক‌োথায় কি হচ্ছে সেটা সহজে খুজেঁ পাওয়া যায় ।

আগের ডেভেলপারের কোড এবং প্রোডাক্ট রিকয়ারমেন্ট বুঝে ফেললে কাজ করতে খুব একটা অসুবিধা হবে না ।

যদি বিজনেস ফাস্ট পেইসড হয় এবং রেগুলার আপডেট দরকার হয় তাহলে এবার আপনি নতুন ফিচার এ্যাড করুন, বাগ ফিক্স করুন, নিজের নতুন কোড যতটুকু পারা যায় স্ট্যান্ডার্ড মেইনটেইন করে লিখুন । সেই সাথে সাথে পুরানো কোড অল্প অল্প করে রিফ্যাক্টর করুন ।

আর যদি দেখেন প্রোডাক্ট মার্কেটে ভালো পজিশনে আছে, মেইনটেন্যান্স করার মত সময় হাতে আছে, তাহলে ম্যানেজমেন্ট এর সাথে কথা বলে ২-৩টা রিফ্যাক্টর স্প্রিন্ট শুরু করুন ।

বিজনেস ভ্যালু কে আমি সবসময়ই কোড কোয়ালিটির চেয়ে প্রাধান্য দিবো । বিজনেস সফল হলে পরে রিফ্যাক্টর করা যায়, পুরোটা নতুন করে রি-রাইট করার মত সময়ও বাজেট থাকে । বিজনেস ফেইল করলে হাই কোয়ালিটি কোডও কাজে আসে না ।
- Abu Ashraf Masnun

** আগের অফিসের সিনিয়র কলিগ ভাই যিনি নিউজক্রেড থেকে এসেছিলেন, উনি বলতেন - "আমরা যদি ম্যানেজমেন্ট বা বিজনেসের কথা মাথায় না রেখে শুধু কোড কোয়ালিটি নিয়ে চিন্তা করি তাহলে সেই কোড জাদুঘরে সুন্দর করে সাজিয়ে রাখা যাবে। বিজনেস হবে না"
- Hasan Abdullah

** ১/ ল্যাঙ্গুয়েজ ফ্রেইমওয়ার্ক। প্রত্যেক ল্যাঙ্গুয়েজের (ফ্রেইমওয়ার্কেরো) কিছু নিজস্ব ডিজাইন প্যাটার্ন, বেস্ট প্রাকটিস ইত্যাদি রয়েছে, যার ফলে নিজেদের অজান্তেই প্রতি ডোমেইনের প্রোগ্রামারগণ একটা কমন ধারায় প্রোগ্রামিং করে থাকেন। যদি আপনার ভাগ্য ভাল থাকে এবং আপনার আগের প্রোগ্রামাররা সাউন্ড মাইণ্ডেড হয়ে থাকেন তাহলে আপনার বুঝে উঠতে কষ্ট করা লাগবে না। যদি তারা (অথবা আপনি) পাস্তাপ্রেমী হয়ে থাকেন, তাহলে কেউই সুখী হবেন না।

২/ ইস্যু, গিট হিস্টরি, কমিট ম্যাসেজ। দেখার চেষ্টা করুন তাদের কর্মধারা সময়ের উর্ধক্রমে। যদি এইগুলি না থাকে তাহলে, আবারো, সুখী হওয়া মুস্কিল হয়ে দাঁড়াবে।

৩/ লেয়ারে ভাগ করুন, এপিআই লেয়ার, ডাটাবেজ লেয়ার, মডেল, ভিউ, কন্ট্রোলার, আসলে এই বিভক্তি আপনার প্রজেক্টের উপর। এরপর এক একটা লেয়ার ধরুন ও সাবার করুন।

৪/ কমেন্ট ও ডকুমেন্টেশান আসলে কিছুটা ওভাররেইটেড, বিশেষ করে যদি র‍্যাপিড ডেভেলপমেন্ট ফ্রেইমওয়ার্ক অথবা প্রপার আজাইল ব্যবহার করা হয়। যেমন ধরুন, রেইলস অথবা জ্যাঙ্গো কিন্তু অনেক খানি সেলফ ডকুমেন্টিং। ওটা নিয়ে ভয় না পাইলেও চলবে।

৫/ একি কথা বলা যায় ডাটাবেস ডিজাইন ডিয়ায়াগ্রাম নিয়ে, অনেক টুল দিয়ে কিন্তু আপনি নিজেই ইন্ট্রোস্পেক্ট করে বার করে আনতে পারেন ডাটা ডায়াগ্রাম।

৬/ টেস্ট কেইস থাকলে তো সোনায় সোহাগা।
- Arnab Bagchi

Monday, March 5, 2018

এখন আমরা কিভাবে প্রোডাক্ট চুজ করছি [Amazon Affiliate Marketing]

অনেকেই প্রোডাক্ট সিলেক্ট করে কিছু প্যারামিটারের উপর ভিত্তি করে। যেমন রিভিও সংখ্যা, রেটিং কেমন, রিভিও গুলো নেগেটিভ কিনা, প্রাইস। একেক জন একেক ভাবে করে। কেউ ৫, কেউ ১০ আবার কেউ ২০ টি প্রোডাক্ট চুজ করে। তবে বেশির ভাগ ক্ষেত্রেই ১০ টি করে প্রোডাক্ট নেয়। প্রোডাক্ট গুলো নেয়ার পর তাদের সম্পর্কে কিছু ডেসক্রিপশন লিখে, প্রোস এন্ড কনস লিখে.

সমস্যা কি হচ্ছে
অনেক রকম সমস্যা হয়। এসইওতে কি ধরনের সমস্যা হতে পারে সেটা আগের ভিডিওতে লিখেছি। ভিডিওটির লিঙ্ক নিচে পাবেন। সেটা প্যান্ডা আপডেট রিলেটেড। থিন ও ডুপ্লিকেট কনটেন্স সমস্যা।

কিন্তু এখানে যে সমস্যা আমি মূলত দেখি সেটা হলো এই লিস্ট ইউজারদের জন্য তেমন অর্থবহ না। অনেক ক্ষেত্রেই বিরক্তকর। অনেকেই বুজতে পারে এটা জাস্ট এফিলিয়েট ইঙ্কামের জন্য তৈরি করা। আবার এভাবে প্রোডাক এড করলে রিডাররা কি সেই গুলো দেখে কিনে কিনা আমার যতেস্ট সন্দেহ আছে। দুই একজন হয়তো আমাজনে লিঙ্কে ক্লিক করলে যায়। কিন্তু অধিকাংশই বাউন্স করে।

বাউন্স নানা ভাবেই সাইটের জন্য সমস্যা। সেটি কেমন সেটা অনেকেই জানে। আমি হয়তো পরে কোন দিন এই নিয়ে আমার ব্যাখ্যা তুলে ধরবো।

আমরা যে প্রোডাক্ট গুলো নিলাম সেই গুলোই কি সাম্ভাব্য ক্রেতার জন্য বেস্ট চয়েজ?

উপরের জাজমেন্ট ক্রাইটেরিয়াতে নিলেই আসলে ১০টি বেস্ট প্রোডাক্ট যে আমরা দাবী করছি সেটা আসলে সঠিক না।
অন্য প্রোডাক্ট রিভিও সাইট তাহলে কিভাবে করে? তারা সত্যি অর্থেই সেই গুলো রিসার্চ করে। টেস্ট করে। তারপর রেটিং করে। তারপর নির্দিস্ট কিছু ক্রাইটেরিয়ার উপর ভিত্তি করে প্রোডাক্ট গুলো সাজায়।

আমরা কি টেস্ট করে এভাবে প্রোডাক্ট সিলেক্ট করতে পারবো। নিশ্চিত করেই না।

সমাধান কি

আমরা এমন কিছু সোর্স ইউজ করতে পারি । এতে করে একেবারে আন্দাজে প্রোডাক্ট নির্বাচনের প্রসেস থেকে কিছুটা ইম্প্রুভ ওয়েতে করতে পারি। এতে আমরা রিডারের কাছে যে লিস্টটা দিবে সেটা তুলনামূলক ভাবে অর্থবহ হবে।

ইউটিউব হলো সেই বিশেষ সোর্স।

ইউটিউবে প্রোডাক্ট রিভিও করে এমন অনেক মার্কেটার আছে। অনেক বড় বড় কোম্পানী যেমন আছে ঠিক তেমনি অনেক ইন্ডিভিজুয়াল মার্কেটার এবং প্রোডাক্ট ইউজার আছে যারা প্রোডাক্ট রিভিও করে থাকে। প্রোডাক্ট সিলেকশনের জন্য ইউটিউবের এই তিন ধরনের উৎসকে আমরা খুব ভালো ভাবে ব্যবহার করতে পারি।
যে সমস্থ বড় রিভিও সাইট আছে তাদের সাইটে যে পোস্ট তারা করে অনেকটা সেই পোস্টের উপর ভিত্তি করেই তাদের ভিডিও কনটেণ্ট তৈরি করে।

এমন অনেক সাবজেক্ট ম্যাটার এক্সপার্ট আছে যারা কেবল মাত্র ইউটিউবে কনটেন্ট তৈরি করে। তারা যেহেতু সাবজেক্ট মেটার এক্সপার্ট তারা সেই টুল বা প্রোডাক্ট সম্পর্কে অনেক গভীর জ্ঞান রাখে। তারা জানে যে কোন প্রোডাক্ট কেমন।তাদের নির্বাচিত প্রোডাক্ট গুলোকে অনায়াসে আমরা আমাদের রিভিও রাউন্ড-আপ কনটেণ্টের জন্য নিতে পারি।

যেমন https://www.youtube.com/watch?v=3920R1zIvCs
এই ভিডিওটিতে যিনি করেছেন তিনি সাবজেক্ট ম্যাটার এক্সপার্ট। উনার করা লিস্ট অবশ্যয় তার জ্ঞান,অভিজ্ঞতা ও দক্ষতার উপর নির্ভর করে তৈরি করেছেন। উনার এই লিস্টে যে প্রোডাক্ট গুলো আছে আমরা তা নিলে ধরে নিতে পারি যে আন্দাজে প্রোডাক্ট চুজ করার চেয়ে ভালো হবে। এতে করে আমাদের সাইটের ভিজিটররা অনেক ভালো গাইডলাইন পাবে।

যারা প্রোডাক্ট ব্যবহার করে তাদের অনেকেই ঐ প্রোডাক্ট নিয়ে রিভিও লেখে। অনেকে আবার ইউটিউবে প্রফেশানালি রিভিও কনটেণ্ট তৈরি করার জন্য প্রোডাক্ট কিনে, ব্যবহার করে তার নানা ফিয়েচার তুলে ধরে। তারা যে প্রোডাক্ট গুলো চুজ করে সেই গুলো কে নিয়ে আমরা আমাদের প্রোডাক্ট লিস্ট তৈরি করতে পারি।

সেই ক্ষেত্রে এই লিস্ট অপেক্ষাকৃত অর্থবহ হবে।

আমরা কি তাদের ভিডিও আমাদের পেইজে এমবেড করবো?

আপনি তাদের ভিডিও এমবেড করবেন না। এখন পর্যন্ত কেবল ইউটিউব ব্যবহার করে কিভাবে অপেক্ষৃত অর্থবল প্রোডাক্ট লিস্ট তৈরি করতে পারি তা তুলে ধরেছি।

প্রোডাক্ট লিস্ট তৈরি করার পরের কাজ হলো প্রোডাক্টের রিভিও লেখা। সেইটি আলাদা করেই আপনাকে করতে হবে। সেই ক্ষেত্রে ঐ সব ভিডিওতে পাওয়া তথ্য আপনার ডেসক্রিপশনে আপনার মতো করে তুলে ধরতে পারেন।

সেটা কিভাবে সেটাই আমরা ভিডিওতে দেখবো ( পাবলিশ হবে শীঘ্রই) ।

* Abul Kashem

Saturday, February 24, 2018

গণিতের নামে আমরা একঘেয়ে হিসাব করা শিখাই

ভাষার মাসে একটা অন্যরকম ভাষা নিয়ে কথা বলি। লম্বা লেখা, তবে আশা করি নতুন কিছু চিন্তার খোরাক জুটবে। স্টিফেন উলফ্রামের (Stephen Wolfram) সাথে গত মাসে এমআইটিতে একটি টকে কথা বলার সুযোগ হয়। বিশিষ্ট গণিতবিদ ও পদার্থবিদ। ম্যাথমেটিকা সফটওয়্যারের প্রধান আর্কিটেক্ট উনি। এআই নিয়ে তাঁর চমৎকার আইডিয়াগুলো আরেকদিন লিখব। তবে এই এআইয়ের যুগে পড়াশোনার কারিকুলাম ও আমরা কিভাবে গণিত করি এবং শিখি, তা নিয়ে উনার কিছু কথা আমার ব্যক্তিগত চিন্তার সাথে খুব মিলেছে। সেটা হচ্ছেঃ গণিতের নামে আমরা একঘেয়ে হিসাব করা শিখাই। সেই ক্লাস ওয়ান থেকে যেভাবে ২ + ২ = ৪ শেখানো হয়, তা কিন্তু আন্ডারগ্র্যাজুয়েট বা গ্র্যাজুয়েট লেভেলেও পরিবর্তন হয় না অনেক সময়। কিন্তু গণিত কি আসলে এটাই? কিভাবে এর কারিকুলাম পরিবর্তন করা উচিত?

গণিত একটি ভাষা। মানবজাতির সৃষ্ট ভাষার মধ্যে সম্ভবত সবচেয়ে কৃত্রিম কিন্তু এলিগ্যান্ট। এর বদৌলতে আমরা যেকোন ঘটনাকে বর্ণনা করতে পারি একজন আরেকজনের কাছে। আবার সব ভাষার মতই এক বাক্যের বর্ণনাকে কাটাকুটি করে সেই বাক্যকে সরলীকরণ করতে পারি। দুঃখর কথা হচ্ছে যে এই ব্যাপারটা ছাত্রদের পরিষ্কার করে বলা হয় না। GRE পড়লে ভোকাবুলারি বাড়ে, সেরকমভাবে নানা টেকনিক্যাল বিষয় পড়লে গণিত দিয়ে একটি ধারণাকে বর্ণনা করার ক্ষমতা বাড়বে। হ্যামিল্টনিয়ান বা লাগ্রাঞ্জিয়ান দিয়ে যা বর্ণনা করতে পারি, তাকে ডিফারেন্সিয়াল ইকুয়েশনে নিয়ে আসতে পারি, কিংবা সহজ ভাষায় লিখতে পারি F = ma. এই তিন প্যারাডাইমেই শব্দগুচ্ছকে ম্যানিপুলেট করার লজিক আলাদা, কিন্তু একই জিনিস বর্ণনা করা যায়। যত নতুন তথ্য দিতে চাবো, ততই বাক্যের পরিধি বাড়বে। সাধারণ ভাষার মতই। আবার সাধারণ ভাষা এবং গণিতের ভাষা একত্র করে না লিখলে আমরা সাধারণত বুঝতেই পারি না কি বলা হচ্ছে।

আমাদের বর্তমান কারিকুলামে ছাত্রছাত্রীদেরকে রোবট হিসেবে গণ্য করা হয়। আমাদেরকে অনেক হিসাবের উদাহরণ দেয়া হয়, যেমন ২ + 2 = ৪ ইত্যাদি busy work। এআই যেরকম অনেক উদাহরন থেকে বোঝার চেষ্টা করে what the hell is going on, আমরাও কিন্তু অনেক ক্ষেত্রে এখন তাই করি। উদাহরন শেখা ভালো কিন্তু কি কারনে উদাহরন শিখছি সেটাই অনেক সময় পরিষ্কার না, আবার একই ধরণের উদাহরন বারবার করালে একঘেয়েমি বাড়ে, কিন্তু তাইই বর্তমানে করানো হয়। ব্যাপারটা তখন আর কনসেপ্ট বেসড থাকে না, মুখস্ত বিদ্যার মত হয়ে যায়। বড় নামতার টেবিল মুখস্ত না করে আমরা ক্যালকুলেটর ব্যবহার করি। কিন্তু, নানা অপারেটর অ্যালজেব্রা দিয়েই গণিত বা পদার্থবিদ্যা/ইঞ্জিনিয়ারিং অনেক কোর্স চলে যায়। সেটা ২ + ২ = ৪ শেখার থেকে বেশি কিছু না। কিন্তু এই যুগে কম্পিউটার এসব খুব সুন্দরভাবে করতে পারে।

এরপরের স্টেপ হচ্ছে গণিতের ভাষার পাশাপাশি মানুষের ভাষায় গণিত করার জন্য কম্পিউটারকে তৈরি করা। wolframalpha এরকমই একটি সফটওয়্যার। স্টিফেনের মূল উদ্দেশ্য হচ্ছে আমরা মানুষের ভাষায় বলব এভাবেঃ "এই সার্ফেসের উপর সব চার্জকে যোগ করলে কত হয়?" আর কম্পিউটার একঘেয়ে হিসেবগুলো করে আমাদের জবাব দেবে। Div, Grad, Curl নিয়ে আমাদের প্রতি নিয়ত মাথা ঘামানোর দরকার নেই, এবং উচিৎ ও না। স্টিফেন তার নিজের হাই স্কুল পড়ুয়া মেয়েকে পাতার পর পাতা ক্যালকুলাসের অ্যালজেব্রার পিছে সময় নষ্ট করতে মানা করেছে। অর্থাৎ, আমাদের হাই স্কুল বা কলেজ গণিত সিলেবাস অনেকটুকুই সেই অর্থে বোগাস। wolframalpha নিয়ে স্কুল টিচাররা অনেক অভিযোগ পাঠায়, ছাত্ররা এটা ব্যবহার করে নাকি সব উত্তর বের করে ফেলে। তাতে আমাদের মত গোষ্ঠীর মানুষের তেমন একটা গা নেই, একটি কম্পিউটার যেই কাজ করতে পারে সেই একই কাজ কি মানুষের সারা জীবন ধরে শেখার দরকার আছে?

বেশিরভাগ কারিকুলাম এরকম mechanistic হিসাবে ভরা, অর্থাৎ আমরা একটা ছাত্রের জীবনের অনেক মূল্যবান সময় নষ্ট করছি। অথচ, আমাদের ভবিষ্যৎ ফ্রন্টিয়ার হওয়া উচিৎ এরকমঃ মানুষ আগে কনসেপ্ট বুঝে সমস্যা ব্রেকডাউন করবে, তারপর কম্পিউটারকে নিজের ভাষায় তা জিজ্ঞেস করবে ("সব চার্জ যোগ করে কত হয়?"), কম্পিউটারের তৈরি করা রেজাল্ট বুঝতে শিখবে, তারপর কিছু বিগড়ে গেছে নাকি তা বোঝার জন্য প্রয়োজনীয় একঘেয়ে mechanisitc জ্ঞান যা দরকার তা শিখবে। সারা বিশ্বের গণিত শিক্ষা এখন এর পুরো উল্টোভাবে চলছে। অর্থাৎ, আমাদেরকে কম্পিউটার সারানোর mechanistic বিদ্যা (মানে হিসাবে গণ্ডগোল ধরতে পারা) শেখানো হচ্ছে জীবনের প্রায় দুই দশক ধরে, কিন্তু এই যন্ত্র ব্যবহার করে কিরকম মজার কাজ করানো যায় সেটাই শেখানো হচ্ছে না। সেটা আসা উচিৎ শুরুতে। নাহলে গণিত হয়ে যায় পীড়াদায়ক একটা ব্যাপার, যেটা শুধু নিয়ম মেনে চলা মানুষরা কষ্ট করে শিখে নেয়। অনেকের কাছেই এটা একটা অত্যাশ্চর্য ব্যাপার হিসেবে রয়ে যায় সারা জীবন। এমনকি পিএইচডি নিয়ে বের হলেও আমরা অনেকে ধরতে পারি না গণিত আসলে কি, এবং কত সুন্দরভাবে একে ব্যবহার করা যায়।

প্রোগ্রামিং শেখার জন্য এখন এরকম টুল আছে, যেমন Scratch। সেটা দিয়ে শুরুতে “হেলো ওয়ার্ল্ড” না লিখে বাচ্চারা এখন সুন্দর সব গল্প তৈরি করতে পারে। গণিতের জন্য Scratch কি তৈরি করা যায়? যেখানে গাণিতিক মডেল দিয়ে গল্প তৈরি করা যাবে। সেটা খুব চমৎকার একটা ব্যাপার হবে।

(btw, এখনকার প্রোগ্রামাররা কম্পিউটারের কাছে একটি লজিক বোঝানোর জন্য জটিল ভাষায় কোড লিখে বড়াই করে, কিন্তু সেদিন খুব দূরে না যখন অনেক প্রোগ্রামারের কাজ স্বয়ংক্রিয় ভাবে করা যাবে। যেই কাজ এআই করতে পারে, তা কিন্তু খুব বুদ্ধিমত্তার কিছু না। মানুষ হিসেবে আমাদেরকে সৃজনশীল হওয়া শেখানো উচিৎ, রোবট হওয়া না।)

লেখাটা শেষ করি এলিয়েনদের জন্য নতুন ভাষা কিভাবে তৈরি করা উচিৎ, তা নিয়ে Arrival নামক ছবিতে স্টিফেনের ছেলের করা একটি কাজ শেয়ার করে। ছেলেমেয়েদের এরকম মজার, সৃজনশীল গণিত সমস্যা দেয়া উচিৎ আগে, নানারকম ফাংশন ব্লকের ভেতরে কি চলছে সেটা শেখা উচিৎ পরে।

* Nazmus Saquib

http://blog.stephenwolfram.com/2016/11/quick-how-might-the-alien-spacecraft-work/