17 October, 2017

Programming,Web Developing & Software Engineering : Beginners Confusions From a Beginner

“ Hello World ” ; আসসালামু আলাইকুম।সবাইকে শুভেচ্ছা।আমি সানোয়ারুল ইসলাম, বেগম রোকেয়া ইউনিভার্সিটিতে ইলেকট্রনিক্স এন্ড টেলিকমিউনিকেশন ইঞ্জিনিয়ারিং-এ পড়ছি।আমি আজকে প্রোগ্রামিং ,ওয়েব ডেভেলপিং এবং সফটওয়ার ইঞ্জিনিয়ারিং ফিল্ডে একেবারে শুরুর দিকে আমরা বিগিনাররা যে সকল কনফিউশনে ভুগি সে সকল কনফিউশন নিয়ে আমার সামান্য অভিজ্ঞতার আলোকে কিছু বলব।
নতুন অবস্থায় আমাদের সবার মধ্যে যে কনফিউশনটা কাজ করে তা হলোঃ আমি তো কম্পিউটার সায়েন্সে পড়ি না, আমি কি একা একা কোডিং শিখতে পারবো? একাই শিখে কি ওয়ার্ল্ড ক্লাস ওয়েব ডেভেলপার বা সফটওয়ার ইঞ্জিনিয়ার হতে পারবো? সম্ভব? এর উত্তরে বলা যায়ঃ প্রোগ্রামিং বা কোডিং কিন্তু একটা স্কিল, এটাকে আমরা মিউজিকের সাথে তুলনা করতে পারি।মিউজিকে যেমন ইন্সট্রুমেন্ট সমন্ধে কিছু ধারনা থাকতে হয়, এবং প্রাকটিস করে করে এবং অভিজ্ঞতা অর্জনের পর ওয়ার্ল্ড ক্লাস মিউজিক ক্রিয়েট করতে পারা যায় ঠিক সেভাবেই প্রোগ্রামিংয়েও বিভিন্ন টুলস যেমনঃ প্রোগ্রামিং ল্যাঙ্গুয়েজ, বিভিন্ন ফ্রেমওয়ার্ক,লাইব্রেরী ইত্যাদি ইত্যাদি ব্যাবহার করে অভিজ্ঞতা অর্জের মাধ্যমেই ওয়ার্ল্ড ক্লাস ওয়েবসাইট, ওয়েব এপ্লিকেশন ও সফটওয়ার তৈরী করতে পারা যায়। তাই বলা যায়ঃ প্রোগ্রামিং এর জন্য আসলে কম্পিউটার সায়েন্সে পড়তেই হবে এমন কোন বাধ্যবাধকতা নাই।তবে, এই ফিল্ডে আসার জন্য অবশ্যই কঠোর পরিশ্রম করার ইচ্ছা থাকা চাই। প্রব্লেম সলভিংয়ে সময় দেয়ার ইচ্ছা থাকা চাই।ওয়ান ক্লিকে এত ডলার কামাই করা আর সফটওয়ার ইঞ্জিনিয়ারিং এক কথা না।এর জন্য প্যাশন থাকতে হয়।বিষয়টা ফিল করতে হয়।পরিবার, বন্ধু মহলের পাশাপাশি নিজের অনেক শখ আহ্লাদকে সেক্রিফাইজ করতে হয়।
১। প্রথমতঃ যে সমস্যাটা হয় সেটা হলঃ কোন ল্যাঙ্গুয়েজটা দিয়ে শেখা শুরু করব? - বেশীর ভাগ এক্সপার্টের মতে, এবং আমি নিজেও যতটুকু শিখেছি তাতে মনে করি নতুনরা যারা সত্যিই প্রোগ্রামিং শিখতে আগ্রহী তাদের অবশ্যই ‘সি’ ল্যাঙ্গুয়েজ দিয়ে শুরু করা উচিত।এতে নতুনরা মেমোরি, টাইম কম্পেক্সিটি,রান টাইম ইত্যাদি সম্পর্কে সর্বপরি সিনট্যাক্সের ক্ষেত্রে সতর্কতা জিনিসটা কি শিখতে পারবে।কারনঃ সি কেস সেনসেটিভ।অর্থাৎঃ "Hello" আর “HELLO" কিন্তু সি ল্যাঙ্গুয়েজে আলাদা জিনিস।’সি’ দিয়ে কেন শুরু করা উচিত এ সম্পর্কে জানতে গুগল করতে পারো। দ্বিতীয়তঃ শেখার সময় কোন আইডিই,এডিটর ও প্লাটফর্ম ইউজ করব? - এর উত্তরে বলবঃ আমরা যেহুতু উইন্ডোজের সাথে মোটামুটি পরিচিত, সুতরাং ‘নতু্ন কিছু’ ট্রাই করার জন্যই বলো আর শেখার জন্যই বলো আমার পরামর্শ থাকবে ‘লিনাক্স’ ট্রাই করার জন্য। এটা সম্পূর্ণ ফ্রি এবং ওপেন সোর্স। তুমি ইচ্ছে করলেই তোমার অপারেটিং সিস্টেমে নতুন কিছু যুক্ত করতেও পারবে।এ রকম হাজারো এডভান্টেজ আছে ‘লিনাক্স’-এর নেটে ঘাটলেই পাওয়া যায়।তৃতীয়তঃ ‘সি’ শেখার পাশাপাশি ‘ডিস্ক্রিট ম্যাথমেটিকস’ শেখা শুরু করে দিতে হবে।এবং এমন ভাবে শিখতে হবে যাতে পরবর্তীতে এগুলোর কন্সেপ্ট গুলো প্রোগ্রামে কাজে লাগানো যায়।
২। ‘সি’ এর ব্যাসিক সিনট্যাক্স শিখেই কোন একটা অনলাইন জাজে ( যেমনঃ URI OJ , UVA , Light OJ ) প্রব্লেম সলভ করা শুরু করে দিতে হবে। শুরুর দিকের কিছু প্রব্লেম সলভ করতে পারলেও পরে গিয়ে একটু হোচট খেতে হয়।এর জন্য আসলে ম্যাথমেটিকাল ও নিজের লজিক ডেভেলপ করেতে হবে। এর জন্য ‘ডাটা স্ট্রাকচার ও এলগরিদম’-এর কিছু বই/টিউটরিয়াল ঘেটে মোটামুটি ব্যাসিক বিষয় গুলো শিখে নিতে হবে। এবং এগুলো ইমপ্লিমেন্ট করতে জানতে হবে খুউউউব-ই ভালো করে।তারপর আবার অনলাইন জাজে প্রব্লেম সলভ করতে হবে এগুলো ব্যাবহার করে। আসতে আসতে নিজের ভেতর ‘প্রোগ্রামিং’ সত্ত্বা জেগে ওঠা শুরু করে দিবে এই পর্যায়ে।প্রব্লেম সল্ভের মজা পেয়ে গেলে , একটা প্রব্লেম নিয়ে ঘন্টার পর ঘন্টা কাটানোর পর সল্ভ এর আনন্দ পেতে পেতে হয়তঃ এডভানসড লেভেলের সলভার ও হয়ে যেতে পারো।আর যদি মনে কর আমি মোটামুটি ব্যসিক জিনিস গুলো শিখে ফেলছি । বুঝতে পারতেছি যে কিভাবে, কোন ওয়ে তে একটা প্রব্লেম সলভ করেতে হয়।এখন আমি ডিরেক্ট ডেভেলপমেন্টে যেতে চাই।সেটাও করতে পারো।
৩। এখন সফটওয়ার ডেভেলপমেন্টের জন্য যা শিখতে হবে তা হলঃ ‘অবজেক্ট অরিয়েন্টেড প্রোগ্রামিং’ । এর জন্য ‘জাভা’ , ‘পাইথন’, বা ‘সি++’ শেখা যেতে পারে।আমার পরামর্শ থাকবে ‘জাভা’ ট্রাই করার জন্য। কারন , হালের ‘এন্ড্রয়েড’ অপারেটিং সিস্টেমের প্রায় সব এপ্লিকেশন-ই ‘জাভা’ ল্যাঙ্গুয়েজ দিয়ে বানানো।তাই ‘জাভা’ শেখার পর সরাসরি এন্ড্রোয়েড ডেভেলপিং এ যেতে পারবে।এর পর নিজেই বুঝতে পারবে কিভাবে কোন প্লাটফর্মের জন্য কোন পথে যেতে হবে।যেমনঃ এর পর যদি ‘আইওএস’ ডেভেলপমেন্টে যেতে চাও তাহলে ‘অব্জেক্টিভ সি’ বা ‘সুইফট’ ল্যাঙ্গুয়েজ শিখতে হবে।গেম ( ইউনিটি) সহ মাইক্রোসফট বেজড ডেভেলপমেন্টের দিকে যেতে চাইলে ‘সি শার্প’ ইত্যাদি শিখে নিতে পারবে।এ ছাড়াও ‘পাইথন’ ও শেখা যেতে পারে,এটা একটা পপুলার অবজেক্ট অরিয়েন্টেড ও স্ক্রিপ্টিং ল্যাঙ্গুয়েজ , হ্যাকিং শিখতেও অনেক কাজে লাগে।
৪। ওয়েব ডেভেলপমেন্ট এর জন্য যা জানতে হবেঃ ফ্রন্ট-এন্ডের জন্যঃ -HTML & CSS ( Bootstrap, W3.CSS etc. ) -Java Script ( jQuery, Angular.JS , JSON, AJAX, W3.JS etc. ) ব্যাক-এন্ডের জন্যঃ -PHP -SQL -Node.JS -ASP.NET -XML -Django এদের সব গুলোই যে শিখতে হবে তা নয়।ফ্রন্ট এন্ডের জন্য এইচটিএমএল এবং সিএসএস শিখতে হবে সাথে সিএসএস ও এদের বিভিন্ন লাইব্রেরী ও ফ্রেমওয়ার্ক গুলোর ব্যাবহার জানতে হবে অপর দিকে ব্যাক-এন্ডের জন্য যদি কেউ PHP শিখে তাহলে তার উচিত সেটাই ভালো করে শেখা।একই জিনিস PHP, ASP.NET , Node.JS দিয়ে করতে পারার চাইতে PHP দিয়ে যা ইচ্ছা তাই করার ক্ষমতা অর্জনের চেষ্টা করা উচিত।অর্থাৎ ব্যাক-এন্ডের জন্য একটা ল্যাঙ্গুয়েজ সিলেক্ট করে ( PHP টাই শেখা ভালো হবে) সেটা অনেক ভালো করে ইউজ করতে পারতে হবে।
৫। প্রোগ্রামিং কম্পিটিশন ছাড়া প্রোগ্রামার হওয়ার উপায় কি? -প্রোগ্রামিং কম্পিটিশন ছাড়াও ওপেন সোর্স প্রজেক্ট যেমনঃ GIT HUB এর বিভিন্ন ওপেন সোর্স প্রজেক্টে কন্ট্রিবিউশন করে ( যেমনঃ বাগ ফিক্সিং করে, বা কোন এক্সিসটিং প্রজেক্টে নতুন ও ইন্টারেস্টিং কোন ফিচার যুক্ত করে... ইত্যাদি) এবং অন্যের কোড এনালাইসিস করে শিখতে শিখতে মাস্টারি অর্জন করা সম্ভব।আর সেভাবে কন্ট্রিবিউশন রাখতে পারলে যে বা যারা প্রজেক্টের এডমিনিসট্রেটর আছেন তারা আপনাকেও তাদের প্রজেক্টে এড করে নেবে।পরবর্তীতে আপনি জবের ইন্টারভিউতে আপনার একাউন্টের লিংক ধরাই দিয়ে বলতে পারবেন আমি অমুক অমুক প্রজেক্টে এই এই কন্ট্রিবিউশন রাখছি।এপ স্টোরে ছোট্ট হোক বড় হোক বিভিন্ন এপ পাবলিশ করে নিজের কারিশমা দেখাই দিতে হবে।সফটওয়ার ইঞ্জিয়ারিং এর জবের ক্ষেত্রে এটা অনেক প্রভাব রাখে।যাই শিখি না কেন তা নিজের এপে ইমপ্লিমেন্ট করার ট্রাই করা উচিত।
আমি নিজেও কেবল শিখছি, কিচ্ছু পারি না বলা যায়। তাই আমার কন্সেপ্ট গুলোয় ভূল থাকা খুব স্বাভাবিক।ভূল থাকলে ধরিয়ে দেয়ার অনুরোধ করছি। আপনি থেকে তুমি,তুমি থেকে আপনি-র জন্য দুঃখিত।রিলেটেড কোন প্রশ্ন থাকলে করতে পারেন।জবাব দেয়ার চেষ্টা করব ইনশা আল্লাহ। ধন্যবাদ। You know, Peter Norvig told: “Teach Yourself Programming in Ten Years” So, no tension friends!. Click here for that popular writing on Programming carrier guideline & Follow: Sanoarul’s Blog #MidnightCoder

No comments:

Post a Comment