بایگانی روزانه: ژوئن 1, 2008

ویندوز 7 ، هسته کم حجم را هدف گرفته است!


بالغ بر 200 برنامه نویس در حال ساخت هسته (Kernel) جدید برای سیستم عامل آتی میکروسافت یعنی ویندوز 7 هستند که MinWin نام گذاری شده!

این کرنل دارای حدود 100 فایل به حجم تقریبی 25 مگابایت هست که واقعا قابل مقایسه با حدود 5000 فایل در کرنل 4 گیگابایتی ویندوز ویستا نیست.

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

هسته جدید قراره در انتشارهای بعدی ویندوز ، ویندوز سرور و همچنین سیستمهایی مانند Embedded Devices مثل سامانه های اسکن و … بکارگرفته بشه.

مطالب بیشتر در این زمینه رو میتونید در لینکهای زیر بخونید:
Windows get a ‘Mini-Me’
Microsoft to trim Windows bloat for 2010
http://www.osnews.com/story.php/18804/Thoughts-on-MinWin-Windows-7-and-Virtualisation/
Microsoft builds minin Windows core

چرا امروزه نمی توان یک برنامه نویس خبره شد؟


تغییرات و نوآوری های لحظه به لحظه در فن آوری های مختلف ، عملا امکان اینکه بتونید در کاری بطور کامل مسلط و خبره بشید رو از بین می بره !

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

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

بگذارید یه نگاهی به کتابخانه های نرم افزاری تولید شده در سال 1991 بیندازیم.سالیکه عملا بلوغ ویندوز از اینسال آغاز میشه.به یکباره تعداد زبانهای برنامه سازی فراوانی در محیطهای Mainframe ارائه میشن.رابطهای کاربری عمدتا متنی بوده و از قابلیتهای موشواره بهره ای نمی برند.اعتبارسنجی داده های ورودی به سهولت انجام میشن.شما بسادگی در برابر پیامی مانند: «لطفا کلیدی را جهت ادامه بفشارید » عکس العمل ساده و مناسبی رو انجام خواهید داد. رخداد (Event) ، برنامه نویسی شی ء گرا (OOP ، زبانهای ایجاد رابط کاربری از نوع Markup مانند XAML و HTML ؟ معماری N-Tiered ؟ دسترسی اشتراکی به منابع ، تحت شبکه ؟ بومی سازی یا Globalization ؟ هنوز خبری از اینها نیست.زندگی خیلی آسون بنظر میرسه.

من براحتی و با صرف زمان کمی برنامه سازی با Perl/CGI رو آغاز کردم.برنامه نویسی در محیط Perl شباهت زیادی به برنامه نویسی در کوبول داشت.داشتن مستندات 50 صفحه ای از Perl کافی بنظر میرسید تا بتونید یک برنامه نویس خوب با Perl باشید.نیازی به دانستن مباحثی از قبیل SQL Injection نداشتیم و اصولا یک چنین نگرانیهایی وجود نداشت.من تخصص خوبی در Regular Expressions کسب کرده بودم.

در سال 1995 همزمان با معرفی رسمی جاوا توسط شرکت Sun ، یادگیری اونرو شروع کردم و بسیار برام حیرت آور بود: حدود 200 مگابایت راهنما و نمونه کدهای جاوا در قالب پرونده های HTML و بیش از یکهزار صفحه راهنمای چاپی! البته جاوا از آن زمان تا به کنون ، تغییرات زیادی رو شاهد بوده است.

زبانهای #C و VB.Net هم دست کمی از جاوا نداشتند.دست کم 500 صفحه راهنما برای داشتن دید کلی از برنامه نویسی با یکی از اونها ، ضرورت یک برنامه نویس بود.و البته در این میان ، PHP هنوز برتری منحصر بفردی داره ! بسیار ساده هست و بسرعت میتونید اونرو فرابگیرید ، حجم راهنماها بسیار کم هستند.و البته رایگان.

در مقابل ، محیطهای #C و جاوا ، بسیار گران و البته پیچیده.اگر کسی پیدا بشه که به من بگه : من توی یکی از ایندو یا هردوشون خبره هستم ، من بهش حتما خواهم گفت: یک دروغگوی بزرگ! و البته من به این موضوع باور دارم.

من کار حرفه ای با دات نت رو از ابتدای معرفی این پلاتفرم در سال 2002 شروع کردم ، اما نمیتونم بگم که در این محیط یک متخصص هستم! بلکه تنها میتونم بگم که تخصص خوب و بالایی در کار با System.Drawing ، System.Threading ، System.Net.Web و System.Text.RegularExpressions دارم.حجم اطلاعات اونقدر بالاست که در بسیاری موارد بیاد آوردن متدها ، ویژگیها و …. کار ساده ای نیست و براستی باید از پدیده IntelliSense توسط میکروسافت تقدیر کرد.

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

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

cobol : زنده یا مرده ؟


اگر برنامه نویس با سابقه ای باشید ، حتما لحظاتی از زندگیتون رو بیاد دارید که از برنامه نویسی با کوبول لذت می بردید.

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

آیا واقعا اینطور هست؟ نگاهی به مقاله چاپ شده در مجله ComputerWorld حتما نظرتون رو تغییر خواهد داد.

بر اساس مطالعات آماری انجام شده ، کوبول ، متداولترین زبان برای تولید نرم افزارهای تجاری بوده و هست.بر اساس مطالعه ای که در سال 1997 انجام شد ، 85% نرم افزارهای تجاری/مالی جهان بزبان کوبول نوشته شده بودند که شامل بیش از 200 میلیارد خط برنامه بوده است.آخرین آمار مربوط به سال 2007 بوده که نشون میده هنوز 60% نرم افزارهای تجاری/مالی بزبان کوبول هستند و توسعه اونها ادامه داره!

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

بر اساس مطالعه ای که در سال 2004 انجام شده ، حدود دو میلیون برنامه نویس حرفه ای کوبول در دنیا وجود داشت که همین مطالعه نشون میده که بطور متوسط سالانه 5% از این برنامه نویسان یا فوت میکنن یا بازنشسته میشن.

بنابر این به نظر میرسه با توجه به مطالب فوق ، زبان کوبول هنوز یک زبان برنامه نویسی پردرآمد برای کسانیست که بدنبال درآمد هستند و جالبه بدونیم که متوسط دریافتی این برنامه نویسان حدود 2/5 برابر برنامه نویسان دات نت و جاوا است.

نگاهی گذرا به سایت salary.com و شرکتهایی که متقاضی برنامه نویس هستند و ویژگیهای مورد انتظار اونها در بخش مهارتهای برنامه نویسی ، خود گویای این مطلب هست.

موفق باشید.

برنامه نویسی را چگونه آغاز کنم ؟ قسمت سوم و آخرین قسمت


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

1- ترم 1:

– مقدمه ای بر برنامه نویسی:شامل ساختار اصلی یک برنامه ، عبارات کنترل برنامه ، حلقه ها ، دستورات شرطی و… در این مرحله نیازی به آشنایی با مفاهیم OOP نیست و تاکید بر عادات خوب برنامه نویسی هست.موضوعاتی از قبیل نکاتیکه باید برای خوانایی کد رعایت بشه و مسایلی از این دست که در برخی پستهای قبلی اشاره کردم.بنظرم میرسه ، زبان VB زبان مناسبی باشه هرچند شخصا Rubby و پاسکال رو توصیه میکنم.

– منطق برنامه ، مفهوم کلمات کلیدی در زبانهای برنامه سازی ، نحوه و مراحل کد نویسی ، ترجه ، تفسیر تا تولید برنامه اجرایی

– مبانی شبکه و مدیریت سیستم: عمده تمرکز بر روی مفاهیم کلیدی شبکه و همچنین آشنایی کامل با TCP/IP

2- ترم 2: شامل:

– درک مفاهیم Usability یعنی نحوه شناسایی نیازهای اساسی کاربران نهایی نرم افزار و Accessibilty یعنی نیازهای اختصاصی کاربران.

– تئوری بانکهای اطلاعاتی

– مهارتهای اصلی برنامه نویسی: در این مرحله ، دانشجو/نوآموز باید با مفاهیم کتابخانه توابع آشنا باشه و بتونه برای برنامه هاش کتابخانه ایجاد بکنه.روش تهیه این کتابخانه ها و روش تشخیص توابع کتابخانه ای و …. که بتونه توسعه نرم افزار رو تسهیل بکنه از مهارتهای اصلی این دوره هست که باید فراگرفته بشه.

-طراحی بروش OOP

3- ترم 3: شامل:

– ساختمان داده : که حتما باید با C آموخته بشه و تمامی عناوینش با جزییات آموخته بشه ، صف ها ، گرافها ، درختهای دودویی ، پشته ، لیستهای پیوندی و ….

– مستند سازی مشخصه های فنی: در این بخش باید یاد بگیرید که چگونه مشخصه نیازمندیهای کاربر رو دریافت کنید و اونرو به فرمی از مستندات فنی تبدیل کنید.همچنین در این دوره مقدماتی از روش UML گفته میشه.

– برنامه نویسی کاربردهای مبتنی بر بانک اطلاعاتی و Client/Server

– مبانی طراحی صفحات وب: در این زمان باید HTML و CSS و همچنین جاوااسکریپت بطور کامل فراگرفته بشه.

4- ترم 4: شامل:

– اعتبار سنجی داده ها: باید روشهای اعتبارسنجی داده ها و بخصوص مفاهیم Regular Expressions بطور کامل آموخته بشه.

– برنامه نویسی ++C : در حد مقدماتی

– آشنایی با زبانهای برنامه سازی مبتنی بر مفسر: باید قابلیتها و امکانات ، تفاوتها و محل کاربرد هر یک از زبانهای Perl , Ruby , Python و جاوااسکریپت فراگرفته بشه.

– طراحی گزارش: در این مرحله باید اصول طراحی گزارش و مفاهیم اون و مدلسازی داده ها برای ساخت گزارش آموخته بشه.

5- ترم 5: شامل:

– زبان ++C پیشرفته کار با OOP و کلاسها و جریانها و ….

– معماری بانک اطلاعاتی : نحوه طراحی بانک اطلاعاتی متناسب با نوع نرم افزار و پیاده ساطی این طراحی بزبان SQL

– روشهای توسعه و تولید نرم افزار: باید مفاهیم RUP و فازهای اون و روشهای توسعه نرم افزار اعم از آبشاری ، RAD و … کاملا فراگرفته بشه.

6- ترم 6: شامل:

– برنامه نویسی بزبان جاوا : ترجیحا در محیط Eclipse

– برنامه نویسی بزبان VB.Net

– برنامه نویسی بزبان #C

– مفاهیم امنیت نرم افزار ، قفل گذاری ، محافظت از برنامه و بانک اطلاعاتی و مفاهیمی از قبیل Hack & Crack و همچنین SQL Injection و….

7- ترم 7: شامل:

– برنامه نویسی یونیکس: بهمراه آشنایی با مفاهیم و معماری یونیکس

– برنامه نویسی ویندوز بهمراه آشنایی کامل با معماری و مفاهیم ویندوز

– آنالیز کیفی(QA)

– مستندسازی: شامل روش و استانداردهای نوشتن توضیحات در داخل کد ، تهیه مستندات راهنمای کاربران و…

8- ترم 8: شامل:

– برنامه نویسی گروهی(تیمی): مهارتهای کار در گروه و کار گروهی ، روشهای مدیریت گروههای نرم افزاری ، بهمراه شرکت اقلا در دو پروژه که بصورت گروهی کار شده باشه.

– توسعه نرم افزارهای چند رگه ای (multithread)

– برنامه نویسی گرافیکی و DirectX و OpenGL بویژه با ++C

– نحوه نوشتن ابزارگردان یا Device Driver

– نحوه نوشتن برنامه های شبکه (Sockets) مانند فایروالها ، و….

موفق باشید.

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


اگر فرهنگ لغات رو باز کنیم و معنی کلمات زیر رو  ببینیم :

Programmer= One who programs

و

Developer= One that develope

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

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

در واقع برنامه نویس شخصی هست که هیچ کاری نمیکنه بجز اینکه کد بنویسه و همچنین باگها رو برطرف بکنه.برنامه نویس هیچوقت مشخصه نیازمندیها و توانایی های نرم افزار رو تعیین نمیکنه . برنامه نویس هیچگاه سیستم خودکار تست نرم افزار نمی نویسه.(Automated Test Case) برنامه نویس هیچ نقشی در به روز نگهداشتن نرم افزار متناسب با نیاز روز نداره ، بعبارت دیگه اون هیچ کاری به شناسایی نیازهای روز یک فن آوری یا یک مشکل نداره.برنامه نویس هیچ کمکی به مشتریان برای حل مشکلاتشون نمیکنه.برنامه نویس هیچگاه مستندسازی نرم افزار رو چه مستندات فنی اولیه (UML) و چه مستندات نهایی شامل راهنمای کاربران ، راهنمای نصب ، راهنمای رفع اشکالات و…. رو انجام نمیده.برنامه نویس هیچ کمکی به تست نرم افزار نمیکنه.اون حتی کدهایی رو که خودش نوشته بندرت دوباره مرور می کنه و در عوض عادت داره کدهای جدید بنویسه.

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

در واقع چند تفاوت اساسی بین شرکتهای نرم افزاری بر اساس بزرگی اونها وجود داره:

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

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

در واقع یک توسعه دهنده ، شاید همه کارهایی رو که گفتیم انجام نده ، اما به همه اونها مسلطه.و تسلط اون باعث میشه تا در روند تولید نرم افزار بتونه مشارکت خوبی با اعضای تیم داشته باشه و با آگاهی کاملی که داره علیرغم وظیفه تعریف شده وی در تیم ، از کار سایر اعضاء بخوبی مطلعه و میتونه هم ایده بگیره و هم ایده بده .

موفق باشید.

10 علامت آمادگی برای توسعه دهنده شدن!


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

در مورد تفاوت برنامه نویس و توسعه دهنده در پست های بعدی حتما سخن خواهم گفت.اما این علائم عبارتند از:

1- بیشتر تمایل دارید آموزش ببینید و آموزش بدین تا اینکه خودآموزی کنید.

2- عادت دارید بصورت منظم کار کنید.مثلا روزی 5 ساعت در زمان مشخصی از هر روز رو برنامه نویسی می کنید.توسعه دهنده ها زیاد منظم نیستند.

3- تمایل دارید همیشه سرتون شلوغ باشه ، همیشه در حال کار باشید.استراحت معنی نداره و استراحت و تفریح شما همون کار شماست.

4- مدت زیادی رو نمیتونید با دوستان و اطرافیانتون در جمع ها خوش باشید ، خیلی زود از بودن با اونها خسته می شوید.

5- کارهای بدون نتیجه و بی ثمر زیاد می کنید.مثلا اصطلاحا برای دل خودتون برنامه ای رو شروع می کنید ، مدتی بعد رهاش می کنید و یک برنامه دیگه….

6- در مقایسه با دیگران ، ذهن بسته ای دارید.در برنامه نویسی عمدتا مسایلی هست که بیش از یک جواب براش وجود داره.شما معمولا انتقادها و پیشنهادات دیگر همکارانتون رو بر نمی تابید و اینکار باعث میشه چیزهایی رو از دست بدید.در واقع باعث میشه در برنامه نویسی ملاحظاتی رو در نظر نگیرید.

7- شما جزئی نگر نیستید.

8- به رغم بند 6 ، یک احساس درونی دارید که بر اساس اون ، خودتونرو موفق تر از همکارانتون نمی دونید و نمیتونید به اونها فخر فروشی کنید و برتری خاصی بر دیگر همکارانتون ندارید.

9- ترجیع میدید و اغلب عادت دارید که ابتدا کاری رو شروع کنید ، بعد راجع بهش فکر کنید.

10- شما علاقه چندانی به متخصصینی که دور و برتون هستن و به نظر میرسه موفق هستند ندارید.ممکنه در ظاهر علاقه زیادی رو نشون بدید ولی در خلوتتون از اونها متنفرید.

اگر چنین ویژگیهایی رو دارید ، حالا وقتشه که آستینتون رو بالا بزنید و توسعه دهنده بشین.

مهمترین نکته برنامه نویسی که تابحال به نگارش درآمده!


تصویر زیر رو ببینید ، خود گویای عنوان هست:

تصویر فوق مربوط به ویژوال سی هست.
مرجع:
http://www.myconfinedspace.com/watermark.php?src=wp-content/uploads/2007/06/001grg3w.jpg