انجمن‌های فارسی اوبونتو

کمک و پشتیبانی => برنامه‌سازی => نویسنده: QSBuntu در 02 دی 1392، 10:19 ق‌ظ

عنوان: اصول مهم تو برنامه نویسی یه برنامه بزرگ چیه؟!!
ارسال شده توسط: QSBuntu در 02 دی 1392، 10:19 ق‌ظ
من برنامه نویسی به معنی چند خط کد زنی رو بلدم (یعنی هیچی بلد نیستم  ;)) این ترم هم درس اصول طراحی نرم افزار داشتیم و استاداین درس مارو با برنامه های تحلیل و طراحی برنامه مثل modelio   آشنا کرد..
 در طول این درس فقط و فقط و فقط فهمیدم که هیچی نمیدونم!!!  به استاد گفتم و استاد هم گفت تنها هدف خودش تو این درس هم همینه که فقط دایره ندانسته های مارو زیاد کنه..و ما بفهمیم که چه چیزهایی نمیدونیم..

اما چیزی که بر من گران آمد(!) این بود که وقتی استاد یه گریزی به اصول برنامه نویسی زد و مثلا گفت که :«باید وابستگی معکوس وجود داشته باشه » من دیگه از اونچیزایی که میدونستم هم دست شستم و برندانستن خود بطور 100 درصدی واقف شدم!!

حالا دوستان عزیز ... هرکس اصولی رو تو نوشتن برنامه با اهمیت بالا میدونه بگه تا لااقل ندونستنام کامل شه!!


خیلی الان نا امیدم و کلا احساس میکنم حتی کد زنی هم بلد نیستم...  الان هم میخوام کمکم شروع کنم برم سراغ qt ... دوستان ابراز نظر بفرمایند!؟؟ خواهشا...
عنوان: پاسخ : اصول مهم تو برنامه نویسی یه برنامه بزرگ چیه؟!!
ارسال شده توسط: QSBuntu در 02 دی 1392، 10:55 ق‌ظ
یعنی کسی اینجا نیس که از تجربیاتش تو انجام پروژه های بزرگ بگه؟!!   ](*,) ](*,) :oops:
عنوان: پاسخ : اصول مهم تو برنامه نویسی یه برنامه بزرگ چیه؟!!
ارسال شده توسط: goonooz در 02 دی 1392، 03:57 ب‌ظ
البته منم برنامه نویس نیستم
و اومدم بخونم تا اطلاعاتم کامل بشه
ولی دیدم حتی اون اطلاعات ناقص رو هم نداره
گفتم حداقل این اطلاعات ناقصی که دارم رو در اختیار بزارم
کلا" برنامه نویسی دو نوعه از پدر به فرزند و از فرزند به پدر
که باید ببینی با کدوم راحتی
از فرزند به پدر یعنی تا حلقه ها یا شرط ها و ... کامل نشن پدر تموم نشه
ولی در پدر به فرزند
اول برنامه شروع میشه و بعد توسط شرط ها و حلقه ها و... تکمیل میشه
فقط همین رو بلدم
عنوان: پاسخ : اصول مهم تو برنامه نویسی یه برنامه بزرگ چیه؟!!
ارسال شده توسط: Geek در 02 دی 1392، 06:06 ب‌ظ
سلام
فکر کنم بهتر این بود که این سوال در یک انجمن تخصصی برنامه نویسی مطرح میشد!نه اینجا!
البته اینجا هم دوستان دست به کد هستن اما هرچی باشه اونجا آدم هایی بیشتری هستن که کمک کنن...

سایت هم که معرف حضور هست!> barnamenevis.org

من هم رشته شما نیستم و فکر نکنم چندان صحیح باشه که بخوام نظری بدم اما...
خود سوال شمامشکل داره!
شما انتظار داری که بچه ها بیان اینجا به شما اصول طراحی یاد بدن؟
از نظر من نشدنی هست!
شما باید می پرسیدی یه کتاب خوب در این زمینه بهم معرفی کنید!
که فکر کنم یه جواب خوب هم داره >‌ مهندسی نرم افزار - پرسمن!
عنوان: پاسخ : اصول مهم تو برنامه نویسی یه برنامه بزرگ چیه؟!!
ارسال شده توسط: nixoeen در 02 دی 1392، 06:47 ب‌ظ
خوب قدم اول اینه که برنامه‌نویسی رو به خوبی یاد بگیرید.
قدم دوم اینه که یاد بگیرید تمیز کد بنویسید. کتاب‌های زیادی در این مورد هست، مثلا: لینک (http://www.amazon.com/The-Clean-Coder-Professional-Programmers/dp/0137081073/ref=sr_1_2?ie=UTF8&qid=1387811526&sr=8-2)
در این مورد راهنماهایی که برای پروژه‌های بزرگ بازمتن هستند هم به خوبی می‌تونند کمک کنند، برای مثال Style Guideهای گوگل برای مطالعه بسیار خوب هستند: لینک (https://code.google.com/p/google-styleguide/)
قدم سوم اینه که کار با یک سیستم سیستم کنترل ورژن رو به خوبی یاد بگیرید. در حال حاضر اکثریت از Git استفاده می‌کنند و کتاب Pro Git می‌تونه شروع خیلی خوبی باشه: لینک (http://git-scm.com/book).
قدم چهارم یادگیری مباحث مهندسی نرم‌افزار هست. کتاب‌های Software Engineering رو بخونید. برای مثال این کتاب خوبی برای شروع هستش: لینک (http://www.amazon.com/Code-Complete-Practical-Handbook-Construction/dp/0735619670/ref=sr_1_6?ie=UTF8&qid=1387811195&sr=8-6)

قدم بعد تجربه هستش. با پروژه‌های کوچیک و تک‌نفره شروع کنید. تجربه کسب کنید. وارد پروژه‌های بزرگ بشید، ولی بخش‌های کوچیک رو بدست بگیرید...
عنوان: پاسخ : اصول مهم تو برنامه نویسی یه برنامه بزرگ چیه؟!!
ارسال شده توسط: سعید رسولی در 02 دی 1392، 09:30 ب‌ظ
من میگم قدم اول و آخر تجربه هست.
یا حداکثر یک ماه مطالعه میشه اصول اولیهٔ برنامه‌نویسی و یک زبان برنامه‌نویسی رو یاد گرفت.
ولی ۵ یا ۱۰ سال طول می‌کشه تا برنامه‌نویس خوبی بشید. تازه اگه استعداد و خلاقیت کافی رو داشته باشید. برنامه‌نویسی هم مثل ریاضی می‌مونه. قسمت مهمترش به استعداد و خلاقیت بستگی داره (مثل حس ششم) که این قابل آموزش نیست و با خوندن هزار تا کتاب هم نمیشه یاد گرفت.
البته در حین کدنویسی همیشه باید مطالعه هم داشته باشید. ولی اینکه ماه‌ها و سال‌ها فقط مطالعه کنید و بعدش شروع به کدنویسی کنید رو اصلا قبول ندارم. با سیستم دانشگاهی هم موافق نیستم.
عنوان: پاسخ : اصول مهم تو برنامه نویسی یه برنامه بزرگ چیه؟!!
ارسال شده توسط: rahmani در 03 دی 1392، 12:28 ب‌ظ
سلام

پرسش شما خیلی کلی هست و بهتر هست اون را جزيی کنید
مثلا در مورد مطالعه و تجربه بستگی به زمینه برنامه نویسی دارد:

مثلا اگر برنامه نویسی در زمینه سخت افزار خب آشکار هست که در اغاز کار شما باید مفاهیم و گیت و تراشه و... آشنا شوید که این ها چه هستند و چطور باید با انها کار کرد اما اگر در زمینه طراحی سایت هست مثلا شما می خواهید برنامه سایت یک دانشگاه را بنویسید خب باید با مفاهیم و ابزار طراحی و تحلیل و برنامه نویسی سایت اشنا شوید باز در برنامه نویسی شبکه تا مفاهیم شبکه را ندانید نمی دانید از کجا باید شروع کرد و.....
عنوان: پاسخ : اصول مهم تو برنامه نویسی یه برنامه بزرگ چیه؟!!
ارسال شده توسط: ngc0der در 03 دی 1392، 10:36 ب‌ظ
به نظر اگه شما در برنامه نویسی مبتدی هستین بهتره کل مفاهیم مهندسی نرم افزار و ... رو بی خیال بشین و فقط شروع کنین به برنامه نویسی وگرنه توی دریایی از اطلاعات غرق میشین و آخرش اصلا وقت نمی کنین خود برنامه نویسی رو یاد بگیرین!بعد از یه مدتی هم شروع کنین مواردی که دوستان توضیح دادن یاد بگیرین. اگه بخوام به طور خاص به یه اصل مهم در نوشتن برنامه های بزرگ هم اشاره کنم اون اصل استفاده از design pattern ها در نوشتن برنامه ست چون بالاخره میرسین به جایی که مثلا می بینین استفاده از singleton یا factory الزامی هست و بدون استفاده از اونها کدی نوشته میشه که بعدها به سختی قابل فهم و پشتیبانی هست.
عنوان: پاسخ : اصول مهم تو برنامه نویسی یه برنامه بزرگ چیه؟!!
ارسال شده توسط: rahmani در 04 دی 1392، 03:39 ب‌ظ
سلام

در آغاز با مطالعه تحقیق مشورت و پرس و جو با موضوع مورد علاقه اش را در برنامه نویسی برگزیند. منظورم از موضوع مواردی مانند این هاست برنامه نویسی شبکه، طراحی سایت، برنامه نویسی سخت افزار، پردازش تصویر،  Export System , Application, Simulation, Graphic & Animation

سپس با توجه به موضوع مورد علاقه بهترین (متناسب با امکانات و نیازها و.....) ابزار برنامه نویسی را در رایانه نصب کند و به یادگیری زبان برنامه نویسی با مطالعه و کار عملی همزمان بپردازد

همه می دانیم برنامه نویسی مانند دیگر عرصه ها نیاز به تلاش و پشتکار فراوان دارد اما گاهی زود خسته می شویم
در هر برنامه ای ابتدا برنامه اش را با قلم و کاغذ به هر زبانی که راحت تر است (فارسی انگلیسی نموداری یا ....) بنویسد و سپس ان را در رایانه پیاده سازی کند

تلاش کند برنامه اش قابل پشتیبانی، برای دیگران قابل فهم و قابل استفاده چند باره در آینده برای همان برنامه یا دیگر برنامه ها باشد
عنوان: پاسخ : اصول مهم تو برنامه نویسی یه برنامه بزرگ چیه؟!!
ارسال شده توسط: nima nekoonam در 06 دی 1392، 01:30 ق‌ظ
شما میگید که اصول مهم برنامه نویسی . بعد درباره طراحی صحبت میکنید . از کیس تولز های پوشاننده کل مدل فرایندی صحبت میکنید ... یه جمله ای رو میگید که تا حالا نشنیدم (همون معکوسه) ... وقتی همه ی این ها رو میزارم کنار هم احساس میکنم که شما کل مهندسی نرم افزار رو یکجا میخاید تو این تاپیک ؟ همینطوره ؟
عنوان: پاسخ : اصول مهم تو برنامه نویسی یه برنامه بزرگ چیه؟!!
ارسال شده توسط: امید توانا در 06 دی 1392، 01:54 ق‌ظ
خوب قدم اول اینه که برنامه‌نویسی رو به خوبی یاد بگیرید.
قدم دوم اینه که یاد بگیرید تمیز کد بنویسید. کتاب‌های زیادی در این مورد هست، مثلا: لینک (http://www.amazon.com/The-Clean-Coder-Professional-Programmers/dp/0137081073/ref=sr_1_2?ie=UTF8&qid=1387811526&sr=8-2)
در این مورد راهنماهایی که برای پروژه‌های بزرگ بازمتن هستند هم به خوبی می‌تونند کمک کنند، برای مثال Style Guideهای گوگل برای مطالعه بسیار خوب هستند: لینک (https://code.google.com/p/google-styleguide/)
قدم سوم اینه که کار با یک سیستم سیستم کنترل ورژن رو به خوبی یاد بگیرید. در حال حاضر اکثریت از Git استفاده می‌کنند و کتاب Pro Git می‌تونه شروع خیلی خوبی باشه: لینک (http://git-scm.com/book).
قدم چهارم یادگیری مباحث مهندسی نرم‌افزار هست. کتاب‌های Software Engineering رو بخونید. برای مثال این کتاب خوبی برای شروع هستش: لینک (http://www.amazon.com/Code-Complete-Practical-Handbook-Construction/dp/0735619670/ref=sr_1_6?ie=UTF8&qid=1387811195&sr=8-6)

قدم بعد تجربه هستش. با پروژه‌های کوچیک و تک‌نفره شروع کنید. تجربه کسب کنید. وارد پروژه‌های بزرگ بشید، ولی بخش‌های کوچیک رو بدست بگیرید...
خیلی مفیده. ممنون
عنوان: پاسخ : اصول مهم تو برنامه نویسی یه برنامه بزرگ چیه؟!!
ارسال شده توسط: QSBuntu در 06 دی 1392، 10:29 ق‌ظ
شما میگید که اصول مهم برنامه نویسی . بعد درباره طراحی صحبت میکنید . از کیس تولز های پوشاننده کل مدل فرایندی صحبت میکنید ... یه جمله ای رو میگید که تا حالا نیدم (همون معکوسه) ... وقتی همه ی این ها رو میزارم کنار هم احساس میکنم که شما کل مهندسی نرم افزار رو یکجا میخاید تو این تاپیک ؟ همینطوره ؟
نه اشتباه برداشت نشه.... من فقط خواستم بگم ک وقتی با این حجم اطلاعاتی ک برای ساخت یه برنامه بزرگ لازمه روبرو میشم ...نمیدونم باید از کجا شروع کنم و و چجوری پیش برم. درسته ک همه ش رویه نفر نباید انجام بده ولی خب باید یه مقداری ازین ها سر در اورد ... و منم میخوام بیشتر از یه کم سر در بیارم و در حدی برسم ک بتونم مدیریت اینکار رو هم انجام بدم...ب قول دوستان در دریایی از ندونستنهام گم شدم و با مشورت دنبال بهترین راه ممکن برای شروع برای خروجم.
عنوان: پاسخ : اصول مهم تو برنامه نویسی یه برنامه بزرگ چیه؟!!
ارسال شده توسط: سید مسعود امامیان در 06 دی 1392، 11:24 ق‌ظ
سلام

کتاب و تجربه باید کنار یکدیگر باشند.
مثال : از دید یک فردی که فقط به تجربه تکیه کرده 2 کد ساده زیر از دید او یکی است یا حداقل بعد از چندسال به نتیجه صحیح می رسد:
for ( j = 0 ; j < 100 ; j++ )
for ( i = 0 ; i < 100 ; i++)
data[i,j] = 0 ;
for ( i = 0 ; i < 100 ; i++ )
for ( j = 0 ; j < 100 ; j++)
data[i,j] = 0 ;

در کد اولی تعداد  page (http://en.wikipedia.org/wiki/Page_%28computer_memory%29)هایی که مصرف می کند 100 * 100 = 10000 است در صورتی که در دومی فقط 100 page را مصرف می کند.

یا مثلاً :
for ( i = 0 ; i < 100 ; i++ )
for ( i = 0 ; i < 100 ; ++i )
حلقه دومی بهینه تر شناخته شده .

یک کتاب تجربه ی چندین ساله ی یک شخص یا یک گروه است پس عاقلانه است که کنار برنامه نویسی و کسب تجربه از کتاب بسیار استفاده شود.
عنوان: پاسخ : اصول مهم تو برنامه نویسی یه برنامه بزرگ چیه؟!!
ارسال شده توسط: QSBuntu در 06 دی 1392، 12:03 ب‌ظ
سلام

کتاب و تجربه باید کنار یکدیگر باشند.
مثال : از دید یک فردی که فقط به تجربه تکیه کرده 2 کد ساده زیر از دید او یکی است یا حداقل بعد از چندسال به نتیجه صحیح می رسد:
for ( j = 0 ; j < 100 ; j++ )
for ( i = 0 ; i < 100 ; i++)
data[i,j] = 0 ;
for ( i = 0 ; i < 100 ; i++ )
for ( j = 0 ; j < 100 ; j++)
data[i,j] = 0 ;

در کد اولی تعداد  page (http://en.wikipedia.org/wiki/Page_%28computer_memory%29)هایی که مصرف می کند 100 * 100 = 10000 است در صورتی که در دومی فقط 100 page را مصرف می کند.

یا مثلاً :
for ( i = 0 ; i < 100 ; i++ )
for ( i = 0 ; i < 100 ; ++i )
حلقه دومی بهینه تر شناخته شده .

یک کتاب تجربه ی چندین ساله ی یک شخص یا یک گروه است پس عاقلانه است که کنار برنامه نویسی و کسب تجربه از کتاب بسیار استفاده شود.

خوب نکته ای رو گفتی...   موافقم...    و دنبال همین تجربه هام...   و البته دانشش...

درمورد مثالهایی ک زدی میشه بیشتر توضیح بدی...
بازم برام مثال بزت...
مچکر
عنوان: پاسخ : اصول مهم تو برنامه نویسی یه برنامه بزرگ چیه؟!!
ارسال شده توسط: shahramlp در 06 دی 1392، 03:33 ب‌ظ
سلام

کتاب و تجربه باید کنار یکدیگر باشند.
مثال : از دید یک فردی که فقط به تجربه تکیه کرده 2 کد ساده زیر از دید او یکی است یا حداقل بعد از چندسال به نتیجه صحیح می رسد:
for ( j = 0 ; j < 100 ; j++ )
for ( i = 0 ; i < 100 ; i++)
data[i,j] = 0 ;
for ( i = 0 ; i < 100 ; i++ )
for ( j = 0 ; j < 100 ; j++)
data[i,j] = 0 ;

در کد اولی تعداد  page (http://en.wikipedia.org/wiki/Page_%28computer_memory%29)هایی که مصرف می کند 100 * 100 = 10000 است در صورتی که در دومی فقط 100 page را مصرف می کند.

یا مثلاً :
for ( i = 0 ; i < 100 ; i++ )
for ( i = 0 ; i < 100 ; ++i )
حلقه دومی بهینه تر شناخته شده .

یک کتاب تجربه ی چندین ساله ی یک شخص یا یک گروه است پس عاقلانه است که کنار برنامه نویسی و کسب تجربه از کتاب بسیار استفاده شود.
سلام.میشه لطفا دقیقتر بفرمایید تفاوت دو مورد اول کجاست که ما هم یه چیزی اینجا یاد بگیریم؟ ممنون


مشکل حل شد حواسم به خط آخر کد "data[i,j] = 0" که توی هر دو ثابت هست نبود
چقدر بده که این انجمن امکان حذف پست نداره!!! آخه چرا؟؟؟؟؟!!!!!
عنوان: پاسخ : اصول مهم تو برنامه نویسی یه برنامه بزرگ چیه؟!!
ارسال شده توسط: سید مسعود امامیان در 06 دی 1392، 03:47 ب‌ظ
نقل‌قول
سلام.میشه لطفا دقیقتر بفرمایید تفاوت دو مورد اول کجاست که ما هم یه چیزی اینجا یاد بگیریم؟ ممنون

سلام تفاوت در نحوه صفر کردن ماتریس هست. یکی به صورت ستونی ماتریس رو صفر می کنه دیگری به صورت سطری.
عنوان: پاسخ : اصول مهم تو برنامه نویسی یه برنامه بزرگ چیه؟!!
ارسال شده توسط: QSBuntu در 06 دی 1392، 06:06 ب‌ظ

for ( j = 0 ; j < 100 ; j++ )
for ( i = 0 ; i < 100 ; i++)
data[i,j] = 0 ;
for ( i = 0 ; i < 100 ; i++ )
for ( j = 0 ; j < 100 ; j++)
data[i,j] = 0 ;

در کد اولی تعداد  page (http://en.wikipedia.org/wiki/Page_%28computer_memory%29)هایی که مصرف می کند 100 * 100 = 10000 است در صورتی که در دومی فقط 100 page را مصرف می کند.

یا مثلاً :
for ( i = 0 ; i < 100 ; i++ )
for ( i = 0 ; i < 100 ; ++i )


توضیح این رو بگو که ۱۰۰۰ و ۱۰۰ رو چجوری بدست میاری؟
عنوان: پاسخ : اصول مهم تو برنامه نویسی یه برنامه بزرگ چیه؟!!
ارسال شده توسط: shervinkh در 07 دی 1392، 12:12 ق‌ظ
نقل‌قول
توضیح این رو بگو که ۱۰۰۰ و ۱۰۰ رو چجوری بدست میاری؟

آرایه های دو بعدی در حافظه کامپیوتر به صورت خانه های پشت سر هم هستند. مثلن یه آرایه m*n داشته باشیم به صورت m*n خونه پشت سر هم ذخیره میشه و ar[ i ][j]    a تبدیل میشه به ar[i*n + j]     a. (این a های اضافه برای این بود که درست نشون داده شن.
کش (cache) در CPU هم این گونه عمل می کنه که هر دفعه درخواست یک خونه حافظه دریافت می کنه مثلن اون خونه و ۶۴ خونه بعدش رو میاره تو cpu که دم دست باشن. چون یه خونه استفاده میشه امکانش زیاده که خونه های اطرافش هم به زودی استفاده شن. و هر انتقال بلوک از رم به CPU زمان میبره بنابراین وقتی خونه های اطرافش میان تو کش برای دسترسی های بعدی دوباره نیاز به انتقال از رم به cpu نیست.
حالا وقتی سطری آرایه رو می خونیم یا می نویسیم از این ویژگی استفاده میشه و تعداد دفعات انتقال از رم به CPU میشه m*n/64 مثلن.
ولی وقتی ستونی دسترسی پیدا می کنیم اول خونه اول با ۶۴ تای جلوش میاد. بعد خونه دوم میره سطر بعد یعنی n خونه جلو تر بنابراین جزو ۶۴ خونه نزدیک قبلی نبوده پس دوباره باید از رم انتقال پیدا کنه. همینجوری به هر خونه که می رسیم هیج کدوم از خونه های اطرافش تو کش نیستن (کش محدوده و بعد مدتی بلوک های قدیمی رو پاک می کنه) و برای هر خونه یه انتقال از رم به CPU انجام می گیره. بنابراین انتقال ها میشه m*n.

یعنی روش دوم (دسترسی ستونی) ۶۴ برابر (در این مثال) کند تر کار می کنه. (در اصطلاح cache miss اش ۶۴ برابر ئه)
البته تو بعضی زبان های برنامه نویسی مثل پاسکال آرایه های دو بعدی برعکس پیاده سازی شدن یعنی آرایه ها رو به جای سطر سطر ، ستون ستون ذخیره می کنن بنابراین دسترسی ستونی بهینه تر میشه.
در java و C آرایه ها سطری پیاده سازی شدن.
عنوان: پاسخ : اصول مهم تو برنامه نویسی یه برنامه بزرگ چیه؟!!
ارسال شده توسط: M!lad در 07 دی 1392، 12:30 ق‌ظ
جدا از مباحثی که دوستان فرمودند چند تا منبع پیرامون ساختمان داده و سیستم عامل مطالعه کنید...
عنوان: پاسخ : اصول مهم تو برنامه نویسی یه برنامه بزرگ چیه؟!!
ارسال شده توسط: alend در 07 دی 1392، 07:03 ق‌ظ
سلام

کتاب و تجربه باید کنار یکدیگر باشند.
مثال : از دید یک فردی که فقط به تجربه تکیه کرده 2 کد ساده زیر از دید او یکی است یا حداقل بعد از چندسال به نتیجه صحیح می رسد:
for ( j = 0 ; j < 100 ; j++ )
for ( i = 0 ; i < 100 ; i++)
data[i,j] = 0 ;
for ( i = 0 ; i < 100 ; i++ )
for ( j = 0 ; j < 100 ; j++)
data[i,j] = 0 ;

در کد اولی تعداد  page (http://en.wikipedia.org/wiki/Page_%28computer_memory%29)هایی که مصرف می کند 100 * 100 = 10000 است در صورتی که در دومی فقط 100 page را مصرف می کند.

یا مثلاً :
for ( i = 0 ; i < 100 ; i++ )
for ( i = 0 ; i < 100 ; ++i )
حلقه دومی بهینه تر شناخته شده .

یک کتاب تجربه ی چندین ساله ی یک شخص یا یک گروه است پس عاقلانه است که کنار برنامه نویسی و کسب تجربه از کتاب بسیار استفاده شود.

بستگی به زبان برنامه نویسی دارد.
عنوان: پاسخ : اصول مهم تو برنامه نویسی یه برنامه بزرگ چیه؟!!
ارسال شده توسط: QSBuntu در 07 دی 1392، 07:57 ق‌ظ
نقل‌قول
توضیح این رو بگو که ۱۰۰۰ و ۱۰۰ رو چجوری بدست میاری؟

آرایه های دو بعدی در حافظه کامپیوتر به صورت خانه های پشت سر هم هستند. مثلن یه آرایه m*n داشته باشیم به صورت m*n خونه پشت سر هم ذخیره میشه و ar[j]    a تبدیل میشه به ar[i*n + j]     a. (این a های اضافه برای این بود که درست نشون داده شن.
کش (cache) در CPU هم این گونه عمل می کنه که هر دفعه درخواست یک خونه حافظه دریافت می کنه مثلن اون خونه و ۶۴ خونه بعدش رو میاره تو cpu که دم دست باشن. چون یه خونه استفاده میشه امکانش زیاده که خونه های اطرافش هم به زودی استفاده شن. و هر انتقال بلوک از رم به CPU زمان میبره بنابراین وقتی خونه های اطرافش میان تو کش برای دسترسی های بعدی دوباره نیاز به انتقال از رم به cpu نیست.
حالا وقتی سطری آرایه رو می خونیم یا می نویسیم از این ویژگی استفاده میشه و تعداد دفعات انتقال از رم به CPU میشه m*n/64 مثلن.
ولی وقتی ستونی دسترسی پیدا می کنیم اول خونه اول با ۶۴ تای جلوش میاد. بعد خونه دوم میره سطر بعد یعنی n خونه جلو تر بنابراین جزو ۶۴ خونه نزدیک قبلی نبوده پس دوباره باید از رم انتقال پیدا کنه. همینجوری به هر خونه که می رسیم هیج کدوم از خونه های اطرافش تو کش نیستن (کش محدوده و بعد مدتی بلوک های قدیمی رو پاک می کنه) و برای هر خونه یه انتقال از رم به CPU انجام می گیره. بنابراین انتقال ها میشه m*n.

یعنی روش دوم (دسترسی ستونی) ۶۴ برابر (در این مثال) کند تر کار می کنه. (در اصطلاح cache miss اش ۶۴ برابر ئه)
البته تو بعضی زبان های برنامه نویسی مثل پاسکال آرایه های دو بعدی برعکس پیاده سازی شدن یعنی آرایه ها رو به جای سطر سطر ، ستون ستون ذخیره می کنن بنابراین دسترسی ستونی بهینه تر میشه.
در java و C آرایه ها سطری پیاده سازی شدن.


به این میگن یه توضیح خووب...  بسی جالب بود و مفید ::) ::)
عنوان: پاسخ : اصول مهم تو برنامه نویسی یه برنامه بزرگ چیه؟!!
ارسال شده توسط: سالار مقدم در 07 دی 1392، 12:43 ب‌ظ
بستگی به زبان برنامه نویسی دارد.
پایتون این مشکل رو نداره یا ما باید کلی کتاب الگوریتم و ... بخونیم؟
عنوان: پاسخ : اصول مهم تو برنامه نویسی یه برنامه بزرگ چیه؟!!
ارسال شده توسط: ! در 07 دی 1392، 01:19 ب‌ظ
بستگی به زبان برنامه نویسی دارد.
پایتون این مشکل رو نداره یا ما باید کلی کتاب الگوریتم و ... بخونیم؟

ما باید کلی کتاب طراحی و تحلیل واسه الگوریتم ها و محاسبات و ساختار و ساختمان داده ها بخونیم :)

البته پیاده سازی الگوریتم ها تو پایتون خیلی شیرین و کوتاه و جذابتر از زبان های رایج دیگست (بجز روبی :o)
عنوان: پاسخ : اصول مهم تو برنامه نویسی یه برنامه بزرگ چیه؟!!
ارسال شده توسط: سالار مقدم در 07 دی 1392، 03:18 ب‌ظ
بستگی به زبان برنامه نویسی دارد.
پایتون این مشکل رو نداره یا ما باید کلی کتاب الگوریتم و ... بخونیم؟

ما باید کلی کتاب طراحی و تحلیل واسه الگوریتم ها و محاسبات و ساختار و ساختمان داده ها بخونیم :)

البته پیاده سازی الگوریتم ها تو پایتون خیلی شیرین و کوتاه و جذابتر از زبان های رایج دیگست (بجز روبی :o)
مگه روبی چطوریه؟
کتاب خوب میشناسی؟
عنوان: پاسخ : اصول مهم تو برنامه نویسی یه برنامه بزرگ چیه؟!!
ارسال شده توسط: alend در 09 دی 1392، 05:10 ق‌ظ
بستگی به زبان برنامه نویسی دارد.
پایتون این مشکل رو نداره یا ما باید کلی کتاب الگوریتم و ... بخونیم؟

پایتون را نمی دونم ولی در سی دو مثبت ردیفی و در فورترن ستونی اند. گرچه در سی دو مثبت می توان با اشاره گرها آریه را هر طور خواستی تعریف کنی.
عنوان: پاسخ : اصول مهم تو برنامه نویسی یه برنامه بزرگ چیه؟!!
ارسال شده توسط: mohammadgolfami در 17 دی 1392، 04:25 ب‌ظ
من برنامه نویسی به معنی چند خط کد زنی رو بلدم (یعنی هیچی بلد نیستم  ;)) این ترم هم درس اصول طراحی نرم افزار داشتیم و استاداین درس مارو با برنامه های تحلیل و طراحی برنامه مثل modelio   آشنا کرد..
 در طول این درس فقط و فقط و فقط فهمیدم که هیچی نمیدونم!!!  به استاد گفتم و استاد هم گفت تنها هدف خودش تو این درس هم همینه که فقط دایره ندانسته های مارو زیاد کنه..و ما بفهمیم که چه چیزهایی نمیدونیم..

اما چیزی که بر من گران آمد(!) این بود که وقتی استاد یه گریزی به اصول برنامه نویسی زد و مثلا گفت که :«باید وابستگی معکوس وجود داشته باشه » من دیگه از اونچیزایی که میدونستم هم دست شستم و برندانستن خود بطور 100 درصدی واقف شدم!!

حالا دوستان عزیز ... هرکس اصولی رو تو نوشتن برنامه با اهمیت بالا میدونه بگه تا لااقل ندونستنام کامل شه!!


خیلی الان نا امیدم و کلا احساس میکنم حتی کد زنی هم بلد نیستم...  الان هم میخوام کمکم شروع کنم برم سراغ qt ... دوستان ابراز نظر بفرمایند!؟؟ خواهشا...

من برنامه نویسی به معنی چند خط کد زنی رو بلدم (یعنی هیچی بلد نیستم  ;)) این ترم هم درس اصول طراحی نرم افزار داشتیم و استاداین درس مارو با برنامه های تحلیل و طراحی برنامه مثل modelio   آشنا کرد..
 در طول این درس فقط و فقط و فقط فهمیدم که هیچی نمیدونم!!!  به استاد گفتم و استاد هم گفت تنها هدف خودش تو این درس هم همینه که فقط دایره ندانسته های مارو زیاد کنه..و ما بفهمیم که چه چیزهایی نمیدونیم..

اما چیزی که بر من گران آمد(!) این بود که وقتی استاد یه گریزی به اصول برنامه نویسی زد و مثلا گفت که :«باید وابستگی معکوس وجود داشته باشه » من دیگه از اونچیزایی که میدونستم هم دست شستم و برندانستن خود بطور 100 درصدی واقف شدم!!

حالا دوستان عزیز ... هرکس اصولی رو تو نوشتن برنامه با اهمیت بالا میدونه بگه تا لااقل ندونستنام کامل شه!!


خیلی الان نا امیدم و کلا احساس میکنم حتی کد زنی هم بلد نیستم...  الان هم میخوام کمکم شروع کنم برم سراغ qt ... دوستان ابراز نظر بفرمایند!؟؟ خواهشا...

سلام دوست عزیز. من کامپیوتر نخوندم و حتی رشته تحصیلیم زیرشاخه علوم انسانیه (علوم سیاسی) اما به برنامه نویسی علاقه مندم. یه چندتا پیشنهاد براتون دارم:
1- از فکر اینکه با کتابای فارسی به جایی برسید بیاید بیرون! کتابای فارسی یا ترجمه هستند که خیلی افتضاحند یا به ندرت توسط یکی و معمولا به قصد درآمدزایی نوشته شدند که بازم افتضاحند.
2- شما گفتید که می خواید qt کار کنید، دلیلش رو نمی دونم اما من پیشنهاد می کنم یه زبان ساده تر رو شروع کنید که بتونید مفاهیم برنامه نویسی رو توش به خوبی یاد بگیرید بعد برید سراغ هر زبان دیگه ای به راحتی می تونید از پسش بر بیاید.
3- من زبان جاوا رو پیشنهاد می کنم چون یادگیریش ساده است و منابع آموزشی فراوونی داره و قدرتش هم بر کسی پوشیده نیست.
4- واسه یادگیری جاوا کتابهای زیر رو به ترتیب پیشنهاد می کنم:
heed first java
head first object oriented programming
head first design patterns
کتابای فوق مال انتشارات فوق العاده حرفه ای oreilly هستند که کیفیتشون زبانزده. لازم به توضیحه که سری head first با استفاده آخرین متدهای آموزشی تولید شده که شما هیچوقت توی اونها احساس خستگی یا سردرگمی نمی کنید. اونقدر روون هستند که سخت می تونید ازشون دل بکنید.
5- برای برنامه نویسی جاوا از eclipse استفاده کنید و پلاگین jigloo رو هم بهش اضافه کنید تا به راحتی بتونید gui باهاش بسازید. قابلیتهای خوبی برای gui designing بهتون میده.
موفق باشید.