• 10 Tips For Clean Code | Michael Toppa

    Here are the 10 tips by Michael Toppa from his talk at Wordcamp US, 2016.

    Read more

  • Seven ineffective coding habits of many programmers | Kevlin Henney

    Here are the seven habits talked about by Kevlin Henney at Istanbul Tech Talks 2016.

    Read more

  • DOTA 2 - How many matches for +1000 MMR?

    A couple of days ago, I was curious to find out how many matches do I have to play to increase my mmr by 1K. As we know, typically a win and a loss changes our mmr by +25 and -25 respectively. So in order to actually increase our mmr, it requires us to play more matches than we intuitively think of since a loss totally nullifies the outcome of a win. Of course throughout the mmr mission, our winrate has to be higher than 50% to have a net increase in mmr.

    Read more

  • Git and GitHub - back up your codes!

    Have you ever lost hundreds of solutions of competitive programming problems due to disk failure? Well, I have. Thus I have learned the importance of backing up stuffs the hard way. You can use various cloud storage platforms to back up for free e.g. Google drive, Dropbox, OneDrive etc. They are great for different types of files like images, documents, spreadsheets, PDFs etc. But when it comes to codes, my personal favourite is github. So here I am going to show you how you can use git and github to back up your codes seamlessly.

    Read more

  • My stronglifts 5x5 journey - session 1

    I am a huge advocate of fitness and healthy living. I love to workout. It helps me stay fresh and strong. A few days ago, I decided to start strength training because I have always felt that my strength was not up to the mark. After searching here and there on the internet, I came across the stronglifts 5x5 program which is directed towards beginners. I planned on doing this for a month and see where this leads me to. I also have plans of doing this again in future. So I name this session 1.

    Read more

  • 2015 - My year in review

    From this year, I have decided to write an annual review every year and a monthly review every month. I have seen a few people (like James Clear) do this on the internet and it came to my realization that doing so will help me become more mindful of what I am doing, where I am heading, keep track of my successes and failures and ultimately help me visualize my life a lot more vividly. So here is my 2015 year in review.

    Read more

  • রিকার্শন (Recursion)

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

    Read more

  • ফাংশন (Function)

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

    Read more

  • Define Core Values

    I have been trying to do this for quite a long time. Yes I had some ideas and understanding of who I want to be and how I want to live my life. But sitting for a while, thinking about life, clearing up head and writing down my core values - this was not done till yesterday.

    Read more

  • OS/161 Paint Shop Synchronization Problem

    The assignment was assigned about a month ago. But we are students. We don't do these until the deadline is knocking at the door. So I started looking into the assignment yesterday. Solving the problem took a few hours in total which I have to say was a lot faster than I expected.

    Read more

  • ফ্লোটিং পয়েন্ট নাম্বার ও কিছু সমস্যা

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

    Read more

  • মন্টি হল প্রবলেম - আপনি হলে কি করতেন?

    সেটআপ

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

    Read more

  • অপারেটর ওভারলোড (Operator Overload)

    C++ এর যত অপারেটর আছে, +, -, /, *, =, <, >, <=, >=, <<, >> ইত্যাদি সবগুলোই একেকটা ফাংশন। হ্যাঁ, C++ এ অপারেটরগুলো একেকটা ফাংশনের মত কাজ করে। অর্থাৎ, + অপারেটরটা আসলে int add(int a, int b) { return a+b; } এরকম একটা ফাংশন। বাস্তবে এতোটা সরল না, আমি কেবল বোঝানোর জন্য এতো সরল করে বললাম। তবে এভাবে চিন্তা করতে পারলেই হবে যে প্রত্যেকটা অপারেটর আসলে একটা ফাংশনের মত করে কাজ করে।

    Read more

  • ভেক্টর (STL - Vector)

    সম্ভবত C++ Standard Template Library (STL) এর সবথেকে বেশি ব্যবহৃত কনটেইনারটি হল ভেক্টর। খুবই কাজের একটা জিনিস। খুব সাধারনভাবে বলতে গেলে, এটা অনেকটা অ্যারের মত। অ্যারেতে যেমন একটার পর একটা ভেরিয়েবল থাকে, তেমনি ভেক্টরেও তাই। একটার পর একটা সাজানো থাকে। আবার অ্যারেতে যেমন ইন্ডেক্স থাকে যেটা ব্যবহার করে সরাসরি ঐ ইন্ডেক্সের ভেরিয়েবল পাওয়া যায়, তেমনি ভেক্টরেও ইন্ডেক্স আছে এবং তা ঠিক একইভাবে অ্যারের মত করেই কাজ করে।

    Read more

  • কাউন্টিং সর্ট (Counting Sort)

    আগের পর্বঃ বাবল সর্ট

    সর্টিং এর জন্য যে সকল এলগোরিদম আছে তার মধ্যে সবচেয়ে এফিসিয়েন্ট হল কাউন্টিং সর্ট। এটি O(n) টাইম কমপ্লেক্সিটিতে কাজ করে! কেবল এফিসিয়েন্টই না, একই সাথে অত্যন্ত সহজও। আসলে একে আলাদা কোন এলগোরিদম না বললেও চলে। খুবই সাধারণ ধারণা দিয়েই কাজটি করে ফেলা যায়।

    Read more

  • বাবল সর্ট (Bubble Sort)

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

    Read more

  • সর্টিং এলগোরিদম (Sorting Algorithm)

    সর্ট করা হল সহজ বাংলায় সাজানো। এই সাজানোটা বিভিন্নভাবে হতে পারে। কি সর্ট করছি এবং কি কাজে সর্ট করছি তার উপর নির্ভর করে কিসের ভিত্তিতে এবং কিভাবে সর্ট করা হবে। এটি হতে পারে কতগুলো নাম্বারকে ছোট থেকে বড় ক্রমানুসারে (Ascending Order) সাজানো। হতে পারে বড় থেকে ছোট ক্রমানুসারে (Descending Order) সাজানো। যদি শব্দ সাজাতে হয় তাহলে হতে পারে বর্ণমালায় অক্ষরের ক্রমানুসারে সজ্জা।

    Read more

  • গ.সা.গু. এবং ল.সা.গু. (GCD and LCM)

    গ.সা.গু. - গরিষ্ঠ সাধারণ গুণণীয়ক (GCD - Greatest Common Divisor)

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

    Read more

  • প্রাইম নাম্বার - বিট-ওয়াইজ সিভ (Prime Number - Bitwise Sieve)

    আগের পর্বঃ প্রাইম নাম্বার - সিভ অফ এরাটস্থেনিজ

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

    Read more

  • বিট-ওয়াইজ নিয়ে খেলা! (Playing with Bitwise!)

    আগের পর্বঃ বিট-ওয়াইজ অপারেটর

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

    Read more

  • প্রাইম নাম্বার - সিভ অফ এরাটস্থেনিজ (Prime Number - Sieve of Eratosthenes)

    আগের পর্বঃ প্রাইম নাম্বার - বেসিক

    প্রাইম নাম্বারের বেসিক কনসেপ্টগুলো নিয়ে আগের পর্বে আলোচনা করা হয়েছে। এই পর্বে আমরা কিভাবে 1 থেকে শুরু করে n পর্যন্ত সকল প্রাইম নাম্বার বের করতে পারি তার একটা এফিসিয়েন্ট এলগোরিদম নিয়ে আলোচনা করব। এই এলগোরিদমটির নাম হল 'সিভ অফ এরাটস্থেনিজ'।

    Read more

  • প্রাইম নাম্বার - বেসিক (Prime Number - Basic)

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

    Read more

  • বিট-ওয়াইজ অপারেটর (Bitwise Operator)

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

    Read more

  • স্ট্রাকচার (Structure)

    স্ট্রাকচার হল কতগুলো স্ট্যান্ডার্ড ডাটা টাইপের সমষ্টিতে প্রোগ্রামারের নিজের সৃষ্টি করা ডাটা টাইপ। অন্যান্য ডাটা টাইপগুলো যেমন একটি নির্দিষ্ট ধরনের ডাটা রাখতে পারে, সেখানে স্ট্রাকচার একাধিক ধরনের একাধিক ডাটা রাখতে পারে। এই ডাটা টাইপটি প্রোগ্রামার নিজে তার প্রয়োজনমত তৈরি করে। এই ডাটা টাইপ অন্যান্য স্ট্যান্ডার্ড ডাটা টাইপের সমন্বয়ে তৈরি করা হয় বলে একে বলে Derived Data Type।

    Read more

  • লিংকড লিস্ট (Linked List)

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

    Read more

  • পয়েন্টার (Pointer)

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

    Read more

  • char এবং int

    char এবং int নিয়ে বেশ কিছু কনফিউশন কাজ করতে দেখেছি। তাই ব্যাপারটা পরিষ্কার করা দরকার। char এবং int দুটিই হল ডাটা টাইপ। ডাটা টাইপ দিয়ে আমরা কোন একটি ভেরিয়েবলে কি থাকবে সেটি নির্দিষ্ট করে দেই। যেমন যখন আমরা একটা ভেরিয়েবল ডিক্লেয়ার করি, int x; তখন সহজ কথায় যেটি হয় তা হল, x নামের একটি ভেরিয়েবল তৈরি হয় যেখানে একটি ইন্টিজার রাখা যাবে। আবার যখন ডিক্লেয়ার করা হয় char ch; তখনও ch নামের একটি ভেরিয়েবল তৈরি হয় যেখানে একটি ক্যারেক্টার রাখা যাবে। এখানেই আসলে কনফিউশন!

    Read more

  • for লুপ

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

    Read more

  • End of File (EOF)

    অনেকের মধ্যেই দেখেছি এই End of File বা EOF নিয়ে এক ধরনের আতংক কাজ করে! তবে এত আতংকিত হওয়ার কিছু নেই। এটা তেমন কিছুই না। সোজা বাংলা কথায় বলতে গেলে EOF হল ইনপুট নেওয়ার শেষ নির্দেশক কোন একটা সংকেত যেটি পাওয়ার পর প্রোগ্রাম আর কোন ইনপুট নিবে না।

    Read more

  • if-else

    if-else সি প্রোগ্রামিং এর অত্যন্ত গুরুত্বপূর্ণ একটি বিষয়। if-else এর সাহায্যে একটি প্রোগ্রাম কোন একটি শর্তের ভিত্তিতে কি করবে সেটি নির্ধারণ করে দেওয়া হয়। ব্যাপারটি অনেকটা ইংরেজি ব্যকরণের if-else এর মতই। একটি উদাহরণের সাহায্যে বিষয়টি পরিষ্কার করা যাক।

    Read more

subscribe via RSS