
আপনি যদি ডিজাইন, চিত্রণ, অ্যানিমেশন, অথবা যেকোনো সৃজনশীল বিষয়ে কাজ করেন, তাহলে আজ হোক কাল হোক আপনি একই ধরণের সমস্যার মুখোমুখি হবেন: আপনি প্রতিদিন যে সফটওয়্যার এবং কম্পিউটার প্রোগ্রামগুলি ব্যবহার করেন তা কেবল "টুল" নয়।বরং একটি সম্পূর্ণ বাস্তুতন্ত্র যার নিজস্ব নিয়ম, অদ্ভুততা এবং স্বতন্ত্র বৈশিষ্ট্য রয়েছে। এই ছোট ছোট সূক্ষ্মতাগুলি বোঝা আপনার কম্পিউটারের সাথে লড়াই করা এবং এটি আপনার উপর জাদু কাজ করছে এমন অনুভূতির মধ্যে পার্থক্য আনতে পারে।
কীবোর্ড শর্টকাট এবং কিছু এলোমেলো কৌশলের বাইরে, অপারেটিং সিস্টেম, প্রোগ্রামিং, ডিবাগিং, "প্রযুক্তিগত" সংস্কৃতি এবং কাজের পদ্ধতি সম্পর্কে বিস্তারিত তথ্যের একটি সম্পূর্ণ জগৎ রয়েছে। এটি সৃজনশীল হিসেবে আপনি যে অ্যাপ্লিকেশনগুলি ব্যবহার করেন সেগুলি কীভাবে ডিজাইন এবং কাজ করে তা প্রভাবিত করে। এই জগৎকে ভেতর থেকে বোঝা আপনাকে উন্নয়ন দলগুলির সাথে আরও ভালভাবে কাজ করতে, বাস্তবসম্মত জিনিসগুলির জন্য জিজ্ঞাসা করতে এবং আরও শক্তিশালী ধারণা পেতে সহায়তা করে কারণ আপনি জানেন কী তৈরি করা যেতে পারে এবং কী করা যায় না।
ইউনিক্স, ম্যাক, লিনাক্স, এবং কেন সিস্টেমটি মনে হয় তার চেয়ে বেশি গুরুত্বপূর্ণ
অনেক সৃজনশীলের কাছে, ক্লাসিক বিতর্ক হল "ডিজাইনের জন্য ম্যাক নাকি উইন্ডোজ?"কিন্তু সফটওয়্যার জগতে, কথোপকথন প্রায়শই আরও এক ধাপ এগিয়ে যায়: ইউনিক্স বনাম অন্য সবকিছু। ম্যাকওএস এবং বেশিরভাগ লিনাক্স ডিস্ট্রিবিউশন ইউনিক্স দর্শনের উত্তরাধিকারী, যা তাদের এমন কাজগুলি বিকাশ এবং স্বয়ংক্রিয় করার জন্য অত্যন্ত শক্তিশালী প্ল্যাটফর্ম করে তোলে যা আপনার ব্যবহৃত সরঞ্জামগুলিকে সরাসরি প্রভাবিত করে।
প্রোগ্রামাররা প্রায়ই বলে যে "পুরো ইউনিক্স সিস্টেমটি একটি বৃহৎ উন্নয়ন পরিবেশের মতো"কারণ সবকিছুই টার্মিনাল থেকে ছোট, শক্তিশালী ইউটিলিটিগুলিকে একত্রিত করার জন্য ডিজাইন করা হয়েছে: ছবি প্রক্রিয়াকরণ, রপ্তানি স্বয়ংক্রিয় করা, রেন্ডারিং স্ক্রিপ্ট চালু করা, সার্ভার পরিচালনা করা, অথবা গ্রাফিকাল উইজার্ডের উপর নির্ভর না করে কোড কম্পাইল করা। এই কারণেই অনেক উন্নত সৃজনশীল স্যুট, গেম ইঞ্জিন এবং 3D সরঞ্জাম এই ধরণের পরিবেশের কথা মাথায় রেখে ডিজাইন করা হয়েছে।
বিপরীতে, উইন্ডোজে জিনিসগুলি আরও দৃশ্যমান এবং ব্যবহারকারী-বান্ধব, কিন্তু ঐতিহাসিকভাবে, এটি গভীর উন্নয়ন এবং কমান্ড-লাইন কাজের জন্য কম "বান্ধব" ছিল।আজ এই ব্যবধান অনেকাংশে কমে গেছে (WSL, PowerShell, ইত্যাদি), কিন্তু ইউনিক্স সংস্কৃতি এখনও আপনার ব্যবহৃত বেশিরভাগ সফটওয়্যারের মধ্যেই ছড়িয়ে আছে, এমনকি আপনি বুঝতেও পারছেন না।
একজন সৃজনশীল ব্যক্তি হিসেবে আপনি কেন এতে আগ্রহী? কারণ আপনার ঘন্টা বাঁচাতে অটোমেশন, স্ক্রিপ্ট এবং প্লাগইনগুলি প্রায়শই এই ইউনিক্স জগতে উদ্ভূত হয়।যেসব দল এটিতে দক্ষতা অর্জন করেছে তাদের সাথে কাজ করার ফলে প্রায়শই আরও শক্তিশালী, স্থিতিশীল কর্মপ্রবাহ তৈরি হয় যা প্রকল্পের বৃদ্ধির সাথে সাথে স্কেল করা সহজ হয়।
প্রোগ্রামিং একটি বিরল সংকর: যুক্তি, প্রকৌশল... এবং প্রচুর সৃজনশীলতা।
বাইরে থেকে, প্রোগ্রামিং বিশুদ্ধ ঠান্ডা গণনার মতো মনে হতে পারে, কিন্তু বাস্তবে এটি গণিত, প্রকৌশল এবং নিষ্ঠুর সৃজনশীলতার এক অদ্ভুত মিশ্রণ।ঠিক যেমন আপনি একটি চিত্র বা স্টোরিবোর্ড তৈরি করেন, একজন ডেভেলপার যুক্তির টুকরো তৈরি করেন যাতে সফ্টওয়্যারটি ঠিক যা কল্পনা করা হয়েছিল তা করে।
বেশিরভাগ পেশাদার একমত যে সমস্যা সমাধানের দক্ষতা এবং সৃজনশীলতা লক্ষ লক্ষ ভাষা জানার চেয়েও গুরুত্বপূর্ণ, যদি বেশি না হয়।একই কার্যকারিতার জন্য, এটি বাস্তবায়নের জন্য সাধারণত অনেক উপায় থাকে, ঠিক যেমন একটি কভার বা লোগো ডিজাইন করার হাজারো উপায় থাকে; মূল বিষয় হল সবচেয়ে পরিষ্কার, সবচেয়ে মার্জিত এবং রক্ষণাবেক্ষণে সহজ সমাধান খুঁজে বের করা।
এই কারণেই সৃজনশীল দলগুলি বুঝতে পারে যে এটি ক্রমবর্ধমানভাবে মূল্যবান। কোডও নকশা।সফ্টওয়্যার আর্কিটেকচারের সিদ্ধান্ত, ডেটা প্রবাহ এবং অভ্যন্তরীণ কাঠামো রয়েছে যা প্রকল্পটিকে অরক্ষিত ফ্রাঙ্কেনস্টাইনে পরিণত না করেই আপনি একটি অ্যাপ, প্লাগইন বা ওয়েবসাইট থেকে কী চাইতে পারেন তা ব্যাপকভাবে প্রভাবিত করে।
আর হ্যাঁ, প্রোগ্রামিং আসক্তিকর: অনেক ডেভেলপার তাদের কাজকে সেরা লজিক পাজল হিসেবে বর্ণনা করেন।যেখানে আপনি নিয়ম এবং টুকরোগুলো ঠিক করেন, এবং এটি এমন একজনের মানসিকতার সাথে খুব ভালোভাবে খাপ খায় যিনি শুরু থেকে জিনিস তৈরি করতে উপভোগ করেন।
কম্পাইলিং, কমান্ড লাইন, এবং অন্যান্য কোডিং "আচার"
যদি কখনও কাউকে "এটা কম্পাইলিং" বলতে শুনে থাকেন এবং কফি খেয়ে চেয়ার থেকে উধাও হয়ে যান, তাহলে জেনে রাখুন যে এটা সবসময় একটা অজুহাত নয়, কিন্তু এটা একটা নিখুঁত অজুহাত।কম্পাইলিং মানে সোর্স কোডকে একটি এক্সিকিউটেবল প্রোগ্রামে অনুবাদ করা, এবং C++ বা বড় গেম ইঞ্জিনের মতো ভাষাগুলিতে এটি অনেক মিনিট এমনকি ঘন্টাও সময় নিতে পারে।
দিনে দিনে, সেই সংকলনের সময়টি হল শ্বাস নেওয়ার, ধারণাগুলি পর্যালোচনা করার, অথবা কেবল আপনার মনকে পুনরায় সেট করার জন্যসৃজনশীল পরিবেশে, যখন আপনি রেন্ডারিং ইঞ্জিন বা ভারী গেম বিল্ড নিয়ে কাজ করেন, তখন একই রকম কিছু ঘটে: মেশিনটি শেষ হওয়ার জন্য অপেক্ষা করতে থাকে এবং অনেক দল ধারণা নিয়ে আলোচনা, নকশা পালিশ করা বা কাজ পর্যালোচনা করার জন্য সেগুলির সুবিধা নেয়।
এর সাথে সম্পর্কিত হল কমান্ড লাইন, সেই কালো পর্দা যা প্রথমে ভীতিকর কিন্তু একবার আপনি এটি আয়ত্ত করতে পারলে, এটি এক ধরণের জাদুর কাঠি হয়ে ওঠেতুমি আসলে সেখানে যা করছো তা হলো ক্ষুদ্রাকৃতির প্রোগ্রামিং: তুমি স্ক্রিপ্টিং ভাষায় (যেমন ব্যাশ) নির্দেশনা লেখো যাতে গ্রাফিক্যাল ইন্টারফেসে এমন কিছু স্বয়ংক্রিয়ভাবে করা যায় যা বেশ ঝামেলার।
একজন উন্নত সৃজনশীল ব্যক্তির জন্য, টার্মিনাল সম্পর্কে চারটি জিনিস শেখা অমূল্য হতে পারে: হাজার হাজার ফাইলের নাম পরিবর্তন করুন, ব্যাচ কনভার্ট ফর্ম্যাট করুন, রেন্ডার স্ক্রিপ্ট চালু করুন, ব্যাকআপ সরান, অথবা প্রকল্পগুলি সিঙ্ক্রোনাইজ করুন মাউস স্পর্শ না করেই। এটি কম্পিউটারের "ভাষা বলার" এবং প্রোগ্রামারদের চিন্তাভাবনার কাছাকাছি যাওয়ার আরেকটি উপায়।
কোডের অন্ধকার দিক: সেমিকোলন, বাগ এবং অন্তহীন ডিবাগিং
সফটওয়্যারের নিষ্ঠুরতম কৌতূহলের মধ্যে একটি হল যে ছোট ছোট জিনিসও বিশাল জিনিস ভেঙে ফেলতে পারেএকটি ভুলভাবে লক করা স্তর যেমন একটি সম্পূর্ণ PSD ধ্বংস করতে পারে, ঠিক তেমনই একটি ভুল জায়গায় সেমিকোলন, অনুপস্থিত বন্ধনী, অথবা একটি বন্ধনী যা ভুল জায়গায় বন্ধ হয়ে যায়, শত শত নিখুঁতভাবে চিন্তাভাবনা করা লাইন নষ্ট করে দিতে পারে।
ডেভেলপাররা তাদের দিনের একটা বড় অংশ খুবই অগোছালো কিন্তু অপরিহার্যভাবে কাটান: ডিবাগিং ত্রুটিবাগ হান্টিং হলো অদ্ভুত জায়গায় লুকিয়ে থাকা প্রাণীদের শিকার করার মতো: তারা সবসময় কোনও প্রোগ্রাম ক্র্যাশ করে না, কখনও কখনও তারা নির্দিষ্ট সময়ে অদ্ভুত ত্রুটি সৃষ্টি করে, অথবা নির্দিষ্ট ডেটা বা নির্দিষ্ট ডিভাইসে উপস্থিত হয়।
তোমার জগতে, এর অর্থ এইরকম যে টুলগুলো শুধুমাত্র এক ধরণের ফাইলেই ব্যর্থ হয়, যেসব অ্যানিমেশন আপনার কম্পিউটারে ভালো দেখায় কিন্তু প্রোডাকশনের সময় ক্র্যাশ করে, যেসব ওয়েবসাইট শুধুমাত্র একটি নির্দিষ্ট ব্রাউজারেই ভেঙে যায়...যা, আশ্চর্যজনকভাবে, সাধারণত কোডের অনেক গভীর বাগের দৃশ্যমান অংশ।
এই পরিস্থিতি থেকে বাঁচতে, বেশিরভাগ প্রোগ্রামার ডিবাগিং কৌশলের একটি অস্ত্রাগার তৈরি করে: লগ, গ্রাফিক্যাল ডিবাগার, ব্রেকপয়েন্ট এবং ভেরিয়েবল স্টেট প্রিন্টআউট ব্যবহার করুন।...এবং এমনকি কিছু বিশেষভাবে অধরা বাগ খুঁজে বের করার জন্য অভ্যন্তরীণ পুরষ্কারও অফার করে। এটি আরেকটি কারণ যে "দ্রুত" পরিবর্তনগুলি প্রায় কখনই এত দ্রুত হয় না।
আর হ্যাঁ: হাস্যরস আছে। কোডের অনেক মন্তব্যই ব্যঙ্গের ছোট ছোট শিল্পকর্মে পরিণত হয়: "// ম্যাজিক। স্পর্শ করো না।", "// মাতাল, পরে ঠিক করো" অথবা "// হ্যাক ফর ইই ব্রাউজার (ধরে নিচ্ছি যে ইই একটি ব্রাউজার)"সেই ট্রেঞ্চ হিউমার ডেভেলপার সংস্কৃতির একটি গুরুত্বপূর্ণ অংশ।
অলসতা, অটোমেশন এবং সংস্করণ নিয়ন্ত্রণ: ছদ্মবেশে গুণাবলী
এটা অদ্ভুত শোনাতে পারে, কিন্তু এটি উন্নয়নের পথে। অলসতা, যখন সঠিকভাবে বোঝা যায়, তখন এটি একটি পেশাদার গুণ হিসাবে বিবেচিত হয়।ধারণাটি সহজ: যদি কোনও কিছু পুনরাবৃত্তিমূলক এবং ম্যানুয়াল হয়, তবে কোনও বুদ্ধিমান ব্যক্তি এটি স্বয়ংক্রিয় করার উপায় খুঁজবে যাতে তাদের আর কখনও এটি করতে না হয়। এই "অলসতা" স্ক্রিপ্ট, প্লাগইন, স্বয়ংক্রিয় ক্রিয়া এবং ম্যাক্রোগুলিকে চালিত করে যা আপনি প্রতিদিন ব্যবহার করেন এবং জানেন না যে এগুলি কোথা থেকে এসেছে।
গুরুতর প্রকল্পগুলিতে, সেই দর্শন আরেকটি মূল উপাদানের উপর নির্ভর করে: সংস্করণ নিয়ন্ত্রণ, যেখানে গিটই পরম রাজাগিটের জন্য ধন্যবাদ, দলগুলি একে অপরের উপর পা না রেখে একই প্রকল্পে কাজ করতে পারে, আলাদা শাখায় উদ্ভট ধারণাগুলি পরীক্ষা করতে পারে, যখন কোনও কিছু অর্ধেক অ্যাপ্লিকেশন ভেঙে ফেলে তখন পিছনে ফিরে যেতে পারে, অথবা কে কখন কী স্পর্শ করেছে তা দেখতে পারে।
একজন সৃজনশীল পেশাদার যিনি ডেভেলপারদের সাথে সহযোগিতা করেন, তাদের জন্য মৌলিক বিষয়গুলি বোঝা অপরিহার্য। কমিট, ব্রাঞ্চ, নাকি মার্জ? এটি অনেক সাহায্য করে: এটি আপনাকে উন্নয়নের অগ্রগতি ট্র্যাক করতে, আপনার নকশাকে প্রভাবিত করে এমন কোনও পরিবর্তন কখন চালু করা হয়েছে তা পর্যবেক্ষণ করতে এবং নতুন বৈশিষ্ট্যগুলি কখন লক করবেন এবং ইতিমধ্যে যা আছে তা পালিশ করার উপর মনোযোগ দেওয়ার জন্য আরও ভালভাবে সমন্বয় করতে দেয়।
তদুপরি, অটোমেশনের এই সংস্কৃতি সেইসব কাজের ক্ষেত্রেও প্রযোজ্য যা আপাতদৃষ্টিতে কম "প্রযুক্তিগত": ডিপ্লয়মেন্ট স্ক্রিপ্ট, স্বয়ংক্রিয় ডকুমেন্টেশন জেনারেশন, প্রতি রাতে স্বয়ংক্রিয়ভাবে চলমান পরীক্ষা, পাইপলাইন যা সম্পদ রূপান্তর করে, ছবি সংকুচিত করে, অথবা সংস্করণ তৈরি করে মানুষের হস্তক্ষেপ ছাড়াই বিভিন্ন ডিভাইসের জন্য। এই সবকিছুই এমন একজনের কাছ থেকে এসেছে যিনি একই প্রক্রিয়াটি একশবার হাতে পুনরাবৃত্তি করতে অস্বীকৃতি জানিয়েছেন।
মন্তব্য, স্পষ্ট নাম, এবং পঠনযোগ্য কোডের প্রতি এক আবেশ
ঠিক যেমন সুপরিচিত স্তর এবং সংগঠিত গোষ্ঠী সহ একটি ডিজাইন ফাইল অসীমভাবে প্রশংসিত হয়, কোডের জন্য ক্রম, প্রসঙ্গ এবং ভালো ট্যাগ প্রয়োজন।অন্যথায়, এটি একটি দুর্গম জঙ্গলে পরিণত হবে, এমনকি যে ব্যক্তি এটি কয়েক সপ্তাহ আগে লিখেছিল তার জন্যও।

ভালো প্রোগ্রামাররা দুটি জিনিসের উপর অত্যন্ত গুরুত্ব দেন: অর্থপূর্ণ নাম এবং মন্তব্য যা বাস্তব প্রেক্ষাপট প্রদান করেএকটি ভেরিয়েবল কল করা userAge o totalCost এটি আরও অনেক কিছু বলে x o tempএবং কেন একটি নির্দিষ্ট অ্যালগরিদম বেছে নেওয়া হয়েছে বা কোন কৌশলটি ব্যবহার করা হচ্ছে তা লক্ষ্য করা "// দুটি সংখ্যা যোগ করুন" মন্তব্য করার চেয়ে অসীমভাবে বেশি কার্যকর।
বাস্তবে, এটি প্রকল্পের জন্য এক ধরণের অভ্যন্তরীণ "প্রযুক্তিগত স্ক্রিপ্ট" তৈরি করে, যা অন্যান্য বিকাশকারীরা এটি বুঝতে পড়তে পারে। প্রতিটি মডিউলের পিছনে থাকা সফ্টওয়্যার ডিজাইনের সিদ্ধান্তগুলিযখন কোডটি ভালোভাবে লেখা হয়, তখন কখনও কখনও সেরা মন্তব্যটি নিজেই কোডটি হয়, যা সেই সুনির্বাচিত নামগুলির জন্য নিজেকে ব্যাখ্যা করে।
স্পষ্টতার প্রতি এই আবেশ আপনার শোনা ধারণাগুলির সাথে খুব ভালোভাবে খাপ খায়, যেমন পরিষ্কার কোড, রিফ্যাক্টরিং, অথবা "নিজেকে পুনরাবৃত্তি করবেন না" (DRY) নিয়মএই সমস্ত দর্শন একই জিনিসের দিকে ইঙ্গিত করে: সফ্টওয়্যারটি বোঝা, পরিবর্তন, পরীক্ষা এবং সবকিছু ভেঙে না ফেলে প্রসারিত করা সহজ হওয়া উচিত।
পরীক্ষা, টিডিডি, এবং কেন "আজই এটি কাজ শুরু করুন" যথেষ্ট নয়
আপনার ব্যবহৃত যেকোনো প্রোগ্রামের আরেকটি কম দৃশ্যমান কিন্তু মৌলিক দিক হল পিছনের পরীক্ষামূলক বাস্তুতন্ত্রইউনিট পরীক্ষা, ইন্টিগ্রেশন পরীক্ষা, স্বয়ংক্রিয় বা ম্যানুয়াল পরীক্ষাগুলি সঠিকভাবে বিদ্যমান যাতে আপনার অনুরোধ করা একটি বিকল্প যোগ করে এমন একটি ছোট পরিবর্তন সিস্টেমের আরও ২০টি অংশ নীরবে ভেঙে না দেয়।
TDD (টেস্ট ড্রাইভেন ডেভেলপমেন্ট) এর মতো পদ্ধতি রয়েছে যেখানে প্রথমে পরীক্ষাগুলি লেখা হয়, এবং তারপর সেই কোড যা তাদের পাস করতে সাহায্য করে।এটি স্বজ্ঞাততার বিপরীত বলে মনে হচ্ছে, কিন্তু এটি ডেভেলপারকে শুরু থেকেই পছন্দসই আচরণ, প্রান্তের কেস এবং সময়ের সাথে সাথে সবকিছু সঠিকভাবে কাজ করছে কিনা তা কীভাবে যাচাই করা যায় সে সম্পর্কে ভাবতে বাধ্য করে।
সৃজনশীল দলগুলির জন্য, এটি খুব সুনির্দিষ্ট কিছুতে অনুবাদ করে: "বোতামে এই ছোট্ট পরিবর্তন" বা "একটি নতুন প্রভাব যোগ করার" অনুরোধ করলে পরীক্ষা এবং যাচাইকরণের ক্ষেত্রে প্রকৃত খরচ হয়।এমন নয় যে তারা আপনাকে সাহায্য করতে চায় না; এটা এই যে যেকোনো পরিবর্তন, ইন্টারফেসের কাছে তা যত ছোটই মনে হোক না কেন, তার পার্শ্বপ্রতিক্রিয়া হতে পারে এবং তাদের নিশ্চিত করতে হবে যে অ্যাপ্লিকেশনের বাকি অংশটি যেন ভেঙে না যায়।
এছাড়াও, অনেক কোম্পানি এমন পরীক্ষামূলক স্যুট স্থাপন করে যা দল ঘুমানোর সময় বা সপ্তাহান্তে চলে: কোডটি সংকলিত হয়, পরীক্ষার একটি ব্যাটারি চালানো হয় এবং ফলাফল পর্যালোচনা করা হয়।যদি কিছু ভুল হয়, তাহলে তা শেষ ব্যবহারকারীদের কাছে পৌঁছানোর অনেক আগেই শনাক্ত করা হয়... এবং এর মধ্যে সেই সৃজনশীলরাও অন্তর্ভুক্ত যারা উৎপাদনে এই সরঞ্জামগুলির উপর নির্ভর করে।
অ্যালগরিদম, ডেটা স্ট্রাকচার এবং গতি: আপনার সরঞ্জামগুলির অদৃশ্য ইঞ্জিন
প্রতিটি ফাইল অনুসন্ধানের পিছনে, এক সেকেন্ডে প্রয়োগ করা প্রতিটি ফিল্টারের পিছনে, অথবা প্রতিটি ক্যানভাস যা হাজার হাজার স্তরের পরেও তরল থাকে, তার পিছনে এমন কিছু আছে যা আপনি দেখতে পান না: ক্ষতিকারক উদ্দেশ্য নিয়ে নির্বাচিত অ্যালগরিদম এবং ডেটা স্ট্রাকচারএকটি তালিকা, একটি স্ট্যাক, একটি সারি, অথবা একটি অভিধান (হ্যাশম্যাপ) ব্যবহার করলে কর্মক্ষমতার ক্ষেত্রে বিশাল পার্থক্য তৈরি হয়।
উদাহরণস্বরূপ, যদি আপনার দ্রুত জিনিসপত্র খুঁজে বের করার প্রয়োজন হয়, তাহলে একটি অভিধান একটি মৌলিক তালিকার চেয়ে অনেক বেশি কার্যকর।এটি আপনার সম্পাদককে মিলিসেকেন্ডে একটি স্টাইল, প্রতীক বা সম্পদ খুঁজে পেতে সাহায্য করে, এমনকি একটি বিশাল প্রকল্পেও। পিক্সেল, ভেক্টর, 3D মেশ বা অডিও ট্র্যাক কীভাবে সংরক্ষণ করা হয় তার ক্ষেত্রেও একই কথা প্রযোজ্য।
যখন একটি সৃজনশীল অ্যাপ ধীর গতির হয়, তখন সবসময় আপনার কম্পিউটারের দোষ থাকে না: কখনও কখনও বাধা হয়ে দাঁড়ায় বহু বছর আগে নেওয়া সফ্টওয়্যার ডিজাইনের সিদ্ধান্তের মধ্যে।অথবা দ্রুত শর্টকাটগুলিতে যা "অস্থায়ীভাবে" নেওয়া হয়েছিল এবং তারপর চিরতরে থেকে গিয়েছিল, যা অনেক প্রকল্পে দুঃখজনকভাবে সাধারণ।

এই কারণেই অনেক পেশাদার পরামর্শ কলাম জোর দিয়ে বলে যে অকাল অপ্টিমাইজেশন এড়িয়ে চলুন, তবে শুরু থেকেই সঠিক অ্যালগরিদম এবং কাঠামো বেছে নিন।এই শক্ত ভিত্তি স্কেলেবিলিটির সুযোগ করে দেয়: আরও স্তর, আরও প্রভাব, আরও ব্যবহারকারী, আরও ডিভাইস... সিস্টেম ক্র্যাশ না করেই।
প্রোগ্রামার সংস্কৃতি: অদ্ভুত রসিকতা, বাইনারি এবং "চামচ নেই"
যদি আপনি ডেভেলপারদের সাথে কাজ করেন, তাহলে আজ হোক কাল হোক আপনি এরকম কিছু শুনতে পাবেন "১০ ধরণের মানুষ আছে: যারা বাইনারি বোঝে এবং যারা বোঝে না।"এটি একটি ক্লাসিক রসিকতা যা এই সত্যটি নিয়ে খেলা করে যে বাইনারিতে ১০ দশমিকে ২। এই ধরণের প্রযুক্তিগত রসিকতা একটি সম্পূর্ণ উপসংস্কৃতির অংশ: মিমস, সাবরেডিট, দ্য ম্যাট্রিক্স, স্টার ওয়ার্স, স্টারশিপ ট্রুপার্সের রেফারেন্স...
বিখ্যাত বাক্যাংশটি "চামচ নেই" ম্যাট্রিক্স উপমাটি প্রায়শই ইন্টারফেসের মধ্য দিয়ে দেখার এবং নীচে একটি অ্যাপ্লিকেশন কীভাবে তৈরি করা হয়েছে তা বোঝার অনুভূতি বর্ণনা করতে ব্যবহৃত হয়। যখন আপনি প্রোগ্রামিং করতে জানেন, তখন একটি প্রোগ্রাম বা ওয়েবসাইটের দিকে তাকানো আর কেবল এটি গ্রাস করে না: আপনি এর মডিউল, এর স্থাপত্য, যন্ত্রাংশগুলি কীভাবে যোগাযোগ করে, কোথায় কিছু ব্যর্থ হতে পারে তা কল্পনা করতে শুরু করেন।
বাগগুলিও এমনভাবে আলোচনা করা হয়েছে যেন তারা স্টারশিপ ট্রুপারস প্রাণী: দেখতে ছোট, কিন্তু বিশাল বিশৃঙ্খলা সৃষ্টি করতে সক্ষমসেই ভাগ করা ভাষা সম্প্রদায় তৈরি করে; হাস্যরস হল আপনার কোডের সাথে বিশাল সিস্টেম ঝুলন্ত থাকার চাপ মোকাবেলা করার একটি উপায়।
একজন সৃজনশীল পেশাদারের জন্য, সেই সংস্কৃতির সাথে সংযোগ স্থাপন প্রোগ্রামারদের সাথে সম্পর্ককে মসৃণ করে তোলে: তার রসিকতা, তার উল্লেখ এবং তার অদ্ভুততা বোঝার জন্য সময়সীমা, প্রযুক্তিগত সীমাবদ্ধতা, অথবা শেষ মুহূর্তের পরিবর্তন নিয়ে আলোচনা করার সময় এটি যোগাযোগকে ব্যাপকভাবে সহজতর করে।
প্রোগ্রামাররা (আসলে) কীভাবে শেখে এবং আপনার জন্য এর অর্থ কী
আরেকটি মজার তথ্য হলো, যদিও ডিগ্রি, বুটক্যাম্প এবং মাস্টার্স প্রোগ্রাম রয়েছে, প্রোগ্রামিংয়ের আসল শেখার বেশিরভাগই ঘটে কাজ করার মাধ্যমেএটি বিশ্ববিদ্যালয়ের বিষয়ের চেয়ে বরং একটি বাণিজ্যের মতো: আপনি কিছু করে, ভাঙতে, মেরামত করে এবং বারবার চক্রটি পুনরাবৃত্তি করে শিখতে পারেন।
বেশিরভাগ ডেভেলপার একটি ধারণায় একমত: তোমার সবকিছু মুখস্থ করার দরকার নেই।এখানে অফিসিয়াল ডকুমেন্টেশন, ফোরাম, নিবন্ধ, "97 টি জিনিস যা প্রতিটি প্রোগ্রামারের জানা উচিত" এর মতো বই এবং প্রচুর অনলাইন রিসোর্স রয়েছে, যেমন স্প্যানিশ ভাষায় প্রোগ্রামিং ভাষার উপর টিউটোরিয়ালগুরুত্বপূর্ণ বিষয় হলো, কীভাবে কোনও নির্দিষ্ট সমস্যায় সেই জ্ঞান অনুসন্ধান, নির্বাচন এবং প্রয়োগ করতে হয় তা জানা, ঠিক যেমন আপনি ফটোশপের সমস্ত শর্টকাট মুখস্থ করতে পারেন না, কিন্তু প্রয়োজনের সময় কোথায় দেখতে হবে তা জানেন।
অধিকন্তু, প্রায় সবাই বিশেষজ্ঞ হওয়ার পরামর্শ দেয়: একটি এলাকা (ওয়েব, মোবাইল, ব্যাকএন্ড, ডেটা, ভিডিও গেমস...) বেছে নিন এবং আরও গভীরে যান। পুরো প্রযুক্তিগত ভূদৃশ্যকে কভার করার চেষ্টা করার পরিবর্তে। একই যুক্তি আপনাকে অনুপ্রাণিত করতে পারে: আপনার সৃজনশীল ক্ষেত্রে সফ্টওয়্যার কীভাবে কাজ করে তা সত্যিকার অর্থে বোঝা আপনাকে কোনও কিছু আয়ত্ত না করেই সবকিছু সম্পর্কে অল্প কিছু জানার চেয়ে অনেক বেশি শক্তিশালী করে তুলবে।
অনেক অভ্যন্তরীণ জরিপেও যে বিষয়টি পুনরাবৃত্তি করা হয় তা হল পরামর্শদাতা এবং "জোড়া প্রোগ্রামিং"-এর গুরুত্ব: জোড়ায় জোড়ায় প্রোগ্রাম করুন, অন্যদের আপনার কোড পর্যালোচনা করতে দিন, সাহায্য চাইতে দিন এবং সমালোচনা গ্রহণ করতে দিন।ঠিক যেমনটা আপনি অন্য কারো সাথে স্টোরিবোর্ড বা মুড বোর্ড শেয়ার করেন এবং লেখাটি উন্নত করার জন্য প্রতিক্রিয়া গ্রহণ করেন।
ডেভেলপারদের কাজের বাস্তবতা: একাকীত্ব, একাগ্রতা, এবং বিশাল হেডফোন
ভিতরে, একটি সফটওয়্যার টিমের দৈনন্দিন জীবন একটি সৃজনশীল স্টুডিওর সাথে বেশ কিছু জিনিস ভাগ করে নেয়: পর্দার সামনে অনেক ঘন্টা, দীর্ঘ সময় ধরে একাগ্রতা, এবং বাধা সহ প্রেম-ঘৃণার সম্পর্কদলের অর্ধেক সদস্যকে বিশাল শব্দ-বাতিলকারী হেডফোন পরা দেখা অস্বাভাবিক নয়, প্রায় যেন তারা বাধ্যতামূলক কাজের হেলমেট।
সঙ্গীত একটি উৎপাদনশীল হাতিয়ার হয়ে ওঠে: স্থাপত্য চিন্তাভাবনার জন্য নরম তালিকা, যান্ত্রিক কাজের জন্য আরও শক্তিশালী কিছু, জটিল বাগ ডিবাগ করার জন্য সম্পূর্ণ নীরবতাহেডফোন কেবল একটা বাতিক নয়: এগুলো "এখন আমাকে বাধা দিও না, আমি ফোকাস মোডে আছি" - এই সামাজিক সংকেত, ঠিক যেমন কিছু স্টুডিও টেবিলে পতাকা বা ছোট শারীরিক সংকেত ব্যবহার করে।

আরেকটি, কম দৃশ্যমান দিকও আছে: কম্পিউটারের সামনে একা এত সময় কাজ করা একঘেয়েমি হতে পারেঅনেক প্রবীণ সৈনিক জোর দিয়ে বলেন যে আপনার নিজেকে রোবটের মতো ব্যবহার করা উচিত নয় এবং কোডিংয়ের বাইরে জীবন গড়ে তোলা অত্যাবশ্যক: শখ, সম্পর্ক, শারীরিক কার্যকলাপ, বিশ্রাম। সমাধান ডিজাইনকারী এবং ইন্টারফেস ডিজাইনকারী মস্তিষ্ক একই, এবং এর জন্য স্থান প্রয়োজন।
একই সাথে, খুব বাস্তব কিছু আছে যাকে বলা হয় প্রোগ্রামিং আসক্তিযখন তুমি সত্যিই কোন কিছুতে মগ্ন থাকো, তখন "শুধু এই মডিউলটি শেষ করার জন্য" সারা রাত কাটানো সহজ এবং খাওয়া, ঘুমানো, এমনকি তোমার চেয়ার থেকে উঠতেও ভুলে যাওয়া। যেকোনো সৃজনশীল আবেগের মতোই, তোমাকে ক্লান্তি এড়াতে সীমা নির্ধারণ করতে শিখতে হবে।
মানসিকতা, প্রতারক সিন্ড্রোম, এবং সুস্থ প্রতিযোগিতা
প্রোগ্রামিংয়ে আসা বেশিরভাগ মানুষই কারিগরি পটভূমি থেকে আসে, কিন্তু এর মানে এই নয় যে "মানবিক" পটভূমি সম্পন্ন কাউকে পুনরায় প্রশিক্ষণ দেওয়া যাবে না।প্রবীণরা যা সবচেয়ে বেশি মূল্য দেন তা হল উচ্চ বিদ্যালয়ের ডিপ্লোমার ধরণ নয়, বরং ধারাবাহিকতা, শেখার ক্ষমতা এবং যৌক্তিক চিন্তাভাবনার সাথে কিছুটা স্বাচ্ছন্দ্য।
এই শিল্পের প্রায় সকলেই বেশ ব্যাপক কিছু নিয়ে বাস করে: ইমপোস্টার সিন্ড্রোম"আমি যথেষ্ট জানি না, আমি ধরা পড়ে যাব, আমি কাজটি করতে পারব না" এই অনুভূতি আপনার যত বয়স্কই হোক না কেন, দেখা দিতে পারে। অনেকেই এটিকে শেখার প্রেরণা হিসেবে ব্যবহার করেন, যতক্ষণ না এটি পক্ষাঘাতগ্রস্ত উদ্বেগের দিকে পরিচালিত করে।
প্রতিযোগিতামূলকতাও এই ভূদৃশ্যের একটি অংশ, কিন্তু এর সুস্থ রূপে এটি অনেকটা এরকম যে কে একটি মডিউল সবচেয়ে ভালোভাবে অপ্টিমাইজ করে অথবা কে সবচেয়ে মার্জিত কোড লেখে তা দেখার জন্য সহকর্মীদের মধ্যে "প্রতিদ্বন্দ্বিতা" কে কার উপর পা রাখবে তা দেখা যুদ্ধের মতো নয়। একজন প্রোগ্রামারকে আপনার কাজের প্রশংসা করতে দেখা, অন্য একজন সৃজনশীল ব্যক্তির আপনার চিত্র বা ভিডিওর প্রশংসা করার মতোই।
এই পরিবেশে, প্রতিক্রিয়া গ্রহণ করতে শেখা অত্যন্ত গুরুত্বপূর্ণ: যখন তোমার প্রশংসা করা হয়, তখন পথ হারাবেন না; যখন তোমার সমালোচনা করা হয়, তখন হাল ছাড়বেন না।এই খাতটি এত দ্রুত পরিবর্তিত হয় যে সবসময় এমন প্রযুক্তি থাকবে যা আপনার নিয়ন্ত্রণে থাকবে না এবং এমন লোক থাকবে যারা নির্দিষ্ট কিছু সম্পর্কে আরও বেশি জানে, এবং সেই সাথে জীবনযাপন করা খেলার অংশ।
সবচেয়ে বেশি সময়সাপেক্ষ অংশ: ডিবাগিং, হতাশা পরিচালনা এবং কখন পরিবর্তন করবেন তা নির্ধারণ করা
যদি আপনি কেবল শেষ ফলাফলগুলি দেখেন, তাহলে আপনার মনে হতে পারে যে ডেভেলপাররা নতুন বৈশিষ্ট্য লেখার জন্য সারা দিন ব্যয় করে, কিন্তু বাস্তবে বেশিরভাগ সময়ই ত্রুটিগুলি ডিবাগ করতে এবং ইতিমধ্যে বিদ্যমান জিনিসগুলি সামঞ্জস্য করতে ব্যয় হয়।একটি প্রকল্পের সাথে এগিয়ে যাওয়ার অর্থ প্রায়শই ছোট ছোট বাগগুলি আনলক করা যা সিস্টেমের বাকি অংশকে অগ্রগতি থেকে বাধা দেয়।
এর ফলে হতাশার উল্লেখযোগ্য শিখর তৈরি হয়: সনাক্তকরণকে বাধাগ্রস্ত করে এমন সমস্যা, স্পষ্ট ব্যাখ্যা ছাড়াই ব্যর্থ বিল্ড, ক্লায়েন্টরা অসম্ভব সময়সীমা দাবি করছেঅনেক পেশাদার বলেছেন যে তাদের এমন মুহূর্ত এসেছে যখন তারা সবকিছু ছেড়ে দিতে এবং সেক্টর পরিবর্তন করতে চায়, বিশেষ করে যখন তারা জটিল পণ্য নিয়ে কাজ করে।
তারা যে কৌশলগুলি সুপারিশ করে তা পরিচিত শোনাচ্ছে: অধ্যবসায়, আত্ম-প্রেরণা, ভালোভাবে সম্পন্ন কাজের প্রতি এক ধরণের গর্ব এবং শিল্পের প্রতি সৎ আবেগযেকোনো কঠিন সৃজনশীল শৃঙ্খলার মতোই, যখন কিছু কাজ না করে তখন এই মিশ্রণটিই আপনাকে আবার চেষ্টা করতে বাধ্য করে এবং যারা পৃষ্ঠে থাকে তাদের থেকে যারা সত্যিকারের ভালো হয়ে ওঠে তাদের আলাদা করে।
একটি নির্দিষ্ট মাত্রার চাকরির পরিবর্তনও সাধারণ: ভালো প্রার্থীরা ক্রমাগত অফার পাচ্ছেন।এখানে অনেক পরামর্শ একই জিনিসের দিকে ইঙ্গিত করে: এমন একটি কোম্পানির সংস্কৃতি সন্ধান করুন যা আপনার মূল্যবোধের সাথে সামঞ্জস্যপূর্ণ এবং মনে রাখবেন যে, একটি সাক্ষাত্কারে, আপনি কোম্পানির মূল্যায়নও করছেন। আপনি এর সমস্যাগুলি নিয়ে চিন্তা করার জন্য অনেক ঘন্টা ব্যয় করবেন; আপনার জীবনবৃত্তান্তে যতটা মনে হতে পারে তার চেয়ে ভালো আন্তঃব্যক্তিক মিল এবং ভাগ করা মূল্যবোধ থাকা বেশি গুরুত্বপূর্ণ।
প্রযুক্তিগত সাক্ষাৎকার, দলগত একীকরণ এবং যোগাযোগ

উন্নয়ন সম্প্রদায়ের মধ্যে, টেকনিক্যাল সাক্ষাৎকারগুলি বেশ বিখ্যাত... এবং তাদের বেশ খারাপ খ্যাতিও রয়েছে। অনেক অভিজ্ঞ ব্যক্তি বিশ্বাস করেন যে এগুলোকে অতিরিক্ত মূল্যায়ন করা হয়, এবং ব্যর্থতা তোমার সম্ভাবনা সম্পর্কে খুব বেশি কিছু বলে না।তারা সাধারণত চাপের মধ্যে থাকা নির্দিষ্ট দক্ষতার পরিমাপ করে, দীর্ঘমেয়াদে আপনার শেখার, সহযোগিতা করার এবং সফলভাবে প্রকল্পগুলি সম্পন্ন করার প্রকৃত ক্ষমতা নয়।
এর পরিবর্তে, নরম দক্ষতা প্রায়শই সমস্ত পার্থক্য তৈরি করে: যোগাযোগ করতে জানা, কিছু বোঝা না গেলে প্রশ্ন জিজ্ঞাসা করা, প্রতিক্রিয়া একীভূত করা, বিভিন্ন পটভূমির লোকেদের সাথে সহযোগিতা করা (যেমন আপনি, যদি আপনি সৃজনশীল হন) এবং উত্তেজনাপূর্ণ মুহুর্তগুলিতে শান্ত থাকা।
কোনও কোম্পানিতে যোগদানের সময়, যেকোনো জুনিয়র প্রোগ্রামারের জন্য শীর্ষ সুপারিশ হল প্রশ্ন জিজ্ঞাসা করতে ভয় পাবেন না, তবে ভেবেচিন্তে করুন।প্রশ্নগুলির সমাধানের জন্য একজন পরামর্শদাতার সাথে নির্দিষ্ট সময় নির্ধারণ করুন, জরুরি না হলে বাধা দেওয়া এড়িয়ে চলুন এবং আপনার প্রশ্নগুলি পুঙ্খানুপুঙ্খভাবে প্রস্তুত করুন। আপনি যখন একটি প্রযুক্তিগত দলে যোগদান করেন তখনও একই কথা প্রযোজ্য: আপনার যোগাযোগ যত স্পষ্ট এবং সুগঠিত হবে, আপনি তত ভালভাবে এতে ফিট হতে পারবেন।
যেসব পরিবেশে একজন পরামর্শদাতা নিযুক্ত করা হয় না, সেখানে সবচেয়ে যুক্তিসঙ্গত পদক্ষেপ হল অভিজ্ঞ কারো আস্থা অর্জন করা এবং একটি দৃঢ় পেশাদার সম্পর্ক তৈরি করা সেই ব্যক্তির সাথে। পরিশেষে, বড় প্রকল্পগুলি কোড এবং ডিজাইনের মানের উপর যতটা নির্ভর করে, ততটাই নির্ভর করে যারা এটি তৈরি করে তাদের মধ্যে সম্পর্কের মানের উপর।
পরিশেষে, আপনি প্রতিদিন যে সরঞ্জামগুলি ব্যবহার করেন তার জাদুটি আসে মোটামুটি মানবিক মিশ্রণ থেকে: যারা ক্রমাগত শেখে, হতাশ হয়, প্রতিযোগিতামূলক হয়, সহযোগিতা করে, অদ্ভুত বাইনারি রসিকতায় হাসে এবং ধীরে ধীরে ধারণাগুলিকে সফটওয়্যারে রূপান্তরিত করেযখন আপনি একজন সৃজনশীল ব্যক্তি হিসেবে এই কৌতূহল এবং কাজের ধরণগুলি বোঝেন, তখন একই ভাষায় কথা বলা, আসলে কী তৈরি করা যেতে পারে তা জিজ্ঞাসা করা এবং কম্পিউটারকে আপনার কল্পনার মতো কাজ করার জন্য প্রায় "জাদুকরী" প্রক্রিয়ায় অংশগ্রহণ করা অনেক সহজ হয়ে যায়।
