تبليغاتX
... Science is so beautiful
خرد و بینش و آگاهی دانشمندان ره سر منزل مقصود به ما آموزد
نقشه کامل مغز انسان بوسیله آی-بی-ام آی بی ام با بهره گیری از قدرتمندترین کامپیوتر خود و با همراهی پلی تکنیک سوئیسی ای-پی-اف-ال روی پروژه ای کار میکند که روزی نقشه کامل مغز انسان را تهیه خواهد کرد. به گزارش بخش خبر شبكه فن آوري اطلاعات ايران، از ComeToNet، براساس پروژه ای بنام مغز آبی، محققین دو شرکت نامبرده در یک همکاری تنگاتنگ، نقشه نئوکورتکس (Neocortex) مغز انسان را تهیه خواهند کرد. این منطقه از مغز، پیچیده ترین و پیشرفته ترین قسمت مغز محسوب میشود که فقط در پستانداران یافت میشود که در مورد انسان به طرز خارق العاده ای پیشرفت کرده است. بیولوژیستها براین باور هستند که بخش نامبرده از مغز مسئول هشیاری، درک فضا و ادراک میباشد. قرار است وقتی محققین نقشه کورتکس را تهیه کردند، دانشمندان بقیه مغز را ترسیم نمایند. با بهره گیری از سوپرکامپیوتر بلوژن ایسرور که غول آی بی ام محسوب میشود، شبیه سازی سه بعدی دیجیتال مغز در سطح مولکولی احیاء خواهد شد. به این ترتیب، دانشمندان امیدوار هستند تا به دیدی تازه درباره قوه های مخصوصی در مغز مانند معنویت دست یابند. این سوپرکامپیوتر که فقط چند متر مربع جا میگیرد، سرعت پردازشی معادل 22.8 تریلیون عمل ممیزشناور در ثانیه را دارد و قادر است فعل و انفعالات شیمیایی-الکتریکی مغز را بصورت بلادرنگ و آنی بازسازی نماید برگرفته از: http://www.iritn.com/
+ نوشته شده در  سه شنبه بیست و نهم آبان 1386ساعت 16:41  توسط galaxygirl  | 

پژوهشگران علوم كامپيوتر دانشگاه «جورجيا» آمريكا به سرپرستي يك استاد ايراني موفق به ابداع سيستم جديد كنترل رايانه از طريق فكر شدند كه مبتني بر «نظريه فازي» است. به گزارش بخش خبر شبكه فن آوري اطلاعات ايران، از ایسنا، دكتر حميد عرب‌نيا، استاد علوم كامپيوتر دانشگاه «جورجيا» در زمينه اين طرح گفت: طرح از طراحي اين سيستم كنترل رايانه با مغز (BCI) فراهم كردن امكان انتقال دستورالعمل‌ها به رايانه از طريق مغز (فكر) بدون نياز به دست است. البته گروه‌هاي مختلفي در اين زمينه كار كرده‌اند ولي ما به تكنولوژي بهتري دست پيدا كرده‌ايم كه مبتني بر نظريه فازي است كه توسط يك دانشمند ايراني ــ دكتر لطفي زاد ــ ابداع شده است. وي خاطر نشان كرد: اين اولين بار است كه از نظريه فازي در سيستم‌هاي BCI استفاده مي‌شود و فكر مي‌كنم با اين كار بتوان به نحو مؤثرتري ايده كنترل رايانه با فكر كردن را محقق كرد. دكتر عرب‌نيا در عين حال تصريح كرد: اين سيستم بيشتر براي مشاغلي مثل خلباني و همچنين براي كمك به معلولان مؤثر است. البته كارايي سيستم به فرمان‌هايي خاص(بالا، پايين، چپ، راست و توقف) - كه عمده فرامين صادره از مغز را شامل مي‌شود - محدود است و مثلا نمي‌توان مطلبي را براي تايپ كردن از ذهن به رايانه منتقل كرد. وي درباره اساس عملكرد سيستم‌هاي BCI گفت: به اين منظور از كلاهي با 16 الكترود استفاده مي‌شود كه ارتعاشات بخش‌هايي مختلف مغز (جريان انرژي در مغز در اثر تفكر) را به رايانه منتقل مي‌كند. با پردازش ميزان انرژي به خصوصي كه در هنگام هر فرمان در مغز جريان مي‌يابد مي‌توان به فرمان مورد نظر پي برد. براي همين است كه نمي‌توان از چنين سيستمي براي تايپ استفاده كرد چون مثلا تشخيص انرژي مربوط به هر كلمه بسيار دشوار است. استاد ايراني دانشگاه جورجيا با بيان اين كه اين طرح هنوز در مرحله تحقيقاتي است و به مرحله كاربرد عملي نرسيده است، خاطر نشان كرد: اين فن‌آوري كاملا عملي است ولي هميشه خوب عمل نمي‌كند چون مثلا اگر كسي ضمن استفاده از سيستم عطسه كند همه چيز به هم مي‌ريزد. دكتر عرب‌نيا در ادامه درباره ساير فعاليت‌هاي خود در دانشگاه «جورجيا» گفت: كار من بيشتر در زمينه «سوپركامپيوتينگ» و «موازات» در علوم كامپيوتر است و بيشتر مقالات پژوهشي من در مجلات اين حوزه چاپ مي‌شود. زماني از يك رايانه استفاده مي‌كنيد نمي‌توانيد كاري كنيد كه الكترون‌ها سريعتر از سرعت نور حركت كنند لذا يك محدوديت اساسي وجود دارد كه نمي‌توان آن را شكست و اغلب رايانه‌ها يك پردازشگر (پروسسور) دارند و نمي‌توانند سريعتر از حد مشخص كار كنند بنابراين براي اين كه بتوان رايانه‌هايي بسيار سريعتر از رايانه‌هاي معمول ساخت بايد رايانه‌هايي با چندين پروسسور ساخت كه مي‌توانند همزمان با هم كار مي‌كنند كه به اين رشته موازات گفته مي‌شود. وي خاطر نشان كرد: با بهره‌گيري از اين علم مي‌توان رايانه‌هايي ساخت كه هزاران پروسسور (مغز) دارند. از ايده‌هايي كه در اين زمينه مطرح است ساخت پروسسورهايي به اندازه يك ميكروب با استفاده از نانو فن‌آوري است كه مي‌توان صدها ميليون از آنها را ايجاد كرد و مثلا در رنگ ساختمان ريخت و به اين ترتيب ساختمانهايي داشت كه در رنگ ديوارهاي آن از ميليون‌ها مغز رايانه تشكيل شده باشد. استاد ايراني دانشگاه جورجيا در ادامه با اشاره به سفر اخير خود به ايران اظهار داشت: در بازديدي كه از چند دانشگاه و مركز پژوهشي داشتم، كارهاي خوبي در اين زمينه (سوپر كامپيوتينگ) در دانشگاه تهران و پژوهشگاه دانش‌هاي بنيادي آغاز شده است. دكتر عرب‌نيا ا تصريح كرد: زمينه‌ كارهاي پژوهشي من بيشتر در اين حوزه است ولي كارهاي كاربردي كه در اين زمينه مي‌كنم بيشتر مربوط به عكس است. مثلا اين كه چطور بتوان در فرودگاه‌ها و ... با رايانه چهره انسان‌ها را تشخيص داد و زمينه ديگر بررسي فعل و انفعلات مغز بر اساس تصاوير MRI با استفاده از سوپر رايانه‌هاست كه انجام چنين كارهايي با رايانه‌هاي معمولي بسيار زمان بر است. برگرفته ازhttp://www.iritn.com/
+ نوشته شده در  سه شنبه بیست و نهم آبان 1386ساعت 16:33  توسط galaxygirl  | 

    با ما در ارتباط باشید

Z_blackhole@yahoo.com

+ نوشته شده در  یکشنبه بیست و هفتم آبان 1386ساعت 19:38  توسط galaxygirl  | 

چگونه يك شبكه عصبي‌ هوشمند بسازيم؟ - مثالي از برنامه‌نويسي شيء‌گرا در شبكه‌هاي عصبي و هوش مصنوعي

امين صفايي
ماهنامه شبکه - آذر ۱۳۸۵ شماره 71

اشاره :

قدرت و سرعت كامپيوترهاي امروزي به راستي شگفت انگيز است؛ زيرا كامپيوترهاي قدرتمند مي‌توانند ميليون‌ها عمليات را در كمتر از يك ثانيه انجام دهند. شايد آرزوي بسياري از ما انسان‌ها اين باشد كه اي كاش مي‌شد ما نيز مانند اين دستگاه‌ها كارهاي خود را با آن سرعت انجام مي‌داديم، ولي اين نكته را نبايد ناديده بگيريم كه كارهايي هستند كه ما مي‌توانيم آن‌ها را به آساني و در كمترين زمان ممكن انجام دهيم، ولي قوي‌ترين كامپيوترهاي امروزي نيز نمي‌توانند آن‌ها را انجام دهند و آن قدرت تفكري است كه مغز ما انسان‌ها دارد. حال تصور كنيد كه دستگاهي وجود داشته باشد كه علا‌وه بر قدرت محاسبه و انجام كارهاي فراوان در مدت زمان كوتاه، قدرت تفكر نيز داشته باشد يا به قول معروف هوشمند باشد!اين تصور در حقيقت هدف فناوري هوش مصنوعي يا Artificial Intelligence) AI) است. يكي از راه‌حل‌هاي تحقق اين هدف، شبكه‌هاي عصبي است. شبكه‌هاي عصبي در واقع از شبكه‌هاي عصبي و سيستم عصبي انسان الگوبرداري مي‌كنند. برخي از محققان براين باورند كه هوش مصنوعي و شبكه‌هاي عصبي دو راه‌حل متفاوت و در دو جهت مختلف هستند، ولي اين باور را نمي‌توان كاملاً صحيح دانست؛ چرا كه در حقيقت علم شبكه‌هاي عصبي و هوش‌مصنوعي وابسته به هم هستند. بدين‌معنا كه قبل از اين‌كه Symbolها بتوانند توسط هوش مصنوعي شناسايي شوند، بايد مراحلي طي شود. مثلاً تصور كنيد كه Symbolهايي مانند خانه، انسان يا ميز وجود دارند. قبل از اين كه AI بتواند هر كدام از اين Symbolها را شناسايي كند، بايد از توانايي‌ها و صفات هر كدام از اين‌ها اطلاع كامل حاصل كند. مثلاً تصور كنيد كه يك روبات كه هوش مصنوعي دارد، يك انسان را مي‌بيند، ولي از كجا مي‌فهمد كه اين جسم يك انسان است؟ مثلاً بر اساس مشخصاتي مثل داشتن دو پا، دست، صورت، دهان و قدرت تكلم. اما شما وقتي يك انسان ديگر را مي‌بينيد، نيازي نداريد كه اول تعداد پاهاي او را بشماريد و بعد بگوييد كه اين جسم، انسان است. مغز انسان‌ها مي‌تواند با ديدن يك جسم فقط براي يك بار ياد بگيرد و اگر مجدداً آن جسم را مشاهده كرد، مي‌تواند سريع تشخيص دهد و قسمت‌هاي مختلف مغز مي‌توانند به صورت همزمان فعاليت كنند و از اطلاعات درون مغز استفاده نمايند. شبكه‌هاي عصبي در بسياري از پروژه‌هاي هوش مصنوعي به كار گرفته مي‌شود. مثلاً براي برنامه‌هاي تشخيص و الگوبرداري، شناسايي تصوير و كاراكتر، روبات‌ها و برنامه‌هاي فيلترينگ اطلاعات. اين شبكه‌ها امروزه حتي در اتومبيل‌هاي بي‌سرنشين نيز كاربرد دارد. به طوري‌كه با ديدن و بررسي رانندگي انسان‌ها، مي‌توانند رانندگي كنند. در اين مقاله اصول شبكه‌هاي عصبي در برنامه‌نويسي شيء‌گرا مورد بررسي قرار مي‌گيرد. با استفاده از زبان #C و انجام دادن عمليات X-OR ساده مي‌توانيد اولين برنامه ساده هوش مصنوعي خود را بنويسيد. لازم به ذكر است كه مثالي كه در اين مقاله از آن استفاده شده، از مقاله Matthew Cochran (سي شارپ كورنر) اقتباس شده است.


شكل 1

براي يادگيري بيشتر شبكه‌هاي عصبي بهتر است اين شبكه‌ها را با شبكه‌هاي عصبي مغز خود مقايسه كنيم. در حقيقت هر نورون در مغز ما يك ورودي دارد كه از نورون‌هاي ديگر ميآيد و يك خروجي كه به نورون يا نورون‌هاي بعدي مي‌رود.
 
براي اين‌كه بتوانيم اين كار را دقيقاً در برنامه خود شبيه‌سازي كنيم، لازم است يك كلاس مانند شكل 1 قسمت اول طراحي كنيم كه ضمن داشتن مشخصه‌هاي خاص، يك خروجي داشته باشد. البته همان‌طور كه در قسمت دوم نيز مشاهده مي‌كنيد (شكل 1)، هر نورون مي‌تواند داري چندين ورودي نيز باشد.
 
همان‌طور كه در شكل 1 مشاهده مي‌كنيد، نورون‌ها به صورت گروهي لايه‌بندي مي‌شوند.


 

شكل 2

وقتي سيگنال يا پالسي  به يك لايه ارسال مي‌شود، اين سيگنال از لايه بالايي شروع به فعاليت مي‌كند و توسط نورون‌هاي آن لايه بررسي و اصلاح مي‌گردد. در حقيقت هر نورون قدرت سيگنال را بالا مي‌برد و آن پالس را به لايه بعدي انتقال مي‌دهد. (شكل 2)

حال كه تقريباً با كار يك لايه عصبي آشنا شديد، مي‌توانيم شبكه‌هاي پيچيده‌تر را مورد بررسي قرار دهيم.  براي اين كار حداقل به سه گروه از نورون‌هايي كه در شكل 2 مي‌بينيد، نياز داريم.


همان‌طور كه در شكل 3 مشاهده مي‌كنيد، اين شبكه داراي سه لايه است. لايه 1 يا لايه بالايي اين شبكه كه در حقيقت لايه ورودي است، پارامترهاي پالس را تنظيم مي‌كند و اين مقادير را همراه سيگنال يا پالس به لايه‌هاي بعدي پاس مي‌دهد، ولي نورون‌هاي لايه 3 يا لايه خروجي‌ كه در پايين‌ترين سطح شبكه قرار دارد، هيچ سيگنالي را به لايه ديگري نمي‌فرستند و در واقع فقط خروجي دارند.

شكل 3


‌ حال قسمت اصلي كار شبكه فرا مي‌رسد؛ يعني آموختن به شبكه عصبي. ب

راي اين‌كه به شبكه عصبي موجود توانايي آموختن بدهيم، بعد از اين‌كه سيگنال از لايه اول شبكه به لايه پاييني شبكه مي‌رود، بايد اطلاعات هر نورون را كه روي سيگنال ما اثر مي‌گذارد، بروزآوري و اصلاح كنيم. اين رويه را به اصطلاح BP يا Back Propagation مي‌گويند.
 
در حقيقت با اين كار يعني مقايسه خروجي‌اي كه خودمان محاسبه كرده‌ايم با خروجي شبكه، مي‌توانيم مقدار اشتباهاتي كه شبكه ما انجام مي‌دهد را به دست آوريم.

مثلاً تصور كنيد كه در يك سلول نورون در لايه آخر شبكه يا لايه خروجي اشتباهي داريم، هر نورون در واقع ركورد تمامي نورون‌هايي كه سيگنال از آن عبور مي‌كند را نگهداري مي‌نمايد و مي‌داند كه كدام يك از نورون‌هاي قبلي يا به اصطلاح نورون‌هاي والد باعث اين اشتباه مي‌شوند.

همچنين مي‌دانيم كه هر كدام از اين نورون‌هاي شبكه يك مقدار اشتباه را محاسبه كرده‌اند و از اين طريق شبكه ما مي‌تواند ياد بگيرد و اگر مقدار ديگري نيز به آن داده شد، مي‌تواند توانايي محاسبه داشته باشد.

شكل 4

حال كه كمي در مورد شبكه‌هاي عصبي صحبت كرديم، مي‌توانيم برنامه سي‌شارپ خود را شروع كنيم. اولين كاري كه بايد انجام دهيم، ايجاد يك اينترفيس ساده است كه بعداً آن را عملياتي مي‌كنيم. همان‌طور كه در كدهاي شكل 4 مي‌بينيد، يك اينترفيس به نام Interface 1 ساخته‌ايم. اين اينترفيس در واقع حركت يك سيگنال را در شبكه ما تعريف مي‌كند.  وقتي اين كار را انجام داديم، به يك اينترفيس ديگر نياز داريم كه ورودي نورون را تعريف كند. براي اين كار بايد از يك دايركتوري عمومي استفاده كنيم. اين دايركتوري كليد سيگنال يا همان پالس است و خروجي يك كلاس است كه پارامتر ‌Weight پالس را مشخص مي‌كند. (كدهاي شكل 5).

شكل 5

حال نوبت به نوشتن كدهاي كلاس اصلي برنامه مي‌رسد. نام اين كلاس را NeuralFactor مي‌ناميم (كدهاي شكل 6).
 

شكل6


در كدهاي اين كلاس مي‌بينيد كه  دو مقدار Private به نام‌هاي Mywight و MyDelta نوع double و جود دارد. كار اصلي اين كلاس، دادن و گرفتن مقادير نورون است و در واقع تغييرات در ورودي نورون‌ها و وزن آن‌ها را  نگهداري مي‌كند. حال مي‌توانيم يك اينترفيس براي خود نورون درست كنيم. از آن جايي كه هر نورون هم مشخصات سيگنال و هم Receptor را دارد، بايد از دو اينترفيسي كه قبلاً در شكل هاي 5 و 4 توضيح داده شد، استفاده كند. همچنين هر نورون چيزي مانند يك ورودي ديگر نيز دارد كه به آن Bias مي‌گوييم.

اضافه براين، بايد دو متد براي انجام كار در شبكه درست كنيم: يكي براي انجام Pulse و ديگري براي يادگيري نورون. كدهاي شكل 7 تمامي اين اينترفيس را مشخص كرده است.

شكل7

در قسمت پايين اين كدها يك اينترفيس ديگر به نام INeuralLayer مشاهده مي‌كنيد. اين اينترفيس براي لايه‌هاي نورون‌هاي شبكه است و براي انتقال پالس از يك لايه به لايه ديگر و توانايي يادگيري در يك لايه به كار گرفته مي‌شود. و بالاخره آخرين اينترفيس ما خود شبكه را تعريف مي‌كند. از توانايي‌هاي اين اينترفيس مي‌توان، قابليت نگهداري لايه‌هاي شبكه، انتقال پالس و قابليت يادگيري شبكه را نام برد. 

اكنون كه با اينترفيس‌هاي اين شبكه ساده آشنا شديد، نوبت به ساختن اجزاي اصلي برنامه مي‌رسد. اولين كاري كه بايد در اين قسمت انجام دهيم، ساختن كلاس اصلي نورون است كه بايد آن را بر اساس اينترفيس‌هايي كه ساخته‌ايم، درست كنيم. شكل 8 ساختار اصلي اين كلاس را نشان مي‌دهد.

شكل8

همان‌طور كه در اين شكل مشاهده مي‌نماييد، اين كلاس تعدادي متغير و چندين متد دارد. در اين كلاس دو متد اصلي  وجود دارد: متد Sigmoid و متد Pulse كدهاي شكل 9 اين دو متد را نشان مي‌دهد.

شكل 9


اگر كمي به كدهاي شكل 9 و متد Pulse دقت كنيد، متوجه مي‌شويد كه اين متد جمع هر ورودي يا هر خروجي كه به نورون داده مي‌شود را دريافت مي‌كند و در Weight مربوطه كه در دايركتوري است ضرب مي‌كند و آخرين خروجي آخرين را به متد Sigmoid انتقال مي‌دهد و در نتيجه خروجي آخر ما عددي بين 0 و 1 خواهد بود.

حال دو كلاس مهم از اين شبكه باقي‌مانده است: اولين كلاس، كلاس اصلي شبكه يا NeuralNet است و ديگريNeuralLayer، كلاس لايه‌هاي شبكه ما است. اين دو كلاس در شكل 10 به صورت مشخص نشان داده شده است، اما نكته بسيار مهم اين است كه كلاس NuralLayer در حقيقت مسئول نگهداري نورون‌هاي انتقال‌دهنده يا فراخوان‌كننده متد Pulse است.
 

کلاس اصلي شبکه

کلاس لايه‌هاي شبکه

شكل 10


در اين كلاس از فهرست نورون‌ها استفاده شده است و اين كلاس در اصل نورون‌ها را در خود جا مي‌دهد. در اين كلاس دو متد كه هيچ مقدار برگشتي ندارند، به نام‌هاي Pulse و ApplyLearning وجود دارد. اين متدها در حقيقت  كار فرستادن پالس و يادگيري لايه‌ها را به عهده دارند. كدهاي شكل 11 اين دو متد را نشان مي‌دهد.

شكل 11

كلاس NeuralNet (شكل 12) همان‌طور كه قبلاً توضيح داده شد، يكي از مهم‌ترين كلاس‌هاي برنامه ما است. در اين كلاس سه متد بسيار مهم وجود دارد: Initialize ،Train و BackProgation متد Initialize در واقع شبكه ما و كامپوننت‌هاي آن را آماده مي‌كند. اين متد در واقع متد Factory ما است. در اين متد مقادير عددي نورون‌هاي ورودي، نورون‌هاي مخفي و نورون‌هاي خارجي مشخص مي‌گردند.  

شكل 12

متد BackProgation يكي ديگر از متدهاي اين كلاس است. اين متد ابتدا خطاهاي خروجي نورون‌ها را با  محاسبه اختلاف عددي بين مقدار مورد انتظار ما و خروجي نورون‌ها محاسبه مي‌كند و وقتي كه خروجي همه نورون‌ها بروز گرديد، اين متد خطاهاي نورون‌هاي پنهان را نيز محاسبه مي‌كند.

شكل 13

وقتي اين متد توسط برنامه انجام شد، برنامه با استفاده از متد، ()‌Train و با استفاده از خروجي‌هاي قبلي مي‌تواند توانايي يادگيري داشته باشد.

اگر بخواهيم شبكه خود را آموزش دهيم كه عمليات X-OR را انجام دهد، بايد ابتدا يك شبكه بسازيم كه دو نورون ورودي، دو نورون پنهان و يك  نورون خروجي داشته باشد. مثلاً مي‌توانيم شبكه خود را طوري آموزش دهيم كه بتواند عمليات مشخص‌شده در جدول 1 را انجام دهد:

خروجي   

ورودي دوم

ورودي اول

1

0

1

0

1

1

0

0

0

1

1

0

 جدول 1

كل 13 روند اجرايي برنامه را نشان مي‌دهد. مي‌توانيد سورس‌ كدهاي اين برنامه را از قسمت دريافت فايل سايت ماهنامه شبكه دريافت كنيد و قدم به قدم و با استفاده از راهنمايي‌هايي كه در آن نوشته شده است، تغييراتي در كدها انجام دهيد و اولين برنامه هوش مصنوعي خود را بنوسيد.

منابع:
http://en.wikipedia.org/wiki/Neural_network
www.c-sharpcorner.com
lss/NNIntro/InvSlides.htmlدwww.cs.stir.ac.uk/
www.nd.com/neurosolutions/products/ns/whatisNN.html

 

برگرفته ازhttp://www.shabakeh-mag.com

+ نوشته شده در  چهارشنبه شانزدهم آبان 1386ساعت 6:54  توسط galaxygirl  | 

كدام زبان برنامه‌نويسي را انتخاب كنيم؟

بهروز نوعي پور
ماهنامه شبکه - آبان ۱۳۸۶ شماره 81

اشاره :

كدام زبان برنامه‌نويسي را انتخاب كنم؟ از كدام نوع ديتابيس استفاده كنم؟ اين‌ها سؤالات قديمي و تاحدودي كليشه‌اي هستند. با اين حال خواندن يكي دو مقاله جالب در اينترنت باعث شد، طرح مجدد اين موضوع هميشگي را خالي از فايده ندانم.


كدام زبان برنامه‌نويسي را انتخاب كنم؟ از كدام نوع ديتابيس استفاده كنم؟ اين‌ها سؤالات قديمي و تاحدودي كليشه‌اي هستند. با اين حال خواندن يكي دو مقاله جالب در اينترنت باعث شد، طرح مجدد اين موضوع هميشگي را خالي از فايده ندانم.

اصولاً هر از گاهي بايد اين پرسش را مجدداً در كليه سطوح مهندسي نرم‌افزار، چه در صنعت، چه در رسانه‌ها و چه در دانشگاه‌ها مطرح كرد و دليل آن هم، بسيار ساده است. زبان‌هاي برنامه‌نويسي نيز مانند زبان‌هاي گويشي انسان‌ها پويا هستند و مرتباً متحول مي‌شوند. در اين راستا برخي خود را با نيازهاي روز تطابق داده و برخي نيز از اين تحولات جا مي‌مانند.

به همين دليل لازم است هر چند وقت يك‌بار اين پرسش را مطرح كرده و جديدترين پاسخ‌ها را به نقد بگذاريم. براي اين‌كه بحث از حالت نظري خارج شود و حالت كاربردي پيدا كند، اجازه مي‌خواهم نظرم را در اين مورد به اختصار بيان كنم.

برنامه‌نويسي وب‌

فعلاً برنامه‌نويسي تحت وب داغ‌ترين سوژه در دنياي برنامه‌نويسي است. شايد بد نباشد يادآوري كنم كه اصولاً فلسفه برنامه‌نويسي تحت وب چه بود كه به اينجا رسيد. علت محبوبيت و رشد گسترده برنامه‌نويسي تحت وب، حل شدن مشكل كلاينت بود.

در اين مدل از برنامه‌نويسي، برنامه‌نويس دغدغه چنداني درباره قابل نصب بودن برنامه‌اش روي پلتفرم‌هاي مختلف ندارد زيرا وضعيت تقريباً روشن است. همين كه برنامه شما روي يكي دو مرورگر معروف مانند فايرفاكس و اينترنت اكسپلورر جواب بدهد، كافي است.

بنابراين در پاسخ به اين سؤال كه كدام زبان برنامه‌نويسي وب را انتخاب كنيم، بايد گفت زبان‌هايي كه از همه ساده‌ترند و تغيير و تحولات را به سرعت مي‌پذيرند. در حال حاضر در اين زمينه دو فناوري PHP و ASP.NET پيشتاز هستند. زبان اسكريپت‌نويسي PHP شباهت‌هايي به زبان C دارد.

به همين دليل سرعت كامپايل شدن آن بالا است و سايت‌هايي كه از اين زبان استفاده مي‌كنند اندكي سريع‌ترند. فناوري ASP.NET از ويژوال بيسيك دات‌نت يا سي‌شارپ استفاده مي‌كند. اين دو زبان، به ويژه در جديدترين نسخه فناوري دات‌نت در يك حد هستند.

اما به نظر من ويژوال بيسيك همچنان جذاب‌تر و ساده‌تر به نظر مي‌رسد. سايت‌هايي كه با اين دو زبان نوشته مي‌شوند نرم‌افزارهاي قدرتمندي را پديد مي‌آورند كه قدرت انعطاف و گستره  كارايي آن‌ها بالاست زيرا هر دو زبان OOP هستند. علاوه بر سهولت برنامه‌نويسي، پشتيباني از برخي موج‌هاي نو مانند اي‌جكس هم بحث روز است.

هم PHP و هم ASP.NET وضع خوبي در اين زمينه دارند. علاوه بر اين، برخي فناوري‌هاي روز هم خيلي مهم هستند كه وب‌سرويس يكي از آن‌هاست. در حال حاضر رقابت شديدي ميان فناوريSOAP  كه از سوي آي بي‌ام و مايكروسافت و ديگران پشتيباني مي‌شود و فناوري REST كه از سوي ياهو و برخي شركت‌هاي بزرگ ديگر حمايت مي‌شود، وجود دارد.

اما وضع بعضي زبان‌ها مانند جاوا (JSP) و ColdFusion در دنياي وب خراب است و برخي زبان‌ها اخيراً دوباره مورد توجه قرارگرفته‌اند كه از آن جمله مي‌توان به Python و Ruby اشاره كرد. وضعيت جاوا در وب در اين ميان جالب توجه است. برخلاف موفقيت چشمگير جاوا در برنامه‌نويسي براي سيستم‌هاي بزرگ، اين زبان به شدت در وب دچار ناكامي است. وب يك دنياي بصري است و به سادگي و ظاهر سيستم‌ها اهميت مي‌دهد.

به همين دليل زبان‌هاي فاقد ابزارهاي ويژوال و قدرتمند كه در عين حال ساده نيز هستند در اين وادي محكوم به زوالند و اين مسئله براي جاوا كه در زمينه وارد كردن مفاهيم بصري و پويا به دنياي وب پيشگام بود،  ناگوار است، البته اين قضيه هيچ ربطي به زبان اسكريپت‌نويسي «جاوااسكريپت» كه با ظهور اي‌جكس جان تازه‌اي پيدا كرده، ندارد.

برنامه‌نويسي سيستم‌هاي بزرگ‌

اما وضعيت در صنايع و سازمان‌هاي بزرگ بسيار متفاوت است. در جاهايي مانند صنايع مالي و بانكي، صنايع پتروشيمي و نفت، صنايع مخابراتي، سازمان‌هاي دولتي، صنايع خودروسازي و مانند اين‌ها، هنوز هم جاوا و مشتقاتش حرف اول را مي‌زنند. قدرت جاوا در اين حوزه‌ها به قدري است كه حتي مي‌توان - البته با كمي احتياط - گفت موفقيت سيستم‌هاي ديگري مانند اوراكل (كه مبتني بر جاوا است) نيز بي ارتباط با استيلاي جاوا بر اين محيط‌ها نيست.

كاركردن با جاوا در محيط‌هاي بزرگ كار آساني نيست. اوراكل هم آسان نيست و به طور كلي ورود به اين عرصه‌ها چالش‌هاي مختلفي را پيش روي برنامه‌نويسان و شركت‌هاي نرم‌افزاري قرار مي‌دهد، به همين دليل سيستم‌هاي مبتني بر جاوا، گران و پرهزينه و غولآسا هستند. با اين حال توجه كنيد كه منظور از سازمان‌هاي بزرگ در اينجا سازمان‌هايي هستند كه از نظر ابعاد، تعداد كلاينت‌ها و تراكنش‌ها واقعاً بزرگ هستند و منظور ما از آن شأن و منزلت يك سازمان نيست.

در واقع شركت‌هايي مانند اپراتورهاي موبايل يا صنعت نفت در ايران را مي‌توان نمونه‌هايي از اينگونه سازمان‌ها محسوب كرد. اما بسياري از سازمان‌هاي دولتي در ايران صرف ‌نظر از اهميت استراتژيك يا منزلتشان، به دليل ساختار قديمي سازمان و مدرنيزه نشدن و مكانيزه نبودن فرآيندهاي سازمان يا تنها به اين دليل كه بيشتر از چند هزار كاربر ندارند، جزء سازمان‌هاي متوسط در اين بحث به حساب مي‌آيند.

سازمان‌هاي متوسط و كوچك‌

شركت‌ها و سازمان‌هايي كه كمتر از چند هزار كاربر يا چند صد كلاينت دارند، و آن‌هايي كه خيلي كوچك و در حد مجموعه‌هاي ده الي بيست نفره هستند در اين خانواده از كاربران سيستم‌هاي نرم‌افزاري قرار مي‌گيرند. براي اغلب اين سازمان‌هاي كوچك و بزرگ، هنوز هم چند صد هزار تومان هزينه براي توسعه و استقرار سيستم‌هاي نرم‌افزاري، رقم بزرگي به شمار مي‌رود.

هم به اين دليل و هم به دلايل فني، اين سازمان‌ها و شركت‌ها بايد از فناوري‌ها و زبان‌هايي براي توسعه سيستم‌هاي نرم‌افزاري خود استفاده كنند كه هزينه كمتري دارند و كاركردن با آن‌ها ساده‌تر است. من براي اينگونه مجموعه‌ها استفاده از زبان سي‌شارپ و راه‌حل‌هاي مبتني بر ويندوز (مانند SQL Server) را توصيه مي‌كنم.

سهولت و قدرت كار با ديتابيس، يكي از دلايل اصلي قدرت زبان‌هاي دات‌نتي است. البته به تازگي سيستم‌عامل، لينوكس هم طرفداران زيادي پيدا كرده است ولي موضوع انتخاب پلتفرم و سيستم‌عامل متفاوت از انتخاب زبان و فناوري برنامه‌نويسي است.

شايد به همين دليل، برخي به دنبال پياده‌سازي سي‌شارپ در اين محيط‌هاي غيرمايكروسافتي هستند. اما به هرحال زبان جاوا در سيستم‌هاي غيرمايكروسافتي طرفداران خاص خودش را دارد، ضمن اين‌كه ترديدي ندارم كه هنوز هم استفاده از زبان ويژوال بيسيك دات‌نت و API نرم‌افزارهاي آفيس مايكروسافت (مانند اكسس) بهترين گزينه براي شركت‌هاي كوچك و چندنفره است.

برنامه‌نويسي براي موبايل‌

در حوزه برنامه‌نويسي وب زبان ++C و پس از آن زبان‌ جاوا پيشتاز است. زبان‌هاي دات‌نت نيز كه اخيراً به اين حوزه راه يافته‌اند، با فاصله زيادي آن دوتاي ديگر را تعقيب مي‌كنند. زبان ++‌C زبان غامض و پيچيده‌اي است و به نظر من به تدريج رو به افول گذاشته است.

اما C و ++C زبان سخت‌افزار هستند و هربار كه سخت‌افزار جديد و ناشناخته‌اي خلق مي‌شود زبان شماره يك آن C است. به‌تدريج كه آن پلتفرم سخت‌افزاري جان مي‌گيرد، دوباره زبان‌هاي شيءگرا مانند جاوا و سي‌شارپ دوروبرش قوت مي‌گيرند. ++C ‌زبان اصلي سيستم‌‌عامل‌هاي سيمبيان و ويندوز موبايل است. زبان جاوا نيز كه مستقل از سيستم‌عامل تلقي مي‌شود، در جايي كه سيمبيان يا ويندوز موبايل غايب باشند، حرف اول را مي‌زند. البته چنان‌كه مي‌توان حدس زد، هيچ كس روي سيستم‌عامل ويندوز موبايل جاوا را جدي نمي‌گيرد و نگاه‌ها به سوي سي شارپ است.

زبان‌هاي ديگر
جدا از برخي زبان‌هاي برنامه‌نويسي كه در كاربردهاي خاصي مانند هوش مصنوعي ممكن است قدرت بيشتري داشته باشند، ساير زبان‌ها ديگر كهنه به نظر مي‌رسند؛ فرترن و كوبول از آن جمله‌اند. البته زبان‌هاي كار با بانك‌هاي اطلاعاتي رابطه‌اي مانند T-SQL و PL/SQL موضوع متفاوتي است كه در بحث ما نمي‌گنجد. يك نكته ديگر هم باقي مي‌ماند و آن هم ديدگاه محافل آكادميك درباره زبان‌هاي برنامه‌نويسي است.

بدون ترديد زبان جاوا هنوز هم محبوب‌ترين زبان در محافل آكادميك است و پس از آن سي شارپ به دليل شباهتش به جاوا مطرح است. البته در برخي از دانشگاه‌هاي ايران هنوز هم ممكن است زبان‌هاي قديمي و فرسوده‌اي مانند فرترن تدريس شود كه اگر چنين باشد جاي تأسف است.

ولي به نظر من علاقه محافل آكادميك به اين يا آن زبان ممكن است گمراه‌كننده باشد. آنچه اهميت دارد كاربرد و كارايي زبان در يك زمينه به‌خصوص و انعطاف‌پذيري آن در مقابل تغييراتي است كه در صنعت و نيازهاي مصرف‌كنندگان پديد مي‌آيد. بقيه مسائل، همگي سليقه‌اي هستند و نبايد با تعصب با اين موضوع برخورد كرد.

بر گرفته ازhttp://news.parseek.com/Science/

+ نوشته شده در  دوشنبه چهاردهم آبان 1386ساعت 10:6  توسط galaxygirl  |