تکرار تاریخ

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

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

حدود ۱۰ سال پیش یک انفجار مشابه رخ داد: عصر دات کام. ظهور سایت‌ها و تجارت‌های اینترنتی فراوان، رشد شدید برنامه‌های تحت وب و ظهور و بلوغ شرکت‌هایی مثل گوگل و یاهو.

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

ترس از دست دادن اطلاعات

هر کسی در زندگی‌اش ترس‌هایی دارد. یکی از ترس‌هایی که گریبانگر ما شده است ترس از دست دادن اطلاعات است. اطلاعات hostingهای مختلف، applicationهای مختلف نصب شده در IISها، user name و passwordهای شخصی و کاربران، دیتابیس سایت‌های مختلف، مطالب و عکس‌های وبلاگ‌ها، حفظ مالکیت domainها، حفظ page rank به دست آمده از گوگل، از دست ندادن قدرت SEO، تنظیمات موبایل، تنظیمات مودم، divert تلفن‌های مختلف و ده‌ها چیز دیگر.

در کنار این ترس‌ها اضافه کنید مشکلات اعتیاد به کار، اعتیاد به اینترنت، اعتیاد به gmail و سرویس‌های اجتماعی، اعتیاد به ORM و…

خدا به ما رحم کند با این ترس‌ها و عادت‌ها.

ضرورت تکنولوژی

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

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

شکست نظامی ناشی از عدم استفاده از تکنولوژی روز فقط مختص به ما نیست:

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

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

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

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

می‌دانستید روزهایی در بورس تهران وجود داشته که انجام معاملات متوقف شده آن هم به این علت که نرم‌افزار هدایت معاملات، توانایی پردازش ارقامی بزرگتر از یک حد معین را نداشته؟ می‌دانستید سال‌هاست سازمان امور مالیاتی کشور به دنبال شرکتی می‌گردد که بتواند یک نرم‌افزار جامع مالیاتی تهیه کند ولی موفق نمی‌شود؟ می‌دانستید که یکی از نهادهای مهم کشور هرگز موفق نشده برای رفع نیازهای داخلی خودش به یک نرم‌افزار با قابلیت image processing از یک شرکت داخلی نرم‌افزار تهیه کند؟ آیا می‌دانستید که در زمان شروع پروژه کارت ملی شایع بود که به علت ناتوانی ایرانی‌ها، یک شرکت هندی نرم‌افزارهای مورد نیاز برای پروژه کارت ملی را تهیه کرده؟ آیا می‌دانستید…

متاسفانه بیشتر این نرم‌افزارها با وجود تعدد شرکت‌های نرم‌افزاری داخلی از منابع خارج از کشور تهیه شدند. یکی از علل مهم این شکست، تکنولوژی ضعیف شرکت‌های نرم‌افزار داخلی بوده و هست. البته ضعف تکنولوژی شرکت‌های نرم‌افزاری نه تنها باعث جا ماندن آنها از رقبای خارجی شده بلکه مزیت رقابتی آنها را در بازار داخلی هم به شدت کاهش داده که خودش بحث جداگانه‌ای است.

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

ترس و گیجی تکنولوژیک

کنفرانس BUILD مایکروسافت در کنار همه اخبار داغ و هیجان انگیزی که راجع به ویندوز ۸ داشت، مثل هر خبر تکنولوژیک (کامپیوتر/نرم‌افزار) دیگری همراه بود با یک ترس قدیمی از رو آمدن چیزهای جدیدی که مجبوریم برای ماندن در دنیای برنامه‌نویسی دیر یا زود آنها را یاد گرفته و با آنها کار کنیم. البته منظور از ترس نه این که از یاد گرفتن چیزهای جدید متنفر و فراری باشیم. بلکه نگرانی از وقتی است که باید مجدداً گذاشته شده و تجربیات قبلی (نه کل آنها) است که باید فراموش شوند. همیشه با تغییر عمده تکنولوژی‌های نرم‌افزاری این نگرانی وجود دارد که این بار نتوانیم خودمان را به موقع برسانیم و عنان کار را از دست دهیم.

در کنار این ترس یک گیجی بدی هم وجود دارد. این گیجی ناشی از آن است که نمی‌دانیم آن چیزهای جدید چه هستند. ناشی از آن است که مدام اخبار ضد و نقیضی راجع به آنها می‌شنویم. مثلاً این که هنوز نمی‌دانیم Windows Phone 7 چه نقش و سهمی در دنیای موبایل‌ها دارند که به یک باره سر و کله ویندوز ۸ هم پیدا شده و او هم ادعا می‌کند قرار است دنیای موبایل‌ها و تبلت‌ها را کن فیکون کند. حال ما نمی‌دانیم قرار است ویندوز ۸ جایگزین WP7 باشد یا دو چیز جدا هستند و اگر قرار باشد ویندوز ۸ جایگزین WP7 باشد پس چرا فاصله انتشار این دو این قدر کم است؟

بی‌اطمینانی به مایکروسافت

سال‌های سال است که با محصولات مایکروسافت کار می‌کنم. دقیقاً از داس ۵ به این طرف. البته هیچ وقت هم با این موضوع مشکل خاصی نداشتم. هر وقت مایکروسافت داس را کنار می‌گذاشت و ویندوز را رو می‌کرد ما هم سراغ ویندوز می‌رفتیم، هر وقت ASP Classic را دور می‌انداخت ما هم همین کار را می‌کردیم و سراغ ASP.NET می‌رفتیم. خلاصه این که هر وقت مایکروسافت یکی از فناوری‌هایش را با فناوری جدیدتری جایگزین می‌کرد ما هم بدون هیچ اعتراضی همین کار را می‌کردیم. این تند تند عوض شدن فناوری را هم می‌گذاشتیم به حساب این که در دنیای کامپیوتر همه چیز تند تند عوض می‌شود و این ماییم که باید خودمان را با این موضوع تطبیق دهیم.

اما از وقتی که با NHibernate آشنا شدم و روال کار آن را با LINQ-to-SQL و Entity Framework مقایسه کردم دیدم که یک جای کار می‌لنگد. NHibernate با احستاب سوابق جاوایی‌اش چندین سال است که به خوبی کار کرده و خیلی کم دچار تغییرات شدید شده است. کلیاتی که از NHibernate یاد گرفته‌ام هنوز همان است و مجبور نشده‌ام به جز LINQ-to-NHibernate که یک افزونه جدید حساب می‌شود نه یک تغییر، چیز اساسی یاد بگیرم. اما کسانی که ORM را با مایکروسافت شروع کرده‌اند مثل من راحت نبوده‌اند. چون اول وقت زیادی روی LINQ-to-SQL گذاشتند ولی بعد از مدت کوتاهی به آنها اعلام شد که LINQ-to-SQL دیگر توسعه داده نخواهد شد و به جای آن باید از Entity Framework استفاده کنند. این یعنی چیزی را که یاد گرفته و به آن عادت کرده‌اید را باید به طور کامل دور ریخته و فناوری جدیدتری را با صرف کلی وقت یاد بگیرید.

مشابه این مسئله را در SourceSafe و جایگزینی آن با TFS هم دیده‌ام. کسانی که با SourceSafe کار می‌کردند مجبور شدند آن را با TFS عوض کنند. اما کسانی که از همان اول با SVN کار می‌کردند هیچ وقت دچار همچین اجباری نشدند. حدس می‌زنم همین مسئله را در مورد Web Serviceها از یک سو و ‎.Net Remoting و WCF از دیگر سو داشته باشیم.

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

‫داستان بی‌سوادی ما – ۳: ASP.NET Membership

یکی از امکانات ASP.NET مجموعه Membership و امکانات جانبی آن است. این مجموعه به برنامه‌های ASP.NET امکان تعریف کاربر، نقش و کنترل دسترسی بر اساس آنها را می‌دهد. برای این که بتوان از این امکانات استفاده کرد بایستی موارد مورد نیاز ASP.NET applications services در بانک اطلاعاتی مورد استفاده برنامه نصب گردد. این کار به طور معمول با کمک ابزار aspnet_regsql.exe انجام می‌شود.

بنده هم هر وقت که می‌خواستم یک بانک اطلاعاتی را برای یک برنامه ASP.NET آماده کنم از همین ابزار aspnet_regsql.exe استفاده می‌کردم. البته بعدها در این کار پیشرفت کرده و جای این اسکریپت‌ها را در ویندوز پیدا کرده بودم:

 C:WindowsMicrosoft.NETFrameworkv4.0.30319
من می‌خواستم انجام کار را خودکار کنم به همین دلیل آن اسکریپت‌ها را از طریق کد باز کرده، اسم بانک اطلاعاتی خودم را به جای اسم پیش‌فرض آن می‌گذاشتم و دست آخر با هزار زحمت آن از طریق کدهای C#‎ در داخل دیتابیس اجرا می‌کردم. این کارها واقعاً وقت‌گیر و پردردسر بودند. چون انجام کامل آن و دیباگ آن حدود ۳ روز طول می‌کشید. علاوه بر آن وقتی از شرکتی به شرکتی دیگر نقل مکان می‌کردم دیگر نمی‌توانستم از آن کدهای قبلی استفاده کنم و باید آنها را دوباره از اول می‌نوشتم.

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

SqlServices.Install("databaseName", SqlFeatures.All, "connectionString");
این کلاس با ارزش در فضای نام System.Web.Management قرار دارد. جهت کسب اطلاع بیشتر به این لینک مراجعه کنید.

توجه: این نوشته در قالب سری نوشته‌های «بی‌سوادی ما» می‌باشد.

‫داستان بی‌سوادی ما – ۲

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

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

یکی از راه‌های جلوگیری از این احساس حماقت‌ها این است که در حوزه‌ی فناوری‌های مورد استفاده خود حسابی خبره شده و هیچ کتاب، خبر یا وبلاگی را از دست ندهیم. اما متاسفانه این راه اقلاً برای من امکان‌پذیر نیست. چون من مثل یک برنامه‌نویس آمریکایی نیستم که فقط در یک محدوده‌ی خاص فعالیت کنم. من به طور هم‌زمان باید با مجموعه‌ای قابل توجهی از فناوری‌های هر چند به طور سطحی کار کنم. از جمله: C#‎، ASP.NET، XML، XSLT، JavaScript، MS SQL Server، NHibernate، Castle ActiveRecord، Network Programming، WPF، TFS، SVN، ‌Build Automation، Agile، Scrum، Ajax، UML، Visual Studio، Unit Test، LINQ، Windows و…

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

پادکست‌های اسکات هنزلمن

یکی از راه‌های به روز ماندن در دنیای تکنولوژی دنبال کردن وبلاگ‌ها و آدم‌های مطرح در حوزه مورد علاقه است. یکی از این آدم‌ها در حوزه برنامه‌نویسی و توسعه نرم‌افزار «اسکات هنزلمن» است. اسکات هنزلمن یکی از کارمندان مایکروسافت است که تقریباً به عنوان روابط عمومی، سخنگو و کارمند رسانه‌ای مایکروسافت در بخش توسعه نرم‌افزار، دات‌نت و ویژوال استودیو عمل می‌کند. بخش عمده‌ای از مطالب وبلاگ اسکات اختصاص دارد به مصاحبه‌ها و دید و بازدیدهایش با افراد و تیم‌های معروف دنیای توسعه نرم‌افزار. درست از همین مصاحبه‌هاست که می‌توان گرایشات روز نرم‌افزار، تکنولوژی‌ها و اخبار جدید را دریافت. البته نه همه آنها را. اسکات بیشتر مطالبش را به صورت پادکست و بعضی از آنها را به صورت ویدیو منتشر می‌کند. با این که مطالب پادکست به زبان انگلیسی بوده و تند تند حرف زدن اسکات باعث شده فهم آنها برای مخاطب فارسی‌زبان سخت‌تر شده باشد، اما خوشبختانه با هر پادکست جدید یک فایل PDF حاوی متن پیاده شده پادکست هم وجود دارد. البته این PDF معمولاً یک هفته بعد از انتشار پادکست منتشر می‌شود.

تعدادی از پادکست‌های جالب اسکات:
۱- Learning about NHibernate 3 with Jason Dentler : فایل صوتی پادکست، فایل PDF

۲- Geek Relationship Tips with Scott’s Wife : فایل صوتی پادکست، فایل PDF

۳- Aspect Oriented Programming (AOP) and LinFu with Philip Laureano : فایل صوتی پادکست، فایل PDF

۴- Jeff Atwood on the Future of Stack Overflow : فایل صوتی پادکست، فایل PDF

۵- John Lam and the Science of Fitness : فایل صوتی پادکست، فایل PDF

۶- Women in Technology in the Muslim World : فایل صوتی پادکست، فایل PDF

۷- Jon Skeet – World’s Greatest Living Programmer, or just a nice English guy?‎ : فایل صوتی پادکست، فایل PDF

۸- Hello World: Computer Programming for Kids and Other Beginners : فایل صوتی پادکست، فایل PDF

۹- Spolsky, Atwood, Blyth, Hanselman = Crazy-Delicious || Content-Free?‎ : فایل صوتی پادکست، فایل PDF

۱۰- The Art of Unit Testing with Roy Osherove : فایل صوتی پادکست، فایل PDF

وبلاگ «اسکات هنزلمن»
بایگانی پادکست‌های «اسکات هنزلمن»