روشنی‌های راه

شب سرودش را خواند، نوبت پنجره‌هاست ...

شب سرودش را خواند، نوبت پنجره‌هاست ...

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

هدف من از این پست صرفا مقایسه‌ی زبان‌های برنامه‌نویسی نیست. شما می‌تونید مقایسه‌ی خیلی خوبی رو توی این صفحه‌ی ویکی‌پدیا ببینید. توی این صفحه لیست نسبتا کاملی از زبان‌های برنامه‌نویسی آورده شده و ذکر شده که در چه حوزه‌ای بیشتر کاربرد دارند و در پایین هم آمار جالبی در مورد قدرت معنایی نسبی زبان‌ها داده. کلا مطالب زیادی در مورد مقایسه‌ی زبان‌ها نوشته می‌شند و واقعا هم در نهایت به این نتیجه می‌رسیم که هر کدوم از اون‌ها برای هدفی مناسبند. به هر حال، هدف من در اینجا، مقایسه‌ی سریع زبان‌های برنامه‌نویسیه برای این چهار موردی که در بالا نام بردم.
 
پیش‌نوشت ۱: مخصوصا برای یک دانشجوی سال اول دانشگاه، که یکی از مخاطبان اصلی این پسته، ممکنه به اسامی و اصطلاحات زیادی بر بخورید که اون‌ها رو نشنیده باشید. توجه کنید که این کاملا طبیعیه. هیچ کس تمام این‌ها رو کامل بلد نیست. و خیلی از اون‌ها هم توی برهه‌ای یاد گرفته می‌شند و بعد فراموش می‌شند. خلاصه اینکه از حجم اطلاعاتی که در این پست هست نترسید و سعی کنید نقشه‌ی راه ۴ سال آینده‌تون رو مشخص کنید.
در اینجا ما نگاه کوتاهی به زبان‌های برنامه‌نویسی مهم می‌اندازیم.
۱- خانواده‌ی سی: زبان سی یکی از پرکاربردترین زبان‌های برنامه نویسیه. بعضی‌ها اون رو یک زبان میانی محسوب می‌کنند چون مثلا بخش زیادی از مدیریت حافظه رو به عهده‌ی برنامه‌نویس می‌ذاره یا نوع داده‌ی بولین به طور جداگانه برای اون وجود نداره. اما نقطه‌ی قدرت زبان سی سریع بودن برنامه‌های نوشته شده با اون در مقایسه با زبان‌های دیگه‌ست (در قسمت‌های بعد دلیلش رو توضیح می‌دم). همچنین کتابخانه‌های بسیار قدرتمند و متنوعی برای اون وجود داره، که به برنامه‌نویس قدرت فوق‌العاده‌ای در مدیریت سیستم می‌ده (به طوری که قسمت زیادی از بیشتر سیستم‌عامل‌ها با سی نوشته شده) و همچنین بسیار پر کاربرده در نتیجه پروژه‌های متن‌باز خوبی که با این زبان نوشته شده‌اند پیدا می‌کنید. جامعه‌ی کاربری بسیار بزرگی هم دارد.
گفته می‌شود که قابلیت حمل این زبان نسبت به زبان‌های جاوا یا زبان‌های پلت‌فرم دات نت کمتر است اما این ادعا نیاز به بررسی بیشتری دارد، هر چند تا حد خوبی درست است. فریم‌ورک هایی مانند کیوت (QT) سعی کرده‌اند محیطی برای توسعه ی برنامه‌های گرافیکی با قابلیت حمل بسیار بالا و در عین حال سرعت اجرای خوب را فراهم کنند. این منبع عالی شما را با این فریم‌ورک بیشتر آشنا می‌کند (البته متن به قدر کافی علمی نیست اما بسیار ساده است). توجه کنید که کیوت یک پلت‌فرم چند زبانه است و لینک آخر هم در حقیقت مربوط به یک سایت آموزشی برای پایتون است.
در اینجا منظور من از خانواده‌ی سی، زبان‌های سی، سی پلاس پلاس و آبجکتیو سی هستند که شباهت‌های زیادی به هم دارند.
۲- جاوا: زبان مورد علاقه‌ی من. این زبان با شعار "write once, run anywhere." ساخته شد. این زبان به پیچیدگی زبان سی نیست اما از لحاظ ساختاری باعث می‌شود برنامه‌های بسیار ساخت‌یافته‌تری تولید شوند. در عین حال یک زبان بسیار امن است و کدهایی که با آن نوشته می‌شود روی بیشتر سیستم‌عامل‌ها قابل اجرا هستند.
این زبان دارای سه نسخه‌ی استاندارد، مایکرو و enterprise‌است. نسخه ی مایکرو برای برنامه‌نویسی تلفن‌های همراه استفاده می‌شود که در قسمت‌های آینده بیشتر در مورد آن توضیح می‌دهم.
۳- فریم‌ورک دات‌نت: فریم‌ورکی که در ایران طرفداران زیادی دارد و بسیاری از شرکت‌های ایرانی با آن کار می‌کنند. شاید این یکی از بهترین نقاط قوت این فریم‌ورک برای یک برنامه‌نویس ایرانی باشد، اما جز این مورد، پشتیبانی خوب مایکروسافت و ابزارهایی با استفاده‌ی آسان این پلت‌فرم را برای برنامه‌نویسان تازه‌کار بسیار مناسب کرده است.
ممکنه بیشتر برنامه‌نویس‌های ویندوزی که حتی یک هفته هم با سیستم‌عامل‌ها یا زبان‌های دیگه کار نکرده‌اند، کمی در مورد این پلت‌فرم اغراق کنند. اما به هر حال یکی از ساده‌ترین، قدرتمندترین و دوست‌داشتنی‌ترین پلت‌فرم‌های ممکن برای یک برنامه‌نویس است. طبیعی است که انتخاب یک زبان یا پلت‌فرم کاملا نسبی است، اما من شخصا هیچ برنامه‌ی قدرتمندی (مثلا در حد متلب و فتوشاپ در برنامه‌های تجاری) نمی‌شناسم که با این فریم نوشته شده باشد. اما باز تاکید می‌کنم که یکی از بهترین انتخاب‌ها برای یک برنامه‌نویس جویای کار ایرانی است.
پلت‌فرم جاوا و فریم‌ورک دات نت هر دو دارای ماشین مجازی هستند که البته اولی به منظور قابل حمل کردن این زبان و دومی به دلیل تنوع استفاده از زبان‌های مختلف (ویژوال بیسیک، سی شارپ و ...) در یک محیط به وجود آمده‌اند. به همین دلیل است که زبان سی که یک زبان کامپایلری است از این زبان‌ها که زبان‌های مفسری هستند اساسا سریع‌تر و بهینه‌ترعمل می‌کند، در عین حال که از آن‌ها پیچیده‌تر هم می‌باشد.
۴- پایتون: یکی از بهترین زبان‌های برنامه نویسی برای یادگیری است. پایتون یک زبان منبع باز است به همین دلیل طرفداران زیادی بین گیک‌های لینوکسی و در نتیجه در پروژه‌های اپن سورس دارد. (جملات بعدی عینا از ویکی پدیای فارسی کپی شده‌اند) این زبان یک زبان برنامه‌نویسی همه منظوره، سطح بالا، شیءگرا و مفسری است که در سال ۱۹۹۱ توسط یک هلندی طراحی شد.
فلسفهٔ ایجاد آن تاکید بر دو هدف اصلی خوانایی بالای برنامه‌های نوشته شده و کوتاهی و بازدهی نسبی بالای آن است. کلمات کلیدی و اصلی این زبان به صورت حداقلی تهیه شده‌اند و در مقابل کتابخانه‌هایی که در اختیار کاربر است بسیار وسیع هستند.
تعدادی از برنامه‌های مهم نوشته شده با پایتون:
  • بیتتورنت (BitTorrent): نرم‌افزاری برای جستجوی فایل‌های به اشتراک گذاشته شده(p2p) و...
  • بلندر (Blender): یک نرم‌افزار ۳ بعدی و اپن سورس بسیار معروف
  • چندلر (Chandler): مدیر اطلاعات شخصی شامل تقویم، میل، کارهای روزلنه، یادداشت‌ها و...
  • Civilization IV: یک گیم کامپیوتری بر مبنای پایتون که از boost.python استفاده می‌کند
  • میلمن (Mailman): یکی از معروفترین نرم‌افزارهای مرتبط با ایمیل
  • کمبیلوKombilo: مدیر پایگاه داده و مرورگرگیم‌های go
  • موین‌موین (MoinMoin): یکی از قدرتمندترین و معروفترین ویکی‌های موجود
  • پلون (Plone): یک ابزار مدیریتی محتوایی اپن سورس، قدرتمند و کاربر پسند
  • پورتیژ (Portage): قلب توزیع جنتو. یک مدیر بستهای سیستم لینوکس
  • زوپ (zope): یک پلاتفورم شیء گرای مبتنی بر وب. زوپ شامل یک سرور نرم‌افزار به همراه پایگاه داده شیء گرا و یک رابط مدیریتی درونی مبتنی بر وب می‌باشد
  • اس‌پی‌ای (SPE): یک IDE رایگان، اپن سورس برای سیستم‌عامل‌های ویندوز، لینوکس، مک که از wxGlade(طراحی رابط کاربر),PyChecker (دکتر کد) (Blender(۳D پشتیبانی می‌کند.
  • یام (Yum): یک برنامه مدیریت بسته متن‌باز برای توزیع‌های سازگار با آرپی‌ام.
متاسفانه و متاسفانه شرکت‌های بسیار معدودی در ایران هستند که از پایتون در پروژه‌های خود استفاده کنند.
۵- پی اچ پی و جاوا اسکریپت: این دو زبان مهمترین به همراه asp.net (که متعلق به دات‌نت فریم‌ورکه)، اصلی‌ترین ابزارهای توسعه‌ی صفحات وب هستن (البته می‌دونیم که توسعه‌ی صفحات وب به ترکیبی از تکنولوژی‌های زیادی نیاز داره) در قسمت‌های بعد توضیحات مختصری در مورد اون‌ها خواهم داد.
۶- زبان‌های دیگر
----------------------------------------------------------------
اما برای این که یکی از زبان‌های برنامه‌نویسی را برای ادامه دادن و حرفه‌ای شدن انتخاب کنید (البته اکیدا توصیه می‌کنم حداقل به دو زبان دیگر هم آشنا باشید) نیاز است از جنبه‌های دیگری هم به مساله نگاه کنیم. بیایید این زبان‌ها را بر اساس عنوان شغلی دسته بندی کنیم.
برنامه نویس تلفن همراه: من این قسمت را با برنامه‌نویسی تلفن همراه شروع می‌کنم چون شخصا برنامه‌نویسی تلفن همراه را بهتر بلدم. برای اینکه یک برنامه‌نویس تلفن همراه باشید، باید تصمیم بگیرید روی چه پلت‌فرمی می‌خواهید کار کنید: اندروید، آی او اس، بادا، جاوا (J2ME)، ویندوز فون و ویندوز موبایل، بلک‌بری و یا سیمبیان. من تجربه‌ی کار با مورد اول، چهارم، پنجم و ششم را داشته‌ام و توصیه‌ی من به شما به عنوان یک برنامه‌نویس که برای تلفن‌های ایرانی برنامه می‌نویسید، آندروید و J2ME هستند. مورد دوم ریزه‌کاری‌های بیشتری دارد و به مراتب هزینه‌بر تر است. اما برای ۳ سال آینده، تعداد کاربران بیشتری دارد، با این حال اندروید به شدت در حال پیشرفت است، جهانی‌تر است و کاربران پولدارتری هم دارد. اگر برنامه‌ی شما برای چند سال آینده است،‌ اندروید گزینه‌ی اصلی شما خواهد بود. پس همین الآن دست به کار شوید و یک نگاهی هم به نمودار پایین بیندازید (نمودار مربوط به یک‌چهارم دوم سال ۲۰۱۱ است و فقط مربوط به اسمارت‌فون‌ها است):

برای اینکه برنامه‌نویس تلفن همراه باشید، به قدری که به برنامه‌نویسی اهمیت می‌دهید، باید به اخبار هم اهمیت بدهید. بهتر است اخبار فن‌آوری اطلاعات را از طریق RSSها دنبال کنید و فقط به منابع فارسی بسنده نکنید. بهترین منابع برنامه‌نویسی تلفن همراه به زبان انگلیسی هستند که هیچ معادل فارسی در حد و اندازه‌های خودشان ندارند.
بد نیست در مورد بقیه‌ی انتخاب‌ها هم به صورت کوتاه توضیح دهم. برای برنامه‌نویسی آی‌فون، بهتر است یک رابط در خارج از کشور داشته باشید، فروشگاه اپل قوانین بسیار سفت و سختی برای اضافه کردن برنامه‌هایش دارد. توضیحات بیشتر را می‌توانید در اینجا ببینید (شرکت‌هایی در تهران هستند که به نوعی پروژه‌های آیفون رو انجام می‌دهند (برای مثال شرکتی که من ۵ سال برای آن کار کردم، اما مطمئنا تعداد آن‌ها زیاد نیست). زبان برنامه‌نویسی برای آیفون هم آبجکتیو سی است.
برای برنامه‌نویسی ویندوز طبیعتا از کامپکت دات نت فریم‌ورک می‌توانید استفاده کنید (من برای ویندوز موبایل برنامه‌نویسی کرده‌ام اما برای ویندوز فون، خیر. فکر می‌کنم که با آمدن ویندوز هشت، فاصله‌ی برنامه‌های ویندوزی و ویندوز فونی کمتر شود). در این مورد هم من آینده‌ی روشنی در ایران و در کوتاه مدت نمی‌بینم (به رغم قراردادهای نوکیا و مایکروسافت)
در مورد بادا حقیقتا نظری ندارم. همه چیز بستگی به عملکرد سامسونگ در یک سال آینده دارد. بلک‌بری یکی از بهترین و خوش‌دست‌ترین پلت‌فرم‌هایی است که با آن کار کرده‌ام اما آینده‌ی آن تا حدی روشن است، مخصوصا برای یک برنامه‌نویس ایرانی (من برای یک شرکت کانادایی برنامه‌نویسی می‌کردم. آن هم به طور اتفاقی. برای کسانی که می‌خواهند به صورت freelancer کار کنند و امکان دریافت پول از خارج از کشور را دارند، آیفون و بلک‌بری انتخاب‌های خوبی هستند).
سیمبیان اصلا محیط خوبی برای برنامه‌نویسی نیست! من که از پروسه‌ی توسعه‌ و برنامه‌نویسی آن خیلی بیزارم! فراموشش کنید!
برنامه‌نویس و طراح وب: باید تصمیم بگیرید که می‌خواهید برنامه‌نویس تکنولوژی‌های مایکروسافتی باشید یا خیر. اگر عاشق مایکروسافت هستید باید به سمت دات نت و ASP.NET بروید اما من ASP را پیشنهاد نمی‌کنم. یک برنامه‌نویس خوب وب باید حداقل با HTML و XML آشنا باشد و با چند تکنولوژی طراحی و تولید صفحات وب همزمان آشنا باشد. Ajax، php و جاوا اسکریپت را می‌توانید نسبتا سریع یاد بگیرید (نیازی نیست خیلی حرفه‌ای شوید. منابع به قدر کافی زیاد هستند) می‌توانید به سمت جاوا بروید و با طریقه‌ی نوشتن سرولت‌ها، کار با صفحات jsp و تکنولوژی‌های Hibernate و ... آشنا شوید. یک طراح صفحات وب برای اینکه کار خود را تضمین کند، علاوه بر تسلط به محیط‌های ویرایش عکس مث فوتوشاپ و ویرایش تصاویر برداری مثل Corel Draw (دومی همیشه نیاز نیست)، باید با HTML، CSS و یکی دو مورد از زبان‌های اسکریپتی آشنا باشد.
کسی که بتواند با ۴ یا ۵ مورد ذکر در بالا آشنا باشد، آینده‌ی شغلی خوبی خواهد داشت. به نظر من برنامه‌نویسی و طراحی وب یکی از بهترین انتخاب‌ها در بازار ایران است.
برنامه‌نویس برنامه‌های دسکتاپ: خوب به اندازه‌ی کافی در این مورد در بالا جسته و گریخته صحبت شد، اما دو نکته‌ی اصلی به نظر من می‌رسد. اول اینکه تا می‌توانید برای حرفه‌ای شدن در پروژه‌های منبع باز همکاری کنید (پینوشت ۳ را ببینید) دوم اینکه سه انتخاب عمده‌ی شما برای کار در ایران می‌تواند پلتفرم دات نت، پلت‌فرم جاوا و سی پلاس پلاس باشد. به نظر من اگر می‌خواهید در آینده به سمت برنامه‌نویسی وب بروید، جاوا را انتخاب کنید. برنامه‌نویس‌های سی پلاس پلاس کمتر هستند اما در پروژه‌های سنگین‌تریمشغول به کار می‌شوند. کلا برای موفق شدن در سی پلاس پلاس راه طولانی‌تری در پیش دارید.
برنامه‌نویس بازی: این بخش را به دو قسمت تقسیم می‌کنم. برنامه‌نویس بازی‌های تلفن همراه و دیگر پلت‌فرم‌ها. در مورد قسمت دوم اطلاعات کافی ندارم. اما دایرکت‌ایکس و تکنولوژی‌های مایکروسافتی یکی از گزینه‌های شماست. در مورد اول هم، می‌توانید فقط یکی از موارد ذکر شده در بخش موبایل را یاد بگیرید اما برای بازی‌های پیشرفته‌تر (شاید اصلا نیازی نباشد بازی‌های پیشرفته بنویسید. اگر تیم برنامه‌نویسی ندارید همان موارد بالا کفایت می‌کند) باید بتوانید با openGL هم کار کنید.
----------------------------------------------------------------
اما در نهایت مساله را از دیدگاه موقعیت شخصی بررسی می‌کنم.
دانشجوی سال اول کامپیوتر:
شما زمان زیادی برای یادگیری دارید و می‌توانید به یک برنامه‌نویس حرفه‌ای با حقوق بالا تبدیل شوید. فقط باید زمینه‌ی مورد علاقه‌ی خود را انتخاب کنید، از یاد گرفتن نترسید و در پروژه‌های مختلف حتی به صورت مجانی شرکت کنید (باز هم پیشنهاد می‌کنم پینوشت سوم را ببینید) برای شما توصیه نمی‌کنم که فقط دو یا سه زبان را آزمایش کنید. از آزمایش نترسید و برای برنامه‌نویسی وقت بگذارید. مطمئن باشید که همه‌ی زبان‌های برنامه‌نویسی پایه‌های یکسانی دارند و یادگیری یک زبان بدون شک شما را در زبان‌های دیگر یاری می‌کند و دید نرم‌افزاری شما را به خوبی ارتقا می‌دهد. مطمئن باشید تمرکز روی فقط یک زبان حرکتی رو به عقب برای شما در این موقعیت است.
شرکت در رقابت های برنامه نویسی هم می‌تونه کمک کنه. حتی اگر به نیت برنده شدن نباشه. یه کار جالبی که می‌شه انجام داد اینه که مسابقات در سطوح مختلف توی دانشکده برگزار بشه (حتی اگر دانشکده و یا انجمن علمی این کار رو نمی‌کنن، دانشجوهای سال بالایی این کار رو انجام بدند). به صورت مستمر هم باشه بهتره مثلا ترمی دوبار.
من به عنوان برنامه‌نویسی که چندین زبان برنامه‌نویسی را بدون مطالعه‌ی کافی و مستقیما در پروژه‌ها یاد گرفتم توصیه می‌کنم بالانس خوبی بین مطالعه و کد نویسی ایجاد کنید و فقط به یکی از آن‌ها نپردازید.
دانشجوی در شرف فارغ‌التحصیلی که راهنمای خوبی نداشته است:

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

پیشنهاد من نوشتن برنامه‌های سنگین‌تر و مطالعه بیشتر و بیشتر در زمینه‌ی تخصصی‌تان است. مطالعه چیزی است که من خیلی دیر به اهمیت آن پی بردم :-)
برنامه‌نویسی که از کارش راضی نیست:

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


اما چند نکته در مورد این فلوچارت‌ها:
۱- همون‌طور که می‌بینید، توی قسمت برنامه‌نویسی برای موبایل هیچ اسمی از J2ME برده نشده. من برنامه‌نویس J2ME بوده‌ام و هستم اما اصلا از این قسمت نمودار متعجب نشدم. این خیلی خیلی خیلی مهمه که به عنوان یه برنامه‌نویس همیشه به روز باشید. یعنی وقتی زمان J2ME تموم شد، برید و اندروید یاد بگیرید.
مثال دیگه، زبان پاسکاله. من بهترین خاطرات دوران دبیرستانم رو با پاسکال و دلفی دارم. پاسکال به دلیل ساخت‌یافتگی خوبش سال‌ها زبانی بسیار مناسب برای آموزش بود. توی دبیرستان ما هم تدریس می‌شد. دلفی تلاشی بود برای شیئ‌گرا کردن این زبان که به نظرم تلاشی خوبی هم بود. دلفی به دلیل ارائه‌ی یک محیط فوق‌العاده برای RAD (یا توسعه‌ی سریع برنامه‌های کاربردی، به این معنی که ابزارهای از پیش نوشته شده‌ی خیلی خیلی زیادی در اختیار برنامه‌نویس بود. از جمله انواع کنترل‌ها)، یکی از قدرتمندترین انتخاب‌های برنامه‌نویسان ویندوز بود. الآن هم در ایران تعدادی از شرکت‌ها از آن استفاده می‌کنند اما به نظر من باید آن را یک زبان مرده محسوب کنیم. شاید به خاطر عمل‌کرد خیلی خوب مایکروسافت در ارائه‌ی دات نت...
۲- این چیزی که ایشون کشیده و اینی که من کشیدم (راستی من توی دو تا شکل نشون دادهم اما فلوچارت اصلی یک شکل بود) واقعا فلوچارت نیست. همه می‌دونیم به فلوچارت استاندارد رو چه جوری می‌کشند.
۳- من کمی ترتیب مراحل فلوچارت رو به هم زدم که تغییر کاملا کوچکیه.
پینوشت ۳: توصیه می‌کنم این پست رو حتما بخونید. توی سال ۸۶ نوشته شده اما اینقدر دوسش داشتم و توی افکارم موثر بوده که الآنم یادم بود که چنین پستی وجود داشت و با یه جستجو توی گوگل پیداش کردم.
پینوشت ۴: یکی از پارامترهایی که به شما در انتخاب مناسب زبان کمک می‌کنه، پشتیبانی و ابزارهای آماده برای توسعه‌ی اونه. برای بعضی برنامه‌نویس‌ها محیط‌های توسعه‌ی مناسب پارامتر مهمی محسوب نمی‌شند (خیلی وقت‌ها شده که توی محیط‌های ساده مث ++notepad یا kate کد زدم و دیگران رو هم دیدم که مدت‌ها فقط با این محیط‌ها کار می‌کردند)، اما وقتی یک برنامه‌نویس می‌خواد حرفه‌ای‌تر بشه در زمینه‌ای، بالاخره به یک محیط توسعه‌ی قوی نیاز داره. خیلی‌ها بدون emacs‌ نمی‌تونند زندگی کنند و خیلی‌ها بدون ویژوال استودیو.
من قصد ندارم در مورد محیط‌های توسعه‌ی مجتمع یا IDEها توضیح بدم. چون به بعضی از آن‌ها آشنا نیستم و معتقدم برای اظهار نظر در مورد IDEها باید واقعا با آن‌ها زندگی کرد و حرف زدن در مورد اون‌ها به طور جامع، حاصل یک تحقیق ساده نیست. به همین خاطر تنها اسمی از اون‌ها می‌برم و شما رو ارجاع می‌دم به منابع معتبرتر :-)
  • جاوا (من با همه‌ی محیطهای توسعه‌ی جاوا زندگی کرده‌ام!): نت بینز (محیط توسعه‌ی مورد علاقه‌ی من. که برتری بیشتری در مورد توسعه برنامه‌های موبایل داره.) اکلیپس (بسیار سریع‌تر نتبینزه و محیطش خیلی دوست داشتنیه. اکلیپس و نت‌بینز هر دو طرفدارای زیادی دارند و یک جورهایی رقیب هم هستند. برای توسعه‌ی برنامه‌های اندرویدی انتخاب بهتریه) و اینتلی‌جی (توی ایران خیلی طرفدار داشت چون اینجا کپی رایت نداریم. به نظر من زیادی کنده و هوشمندیش (که نکته ی قوتشه و بعضی جاها آدم رو متعجب می‌کنه) خیلی در سرعت توسعه تاثیرگذار نیست. جمله‌ی آخر یک جمله نسبی بود، با توجه به اینکه نت‌بینز هم در مواقع بسیاری هوشمنده. خبر خوبی که شاید ندونید اینه که نسخه‌ی متن باز هم داره)
توضیح: دو IDE اول در زبان‌های دیگه هم مورد استفاده قرار می‌گیرند که این موضوع برای اکلیپس بیشتر صادقه. مورد سوم هم زبان‌های مورد استفاده در وب رو هم تا حدی پشتیبانی می‌کنه، اما قابلیت پشتیبانی از چند زبان در اون به قوت دو مورد اول نیست.
زبان‌های دیگر:
موافقین ۰ مخالفین ۰ ۹۱/۰۵/۰۲
مجید عسگری

نظرات  (۱۰)

۰۳ مرداد ۹۱ ، ۱۳:۲۵ محمد افاضاتی
سلام مطلب خوبی بود
فقط پایتون برای وب بسیار قدرت مند است و درکل این روش انتخاب زبان نیست.
واقعا به این سادگی نمی شود تصمیم گرفت این زبان رو انتخاب می کنم و ...
۱۸ مهر ۹۱ ، ۰۷:۱۰ مجید عسگری
حرفت رو قبول دارم تا حد زیادی. اما دید کلی می‌ده به آدمی که می‌خواد برنامه‌نویس بشه. متاسفانه من برنامه‌نویس وب نیستم. در مورد قسمت وبش هم قرار بود کسی کمکم کنه و اون قسمت رو بنویسه که متاسفانه ننوشت... خوشحال می‌شم کمک کنی این پست رو بهتر کنم.
معذرت به خاطر این هم تاخیر در پاسخ
۲۴ دی ۹۱ ، ۰۴:۰۱ احمدعلی شفیعی
خوب چند وقت پیش با یکی از دوستان در مورد زبان‌های برنامه‌نویسی بحث می‌کردیم.
من سی‌شارپ می‌نویسم و اون دوست عزیز پی‌اچ‌پی و نتیجه‌ی نهایی خاصی نداشت. فقط این‌که این دوتا هرکدوم دنیایی دارند برای خودشون. در ضمن تا اون‌جایی که می‌دونم سرعت اجرای برنامه‌ی سی‌پلاس‌پلاس با سی‌شارپ تفاوت چندانی نداره چون خود دات‌نت داره برنامه رو مدیریت می‌کنه. در مورد وب هم چون پی‌اچ‌پی مستقیما تفسیر می‌شه سرعت‌ش از ASP.Net کم‌تره و خوب تکنولوژی جدیدی که من با اون کار می‌کنم (سراغ ASP.Net نرفتم کلا!) ASP.Net MVC هستش که از ساختار Model, View, Controller استفاده می‌کنه و سرعت‌ش از ASP.Net هم بیش‌تره (چون ASP.Net سنگین‌تر از MVC هستش)
در مورد زبان‌های برنامه‌نویسی این نکته رو جالبه بدونید که مایکروسافت واقعا داره زور‌ش رو می‌زنه که سی‌شارپ موفق‌تر بشه (البته الان واقعا موفقه) و سرمایه‌گذاری‌ش هم رو سیستم‌های وب مثل ویندوز آژور (Windows Azure) هستش. چون واقعا در آینده سیستم‌عامل اهمیتی نداره و به نظر میاد دنیا داره به سمت کامپیوترهای بدون سیستم‌عامل (رایانش ابری) پیش می‌ره.
یک نکته‌ی دیگه هم هست. این که توی ویندوز ویستا، ۷ و ۸ به غیر از هسته‌ی سیستم‌عامل، بقیه‌ی ابزارهای ویندوز با سی‌شارپ (در اصل دات‌نت) نوشته شده‌اند.
۲۴ دی ۹۱ ، ۰۴:۲۵ مجید عسگری
از نکات خیلی خوبی که نوشتید متشکرم. کلا این پست نیاز به آپدیت مداوم داره :-)
در مورد مفسرها، نکات زیادی الآن وجود داره و بهینه‌سازی‌های عالی که من اصلا اشاره‌ای بهشون نکردم. راستش از همون روز اول دوست داشتم این قسمت رو یک آدم حرفه‌ای‌تر از خودم در برنامه‌نویسی وب بنویسه که تا الآن متاسفانه این اتفاق نیفتاده
به دلیل ماهیت زبان سی‌شارپ و اجرای اون روی فریم‌ورک دات‌نت، سرعت برنامه‌های سی‌پلاس‌پلاس می‌تونه بیشتر از سی‌شارپ باشه (و در اکثر موارد همین‌طور هست) نظر کلی در این مورد اینه که، جاهایی که نیاز به دسترسی مداوم و مستقیم به سخت‌افزار هست، بهتره از سی‌پلاس‌پلاس استفاده کنید. شما می‌بینید که کور بیشتر بازی‌ها یا بهتر بگیم انجین‌های بازی رو با سی‌پلاس‌پلاس می‌نویسند چون با کارت گرافیکی و ... درگیر هستند. خودتون هم اشاره کردید که هسته‌ی ویندوز با سی نوشته شده.
اینجا بیشتر بحث شده:
http://stackoverflow.com/questions/145110/c-performance-vs-java-c
مشکل دیگه اینجاست که اساسا برنامه‌های سی‌شارپی شما روی سیستم‌عامل ویندوز فقط اجرا می‌شه و این که بهینه‌سازی‌هایی توش صورت می‌گیره دقیقا درسته چون پلت‌فرمهای کمتری رو پشتیبانی می‌کنه. اما نمی‌شه با سی‌شارپ سیستم عامل نوشت! مگر اینکه سیستم‌عاملتون روی سیستم‌عامل ویندوز اجرا بشه :-)
۲۴ دی ۹۱ ، ۰۴:۳۴ مجید عسگری
یه مثال خیلی خوب دیگه اینجاست:
http://stackoverflow.com/questions/883642/why-would-i-see-20-speed-increase-using-native-code
۲۴ دی ۹۱ ، ۰۶:۱۴ احمدعلی شفیعی
خوب اول این‌که دات‌نت۲ توی لینوکس و آندروید هم پشتیبانی می‌شه (Mono Project) و امکانات جدیدتر هم به این پروژه اضافه می‌شه. برای آندروید هم فکر کنم اسم‌ش Monodroid بود.
در مورد سیستم‌عامل هم باید بگم اتفاقا می‌شه با سی‌شارپ سیستم‌عامل نوشت :D(موضوع توانایی‌ هستش نه کاربرد!) پروژه‌ی Cosmos برای همین کار هستش. اطلاعات بیش‌تر:http://cosmos.codeplex.com/
البته این سیستم‌عاملی که می‌سازه هسته‌ی لینوکس با امکانات محدود داره و فکر کنم بر پایه‌ی مونو نوشته شده.
۲۴ دی ۹۱ ، ۰۶:۱۸ احمدعلی شفیعی
یک نکته‌ی دیگه این‌که بازهم نمی‌شه کاربردی رو تعریف کرد. انجین بازی‌سازی Unreal و فکر کنم یونایتی بر اساس سی‌پلاس‌پلاس نوشته شدند ولی برای نوشتن بازی با اون‌ها باید توی محیط این انجین‌ها از کدهای سی‌شارپ استفاده کنید. پس این‌جوری هم سی‌پلاس‌پلاس نفع می‌بره و هم سی‌شارپ.
۲۴ دی ۹۱ ، ۰۶:۳۲ احمدعلی شفیعی
یک نکته‌ی دیگه: سایت استک‌اورفو و کلا شبکه‌ی استک اکسچنج با سی‌شارپ و ASP.Net MVC نوشته شدند و این سایت (تا اون‌جایی که می‌دونم) ۹۴امین سایت دنیاست. همین‌طور سرویس جست‌وجوی بینگ و سرویس ایمیل اوت‌لوک که فکر کنم ۲۵امین سایت دنیا باشه.
در مورد این مثالی که زده شده باید بگم که آرایه‌های توی سی‌شارپ با آرایه‌های توی سی‌پلاس‌پلاس فرق دارند. یعنی یک‌سری توابع دیگه بهشون اضافه می‌شه مثلا توابع LINQ که خوب در این صورت نمی‌شه مقایسه کرد.
ولی همون‌طور که خودتون گفتید زبان‌های دات‌نت زبان‌های مدیریت‌شده هستند و کار با سخت‌افزار توشون به صورت محدود (و مدیریت‌شده) صورت می‌گیره. ولی خیلی از پروژه‌های کاربردی هستند که به سخت‌افزار نیازی ندارند. مثلا مایکروسافت که DirectX رو داره، برای دات‌نت XDA رو گزاشته و البته هیچ‌کدوم‌شون دیگه نیازی به سخت‌افزار ندارند.
و (امیدوارم) آخرین نکته: ویندوز فون ۸ با هسته‌ی ویندوز ۸ اومد و خیلی هم سریع داره پیش‌رفت می‌کنه. برنامه‌هایی که (با سی‌شارپ) برای ویندوز نوشته شدند به راحتی می‌تونند به برنامه‌های ویندوز فون تبدیل بشن. پس یعنی یک محیط کاری جدید برای سی‌شارپ.
آره خوب، مسلماً native کد همیشه سریع‌تره. ولی خیلی وقت‌ها می‌صرفه که اختلاف سرعت (همیشه ۲۰ برابر نیست که!) رو نادیده بگیرن. همونطور که خیلیا اون بیرون دارن با سی‌شارپ برنامه می‌نویسن.
ناگفته نماند که دات نت روز به روز سرعتش به native نزدیکتر میشه: http://www.codeproject.com/Articles/212856/Head-to-head-benchmark-Csharp-vs-NET
اما به هر حال دات نت خیلی پرفورمنس نزدیکی به native داره نسبت به برخی چیزها، به خصوص در مورد تحت وب‌هایی مثل php... دیدن این مقایسه هم خالی از لطف نیست: http://naspinski.net/post/AspNet-vs-php--speed-comparison.aspx
اما مشکل اساسی دات نت به نظرم چیز دیگری است. این‌که هر کسی می‌تونه بدون این‌که زبان‌های اساسی مثل سی‌پلاس‌پلاس رو یاد بگیره، بره سی‌شارپ یاد بگیره. اون موقع طرف فکر می‌کنه برنامه نویسی بلده در حالی که ممکنه یه مرتب سازی رو هم نفهمه.
به نظرم یادگیری سی‌پلاس‌پلاس بر هر زبان سطح بالایی اولویت داره :)
پیروز باشید!
۲۶ دی ۹۱ ، ۰۶:۰۱ مهدی غیاثی
یک مقایسه‌ی همه جانبه بین ASP.NET و PHP هم پیدا کردم که باز هم دیدنش خالی از لطف نیست!
http://stackoverflow.com/questions/691942/speed-of-code-execution-asp-net-mvc-versus-php

ارسال نظر

ارسال نظر آزاد است، اما اگر قبلا در بیان ثبت نام کرده اید می توانید ابتدا وارد شوید.
شما میتوانید از این تگهای html استفاده کنید:
<b> یا <strong>، <em> یا <i>، <u>، <strike> یا <s>، <sup>، <sub>، <blockquote>، <code>، <pre>، <hr>، <br>، <p>، <a href="" title="">، <span style="">، <div align="">
تجدید کد امنیتی