30 June, 2019

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

প্রোগ্রামিং বা সফটওয়ার ডেভেলপমেন্ট করেন যারা, তারা বেশির ভাগ সময়ই নিজ নিজ ডোমাইন অনুযায়ী বিভিন্ন ফ্রেমওয়ার্ক বা লাইব্রেরী ইউজ করে থাকেন।এন্ড্রয়েড, আইওএস, ওয়েব থেকে আইওটি বা গেম ডেভেলপমেন্ট সব ক্ষেত্রেই ফ্রেমওয়ার্ক বা লাইব্রেরীর বহুল ব্যাবহার দেখা যায়। আজকে জানবো ফ্রেমওয়ার্ক বা লাইব্রেরী ইউজ করার সুবিধা কি বা এর প্রয়োজনীয়তা সম্পর্কে।
বর্তমানে যারা ওয়েব ডেভেলপমেন্ট করেন তারা ফ্রন্ট-এন্ড সলিউশন হিসেবে জাভাস্ক্রিপ্টের কোন ফ্রেমওয়ার্ক বা লাইব্রেরী যেমনঃ এঙ্গুলার, রিয়াক্ট, ভিউ, এম্বার ইত্যাদি ইউজ করে থাকেন। ব্যাক-এন্ড সলিউশনের জন্য পিএইচপির লারাভেল, সিম্ফনি, কোডেগনাইটর, স্লিম বা জাভাস্ক্রিপ্ট (নোড) এর এক্সপ্রেস বা জাভার স্প্রিং, সি# এর এএসপি ডট নেট বা পাইথনের জ্যাঙ্গো বা ফ্লাস্ক ইউজ করে থাকেন।
তো ‘র’ কোডিং না করে ডেভেলপাররা কেন এগুলো ইউজ করে থাকেন? বিগিনার লেভেলে এ ব্যাপারটা অনেকেই বুঝে উঠতে পারি না আমরা।
আমরা সাধারণত সব প্রোজেক্টেই কিছু কমন ফাংশনালিটি বা কম্পোনেন্ট নিয়ে কাজ করে থাকি। যেমনঃ ফ্রন্ট-এন্ডের জন্য কিভাবে কম্পনেন্ট গুলো ম্যানেজ করা যায়, টু-ওয়ে ডাটা বাইন্ডিং, এজাক্স রিকোয়েস্ট হ্যান্ডেলিং, ফর্ম ভেলিডেশন, মেসেজ শো করানো, লিস্ট কার্ড ক্যারোসেল ডাটাটেবিল এরকম কমন টাইপের কিছু কম্পোনেন্ট বার বার ইউজ করা হয়ে থাকে। তো বার বার এই এইসটিএমএল, সিএসএস আর এর জন্য জাভাস্ক্রিপ্ট লেখাটা অনেক ঝামেলা আর বোরিং কাজ। কেমন হত যদি আমরা আমাদের কমন কম্পোনেন্ট গুলোকে রি-ইউজ করতে পারতাম বিভিন্ন প্রোজেক্টে? অর্থাৎ শুধু ক্ষেত্র বিশেষে কিছু স্টাইলিং ও স্ক্রিপ্ট চেঞ্জ করব এবং রি-ইউজ করতে পারবো? হালের রিয়াক্ট, এঙ্গুলার বা ভিউ কিন্তু এই সুবিধা গুলিই প্রোভাইড করে থাকে। অর্থাৎ কম্পোনেন্ট গুলো ও তাদের ফাংশনালিটি রি-ইউজ করতে পারি আমরা। বার বার একই কাজ করতে হয় না।
একই ভাবে ব্যাকএন্ড এর জন্য ইউজার রেজিস্ট্রেশন, লগিন, অথেনটিকেশন চেক, সেশন, ই-মেইল, এসএমএস, পুশ নোটিফিকেশন, ডাটাবেজ কোয়েরি করা, রিলেশনশিপ বলে দেয়া ইত্যাদি ইত্যাদি ফাংশনালিটি গুলো প্রায় সব ধরনের প্রোজেক্টেই কাজে লাগে। তো লারাভেল, এক্সপ্রেস, জ্যাঙ্গো, ডটনেট-কোর আমদের এই কমন ফাংশনালিটি গুলোই প্রোভাইড করে থাকে। অর্থাৎ আমাদের কমন ফাংশন গুলো বার বার লেখার পেইন আর নিতে হবে না ফ্রেমওয়ার্ক ইউজ করলে।খুব সহজেই কাজ গুলো করে দেয় ফ্রেমওয়ার্ক গুলো।
এখন জাভাস্ক্রিপ্টের অনেক ফ্রেমওয়ার্কই অবশ্য এ সকল সাপোর্ট দিয়ে থাকে। অর্থাৎ ফুল-ফ্লেজড, ফুল-স্টাক ফ্রেমওয়ার্কের কাজ করে থাকে, যেমনঃ এঙ্গুলার৭। অর্থাৎ একটা ল্যাঙ্গুয়েজ (জেস/টিএস) দিয়েই ফুল-স্টাক সলিউশন পাচ্ছি আমরা।
একই ভাবে গেম তৈরীতে গ্রাফিক্স, সাউন্ড, লজিক ইত্যাদি হ্যান্ডেলিং করতে গিয়ে যতগুলো কমন টাস্ক আছে তা গেম ইঞ্জিন গুলো প্রোভাইড করে থাকে। যেমনঃ ইউনিটিতে এগুলো নিয়ে দুঃশ্চিন্তা না করেই একটা গেম বানিয়ে ফেলতে পারেন আপনি। সব ঝামেলা ফ্রেমওয়ার্ক/ইঞ্জিন হ্যান্ডেল করবে।
আরো গুরুত্বপূর্ণ বিষয় হলো যখন আপনি কোন টিমে কাজ করবেন, তখন একেক জন একেক ভাবে, একেক ডিজাইন প্যাটার্ণ বা প্যারাডাইম মেনে কোড করলে তা খুব বেশি রিডেবল বা মেইনটেইনেবল হয় না, হবে না। তাই সবাইকে একটা ওয়েল ডিফাইন্ড স্টান্ডার্ড ফলো করানো ফ্রেমওয়ার্ক গুলোর আরেকটা গুরুত্বপূর্ণ কাজ। সাধারণত ফ্রেমওয়ার্ক গুলো ইন্ডাস্ট্রি-স্টান্ডার্ড ফলো করে টোটাল একটা প্যাকেজ হিসেবে তৈরী করা হয়ে থাকে। যেমনঃ অবজেক্ট অরিয়েন্ডেড প্রোগ্রামিং ফলো করা, প্রতিষ্ঠিত ডিজাইন প্যাটার্ট (যেমনঃ মডেল-ভিউ-কন্ট্রোলার এমভিসি) মেনে চলা, অবজেক্ট রিলেশনাল ম্যাপার বা ওয়ারএম ইনক্লুড করা, ইউনিট টেস্টিং ফিচার সহজ করে ইনক্লুড করে দেয়া ইত্যাদি ইত্যাদি।
আর সব থেকে বড় কথা ফ্রেমওয়ার্ক গুলো কোড রি-ইউজে অনেক বেশি উতসাহ দেয়, একই কাজ বার বার করা থেকে অনুতসাহিত করে। আর সব থেকে যেটা বেশি করে তা হলো ডেভেলপারদের জীবনকে অনেক ‘সহজ’ করে দেয় । বিশেষ করে যে সব ফ্রেমওয়ার্কের সিএলআই (কমান্ড লাইন ইন্টারফেস) সাপোর্ট ভালো।
লেখায় কোন ভূল থেকে থাকলে ক্ষমাসুন্দর দৃষ্টিতে দেখবেন, ধন্যবাদ।
Sunwarul :-)

21 August, 2018

প্রোগামিং সম্পর্কে কিছু কথা

১। কেন প্রোগ্রামিং/কোডিং/ডেভেলপিং শিখব ? লাভ কি এগুলা শিখে?
এর উত্তর সবাই জানি মনে হয়। ফ্রিল্যান্সার/ডেভেলপার/সফটওয়ার ইঞ্জিনিয়ার বা আস্ত একটা কোম্পানির মালিক, কে না হতে চায়?
সুতরাং কেন শিখবো এই টপিকস আপাতত বাদ।
২। ক্যারিয়ার প্যাথঃ ডেভেলপার বা প্রোগ্রামার হিসেবে এখন হাজার হাজার ফিল্ডে কাজ করার সুযোগ আছে। তবে স্কিল থাকতে হবে সেরকম। ডেভেলপিং সেক্টরের অন্যতম কিছু ফিল্ড ও সেগুলোতে ব্যবহৃত হট প্রোগ্রামিং ল্যাংগুয়েজ, লাইব্রেরী ও ফ্রেমওয়ার্ক গুলো হলঃ
- ওয়েব ডেভেলপমেন্ট (HTML5,CSS3,Bootstrap,JavaScript, PHP, Java, Python [ React.JS, Angular.JS,Vue.JS, Spring, Laravel, Django, Flask] )
- ডেস্কটপ ডেভেলপমেন্ট (C++, C#, Java, Python [Qt, .NET, JavaFX, Swing] )
- মোবাইল (Android/iOS) ডেভেলপমেন্ট ( Java, Kotlin, Xamarin, ReactNATIVE, Swift, Objective C, C++ )
- গেম ডেভেলপমেন্ট (C++, C#, Java, Python)
- বিভিন্ন ধরনের সিস্টেম ডিজাইন (লো লেভেল কাজকারবার যেমনঃ ইলেক্ট্রনিক ডিভাইসের ইন্টারফেসিং, অপারেটিং সিস্টেম, রোবোটিক্স, সাইন্টিফিক কাজ কারবার ইত্যাদি ইত্যাদি) (C/C++, Rust, Scala, Python, Java)
- আর্টিফিসিয়াল ইন্টিলিজেন্ট ( কৃত্রিম বুদ্ধিমত্তা) (Python, Java, R, C/C++)
- ভার্চুয়াল রিয়েলিটি (JavaScript, C++, Python, Java, C#)
- সাইবার সিকিউরিটি ( C/C++, Python, PHP, MySQL, Java)
ইত্যাদি।
৩। কোডিং এর শুরুঃ জব ট্রেন্ড সহ বিভিন্ন ফ্যাক্টর বিবেচনায় নিলে বলা যায়, আপনি যদি বিগিনার হন, তাহলে উচিত হবে C/C++, Java, Python এই ৩ টার যে কোন একটা প্রোগ্রামিং ভাষা ভালো ভাবে শেখা। একটা বলতে একটাই। একটার একটু আরেকটার একটু এভাবে শেখা বোকামি। তবে, একটা ভাষা শেখার পর অন্য আরেকটা শেখা ওয়ান টুর ব্যাপার।
শুরুর দিকে ল্যাংগুয়েজ সিলেক্ট করা অনেকের জন্য ঝামেলার কাজ। তবে, জব পোস্ট/ট্রেন্ড/গিটহাব রিপজিটরি ইত্যাদি বিবেচনায় নিলে প্রথম ল্যাংগুয়েজ হিসেবে ‘জাভা’ শেখা যেতে পারে।উপরে বলা প্রায় প্রত্যেকটা ফিল্ডে 'জাভা' ইউজ করা যায়। আর ‘জাভা’ ১০০% অবজেক্ট ওরিয়েন্টেড ল্যাংগুয়েজ। তাই এটা শিখতে পারলে সফটওয়ার ডেভেলপিং এর অনেক কিছুই ক্লিয়ার হয়ে যাবে। তবে ‘জাভা’ গ্রহের ‘ সব থেকে সহজে শেখা যায়’ এমন প্রোগামিং ভাষা নয়।
জিমেইল সহ প্রায় সব এন্টারপ্রাইজ লেভেলের ওয়েব এপ 'জাভা' দিয়ে ডেভেলপ করা। 'জাভা' অনেক ফাস্ট আর সিকিউরড।এর আছে মহা সমুদ্রের মতন API (Application Programming Interface) যা দিয়ে খুব সহজে যে কোন কিছু ডেভেলপ করা যায়। 'জভা'-র গুন বর্ননা করে শেষ করা যাবে না। Jetbrains এর Intelij IDEA সহ Android Studio, Pycharm, CLion ইত্যাদি 'জাভা' দিয়ে ডেভেলপ করা। এন্ড্রয়েডের সব এপ্লিকেশন, গেম 'জাভা' দিয়ে ডেভেলপ করা ( Kotlin can be defined as purified JAVA, until now…)
৪। শুরুর পরঃ মোটামুটি লেভেলের সিনট্যাক্স জানার পর নতুন শেখা ভাষাটি দিয়ে প্রব্লেম সল্ভিং এর প্রাকটিস করতে হবে, পারলে কম্পিটিশন করতে হবে। এই জন্য অনলাইনে অনেক সাইট আছে। যেমনঃ Codeforces, HackerRank, Codechef, UVA, Light OJ, SPOJ, HackerEarch, TopCoder ইত্যাদি।এতে করে স্কিল ডেভেলপ হবে। লজিক গুলো স্ট্রং হবে। গতি আসবে ।
৫। ডিসক্রিট ম্যাথ, ডাটা স্ট্রাকচার ও বিভিন্ন এলগরিদম শিখতে হবেঃ বিভিন্ন রিসোর্স থেকে বহুল ব্যাবহৃত ডাটা স্ট্রাকচার ও এলগরিদম গুলো শিখতে হবে ও নিজের লজিক ডেভেলপ করতে হবে। অর্থাৎ কোন সমস্যা আসলে আমি কিভাবে, কোন টেকনিকে তা সমাধান করব।
৬। যে কোন একটা IDE (Integrated Development Environment) সম্পর্কে ভালো ধারনা রাখতে হবে। তাহলে কোডিং/ডেভেলপিং অনেক তাড়াতাড়ি করা যাবে। ওপেনসোর্স কিছু Editor ও IDE হলঃ
  • Eclipse
  • Netbeans
  • Atom
  • Visual Studio Code
  • Intelij IDEA Community Edition
  • Android Studio
  • Notepad++
  • Sublime Text
  • Vim, Neo Vim, Emacs
৭। ডেভেলপার টুলস ও ডিবাগিং সম্পর্কে ভালো ধারণ থাকতে হবেঃ
  • Google Chrome
  • Firefox
এর ডেভেলপার টুলস সম্পর্কে ভালো ধারনা থাকতে হবে। টেস্টিং সম্পর্কে পড়াশুনা করা যেতে পারে, আরো ভালো ডেভেলপার হওয়ার জন্য।
৮। ওপেন সোর্স প্লাটফর্ম ইউস করার অভ্যাস থাকতে হবে। যেমনঃ লিনাক্স এবং বিশেষ করে এর শক্তিশালী CLI ( Command Line Interface ) এর ব্যাবহার জানতে হবে।
৯। ভার্সন কন্ট্রোল সম্পর্কে জানতে Git ও Github এর ব্যাবহার জানতে হবে।
১০। বিভিন্ন FTP ( File Transfer Protocol ) ক্লায়েন্ট যেমনঃ File Zilla সম্পর্কে ধারনা রাখতে হবে।
১১। ডাটাবেস সম্পর্কে জানতে হবে। যেমনঃ MySQL, MongoDB ইত্যাদি
সব সময় নিত্য নতুন জিনিস ডেভেলপ হচ্ছে তাই সব সময় শেখার উদ্যোম রাখতে হবে।

17 March, 2018

Install internet speed meter in Ubuntu Linux

Installing Internet Speed Meter on LINUX (Ubuntu)
   sudo apt-add-repository ppa:fixnix/netspeed
   sudo apt-get update
   sudo apt-get install indicator-netspeed-unity
   

26 October, 2017

URI 1038 snack Solve

Problem: URI snack 1038:

Solve:

/* URI snack 1038*/

#include<stdio.h>
void main()
{
    int product_code,quantity;
    float total;
    scanf("%d %d",&product_code,&quantity);
    total = product_code*quantity;
    if(product_code == 1 )
    {
        total = 4.00 * quantity;
        printf("Total: R$ %0.2f\n",total);
    }
    else if (product_code == 2 ){
        total = 4.50 * quantity;
        printf("Total: R$ %0.2f\n",total);
    }
    else if (product_code == 3 ){
        total = 5.00 * quantity;
        printf("Total: R$ %0.2f\n",total);
    }
    else if (product_code == 4 ){
        total = 2.00 * quantity;
        printf("Total: R$ %0.2f\n",total);
    }
     else if (product_code == 5 ){
        total = 1.50 * quantity;
        printf("Total: R$ %0.2f\n",total);
    }

}

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

23 August, 2017

Understanding Stack with C

Stack: Stack is a linear data structure which follows a particular order in which the operations are performed. The order may be LIFO (Last In First Out) or FILO (First In Last Out).
Mainly the following three basic operations are performed in the stack:

  • Push: Adds an item in the stack. If the stack is full, then it is said to be an Overflow condition.
  • Pop: Removes an item from the stack. The items are popped in the reversed order in which they are pushed. If the stack is empty, then it is said to be an Underflow condition.
  • Peek or Top: Returns top element of stack.
  • isEmpty: Returns true if stack is empty, else fals.   
          

Figure: Stack operations

Here is a code,will be helpful to understanding operations of Stack.

#include<stdio.h>
#define N 10
int stack[N],top=-1;over=0;under=0;

int push(int n)
{
    if(top>=N-1)
    {
        printf("Overflow.\n");
        return over=1;
    }
    else stack[++top]=n;
}
int pop()
{
    if(top==-1)
    {
        printf("Underflow.\n");
        return under=1;
    }
    return stack[top--];
}
int main()
{
    int choice,n,i,item;
    for(;;)
    {
        printf("Select an operation\n1.Push\n2.Pop\n3.Show\n4.Exit\n");
        scanf("%d",&choice);
        if(choice==1)
        {
            printf("How many number you want to insert:\n");
            scanf("%d",&n);
            printf("Please enter number:\n");
            for(i=0;i<n;i++)
            {
                scanf("%d",&item);
                if(over==1)
                    break;
                push(item);
            }
        }
        else if(choice==2)
        {
            printf("How many number you want to delete:\n");
            scanf("%d",&n);
            for(i=0;i<n;i++)
            {
                pop();
                if(under==1)
                    break;
                printf("Deleted: %d\n",stack[top+1]);
            }
        }
        else if(choice==3)
        {
            if(top==-1)
                printf("Stack is empty.\n");
            else {
                printf("Stack is:\n");
                for(i=0;i<=top;i++)
                {
                    printf("%d\n",stack[i]);
                }
            }
        }
        else if(choice==4)
            break;
        else printf("Wrong choice!!");

    }
}

run these codes on your machine and insert choices to stack operations.
Thank you guys!!