راهنمایی برای برنامه نویس‌های آینده که می خوان زبونشون رو انتخاب کنن

جادی جان منظور من این بود چه نوع زبان برنامه نویسی از بین اون دوره ها خوبه که دوستم شرکت کنه؟ جاوا؟ اوراکل؟ دات نت؟ نمیخوام آموزشگاه بهم معرفی کنی میخوام یک زبان برنامه نویسی که میدونی الان بیشتر کاربرد و بازار کار داره رو بهم بگی.

ضرب‌المثلی در دنیای برنامه نویسی هست که می گه «اشتباهی که خیلی از برنامه‌نویس‌های تازه کار می کنن اینه که برنامه‌نویسی رو با یاد گرفتن کد نوشتن به یک زبان خاص اشتباه می‌گیرن». پس توصیه اول به این دوستمون اینه که دنبال یاد گرفتن برنامه نویسی باشه نه یاد گرفتن دستور زبان یک زبان خاص. اکثر زبان‌ها در پایه به هم شبیه هستن و اگر یک زبون رو درست یاد بگیریم سوییچ کردن یا کد نوشتن به یک زبان هم‌خانواده چندان مشکل نیست. اینه که یاد گرفتن C می تونه پایه خوبی برای هر برنامه نویسی باشه و بعدش خوندن کد چند برنامه خوب (که روی گیت هاب به راحتی قابل دسترسی هستن و حتی می تونن به سادگی برنامه ای مثل yes در لینوکس باشن).

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

  1. خوندن (کتاب، راهنما، …)
  2. آموزش دیدن (کلاس)
  3. انعکاسی (دیدن و تکرار کردن)
  4. تمرین کردن (پریدن وسط استخر و دست و پا زدن)

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

اما کدوم زبون؟ فرض کنیم دقیقا دنبال یاد گرفتن یک زبون برنامه نویسی هستیم. چه زبونی بهترینه؟ نقل می کنم از سینای عزیز که

تا وقتی اهداف رو ندونیم نمی تونیم مسیر رو ارزیابی کنیم.

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

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

what_programming_lang_to_study

با توضیات بالا واضحه که یک برنامه نویس دات نت همیشه حقوق داره و همیشه در شرکت های متوسط کار داره. استرسش برای پیدا کردن کار کمه ولی در عوض در نگه داشتن کار اوضاعش خوب نیست چون هزاران نفر هر سال مجموعه مدرک های MCSE MCTS و غیره رو می گیرن و می شن برنامه نویس دات نت. در مقابل به بخشی نگاه کنین که با «پول پروژه‌ای» مشخص شده. ما الان در شرکت دو ماهه دنبال کسی می گردیم که به شکل پروژه‌ای بیاد برای ما سرورهای نود جی اس رو کلاستر و High Aavailable کنه و کم اهمیت ترین موضوع در پروسه قرارداد اینه که طرف چقدر پول می خواد. احتمالا طرف با این کار چند روزه می تونه به اندازه چند ماه برنامه نویس دات نت پول در بیاره ولی ظاهرا در کشور عزیز افراد خیلی خیلی کمی هستن که این کار رو بلد باشن چون هم در حوزه ناشناخته است و هم در حوزه تخصصی.

حالا فکر می کنم انتخاب براتون راحت تر باشه. من همیشه در حوزه ناشناخته تخصصی بودم و راستش یک محور دیگه هم در جدول کشیدم: ترکیبش با یک چیز دیگه. مثلا متخصص سیستم عاملی که مخابرات بلده. مدیر پروژه‌ای که لینوکس بلده و … این خیلی کم پیدا می شه و خیلی هم مورد نیاز نیست ولی اگر کسی شما رو بخواد.. واقعا شما رو همه جوره می خواد. در عوض ممکنه شما به این نتیجه برسین که یک کار امن و راحت می خواین و در این صورت باید نگاهی به بخش استخدام شرکت ها بندازین و ببینین الان چی بورسه. ممکنه دات نت باشه و ممکنه جاوا باشه یا اگر تصمیمتون این شده که برین سراغ استارتاپ موبایلی شخصی خودتون، معلومه که باید یا iOS یاد بگیرین یا Android Development که یک جاهایی بین جدول بالا افتاده.

توجه: جدول رو قارتی کشیدم. اصلا معنی اش این نیست که کاملا اندیشیده و دقیق است. می شه در مورد همه اجزاش حرف زد.

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

تا اینجا خوندین؟ (: پس شاید دوست داشته باشین این شماره ویژه پادکست در مورد برنامه نویسی رو هم گوش بدین.

پی نوشت آخر. گفتیم که «اشتباه برنامه نویس های جوان اینه که برنامه نویسی رو با برنامه نویسی به یک زبون خاص اشتباه میگیرن». این یعنی اگر شما برنامه نویسی رو یاد بگیرین می تونین بعدا به هر چیز دیگه سوییچ کنین. رو پایه ها تمرکز کنین و تا وقتی درک می کنین که دارین برنامه نویسی یاد میگیرین، نگران زبون نباشین.

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

صادق توی کامنت‌ها نوشته:

ضمن تایید حرف‌های جادی می‌خواستم برای کسایی که تازه می‌خوان شروع کنند یه چند تا نکته را یادآوری و تاکید کنم:
۱.سعی کنید با زبانی مثل python شروع کنید که هم زود بتونین نتیجه بگیرین و هم عادت‌های خوب کدنویسی براتون نهادینه بشه.
۲. از خوندن و یادگرفتن Design patternها و Best practiceها ولو با زبان دیگه‌ای غیر از زبان تخصصی شما پیاده‌سازی شده غفلت نکنید که موجب پشیمانیست.
۳. از ابتدای کار عادت کنید برای کدهاتون کامنت مناسب و واضح بنویسید.
۴. کد خوب بخونید (توی پروژه‌های آزاد اغلب کدها خیلی خوبند چون تعداد زیادی توش مشارکت می‌کنند)، توی توسعه پروژه‌های آزاد مشارکت کنید از گزارش باگ گرفته تا نوشتن پلاگین و …
۵. سعی کنید ارتباط‌هاتون با آدم‌های متخصص توی زمینه کاریتون زیاد کنید، از فرصت گپ زدن باعاشون استفاده کنید، توی فروم و irc فعال باشین نه فقط برای پرسیدن که برای مشارکت و پاسخ دادن.
۶. خوشبین باشید و شاد. ماری را انجام بدین که ازش لذت می‌برین. البته لذت بردن خیلی وقت‌ها به معنی آسون بودن یا پول زیاد درآوردن نیست. در ضمن سعی نکنید تقلید کنید.
۷. وقتی دارین کد می‌خونید واقعا بفهمید چی به چیه. و بد نیست فکر کنید روش بهتری برای پیاده‌سازی اون کد به ذهنتون می‌رسه یا نه.
۸. وقتی تونستید کد بقیه را سریع دیباگ کنید می‌تونید کم‌کم حس کنید که حرفه ای شدین. البته یادگرفتن انتها نداره.

  • Mirhasan

    تشکر بابت متن…خیلی خوب بود.

  • دهاتی

    پادکست سال 2008 را الان گوش دادم خیلی خوب بود. مخصوصا اون پیش بینی آخرش.
    اگه امکانش بود دوباره از همون دوستات دعوت کن تا ببینیم چقد نظر و دیدگاهشو عوض شده، هم در مورد پیش بینی و هم در مورد برنامه نویس شدن :)

    • جادی

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

  • فرید

    جادی جان واقعا ممنون میشم توی این مورد کمکم کنی!
    آیا برنامه نویسی فقط حلقه و if و for و while ئه؟ من خیلی ساله که هی کتاب میخرم ولی فقط همینا توشه! این عدد رو بگیر با اون عدد مقایسه کن بگو کدوم بزرگتره! حتی الان توی دانشگاه هم فقط در همین سطح خوندیم دوباره (رشته it )
    پس بقیه اش چی؟ چجوری باید یاد گرفت!
    البته درسته که علاقه به یادگیری دارم ولی خوب زیاد پشتکار نداشتم راستش دیگه هی ناامید شدم از بس توی زبون های مختلف سنتکس if و for رو خوندم و یه عدد گرفتم با یه عدد دیگه مقایسه اش کردم :D
    ادامه اش چیه و چجوری باید یاد گرفت؟

    • مهران

      @فرید

      دوست عزیز مهمترین توانایی برای یک برنامه‌نویس “حل مسئله” ست. به صورت خلاصه اینه که بتونی یک مسئله پیچیده رو به روش‌ها مختلف و با استفاده از تکنیک‌های مختلف به مجموعه‌ای از اجزا ساده تبدیل کنی. و یک نفر این توانایی رو با خوندن گرامر زبان‌های مختلف بدست نمیاره. توصیه من به شما اینه که یک زبان انتخاب کنی و چند پروژه ساده با اون انجام بدی. منظورم از ساده برنامه‌ای نیست که جمله nام از دنباله فیبوناتچی رو حساب کنه. برات مثال می‌زنم: من برنامه نویسی رو با پایتون یاد گرفتم. بعد از اینکه یه کتاب راجع به پایتون رو کامل خوندم، یه پروژه برای خودم تعریف کردم. یه برنامه برای چت در شبکه محلی (LAN). توی این مسیر با مفاهیمی مثل Socket و tcp/ip و client/server آشنا شدم. و همچنین یک کتابخانه برای واسط گرافیکی (wxpython). برای اینکه برنامه‌نویسی یاد بگیری لازمه که برنامه بنویسی. پس برای خودت پروژه تعریف کن و تا جایی که می تونی سعی کن انجامشون بدی.

    • ف. ف

      (با عرض پوزش به خاطر دخالت!)
      به نظر من که یادگیری الگوریتم نوشتن مهمترین چیزه این که چه الگوریتمی استفاده کنیم که سریعتر اجرا بشه یا کمتر حافظه مصرف کنه یا همچین چیزایی که سرعتو یا مصرفه توان یا حافظه و در کل هزینرو کاهش بده!
      کتاب CLRS فک می کنم چیزه خیلی خوبیه در این زمینه

    • جادی

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

  • توضیح کامل و عالی بود.

  • سجاد

    من تا جایی که تو گوگل گشتم هیچ جا نمیگه ما دقیقا دنبال چه skill هایی هستیم.
    کلا فاز اینجوریه که how you think , Googleyness و …
    لینکی دارید که آگهی های شغلی کله گنده ها (حالا غیر گوگل) داشته باشه؟

    • جادی

      منظورت چیه؟ می گن چیکاره می خوان با چه مهارت هایی دیگه. مثلا اینجا: http://www.google.com/about/jobs/teams/engineering/ روی یکی از کشورهای سمت راست کلیک می کنی و شغل ها می یان و رووشن کلیک می کنی مثلا می گه ما کسی رو لازم داریم با فلان مهارت و ترجیحا فلان مهارت و فلان مدرک ها.

  • گیر سه پیج

    سلام جادی جان.. خوبی.. البته ما دات نت کارا این قدر هم داغون و زاقارت نیستیم .. :(

    • جادی

      هاها ما بیجا کردیم بگیم شما زاغارت (؟) هستین (: تنها بحثی که شد اینه که دست زیاده و هر جا که دست زیاد باشه دستمزد می یاد پایین. این متن هم دقیقا می گه اگر یک برنامه نویس مثلا ای اس پی دات نت معمولی باشی حتما کار گیرت می یاد ولی صد در صد دستمزدت نسبت به یک نفر که روبی کار می کنه و کار پیدا کرده، پایین تره (:

      • گیر سه پیچ

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

  • Sourena

    جادی جان زبان برنامه نویسی تحت وب چی الان رو بورسه ؟
    بعدشم میخواستم بدونم با زبان های مارک آپی مثل html 5 و css 3 هم میشه این روزا پول در اوورد و بازار کارش چطوره یعنی میشه با دونستنشون کار گیر اوورد و تا چه حد باید توشون متخصص بشیم اگر هم یه مرجع یا سایت خوب واسشون معرفی کنی ممنون میشم :)

    • جادی

      خب دقیقا همین مقاله می گه که از هر چیز می شه پول در آورد ولی بستگی به مسیری داره که می خوای بری. پیشنهاد من PHP است برای شروع و بعد دونستن چیزهای مدرن تر مثل NodeJS یا Python و اینجور چیزها به همراه دونستن دقیق کار با drupal با دیتابیس های جدیدتری مثل mongo یا حتی postgresql که یاد گرفتنش برای کسی که mysql بلده سریعه ولی کلی تفاوت ایجاد می کنه با بقیه.

  • پیشرو

    “اشتباه برنامه نویس های جوان اینه که برنامه نویسی رو با برنامه نویسی به یک زبون خاص اشتباه میگیرن”. برنامه نویسی رو به صورت پایه چطور می‌شه یاد گرفت؟ از کجا باید شروع کرد؟

    • جادی

      توی کامنت ها کلی راهنمایی شده (:

  • SILK ROAD

    هی جادی غلط املایی خودت رو در پست رادیو گیک 33 نمی خوای درست کنی Draed Pirate Roberts اشتباهه جای a و e رو عوض کن Dread یعنی وحشت . این پست رو هم می تونی حذف کنی bye

    • جادی

      بالاخره اصلاح کردم (:

  • سلام
    من خودم سالهاست برنامه نویسی میکنم و تفریبن 3-4 تا زبان رو تست کردم و کار کردم.
    ولی سوالی که من از همون اول برام وجود داشت و الان همیشه از من میپرسن اینه:
    راه یاد گرفتن برنامه نویسی (بدون توجه به یه زبان خاص) چیه.
    من خودم یه جورایی با سعی و خطا یاد گرفتم. یعنی امتحان کار کردن با زبان های مختلف

    • فرشاد

      نظر شخصی:
      در درجه اول نیاز مشتری
      بعدش درک مساله و پیدا کردن راه حل برای اون
      بعد پیدا کردن پلتفرمی که بتونی باهاش مساله رو حل کنی (یعنی API های مورد نیازت رو داره؟، آیا از TCP پشتیبانی میکنه یا نه؟، چه امکاناتی برای دسترسی به بانک اطلاعاتی مورد نیازت داره و …)
      حالا اینجاست که باید زبان برنامه‌نویسی پلتفرم مورد نظرت رو بدونی!

      برای مثال من با توجه به اطلاعات محدود خودم 10 سال پیش میخواستم از طریق پورت RS232 داده هایی رو به یک بورد الکترونیکی ارسال و دریافت کنم. اون زمان دلفی رو انتخاب کردم. ولی امروز هم با همون دلفی میتونم برنامه های کاملی بسازم.

      • Dariush Abbasi

        سری fundation of programming از lynda با اجرای عالی سلطان دو دنیا سایمون الدایس :)

        • فرشاد

          ایول دوست عزیز! گل گفتی. من چندتاییشو دارم (:

        • رسول

          اقا این چیه؟ به ما هم لینک دانلود میتونید بدبد‍!؟

  • سعيد

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

  • احسان

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

  • ممنون بابت این نوشته خوب مدتی بود میخواستم به یک نفر یک راهنما خوب معرفی کنم که به زبان فارسی هم باشه.

    • محمد مهدی

      اقا جالب بود ممنون .

  • SA

    درود.
    من برنامه نویس نیستم. ولی تجربه خودم رو مینویسم.

    توی برنامه های تحلیلی که من ازش برای برخی کارم استفاده میکنم. بنا به احتیاجات میشه خودت یه به اصطلاح اسکریپت بنویسی و ازش بهره ببری. که پایه اون زبون سی هست با یک سری دستورات اضافه که مختص به اون برنامه هست.

    یکی از دوستانم داشت برای بدست آوردن موضوعی اسکریپتی مینوشت. که از من کمک خواست. تا موئلفه های لازم رو با هم برسی کنیم. من عادت به نوشتن و ترسیم دارم. دوستم در حدود دوسال بود که برنامه مینوشت. من هم تا اون روز هیچ نیازی به برنامه نویسی نداشتم. چیزی هم نمیدونستم. ولی فلورچارت بلدم بابت برنامه ریزی کاری و ترسیم افکارم. من چارتی برای برنامه کشیدم. که دوستم گفت تو برنامه نویسی بلدی دوروغ میگی بلد نیستم. بگذریم.

    من چارت کشیدم اون برنامه نوشت. اون چارت کشیدن یاد نگرفت. من در مدت 3-4ساعت پایه برنامه نویسی سی رو یاد گرفتم. و بعدش بهش میگفتم باید این کارو کنی وی اون کارو کنی. یه اکسپرت نوشتیم که هنوز هم داریم ازش استفاده میکنیم. یا بهتر بگم من نوشتم.

    برنامه نویس بودن سخت نیست. اما برنامه نویس موفق بودن سخته. شما باید علاقه زیادی به ریاضیات و فیزیک وهندسه و… داشته باشید. شما باید بلد باشید افکارتون رو ترسیم کنید. قبل از برنامه نویسی فلورچارت رو فول بشید تا حدی که بتونی روزمه زندگیتون ترسیم کنید. از تستهای روانشناسی استفاده کنید ببینید خلاقیت دارید یا نه…
    یک سری از تستهای رونشناسی هست که نشون میده شما چند درصد از جنس خودتون هستید چند درصد از جنس مخالف… اگر رصد بالایی از جنس خودتون هستید. مخصوصا در آقایان خلاقیت زیادی نمیتوند کسب کنید.

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

  • فرزاد

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

  • ali

    salam aghaye jadi khaheshan javab bedid chera site naranji dg update nemish agaram toonestid yek email behem bezanid khaheshan

  • فرشاد

    مثل همیشه عالی.شاید من از اون کسایی باشم که تا حدودی به توصیه شما عمل کردم.مهندس نرم افزاری که gis بلده!و تایید می کنم صحبتات رو.

  • احسان

    راستی جادی به نظرت طراحی و توسعه وب کجای نمودار قرار میگیره؟)php(

    • جادی

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

  • احسان

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

    • جادی

      سانسورچی های خبیث (: اصلاحش می کنم

  • من یک ایمیل در خصوص اینکه گفته بودی «دنبال کسی می گردیم که به شکل پروژه‌ای بیاد برای ما سرورهای نود جی اس رو کلاستر و High Aavailable کنه» ارسال کردم به همون ایمیلی که اشتراک وبلاگ از طرفش ارسال می‌شه. اگر لازمه بگو به یک آدرس دیگه ایمیل بزنم.

    خیلی کنجکاوم که پاسخت چیه :D ممنون

  • فرشاد

    تجربه شخصی: من مدت زیادیه با Delphi (به قول دوستان همون Pascal ویژوال) برنامه مینویسم. مهندسی الکترونیک دارم و در کارخونه ای کار میکنم که تولیدکننده اگزوز اتومبیل هست! تونستم نرم‌افزاری بسازم (این اصلاً به این معنی نیست که من یک برنامه‌نویس هستم!) که باهاش خط تولید رو اتوماتیک برنامه‌ریزی کنیم (که البته جزئیات کار این کارخونه خیلی زیاده). ولی دریغ از کوچکترین قدردانی!!!
    خواستم خواهش کنم پستی رو به مبحث بازار کار در ایران اختصاص بدید. به‌نظرم کسی که میخواد برنامه‌نویس بشه بهتره اول انتهای خط رو ببینه. برنامه‌نویس بودن در ایران با توجه به انتظار و سطح سواد مشتری کاری بسیار فرسایشیست!

    • احسان

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

  • saeedek

    خیلی مطلب خوبی بود و واقعا لازم بود که این سوال خیلی بزرگ توی چند پاراگراف روشن بشه.
    1 سوال داشتم که امکانش هست که چند نمونه دیگه از اونهایی که سمت خاص و ناشناخته هستند معرفی کنید؟
    ممنون.

    • جادی

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

  • پی

    جادی دیشب بعد اینکه عکس gif. رو دیدم تو خواب دیدمت که
    رفتیم تو یه ده تو وسط یه جمع که قرار بود در مورد شبکه بحث بشه
    داشتیم ورق بازی میکردیم
    lol

    • جادی

      هه هه عالی (: کلی تصور کردم خندیدم تو فکرم.

  • underdown

    hey dude
    پیدا کردن یک زبان برنامه نویسی زیاد کار سختی نیست و مساله مهمی هم نیست.شما اول یک ایده ناب پیدا کن بعد حالا اگه با همین سی شارپ هم که بالای نمودار هست و ظاهرا عموم برنامه نویس ها ازش استفاده می کنن بتونی ایده ات رو پیاده سازی کنی و بازخورد هم بگیری از ایده ات اونموقع است که همه میگن (به به چه چه) این است سی شار‍ پ.پس ببین شخصا با کدومش راحت تری و با کدومش میتونی ایده ات رو پیاده سازی کنی یا اگر هم فعلا ایده ای نداری اون برنامه ای که مورد علاقه ات هست و دوست داری پیاده سازی اش کنی ببین کدوم زبان این امکان رو بهت میده و با کدومش راحت تری.پس به جا این که این همه cpu usage رو سر انتخاب زبان برنامه نویسی بالا ببریم ببینیم frame wok های جدید چطور دارن پیاده سازی میشن تکنولوژی های جدید چیه؟! چطوری میشه این ها رو با هم ترکیب کرد رو الگوریتم ها کار کنیم و…. .فکر میکنم کشیدن چارت بالا کار جالبی نبود ولی با جادی موافقم که پیدا کردن ذهنیت زبان برنامه نویسی خیلی مهم تره.

  • Fe2+

    سلام جادی
    اول این که از مطالب عالیت واقعا ممنون
    دوم
    من این حرفت رو که میگی باید برنامه نویسی رو یاد گرفت نه زبون برنامه نویسی رو به صورت منطقی قبول دارم ولی به صورت عملی نمیدونم واقعا باید چی رو یاد بگیرم؟؟ چه چیزهایی مهم هستند یا به چه چیزهایی باید توجه کرد؟ از کجا باید بفهمیم چه چیزی رو باید یادبگیریم وقتی خیلی چیزها رو اصلا نمی‌دونیم که وجود داره؟ :(

    • جادی

      تو کامنت ها خیلی صحبت شده. کامنت ها رو بخونی می بینی.

  • امید

    سلام، مرسی از پست خوبت. فقط خواستم یه چیزیو بگم که مدرک MCSE مربوط به برنامه نویسیس نمیشه، اون دوره ای که برنامه نویسی تکنولوژی های ویندوز رو شامل میشه قبلا اسمش MCSD بود و الان شده MCTS

    • جادی

      مرسی. به شما اعتماد کرده ادیت کردم (:

  • سلام
    راجع به nodejs برات توی فیسبوک پیام گذاشتم، لطفا چک کن.

  • Sourena

    این جادی با وب و زبان های تحت وب مشکل داره نمیدونم چه بدی ازشون دیده که هیچی در موردشون نمیگه و راهنمایی هم نمیکنه :-(

    • جادی

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

  • راستشو بخواهید من نمی تونم به خودم بگم برنامه نویس چون در ابتدای راهم ولی به نظرم دانسته های ریاضی هندسه و. الگوریتم خیلی خیلی می تونه در پیشرفت آدم موثر باشه یه کتاب می خوندم توش نوشته بود چیزی که یک برنامه نویس حرفه ای متمایز می کنه الگوریتم است. در مورد الگوریتم می تونید کتاب CLRS رو بخونید هم جمع و جور هم کامل،من از زمان دبیرستان تا حالا هفت زبان برنامه نویسی تست کردم ولی به نظرم این 4 تا تا خیلی عالی هستند سی شارپ، پایتون،سی پلاس پلاس، جاوا که من دو تای اول بیشتر پیشنهاد می کنم.به نظرم یه برنامه نویس حرفه ای باید چند زبان با کارکرد های مختلف بلد باشه. من خودم بیشتر با سی پلاس پلاس و سی شارپ کد می زنم.برای یادگیری یک زبان پایه حتما سی پلاس پلاس رو پیشنهاد می کنم .

    • امید

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

      • از کتاب
        The art of computer programming
        که هفت هشت هزار صفحه است که بهتره :)

  • ضمن تایید حرف‌های جادی می‌خواستم برای کسایی که تازه می‌خوان شروع کنند یه چند تا نکته را یادآوری و تاکید کنم:
    ۱.سعی کنید با زبانی مثل python شروع کنید که هم زود بتونین نتیجه بگیرین و هم عادت‌های خوب کدنویسی براتون نهادینه بشه.
    ۲. از خوندن و یادگرفتن Design patternها و Best practiceها ولو با زبان دیگه‌ای غیر از زبان تخصصی شما پیاده‌سازی شده غفلت نکنید که موجب پشیمانیست.
    ۳. از ابتدای کار عادت کنید برای کدهاتون کامنت مناسب و واضح بنویسید.
    ۴. کد خوب بخونید (توی پروژه‌های آزاد اغلب کدها خیلی خوبند چون تعداد زیادی توش مشارکت می‌کنند)، توی توسعه پروژه‌های آزاد مشارکت کنید از گزارش باگ گرفته تا نوشتن پلاگین و …
    ۵. سعی کنید ارتباط‌هاتون با آدم‌های متخصص توی زمینه کاریتون زیاد کنید، از فرصت گپ زدن باعاشون استفاده کنید، توی فروم و irc فعال باشین نه فقط برای پرسیدن که برای مشارکت و پاسخ دادن.
    ۶. خوشبین باشید و شاد. ماری را انجام بدین که ازش لذت می‌برین. البته لذت بردن خیلی وقت‌ها به معنی آسون بودن یا پول زیاد درآوردن نیست. در ضمن سعی نکنید تقلید کنید.
    ۷. وقتی دارین کد می‌خونید واقعا بفهمید چی به چیه. و بد نیست فکر کنید روش بهتری برای پیاده‌سازی اون کد به ذهنتون می‌رسه یا نه.
    ۸. وقتی تونستید کد بقیه را سریع دیباگ کنید می‌تونید کم‌کم حس کنید که حرفه ای شدین. البته یادگرفتن انتها نداره.

    • جادی

      مرسی از توضیحات خوب و مفید. اضافه می کنم به پایین متن اصلی.

  • شهریار

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

    • جادی

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

  • در مورد اینکه 2ماهه دنبال یکی میگردین که node.js کانفیگ کنه. یعنی RnD تو شرکتی که کار میکنی اینقدر ضعیفه که هنوز نمیدونه محصولی که stable release نداره به درد production line نمیخوره؟
    جاوا رو خیلی دست کم گرفتین!!! کتابخونه معادل node.js که پارالل هم کار بکنه تو جاوا هست. مشاوره خواستین بگین :)

    • علی

      شما نظر ندی بهتره :))
      ایرانیا ماشالا تک تک خودشونو عقل کل میدونن :))

      • آقای باسواد!
        یه نکته : شما قبل از اظهار نظر یاد بگیر چطور بحث کنی! بی خرد جان جمع بستن یک جامعه نشان از حماقت گوینده میده!
        در مورد نود شرط میبندم حتی نقشه راهش رو هم نخوندی وقتی هنوز به نسخه 1 نرسیده حتماً دلیلی داشته.
        در مورد جاوا آقای باسواد! اینو ببین http://www.eclipse.org/gemini/
        این وب سرور سریعترین وب سرور دنیاس از نظر کارآیی که جاوا هست.
        در مورد معادل نود توی جاوا بهتره یه چیزی به اسم vertx.io رو مطالعه کنی که خدا رو شکر انگاری هنوز به گوش هیپسترهای ایرونی نرسیده اسمش که یکیش هم تو باشی.
        البته چه بسا شاید دارم اشتباه میکنم همینقدر اطلاعات کم هم بهت میدم چون تو و امثال تو دقیقاً کسایی هستن که دنیای آی تی اصلاً بهشون نیازی نداره!

        • علی

          شما هر وقت تواضع و کمی ادب یاد گرفتی، جامعه IT بهت نیاز پیدا می‌کنه ;)

          • جالبه! این خود بی نزاکتت بود که سر این بحث رو باز کردی و به من و ایرانیها توهین کردی، حالا دایه ادب دست گرفتی؟
            یه اصطلاح عامیانه هست برای امثال تویی که ضایع میشن ولی از رو نمیرن دو قسمت داره ولی من فقط میتونم قسمت اولش رو بنویسم “…. پررو” اصطلاحی دقیقیه که برای امثال تو ساخته شده.

            • علی

              بله رفتار من اشتباه بود، عذرخواهی می‌کنم.
              با این حال لطفا هنگام راهنمایی تواضع رو رعایت کنید ;)

              • در جواب علی : اوکی پس صلح میکنیم، قصد بی ادبی هم نداشتم!

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

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

                بازهم میگم من خودم رو بالاتر از کسی ندونستم، این تنها زاییده ذهن شما بوده!!!

        • امیررضا

          خب راست میگه دیگه، خودتو عقل کل میدونی …
          حالا شاید یادش رفته بزنه “اکثر” ایرانی ها ولی در کل راست گفته …
          حالا خوبه اینجا جهان سومه و گرنه وا ویلا که چه گردو خاکی راه مینداختی وحید … :))
          ضمناً : قرار نیست هرچی که شما گفتی صحیح باشه … دم از مطالعه هم نزن …

  • احسان

    جادی چرا راجع به وب با پی اچ پی و… جواب منو و بچه ها رو ندادی؟

    • جادی

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

  • بهادر

    جادی جان jadi.net هم زبان برنامه نویسی مشحور خاصه !!!؟؟؟؟ :v

    • جادی

      بامزه بود (:

  • رسول

    جادی آی هو کوئسشن :D

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

  • وفا

    می گم جادی، من یه اسکریپت برا لینوکس نوشتم که سرورم رو بازه های زمانیی که براش مشخص کردم از نظر سی‌پی‌یو و رم چک میکنه، اگه سرورم خیلی بیسی باشه، اول سرویس مورد نظر ریست میشه، اگه باز فری نشه، سرور رو ریست میکنه.
    حالا منو استخدام میکنی؟
    تازه لاگ هم ایجاد میکنه!
    میتونم اینو رو چندتا سرور اجرا کنم. کلاستر های کلاستر

    • جادی

      هه هه نه این کافی نیست (: ولی اسکریپت خوبیه و گسترشش بده (:

  • Pingback: شنا در سطح یا غواصی در اعماق: نیاز به دانایی در بازار نرم افزار ایران | تجربه های پراکنده()

  • خب خیلی دیر رسیدم، اما نکته ای که بین این همه کامنت ندیدم و دوست دارم اضافه کنم اینه که از توجه به زبان های توصیفی ( به صورت خاص تر تابعی ) غافل نشید.
    برنامه نویسی با این زبان ها میتونه دید فوق العاده ای به آدم بده. حداقل هم اینکه مبهوت خواهید شد از اینکه تا چه حد میشه یک مساله رو به صورت دیگری دید و حل کرد. ( به عنوان مثال بگردید دنبال quicksort که یه صورت functional پیاده سازی شده باشه )
    یکی از مقالات کلاسیک کامپیوتر به نام Teach Yourself Programming in Ten Years از آقا پیتر نورویگ کلا در رابطه با زبان های برنامه نویسی است. در انتهای مقاله کتابی به نام sicp رو معرفی کرده و گفته میتونه محک خوبی باشه برای اینکه آیا روحیات شما مناسب برای این کار هست یا نه. در این کتاب از زبان اسکیم استفاده شده. اگر تونستید یه نگاهی بندازید.

  • محمد مهدی

    سلام
    روزتان بخیر
    ممنون بابت همه مطالب خوبتون خیلی کمکم کرد تو این زمینه ها.