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





প্রথমেই যে ৭ ধরণের ডাটা স্ট্রাকচার তোমাকে শিখতেই হবে:
১) Arrays এর ইনডেক্স আর length জানতে হবে। Array এর মধ্যে ডাটা কিভাবে Access, insert, delete, এবং update করবে। Array এর উপাদানগুলাকে কিভাবে লুপ করবে। sort, reverse করবে। কোন উপাদানকে খুঁজে বের করবে। array কপি করবে, merge করবে, কেটে ছোট (slice) করবে। ডিফারেন্ট টাইপের ডাটা এর জন্য কিভাবে array ডিক্লেয়ার করবে। এবং কিছু কমন কাজ যেমন, সবচেয়ে ছোট বা সবচেয়ে বড় উপাদান খুঁজে বের করা। আর আরো বেশি জানতে চাইলে two dimensional array সম্পর্কে জানবে। ইত্যাদি।
.
২) Linked Lists এর কনসেপ্ট টা বুঝতে হবে। বিশেষ করে Singly Linked List, Doubly Linked List এবং Circular Linked List এর কনসেপ্টগুলো জানতে হবে। লিংকডলিস্ট কিভাবে ইমপ্লিমেন্ট করে সেটা জানতে হবে। তারপর Linked List এর মধ্যে কোন একটা নিদৃষ্ট উপাদান আছে কিনা খুঁজে বের করা। নতুন উপাদান যোগ করা, ডিলিট করা, আপডেট করার সিস্টেম বুঝতে হবে। এইটুক হলেও মোটামুটি চলবে। আর যদি আরেকটু বেশি শিখতে চাও তাহলে লিংকডইন রিভার্স করা, মার্জ করা, সাইকেল ডিটেক্ট করা, k-th উপাদান বের করা, শর্ট করার বিষয়গুলো দেখতে পারো।
.
৩+৪) Stack এবং Queue:
LIFO আর FIFO প্রিন্সিপালগুলো বুঝতে হবে। Array দিয়ে কিভাবে স্ট্যাক বানাতে হয় এবং স্ট্যাক এর মধ্যে Push, pop, peek, Size (or Count) বের করা শিখতে হবে। একইভাবে Array দিয়ে কিভাবে কিউ বানাতে হয় এবং কিউ এর মধ্যে Enqueue, dequeue, peek, Size (or Count) কিভাবে করতে হয়। সেটা জানতে হবে। আরেকটু বেশি শিখতে চাইলে-- Linked List দিয়ে কিভাবে স্ট্যাক এবং কিউ ইমপ্লিমেন্ট করতে হয়। সেটা দেখতে পারো। আরেকটা স্পেশাল কিউ আছে Priority Queue নামে সেটা সম্পর্কে কিছু ধারণা থাকলে অবশ্যই ভালো।
.
৫)Hash Tables বা Hash Map বা Dictionary:
Hash functions বা Hashing জিনিসটা বুঝতে হবে। key-value স্টাইলে ডাটা কখন, কেন এবং কিভাবে স্টোর করতে হয়। রাখার সুবিধা কি জানতে হবে। তারপর insertion, retrieval, deletion জানার পরে Key-Value ওয়ালা জিনিস লুপ করে কিভাবে একটার পর একটা দেখাবে। কোন key আছে কিনা। বা কোন ভ্যালু আছে কিনা সেটা কিভাবে চেক করবে। আরো বেশি জানতে চাইলে hashing করার সময় Collision ডিটেক্ট করার সিস্টেম এবং Collision resolve techniques জানলে অনেক ভালো।
.
৬) Tree:
Basic Tree কনসেপ্ট সম্পর্কে জানতে হবে। একটা ট্রি ডাটা স্ট্রাকচার বা Binary Tree, Binary Search Tree (BST), Heap ডাটা স্ট্রাকচার কিভাবে কোড করতে হয় সেটা জানতে হবে। ট্রি এর মধ্যে নোড কিভাবে ইনসার্ট করতে হয়, ডিলিট কোনো হয়, সার্চ করতে হয়। জন্য Breadth-First Search (BFS) আর Depth-First Search (DFS) সম্পর্কে জানতে হবে। আরেকটু ধারণা নিতে চাইলে In-Order Traversal, Pre-Order Traversal, Post-Order Traversal দেখতে পারো। আর দেখতে চাইলে Balanced Binary Search Tree (যেমন AVL Tree বা Red-Black Tree দেখতে পারো)
.
৭) Graphs:
গ্রাফ কনসেপ্ট nodes, edges এবং vertices সম্পর্কে জানতে হবে। বিশেষ করে directed, undirected, weighted গ্রাফ আইডিয়াগুলা কি। কিভাবে গ্রাফ এর কোড লিখতে হয়। কিভাবে গ্রাফ traversal এর জন্য (DFS, BFS) কিভাবে ইউজ করা যায়। কম করে এইটুক জানলেও বিগিনার হিসেবে চলবে। তবে আরেকটু জানতে চাইলে Cyclic আর Acyclic গ্রাফ নিয়ে ধারণা নিতে পারো।
------------


যে ৭ ধরনের এলগরিদম তোমাকে শিখতে হবে:
১) Searching Algorithms এর মধ্যে Linear Search আর Binary Search কিভাবে কাজ করে কোনটার কি রকম টাইম কমপ্লেক্সিটি সেটা জানতে হবে।
২) Sorting Algorithms এর মধ্যে Bubble Sort, Selection Sort, Insertion Sort, Merge Sort, Quick Sort কিভাবে কাজ করে। প্রত্যেকটার টাইম কমপ্লেক্সিটি এর মধ্যে বেস্ট কেইস, worst case আর অ্যাভারেজ কেইস কখন কেন হয় সেটা জানতে হবে।
৩) কখন বুঝবে কোনটা Dynamic programming (DP) এর প্রব্লেম। সেটার মধ্যে base কেইস কিভাবে ঠিক করবে। বা sub প্রব্লেম এ কিভাবে ভাগ করবে। Recurrence কিভাবে করবে। শুরুটা Fibonacci Sequence, Longest Common Subsequence (LCS), বা Coin Change Problem গুলো দিয়ে করতে পারো।
৪) Tree রিলেটেড এলগরিদম এর মধ্যে BFS আর DFS তো তোমাকে জানতেই হবে। এর বাইরে Binary Search Tree এর মধ্যে নতুন উপাদান যোগ করা রিমুভ করার সিস্টেম তোমাকে জানতে হবে।
৫) বিভিন্ন ধরনের graph এর জন্য আবার Shortest path বের করার সিস্টেম দেখতে পারো। এর মধ্যে Dijkstra's বা Bellman-Ford দেখতে পারো।
৬) Divide and Conquer Algorithms এর মধ্যে বাইনারি সার্চ, মার্জ শর্ট অন্যতম।
৭) টাইম আর স্পেস কমপ্লেক্সিটি ছাড়া ডাটা স্ট্রাকচার, এলগরিদম এর মর্ম বুঝবে না। তাই Big O Notation সম্পর্কে জানতে হবে। Constant Time O(1), Linear Time O(n), Logarithmic Time O(log n), Linearithmic Time O(n log n), Quadratic Time O(n^2), Exponential Time O(2^n) এইগুলা কখন হয়। সেটা বুঝতে হবে।
-----
এইটা শুরু করার লিষ্ট। এইগুলা বেসিক আর ইন্টারমেডিয়েট লেভেল মিলিয়ে। তবে কারো প্রব্লেম সলভিং বা কম্পিটিটিভ প্রোগ্রামিংয়ে ইচ্ছা থাকলে সে এইগুলা দিয়ে শুরু করে আরো ভিতরে ঢুকতে পারে।
-----
এই জিনিসগুলো তুমি চাইলে my code school, Kunal Kushwaha, freeCodeCamp, Abdul Bari এর মতো প্রচুর ইউটিউব চ্যানেল আছে। সেগুলা থেকে শিখতে পারো। অথবা শাফায়েত এর ব্লগ বা programiz এর Learn DS & Algorithms দেখতে পারো।
আর যদি মনে হয় নিজে নিজে শিখতে গেলে ফোকাসড থাকতে পারি না। কোন্সিস্টেন্সি ধরে রাখতে পারি না। বা আটকে গেলে হেল্প খুঁজে পাই না। তাহলে প্রতিদিন ৪-৬ ঘন্টা এফোর্ট দেয়ার কমিটমেন্ট নিয়ে। ঝাঁপিয়ে পড়ো phitron . io ওয়েবসাইট এ। সেপ্টেম্বরের ২৪ তারিখের মধ্যে।
সেখানে যত খুশি প্রশ্ন করতে পারবে। প্রতিদিন তিনবেলা (সকাল ১১ টা, বিকাল ৪ টা, রাত ৯.০০) লাইভ সাপোর্ট সেশন এ যুক্ত হয়ে কম্পিউটারের স্ক্রিনশেয়ার করে লাইভ সাপোর্ট নিতে পারবে। লাইভ কন্সেপচুয়াল সেশন থাকবে।
তোমার টার্গেট হবে: একটা ইফেক্টিভ লার্নিং প্লাটফর্ম এ হার্ডওয়ার্ক করে এক বছরের মধ্যে--নিজেকে জুনিয়র সফটওয়্যার ডেভেলপার হিসেবে জব/ইন্টার্ন পর্যন্ত নিয়ে যাওয়া অথবা একজন প্রব্লেম সল্ভার হিসেবে তৈরী করা।



My Others Social Link 👇
Mobile Number - 01716628373
Gmail - mafuzur3434@gmail.com
Website - mafuzur-talks.blogspot.com
Linkedin - https://www.linkedin.com/in/mafuzur-rahman-60517426a/
Github - https://github.com/mafuzur343400
Instagram - https://www.instagram.com/mafuzur_shan_34/
Tiktok -
https://www.tiktok.com/@mafuzur55?is_from_webapp=1&sender_device=pc
My Facebook Gruop -
(1) https://www.facebook.com/groups/669650043155101/?ref=share&mibextid=NSMWBT
(2) https://www.facebook.com/groups/1717134805236832/?ref=share&mibextid=NSMWBT
My Page - 
(1) https://www.facebook.com/mafuzur.11111?mibextid=ZbWKwL
(2) https://www.facebook.com/mafuzurrahman11111?mibextid=ZbWKwL