اومدیم چین

23 01 2011

هیچ چی دیگه. همین. من و محمد رضا اومدیم چین داریم با پارسا کد می‌زنیم. تا اینجاش که خیلی باحال بوده تا ببینیم زین پس چه‌جوری میشه 🙂





فایرفاکس برای بچه خفن ها

13 06 2010

درود بسیار بر دوستان

شده زمان ول چرخی تو اینترنت با خودتون بگین کاش جای دید براتون بیشتر بود ؟ خوب من امروز شما رو با یک سری افزونه های فایرفاکس آشنا می کنم که دقیقا همین کار رو می کنن و یکی دو تا هم قرتی بازی برای رنگ و لعاب و دو تا هم مدیر دانلود که یکیش پیشنهاد خودمه و دیگریش رو آیدین خیلی باهاش حال می کنه. پیش از خوندن دنباله ی داستان توجه شما را به چند نکته جلب می کنم: نخست اینکه پیوندهایی که دادم برای نسخه ی ویندوزی این افزونه هاست. دوم اینکه اگر کاربر لینکوس هستید میتونید اینها رو در گوگل یا سایت افزنه های فایر فاکس جستجو کنید یا اینکه از منوی «Tools» گزینه ی «Add-ons» رو انتخاب کنید و از اون یکی راه نصبشون کنید. از همه مهم تر اینکه آخرین نسخه ی فایر فاکس رو بریزید چون برخی از این افزونه ها روی نسخه های دیگه درست و درمون کار نمی کنند.

فایر فاکس من با همه این داستانها

رفع شر نوار عنوان

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

Hide Caption Titlebar Plus

رو نصب کنید

نوار عنوان حذف شده

منوهای فشرده

کالا خیلی ضایع است که منوها یک نوار از پهنای مانیتور رو میگیرند! گام بعدی اینه که نوار منو رو یک کم فشرده کنیم. یعنی در واقع بیشتر از یک کم. برای این کار افزونه

Compact Menu 2

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

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

تب ها در بالا

این گوگل کروم یک حرکتی زده خیلی خوبه اونم اینه که تب ها رو برده بالای همه چیز. خیلی راه دست و خوبه. برای اینکه همین فاز رو در فایرفاکس ببرین افزونه ی

Tabs on Top

رو نصب کنید

تب ها رفتن بالا

خر خون کثیف

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

Full Flat

رو نصب کنید.

تب های رنگی و نوارپیشرفت به سبک سافاری

وقتی تم رو نصب کردین شاید به نظرتون زیادی مسطح و بی رنگ بیاد. اگر این گونه است افزونه های

Colorfull Tabs

و

Fission

رو هم نصب کنید تا یک رنگ و لعابی به داستان داده باشین.

مدیر دانلود

برای مدیر دانلود پیشنهاد من اینه

DownThemAll

اما اینو بگم که خیلی دنگ و فنگ داره و اگر یک مدیر دانلود حرفه ای نمی خواین باید این یکی رو نصب کنید

Download Statusbar

که خیلی سبک تر و راه دست تره





خوف شبکه – آپی معتبر و نامعتبر

29 03 2010

درود بسیار

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

تعریف خدمات دسترسی به اینترنت

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

نشانی آی‌پی معتبر و نامعتبر

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

از کجا بدونم داستان آی‌پی من چیه ؟

ساده‌ترین راه اینه که از خود ای‌اس‌پی تون بپرسید که آی‌پی‌ هاشون معتبر هستند یا خیر. برخی جاها بجای معتبر و نا معتبر خصوصی و عمومی هم میگند که نادرسته و معنی‌دیگری میده اما  خیلی رایجه (عمومی = معتبر  ، خصوصی = نامعتبر). راه حرفه‌ای ترش اینه که ببینید آی‌پی شما در بازه‌ی آی‌پی های خصوصی هست یا نه. اگر بود یعنی نامعتبره  اما اگر نبود یعنی آی‌پی تون معتبره. این محدوده‌ها آی پی های خصوصی(نامعتبر) هستند

۱۹۲.۱۶۸.۰.۰/۱۶ (192.168.x.y  0 < x,y < 255 )
10.0.0.0/24    (10.x.y.z 0 < x,y,z < 255)
127.16.0.0/12  (from 127.16.0.0 to 127.31.255.255)

اگر آی‌پی شما توی هر یکی از این بازه‌هاست نامعتبره و نمیشه به شما وصل شد اما در غیر اینصورت معتبره. برای نمونه این نشانی‌های آی‌پی

188.121.131.1۰۰ , 85.198.19.131

معتبر هستند چون در هیچیک از بازه‌های خصوصی نیستند اما اینها همه‌شون نامعتبر هستند چون خصوصی هستند:

۱۹۲.۱۶۸.۰.۱۲, 192.168.23.56, 10.34.0.78, 172.16.23.67

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

http://myipaddress.com

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

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

http://www.canyouseeme.org

http://www.yougetsignal.com/tools/open-ports

نشانی آی‌پی تون رو خود سایت تشخیص میده و باید شماره‌ی پورتی که می‌خواهید رو وارد کنید ( برای‌ نمونه پورت وب یا تورنت ) و ببینید که میشه به شما وصل شد یا خیر. اگر شد که هیچ اگر نشد و تا اینجاشو درست اومده باشین به احتمال بسیار بالا خودتون فایروال‌ی  دارین که داره دسترسی رو میبنده یا اینکه آی‌اس‌پی تون دسترسی رو بسته.

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

خب تا اینجاشو داشته باشین تا بعد.

خلاصه

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

  • نشانی آی‌پی : ‌‌IP Address
  • نشانی آی‌پی خصوصی : Private ip address
  • نشانی آی‌پی نامعتبر : Invalid ip address
  • نشانی آی‌پی عمومی : Public ip address
  • نشانی آی‌پی معتبر : Invalid ip address
  • بازه‌ی آی‌پی : IP Range
  • برگردان نشانی شبکه : Network Address Translation – NAT
  • پروکسی : Proxy
  • کش : Cache
  • پورت : Port
  • تورنت : Torrent
  • اشتراک فایل : File Sharing
  • دسترسی (اتصال) مستقیم به اینترنت : Direct Internet Access – Connection
  • دسترسی (اتصال) غیر مستقیم به اینترنت : Indirect Internet Access – Connection




مهندسی نرم‌افزار – بخش پنجم (فاز تحلیل – مخ‌زنی)

23 12 2009

درود بر دوستان. چون بخش چهارم نامش «آشنایی» بود با خودم گفتم این بخش نامش میشه «مخ‌زنی» .شما پس از اینکه آشنا میشین چیکار می‌کنین؟ من که میرم تو کار مخ‌زنی

نخست یک بازخوانی از گذشته. تا اینجای کار گفتم که مهندسی نرم‌افزار در تلاشه تا فرآیند دشوار و پیچیده‌ی ساخت نرم‌افزار رو به بخشهای کوچکتر و ساده‌تری بشکنه تا کار انجام بشه. در بزرگترین بخش‌بندی  سرتاسر چرخه‌ی زندگی نرم‌افزار رو به چند «فاز» تقسیم می‌کنند که هر کدوم یک بخشی از کار رو دربردارند. نخستین این فازها فاز تحلیله که باهاش آشنا شدیم و فهمیدیم که به صورت مسئله کار داره و نه به راه حل یا پیاده سازی اون. در این نوشته فاز تحلیل رو بیشتر می‌شکافیم

صورت مسئله

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

نیازمندیها

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

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

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

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

نیازمندیهای کارکردی می‌گویند که نرم‌افزار چه کاری انجام می‌دهد و نیازمندیهای غیرکارکردی مشخصات نرم‌افزار را از جنبه‌هایی غیر از کارکردهای آن تعریف می‌کنند

در نوشته‌ی بعدی میگم که چه جوری میشه نیازمندیها رو بدست آورد و اونها رو نوشت و به یوز کیس هم میرسیم انشاء الله

  • نیازمندیها :‌ Requirements
  • کارکرد : Function
  • کارکردهای نرم‌افزار –  کارهایی که انجام میده : ‌Functionality
  • نیازمندیهای کارکردی : Functional Requirements
  • نیازمندیهای غیر کارکردی : Non-functional Requirements





مهندسی نرم‌افزار – چرا چیزایی که میخونیم رو نمی‌فهمیم؟

11 12 2009

اولا که خودت نمی‌فهمی چی داری میخونی! دوما که … حالا مونده‌اش رو بخون شاید این‌بار فهمیدی

درود بسیار بر دوستان گرامی. میدونم تو دلتون چی میگین و کاملا حق با شماست. گرفتار بودم بابا! هم کاری هم احساسی هم غیر کاری و غیر احساسی. حال و حوصله‌ی مقدمه چینی هم ندارم پس میریم سر اصل مطلب.

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

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

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

نتیجه رو براتون کوتاه می‌کنم:

  • برخی مفاهیم برای همه جور نرم‌افزاری برقراره (کوچیک و بزرگ) اما برخی مفاهیم تنها برای نرم‌افزارهای بزرگ و پیجیده معنی میده. برخی مفاهیم تنها زمانی معنی میده که کار تیمی کنید و برخی  دیگر زمانی که در تنگنای زمانی باشید یا براستی با یک مشتری سر و کله بزنید.
  • اون چیزهایی که برای نرم‌افزار های حقیقی (= بزرگ و پیچیده و احتملا نیازمند کار تیمی) معنی میده رو نمی‌تونید با کتاب خوندن و یا نوشتن پروژه‌های دانشگاهی  و کلیشه‌ای یاد بگیرید
  • پس برین برای خودتون پروژه تعریف کنید و با کله برین توش تا بفهمین چی شد





تمدید شرمندگی

11 11 2009

دیگه روم نمیشه تو چشمای داش علی نگاه کنم

درود بسیار بر دوستان. این روزا شدیدا گرفتار بحث آِی‌اس‌پی بودم. یک سرویس سخت داشتیم و دارم یک نرم‌افزار اختصاصی مدیریت اتصالات پی‌پی‌پی روی لینوکس می‌نویسم که پهنای باند و این چیزا رو مدیریت کنه. به جون ماردم بلاگو ول نکردم ها





نظر خواهی

24 10 2009

درود. برای تنوع چند تا نظر‌خواهی گذاشتم توی سایت. اگر تزی دارین بدین که اونم بگذاریم توی سایت