یک محیط کاری خوب

به دعوت صادق عزیز، سعی می‌کنم تعدادی از خصیصه‌هایی که به نظرم یک محیط کاری مناسب باید دارا باشد را بنویسم.

  • شاید مهم‌ترین چیزی که در فهرست من باشد، جدا بودن دفتر اداری و دفتر فنی است. دلایل زیادی می‌تواند داشته باشد اما ۲نمونه از اختلال‌هایی که در شرکت‌هایی که دفتر فنی/اداری یکسانی دارند دیده‌ام:
    - زمانی که در حال برنامه نویسی هستید و بازاریاب‌های شرکت در حال کار هستند. باور کنید حتی گوش دادن به موزیک با استفاده از headset نیز جواب نخواهد داد تا از شر صدا خلاص شوید.
    - وقتی کامپیوتر منشی شرکت اندکی ناز کند: فقط می‌توانم بگویم خدا نصیب برنامه نویس‌های دات‌نت (همان گرگ بیابان) هم نکند هر ۱دقیقه ۱بار شما را از پای کامپیوترتان بلند می‌کند تا مشکلی که وجود ندارد را درست کنید.
  • مخالف صمیمیت در شرکت نیستم ولی دلیلی نیز برایش نمی‌بینم. یکی از دفتر‌هایی که در آن کار می‌کردم، زمان نهار را به صورت ثابت تنظیم کرده بود و همه در در آن ساعت اتاقی جمع می‌شدند برای صرف نهار. بگذریم که من حتی در آن جمع نیز حاضر نمی‌شدم ولی به نظرم سیاست خوبی را پیش گرفته بود.
  • بدون شک اطلاع از روند پیشرفت کار همکار‌ها باعث رقابت سالم می‌شود. این که من بدانم کاری که قرار بود همکارم انجام دهد به پایان رسیده باعث می‌شود من نیز دست بجنبانم، همین طور اگر در قسمتی از کار مانده باشد که من در آن تجربه دارم می‌توانم کمکش کنم. به نظرم بهترین گزینه برای این ارتباط‌ها کوتاه نویسی با استفاده از نرم‌افزار‌هایی مثل StatusNet یا ایجاد حساب خصوصی در twitter مخصوص کار است.
  • محیط شرکت باید فقط محیط کاری باشد، جدا از مسائل مذهبی/سیاسی/قومی/… . برای نمونه اگر من روزه نمی‌گیرم (مذهبی نیستم) یا نماز می‌خوانم (مذهبی هستم) نباید باعث انگشتنما شدن من در شرکت شود.
  • شرکت از نرم‌افزار آزاد حمایت کند. شامل پشتیبانی مالی، develop کتابخانه/نرم‌افزار‌، … . منظورم آن است که انجام علاقه‌ی شخصی‌ام (گسترش نرم‌افزار آزاد) موازی با تولید محصول در شرکتی که در آن کار می‌کنم باشد.

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

  • محیط آرام – کسی با صدای بلند موسقی سنتی گوش ندهد که فردی مانند من که اهل رپ/راک است اذیت شود.
  • پیشرفت از نظر سطح دانش – نیاز به یادگیری/به‌روز بودن برنامه نویسان

پینوشت: آقایون، خانم‌ها! لطفا تکبیر به علت به روز شدن وبلاگ :P

دیدگاه‌ها(۳)

چگونه برنامه ریزی کنیم؟

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

توجه: مواردی که به آن‌ها اشاره می‌کنم تجربه‌ی شخصی بنده است و امکان دارد نادرست باشد.

  • مقایسه برنامه: مقایسه‌ی برنامه خود با برنامه‌ی دیگران درست نیست و نسخه برداری از برنامه‌ی دیگران از آن اشتباه‌تر. این کاری بود که من انجام می‌دادم و همیشه به شکست می‌رسیدم. برای نمونه سعی می‌کردم برنامه‌ی روزانه‌ی کسانی که به نظرم به شرایط پایداری در اجرای برنامه‌هایشان رسیده‌اند را اجرا کنم و از آن جایی که شرایطشان با من متفاوت بود پس از مدتی از اجرای برنامه ناامید می‌شدم یا سعی می‌کردم بدانم آقا/خانم X چند ساعت در شبانه‌روز کار می‌کند که اکنون در کارش موفق است سپس سعی می‌کردم به همان اندازه کار کنم. به هیچ شکلی این کار را انجام ندهید زیرا شرایط شما با دیگران متفاوت است و فردی که برنامه‌اش را الگوی خود قرار می‌دهید برای خود برنامه‌ریزی کرده‌است نه برای شما.
  • انتخاب هدف: من هدف‌هایم را به ۳دسته تقسیم کردم: هدف‌های بلند مدت (بزرگ)، هدف‌های میان مدت (متوسط) و هدف‌های کوتاه مدت (کوچک/روزانه/هفتگی). به نظرم برای برنامه ریزی نباید از هدف‌های بزرگ یا کوچک استفاده کرد. برای نمونه هدف بلند مدت را داشتن بدن ورزیده، کم کردن ۵گیلوگرم را هدف میان مدت و انجام حرکات ورزشی را هدف کوتاه مدت (۲روز یکبار) در نظر بگیرید. حال اگر برنامه را فقط براساس داشتن بدن ورزیده پیاده کنید پس از مدتی خسته می‌شوید زیرا ۱-۲ماه کار کرده‌اید اما بدون شک در ۱-۲ ماه به بدن ورزیده نخواهید رسید و نتیجه‌ای که گرفته‌اید نسبت به هدفتان دور است و باعث ناامیدی می‌شود. همچینین اگر فقط براساس انجام حرکات ورزشی برنامه‌ریزی کنید کم‌کاری خواهید کرد زیرا هدف انجام آن حرکات است پس اگر ۵دقیقه هم حرکات ورزشی را انجام دهید به هدف رسیده‌اید. پیشنهاد می‌کنم هدف‌های میان مدت را برای هدف برنامه‌هایتان انتخاب کنید تا از به شکلی باشند که پس از ۱-۲ماه نتیجه را درک کنید و امیدوارتر شوید همچنین از کم‌کاری جلوگیری کنید.
  • همراه: داشتن همراه در رسیدن به هدف‌ها می‌تواند کمک بسیار خوبی به شما و همراهتان باشد. به این شکل که زمان‌هایی که مشکلی برای همراهتان پیش امد او را پشتیبانی کنید و همچنین او شما را پشتیبانی کند.

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

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

اما نوبت رسید به نرم‌افزار‌هایی که استفاده می‌کنم:

  • Remember the milk: یک web application بسیار خوب برای مدیریت کار‌هاست. من آن را به jabber وصل کرده‌ام و کار‌هایی که باید انجام دهم را از این راه به من یاد آوری می‌کند.
  • Tasque: یک نرم‌افزار todo list ساده که توانایی استفاده از remember the milk را به عنوان backend دارد. پس به راحتی هر taskی که به آن اضافه کنم به remember the milk اضافه خواهد شد.

    tasque

  • Tomboy: بیش‌تر اوقات نخست یادداشت می‌نویسم و در صورت نیاز یادداشت را به فهرست کار‌هایی که باید انجام دهم تبدیل می‌کنم که این کار به لطف پلاگینی که tomboy برای کار با Tasque دارد بسار آسان است.

    tomboy

یک بار به شکل خلاصه می‌گویم: نخست با tomboy یادداشت می‌نویسم و اگر نیاز شد یادداشت‌ها را به Tasque اضافه می‌کنم که Tasque آن‌ها را به Remember the milk ارسال می‌کند. به این شکل همه چیز به یک web application ختم می‌شود و می‌توانم از هر جایی به آن دسترسی داشته باشم.

‌می‌دانم نوشته خیلی بلند شد. شاید در بعضی قسمت‌ها زیاده گویی کرده باشم یا بهتر بود مطلب را ۲قسمتی می‌کردم. در هر حال اگر می‌خواهید بیش‌تر از تجربه‌های موفق در زمینه‌ی برنامه‌ریزی بدانید پیشنهاد می‌کنم وبلاگ freeStyleMind را مطالعه کنید که از تجربه‌ی خود در تغییر عادت خوابش (سحر خیز شدن) در ۳۰ روز گفته است.

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

    دیدگاه‌ها(۱۵)

    package manager محبوب من conary

    بهترین package manager ی که با آن کار کرده‌ام conary است که مربوط به توزیع‌های برپایه‌ی rPath است. در این مطلب سعی می‌کنم آن را مورد بررسی قرار دهم و نقاط برتری و ضعف آن را مرور کنم.

    اولین چیزی که توجه من را جلب کرد روند ساده‌ی به‌روز کردن بسته‌ها بود. برای مثال فرض کنید امروز نسخه‌ی جدید GNOME-DO آمده است و من مشتاقم آن را نصب کنم. فقط کافیست به شاخه‌ی مخزن شخصی‌ام بروم و چند دستور ساده اجرا کنم تا آخرین نسخه‌ی گنوم-دو را داشته باشم:

    cvc co gnome-do:source=foresight.rpath.org@fl:2
    cd gnome-do
    vim gnome-do.recipe # تغییر نسخه‌ی نرم‌افزار
    cvc cook gnome-do.recipe

    پس از انجام مراحل بالا فایلی شبیه به gnome-do-0.8.3.1.ccs در آن شاخه ساخته می‌شود که برای نصب آن sudo conary update gnome-do-0.8.3.1.ccs را اجرا می‌کنم و تمام! من آخرین نسخه‌ی گنوم-دو را دارم. البته این یک مثال بود زیرا گنوم-دو به صورت پیش فرض در توزیعی که من استفاده می‌کنم (foresight) قرار داده شده است و به دلیل rolling release بودن آن با فاصله‌ی کمتر از ۱ روز در دسترس خواهد بود. من برای تقویم جلالی یک روش تولید (recipe) نوشته‌ام و در مخزن شخصی‌ام نیز قرار داده ام که پیشنهاد می‌کنم نگاهی به آن انداخته تا سادگی ساختن بسته در conary را بهتر درک کنید (روش‌های تولید در conary با استفاده از python نوشته می‌شوند).

    مورد بعدی که می‌خواهم به آن اشاره کنم قابلیت roll back است که در هیچ کم‌تر package manager دیگری ندیده‌ام وجود دارد (به‌روز رسانی). roll back چیست و چگونه کار می‌کند؟ اگر در توزیع خود بسته‌ای را به‌روز کنید و سیستم دچار مشکل شود به شکلی که دیگر بالا نیاید چه می‌کنید؟ conary این مشکل را با روشی بسیار عالی حل کرده است و شبیه به نرم‌افزار‌های مدیریت کد همانند git یا svn کار می‌کند. برای بازگرداندن سیستم به قبل از ایجاد مشکل کافی است سیستم را در حالت recovery بوت کنم و دستور sudo conary rollback 1 را اجرا کنم که conary در پشتیبان‌هایی که ایجاد کرده‌است می‌گردد و سیستم را به ۱ مرحله قبل باز می‌گرداند. البته لازم نیست فقط در مواردی که به مشکل برخورد کردید از آن استفاده کنید. اگر همانند من به آزمایش کردن نرم‌افزار‌ها علاقه دارید اما سیستمی پایدار نیاز دارید می‌توانید از این قابلیت استفاده کنید به این شکل که بسته‌ای از نرم‌افزاری که می‌خواهید آن را آزمایش کنید بسازید و نصب کنید پس از انجام آزمایش‌ها با استفاده از roll back بسته را به آخرین نسخه‌ی پایدار برگردانید تا همیشه سیستم در وضعیت پایدار باشد.

    مورد آخر آن که conary جزو package manager های ۲رگه است همانند توزیع‌هایی چون جنتو، آرچ و … می‌توان از آن به ۲شکل binary و source برای نصب بسته‌ها استفاده کرد.

    همان طور که پیش‌تر اشاره کرده بودم، من از fedora استفاده می‌کردم و هنوز هم فکر می‌کنم جزو بهترین توزیع‌های موجود است اما در conary تنها قابلیتی که کمبود آن را احساس می‌کنم مربوط به پلاگین presto است که جزو پلاگین‌های پیش فرض yum در fedora بود. این پلاگین به گونه‌ای عمل می‌کند که پهنای باند مصرفی را به شکل محسوسی در به‌روز رسانی‌ها کم می‌کند.

    مطالعه‌ی بیش‌تر: Introduction to Foresight Linux

    به‌روز رسانی: فدورا نیز از نسخه‌ی ۱۲ این قابلیت را پشتیبانی می‌کند (که نمی‌دانستم).

    دیدگاه‌ها(۸)