Thursday, December 4, 2014

Point of Existence

থাকা আর না থাকার মধ্যে পার্থক্য কোথায়? এই এতো মানুষ, প্রতিদিনই কত শত হাজার নতুন আসছে পৃথিবীতে , যাচ্ছেও সেরকম। এই যাওয়া আসার জন্যে কত-শত আয়োজন, কোলাহল, কত আরম্ভরতা।

এই মহা বিশ্বের সাথে আমাদের এই পৃথিবীকে তুলনা করলে তাকে ধূলি কণা বললেও ভুল হবে না। একটি ধূলি কণা নিয়ে পুরো জগতের মাথা ব্যথার কি বা কারণ থাকতে পারে ! কোন কিছু নিয়ে মন খারাপের কোন কারণ নেই। আমি আছি, থাকবো না এর মাঝের ব্যবধানটুকু অতি ক্ষুদ্র।

বায়ুমন্ডলের উপরিভাগে নানা রকম মহাজাগতিক রশ্মির ইন্টারসেকশনে তৈরি হয় মিওন যার লাইফ টাইম হচ্ছে ২ মাইক্রোসেকেন্ড। মুহূর্তেই হাজার হাজার কোটি তৈরি হয়, আলো কাছাকাছি বেগে পৃথিবীতে আঘাত হানে, তারপর নাই হয়ে যায়, তাতে কি আমার কিছু আসে যায়?  আমার মন খারাপ হলেও আলফা সেনচুরি-র কিছু আসে যায় না। তাহলে আমাদের এইসব জীবন যাপন অহেতুক?

সব কিছুই যেন ছোটন্ত ঘোড়া। ছুটে চলার আনন্দেই চলা। কেন এই ছুটে চলা, যার কোন মানে নেই। ছুটে চলার মাঝে কি আনন্দ আছে? আনন্দই বা কি? মস্তিস্কের অনুরণন?

এও হতে পারে এই সব যা দেখছি তার কোন কিছুই সত্যি নয়, শুধুই কারো ভাবনা ?

Monday, September 22, 2014

জাভা কীভাবে কাজ করে এবং কীভাবে ভাল পারফর্ম করে

জাভা কোড প্রথমে বাইটকোডে কম্পাইলড হয়, তারপর সেটিকে জাভা ভার্চুয়াল মেশিন এক্সিকিউট করে। বাইটকোড হচ্ছে এক ধরনের ইন্টারমিডিয়েড ল্যাংগুয়েজ যা কিনা ঠিক মানুষের পাঠ উপযোগী নয়, আবার মেশিনের জন্য ও নয়। এটি শুধুমাত্র জাভা ভার্চুয়াল মেশিন (JVM)পড়তে পারে। বাইটকোডকে এক্সিকিউট করার জন্য জাভা ভার্চুয়াল মেশিন জাস্ট ইন টাইম (JIT) কম্পাইলার ব্যবহার হরে। JIT বাইটকোড কে সরাসরি ইন্টারপ্রেট করে। এটি রানটাইম-এ বাইটকোড কে ইন্টারপ্রেট করে মেশিন কোড-এ রূপান্তরিত করে যা কিনা সিপিইউ রান করে। এখানে একটি ইন্টারেস্টিং প্রশ্ন হতে পারে, জাভা কি তাহলে ইন্টারেপ্রেটেট ল্যাংগুয়েজ নাকি কম্পাইল্ড ল্যাংগুয়েজ? উত্তর কিন্তু দুটোই । জাভা একি সঙ্গেসঙ্গে কম্পাইলড এবং ইন্টারপ্রেটেড ল্যাংগুয়েজ।


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


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

মজার ব্যপার হচ্ছে, জাভা ভার্চুয়াল মেশিন কিন্তু খুব-ই ইন্টেলিজেন্ট এনভায়রনমেন্ট এবং JIT নিজেও খুব-ই ইন্টেলিজেন্ট কম্পাইলার। উদাহরণস্বরূপ- JVM জানে যেকোনো মেথড কতবার কল করা হচ্ছে, কারণ JVM মেথড কল কাউণ্ট করে । যখন এই কাউন্ট একটি নির্দিষ্ট থ্রেসহোল্ডের বাইরে চলে যায়, তখন সেই মেথড-এর মেশিন কোডJVM রেখে দেয়, পরের বার আবার কল করা হলে, সেটি আর সেই মেথডকে ইন্টারপ্রেট না করে সরসরি সেই রেখে দেওয়া মেশিন কোড-কে দিয়ে দেয় যা কিনা বারবার বাইটকোড থেকে মেশিনকোড-এ ট্রান্সলেশান করার কস্ট কমিয়ে দেয়। আরও মজার ব্যাপার হচ্ছে, JIT কম্পাইলার, যে সব কোড খুব বেশিবার ব্যবহার করা হয়, সেগুলোকে অপটিমাইজ করে। JIT নানা ধররণের স্ট্যাটিসটিক্স কালেক্ট করে থাকে। রিসার্সে দেখা গেছে যে, 80% সময়ে আসলে মোট কোডবেইস এর 20% কোড এক্সিকিউট করা হয়। সুতরাং এই 20% কোড গুলো যদি আলাদা করা যায়, এবং এদেরকে অপটিমাইজ করা যায়, তাহলে কিন্তু হিউজ পারফরমেন্স গেইন করা যাবে। মজার ব্যপার হচ্ছে JIT আসলে তাই করে। এটি (hotcode) এই 20% কোড কে আলাদা করতে পারে এবং এদেরকে অপটিমাইজ করতে পারে। ওরাকলের জাভা ভার্চুয়াল মেশিন হটস্পট (hotspot)-এরf নাম হয়তো অনেকেই জানি, এটির নামকরণ করা হয়েছে এই জন্য যে, এটি এই হট স্পট গুলোকে আলাদা করতে পারে। জাভা যেহেতু JVM এর জন্য লেখা হয়, এবং JIT সেটিকে মেশিন কোড এ রূপান্তরিত করে, এটি কিন্তু রানটাইমে হার্ডওয়্যার এর ইনফরমেশন একসেস করতে পারে এবং তার উপর ভিত্তি করে অপটিমাইজ মেশিন কোড তৈরি করে পারে, যা কিনা C/C++ এর ক্ষেত্রে অনেক সময়ই সম্ভব হয়ে উঠে না।


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

Wednesday, March 26, 2014

স্বাধীনতা দিবসের শুভেচ্ছা

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

আধুনিক মানুষের দায়িত্বগুলো বুঝে নেওয়াটাও ব্যক্তিত্বের পরিচয় বহন করে থাকে। দেশকে পরিচর্যা করা খুব কঠিন কাজ নয়, নিজের জায়গা থেকে নিজের কাজটুকু সঠিক ভাবে করে যাওয়টাই দেশের পরিচর্যা। দেশ মূলত একটি সু-সংগঠিত সিস্টেম। সেই সিস্টেমের উপাদান গুলো একটি আরেকটির উপর নির্ভর করে।  একটি বিশৃঙ্খল হলেই তার প্রভাব অন্যগুলোর উপর পরে। এই জন্যে আমার মনে হয় প্রত্যেকটি মানুষের ফিলোসপিকাল দৃষ্টিভঙ্গি উন্নত হওয়া খুব বেশি জরুরি। নৈতিক দৃষ্টিকোণ থেকে একটা খুব ছোট ঘটনার ভাল মন্দ আলাদা করার পার্থক্য বুঝতে না পারলে সেটার প্রভাব বুঝতে পারাও কঠিন। উদাহরণ হিসেবে বলা যায়– একজন রিক্সাওয়ালা যেখানে ১০ টাকার পরিবর্তে ২০ টাকা ভাড়া নেয়, তারও প্রভাব অন্য যায়গায় পরে। একজন রিক্সাওয়ালর তার নিজের কাজের জন্যে গর্ব করার কথা ছিল কিন্তু অনেক সময় অন্যের দয়া কিংবা অনুগ্রহকে মিশিয়ে ফেলে কিংবা জোর করে অন্যকে বিপদে ফেলে। এটি একটা ছোট্ট সিস্টেম ইরর, যদিও আমরা সবসময় ইগনোর করে থাকি।

এই স্বাধীনতা দিবসে সবাইকে শুভেচ্ছা,  সেই সাথে সবার ব্যক্তিত্ববোধ জেগে উঠবে, সবাই দায়িত্বশীল আধুনিক মানুষ হয়ে উঠবে সেই কামনা ব্যক্ত করছি।

এর সাথে স্বাধীনতা দিবস নিয়ে অনেক ছোট বেলার লেখা একটা কবিতাও দিয়ে দিলাম।


তিক্ত ২৫ মুক্ত ২৬

আরক্ত পৃথিবী, আতিক্ত মানব
তমিস্র হিংস্রতায় অবগাহন;
আজ স্মরণে ব্যাথার স্মৃতি সব।
সুখ ও কৃষ্ণতায় উত্থিত মন, মনন।

ক্লান্ত দেহ, অবসন্ন মন, নিশুতি আকাশ
সুখনিদ্রা, ক্রমশ গভীর হতে রাত্রি
হঠাৎ শব্দ, মাতিল উগ্র গন্ধে বাতাস,
সেদিন; তীব্র ভয়, বাঁচিবার আর্তি।

কঠিন আচরে বাংলার ভূমি, অগ্নিদাহ্য নক্ত,
হা হা কার। করুণ আকুতি, চক্ষুষ্মান রক্তবন্যা।
সজ্জিত হানাদার মাতাল মন করছে সিক্ত
তারপর; চারদিকে ঘোষিত রব, আন বাংলার স্বাধীনতা।

Monday, December 9, 2013

A great place to learn and mingle



The Java User Group Bangladesh (JUGBD) is now formed and successfully finished its 2nd meetup in last week. We are doing great, it’s not an exaggeration.

For those who doesn’t know what is JUG, let me brief a little. Java User Groups (JUGs) are basically a group of enthusiastic people who loves java and develop product and service using Java related technology and love to share their knowledge with others. We get together in some place and then talk to each other, eat and have fun.





The primary vision of JUGBD is to continue meeting on very regular basis. As all the people are involved here are too much cool and enthusiastic, it always feels better to talk to each other and learning new things.

In August 2013, we had our first meetup. On this day, we formed the group with a few Java programmers of different software firms and with some students, both of whom were present at the event. Later we decide to have another meetup, which was held on 6th December 2013. This time, we received a huge response from the programmers here in Dhaka, a lot of them were physically present and most of them supported us. We had three speakers at this event. They gave a talk on how Java technology influenced other technology, big data (Cassendra) and JVM diagnostic. All of the talks were excellent.

A lot of software firm are stepping forward to help our events. Meetup 2.0 was sponsored by Therap Services, LLC. In addition, we got our sponsor for the next meetup already, which is really helpful to our community. We greatly appreciate this sort of help.



Right now, we are looking to contribute to some open source projects and thus we are looking for problems, ideas. Here is an open invitation to everybody: if you are a java programmer, enthusiastic about learning new stuff and love to talk about technologies, please join us. It’s a great opportunity for us to learn and mingle.



Thursday, June 27, 2013

Do we have programming freedom ?

There is no such thing as true freedom. This is probably a true realization. As I understand it, freedom means-  minimizing the level of dependence. As a programmer, we love to think that we have a true freedom in the computer, as it seems we can do whatever we want to do. It is true, at least in theory, but in practice, we are simply in the opposite. We think about a problem and make a conceptual design in our mind to solve that particular problem, then select a programming language to implement. This is a typical scenario.

But the problem is to map our conceptual model into the programming language. This is not an easy task to do as we are heavily dependent on programming infrastructure. Sometimes we wait for the language designer to update certain things (we used to joke about Java updates), and if it requires additional power from the IDE, we must wait for the IDE vendor. Most importantly programming language has simple, and few notations that can be expressed in comparison with our natural language. Most of the cases us the programmers spend our time finding ways to express our conceptual model with programming level abstractions which are difficult and not creative and more or less waste of time.

So where is our freedom? Are we not locked in some ways.

Saturday, March 31, 2012

ভবিষ্যৎ জাভা ডেভলপারদের স্বাধীনতা

তোমরা কি জানো ব্রাজিলে সবচেয়ে জনপ্রিয় টেকনোলজি হচ্ছে জাভা, হয়তো অনেকেই জেনে থাকবে, না জানলেও সমস্যা নেই, এখন জেনে নাও। আজকে একজন ব্রাজিলিয়ান এর সাথে পরিচয় করিয়ে দেবো যার নাম হচ্ছে ব্রুনো সোজা। তাকে সাধারণত জাভা-মানব বলে ডাকা হয়। এই জাভা-মানব সত্যিকার অর্থেই জাভা-মানব। তার সব কাজ জাভা নিয়ে। তিনি সুজাভা (SouJava-Java Technology Users Society) এর প্রতিষ্ঠাতা। তাকে নিয়ে গুগল করলেই অনেক কিছু জানতে পারবে। আমি নিচে তার ব্লগ লিংক এবং টুইটার আইডি দিয়ে দেবো, তোমরা ইচ্ছে করলে তাকে ফলো করতে পারো। যাহোক কিছুদিন আগে ভবিষ্যৎ জাভা ডেভেলপার নিয়ে একটি প্রজেন্টেশান দিয়েছেন। তার একটা ইন্টারভিও আমি পড়লাম। সেখানে তিনি ভবিষ্যৎ জাভা ডেপলপার দের কিছু স্বাধীনতার কথা বলেছেন। আমার আজকের নোটটি হবে সেগুলো নিয়ে। তোমাদের যদি সেগুলো ভাল লাগে, তাহলে নিজেকে জাভা ডেভেলপার হিসেবে তৈরি করতে পারো।

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

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

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

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

এবং আরেকটি স্বাধীনতা হলো তুমি যেখানে খুশি সেখান থেকেই শুরু করতে পারো।  জিনিসটা হচ্ছে তোমার আসলে সেই যোগ্যতা আছে, তুমি যে কোন যেখানে খুশি সেখানেই কাজ করতে পারো। তোমাকে একটা রুমের মধ্যে কিংবা একটা দেশেরর মধ্যে আটকে থাকতে হবে না।

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

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

Bruno Ferreira de Souza
twitter: @brjavaman

Sunday, January 29, 2012

অবজেক্ট ওরিয়েন্টেড কনসেপ্ট এবং আমার আলসেমি

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

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

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

আমি যে অলস তা নিয়ে আরেকটু বলি, সেটা হলো যে ভদ্রলোক আমাকে টাকা পাঠিয়েছেন, উনি আমাকে দুই সপ্তাহ থেকে মেইল করেই যাচ্ছেন যেন আমি যেন গিয়ে টাকাটা তুলি। উনি টাকা পাঠানোর তিন সপ্তাহ পর আমি টাকা তুলে আনলাম।
শেষে বলি তুমি যদি অলস না হও, তুমি আসলে খাটি প্রোগ্রামার হতে পারবে না।