PDA

View Full Version : چند سوال برای شروع یادگیری برنامه نویسی روی ویندوز



eshpilen
پنج شنبه 30 اردیبهشت 1389, 21:06 عصر
بنده تاحالا برنامه نویسی های میکروسافت رو کار نکردم. البته نه اینکه تجربهء برنامه نویسی نداشته باشم، بلکه بیشتر روی زبانهای غیرانحصاری و مستقل از پلتفرم کار کردم. مثلا با فریمورک Qt روی ویندوز هم برنامه های کوچکی نوشتم.

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

چنتا سوال داشتم اول.
یکی اینکه چون خیلی علاقه دارم قدرت و انعطاف و بینش کاملی داشته باشم فکر کردم احتمالا باید اول از Windows API شروع کنم (تحت سی++ هست بنظرم). یا شاید بجای اون از MFC (که تاجایی که فهمیدم تقریبا یه Wrapper برای همون Win API هست). نظرتون در اینمورد چیه؟ شاید بگید نه میخوای چیکار برو از اول با دات نت و سی شارپ شروع کن و اونا دیگه لازم نیست یا اینکه بهتره اول دات نت رو یاد بگیری چون بازار کارش بهتره.

دوم اینکه میخواستم بدونم مثلا وقتی میخوام از ویژوال سی++ میکروسافت استفاده کنم، آیا یک برنامهء مستقل یعنی یک محیط IDE به این نام هست یا اینکه باید توی Visual Studio کار کنم و اگر دوتان و میشه توی دوتاش برنامه نویسی سی++ کرد فرقشون پس چیه و از کدوم باید استفاده کنم و چرا.
ضمنا بجز این محیطهای ویژوال آیا میکروسافت محیط کامپایلر دیگری هم داره برای برنامه نویسی سی++ یا سی شارپ؟ (چون عادت دارم دستی همهء کد رو مینویسم و ضمنا این برنامه ها سنگین و حجیم هستن برای سیستم من و تازه کرک شده هستن و نمیخوام لزوما به ابزارهای کرک شده وابسته باشم).

vcldeveloper
جمعه 31 اردیبهشت 1389, 19:20 عصر
به بابا کسی نبود این سوالات مبتدی رو جواب بده؟!
در این سایت باید در هر تاپیک یک سوال بپرسید، تا نظم سایت بهم نخوره.


یکی اینکه چون خیلی علاقه دارم قدرت و انعطاف و بینش کاملی داشته باشم فکر کردم احتمالا باید اول از Windows API شروع کنم (تحت سی++ هست بنظرم). یا شاید بجای اون از MFC (که تاجایی که فهمیدم تقریبا یه Wrapper برای همون Win API هست). نظرتون در اینمورد چیه؟ شاید بگید نه میخوای چیکار برو از اول با دات نت و سی شارپ شروع کن و اونا دیگه لازم نیست یا اینکه بهتره اول دات نت رو یاد بگیری چون بازار کارش بهتره.
انعطاف پذیری بیشتر نسبت به چی؟ چه نوع کاری میخواید انجام بدید که برای آن نیاز به انعطاف پذیری بالا دارید؟ از چه ابزارهایی قبل از این استفاده می کردید که احساس می کنید انعطاف پذیری کافی نداشتند؟


دوم اینکه میخواستم بدونم مثلا وقتی میخوام از ویژوال سی++ میکروسافت استفاده کنم، آیا یک برنامهء مستقل یعنی یک محیط IDE به این نام هست یا اینکه باید توی Visual Studio کار کنم و اگر دوتان و میشه توی دوتاش برنامه نویسی سی++ کرد فرقشون پس چیه و از کدوم باید استفاده کنم و چرا.
این رو باید در تالار ++C\C سایت مطرح می کردید.
برای برنامه نویسی با ++Visual C باید از Visual Studio استفاده کنید. Visual Studio یک IDE با قابلیت پشتیبانی از زبان های برنامه نویسی مختلف هست. برای کارهای Native از زبان ++Visual C پشتیبانی میکنه، و برای سکوی دات نت هم به طور پیش فرض از VB.NET, F#, C#, Visual C++ پشتیبانی میکنه. البته میشه زبان های دات نتی دیگه ایی هم به آن اضافه کرد که به طور رسمی توسط مایکروسافت پشتیبانی نمیشند.


ضمنا بجز این محیطهای ویژوال آیا میکروسافت محیط کامپایلر دیگری هم داره برای برنامه نویسی سی++ یا سی شارپ؟
نه.


چون عادت دارم دستی همهء کد رو مینویسم
در ++Visual C اوضاع چندان برای شما متفاوت نخواهد بود. ++Visual C یک طراح فرم گرافیکی برای طراحی رابط کاربر نداره، بلکه فقط برای تسهیل امور چند ویزارد در اختیار شما قرار میده که بتونید بعضی امور مرتبط با طراحی رابط کاربر را به طور خودکار انجام بدید، و یک طراح Dialog برای ساخت Dialog box. بخش عمده ایی از امور طراحی رابط کاربر در آن همچنان از طریق کدنویسی انجام میشه، و از این لحاظ یک ابزار RAD محسوب نمیشه.

در #C شرایط فرق میکنه، و اونجا شما طراح فرم دارید، و می تونید با استفاده از WinForms یا WPF رابط گرافیکی کاربر را در داخل IDE طراحی کنید.



تازه کرک شده هستن و نمیخوام لزوما به ابزارهای کرک شده وابسته باشم
ابزارهای برنامه نویسی مایکروسافت مثل Visual Studio یک نسخه رایگان با نام Express دارند که نیازی به کرک شدن نداره. البته این نسخه برای کاربردهای تجاری و پیشرفته نیست، و یک نسخه محدود شده از این ابزارها محسوب میشه.

البته برای ساخت نرم افزارهای تجاری تحت ویندوز لزومی به استفاده از ابزارهای مایکروسافتی نیست، و می تونید با همون ابزارهایی که قبلا باهاشون کار می کردید، مثل همون Qt که بهش اشاره کردید، برای ویندوز هم برنامه های تجاری با کیفیتی تولید کنید.

eshpilen
جمعه 31 اردیبهشت 1389, 20:40 عصر
در این سایت باید در هر تاپیک یک سوال بپرسید، تا نظم سایت بهم نخوره.

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


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


این رو باید در تالار ++C\C سایت مطرح می کردید.
برای برنامه نویسی با ++Visual C باید از Visual Studio استفاده کنید. Visual Studio یک IDE با قابلیت پشتیبانی از زبان های برنامه نویسی مختلف هست. برای کارهای Native از زبان ++Visual C پشتیبانی میکنه، و برای سکوی دات نت هم به طور پیش فرض از VB.NET, F#, C#‎, Visual C++‎ پشتیبانی میکنه. البته میشه زبان های دات نتی دیگه ایی هم به آن اضافه کرد که به طور رسمی توسط مایکروسافت پشتیبانی نمیشند.

آخه من یه برنامهء مستقل دارم که نوشته Microsoft Visual C++ 6.0.
از طرف دیگه در اسپلش اون بالاش نوشته: Member of Microsoft Visual Studio.
یعنی بنظر میرسه برای Visual C++ هم برنامهء مستقل خودش هست و شاید همین برنامه هست که توی ویژوال استودیو اجرا میشه و شاید هم نه.


نه.
اینطوری که جالب نیست.
یعنی نمیتونیم خط فرمانی همهء کارای ساخت یه برنامه رو انجام بدیم؟ (با فرض اینکه تمام کدهای برنامه رو دستی نوشتیم).



در ++Visual C اوضاع چندان برای شما متفاوت نخواهد بود. ++Visual C یک طراح فرم گرافیکی برای طراحی رابط کاربر نداره، بلکه فقط برای تسهیل امور چند ویزارد در اختیار شما قرار میده که بتونید بعضی امور مرتبط با طراحی رابط کاربر را به طور خودکار انجام بدید، و یک طراح Dialog برای ساخت Dialog box. بخش عمده ایی از امور طراحی رابط کاربر در آن همچنان از طریق کدنویسی انجام میشه، و از این لحاظ یک ابزار RAD محسوب نمیشه.

خب چرا اینطوریه؟ یعنی چرا طراح فرم نداره؛ درحالیکه اسمش ویژوال هست و یک زبان اصلی و سی++ کتابخانهء بومی و اصلی میکروسافت بوده و هست.


ابزارهای برنامه نویسی مایکروسافت مثل Visual Studio یک نسخه رایگان با نام Express دارند که نیازی به کرک شدن نداره. البته این نسخه برای کاربردهای تجاری و پیشرفته نیست، و یک نسخه محدود شده از این ابزارها محسوب میشه.

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


البته برای ساخت نرم افزارهای تجاری تحت ویندوز لزومی به استفاده از ابزارهای مایکروسافتی نیست، و می تونید با همون ابزارهایی که قبلا باهاشون کار می کردید، مثل همون Qt که بهش اشاره کردید، برای ویندوز هم برنامه های تجاری با کیفیتی تولید کنید.

بله ولی Qt کامل نیست. اینو منکه کیوت رو کامل بلدم میگم و تعصبی روش ندارم (اما میگم که کاربرد داره و خیلی کارها رو میشه باهاش انجام داد و از یادگیریش به هیچ وجه پشیمون نیستم و ضرر نکردم). یعنی مسلما به پای کامل بودن کتابخانه های خود میکروسافت نمیرسه روی ویندوز. میشه خیلی برنامه ها رو باهاش نوشت، اما مثلا اگر من بخوام از وبکم استفاده کنم چیزی در این ارتباط نداره. حالا اگر بخواید از کتابخانه های خارجی یا میکروسافتی توش استفاده کنید که خب مشکلات و سوالهای مهمی در تصمیمگیری مطرح میشه و برنامه ترکیبی از چند فریمورک و فناوری میشه و مشکلات ترکیب و سازگاری و غیره پیش میاد و استایل و خوانایی کد هم بهم میریزه.
از طرف دیگه بخاطر بازار کار هم هست. من جایی رفتم که استخدام بشم اما تیم برنامه نویسی اونا زبانشون دات نت بود (بصورت خیلی طبیعی). در اینطور موارد چه میشه کرد؟!
در قدم اول باید Qt رو با ویژوال سی++ میکروسافت کامپایل کرد (که من تاحالا نکردم) چون نسخهء اپن سورس که دانلود میشه با MinGW کامپایل شده و تاجایی که فهمیدم به این علت نمیشه از کتابخانه های دیگری که با کامپایلرهای دیگر کامپایل شدن در برنامه های کیوت استفاده کرد مگر اینکه سورس اونها هم در دسترس باشه و بتونیم اونا رو با MinGW کامپایل کنیم (که در خیلی موارد این شرایط برقرار نیست).

vcldeveloper
جمعه 31 اردیبهشت 1389, 21:05 عصر
والا خیلی وقتا هم برعکسش رو میگن :لبخند:

وقتی در یک تاپیک سوالات مختلفی مطرح می کنید، در پست های مختلف برای آن سوالات پاسخ های مختلفی دریافت می کنید؛ مثلا شما سوال های 1 و 2 و 3 را می پرسید، کاربری فقط به سوال 2 پاسخ میده، کاربر دیگه فقط به سوال 1، یک کاربر به سوال های 2 و 3 جواب میده، و الی آخر. شما خوشحال هستید که در یک تاپیک همه سوالات تان را پرسیدید، و لزومی نداره که برای پیگیری آنها چند تاپیک را مانیتور کنید، اما کاربرانی که سوالی مشابه سوال شما دارند، و با استفاده از جستجوی سایت، تاپیک را پیدا می کنند، دچار مشکل میشند، چون اگر فرضا کاربر مربوطه دنبال جواب سوال 2 هست، با یک تاپیک چند صفحه ایی مواجه میشه که بسیاری از پست های آن هیچ ارتباطی با سوال شماره 2 ندارند، و به سوال های 1 و 3 مربوط میشند. شمایی که تاپیک را ایجاد می کنید، فقط یک کاربر هستید، ولی کاربرانی که از طریق سیستم جستجوی سایت این تاپیک را پیدا می کنند چندین نفر هستند.


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


یعنی نمیتونیم خط فرمانی همهء کارای ساخت یه برنامه رو انجام بدیم؟ (با فرض اینکه تمام کدهای برنامه رو دستی نوشتیم).
می تونید. شما پرسیدید که آیا غیر از این ابزار، مایکروسافت ابزار دیگه ایی هم برای توسعه نرم افزار ارائه میکنه، که گفتم نه. با خودِ Visual Studio ابزارهای مناسب برای Build از طریق Command line وجود دارند.


خب چرا اینطوریه؟ یعنی چرا طراح فرم نداره؛ درحالیکه اسمش ویژوال هست و یک زبان اصلی و سی++ کتابخانهء بومی و اصلی میکروسافت بوده و هست.
اینو باید از مایکروسافت بپرسید. اگر کامپایلر ++C تحت ویندوز با قابلیت های RAD میخواید، می تونید برید سراغ C++ Builder 2010. اون محصول مایکروسافت نیست. تجاری هست، و نسخه مجانی نداره. یک IDE مستقل داره با نام RAD Studio، و قابلیت تولید رابط کاربر از طریق Form Designer رو داره. البته C++ Builder یک کامپایلر تولید Native Code هست، و دات نت کار نمیکنه.


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


از طرف دیگه بخاطر بازار کار هم هست. من جایی رفتم که استخدام بشم اما تیم برنامه نویسی اونا زبانشون دات نت بود (بصورت خیلی طبیعی). در اینطور موارد چه میشه کرد؟!
هیچی، الان در بازار ایران دات نت و بخصوص #C توی بورس هست. اگر هدفتان افزایش فرصت های شغلی هست، با تسلط بر آن، می تونید فرصت های شغلی متعددی داشته باشید. اگر به سمت برنامه نویسی تحت وب، بخصوص ASP.NET هم حرکت کنید، فرصت های شغلی تان در ایران بسیار بییشتر میشه.

eshpilen
شنبه 01 خرداد 1389, 09:13 صبح
فکر کنم دیگه شکی نمونده که باید از دات نت شروع کنم.
با اساس برنامه نویسی Native که آشنا هستم (Qt که تحت سی++ هست و با سی هم آشنایی کامل دارم)
من همیشه فکر میکنم آدم لازمه این اساس ها رو داشته باشه چون بهش بینشی میده که در برنامه نویسی هم به آدم کمک میکنه. مثلا اگر برنامه نویسی سیستمی هم درحد پایه بدونی، از ساختار و طرز کار یک مفسر و زبان اسکریپتی خیلی بهتر سردرمیاری و بینش بیشتری پیدا میکنی (که بر سرعت و عمق یادگیری زبانهای سطح بالاتر کمک زیادی میکنه) و حتی در عمل از این دانش گاهی استفاده های جالبی میشه.
راستی به جاوا هم فکر میکنم؛ جاوا خوبیش اینه که روی موبایل و خیلی دستگاههای دیگه هم کاربرد وسیع داره و ساپورت میشه. اگر جاوا یاد بگیریم هم میتونم روی ویندوز برنامه بنویسم هم لینوکس و هم موبایل و غیره و ضمنا زبان کاملا آزاد و محبوبی در هر دو طرف (میکروسافت و لینوکس - انحصاری و آزاد) هست. فکر میکنم تکمیل بودن کتابخانه های اونهم اونقدری باشه که برای هر نوع برنامه نویسی روی ویندوز کم نیاد؛ درسته؟ مثلا اگر بخوام با چیزهایی مثل وبکم کار کنم.
اما بهرصورت فکر کنم اول از دات نت شروع کنم چون بازار کارش بیشتر و راحتتره و برنامه های روزمره بیشتر با این فریمورک/پلتفرم نوشته میشن.
شما چه منبعی رو بعنوان رفرنس پیشنهاد میکنید؟ رفرنس سایت MSDN؟ بنده تقریبا تمام زبانهایی رو که تاحالا یاد گرفتم با مطالعهء کامل رفرنس رسمی اونها بود.

vcldeveloper
شنبه 01 خرداد 1389, 12:59 عصر
اگر جاوا یاد بگیریم هم میتونم روی ویندوز برنامه بنویسم هم لینوکس و هم موبایل و غیره و ضمنا زبان کاملا آزاد و محبوبی در هر دو طرف (میکروسافت و لینوکس - انحصاری و آزاد) هست. فکر میکنم تکمیل بودن کتابخانه های اونهم اونقدری باشه که برای هر نوع برنامه نویسی روی ویندوز کم نیاد؛ درسته؟
روی ویندوز معمولا نرم افزارهای جاوا طرفداران چندانی ندارند، چون در ویندوز رابط گرافیکی کاربر یک عنصر مهم محسوب میشه، و نرم افزارهای ساخته شده با جاوا از نظر رابط گرافیکی کاربر نسبت به کنترل های Native ویندوز بسیار عقب افتاده و بدقلق به نظر می رسند. البته جاوا کاربردهای خودش را در سرورهای Enterprise و نرم افزارهای موبایل داره. البته با دات نت هم می تونید نرم افزارهای موبایل تولید کنید.



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

eshpilen
شنبه 01 خرداد 1389, 21:20 عصر
با دات نت هم می تونید نرم افزارهای موبایل تولید کنید.
چطوری؟
یعنی مثلا من گوشی k320 دارم الان روش جاوا اجرا میشه ولی دات نت چطوری؟!

vcldeveloper
شنبه 01 خرداد 1389, 21:53 عصر
چطوری؟
یعنی مثلا من گوشی k320 دارم الان روش جاوا اجرا میشه ولی دات نت چطوری؟!
با استفاده از NET Compact Framework. می تونید برای پلت فرم های موبایل برنامه بنویسید. در حال حاضر خودِ مایکروسافت فقط سکوی Windows Mobile را پشتیبانی میکنه، ولی شرکت هایی هستند که CLI دات نت رو برای سکوهایی مثل Symbian هم پیاده سازی کردند، و میشه با نصب نرم افزار آنها یک برنامه دات نت را روی Symbian هم اجرا کرد. برای iPhone هم فکر کنم بتونید با استفاده از MonoTouch نرم افزار دات نتی بنویسید، و روی آن اجرا کنید.

eshpilen
شنبه 01 خرداد 1389, 23:34 عصر
خب بد نیست ولی به پای راحتی و عمومیت جاوا نمیرسه.
مثلا موبایل من اصلا سیستم عامل هم نداره، ولی جاوا رو اجرا میکنه.
بعدشم همین نصب کردن و غیره که بصورت پیشفرض روش نباشه خودش مانعی هست و خیلی وقتا مشکلات فنی هم داره. نمیشه که به کاربر بگی اول فلان محیط رو نصب کن بعد برنامهء من رو نصب کن، اونم فقط برای بخشی از موبایلها که از قبل هم جاوا رو براحتی ساپورت میکنن.
بنظر من جاوا فعلا در بخش موبایل انتخاب اول خواهد بود و بیشترین کمیت رو خواهد داشت و بنظر نمیرسه در کوتاه مدت تغییر اونقدری زیاد باشه که این وضعیت حتی به تساوی برسه.