PDA

View Full Version : autoloader برای تابع ها / function autoloader



freeman99
چهارشنبه 13 اسفند 1393, 23:03 عصر
میدونید که در PHP میشه به کمک تمهیداتی که هست فایلهای محتوی تعریف کلاسهایی رو که در کد استفاده میشن بصورت خودکار اینکلود کرد. ولی متاسفانه تاحالا این امکان برای توابع وجود نداره (ولی من توی ویکیشون دیدم که ظاهرا چنین چیزی پیشنهاد شده بود). حالا منم چون در برنامم تابع زیاد دارم و میخوام اونا رو بصورت خودکار لود کنم تا هم از شر کلی دستورهای require_once راحت بشم و هم از ایجاد باگ احتمالی در برنامه که ممکنه از زیر دست در رفته باشه و جایی قبل از استفاده از تابعی یادم رفته باشه فایل محتوی تعریف اون رو اینکلود کنم، میخوام یک autoloader برای تابع های برنامم بنویسم.
تا اینجا به این روش رسیدم و تست های اولیه رو کردم کار میکنه:
یه کلاس تعریف میکنیم به این شکل:

class func {

public static function __callStatic($func_name, $arguments) {
require_once "func_$func_name.php";
call_user_func_array($func_name, $arguments);
}

}
بعد توابع رو به این صورت فراخوانی میکنیم (بطور مثال):

func::test1();
func::test2(3 ,5);
تابع test1 در فایلی با نام func_test1.php قرار داره که محتویاتش به این شکله:

<?php

function test1() {

echo 'this is test1!<br>';

}

?>
و تابع test2 در فایلی با نام func_test2.php قرار داره و محتویاتش اینه:

<?php

function test2($p1, $p2) {

echo "this is test2! ($p1, $p2)<br>";

}

?>

bagherok
پنج شنبه 14 اسفند 1393, 00:27 صبح
این سوال بود یا آموزش!

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

دو اینکه بصورت استاندارد نیست
که اگه قراربراین باشه که با سیستم های دیگه ارتباط برقرار کنه.

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

freeman99
پنج شنبه 14 اسفند 1393, 08:55 صبح
قبل از نام فانکشن باید نام یه کلاس آورد شه
و درنتیجه همه تابع هایی که قبلا استفاده شدندو خواهند شد باید به این شکل صدازده بشند.
آره دیگه. ولی مشکلی نیست! من میخوام از شر اینکلودهای تعریف توابع راحت بشم و اضافه کردن یک prefix کوتاه به ابتدای فراخوانی توابع بنظر من کار راحت تریه. البته یک مزیت مهمش هم اینه که در flow های پیچیده که برای خود من بارها پیش اومده که مطمئن نیستم آیا تابع مورد نظر قبلا در مسیر برنامه در جایی اینکلود شده یا نه، دیگه چنین خطری وجود نداره چون اگر قبلا لود نشده باشه بصورت خودکار لود میشه. برای رفع این مشکل در حالت عادی تنها میشه هر جزء از کد رو کامل و تحت همهء شرایط و پارامترهای درگیر تست کرد که از این امر مطمئن شد یا اینکه تقریبا قبل از هر فراخوانی تابع یک دستور اینکلود (require_once) هم بذاریم!

البته قبلا سر این مسئله با دیگران چک و چونه زدم همش شعار میدن میگن اگر برنامه درست و با ساختار اصولی نوشته بشه چنین مشکلاتی پیش نمیاد و از این حرفا! ولی گوش من به این حرفا و شعار بدهکار نیست. من روش و دیدگاه خودم رو دارم. قانع نشدم خب :لبخند: باید خودم تجربه کنم تست کنم عملا بهم ثابت بشه. مشکلی هم نمیبینم، چون برنامم قرار نیست از اول همهء استانداردها و اصول و آخرین متدهای پیشرفته برنامه نویسی رو رعایت کنه که! این یک روند تکاملی عملی هم برای برنامم و هم برای خودمه که ممکنه طی چند نسل و مدت زمانی که طول میکشه به ثمر برسه. چیزی که آدم خودش شخصا براش روشن و اثبات نشده و از استدلال و ادعاهای دیگران قانع نشده که نباید همینطور کورکورانه قبول و تبعیت کنه!



دو اینکه بصورت استاندارد نیست
که اگه قراربراین باشه که با سیستم های دیگه ارتباط برقرار کنه.
فعلا برای من استاندارد هم مهم نیست.
این برنامه هنوز به اون مراحل و نسل هایی که استانداردها بخواد برام یه نگرانی باشه نرسیده.
حالا باز نیاید دو ساعت مخ منو بخورید که آی آقا استاندارد کن و تیم برنامه نویسی و نمیدونم یکی بخواد روش کار کنه و فردا چی میشه آسمون به زمین میاد و زمین به آسمون میره و فلان و بهمان :لبخند:
الان آقای شهرکی هم که میاد با نصایحی در باب استفاده از شیء گرایی مخ ما رو میترکونه! بابا ولم کنید بذارید طبق برنامه و اولویت ها و سیستم خودم باید پیش برم. چشم هروقت کار به اونجاها کشید و خودم نیاز دیدم شیء گرایی هم کار میکنم. بقول معروف میگن علف باید به دهن بزی شیرین باشه :چشمک:


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

آره دیگه اینا رو که باید هندل کنیم. اصلا من در نظر دارم شرایطی که تعریف چند تابع در یک فایل باشه هم ممکن باشه، بعد تازه اسم فایلها هم ممکنه آزاد باشه (یعنی الگوی خاصی نداشته باشه). چون میخوام در برنامه نویسی کاملا راحت باشم در این زمینه و مسائل کمتری برای دقت و انجام و اشتباهات احتمالی توسط برنامه نویس وجود داشته باشن (یکی از اهداف و خصوصیات برنامه نویسی مدرن و سطح بالا). یعنی من فقط تابع های مورد نظر رو توی فایلهای مورد نظر خودم تعریف میکنم میندازم توی پوشهء توابع (البته توابع مورد نیازم فعلا اونقدری زیاد نیست که بخواد چندتا پوشه و سلسله مراتبی باشه، ولی اگر اینطور شد خب اون موقع برای اینم فکری میکنم! قرار نیست همه چیز از ابتدا برای همیشه طراحی و پیاده سازی شده باشه)، و بقیهء کارها خودکار انجام میشه.
یه ایده ای که در این باب بنظرم اومد مثلا اینکه برنامه میاد خودش بطور خودکار فایلهای توابع توی پوشهء توابع رو میخونه و توابع تعریف شده رو از توشون شناسایی میکنه و بعد توی یک فایل ایندکس که توش مشخص میشه چه توابعی در چه فایلی وجود دارن این اطلاعات رو ذخیره میکنه. برنامه هر بار اول این فایل ایندکس رو میخونه (یا اینکلود میکنه) و چک میکنه که آیا اسم تابع مورد فراخوانی درش وجود داره یا نه، اگر وجود داشت که آدرس فایلش هم هست و اون فایل رو اینکلود میکنه، اگر وجود نداشت معلومه که یا برنامه برای اولین باره داره اجرا میشه یا تابع جدیدی توسط برنامه نویس به برنامه اضافه شده، بنابراین دوباره عمل اسکن رو انجام میده (حالا میشه بهینه سازیهایی خاصی رو هم درش پیاده کرد) و فایل ایندکس رو آپدیت میکنه.

freeman99
پنج شنبه 14 اسفند 1393, 09:06 صبح
البته شاید این سیستم رو جور دیگه ای ساختم یا اصلا ازش صرفنظر کردم. وحی منزل و حک در سنگ نیست که! بابا آدم ایده داره، تست میکنه، تجربه میکنه خب.
مثلا من یه زمانی اصولا برای هر نوع اینکلود هم یک سیستم عریض و طویلی درست کرده بودم. هدفش این بود که بشه آدرس دایرکتوریهای مختلف برنامه رو براحتی تغییر داد بدون اینکه نیاز باشه تمام دستورات اینکلود رو آپدیت کنیم. ولی خب آخرش این سیستم رو برداشتم چون بیش از حد پیچیده شده بود و مشکلاتی داشت و از اونور تغییر ساختار دایرکتوریهای برنامه هم نیازی نبود که زیاد بخواد پیش بیاد و اگر هم پیش بیاد خب با روشهای دیگر و مثلا استفاده از search & replace که ابزارهای برنامه نویسی دارن میشه انجامش داد (هرچند مقداری زحمت و دردسر داره بهرحال و امکانات اشتباهات انسانی هم وجود داره).

MMSHFE
پنج شنبه 14 اسفند 1393, 09:19 صبح
بحثهای حاشیه ای نکنید. اگه منظورتون از ایجاد تاپیک، اینه که بقیه نظر بدن که استاندارد هست یا نه، باید به نظر دیگران احترام بگذارین چون وقتی میگن استاندارد نیست، دشمنی با شما ندارن. اگه نظر دیگران هم مهم نیست پس چرا اصلاً تاپیک میزنید؟ درمورد مسئله پوشه ها هم میتونید با دستور set_include_path و get_include_path پوشه هایی که فایلها داخلش قرار دارن رو به مسیرهایی که PHP داخل اونها دنبال فایل موردنظر جهت include کردن میگرده، اضافه کنید.

freeman99
پنج شنبه 14 اسفند 1393, 09:40 صبح
بحثهای حاشیه ای نکنید.
اگر همینطوری طبق نظر خودمون بخوایم بگیم بحث حاشیه ای چیه، پس اینکه من دارم راجع به یه چیزی صحبت میکنم شما میای میگی بجاش شیء گرا کار کن هم خودش میشه بحث حاشیه ای (که البته بنظر من نیست). آقا شما چکار داری من اصلا میخوام ضد اصول شیء گرایی کار کنم، اصلا فکر میکنم مغز و سواد من از همهء دنیا بیشتره و یه روش و بینش جدیدی اختراع کردم، حق ندارم یعنی؟ شما واسه چی میای بحث حاشیه ای میکنی شیء گرایی میکشی وسط؟ :لبخند:
این بحثها بهرحال در جریان بحث دیگر پیش میاد و نمیشه بگیم دقیقا باید فقط به عنوان و موضوع تاپیک بچسبیم و اگر منحرف شدیم گناه کبیره رخ داده! ما انسانیم، روبات که نیستیم و عاری از نقص و خطا نیستیم و نمیتونیم همه چیز رو از قبل پیشبینی کنیم. یه چیزی میپرسی یه بحثی پیش میاد یه هدفی اول داری در جریانش بحثهای جانبی و کم و بیش نامرتبط هم پیش میاد، ممکنه فایده و اهمیت اون بحثهای جانبی و موضوعات انحرافی در نظرت کمتر نباشه یا حتی بیشتر و پرمحتوی تر و ارزشمندتر باشه و میبینی هدف و موضوعی که تعیین کردی ناقص بوده دقیق نبوده یا اصولا هدف جدیدی رو شناسایی و انتخاب میکنی (البته این قابل بحثه که بگی خب در اینطور موارد باید تاپیک جدیدی در باب موضوع جدید استارت کنی). بهرحال بنظر من اینطور تاپیک پربارتر میشه تا اینکه سفت طبق یه اصول و فرمول خشکی بچسبیم و بگیم منحرف نشیم و وارد حاشیه هاش نشیم و از عنوان و موضوع و هدف اولیه تاپیک اونورتر نریم! تازه تاپیک خودمه و مال دیگری هم نیست که بگیم صاحبش راضی نیست و با بحث حاشیه ای بنده هدف و اولویت اصلی خودش خدشه دار شده.


اگه منظورتون از ایجاد تاپیک، اینه که بقیه نظر بدن که استاندارد هست یا نه، باید به نظر دیگران احترام بگذارین چون وقتی میگن استاندارد نیست، دشمنی با شما ندارن.
اینم تفسیر شخصی شماست و البته اشکال نازک نارنجی بودن که خیلی ها دارن که فکر میکنن اگر یه جوابی در مقابل بهشون دادی یعنی عدم احترام یا مخالفت با اصل نظر اونا و غیره. من صرفا دارم میگم: «بله میدونم، ولی این موارد به فلان دلایل برای من الان مطرح نیستن و اهمیت ندارن».
نیازی نیست زیادی پیچیده و خصمانش کنید!
من میخوام بحث رو به سمت مورد نظر خودم بکشم و به اولویت ها و چیزهایی که برای خودم اهمیت دارن و فعلا نیاز دارم هدایتش کنم، و برای این نیاز دارم مخاطب رو متوجه منظور و طرز فکر خودم بکنم.

MMSHFE
پنج شنبه 14 اسفند 1393, 09:54 صبح
میشه دقیقاً هدفت رو از ایجاد این تاپیک بگی؟ دنبال تأیید بودی که بیان بگن آره کار درست همینه که انجام دادی؟

freeman99
پنج شنبه 14 اسفند 1393, 10:10 صبح
خود شما و البته خیلی ها مثل شما ما رو تاحالا ترکوندید راست میری چپ میای آب میخوره میگید شیء گرا، استاندارد، اینترفیس، ... :لبخند:
چرا برنامت اینطوری نوشته شده چرا اونطوری نوشتی ...!
حالا من چقدر توضیح دادم که آقا من فعلا ترجیح میدم طبق برنامه و اولویت های خودم پیش برم، باز میاید میگید نه تو داری اشتباه فکر میکنی و اگر از اون روش و تفکری که ما میگیم تبعیت کنی به نفعته. خلاصه گیر سه پیچ که آقا بیا اینطوری فکر کن و این کار رو بکن.
به خدا من نگفتم تفکر و روش شما اشتباهه! میگم فعلا من شخصا برای نیاز و شرایط خودم ضرورت نمیبینم و به دلایل مختلف میخوام راه و تجربهء شخصی خودم رو ادامه بدم و نظر من چیز دیگس و با دوتا حرف و تئوری هم نیست و قانع نشدم بهرحال. یه چیزایی آدم باید عملا خودش بهش ثابت بشه. متاسفانه الان بیشتر افراد در این زمینه ها صرفا دنباله رو شدن یه چیزی رو خودشون هم واقعا درک نکردن و بهشون ثابت نشده ولی چون مد روز هست (که البته نمیگم که فقط مده و درست و خوب نیست) و تبلیغات و کلاس و سر و صدا داره و آدمهای مشهور میگن خوبه اونا هم میگن خوبه و همون حرفا و تبلیغات رو کورکورانه تکرار میکنن!
الان مثلا بگو شیء گرایی، کلی افراد میان اسم از ارث بری میبرن و مثالهای تکراری و غیرواقعی نمیدونم میز و صندلی و ماشین و موتور و حیوان و غاز و اردک میارن برای استفاده از شیء گرایی و ارث بری، ولی دریغ از دوتا مثال و کد واقعی روشن و اثبات کننده که خودشون عملا تجربه کرده باشن! اگر یه چیزی واقعا اینقدر کاربرد و فواید بزرگ و روشن برای همگان داره و همه استفاده و درک کردن، پس همه باید بجای غاز و اردک و ماشین و میز و صندلی دوتا مثال واقعی تر و عملی هم بلدن باشن یا نه؟
منم تا خودم تجربه نکنم تا نیاز پیدا نکنم تا روش ساده تر خودم به مشکلات جدی و روشن و بن بست نخوره و دیگه نتونم از روشهای مشابه نظم و قابلیت مدیریت برنامه رو بحد کافی ارتقا بدم، دلیلی ندارم که بخوام روشهایی رو که دیگران میگن جایگزین کنم. تا اون حد تئوریک و چیزهایی که همه درمورد اهمیت استانداردها و شیء گرایی و امثالهم میگن من میدونم و میفهمم ولی بازهم حس نیاز و ضرورت شدیدی ندارم فعلا. گفتم که برنامم هم فعلا در اون سطح و هدف های خاص نیست.
الان مثلا من از MyISAM استفاده کردم، از توابع MySQL استفاده کردم. هنوزم تا وقتی واقعا مجبور نشدم از همینا استفاده میکنم و بنظرم مشکلی نداره، چون اینا اولویت های اصلی من نیستن و بعدا در صورت لزوم قابل تغییرن. حالا یه عده میان میگن آقا InnoDB کار کن، PDO استفاده کن. من میگم میدونم بابا، هزاربار تاحالا گفتن توی هزارتا تاپیک هزار نفر در این موارد پست زدن، ولی من الان مجبور نیستم این کار رو بکنم جرم و گناه نیست. باز دوباره میان میگن نه فردا برنامت فلان میشه، تیم برنامه نویسی کچل میشه، گوگل میترکه، از کردهء خودت پشیمون میشی. بابا والا بلا من دارم یه برنامه مینویسم واسه خودم و واسه سازمان عریض و طویل فلان و بهمان نیستش تجاری نیستش قرار هم نیست که از الان با استانداردهای جهانی بنویسم چون اصلا وقتش رو هم ندارم؛ الان یه وقت و انرژی محدودی دارم تصمیم گرفتم یکسری قابلیت ها و بهبودها رو در یک مرحله و نسل بهش اضافه کنم، چشم بعدا اگر عمری بود هنوز انگیزه بود اصلا این برنامه دیدم به دردی میخوره ارزشش رو داره وقت داشتم انرژی داشتم به تدریج بهبودها و نسل ها و اولویت های بعدی رو انجام میدم و احتمالا به شیء گرایی و استانداردهای جهانی هم میرسم.
من دارم یه چیزی میگم بحث و سوال و نیازم یه چیز دیگه هست، همیشه بحث رو دیگران منجمله خود شما آقای شهرکی میکشونید توی وادیهای دیگه که گفتم. البته من مثل شما این رو انحراف بحث و غیرمجاز نمیدونم و بنظرم زیاد مشکلی نداره، گرچه خیلی تکراری شده باشه. آیا تاحالا اعتراضی کردم؟ گفتم بحث رو منحرف کردی آفتاپیک بوده؟ نه من با احترام دو ساعت هم براتون استدلال و اطلاعات نوشتم که بگم الان اینا برای من نیاز و اهمیت اول نیست و هنوز میخوام از روش خودم استفاده کنم. نیامدم که با شما سر شیء گرایی و استاندارد بحث کنم بگم نه شما غلط میگید اینا درست نیست! یه چیزی یکی میگه دیگه اینقدر بهش گیر ندید دیگه که حالا به زور آقا نه اون که تو میخوای بکنی اشتباهه اون چیزی که میگی غلطه و باید بیای حتما از روش و رهنمودهای مورد نظر ما استفاده کنی! اصلا یکسری مسائل شخصیه. یکسری چیزهایی هم که شما میگید باید در عمل و عملی ثابت بشه و دلیل نداره انتظار داشته باشید بدون این شرایط طرف حرف شما رو باور کنه و بنظرش قانع کننده بیاد.
حالا باز میگی بحث انحرافی. میخوای تاپیک بزنم در این مورد بحثش رو ببرم توی تاپیک دیگه؟ شاید هم نباشه! البته اگر نگی کلا چنین تاپیک و موضوع و بحثی به تالار PHP ربطی نداره یا اصلا به برنامه نویسی ربط نداره و جاش توی این فروم نیست!

MMSHFE
پنج شنبه 14 اسفند 1393, 10:11 صبح
جواب پست قبلیم رو ندادی.

freeman99
پنج شنبه 14 اسفند 1393, 10:13 صبح
میشه دقیقاً هدفت رو از ایجاد این تاپیک بگی؟ دنبال تأیید بودی که بیان بگن آره کار درست همینه که انجام دادی؟
تایید زوری که نه.
مسلما تایید دیگران میتونه آدم رو مطمئن تر کنه که اشکال بزرگی که ازش غفلت کرده باشه توی طراحیش نبوده.
این موضوع چون برای خودم هم جدید بود (همون موقع داشتم تازه روش کار میکردم و تازه از صفر استارت کرده بودم) و توش ابهام داشتم شک داشتم که شاید کسی قبلا این کار رو به روشهای بهتر یا استانداردتری کرده باشه یا ایدهء خوبی براش داشته باشه. هنوزم البته در مراحل مقدماتی هست و به مرحلهء عملیاتی و اطمینانی در این باب نرسیدم. اصلا شاید کلا ازش صرفنظر کردم! فعلا دارم بررسی میکنم.
از اون طرف گفتم خب چیز جالبیه بذارم دیگران هم استفاده کنن چه اشکالی داره!

تایید در چهارچوب خاصی البته.
یعنی اینکه اگر فرض کنیم که کلیت این کار اشکالی نداره، که بنظر منم نداره، حداقل فعلا و برای من و برنامم، یعنی میخوایم چنین کاری بکنیم و سر این بحث نداریم، حالا دنبال یه روش خوب برای این کار هستیم. ترجیحا هرچی استانداردتر بهتر. هرچی منعطف تر بهتر. هرچی مطمئن تر بهتر.
حالا اشکالش کجاست شما بگو!!
من نیامدم بگم تایید کنید که کلیت این کار درسته، و در این زمینه عکسش رو هم نمیگم که مثلا ادعا کنم بطور کلی و برای همه برنامه ها و همه کس درسته، اصلا بحث برنامه نویسی شیء گرا و رویه ای هم ندارم.

bagherok
پنج شنبه 14 اسفند 1393, 10:54 صبح
شما که اهل مطالعه هستی چرا
چرا اکتفا کردی به
میز و صندلی و ماشین و موتور و حیوان و غاز و اردک
این همه مثال عملی
حتما الان میای میگی چند تا مثال بزن
اما الان نمیتونم مثالی بزنم که شما رو قانع کنی
اما سرفرصت حتما اینکارو میکنم.:تشویق:


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

بعدشم بحث سر این چیزها نیست.
بهترین کار همونی هست که فکرمیکنید درسته مگه اینکه خلافش ثابت بشه

freeman99
پنج شنبه 14 اسفند 1393, 13:19 عصر
در مورد این سیستم به یک نکتهء جالب برخوردم!
من توی یه فایل مثلا تعریف یک تابعی رو دارم، ولی معمولا قبل از تعریف اون تابع یک یا چند فایل دیگه رو هم توی اون فایل اینکلود میکنم. توی اون فایلهای اینکلود شونده میتونه چیزهایی باشه مثل متغییرهای کانفیگ برنامه، یا بهرصورت تابعی کلاسی هرچی که توی تابع اصلی استفاده میشه.
حالا در این ارتباط با این سیستم جدید function autoloading که گذاشتم این مشکل پیش میاد:
اگر قبل از تعریف تابع، متغییرهایی تعریف شدن (مثلا بوسیلهء اینکلود کردن فایل محتوی متغییرهای کانفیگی که در تابع کاربرد دارن)، خب این متغییرها رو در تابع بوسیلهء دستور global قابل دسترس میکنم و بعد استفاده میکنم. حالا مشکل چیه؟ مشکل اینه که در سیستم autoloading جدید، این متغییرها خودشون در درون یک تابع دیگه (تابع استاتیک __callStatic‎) اینکلود و تعریف شدن و بنابراین دیگه جزء متغییرهای گلوبال قرار نخواهند گرفت و بنابراین مشکل پیش میاد. تازه من از این متغییرها در جاهای دیگر و بعدا در خارج از تابع هدف هم بعضا استفاده میکنم و باز به این شکل مشکل پیش میاد.
پس من میخوام که هر متغییری که در فایل اینکلود شده (اما خارج از تعریف تابعی که توی اون فایل وجود داره) ایجاد میشه، در فضای گلوبال وارد بشه (تا متناسب با بقیهء کدها و ساختار کلی برنامهء من باشه و جایی مشکل پیدا نشه و مجبور نباشم خیلی کدهای دیگر رو هم به این خاطر تغییر بدم).
خوشبختانه یه روش پیدا کردم که ظاهرا این مشکل رو حل میکنه:

class func {

public static function __callStatic($x__func_name, $x__arguments) {
require_once "func_$x__func_name.php";
foreach(get_defined_vars() as $name => $value) {
$GLOBALS[$name] = &$$name;
}
call_user_func_array($x__func_name, $x__arguments);
}

}
حالا فعلا اینجا بایگانی باشه تا ببینم آخرش چی میشه :چشمک:

MMSHFE
پنج شنبه 14 اسفند 1393, 14:30 عصر
بنظرم این روش باگ امنیتی ایجاد میکنه چون همه متغیرها رو میاره توی گلوبال و شبیه کاری هست که register_globals انجام میداد.

freeman99
پنج شنبه 14 اسفند 1393, 19:15 عصر
اصلا بنظر من باید در خود PHP امکان autoload توابع رو هم میذاشتن. منکه میگم اصلا این کار میتونست بدون دخالت زیادی از جانب برنامه نویس و بدون نوشتن تابع هندلر انجام بشه. اینطوری دست هم بازتر بود و این سیستم میتونست بهینه تر هم طراحی و پیاده سازی بشه و با مشکلات کمتری مواجه باشه.
در طراحی PHP بارها مشکلاتی دیدم که قبلا روی بعضیاش در همین فروم هم بحث کردیم. در نت هم مطلب در این مورد زیاده.
یه زبانی اینقدر سطح بالا و دارای این همه ویژگیهای کار راحت کن، چه لزومی داره هر تابعی میخوای استفاده کنی خودت دستی تعریفش رو باید اینکلود کنی و کدت پر بشه از اینکلود و یجا هم یادت رفته باشه/flow منطق برنامه طوری بشه که اینکلود اجرا نشه اونوقت باگ و خطای تعریف نشده بودن تابع پیش میاد. بنظر من یجوری طراحی میکردن که شما فقط فایلهای تعریف توابع رو میذاشتی بعنوان جزیی از برنامه (حالا تحت هر استاندارد و ساختاری که بهتر میبود)، بعد PHP خودش بقیهء جوانب رو مدیریت میکرد.
از اون طرف مثلا PHP هرچی ماجول داره همه بطور خودکار لود یا آماده هستن مثلا شما میخوای هر تابعی از هر ماجول/اکستنشن ای استفاده کنی نیازی به مثلا دستور import که توی زبانهایی مثل جاوا و پایتون نیازه نداری و همینطوری فقط توابع رو استفاده میکنی (مثلا توابع mysql mysqli datetime ftp gd و کلی کتابخانه های دیگه که PHP داره)، ولی واسه دوتا تابع و کلاس فکستنی خود برنامه نویس باید دستی اینکلود کنه یا خیلی شاهکار کنه همون autoload در اختیارش هست که تازه اینم فقط درمورد کلاسها گذاشتن و برای توابع همینطور که میبینید باید خودمون یه چیزی اختراع کنیم.
بنابراین بنظر من این قسمت از طراحی PHP هم جای ابهام داره و شاید بهتر میبود یا اصولی این میبود که طور دیگری عمل میشد.

MMSHFE
پنج شنبه 14 اسفند 1393, 19:32 عصر
خوب اگه طبق منطق خودت قضاوت کنیم، لابد برای اونها توی این سطح چنین کاری ضروری نبوده. حتی اگه با استانداردها و نیازهای خیلیها سازگاری نداشته باشه. حداقل PHP اینقدر مهربون بوده که اجازه برنامه نویسی رویه گرا رو توی سال 2015 هنوز میده وگرنه توی دات نت اصلاً نمیتونی رویه گرا کد بزنی. همین روش PHP هم اگه مطابق با استانداردها و اصولی که ما میگیم و شما لازم نمیدونین قبول کنین، عمل بشه، مشکلی ایجاد نمیکنه و به شکل مناسبی کار میکنه. قرار نیست PHP کلی سربار تحمل کنه و همه پوشه های پروژه رو اسکن کنه و کلی فایل رو تو حافظه بیاره، فقط به این خاطر که شاید ازشون یه زمانی استفاده بشه. مطمئنم اگه اینکارم میکرد باز گیر میدادی که خیلی غیر بهینه و غیر اصولی طراحی شده.

freeman99
پنج شنبه 14 اسفند 1393, 20:40 عصر
بنظرم این روش باگ امنیتی ایجاد میکنه چون همه متغیرها رو میاره توی گلوبال و شبیه کاری هست که register_globals انجام میداد.
فکر نکنم مشکل جدی ای داشته باشه.
رجیسترگلوبالز بخاطر این غیراصولی و خطرناک بود که متغییرهایی که توی global scope میاورد از سمت کلاینت میامدن و تحت کنترل کامل/مستقیم کاربر بودن، ولی در برنامه من اینطور نیست و اینا صرفا متغییرهای برنامه خودم هستن که خودم تعریف و مقداردهی کردم؛ فقط از یک scope محلی تابع میبرم به scope گلوبال. ضمنا این متغییرها از قبل گلوبال بودن، منتها توی این سیستم autoload جدید چون توی تابع رفتن از حالت گلوبال دراومدن که من دارم دوباره اونا رو به scope اولیه وارد میکنم.

freeman99
پنج شنبه 14 اسفند 1393, 21:01 عصر
حداقل PHP اینقدر مهربون بوده که اجازه برنامه نویسی رویه گرا رو توی سال 2015 هنوز میده وگرنه توی دات نت اصلاً نمیتونی رویه گرا کد بزنی.
دات نت از ابتدا اینطور طراحی شده. ولی PHP به مرور تکامل پیدا کرده و در حال حاضر هنوز خودش هم یه موجود عجیب الخلقه Hybrid است!
ضمنا زبان نمیتونه برنامه نویس رو مجبور به کاری کنه (چون دور زدن راحته) فقط میتونه سخت تر و راحتتر کنه.


همین روش PHP هم اگه مطابق با استانداردها و اصولی که ما میگیم و شما لازم نمیدونین قبول کنین، عمل بشه، مشکلی ایجاد نمیکنه و به شکل مناسبی کار میکنه.
اینم باز از همون حرفا که میگم به حرف آسونه ولی اثبات و نمونهء عملی میخواد.
همین بعضی طرفها خودشون بارها گفتن برنامه منو اصلا بررسی درست و حسابی نکردن، بعد میان میگن لنگش کن، شیء گرا کن، یا اگر از فلان روش و فلان استانداردها پیروی کنی فلان مسئله که میگی پیش نمیاد، درحالیکه اساسا فکر نمیکنم ساختار و عظمت برنامهء من :لبخند: و گستردگی و پیچیدگی مسائلی رو که بنده بهشون اشاره میکنم درک کرده باشن.
بقول یارو (Bjarne Stroustrup مخترع زبان سی++) میگه: If you think it's simple, then you have misunderstood the problem
ترجمش بنظرم میشه: اگر شما فکر میکنید آن ساده است، پس شما مسئله را درست نفهمیده اید.
البته نمیدونم شاید منظورش چیز دیگه ای بوده و با چیزهایی که من متشابه میدونم فرق داشته، ولی من اینطور تفسیرش میکنم.

اصلا آدم چرا باید به صرف اینکه یه برنامه شیء گرا نیست و آخرین استانداردها رو رعایت نکرده، اون رو کم ارزش بدونه و بررسی و تحلیل نکنه! بنظر منکه بررسی چنین برنامه هایی اونقدرها هم کار سختی نیست. ضمنا من درسته از این متدها برای خوانا کردن برنامه استفاده نکردم، اما از یکسری روشهای ساده تر تاحد خوبی استفاده کرد (تقسیم بندی در فایلها و سلسله مراتب دایرکتوری ها و نامگذاری های طولانی و پرمحتوی، توابع و غیره). اگرم برنامم پیچیده و غیرقابل درک بنظر میرسه بارها گفتم فقط بخاطر عدم استفاده از شیء گرایی و یکسری استانداردهای خاص نیست (گرچه یک بخش میتونه بخاطر این باشه ولی بنظر من همش یا بخش عمدش نیست)، بلکه بخاطر اینه که کلا منطق و الگوریتم ها پیچیده و دقیق و گسترده هستن.


قرار نیست PHP کلی سربار تحمل کنه و همه پوشه های پروژه رو اسکن کنه و کلی فایل رو تو حافظه بیاره، فقط به این خاطر که شاید ازشون یه زمانی استفاده بشه. مطمئنم اگه اینکارم میکرد باز گیر میدادی که خیلی غیر بهینه و غیر اصولی طراحی شده.

نه دیگه گفتم «حالا تحت هر استاندارد و ساختاری که بهتر میبود» بخاطر همینطور مسائل که شما میگی.
قرار نیست چنین سیستمی اینقدر خام و ساده باشه. برای همهء اینا میشه تمهید کرد و راهکار و بهینه سازیهای خوبی گذاشت. یک بخش و نمونش همون ایده ای که بنده قبلا گفتم مثلا یک بار فایلها (لزوما هم نه تمام فایلهای برنامه) اسکن میشه و بعد یک فایل ایندکس درست میشه که توش فقط اسم توابع و آدرس فایلهاشون هست، که این ساختار رو PHP میتونه بخاطر سرعت بالا توی RAM هم پیاده کنه و تا مدتی و با شرایط معقولی کش کنه و Persistent داشته باشه. بعدش فایل هر تابع یا توابعی هم موقعی که نیاز میشه لود میشه و تعریف واقعی توی حافظه بار میشه. کی گفت مجبوره همه رو از ابتدا توی حافظه بیاره؟! اسکن کردن هم با لود کردن و نگه داشتن همزمان توی حافظه فرق میکنه.
بعد از اونور اگر این چیزا ایراد داره و نمیشه بصورت بهینه طراحی و پیاده کرد، پس چطور PHP خودش این همه ماجول و تابع داره که بصورت پیشفرض و بدون هیچ import و اینا در دسترس هستن؟

البته اینا که گفتم صرفا ایده است و گفتم که یک «ابهام» است تا اینکه مطمئن باشم واقعا کار درستیه و آیا PHP در این زمینه ضعف طراحی یا تناقضی داره. اصراری ندارم روی این ادعاها، ولی اونطور هم که شما میگی ساده و خام نگفتم و نیست این مسئله!

MMSHFE
جمعه 15 اسفند 1393, 08:31 صبح
ضمنا زبان نمیتونه برنامه نویس رو مجبور به کاری کنه (چون دور زدن راحته) فقط میتونه سخت تر و راحتتر کنه.
شما اگه تونستی تو #C یک خط کد بدون شئ گرایی بنویسی جایزه داری.

اصلا آدم چرا باید به صرف اینکه یه برنامه شیء گرا نیست و آخرین استانداردها رو رعایت نکرده، اون رو کم ارزش بدونه و بررسی و تحلیل نکنه!
هیچ کس نگفته کاری که انجام دادی کم ارزشه یا کار ساده ای هست. مسئله اینه که داریم پیشنهاد میدیم شئ گراش کنی که توی فاز پشتیبانی و توی استفاده از برنامه توی پروژه های دیگه و کارهای تیمی و... زندگی رو واسه خودت جهنم نکنی. حالا دوست نداری راحت زندگی کنی دیگه میل خودته.

بنظر منکه بررسی چنین برنامه هایی اونقدرها هم کار سختی نیست. ضمنا من درسته از این متدها برای خوانا کردن برنامه استفاده نکردم، اما از یکسری روشهای ساده تر تاحد خوبی استفاده کرد (تقسیم بندی در فایلها و سلسله مراتب دایرکتوری ها و نامگذاری های طولانی و پرمحتوی، توابع و غیره).
این خیلی خوبه ولی کافی نیست. اکثر برنامه نویسهای حرفه ای با همون استانداردهایی که برای جنابعالی مهم نیست دارن کار میکنن. فکر میکنی چرا اون کسانی که اومدن fork ایجاد کردن بعد ولش کردن و کاری نکردن؟ یعنی واقعاً فکر میکنی همش بخاطر این بوده که سخت بوده؟ احتمال نمیدی بخاطر این باشه که (به دلیل استاندارد ننوشتن) ترجیح دادن وقتشون رو براش تلف نکنن؟ استاندارد همیشه اون چیزی نیست که جنابعالی بهش عادت داری.

اگرم برنامم پیچیده و غیرقابل درک بنظر میرسه بارها گفتم فقط بخاطر عدم استفاده از شیء گرایی و یکسری استانداردهای خاص نیست (گرچه یک بخش میتونه بخاطر این باشه ولی بنظر من همش یا بخش عمدش نیست)، بلکه بخاطر اینه که کلا منطق و الگوریتم ها پیچیده و دقیق و گسترده هستن.
بخش عمده این کار رو من هم قبول دارم بخاطر پیچیدگی الگوریتم و... بوده ولی این رو هم قبول کن که اگه خوانا و درست و استاندارد (نه مطابق با استاندارد خودت بلکه منطبق بر استانداردهای جهانی) کد بنویسی، درکش خیلی راحتتر میشه و الگوریتمت رو هم راحتتر میفهمن. اینکه مدام از یه جای برنامه برنامه نویس رو شوت کنی یه جای دیگه و مرتب بررسی کنه ببینه این تابع تو کدوم کلاس و تو کدوم فایل قرار داره و از مزایایی مثل معماری Singleton و Factory و... توی برنامه ات استفاده نکرده باشی که امتیاز نیست. نمیدونم واسه چی مثل بچه ها لج میکنی.

نه دیگه گفتم «حالا تحت هر استاندارد و ساختاری که بهتر میبود» بخاطر همینطور مسائل که شما میگی.
قرار نیست چنین سیستمی اینقدر خام و ساده باشه. برای همهء اینا میشه تمهید کرد و راهکار و بهینه سازیهای خوبی گذاشت. یک بخش و نمونش همون ایده ای که بنده قبلا گفتم مثلا یک بار فایلها (لزوما هم نه تمام فایلهای برنامه) اسکن میشه و بعد یک فایل ایندکس درست میشه که توش فقط اسم توابع و آدرس فایلهاشون هست، که این ساختار رو PHP میتونه بخاطر سرعت بالا توی RAM هم پیاده کنه و تا مدتی و با شرایط معقولی کش کنه و Persistent داشته باشه. بعدش فایل هر تابع یا توابعی هم موقعی که نیاز میشه لود میشه و تعریف واقعی توی حافظه بار میشه. کی گفت مجبوره همه رو از ابتدا توی حافظه بیاره؟! اسکن کردن هم با لود کردن و نگه داشتن همزمان توی حافظه فرق میکنه.
بعد از اونور اگر این چیزا ایراد داره و نمیشه بصورت بهینه طراحی و پیاده کرد، پس چطور PHP خودش این همه ماجول و تابع داره که بصورت پیشفرض و بدون هیچ import و اینا در دسترس هستن؟
PHP با C نوشته شده و قرار نیست هرکاری توی خودش انجام شده رو ما هم تکرار کنیم. حتی سیستم نامگذاری توابعش هم مناسب نیست (قبلاً درموردش بحث کردیم). مثلاً یکجا از underline استفاده کرده و یکجا نه. درسته، این ایرادها رو همه قبول داریم و کسی منکرش نیست ولی چون خود PHP اینطوریه دلیل نمیشه برنامه های ما هم همون رویه اشتباه رو تکرار کنن (اگه معتقدیم اشتباهه). ضمناً اسکن برنامه و ایندکس کردنش برای یک زبان کامپایلی مناسبه نه یک زبان تفسیری که خط به خط داره میخونه میره جلو و هرجا به یه تابعی چیزی رسید، تازه دنبالش میگرده. بعلاوه include_path رو هم واسه همین کارها گذاشتن دیگه. شما پوشه هایی که فایلهات داخلش هستن رو با set_include_path بیا معرفی کن به برنامه ولی این امتیازها وقتی معنا پیدا میکنه که کدت رو شئ گرا بنویسی. دیگه کسی برای برنامه نویسی رویه گرا تره هم خورد نمیکنه چه برسه به اینکه بیان برای بهینگیش ساختار AutoLoad هوشمند هم بگذارن. همین که PHP هنوز از برنامه نویسی رویه گرا پشتیبانی میکنه هم بخاطر Backward Compatibility هست وگرنه تا جایی که میدونم در آینده (احتمالاً توی نسخه 6) کلاً Procedurual Programming رو از زبان PHP حذف میکنن. پس تا وقت داری خودتو بروز کن اگه میخوای تو میدون بمونی (این یه نصیحت دوستانه است، دوباره جبهه نگیری).

البته اینا که گفتم صرفا ایده است و گفتم که یک «ابهام» است تا اینکه مطمئن باشم واقعا کار درستیه و آیا PHP در این زمینه ضعف طراحی یا تناقضی داره. اصراری ندارم روی این ادعاها، ولی اونطور هم که شما میگی ساده و خام نگفتم و نیست این مسئله!

مسئله ضعف طراحی نیست. موضوع اینه که قابلیتهای برنامه نویسی رویه گرا دیگه قرار نیست بهبود پیدا کنه چون اصلاً جزو سیاستهای PHP نیست. شما توی زبانهای مطرح و بزرگ دنیا بررسی کن ببین کدومش هنوز برای Procedural Programming پشتیبانی خوبی (حتی در حد و اندازه PHP) ارائه میدن که انتظار داری توسعه دهندگان PHP بیان وقتی رو که میشه روی پشتیبانی بهتر PHP از یونیکد و OOP و... بگذارن رو صرف بهبود کدهای عقب مونده کنن؟ مطمئن باش پشتیبانی PHP از کدنویسی رویه گرا هرچقدر هم که کامل و بی نقص بشه نمیتونه امروزه دیگه براش امتیازی داشته باشه و اون رو در رقابت با زبانهای روز دنیا همچنان پیروز نگه داره. بنابراین میشه اینطور نتیجه گرفت که اینکه برای برنامه نویسی سنتی دیگه بهبودی توی PHP انجام نمیشه مال امروز و دیروز نیست و چندین ساله که دیگه ولش کردن همونطوری واسه کسانی بمونه که قصد ندارن خودشون رو بروز کنن. این مسئله هم ضعف طراحی نیست و بیشتر به سیاستهای شرکت Zend مربوط میشه.

freeman99
جمعه 15 اسفند 1393, 10:28 صبح
آقا شما چقدر گیر میدی :لبخند:
فعلا که من هرچی میخوام دارم با هر روشی که راحتم و خودم تشخیص میدم درست میکنم. تاحالا هم کم نیاوردم. هر برنامه ای خواستم با سرعت زیادی نوشتم و کارم رو راه انداختم. واسم فرقی هم نمیکنه چه زبانی چه استانداردی شیء گرایی یا رویه ای، هرچی دم دست باشه و بنظرم راحتتر و سریعتر بشه باهاش برنامه رو درست کنم استفاده میکنم. با پایتون برنامه نوشتم، با Qt نوشتم، با PHP نوشتم، ...، بعضا مقداری شیء گرایی هم استفاده کردم (ولی هیچوقت مجبور نبودم کامل و اکیدا شیء گرایی رو رعایت کنم). این حرفا که میزنی مال کسانیه که مثلا شغلشون برنامه نویسیه یا اکیدا میخوان کار تیمی بکنن و این حرفا. من اول و آخر حداقل تا حالا و فعلا واسه خودم برنامه مینویسم (حالا اگر بنظرم بدون مشکل و هزینهء زیادی برام مقدور بود، بیش از این هم درنظر میگیرم، ولی آنچنان هم برام مهم نیست). اولویت ها و اهدافم با شما و دیگران فرق میکنه. من یجور همه فن حریفم! مثلا همین الان حدود 10 تا مقالهء نسبتا حجیم ویکیپدیا باز دارم که میخوام بخونم و معلوم نیست چقدر وقت ببره، و بنابراین کار روی پروژم فعلا تعطیله، همینطوری تصادفی هم مقاله باز میکنم و سویچ میکنم بین کارها، حالا این مقاله ها راجع به چیا هست، باید بگم عملا راجع به همه چیز، از طرز ساخت بمب اتمی بگیر تا حشره شناسی و شیمی و فیزیک و الکترونیک و غیره، هرچیزی که برام جالب باشه، هرچیزی که بخوام بدونم و بتونم، هرچیزی که فکر کنم بعدا در زندگی به دردم میخوره، مثلا بعنوان نمونه این مقاله: https://en.wikipedia.org/wiki/AC_adapter این چه ربطی به برنامه نویسی داره الان؟! خب هیچی. ولی گفتم که من همه فن حریفم. با یک حیطه و یک کار حال نمیکنم. همین دیروز یه وسیلهء الکترونیکی رو تعمیر کردم که طرف میخواست بابت تعمیرش 80 هزار تومن بگیره من خودم با 12 هزار تومن خرید قطعه درستش کردم؛ وسیلش مال محل کارم بود؛ حالا کارفرماها اینا رو میبینن میفهمن بالاخره و ارزش و احترام و اعتبارم زیاد میشه عزیز میشم رقیبی ندارم، حتی فکرش رو هم نمیکنن! مانیتور کامپیوتر خودم که الان پشتش نشستم خراب شده بود پول نداشتم نو یا LCD بخرم، خودم هرجور بود بالاخره تعمیرش کردم (هرچند مقداری هم شانس آوردم که مشکلش زیاد تخصصی نبود، ولی بازم سواد و مهارت میخواست).
حالا میگی در آینده برنامه نویسی رویه ای منقرض میشه، خب بشه، واسه من خیالی نیست، مطمئن باش اون موقع هم میتونم راه خودم رو باز کنم و کارم رو راه بندازم، حالا هر زبانی به هر شکلی میخواد باشه، نهایت نهایتش مجبور میشم شیء گرایی رو خوب یاد بگیرم و استفاده کنم (هرچند فکر میکنم همین الان هم تا حد قابل توجهی بلدم؛ فقط استفاده نمیکنم و تجربه عملی ندارم) خب یاد میگیرم و استفاده میکنم. پس مسئله نیازه و ضرورت و انتخاب های شخصی با توجه به شرایط و اهداف شخصی. شما با این حرفا نمیتونی منو از چیزی بترسونی و از ادامهء آرمانهای مقدس ناامید کنی :لبخند: چون من جونوری هستم واسه خودم، کارهای سخت تر کردم، اگر شیء گرایی رو همه میتونن یاد بگیرن و کار کنن من چیزهایی رو خوندم و یاد گرفتم و بهشون تسلط پیدا کردم که افراد کمی جرات میکنن واردش بشن و افراد خیلی کمی سواد و توانایی در این زمینه دارن در حد بنده.
خلاصه که توپ تانک مسلسل به من اثر ندارد :قهقهه:
آقا سوراخ میکنیم میریم رد میشیم دیوار بتونی هم باشه. چی فکر کردی داداش :متفکر:

الان میگی باز خودستایی و تعریف از خود، شاید راست میگی، ولی درواقع اینکه دیگران درمورد من چطور فکر کنن به خودی خودش واسه من مهم نیست، من خودم دارم حال میکنم با خودم و هیجان و خوشحالی خودم رو از بابت اینکه اینقدر دانش و توانایی های گسترده دارم و کاربردش در زندگی چقدر هیجان انگیزه چقدر کیفیت زندگی آدم رو بالا میبره روایت میکنم. خلاصه من اینجوریم دیگه اینجوری زندگی میکنم، تاحالا هم زیاد بد نگذشته شکر خدا، هرچند بیشتر دوست داشتم، ولی توی این دنیا کسی ندیدم همه چیز رو با هم داشته باشه، غیرممکن نباشه خیلی سخته. باید انتخاب کنی، باید از یه چیزایی صرفنظر کنی تا به یه چیزای دیگه برسی. اگر مثلا فقط در یک حیطه کار میکردم و تخصص اکید داشتم اینقدر همه فن حریف نمیشدم و از دانش و توانایی های گسترده و چند حیطه ای خودم حال نمیکردم و زندگی برام راحت نمیشد. یعنی شما بگو هر کاری بدی دیگران برات انجام بدن و خودت نتونی معمولا پوله رو که میدی ولی برات دردسر هم داره و خیلی وقتا گند هم میزنن و اشکالات دیگه هم در کار هست.

freeman99
جمعه 15 اسفند 1393, 10:29 صبح
ازت تشکر کردم چون این همه نوشتی بالاخره زحمت کشیدی و مخاطب من بودم بالاخره احترام و این حرفا :لبخند:
حالا ما زیاد مینویسیم میان عصبانی میشن مسخره هم میکنن :متعجب:

freeman99
جمعه 15 اسفند 1393, 10:41 صبح
برنامه نویسی واسه من صرفا یه ابزاره مثل ابزارهای دیگه. از بیل و کلنگ باستانی تا پیشرفته ترین ابزارها، واسه من فقط ابزارن واسه برآوردن نیازهای عملی. برنامه نویس بودن من واسه کار راه اندازیه و ارضای شخصی خودم! واسه اینکه اگر یه چیزی میخوام دوست دارم نیاز دارم واسه خودم درست کنم، بتونم، و محتاج دیگران نباشم، دیگرانی که اغلب محتاج بودن به اونا یعنی دردسر، و حتی بن بست و محرومیت!
فقط کار انجام بشه. هرچی راحتتر و سریعتر. چون هدف خود برنامه نویسی و برنامه نیست. میدونی که من به زیبایی ظاهری هم اصلا اهمیت نمیدم. وقت و انرژیم برام ارزشمندتر از اونه که روی پرداختن به ظاهر و زیبایی و نظم صرف کنم و بهبه و چهچه بگم بابت اینکه یک تک برنامه رو چقدر منظم و توسعه پذیر و دارای قابلیت نگهداری خوب نوشتم چقدر مهندسی قشنگی کردم و دیگران میبینن میگن بهه چه مهندس خوبی، چون اصولا هدف و زمینهء کاری من اینطوری نیست و برنامه هایی که مینویسم معمولا موردی و دارای عمر یا کارایی و نیازهای محدودی هستن. ولی خب دوست دارم و ممکنه در آینده نیاز بیشتر از این هم پیدا کنم، خب اونوقت هم چاره میکنم براش، مشکل لاینحلی این وسط نمیبینم! از الان نمیام برم چیزی که هنوز عملا نیازم نشده یاد بگیرم به این امید که در آینده نیاز میشه، بخصوص که تاحالا که دیدم بدون اونم میتونم کارم رو راه بندازم، حالا شاید یه ذره کندتر و سخت تر، ولی شایدم اصلا نه، چون توی برنامه های کوچک و موردی من این مباحث خیلی کمتر اهمیت و فایده داشتن. این وقت و انرژی رو میذارم روی خیلی فیلدهای دیگه که همزمان بهشون نظر دارم. اغلب گسترده تر و متنوع تر یاد گرفتن رو مفیدتر میبینم برای شخص خودم با شرایط و اهدافی که دارم. البته باید بگم این چند ساله نیم نگاهی به تخصص ویژه و کامل و مطابق استاندارد و تجاری/بازاری هم دارم بخاطر مسائل شغل و مباحث درآمدی و مالی.
ولی به مرور دارم کامل تر میشم. دارم خیلی قوی میشم. یکی همزمان توی فقط یک زمینه یا نهایت دو سه تا زمینه پیش میره، خب این زودتر میرسه به انتها یا نزدیک انتها و کامل تر بودن، ولی من همزمان توی زمینه های زیادی دارم پیش میرم، البته با قدرت و سرعت خوبی، ولی بازم چون تعداد زمینه ها زیاد در نتیجه روندش از دید دیگران در یک زمینه و دو زمینه بنظر بصورت غیرعادی کند میاد، و اینکه مثل شما تعجب میکنن یا فکر میکنن لجبازی میکنم که مثلا یک چیزهایی رو رعایت نمیکنم و بها نمیدم، ولی به مرور که اولویت های اصلیم به حد کمال یا حداکثر بهینه خودشون رسیدن، کم کم اولویت های پایین تر رو هم احتمالا دنبال میکنم در اون زمینه ها هم رشد میکنم، اونوقت میشم یه ابرقدرت! البته همین الانش هم توی کامپیوتر کلا و تاحدی در برنامه نویسی و حتی در بعضی زمینه های دیگه یک نیمچه ابرقدرتی چیزی هستم به گمانم :لبخند:

MMSHFE
جمعه 15 اسفند 1393, 10:52 صبح
یه نکته یادت باشه اونم اینه که ممکنه آچار فرانسه خیلی جاها ابزار خوبی باشه ولی وقتی پای کار تخصصی بیاد وسط کسی سراغش نمیره. هیچوقت آچارفرانسه نمیتونه کار آچار لوله گیر رو انجام بده چون زورش نمیرسه. حالا هرچقدرم آچارفرانسه خوبی باشه فرقی در اصل قضیه ایجاد نمیکنه.

مورد بعدی اینکه اینجا یه تالار تخصصیه برای کسانی که برنامه نویسی PHP شغلشونه و بعنوان یه حرفه دنبالش میکنن نه از روی تفریح. پس انتظار نداشته باش نسبت به غیر استاندارد نوشتن کدهایی که جنابعالی یا هر فرد دیگه میگذاره، بی تفاوت باشن و یادآوری نکنن یا حتی گیر ندن.

MMSHFE
جمعه 15 اسفند 1393, 10:58 صبح
الان میگی باز خودستایی و تعریف از خود، شاید راست میگی، ولی درواقع اینکه دیگران درمورد من چطور فکر کنن به خودی خودش واسه من مهم نیست، من خودم دارم حال میکنم با خودم و هیجان و خوشحالی خودم رو از بابت اینکه اینقدر دانش و توانایی های گسترده دارم و کاربردش در زندگی چقدر هیجان انگیزه چقدر کیفیت زندگی آدم رو بالا میبره روایت میکنم. خلاصه من اینجوریم دیگه اینجوری زندگی میکنم، تاحالا هم زیاد بد نگذشته شکر خدا، هرچند بیشتر دوست داشتم، ولی توی این دنیا کسی ندیدم همه چیز رو با هم داشته باشه، غیرممکن نباشه خیلی سخته. باید انتخاب کنی، باید از یه چیزایی صرفنظر کنی تا به یه چیزای دیگه برسی. اگر مثلا فقط در یک حیطه کار میکردم و تخصص اکید داشتم اینقدر همه فن حریف نمیشدم و از دانش و توانایی های گسترده و چند حیطه ای خودم حال نمیکردم و زندگی برام راحت نمیشد. یعنی شما بگو هر کاری بدی دیگران برات انجام بدن و خودت نتونی معمولا پوله رو که میدی ولی برات دردسر هم داره و خیلی وقتا گند هم میزنن و اشکالات دیگه هم در کار هست.

اون بحث خودشیفته بودنت که بماند! :چشمک:
ولی در کل اگه همونایی که میگی تو کار گند میزنن هم مثل جنابعالی آچارفرانسه نبودن و یه متخصص میشدن، میتونستی کارت رو به راحتی و با اطمینان بهشون بسپری. آدم یه موجود اجتماعیه و مگه کلاً چند سال عمر میکنی که میخوای همه چیز رو خودت یاد بگیری؟ بعد اونوقت چقدر وقت و انرژی داری که اجراش کنی؟ به فرض تمام فنون رزمی رو در تمام شاخه ها یاد بگیری و به استادی برسی. اونوقت میشی یه آدم 90 ساله که جون نداره درست راه بره چه برسه به اینکه از اینهمه دانشی که با کلی زحمت بدست آورده، استفاده مادی و معنوی هم ببره. مطمئن باش اگه تخصصی کار کنی، عمیقتر میتونی یاد بگیری و این بد نیست. افراد موفق IT کسانی هستن که به این رشته مثل برکه نگاه نکردن (وسیع ولی کم عمق) چون تا دلت بخواد شاخه های مختلف داره که همه هم در حد خودشون جذاب هستن ولی دریایی از مطلب تخصصی توی هرکدوم هست. برعکس آدمهای موفق کسانی هستن که مثل چاه با قضیه برخورد کردن (کم عرض ولی عمیق).
دیگه خود دانی و بیشتر از این Off Topic نگذار.

freeman99
جمعه 15 اسفند 1393, 11:38 صبح
یه نکته یادت باشه اونم اینه که ممکنه آچار فرانسه خیلی جاها ابزار خوبی باشه ولی وقتی پای کار تخصصی بیاد وسط کسی سراغش نمیره. هیچوقت آچارفرانسه نمیتونه کار آچار لوله گیر رو انجام بده چون زورش نمیرسه. حالا هرچقدرم آچارفرانسه خوبی باشه فرقی در اصل قضیه ایجاد نمیکنه.
ایول مهندس فهمیدم تو هم فنی هستیا. ای کلک :چشمک:
والا حرف شما درسته از نظر تئوریک، ولی من نیازی نمیبینم در این مورد بحث تئوریک بکنم، چون چیزی که هست من دارم این مسائل رو عینا تجربه میکنم و در زندگی واقعی استفاده و محک میخورن.
فعلا که آچار فرانسه بودن در زندگی به من حال داده تاحالا و هنوزم داره حال میده. راضیم! مشکل خاصی هم ندیدم توش. حالا درآمدمون کمه، ولی اونم از اول و از همون اوایل نوجوانی میدونستم و این انتخاب آگاهانه و سبک زندگی خودم بوده و چیزی که براش ساخته شدم. میدونستم چه خواهد شد چطور زندگی خواهم کرد چی میخوام از زندگی. هیچوقت علاقه نداشتم دنبال پول زیاد بدوم. دوست داشتم راحت باشم آزادی و وقت زیاد داشته باشم گرفتار مسائل مردم عادی نباشم چون بنظرم ارزشش رو نداشت.
فعلا هم در خیلی کارها و خیلی جاها نیاز به آچار فرانسه هست و برای امثال منم این فرصت شغلی و درآمد حداقلی ایجاد میکنه. الانه کار اصلیم کم و بیش همینطوریه و آچار فرانسه میخود.
البته در بعضی زمینه ها تخصص من اینقدر زیاده که شک دارم بشه گفت آچار فرانسه! من از دید خودم میگم همه فن حریف (و البته نگفتم هیچ کاره)، ولی توی خیلی زمینه ها میبینم واقعا حتی از کسانی که اون شغل و تخصصشون بوده که سالها دارن توش کار میکنن چیزی کم نداشتم بلکه شاید بعضا سرتر هم بودم! حتی توی همین برنامه نویسی هم واقعا قدر هستم و خب توی شیء گرایی و اون مواردی که شما میگی ادعایی هم ندارم ولی در عین حال میبینم خیلی چیزها رو من میفهمم و توان انجامشون رو بهتر از اکثریت برنامه نویسان دیگر هم دارم.
خلاصه این یه موضوع مبهم و اثبات نشده ای و شاید به تحلیل و روشن شدنش اولویت ندادم تاحالا (اگر شدنی باشه) که بفهمم واقعا در چه چیزهایی تا چه حد تخصص کامل و استانداردی دارم، تا چه حد آچار فرانسه هستم فقط و تا چه حد تخصص کار. بهرحال بنظر من این یه مسئلهء تجربی و عملیه و چیزی که خودم دارم لمس میکنم و باهاش زندگی و کار میکنم لزومی برای بحث تئوریک و شک کردن راجع بهش نمیبینم.


مورد بعدی اینکه اینجا یه تالار تخصصیه برای کسانی که برنامه نویسی PHP شغلشونه و بعنوان یه حرفه دنبالش میکنن نه از روی تفریح. پس انتظار نداشته باش نسبت به غیر استاندارد نوشتن کدهایی که جنابعالی یا هر فرد دیگه میگذاره، بی تفاوت باشن و یادآوری نکنن یا حتی گیر ندن.
نه هیچ اشکال نداره. ولی شاید بهتره شما هم یخورده دیدتون رو بازتر بکنید و واقعیت ها و پدیده های دنیا رو کاملتر و بازتر ببینید.
الان من خودم یه پدیده ام :لبخند:

ولی در کل اگه همونایی که میگی تو کار گند میزنن هم مثل جنابعالی آچارفرانسه نبودن و یه متخصص میشدن، میتونستی کارت رو به راحتی و با اطمینان بهشون بسپری
حالا فعلا که واقعیت اینطور نیست. با حرف و شعار و تئوری که واقعیت درست نمیشه.
ضمنا من هیچوقت مثل اونا رفتار نمیکنم، چون سیستم تفکر و زندگیم فرق میکنه. مثلا یه کاری بلد نیستم واقعا صلاحیتش رو در خودم نمیبینم همینطور نمیام برعهده بگیرم و ادعاش رو بکنم، مگر اینکه خودشون مجبور باشن و بخوان و خلاصه مسئولیت و ادعای غیرواقع بر دوش من نباشه. کارهایی که میکنم اغلب در همون حدی هست که تخصص و دانش و کیفیت کار خودم براشون کافیه.

آدم یه موجود اجتماعیه
من زیاد اجتماعی نیستم!

مگه کلاً چند سال عمر میکنی که میخوای همه چیز رو خودت یاد بگیری؟
نمیدونم میشه همه چیز رو یاد گرفت یا نه، ولی فکر میکنم میشه خیلی چیزها رو یاد گرفت، حتی تا حد زیادی (البته به شرط اینکه شرایط زندگیت مثل من باشه که وقت زیاد داشته باشی و فراغت خیال و آزادی عمل، که فکر نمیکنم آدمهای زن و بچه دار بتونن به این سادگی داشته باشن)، و هرچی بیشتر دانش و توانایی بدست میاری کیفیت زندگیت بالاتر میره و حال بیشتری میبری. برای انگیزهء این کار رو داشتن نیازی نیست که تضمینی باشه که بتونی همه چیز رو یاد بگیری، صرفا پیش میری و هرچی بیشتر بهتر، بهرحال سود خودش رو داره.

بعد اونوقت چقدر وقت و انرژی داری که اجراش کنی؟
اجرای چی؟
خب الان من دارم اجرا میکنم دیگه :لبخند:
حالا یه وقت بیکاری هم دارم چکار کنم چه کاری از این مفیدتر که به دانش و توانایی خودم اضافه کنم؟ فرصتش پیش آمد استفاده میکنیم، نیامد هم که هیچ حداقل با یک سرگرمی سالم و مثبت وقتت رو پر کردی.
اصولا در زندگی چه کارهای دیگری میشه کرد چه اهدافی میشه داشت که اینقدر نسبت به در دسترس بودن بزرگ و مفید هم باشن؟ من گزینه های واضح و زیادی که بهشون امید و علاقه کافی داشته باشم نمیبینم!


به فرض تمام فنون رزمی رو در تمام شاخه ها یاد بگیری و به استادی برسی. اونوقت میشی یه آدم 90 ساله که جون نداره درست راه بره
بعید میدونم یه چنین استاد رزمی ای که میگید سیستم و تقویم زندگیش اینقدر با افراد عادی غیرمتفاوت باشه.
هرچی هم ورزش کرده رزمی کار کرده بالاخره تا قبل از اون 90 سال هم حالش رو برده سلامتیش رو داشته و استفادش رو کرده و همین کفایت میکنه. مثلا خود من مدتی (حدود یک سال) باشگاه رزمی رفتم و گرچه در سطح مقدماتی ول کردم چون وقت نمیکردم، ولی تاثیر اون رو برای بقیهء زندگیم از جهات جسمی و روانی و شخصیتی کاملا مفید و بحساب آمدنی ارزیابی میکنم و فکر نمیکنم عمرم رو تلف کردم! بنظر من ارزشش رو داشت و تجربه ای بود که باید بدست میاوردم. همین الان هم درسته دیگه بصورت حرفه ای رزمی کار نمیکنم اما کلا سیستم منو به این جهت برده و توی خونه ورزش نسبتا منظم و مستمر دارم و همیشه آمادگی و قدرت بدنی خودم رو در سطح خوبی نگه میدارم و روی سیستم رزمی هستم. حتی توی خیابون که راه میرم راه رفتن من با بقیهء مردم فرق میکنه و طبق اصول و دیدگاه و فلسفهء خودمه، که بخشی از اون بر اساس هنرهای رزمیه. البته نه اینکه مثلا یجور مسخره ای راه برم و مردم بگن طرف دیوونس یا مسخرس و غیره، ولی متفاوته بهرحال و خیلی ها اینو متوجه میشن. اصولا آدم یه چیزی که واقعا باشه و توی ذات و وجودش رفته باشه، این در وجنات و سکناتش منعکس میشه.


فراد موفق IT کسانی هستن که به این رشته مثل برکه نگاه نکردن (وسیع ولی کم عمق) چون تا دلت بخواد شاخه های مختلف داره که همه هم در حد خودشون جذاب هستن ولی دریایی از مطلب تخصصی توی هرکدوم هست. برعکس آدمهای موفق کسانی هستن که مثل چاه با قضیه برخورد کردن (کم عرض ولی عمیق).
البته چیزی که من کار کردم نسبت به خیلی ها عمیق تر هم بوده! این اقیانوس دانش رایانه و برنامه نویسی که فقط شیء گرایی نیست. اتفاقا این دیدگاه هم تاحدی سطحی هست که اکثریت مثلا این مباحث رو میشناسن، اما در خیلی مباحث پیشرفته و اساسی و کاربردی دیگر اطلاعات و مهارت کافی ندارن. مثلا بحث امنیت و رمزنگاری که من شخصا در حد پیشرفته ای توش کار کردم، بحث پروتکل ها، الگوریتم ها، حتی همین زبان انگلیسی که اکثرا توش ضعف دارن.


دیگه خود دانی و بیشتر از این Off Topic نگذار.
ای بی ذوق ضدحال زن :لبخندساده:
آقا توی تاپیک خودمون جواب دیگران رو هم نمیتونیم بدیم؟
راست میگی خودت ادامه نده :لبخند:
من تا زمانیکه که دیگران چیزی بگن که جوابی براش داشته باشم و وقتش رو هم داشته باشم و بنظرم مفید باشه ادامه میدم. مگه فقط من باید کوتاه بیام و سکوت کنم؟ خب حرف دارم. یه دنیا. مال یه عمر زندگی و تجربه و تفکر. هرچی بگی باز حرف میاره. منم علاقه دارم به این مباحث و بنظرم بنیادین و مهم و کاربردیه. شاید به دید شما اینطور نباشه چون شما بیشتر از من مثل بقیهء مردم و کلیشه ای زندگی میکنید، ولی من غیرعادی هستم و غیرعادی فکر و زندگی کرده و میکنم.

MMSHFE
جمعه 15 اسفند 1393, 11:46 صبح
پس تاپیک رو میبندم که دیگه ادامه ندی. علتش هم عدم ارتباط مباحث متفرقه مطرح شده به موضوع تالار و عدم تمایل استارتر به ادامه بحث اصلی تاپیک خواهد بود.