mohammad reza beizavi
شنبه 01 شهریور 1393, 22:48 عصر
مسلما گفتگو بر سر این موضوع که کدامیک بهتر هستند PHP، ASP یا JSP، بحث تازه ای نیست و در حال حاضر نمی توان پایانی هم برای آن متصور شد.
اما در نهایت چه کسی می تواند بهترین تکنولوژی را در این زمینه به ما معرفی کند؟ بالاخره کدام تکنولوژی انتخاب نهایی و درست ما در توسعه وب است؟
اولین نکته این است که قطعه کد و یا برنامه ای را در PHP نخواهید یافت که اساتید ASP با همان کیفیت و گاها بهتر از آن طراحی و پیاده سازی نکنند و مسلما این موضوع در ASP هم صدق می کند و می توان برنامه نویس PHP پیدا کرد که کد ASP را با کیفیتی بهتر از کد ASP پیاده سازی کند و حتما یک برنامه نویس متبحّر JSP نیز همین ادعا را خواهد کرد.
این مثال اولیه را می توان برای هر موضوعی در هر کدام از این تکنولوژی ها تعمیم داد، مثالهایی مانند سرعت برنامه نویسی، سرعت اجرا کد، سرعت بارگذاری صفحات، قدرت سرویس دهنده های میزبان این تکنولوژی ها (IIS, Apache, …)، امنیت و چندین و چند عامل دیگر.
یک تجربه ساده؛
یکبار نرم افزاری در یکی از شرکتهای بزرگ داشتیم که در زمان گزارشگیری به شدت با کاهش سرعت مواجه می شد و گاها این مسئله باعث بروز خطا در نرم افزار میشد. با بررسی اولیه، علت در عدم پاسخگویی بانک اطلاعاتی بود که از MySQL استفاده میشد و با وجود یک جدول با حدود 9 میلیون رکورد قادر به سرویس دهی در زمان مقتضی نبود و پس از 97 ثانیه ارتباط قطع میشد(Connection timeout). با انتقال بانک اطلاعاتی به MSSQL این کوئری در مدت زمان 5 ثانیه اجرا شد. اما با کمک یکی از دوستان و انتقال آن به Oracle این کوئری در مدت زمانی کمتر از 1 ثانیه انجام شد.
بعدها و با مشاوره یک گروه متخصص در بانک اطلاعاتی MySQL، همین کوئری در شرایط برابر در مدت زمان 2.7 ثانیه در همان MySQL اجرا شد.
منظور از مباحث مطرح شده، رسیدن به یک نتیجه ی واحد است. در مباحث بالا، مزایای استفاده از یک نوع تکنولوژی، شاید در ابتدا قدرت آن تکنولوژی را به ذهن شما متبلور کند اما با دقت بیشتر نقطه ی قوت در هر یک از موارد ذکر شده دقیقا همان مهارت، تخصص و تجربه بهره بردار (برنامه نویس) از یک تکنولوژی است.
شما می توانید برای مقایسه تکنولوژی های مختلف ساعتها و ساعتها در سایتها و فرومهای مختلف وقت صرف کنید.
اما...
اگر دانش خوب و نظر مثبتی نسبت به PHP دارید می توانید در مقابل هر قابلیت ASP قابلیتی از PHP را قرار دهید.
می توانید هر نقطه ی ضعفی که از سوی منتقدان مطرح می شود را با چندین نقطه ی قوت پاسخ دهید.
حتی می توانید دست به طراحی وب سایتی بزنید تا تمام گفته ها و افکار و عقایدتان را به اثبات برسانید.
اما باید بدانید کسی که دانش و تجربه خوبی در ASP دارد نیز می تواند تمام موارد فوق را در برابر ادعاهای یک PHP کار تکرار کند.
و شاید همین موضوع را بتوان در مورد یک JSP کار نیز تکرار کرد.
برخی نگران این موضوعند که اگر مثلا با تکنولوژی های مایکروسافت کار کنند شاید تکنولوژیهای متن باز به سرعت بازار را در دست بگیرند و آنها از این تغییر چیزی جز ضرر، عایدشان نشود و از این قافله عقب بمانند!
برخی نیز نگرانند که اگر با تکنولوژیهای متن باز کار کنند شاید غولی مانند مایکروسافت و اوراکل آنقدر خوب کار کنند که دیگر جایی برای عرض اندام تکنولوژیهای متن باز نگذارند!
بیشتر وب سایتها به بانکهای اطلاعاتی وابسته اند. حال کدام تکنولوژی را انتخاب کنیم که بانک اطلاعاتی سازگارتر و بهتری را پشتیبانی کند و ارتباط با آن هم بهتر باشد و البته ابزارهای مناسبی را هم در اختیارمان قرار دهد؟
این سوالها و نگرانیها، از آغاز پیدایش هر تکنولوژی بوده و وجود خواهد داشت. اما آیا هر یک از این تکنولوژی ها به یکباره نزول یا عروج پیدا می کنند؟ آیا برنامه نویسان وابسته به این تکنولوژی ها به یکباره دستشان از کلیه امکانات مزایای فراهم شده خالی می شود؟ آیا توسعه دهندگان یک تکنولوژی در صورت توسعه و پیشرفت تکنولوژی های دیگر، تنها به عنوان نظاره گر این موضوع منفعل خواهند ماند؟ کدام نقص را در یک تکنولوژی دیده اید که توسعه دهندگان به سرعت اقدام به رفع آن نکرده اند و یا امکاناتی را در یک تکنولوژی دیده اید که رقبا در کمترین زمان اقدام به شبیه سازی آن نکرده اند؟ و آیا وجود و رونق یک تکنولوژی باعث نزول و نابودی تکنولوژی های دیگر خواهد شد؟
این سوالات را برنامه نویسان بهتر می توانند پاسخ بگویند
حال سوالاتی که شاید کمتر به آنها فکر کرده اید!
آیا برنامه نویس PHP خوب و ماهری را می شناسید که برای انجام کاری در زمینه وب با مشکلی برخورد کرده و در حل آن ناتوان باشد؟
آیا یک برنامه نویس ASP خوب و مجرب را می شناسید که از یافتن شغل با حقوق و مزایای مناسب نا امید شده باشد؟
آیا یک برنامه نویس ASP خوب و البته منصف می شناسید که از قابلیتهای هر یک از بانکهای اطلاعاتی مرسوم مانند MySQL، MSSQL و یا Oracle شکایت کند و ابراز کند که نمی توان با آنها یک نرم افزار یا وب سایت خوب نوشت؟
آیا تکنولوژیهای مختلف به دلیل تکامل دیگر تکنولوژیها به وجود آمده اند و باید به دنبال کاملترین تکنولوژی بود؟
آیا تکنولوژی وجود دارد که سراسر نقطه ی قوت بوده و نتوان هیچ ضعفی در آن یافت؟
این سوالها و دهها سوال مشابه دیگری که می توان با همین مضمونها پرسید تا به شما یادآوری کند که "آنچه مهم است یک برنامه نویس خوب بودن است".اینکه یک برنامه نویس باشید که فارغ از هر نوع تکنولوژی بتوانید از تکنولوژی انتخابی، به بهترین شیوه استفاده کنید.
شاید در جامعه برنامه نویسانی که می شناسید زیاد باشند کسانی که به خاطر کارهای شرکتی که در آن مشغول به کار هستند یا به خاطر شرایط به خصوصی که در یک پروژه حکمفرماست نیاز به تغییر تکنولوژی داشته باشند. در این شرایط دیگر انتخاب تکنولوژی با برنامه نویس نیست.
همیشه انتخاب تکنولوژی بر عهده یا انتخاب برنامه نویس نخواهد بود.
پس وظیفه و یا بهتر است بگوییم تکلیف برنامه نویس در این میان چیست؟
اگر برنامه نویس اصول برنامه نویسی را خوب بداند و اصولی برنامه نویسی کرده باشد و در استفاده از یک تکنولوژی صرفا استفاده کننده نباشد و از پشت پرده و جزییات آن تکنولوژی باخبر باشد و مختصرا اینکه برنامه نویس ماهر و مجرب و با دانشی باشد، استفاده از یک تکنولوژی متفاوت وی را با فاجعه روبرو نخواهد کرد.
مسلما این تغییرات هر چند دشوار بوده و سرعت و خلاقیت برنامه نویس را حداقل برای ابتدای کار پایین می آورد اما وی به سرعت خود را با شرایط تطبیق داده و به وظیفه خود که برنامه نویسی است ادامه می دهد.
پس بهتر است "یک برنامه نویس باشید تا یک تکنولوژی کار".
این جمله به این معنا نیست که نباید از تکنولوژی ها و ابزاری که این تکنولوژی ها در اختیار ما می گذارند استفاده کنیم بلکه به این معناست که از ابزار ارائه شده با آگاهی و دانش استفاده کنیم.
روش اصولی این است که در استفاده از هر ابزار و شیوه جدید در یک تکنولوژی ابتدا جزییات آنرا بخوانید و تجربه کنید. سپس سعی کنید نمونه آن در تکنولوژیهای دیگر را نیز بیابید و آنها را با دیدی درست مقایسه کنید و علاوه بر جمع آوری اطلاعات، روش خود را در استفاده از ابزار مورد نظر به بهینه ترین روش تغییر دهید.
هیچگاه خود را از مزایای یک تکنولوژی تنها به دلیل ذهنیتی که دارید، محروم نکنید. آشنایی با دیگر تکنیک ها در سایر تکنولوژی ها قدرت و دید بازتری به شما در پیاده سازی تفکراتتان در تکنولوژی انتخابیتان را به شما می دهد.
نوع نگاه متفاوتی که در اینجا به آن اشاره شد نه تنها شما را در تکنولوژیهای مختلف گیج و سر در گم نخواهد کرد بلکه می توانید با دیدی وسیع نسبت به انواع تکنولوژی خود را برای مدیریت فنی پروژه های نرم افزاری آماده سازید.
شما نمی توانید به یک گروه و در شرایط خاص تحمیل کنید که از تکنولوژی مورد نظر شما استفاده کنند. اما دانش شما در مورد انواع تکنولوژی ها نه تنها شما را به یک تکنولوژی وابسته نمی کند بلکه شما می توانید از تواناییهایی که هر یک از اعضای گروه در تکنولوژیهای انتخابی خود دارند به بهترین نحو و برای پیشبرد سریعتر اهداف پروژه استفاده نمایید.
در نهایت؛
ما برنامه نویسان همانطور که از معنای لغت بر می آید برنامه نویس هستیم. انتخاب و اصرار بر حقانیت و مزایای یک تکنولوژی وابسته به شرایطی است که صرفا در اختیار برنامه نویسان نیست. بهترین راه برای حداکثر بهره وری در کار برنامه نویسی عدم تکیه بر یک تکنولوژی خاص است. هرچند توانایی برنامه نویس در یک تکنولوژی می تواند به عنوان یک مزیت مهم قلمداد شود اما توانایی را با وابستگی نباید اشتباه گرفت.
اما در نهایت چه کسی می تواند بهترین تکنولوژی را در این زمینه به ما معرفی کند؟ بالاخره کدام تکنولوژی انتخاب نهایی و درست ما در توسعه وب است؟
اولین نکته این است که قطعه کد و یا برنامه ای را در PHP نخواهید یافت که اساتید ASP با همان کیفیت و گاها بهتر از آن طراحی و پیاده سازی نکنند و مسلما این موضوع در ASP هم صدق می کند و می توان برنامه نویس PHP پیدا کرد که کد ASP را با کیفیتی بهتر از کد ASP پیاده سازی کند و حتما یک برنامه نویس متبحّر JSP نیز همین ادعا را خواهد کرد.
این مثال اولیه را می توان برای هر موضوعی در هر کدام از این تکنولوژی ها تعمیم داد، مثالهایی مانند سرعت برنامه نویسی، سرعت اجرا کد، سرعت بارگذاری صفحات، قدرت سرویس دهنده های میزبان این تکنولوژی ها (IIS, Apache, …)، امنیت و چندین و چند عامل دیگر.
یک تجربه ساده؛
یکبار نرم افزاری در یکی از شرکتهای بزرگ داشتیم که در زمان گزارشگیری به شدت با کاهش سرعت مواجه می شد و گاها این مسئله باعث بروز خطا در نرم افزار میشد. با بررسی اولیه، علت در عدم پاسخگویی بانک اطلاعاتی بود که از MySQL استفاده میشد و با وجود یک جدول با حدود 9 میلیون رکورد قادر به سرویس دهی در زمان مقتضی نبود و پس از 97 ثانیه ارتباط قطع میشد(Connection timeout). با انتقال بانک اطلاعاتی به MSSQL این کوئری در مدت زمان 5 ثانیه اجرا شد. اما با کمک یکی از دوستان و انتقال آن به Oracle این کوئری در مدت زمانی کمتر از 1 ثانیه انجام شد.
بعدها و با مشاوره یک گروه متخصص در بانک اطلاعاتی MySQL، همین کوئری در شرایط برابر در مدت زمان 2.7 ثانیه در همان MySQL اجرا شد.
منظور از مباحث مطرح شده، رسیدن به یک نتیجه ی واحد است. در مباحث بالا، مزایای استفاده از یک نوع تکنولوژی، شاید در ابتدا قدرت آن تکنولوژی را به ذهن شما متبلور کند اما با دقت بیشتر نقطه ی قوت در هر یک از موارد ذکر شده دقیقا همان مهارت، تخصص و تجربه بهره بردار (برنامه نویس) از یک تکنولوژی است.
شما می توانید برای مقایسه تکنولوژی های مختلف ساعتها و ساعتها در سایتها و فرومهای مختلف وقت صرف کنید.
اما...
اگر دانش خوب و نظر مثبتی نسبت به PHP دارید می توانید در مقابل هر قابلیت ASP قابلیتی از PHP را قرار دهید.
می توانید هر نقطه ی ضعفی که از سوی منتقدان مطرح می شود را با چندین نقطه ی قوت پاسخ دهید.
حتی می توانید دست به طراحی وب سایتی بزنید تا تمام گفته ها و افکار و عقایدتان را به اثبات برسانید.
اما باید بدانید کسی که دانش و تجربه خوبی در ASP دارد نیز می تواند تمام موارد فوق را در برابر ادعاهای یک PHP کار تکرار کند.
و شاید همین موضوع را بتوان در مورد یک JSP کار نیز تکرار کرد.
برخی نگران این موضوعند که اگر مثلا با تکنولوژی های مایکروسافت کار کنند شاید تکنولوژیهای متن باز به سرعت بازار را در دست بگیرند و آنها از این تغییر چیزی جز ضرر، عایدشان نشود و از این قافله عقب بمانند!
برخی نیز نگرانند که اگر با تکنولوژیهای متن باز کار کنند شاید غولی مانند مایکروسافت و اوراکل آنقدر خوب کار کنند که دیگر جایی برای عرض اندام تکنولوژیهای متن باز نگذارند!
بیشتر وب سایتها به بانکهای اطلاعاتی وابسته اند. حال کدام تکنولوژی را انتخاب کنیم که بانک اطلاعاتی سازگارتر و بهتری را پشتیبانی کند و ارتباط با آن هم بهتر باشد و البته ابزارهای مناسبی را هم در اختیارمان قرار دهد؟
این سوالها و نگرانیها، از آغاز پیدایش هر تکنولوژی بوده و وجود خواهد داشت. اما آیا هر یک از این تکنولوژی ها به یکباره نزول یا عروج پیدا می کنند؟ آیا برنامه نویسان وابسته به این تکنولوژی ها به یکباره دستشان از کلیه امکانات مزایای فراهم شده خالی می شود؟ آیا توسعه دهندگان یک تکنولوژی در صورت توسعه و پیشرفت تکنولوژی های دیگر، تنها به عنوان نظاره گر این موضوع منفعل خواهند ماند؟ کدام نقص را در یک تکنولوژی دیده اید که توسعه دهندگان به سرعت اقدام به رفع آن نکرده اند و یا امکاناتی را در یک تکنولوژی دیده اید که رقبا در کمترین زمان اقدام به شبیه سازی آن نکرده اند؟ و آیا وجود و رونق یک تکنولوژی باعث نزول و نابودی تکنولوژی های دیگر خواهد شد؟
این سوالات را برنامه نویسان بهتر می توانند پاسخ بگویند
حال سوالاتی که شاید کمتر به آنها فکر کرده اید!
آیا برنامه نویس PHP خوب و ماهری را می شناسید که برای انجام کاری در زمینه وب با مشکلی برخورد کرده و در حل آن ناتوان باشد؟
آیا یک برنامه نویس ASP خوب و مجرب را می شناسید که از یافتن شغل با حقوق و مزایای مناسب نا امید شده باشد؟
آیا یک برنامه نویس ASP خوب و البته منصف می شناسید که از قابلیتهای هر یک از بانکهای اطلاعاتی مرسوم مانند MySQL، MSSQL و یا Oracle شکایت کند و ابراز کند که نمی توان با آنها یک نرم افزار یا وب سایت خوب نوشت؟
آیا تکنولوژیهای مختلف به دلیل تکامل دیگر تکنولوژیها به وجود آمده اند و باید به دنبال کاملترین تکنولوژی بود؟
آیا تکنولوژی وجود دارد که سراسر نقطه ی قوت بوده و نتوان هیچ ضعفی در آن یافت؟
این سوالها و دهها سوال مشابه دیگری که می توان با همین مضمونها پرسید تا به شما یادآوری کند که "آنچه مهم است یک برنامه نویس خوب بودن است".اینکه یک برنامه نویس باشید که فارغ از هر نوع تکنولوژی بتوانید از تکنولوژی انتخابی، به بهترین شیوه استفاده کنید.
شاید در جامعه برنامه نویسانی که می شناسید زیاد باشند کسانی که به خاطر کارهای شرکتی که در آن مشغول به کار هستند یا به خاطر شرایط به خصوصی که در یک پروژه حکمفرماست نیاز به تغییر تکنولوژی داشته باشند. در این شرایط دیگر انتخاب تکنولوژی با برنامه نویس نیست.
همیشه انتخاب تکنولوژی بر عهده یا انتخاب برنامه نویس نخواهد بود.
پس وظیفه و یا بهتر است بگوییم تکلیف برنامه نویس در این میان چیست؟
اگر برنامه نویس اصول برنامه نویسی را خوب بداند و اصولی برنامه نویسی کرده باشد و در استفاده از یک تکنولوژی صرفا استفاده کننده نباشد و از پشت پرده و جزییات آن تکنولوژی باخبر باشد و مختصرا اینکه برنامه نویس ماهر و مجرب و با دانشی باشد، استفاده از یک تکنولوژی متفاوت وی را با فاجعه روبرو نخواهد کرد.
مسلما این تغییرات هر چند دشوار بوده و سرعت و خلاقیت برنامه نویس را حداقل برای ابتدای کار پایین می آورد اما وی به سرعت خود را با شرایط تطبیق داده و به وظیفه خود که برنامه نویسی است ادامه می دهد.
پس بهتر است "یک برنامه نویس باشید تا یک تکنولوژی کار".
این جمله به این معنا نیست که نباید از تکنولوژی ها و ابزاری که این تکنولوژی ها در اختیار ما می گذارند استفاده کنیم بلکه به این معناست که از ابزار ارائه شده با آگاهی و دانش استفاده کنیم.
روش اصولی این است که در استفاده از هر ابزار و شیوه جدید در یک تکنولوژی ابتدا جزییات آنرا بخوانید و تجربه کنید. سپس سعی کنید نمونه آن در تکنولوژیهای دیگر را نیز بیابید و آنها را با دیدی درست مقایسه کنید و علاوه بر جمع آوری اطلاعات، روش خود را در استفاده از ابزار مورد نظر به بهینه ترین روش تغییر دهید.
هیچگاه خود را از مزایای یک تکنولوژی تنها به دلیل ذهنیتی که دارید، محروم نکنید. آشنایی با دیگر تکنیک ها در سایر تکنولوژی ها قدرت و دید بازتری به شما در پیاده سازی تفکراتتان در تکنولوژی انتخابیتان را به شما می دهد.
نوع نگاه متفاوتی که در اینجا به آن اشاره شد نه تنها شما را در تکنولوژیهای مختلف گیج و سر در گم نخواهد کرد بلکه می توانید با دیدی وسیع نسبت به انواع تکنولوژی خود را برای مدیریت فنی پروژه های نرم افزاری آماده سازید.
شما نمی توانید به یک گروه و در شرایط خاص تحمیل کنید که از تکنولوژی مورد نظر شما استفاده کنند. اما دانش شما در مورد انواع تکنولوژی ها نه تنها شما را به یک تکنولوژی وابسته نمی کند بلکه شما می توانید از تواناییهایی که هر یک از اعضای گروه در تکنولوژیهای انتخابی خود دارند به بهترین نحو و برای پیشبرد سریعتر اهداف پروژه استفاده نمایید.
در نهایت؛
ما برنامه نویسان همانطور که از معنای لغت بر می آید برنامه نویس هستیم. انتخاب و اصرار بر حقانیت و مزایای یک تکنولوژی وابسته به شرایطی است که صرفا در اختیار برنامه نویسان نیست. بهترین راه برای حداکثر بهره وری در کار برنامه نویسی عدم تکیه بر یک تکنولوژی خاص است. هرچند توانایی برنامه نویس در یک تکنولوژی می تواند به عنوان یک مزیت مهم قلمداد شود اما توانایی را با وابستگی نباید اشتباه گرفت.