Wednesday, February 22, 2017

প্রোগ্রামিং আড্ডা: জাভা প্রোগ্রামিং ও অ্যান্ড্রয়েড: দশটি প্রশ্নের উত্তর

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


আড্ডাটির ইউটিউব ভিডিও লিংকটিও নিচে দেওয়া হলোঃ




প্রশ্নঃ বাংলাদেশে তো জাভাতে কাজ করে এমন সফটওয়্যার ফার্মের সংখ্যা কম, সুতরাং জাভা শিখে কী লাভ আছে ?
উত্তরঃ বাংলাদেশে মোটেও জাভাতে কাজ করে এমন সফটওয়্যার ফার্মের সংখ্যা কম নয়। জাগবিডিতে একটা সার্ভে করা হয়েছিল তাতে যে সংখ্যা পাওয়া যায়, তার সংখ্যা মোটেও কম নয়। তাছাড়া সামগ্রিকভাবে বাংলাদেশের সফটওয়ার ইন্ডাস্ট্রি এতো বড় নয়। সার্ভেটির লিংক এখানে পাওয়া যাবে- https://goo.gl/O9mJf5


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

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


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


প্রশ্নঃ সি না শিখে কী জাভা শেখা যায়।
উত্তরঃ সংক্ষিপ্ত উত্তর, হ্যা। তবে সি প্রোগ্রামিং আপানাকে প্রোগ্রামিংয়ের ধারণা তৈরি করতে সাহায্য করে। এ নিয়ে ধারণা পেতে হলে যেতে পারেন এই লিংকে: http://cpbook.subeen.com/


প্রশ্নঃ অ্যান্ড্রয়েড প্রোগ্রামিংয়ের জন্য জাভার কোন ভার্সনটি মাথায় রাখা উচিৎ?
উত্তরঃ অ্যান্ড্রয়েড জাভা ৭ এর সবগুলো ফিচার সাপোর্ট করে। জাভা ৮ এর সবগুলো না হলেও একটা বড় অংশ সাপোর্ট করে। জাভা ৮ এর নতুন ফিচারগুলো সাপোর্ট করার জন্য অ্যান্ড্রয়েড একটি নতুন কম্পাইলার ব্যবহার করে নাম Jack. বিস্তারিত পাওয়া যাবে এই লিংকে: https://developer.android.com/guide/platform/j8-jack.html


প্রশ্নঃ জাভার এন্টারপ্রাইজ এডিশন কী?
সাধারণত অনেক বড় ধরণের ব্যবসা প্রতিষ্ঠানে ব্যবহৃত অ্যাপ্লিকেশনগুলোতে এন্টাপ্রাইজ শব্দটি ব্যবহার করা হয়। বর্তমানে করপোরেট ইনভাইরনমেন্টে এন্টারপ্রাইজ অ্যাপ্লিকেশন বলতে খুব জটিল, ডিস্ট্রিবিউটেড, কম্পোনেন্ট বেইজড এবং মিশন ক্রিটক্যাল (mission-critical) অ্যাপ্লিকেশন বোঝায়। মিশন ক্রিটিক্যাল অ্যাপ্লিকেশন হলো সেগুলো, যেগুলো কোনো একটি বিশেষ ব্যবসায়িক উদ্দেশ্যে অ্যাপ্লিকেশনটি ব্যবহার করা হয়, যার উপর সম্পূর্ণ ব্যবসাটি নির্ভর করছে। কোন কারণে অ্যাপ্লিকেশনটি কাজ না করলে ব্যবসাটি ক্ষতিগ্রস্থ হয়। এগুলো বিভিন্ন ধরণের প্লাটফর্মের জন্য তৈরি করা হয়, এবং করপোরেট নেটওয়ার্কস, রেসট্রিকটেড নেটওয়ার্কস, ইন্টারনেটের মাধ্যমে ব্যবহার করা হয়, এগুলো খুব ইউজার ফ্রেন্ডলি, ডেটাসেন্ট্রিক, সিকিউরড, এডমিনিস্ট্রটিভ হয় এবং সহজে ম্যানিপুলেট করা যায়। মোটকথা এন্টাপ্রাইজ অ্যাপ্লিকেশন হলো খুব কমপ্লেক্স অ্যাপ্লিকেশন। যেমন- ডাটা স্টোরেজ করা এবং ইউজার রেসট্রিকটেড করা, কাস্টোমার ইনভয়েস, ফ্লাইট বুকিং করা, ব্যাংকিং সিস্টেম অটোমেশন, হেল্থ কেয়ার সিস্টেম এগুলো এন্টারপ্রাইজ অ্যাপ্লিকেশনের উদাহরণ। এগুলোর মাল্টিপল ইন্টারফেজ থাকে পারে, রিমুট কমিউনিকেশন করতে পারে, উন্নত ধরণের গ্রাফিক্যাল ইউজার ইন্টারফেজ থাকে। এটি জাভা স্ট্যান্ডার্ড এডিশনের উপর ভিত্তি করে তৈরি ওয়েব এবং অনেক বড় মাপের এন্টারপ্রাইজ অ্যাপ্লিকেশন তৈরি করার জন্য যে সব কম্পোনেন্ট দরকার হয় তার একটি বিশাল প্যাকেজ। এগুলোকে আলাদা করে নাম দেওয়া হয়েছে জাভা এন্টারপ্রাইজ এডিশন (JEE)। উদাহরণস্বরূপ এর কম্পোনেন্টগুলো হলো-
  • Servlets
  • Java Server Pages (JSP)
  • Java Server Faces (JSF)
  • Enterprise Java Beans (EJB)
  • Java Transaction API (JTA)
  • Java Persistence API (JPA)
  • RESTful Web Services (JAX-RS)
  • Bean Validation
  • Unified Expression Language (EL)
  • Context and Dependency Injection (CDI)
  • Java Message Service message queue API's (JMS)
  • Java WebSocket
  • JSON Processing API (JSON-P)
  • etc.

কিছু এন্টারপ্রাইজ অ্যাপ্লিকেশনের উদাহরণ হলো -

  • কাস্টোমার রিলেশনশিপ ম্যানেজমেন্ট
  • এন্টাপ্রোইজ রিসোর্স প্ল্যানিং
  •  কর্পোরেট আইডেন্টি ম্যানেজমেন্ট
  • কল সেন্টার ও কাস্টোমার সাপোর্ট অ্যাপ্লিকেশন
  • হেল্থ ইনফরমেশন সিস্টেম
  • অটোম্যাটেড বিলিং সিস্টেম
  • ফিনান্সিয়াল, অ্যাকাউন্টিং অ্যাপ্লিকেশন
  • এন্টাপ্রোইজ কন্টেন্ট ম্যানেজমেন্ট
  • বিসনেস প্রসেস ম্যানেজমেন্ট
  • বিসনেস ইন্টেলিজেন্স সফটওয়্যার
  • হিউমেন রিসোর্স ম্যানেজমেন্ট
  • ডকুমেন্ট ম্যানেজমেন্ট সিস্টেম
  • ইন্টারনেট পোর্টাল
ইত্যাদি।
জাভা এন্টারপ্রাইজ এডিশন নিয়ে দ্বিমিকের এই কোর্সটি দেখা যেতে পারে। লিংক: http://dimikcomputing.com/course/javaee-online-course/

প্রশ্নঃ জাভা প্রোগ্রামিং বইয়ে কী কী আছে ?
উত্তরঃ একজন নতুন শিক্ষার্থীর জাভা প্রোগ্রামিং ভাষার যে যে বিষয়গুলোর দিকে নজর দেওয়া উচিৎ সে বিষয়গুলোই এই বইয়ে আলোকপাত করার চেষ্টা করা হয়েছে। বইটি মূলত যারা ইতিমধ্যে একটি প্রোগ্রামিং ভাষা যেমন সি প্রোগ্রামিং ভাষার কিছুটা ধারণা আছে এবং নতুন একটি প্রোগ্রামিং ভাষা বিশেষ করে অবজেক্ট ওরিয়েন্টেড প্রোগ্রামিং ভাষা শিখতে চায় তাদের উদ্দেশ্য করে লেখা হয়েছে। এতে অনেকগুলো বিষয় খুবই গুরুত্বপূর্ণ হওয়া সত্যেও বাদ দেওয়া হয়ছে। যেমন - থ্রেড (Thread), জাভা মেমোরি মডেল (Java Memory Model), অ্যানোটেশন প্রসেসিং (Annotation Processing), ল্যামডা এক্সপ্রেশন (Lambda Expression), নেটওয়ার্কিং (Networking) ইত্যাদি। তবে এগুলোর সবগুলো এডভান্স জাভা প্রোগ্রামিংয়ের জন্য প্রয়োজন হয়। পরবর্তী খণ্ডে যুক্ত করার ইচ্ছা পোষণ করছি।
বইটি সম্পর্কে আরো বিস্তারিত পাওয়া যাবে এই লিংকে: https://goo.gl/FpfSvO 

প্রশ্নঃ ওয়েব প্রোগ্রামিংয়ের ক্ষেত্রে জাভার গুরুত্ব কতটুকু?
উত্তরঃ বর্তমানে সব সফ্টওয়্যারগুলোই মূলত ওয়েব বেইজড হয়ে থাকে। ওয়েব বেইজ অ্যাপ্লিকেশন গুলোর দুটো অংশ থাকে। এক- ব্রাউাজারে রিপ্রেজেন্টেশন যাকে ক্লায়েন্ট সাইড বলা হয়। দুই- ব্যাকএন্ড প্রোগ্রামিং। ক্লায়েন্ট প্রোগ্রামিংয়ের জন্য জাভাস্ক্রিপ্ট ছাড়া আর কোনো উপায় এখনো বের হয়নি। সুতরাং আপনি যদি ওয়েব প্রোগ্রামিং ক্ষেত্রে ক্লায়েন্ট সাইডে কাজ করতে চান, তাহলে জাভাস্ক্রিপ্টের প্রতি গুরুত্ব দিতে হবে। জাভা মূলত ব্যবহার হয় ব্যাকএন্ড প্রোগ্রামিংয়ের ক্ষেত্রে। উপরের একটি প্রশ্নের উত্তরে জাভার ব্যবহার উল্লেখ রয়েছে। এছাড়া জাভা কেনো শেখা উচিৎ বা কোথায় কোথায় ব্যবহার হয় তার জন্যে আগের একটি পোস্ট দেখে নিতে পারেন। লিংক: http://www.bazlur.com/2017/01/why-should-we-learn-java.html


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