TAHA
10-28-2009, 10:46 PM
كدام زبان برنامهنويسي را انتخاب كنيم؟
كدام زبان برنامهنويسي را انتخاب كنم؟ از كدام نوع ديتابيس استفاده كنم؟ اينها سؤالات قديمي و تاحدودي كليشهاي هستند. با اين حال خواندن يكي دو مقاله جالب در اينترنت باعث شد، طرح مجدد اين موضوع هميشگي را خالي از فايده ندانم.
اصولاً هر از گاهي بايد اين پرسش را مجدداً در كليه سطوح مهندسي نرمافزار، چه در صنعت، چه در رسانهها و چه در دانشگاهها مطرح كرد و دليل آن هم، بسيار ساده است. زبانهاي برنامهنويسي نيز مانند زبانهاي گويشي انسانها پويا هستند و مرتباً متحول ميشوند. در اين راستا برخي خود را با نيازهاي روز تطابق داده و برخي نيز از اين تحولات جا ميمانند.
به همين دليل لازم است هر چند وقت يكبار اين پرسش را مطرح كرده و جديدترين پاسخها را به نقد بگذاريم.
http://pnu-club.com/imported/2009/10/1569.jpg
برنامهنويسي وب
فعلاً برنامهنويسي تحت وب داغترين سوژه در دنياي برنامهنويسي است. شايد بد نباشد يادآوري كنم كه اصولاً فلسفه برنامهنويسي تحت وب چه بود كه به اينجا رسيد. علت محبوبيت و رشد گسترده برنامهنويسي تحت وب، حل شدن مشكل كلاينت بود.
در اين مدل از برنامهنويسي، برنامهنويس دغدغه چنداني درباره قابل نصب بودن برنامهاش روي پلتفرمهاي مختلف ندارد زيرا وضعيت تقريباً روشن است. همين كه برنامه شما روي يكي دو مرورگر معروف مانند فايرفاكس و اينترنت اكسپلورر جواب بدهد، كافي است.
بنابراين در پاسخ به اين سؤال كه كدام زبان برنامهنويسي وب را انتخاب كنيم، بايد گفت زبانهايي كه از همه سادهترند و تغيير و تحولات را به سرعت ميپذيرند. در حال حاضر در اين زمينه دو فناوري PHP و ASP.NET پيشتاز هستند. زبان اسكريپتنويسي PHP شباهتهايي به زبان C دارد.
به همين دليل سرعت كامپايل شدن آن بالا است و سايتهايي كه از اين زبان استفاده ميكنند اندكي سريعترند. فناوري ASP.NET از ويژوال بيسيك داتنت يا سيشارپ استفاده ميكند. اين دو زبان، به ويژه در جديدترين نسخه فناوري داتنت در يك حد هستند.
اما به نظر من ويژوال بيسيك همچنان جذابتر و سادهتر به نظر ميرسد. سايتهايي كه با اين دو زبان نوشته ميشوند نرمافزارهاي قدرتمندي را پديد ميآورند كه قدرت انعطاف و گستره كارايي آنها بالاست زيرا هر دو زبان OOP هستند. علاوه بر سهولت برنامهنويسي، پشتيباني از برخي موجهاي نو مانند ايجكس هم بحث روز است.
هم PHP و هم ASP.NET وضع خوبي در اين زمينه دارند. علاوه بر اين، برخي فناوريهاي روز هم خيلي مهم هستند كه وبسرويس يكي از آنهاست. در حال حاضر رقابت شديدي ميان فناوريSOAP كه از سوي آي بيام و مايكروسافت و ديگران پشتيباني ميشود و فناوري REST كه از سوي ياهو و برخي شركتهاي بزرگ ديگر حمايت ميشود، وجود دارد.
اما وضع بعضي زبانها مانند جاوا (JSP) و ColdFusion در دنياي وب خراب است و برخي زبانها اخيراً دوباره مورد توجه قرارگرفتهاند كه از آن جمله ميتوان به Python و Ruby اشاره كرد. وضعيت جاوا در وب در اين ميان جالب توجه است. برخلاف موفقيت چشمگير جاوا در برنامهنويسي براي سيستمهاي بزرگ، اين زبان به شدت در وب دچار ناكامي است. وب يك دنياي بصري است و به سادگي و ظاهر سيستمها اهميت ميدهد.
به همين دليل زبانهاي فاقد ابزارهاي ويژوال و قدرتمند كه در عين حال ساده نيز هستند در اين وادي محكوم به زوالند و اين مسئله براي جاوا كه در زمينه وارد كردن مفاهيم بصري و پويا به دنياي وب پيشگام بود، ناگوار است، البته اين قضيه هيچ ربطي به زبان اسكريپتنويسي «جاوااسكريپت» كه با ظهور ايجكس جان تازهاي پيدا كرده، ندارد.
برنامهنويسي سيستمهاي بزرگ
اما وضعيت در صنايع و سازمانهاي بزرگ بسيار متفاوت است. در جاهايي مانند صنايع مالي و بانكي، صنايع پتروشيمي و نفت، صنايع مخابراتي، سازمانهاي دولتي، صنايع خودروسازي و مانند اينها، هنوز هم جاوا و مشتقاتش حرف اول را ميزنند. قدرت جاوا در اين حوزهها به قدري است كه حتي ميتوان - البته با كمي احتياط - گفت موفقيت سيستمهاي ديگري مانند اوراكل (كه مبتني بر جاوا است) نيز بي ارتباط با استيلاي جاوا بر اين محيطها نيست.
كاركردن با جاوا در محيطهاي بزرگ كار آساني نيست. اوراكل هم آسان نيست و به طور كلي ورود به اين عرصهها چالشهاي مختلفي را پيش روي برنامهنويسان و شركتهاي نرمافزاري قرار ميدهد، به همين دليل سيستمهاي مبتني بر جاوا، گران و پرهزينه و غولآسا هستند. با اين حال توجه كنيد كه منظور از سازمانهاي بزرگ در اينجا سازمانهايي هستند كه از نظر ابعاد، تعداد كلاينتها و تراكنشها واقعاً بزرگ هستند و منظور ما از آن شأن و منزلت يك سازمان نيست.
در واقع شركتهايي مانند اپراتورهاي موبايل يا صنعت نفت در ايران را ميتوان نمونههايي از اينگونه سازمانها محسوب كرد. اما بسياري از سازمانهاي دولتي در ايران صرف نظر از اهميت استراتژيك يا منزلتشان، به دليل ساختار قديمي سازمان و مدرنيزه نشدن و مكانيزه نبودن فرآيندهاي سازمان يا تنها به اين دليل كه بيشتر از چند هزار كاربر ندارند، جزء سازمانهاي متوسط در اين بحث به حساب ميآيند.
http://pnu-club.com/imported/2009/10/1570.jpg
سازمانهاي متوسط و كوچك
شركتها و سازمانهايي كه كمتر از چند هزار كاربر يا چند صد كلاينت دارند، و آنهايي كه خيلي كوچك و در حد مجموعههاي ده الي بيست نفره هستند در اين خانواده از كاربران سيستمهاي نرمافزاري قرار ميگيرند. براي اغلب اين سازمانهاي كوچك و بزرگ، هنوز هم چند صد هزار تومان هزينه براي توسعه و استقرار سيستمهاي نرمافزاري، رقم بزرگي به شمار ميرود.
هم به اين دليل و هم به دلايل فني، اين سازمانها و شركتها بايد از فناوريها و زبانهايي براي توسعه سيستمهاي نرمافزاري خود استفاده كنند كه هزينه كمتري دارند و كاركردن با آنها سادهتر است. من براي اينگونه مجموعهها استفاده از زبان سيشارپ و راهحلهاي مبتني بر ويندوز (مانند SQL Server) را توصيه ميكنم.
سهولت و قدرت كار با ديتابيس، يكي از دلايل اصلي قدرت زبانهاي داتنتي است. البته به تازگي سيستمعامل، لينوكس هم طرفداران زيادي پيدا كرده است ولي موضوع انتخاب پلتفرم و سيستمعامل متفاوت از انتخاب زبان و فناوري برنامهنويسي است.
شايد به همين دليل، برخي به دنبال پيادهسازي سيشارپ در اين محيطهاي غيرمايكروسافتي هستند. اما به هرحال زبان جاوا در سيستمهاي غيرمايكروسافتي طرفداران خاص خودش را دارد، ضمن اينكه ترديدي ندارم كه هنوز هم استفاده از زبان ويژوال بيسيك داتنت و API نرمافزارهاي آفيس مايكروسافت (مانند اكسس) بهترين گزينه براي شركتهاي كوچك و چندنفره است.
برنامهنويسي براي موبايل
در حوزه برنامهنويسي وب زبان ++C و پس از آن زبان جاوا پيشتاز است. زبانهاي داتنت نيز كه اخيراً به اين حوزه راه يافتهاند، با فاصله زيادي آن دوتاي ديگر را تعقيب ميكنند. زبان ++C زبان غامض و پيچيدهاي است و به نظر من به تدريج رو به افول گذاشته است.
اما C و ++C زبان سختافزار هستند و هربار كه سختافزار جديد و ناشناختهاي خلق ميشود زبان شماره يك آن C است. بهتدريج كه آن پلتفرم سختافزاري جان ميگيرد، دوباره زبانهاي شيءگرا مانند جاوا و سيشارپ دوروبرش قوت ميگيرند. ++C زبان اصلي سيستمعاملهاي سيمبيان و ويندوز موبايل است. زبان جاوا نيز كه مستقل از سيستمعامل تلقي ميشود، در جايي كه سيمبيان يا ويندوز موبايل غايب باشند، حرف اول را ميزند. البته چنانكه ميتوان حدس زد، هيچ كس روي سيستمعامل ويندوز موبايل جاوا را جدي نميگيرد و نگاهها به سوي سي شارپ است.
زبانهاي ديگر
جدا از برخي زبانهاي برنامهنويسي كه در كاربردهاي خاصي مانند هوش مصنوعي ممكن است قدرت بيشتري داشته باشند، ساير زبانها ديگر كهنه به نظر ميرسند؛ فرترن و كوبول از آن جملهاند. البته زبانهاي كار با بانكهاي اطلاعاتي رابطهاي مانند T-SQL و PL/SQL موضوع متفاوتي است كه در بحث ما نميگنجد. يك نكته ديگر هم باقي ميماند و آن هم ديدگاه محافل آكادميك درباره زبانهاي برنامهنويسي است.
بدون ترديد زبان جاوا هنوز هم محبوبترين زبان در محافل آكادميك است و پس از آن سي شارپ به دليل شباهتش به جاوا مطرح است. البته در برخي از دانشگاههاي ايران هنوز هم ممكن است زبانهاي قديمي و فرسودهاي مانند فرترن تدريس شود كه اگر چنين باشد جاي تأسف است.
ولي به نظر من علاقه محافل آكادميك به اين يا آن زبان ممكن است گمراهكننده باشد. آنچه اهميت دارد كاربرد و كارايي زبان در يك زمينه بهخصوص و انعطافپذيري آن در مقابل تغييراتي است كه در صنعت و نيازهاي مصرفكنندگان پديد ميآيد. بقيه مسائل، همگي سليقهاي هستند و نبايد با تعصب با اين موضوع برخورد كرد.
كدام زبان برنامهنويسي را انتخاب كنم؟ از كدام نوع ديتابيس استفاده كنم؟ اينها سؤالات قديمي و تاحدودي كليشهاي هستند. با اين حال خواندن يكي دو مقاله جالب در اينترنت باعث شد، طرح مجدد اين موضوع هميشگي را خالي از فايده ندانم.
اصولاً هر از گاهي بايد اين پرسش را مجدداً در كليه سطوح مهندسي نرمافزار، چه در صنعت، چه در رسانهها و چه در دانشگاهها مطرح كرد و دليل آن هم، بسيار ساده است. زبانهاي برنامهنويسي نيز مانند زبانهاي گويشي انسانها پويا هستند و مرتباً متحول ميشوند. در اين راستا برخي خود را با نيازهاي روز تطابق داده و برخي نيز از اين تحولات جا ميمانند.
به همين دليل لازم است هر چند وقت يكبار اين پرسش را مطرح كرده و جديدترين پاسخها را به نقد بگذاريم.
http://pnu-club.com/imported/2009/10/1569.jpg
برنامهنويسي وب
فعلاً برنامهنويسي تحت وب داغترين سوژه در دنياي برنامهنويسي است. شايد بد نباشد يادآوري كنم كه اصولاً فلسفه برنامهنويسي تحت وب چه بود كه به اينجا رسيد. علت محبوبيت و رشد گسترده برنامهنويسي تحت وب، حل شدن مشكل كلاينت بود.
در اين مدل از برنامهنويسي، برنامهنويس دغدغه چنداني درباره قابل نصب بودن برنامهاش روي پلتفرمهاي مختلف ندارد زيرا وضعيت تقريباً روشن است. همين كه برنامه شما روي يكي دو مرورگر معروف مانند فايرفاكس و اينترنت اكسپلورر جواب بدهد، كافي است.
بنابراين در پاسخ به اين سؤال كه كدام زبان برنامهنويسي وب را انتخاب كنيم، بايد گفت زبانهايي كه از همه سادهترند و تغيير و تحولات را به سرعت ميپذيرند. در حال حاضر در اين زمينه دو فناوري PHP و ASP.NET پيشتاز هستند. زبان اسكريپتنويسي PHP شباهتهايي به زبان C دارد.
به همين دليل سرعت كامپايل شدن آن بالا است و سايتهايي كه از اين زبان استفاده ميكنند اندكي سريعترند. فناوري ASP.NET از ويژوال بيسيك داتنت يا سيشارپ استفاده ميكند. اين دو زبان، به ويژه در جديدترين نسخه فناوري داتنت در يك حد هستند.
اما به نظر من ويژوال بيسيك همچنان جذابتر و سادهتر به نظر ميرسد. سايتهايي كه با اين دو زبان نوشته ميشوند نرمافزارهاي قدرتمندي را پديد ميآورند كه قدرت انعطاف و گستره كارايي آنها بالاست زيرا هر دو زبان OOP هستند. علاوه بر سهولت برنامهنويسي، پشتيباني از برخي موجهاي نو مانند ايجكس هم بحث روز است.
هم PHP و هم ASP.NET وضع خوبي در اين زمينه دارند. علاوه بر اين، برخي فناوريهاي روز هم خيلي مهم هستند كه وبسرويس يكي از آنهاست. در حال حاضر رقابت شديدي ميان فناوريSOAP كه از سوي آي بيام و مايكروسافت و ديگران پشتيباني ميشود و فناوري REST كه از سوي ياهو و برخي شركتهاي بزرگ ديگر حمايت ميشود، وجود دارد.
اما وضع بعضي زبانها مانند جاوا (JSP) و ColdFusion در دنياي وب خراب است و برخي زبانها اخيراً دوباره مورد توجه قرارگرفتهاند كه از آن جمله ميتوان به Python و Ruby اشاره كرد. وضعيت جاوا در وب در اين ميان جالب توجه است. برخلاف موفقيت چشمگير جاوا در برنامهنويسي براي سيستمهاي بزرگ، اين زبان به شدت در وب دچار ناكامي است. وب يك دنياي بصري است و به سادگي و ظاهر سيستمها اهميت ميدهد.
به همين دليل زبانهاي فاقد ابزارهاي ويژوال و قدرتمند كه در عين حال ساده نيز هستند در اين وادي محكوم به زوالند و اين مسئله براي جاوا كه در زمينه وارد كردن مفاهيم بصري و پويا به دنياي وب پيشگام بود، ناگوار است، البته اين قضيه هيچ ربطي به زبان اسكريپتنويسي «جاوااسكريپت» كه با ظهور ايجكس جان تازهاي پيدا كرده، ندارد.
برنامهنويسي سيستمهاي بزرگ
اما وضعيت در صنايع و سازمانهاي بزرگ بسيار متفاوت است. در جاهايي مانند صنايع مالي و بانكي، صنايع پتروشيمي و نفت، صنايع مخابراتي، سازمانهاي دولتي، صنايع خودروسازي و مانند اينها، هنوز هم جاوا و مشتقاتش حرف اول را ميزنند. قدرت جاوا در اين حوزهها به قدري است كه حتي ميتوان - البته با كمي احتياط - گفت موفقيت سيستمهاي ديگري مانند اوراكل (كه مبتني بر جاوا است) نيز بي ارتباط با استيلاي جاوا بر اين محيطها نيست.
كاركردن با جاوا در محيطهاي بزرگ كار آساني نيست. اوراكل هم آسان نيست و به طور كلي ورود به اين عرصهها چالشهاي مختلفي را پيش روي برنامهنويسان و شركتهاي نرمافزاري قرار ميدهد، به همين دليل سيستمهاي مبتني بر جاوا، گران و پرهزينه و غولآسا هستند. با اين حال توجه كنيد كه منظور از سازمانهاي بزرگ در اينجا سازمانهايي هستند كه از نظر ابعاد، تعداد كلاينتها و تراكنشها واقعاً بزرگ هستند و منظور ما از آن شأن و منزلت يك سازمان نيست.
در واقع شركتهايي مانند اپراتورهاي موبايل يا صنعت نفت در ايران را ميتوان نمونههايي از اينگونه سازمانها محسوب كرد. اما بسياري از سازمانهاي دولتي در ايران صرف نظر از اهميت استراتژيك يا منزلتشان، به دليل ساختار قديمي سازمان و مدرنيزه نشدن و مكانيزه نبودن فرآيندهاي سازمان يا تنها به اين دليل كه بيشتر از چند هزار كاربر ندارند، جزء سازمانهاي متوسط در اين بحث به حساب ميآيند.
http://pnu-club.com/imported/2009/10/1570.jpg
سازمانهاي متوسط و كوچك
شركتها و سازمانهايي كه كمتر از چند هزار كاربر يا چند صد كلاينت دارند، و آنهايي كه خيلي كوچك و در حد مجموعههاي ده الي بيست نفره هستند در اين خانواده از كاربران سيستمهاي نرمافزاري قرار ميگيرند. براي اغلب اين سازمانهاي كوچك و بزرگ، هنوز هم چند صد هزار تومان هزينه براي توسعه و استقرار سيستمهاي نرمافزاري، رقم بزرگي به شمار ميرود.
هم به اين دليل و هم به دلايل فني، اين سازمانها و شركتها بايد از فناوريها و زبانهايي براي توسعه سيستمهاي نرمافزاري خود استفاده كنند كه هزينه كمتري دارند و كاركردن با آنها سادهتر است. من براي اينگونه مجموعهها استفاده از زبان سيشارپ و راهحلهاي مبتني بر ويندوز (مانند SQL Server) را توصيه ميكنم.
سهولت و قدرت كار با ديتابيس، يكي از دلايل اصلي قدرت زبانهاي داتنتي است. البته به تازگي سيستمعامل، لينوكس هم طرفداران زيادي پيدا كرده است ولي موضوع انتخاب پلتفرم و سيستمعامل متفاوت از انتخاب زبان و فناوري برنامهنويسي است.
شايد به همين دليل، برخي به دنبال پيادهسازي سيشارپ در اين محيطهاي غيرمايكروسافتي هستند. اما به هرحال زبان جاوا در سيستمهاي غيرمايكروسافتي طرفداران خاص خودش را دارد، ضمن اينكه ترديدي ندارم كه هنوز هم استفاده از زبان ويژوال بيسيك داتنت و API نرمافزارهاي آفيس مايكروسافت (مانند اكسس) بهترين گزينه براي شركتهاي كوچك و چندنفره است.
برنامهنويسي براي موبايل
در حوزه برنامهنويسي وب زبان ++C و پس از آن زبان جاوا پيشتاز است. زبانهاي داتنت نيز كه اخيراً به اين حوزه راه يافتهاند، با فاصله زيادي آن دوتاي ديگر را تعقيب ميكنند. زبان ++C زبان غامض و پيچيدهاي است و به نظر من به تدريج رو به افول گذاشته است.
اما C و ++C زبان سختافزار هستند و هربار كه سختافزار جديد و ناشناختهاي خلق ميشود زبان شماره يك آن C است. بهتدريج كه آن پلتفرم سختافزاري جان ميگيرد، دوباره زبانهاي شيءگرا مانند جاوا و سيشارپ دوروبرش قوت ميگيرند. ++C زبان اصلي سيستمعاملهاي سيمبيان و ويندوز موبايل است. زبان جاوا نيز كه مستقل از سيستمعامل تلقي ميشود، در جايي كه سيمبيان يا ويندوز موبايل غايب باشند، حرف اول را ميزند. البته چنانكه ميتوان حدس زد، هيچ كس روي سيستمعامل ويندوز موبايل جاوا را جدي نميگيرد و نگاهها به سوي سي شارپ است.
زبانهاي ديگر
جدا از برخي زبانهاي برنامهنويسي كه در كاربردهاي خاصي مانند هوش مصنوعي ممكن است قدرت بيشتري داشته باشند، ساير زبانها ديگر كهنه به نظر ميرسند؛ فرترن و كوبول از آن جملهاند. البته زبانهاي كار با بانكهاي اطلاعاتي رابطهاي مانند T-SQL و PL/SQL موضوع متفاوتي است كه در بحث ما نميگنجد. يك نكته ديگر هم باقي ميماند و آن هم ديدگاه محافل آكادميك درباره زبانهاي برنامهنويسي است.
بدون ترديد زبان جاوا هنوز هم محبوبترين زبان در محافل آكادميك است و پس از آن سي شارپ به دليل شباهتش به جاوا مطرح است. البته در برخي از دانشگاههاي ايران هنوز هم ممكن است زبانهاي قديمي و فرسودهاي مانند فرترن تدريس شود كه اگر چنين باشد جاي تأسف است.
ولي به نظر من علاقه محافل آكادميك به اين يا آن زبان ممكن است گمراهكننده باشد. آنچه اهميت دارد كاربرد و كارايي زبان در يك زمينه بهخصوص و انعطافپذيري آن در مقابل تغييراتي است كه در صنعت و نيازهاي مصرفكنندگان پديد ميآيد. بقيه مسائل، همگي سليقهاي هستند و نبايد با تعصب با اين موضوع برخورد كرد.