পেশাদার সফ্টওয়্যার বিকাশকারী দলগুলি অ-তুচ্ছ প্রকল্পগুলিতে ডিজাইন জটিলতার সাথে কীভাবে আচরণ করে?


9

প্রথমত, আমি বুঝতে পারি যে এই প্রশ্নটি কিছুটা দীর্ঘ এবং অস্পষ্ট হয়ে যেতে পারে এবং আমি এর জন্য ক্ষমা চাইছি। এটি সম্ভবত "যিনি" পেয়েছেন তার সংক্ষিপ্ত নাম সহ এটি সম্ভবত একটি প্রাথমিক সমস্যা, তবে আমি নিজেকে এই বিষয়ে অভাব বোধ করি, দয়া করে সমস্যাটি বর্ণনা করার ক্ষেত্রে আমাকে সহ্য করুন।

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

এখন, আমি নিজেকে একটি দলের নেতৃত্বের সন্ধান করি, তবে কর্পোরেট পরিবেশে নয় - প্রকৌশল অ্যাপ্লিকেশনগুলির জন্য আমি বৈজ্ঞানিক সফ্টওয়্যার (সি ++ তে) বিকাশের জন্য বিশ্ববিদ্যালয়ের পক্ষে কাজ করি। হঠাৎ করে প্রকল্পটি বাড়ছে (তুলনামূলকভাবে) বড় এবং আমি বেশিরভাগ সময় আমার মনটি জড়িয়ে রাখতে সমস্যা করি। আমি বেশিরভাগ ক্ষেত্রে দুটি বিষয়ে প্রচুর সময় এবং প্রচেষ্টা হারাচ্ছি:

  1. যখন আমাকে কোডের কোনও বিভাগে ফিরে যেতে হবে যখন আমি কিছুক্ষণ কাজ করি নি, তখন এটি কীভাবে কাজ করেছে তা মনে করতে আমার অসুবিধা হয়। আমি প্রাসঙ্গিক ক্লাসগুলির জন্য শিরোনাম ফাইলগুলি পর্যালোচনা করতে এবং উত্স ফাইলগুলির পথে আমার দেওয়া মন্তব্যগুলি পড়তে অনেক সময় ব্যয় করি। আমি আশা করি যে "স্কিম্যাটিক" এর কোনও রূপ ছিল আমি ছবিটি আরও সহজে দেখতে পেলাম এবং ফিরে পেতে পারি;
  2. আমি যখন পরিবর্তনগুলি পরিচয় করিয়ে দিই, কখনও কখনও আমি বুঝতে পারি যে আমি যা করার চেষ্টা করছি তা অন্য কোথাও ভেঙে ফেলবে (বা আরও খারাপ এটি কেবল রানটাইমের সময় অবাক হওয়ার মতো দেখায়)। আমি প্রত্যাবর্তন করি এবং এটি অন্যভাবে করা শুরু করি, কেবলমাত্র অন্য কোনও উপাদানগুলির প্রভাবকে আমি উপেক্ষা করেছি find আমি আশা করি যে এখানে কিছু "আর্কিটেকচার ডায়াগ্রাম" ছিল যেখানে আমি দেখতে পেলাম যে কীভাবে জিনিসগুলি সম্পন্ন হয়, কীভাবে আমি কী করার চেষ্টা করছি তা অন্যান্য উপাদানগুলিকে প্রভাবিত করবে এবং পরিবর্তনগুলি বাস্তবায়ন শুরু করার আগে আমার জন্য বিশদ পরিকল্পনা করার উপায় way

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

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

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

পড়ার জন্য অনেক ধন্যবাদ, আমি আরও সংক্ষিপ্তভাবে কী বলতে চাইছি তা বলতে অক্ষম ছিলাম (সফ্টওয়্যার ডিজাইনের অভিজ্ঞতা এবং শব্দভাণ্ডারের অভাব)।


2
আমি মনে করি আপনি যে সমস্যার কথা বলছেন তার সর্বাধিক সাধারণ পেশাদার প্রতিক্রিয়া হ'ল "এটিকে ফাক করুন", তারপরে পরিচালন, পণ্য বা অন্য কোনও এলোমেলো এসওবিকে দোষারোপ করে।
এডওয়ার্ড স্ট্রেঞ্জ

উত্তর:


9

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

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

নিখুঁত বিশ্বে আপনার কাছে এমন একটি নকশা নথি থাকতে হবে যা সিস্টেমে বিভিন্ন মডিউল নির্ধারণ করে এবং তাদের নিজ নিজ দায়বদ্ধতার বর্ণনা দেয় এবং আপনার প্রতিটি মডিউল কেবলমাত্র সেই দস্তাবেজের কাছে যা করতে পারে তা বোঝাতে পারে: "এই মডিউলটি সরবরাহ করে ডিজাইন ডকুমেন্টের ৪.৮ বিভাগে বিস্তারিত হিসাবে ফাবুলোট্রন ডেটা সংগ্রহ পরিষেবা: http://fabulotron.org/design/section4-8.html । " আপনার যদি এর মতো কিছু না থাকে তবে প্রতিটি মডিউলের উপর কাজ করার সাথে সাথে একটি সংক্ষিপ্ত বিবরণ লিখতে শুরু করুন। আপনাকে কোনও বই লেখার দরকার নেই - কয়েকটি অনুচ্ছেদে প্রায়শই আপনাকে ওরিয়েন্টেড করার জন্য যথেষ্ট enough

আমি যখন পরিবর্তনগুলি পরিচয় করিয়ে দিই, কখনও কখনও আমি বুঝতে পারি যে আমি যা করার চেষ্টা করছি তা অন্য কোথাও ভেঙে ফেলবে (বা আরও খারাপ এটি কেবল রানটাইমের সময় অবাক হওয়ার মতো দেখায়)। আমি প্রত্যাবর্তন করি এবং এটি অন্যভাবে করা শুরু করি, কেবলমাত্র অন্য কোনও উপাদানগুলির প্রভাবকে আমি উপেক্ষা করেছি find

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

আমি আশা করি এমন কিছু "আর্কিটেকচার ডায়াগ্রাম" ছিল যেখানে আমি কীভাবে জিনিসগুলি সম্পন্ন হতে পারি তা দেখতে পেতাম

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

অন্য ধরণের স্ট্যান্ডার্ড অংশটি নকশার নিদর্শনগুলি থেকে আসে। এগুলি স্ট্যান্ডার্ড ধারণা যা দুটি বস্তুর মধ্যে সম্পর্ক কীভাবে কাজ করে তা বোঝাতে শর্টহ্যান্ড হিসাবে ব্যবহার করা যেতে পারে।


উত্তরের জন্য ধন্যবাদ. অবশ্যই আমি বহু বছর ধরে এসটিএল ব্যবহার করছি, তবে আমার প্রোগ্রামটি কিছু স্বীকৃত গণনা সম্পাদনের জন্য যে ধাপগুলি অনুসরণ করে তার ক্রম কখনও কখনও এর ব্যবহারের সাথে পুরোপুরি চিত্রিত করাও কঠিন is একই মডিউল জন্য যায়। আমি এর পরিবর্তে অন্যটির বিরতি বোঝাতে চাইছি না, বরং কোথাও কোনও কিছু পরিবর্তনের ফলে একটি ত্রুটির সৃষ্টি হয় যেমন যখন কোনও জিইউআইতে কোনও ব্যবহারকারী অ-মানক কিছু করে যেখানে একটি জটিল ক্রমটি সম্পূর্ণ করার জন্য তারা যে পদক্ষেপগুলি নিয়ে থাকে তার অপ্রত্যাশিত ক্রম দ্বারা আরও জটিল হয়।
neuviemeporte

5

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

প্রথম জিনিস ছিল আমাকে এক বসে ছিল বই পড়া পরিষ্কার কোড । এটি একটি দুর্দান্ত বই যা আমাকে কোডটি কীভাবে লিখতে হবে তা বুঝতে সাহায্য করেছিল যা আমি যখন এটিতে ফিরে যাই তখন বা অন্য কেউ বুঝতে পারে।

দ্বিতীয় জিনিসটি ছিল ভাল মানের পরীক্ষা, ইউনিট, সংহতকরণ, স্বীকৃতি write যদি আপনার কোডটি ভালভাবে পরীক্ষা করা হয় তবে আপনি যখন কোনও কিছু ভেঙেছেন তখন খুব তাড়াতাড়ি আপনি জানতে পারবেন এবং দ্রুত সমস্যাটি সনাক্ত করতে সক্ষম হবেন। ইন্টারনেটে প্রচুর ভাল পরীক্ষার সংস্থান রয়েছে এবং আমি নিশ্চিত নই যে আপনাকে পরামর্শ দেওয়ার জন্য সবচেয়ে ভাল।

আমার মূল পয়েন্টগুলি টেস্টিং এবং ক্লিন কোড।


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

2

বৃহত্তর সফ্টওয়্যার সিস্টেমগুলি সংগঠিত করার জন্য এখানে কিছু উচ্চ-স্তরের ধারণা রয়েছে। আমার বেশিরভাগ অভিজ্ঞতা ইন্টারনেট সিস্টেমে রয়েছে তবে আমি মনে করি এই ধারণাগুলি ইঞ্জিনিয়ারিং সফ্টওয়্যারটিতে প্রযোজ্য।

  • অপেক্ষাকৃত বিচ্ছিন্ন মডুলার ব্লকগুলিতে কার্যকারিতা পৃথক করুন। উদাহরণস্বরূপ, আপনার সফ্টওয়্যার সরবরাহ করে এমন প্রতিটি গণনার জন্য একটি মডিউল থাকতে পারে।
  • ব্যবহারকারীর ইন্টারফেসের জন্য এমভিসি ডিজাইনের প্যাটার্ন প্রয়োগ করুন, যদি তা থাকে। ইন্টারফেস এবং মডেলটি ভাল-সংজ্ঞায়িত সীমানা দিয়ে আলাদা করুন।
  • গ্রুপ মডিউলগুলিতে স্তরগুলি ব্যবহার করার বিষয়টি বিবেচনা করুন। অ্যাবস্ট্রাকশন স্তরগুলি ব্যবহার করে এমন একটি অ্যাপ্লিকেশনটিতে প্রতিটি স্তর কেবল তার নীচের স্তরের উপর নির্ভর করে।
  • ডকুমেন্টেশন লেখার সময়, ধরে নিবেন আপনি বাস্তবায়ন সংক্রান্ত সমস্ত বিবরণ ভুলে যাবেন। আপনি এই অনুমানের অধীনে প্রচুর ডকুমেন্টেশন লিখবেন - সম্ভবত আপনার কোডের অর্ধেক অংশ মন্তব্য হবে তবে আপনি পরে অনেকটা বিভ্রান্ত হবেন।
  • অটোমেটেড ইউনিট, সংহতকরণ এবং গ্রহণযোগ্যতা পরীক্ষা কিছু জায়গাতে দুর্দান্ত তবে সি ++ বিকাশকারীদের তাদের সম্পর্কে মিশ্র অনুভূতি রয়েছে বলে মনে হয়।
  • ডিজাইনের ধরণগুলিতে ভারী আঁকুন । সাধারণত ভাল ধারণা থাকার পাশাপাশি, নকশা নিদর্শনগুলি সফ্টওয়্যার ইঞ্জিনিয়ারিংয়ে একটি সাধারণ শব্দভাণ্ডার সরবরাহ করে। কোনও শ্রেণিকে উইজেটফ্যাক্টরি বলা হ'ল যোগাযোগের একটি সংক্ষিপ্ত উপায় যা উইজেটগুলি তৈরি করার জন্য এটি বিদ্যমান class

ইঞ্জিনিয়ারিং সফ্টওয়্যার নিয়ে কাজ করার পরে অনেক দিন হয়েছে, সুতরাং আপনার মাইলেজ এই পরামর্শগুলির সাথে পৃথক হতে পারে। শুভকামনা!


1

উত্তরটি হ'ল সফটওয়্যার ইঞ্জিনিয়ারিং।

এটি বড় প্রকল্পগুলির জন্য আপনি কোনও আসল কোডিং সম্পন্ন হওয়ার অনেক আগে প্রয়োজনীয় প্রয়োজনীয়তা সংগ্রহ, প্রক্রিয়া সংজ্ঞা, স্পেসিফিকেশন ইত্যাদির একটি সেট ক্রম অনুসরণ করেন।

পরিবেশ এবং সংস্কৃতির উপর নির্ভর করে বিভিন্ন পদ্ধতি ব্যবহৃত হয়। এন্টারপ্রাইজ ধরণের ব্যবসায়ের ক্ষেত্রে " যৌক্তিক ইউনিফাইড প্রক্রিয়া " বা এর অনুরূপ, প্রযুক্তিগত স্টার্ট আপগুলি সাধারণত অ্যাগিল , সরকারী বিভাগগুলিতে কিছুটা ওভার্কর্কড জলপ্রপাতের পদ্ধতিতে কিছুটা পরিবর্তনের জন্য যায় ।

সমস্ত ক্ষেত্রে প্রক্রিয়া আপনাকে ঠিক কী করছে তা সংজ্ঞায়িত করতে সহায়তা করে এবং প্রকল্পের শেষের দিকে আপনি এটি প্রমাণ করে দিয়েছিলেন।


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

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

@ নিউউইমিপুর্ট: এটি নির্ভর করে। কখনও কখনও প্রয়োজনীয়তা পরিবর্তন হয় বা নতুন প্রয়োজনীয়তা বিকাশের সময় সন্ধান করা হয়। কখনও কখনও প্রয়োজনীয়তা শুরু থেকেই বেশ স্পষ্ট হয় এবং বিকাশের সময় কেবলমাত্র কিছু ছোটখাটো বিশদ পরিবর্তন হয় তবে সামগ্রিক স্থাপত্য একই থাকে।
জর্জিও

1

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

আমি দ্বিতীয় @ ক্লে এর প্রস্তাবনা চাই। "চতুর" সরঞ্জামগুলির দ্বারা অনুমিত হবেন না, কারণ এগুলি সত্যই কেবল সেরা অনুশীলন আইটেম যা আপনি সহজেই কার্যকর (যদি বাধ্যতামূলক না হয়) তবে আপনি যদি চপল প্রক্রিয়া অনুসরণ করেন। তবে অবিচ্ছিন্ন একীকরণ (উদাহরণস্বরূপ) আপনার পদ্ধতিটি যাই হোক না কেন মূল্যবান। তদুপরি, ইউনিট পরীক্ষা (cppUnit?) আপনার বন্ধু। ইউনিট পরীক্ষাগুলি খুব কার্যকরভাবে হওয়া উচিত যদি আপনি সরাসরি ইউআই পরীক্ষার পরিবর্তে আপনার ইউআই দ্বারা ডাকা যুক্তিকে যুক্ত ক্লাসগুলি পরীক্ষা করেন। এমন কয়েকটি সরঞ্জাম রয়েছে যা আপনাকে ইউআই পরীক্ষার স্বয়ংক্রিয় করতে সহায়তা করতে পারে তবে আমি প্রথমে পিছনের দিকের জিনিসগুলি একসাথে পাওয়ার চেষ্টা করব।

শুভকামনা!


1

আমি বিশ্বাস করি যে আপনার সমস্যার তিনটি মাত্রা রয়েছে

  1. প্রোগ্রামার ওরিয়েন্টড
  2. প্রোগ্রাম ওরিয়েন্টড
  3. প্রোগ্রাম রক্ষণাবেক্ষণ - ওরিয়েন্টেড

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

প্রোগ্রাম-কেন্দ্রিক সমস্যার ক্ষেত্রে, আমার এক আপত্তিজনক পরামর্শ হ'ল সি ++ এর চেয়ে উচ্চতর স্তরে বিমূর্তির দিকে চলে যাওয়া যেমন পাইথন বা হাস্কেলের মতো একটি নতুন ভাষা শেখা (পাইথন শেখা বেশ সহজ এবং যদি আপনার কাছে ভাল গণিতবিদ থাকে, হাস্কেল ঠিক দুর্দান্ত)। বিমূর্ততার উচ্চ স্তরে চলে যাওয়া আপনার কোডের আকারটি কম রাখবে, বোঝা সহজ এবং বজায় রাখা সহজ এবং কার্যকরভাবে পরিবর্তনগুলি দ্রুত পরিবর্তন করবে। সুতরাং কোডের মূল 50 লাইনের জায়গায় আপনার 10 টি লাইন কোড থাকতে পারে। এছাড়াও, কম্পিউটার প্রোগ্রামিংয়ে দক্ষতার সাথে কাউকে থাকা অবশ্যই সহায়তা করবে। একটি বিশ্ববিদ্যালয়ে থাকাকালীন, আপনি জিইআইআই এবং ইন্টারফেসগুলিতে কয়েকজন ছাত্রকে জড়িত রাখতে পারেন যাতে আপনি কার্যকারিতাটিতে আরও মনোনিবেশ করতে পারেন। আমি জন লাকোস-এর লার্জ-স্কেল সি ++ সফটওয়্যার ডিজাইন বইটিও সুপারিশ করি(এটি বেশ বড় বই, আপনি যে সময় বইটি পড়তে শুরু করেছিলেন সেই সময়ে আপনি একজন দক্ষ পাইথন প্রোগ্রামার হতে পারেন)

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

  • ফ্রি মাইন্ড - মাইন্ড ম্যাপিং সফটওয়্যার
  • ট্র্যাক - দ্রুত এবং সহজ সফ্টওয়্যার বাগ প্রোগ্রাম এবং একটি উইকি
  • মoinনমাইন - প্রোগ্রাম সম্পর্কে জ্ঞান ভাগ করে নেওয়ার জন্য দ্রুত উইকি

যদিও উপরের টিপসগুলি দীর্ঘমেয়াদে এটির মূল্যবান কিছু শিক্ষণীয় বক্ররেখা গ্রহণ করবে। এবং পরিশেষে, প্রোগ্রামিং ফোটোনিক ইঞ্জিনিয়ারিংয়ের চেয়ে সহজ (যদিও সি ++ প্রোগ্রামিং নয়)


0

আপনার প্রশ্নের মতো, আপনার পক্ষে কার্যকর যে কোনও উত্তর খুব দীর্ঘ এবং অস্পষ্ট হবে - তবে সংক্ষিপ্ত উত্তরটি হ'ল "সফটওয়্যার ইঞ্জিনিয়ারিং"

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

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.