Drcain بدون دیدگاه

پرسش و پاسخ برنامه نویسی!

سلام.

یه سری نکات تو مطلب برنامه نویسی و استخدام مطرح شد به نظرم اومد که تو یه شماره چند تا سوال برنامه نویس خوب هم داشته باشیم. خب بریم سراغشون!

 

1- فرق abstraction با encapsulation ?

خیلی ساده با یه مثال روشن میشه.

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

ریموت کنترل یه ابسترک ساده میتوان در نظر گرفت که کاربر بدون دانش از این که داخل آن چه خبر است استفاده میکند(ولی میتواند دسترسی بگیرد)

اما تلویزیون هیچ ایده ای از این که فیلم و آهنگ و … پخش میشود نداریم(حداقل فرض کنیم دسترسی محلی نداریم) و دسترسی هم نداریم و صرفا از آن استفاده میکنیم.

2- فرق interface با abstract?

از نظر مهندسی نرم افزار هیچ فرقی این دو مفهوم ندارند. به طور کلی یک ایده دارند ولی از نظر برنامه نویسی یه سری تفاوت دارند مثلا در متغیر و داستان وراثت تو اینترفیس و پیاده سازی توابع و ….

 

3- برنامه نویس سمت سرور هستید و پاسخ هایی همیشه ثابت هستند چه کار میکنید؟

از دیتابیس های جدید مثل ردیس استفاده میکنیم. راه حل ساده تر (در صورت کم بودن متغیر ها ) تعریف آن در چند متغیر و استفاده با رم (همان مفهوم ردیس است)

هدف از این کار چیست ؟ قطعا دیتا در هارد کندتر از رم است. سرعت انتقال دیتا رتبه نخست برا رجیستر ها و کش CPU و بعد رم و در انتها هارد است. پس دیتابیس های عادی که با هارد سر و کار دارند به مراتب کند تر هستند.

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

  • ممکن است فک کنید که اگر سیستم خاموش شود چه پیش می آید یا اطلاعات رم میپرد؟ پاسخ منفی است و ردیس یک بکاپ میگیرد و مثل دیتابیس های معمولی در هارد ذخیره میکند و نگرانی ندارد !

4- برنامه نویس سمت سرور هستید چه راهکارهایی برای ریکوئست های الکی میدهید ؟

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

5- اطلاعات محرمانه ای به روی کلاینت داریم چگونه جلوی دسترسی آن را میگیرید؟

مهندسی معکوس و جلوگیری آن باز هم مبحث گسترده ای است ولی ساده ترین ایده ای که پاسخ این مسئله را میدهد رمزنگاری و سالت است.

یعنی تقریبا کاری که بعضی از اپلیکیشن های موبایلی یا تحت وب انجام میدهند. شاید تضمینی هم در کار نباشد!

6- OOP را تعریف کنید و مزایا و معایبش را بگید؟

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

تعریف خیلی ساده هم  که میتوان گفت وقتی یه سری رفتار ها و داده های یکسان و قابل تعریف در یه موضوع داریم میتوان سراغ OOP برویم مثل کلاس حیوان و مثلا وراثت کلاس انسان از حیوان.( به فرض یک بازی open world داریم)

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

معمولا در راستای OOP باید دانش کافی از وراثت و کپسولیشن ، چند ریختی و … هم باید داشته باشیم.

7- کلاس های یک بازی شطرنج یا بولینگ یا .. را طراحی و پیاده سازی کنید ( معمولا 40 تا 60 دقیقه زمان)

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

تو کلاس ها  و معماری باید یه سری موارد را رعایت کنید مثل coupling cohesion یا single responsibility و …

 

8- پیچیدگی الگوریتم … چه قدر است ؟

حتما باید مبحث پیچیدگی را مسلط باشید و بدانید الگوریتم های مورد استفاده شما چگونه عملکردی دارند. ممکن است سوالات ساده ای پرسیده شوند مثل ادغام دو آرایه نا مرتب در یک آرایه مرتب یا پیاده سازی یک الگوریتم مرتب سازی ساده، صف ، استک، لینک لیست، گراف و ….

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

اگر شما هیچ اطلاعی درباره پیچیدگی الگوریتم ندارید معمولا بدترین حالت را با O  نمایش میدهند و میگن و از log n تا پیچیدگی های نمایی می تواند راه حل مسائل باشد.

مثلا اگر شما یک آرایه 100 تایی دارید و میخواهید آن را پرینت کنید.100 بار عمل خواندن + 100 بار پرینت دارید. یعنی در اوردر n است.(پیچیدگی زمانی)

پیچیدگی مکانی هم داریم که باید محاسبه ذخیره متغییر ها را حساب کرد.( که مثلا رم چه قدر نیاز است)

 

احتمالا متوجه هستید که مثلا الآن با قضیه ی سیستم های distribute مشکلات cpu را حل کرده اند ولی کمبود رم و پیچیدگی نمایی رم را کاری نمیشود کرد.

مثلا الگوریتمی در بدترین حالت 1 سال طول میکشه خب صبر میکنیم هسته و سیستم زیاد میکنیم و به فرض به 2 ماه کاهش میدهیم ولی وقتی رم خیلی بالایی بخواهد کار به مراتب سخت میشود یا حتی نشدنی.

 

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

نمونه سوالات  در گیت هاب و سایت های مختلف موجوده و زیاد هستن چه برا تمرین برنامه نویسی و الگوریتم و OOP چه مصاحبه و چیزای دیگه

موفق باشید

الهام عابدی بدون دیدگاه

زورآزمایی دو رقیب وب ساز(php و ASP.net)

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

Drcain 2 دیدگاه

برنامه نویسی و استخدام

سلام

قسمت قبلی با موضوع برنامه نویس خوب  به یک سری نکات کلی درباره ی برنامه نویسی اشاره شد. در این قسمت میخواهم تجربیاتی هر چند اندک را با شما درمیان بگذارم، شاید به شما دید جالبی بدهد.

اگر دقت کرده باشید اکثر شغل های حال حاضر برای برنامه نویس ها (با مدرک کارشناسی مهندسی کامپیوتر مثلا)  مربوط به توسعه یا همان دولوپ (DEVELOP) است و معمولا تا 6 سال هم به توسعه مشغول هستند البته شرکت هایی هم هستند که بعد از 4 سال مدیر بخش( هد نرم افزار مثلا) یا مدیر پروژه و CTO هم ارتقا دهند یا با همان رزومه بگیرند و دنبال استخدام هستند.

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

حقوقی که رایج است برای شروع تقریبا ساعتی 8 تومن است.(کارآموزی معمولا مجانی است) و البته دیده شده که 4-5 تومن و 6-7 تومن هم برای 1 تا 2 ماه اول بدهند و بعضی شرکت ها ممکن است تا 3 ماه به صورت آزمایشی با حقوق پایین فقط راضی باشند

  • با یک رزومه ی نسبتا معمولی هم بین 10 تا 15.( 1 تا 2 سال سابقه)

که اگر 192 ساعت کار تمام وقت در نظر بگیرید حدود 1500 حقوق داشته باشید در ابتدای کار و بعد از چند ماه احتمالا 2 تومن.(در شرکتی البته برنامه نویسی دیدم که پس از 1 سال سابقه 1500 دریافتی داشت)

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

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

قطعا ارقام شرکت ها مختلف است و مزیت های مختلفی هم دارند. حالا شاید یکی ناهار بدهد پاره وقت را بیمه کنند فضای کار مناسب باشد بالا سری و مدیران خوش اخلاق باشند و … که در نهایت به نظرم فضا برای رشد شما باید مناسب باشد که از همه گزینه ها مهم تر است. یعنی یک کار جدی و مناسب برای یادگیری و تجربه کسب کردن در زمینه های مختلف با یه حقوق معقول و به حق شرکت های بزرگتر رزومه ی بهتری شاید باشند ولی به ازاء ریسک کمتر رشد کمتری هم دارید و شرکت های معمولی رزومه ی معمولی میسازد ریسک بیشتر ولی رشد بیشتر در نهایت.(نظر بنده است)

و اما مصاحبه…

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

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

مهندسی نرم افزار که یکی از درس های مهم هست تا حد خوبی مطالب را پوشش میدهد ولی مثلا از اسکرام سوال میکنند که نیاز به مطالعه بیشتر دارد و یا معماری نرم افزار حداقل MVC,MVVM را نیاز دارید. یک سری معماری های معروف دیتابیس و تحلیل آن ها رو هم نیاز دارید، بعضی وقت ها سوالی میکنند که نیاز به بهبود عملکرد دیتابیس دارد که ممکن است در طراحی باشد و نوع کوئری زدن.

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

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

اگر مثلا اندروید(جاوا) زده اید 3-4 سوال حتما دارید مثلا سوالاتی که الآن در خاطرم هست

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

یا اگر مثلا بخش بکند(php python go nodejs …) زده اید معمولا سوالاتی از دیتابیس و رست و سوپ دارید و از سینتکس زبان و بعضی موارد مهم آن سوال میشود.( بستگی به زبان دارد)

مثلا در php سوال که چگونه میشود مولتی ترد اجرا کرد تقریبا کلیشه است یا مجیک متد ها را تعریف کنید.

درباره OOP در آن زبان سوال می شود مثل اینکپسولیشن و چند ریختی(پلی مورفیسم) و ارث بری و ارث بری های چند گانه که آیا زبان پیشتیبانی دارد  و چگونه پیاده میکنید.

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

در بعضی موارد سوالات تعریفی در حد برنامه نویسی پیشرفته یا حتی مبانی هم سوال میشود مثلا آبجکت چیست و کلاس به چه دردی میخورد و …

با توجه به رزومه و مهارت هایی که در آن نوشته اید هم سوالاتی میشود که به صورت کلی خودتان توضیح دهید  چه کارا کرده اید و … بعضی از شرکتا تاکید دارند که نیروی ما باید با اخلاق و متعهد باشد و …سوالاتی از کار قبلی شما میشود و در مواردی هم برنامه آیندتون که آیا قصد خارج رفتن دارید یا خیر.

+ پرسیدن معدل موارد مختلفی را دیدم که بپرسن بی اهمیت باشه … نپرسن اصلا  و برعکس بپرسن با اهمیت هم باشه! ولی نکته ی جالبش اینه که  بستگی به شخصیت طرف داره مورد بوده طرف با معدل بالا 16 اصلا حال نکنه و بگه معدل مطلوب من 14 تا 16 است و مورد هم بوده معدل 15 رو مسخره کنه و بگه که درس که نمیخونی چرا اومدی دنبال کار…(!!)

ولی به نظرم اگر معدل بالا 18 دارید قطعا رزومه ی خوبی محسوب میشود بین 15 تا 17 نیز مناسب است در هر صورت کاملا سلیقه ای بود و ممکن است اصلا اهمیتی برای استخدام نداشته باشد.

دانشگاه شما نیز اگر سراسری و جز دانشگاه های خوب سطح کشور باشد خیلی کمک میکند و دانشگاه هر چه رنک بهتر شانس بهتری برای جای بهتری دارید…(تقریبا بدیهی است! )

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

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

البته موارد بهتر و بدتر هم دیده شده ولی از نظر من معمولا همین روال هست. مثلا گفته شد که شرکت هایی هستند که تا 3 ماه آزمایشی هستید و مثلا حقوق 960 هزار تومن در بهترین شرایط!(ماه اول هم ممکن است صفر) و مورد هایی هم هستن که در کارآموزی حتی ساعتی 7 تومن پول بدهند و یا یه پروژه ساده در حد 2-3 روز بدهند و بعد استخدام با حقوق به حق.

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

چالش هایی هم ممکن است پیش بیاید در شرایط بد 20 جا رزومه ارسال میکنید و 15 جا برای مصاحبه قبول میکنند و از آن 15 تا ممکن است هیچ جا هم قبول نشوید ! نا امید نشوید و ادامه دهید 🙂

موفق باشید.

امین سامانی

Drcain بدون دیدگاه

برنامه نویسی و سرگرمی

احتمالا اسم  ACM را شنیده اید. یک رقابت از نوع برنامه نویسی! لذت مسابقات برنامه نویسی در حل سوال است و به نوعی گیک بودن تو  کدنویسی رو طلب میکند. روال کار خیلی سادست و شما کافیه داخل هر سایت programming contest عضو بشوید و شروع به حل مسأله کنید. یکی از سایت های در حال پیشرفت ایرانی کوئرا است و معروف ترین سایت خارجی نیز codeforces.

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

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

از مباحث مهم و غیر قابل گریز گراف است! که حداقل ۲ سوال در هر مسابقه مرتبط با گراف است. با استفاده از دانش از رشته ها , مرتب سازی , جست و جو  و الگوریتم های greedy معمولا قادر به حل ۲ تا ۳ سوال هستید. معمولا سخت ترین سوال ها نیز در dynamic programming مطرح میشود که هم ایده حل سوال سخت است و هم نیاز به درک عمیق به حل مسائل بازگشتی و داینامیک دارید.

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

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

یعنی با رشته ها آشنا شوید و مثلا با پایتون شروع به حل مسائل رشته در سایت codeforces کنید. با مرتب سازی ها آشنا شوید به همین ترتیب و جست و جو و گراف و روش های داینامیک و بازگشتی… آشنایی با مسا‌ئل NP و در نهایت نظریه بازی ها.

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

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

موفق باشید

حسین شفیعیان 2 دیدگاه

آموزش پایتون [گام ۱] مقدمات

سلام

من حسین شفیعیان هستم. در اولین فعالیتم (در قبیله گیک ها) دوره آموزشی مقدماتی پایتون رو تقدیمتون میکنم. احتمالا تا حالا در مورد پایتون زیاد شنیدید ، بهتره با هم شروعش کنیم 🙂

بیشتر بدانید

امیر فرمانی بدون دیدگاه

هوشمندانه انتخاب کنیم

هوشمندانه انتخاب کنیم

در این مقاله قصد داریم دغدغه های یک برنامه نویس تازه کار را برای انتخاب ابزار هایش بررسی کنیم با من همراه باشید.

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

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

shirin بدون دیدگاه

ماجراهای من و پایتون قسمت ۲

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

بیشتر بدانید

siavash بدون دیدگاه

دنیای هوش مصنوعی

هوش مصنوعی

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

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

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

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

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

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

منصور ابراهیمی ۱ دیدگاه

برنامه نویسی بخونم یا مهندسی شبکه؟ – قسمت دوم

امیدوارم قسمت اول مقاله رو مطالعه کرده باشید، توی قسمت دوم قراره در مورد برنامه نویسی صحبت کنیم، اگر برنامه نویس هستید و یا دوست دارید در آینده برنامه نویس بشید فکر میکنم این مقاله میتونه کمک بکنه. بین شغل مهندسی شبکه و مهندسی نرم افزار یکی رو انتخاب کنید، من فکر میکنم مهندسی نرم افزار از یه سری جهات بهتره، به نظرم برنامه نویسی شغل Funny تری هست و استرس کمتری نسبت به شغل شبکه داره، اگر در زمینه تولید نرم افزار بخواهید کار کنید مانند ساخت یک برنامه اندروید یا IOS یا ساخت بازی برای پلت فرم گوشی موبایل، میتونید با قرار دادن آن در مارکت های فروش نرم افزار مثل appStore فروش های میلیونی داشته باشید، شاید تا به حال از این زاویه نگاه نکرده بودیدJ حالا اگر بخواید توی این زمینه قدم بگذارید، واقعا به چه مواردی نیاز دارید ؟ سعی نمیکنم اینجا بگم که چه زبانی خوبه و چه زبانی بد ولی شخصا علاقه ای به زبان های برنامه نویسی java , JavaScript , Ruby ندارم L اما برای شروع باید سعی کنید یک زبان برنامه نویسی یاد بگیرید و کم کم با مفاهیم مهندسی نرم افزار و چند تکنولوژی در این زمینه آشنا بشید. شخصا به هرکسی که تمایل به یادگیری زبان برنامه نویسی داره زبان C  و  C++ رو برای شروع پیشنهاد میکنم و بعد از این گزینه ها هر زبانی که  دوست داشتید

رو دنبال کنید، البته باید انتخاب کنید میخواهید برنامه نویس وب باشید یا اپلیکیشن موبایل یا دکستاپ، بعد شروع کنید به خواندن منابع یادگیری ! اگر مثل من دنبال یه زبان میگردید که باهاش بتونید هرکاری بکنید و توی هر زمینه ای کد بزنید من java یا C# و پیشنهاد میکنم یا اگر واقعا نمیدونید چیکار کنید پیشنهاد میکنم  این سایت رو چک کنید.

http://www.bestprogramminglanguagefor.me

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

اما بدون داشتن مدرک علمی و فقط داشتن علم و دانش فنی شما میتونید کار خودتونو توی هر دوی این شاخه ها پیدا کنید ولی با برنامه نویسی شما میتونید سریعتر بعد از گذراندن ۵-۶ ماه به شغلی که دوسش دارید برسید.

زبان مورد علاقه من C# – Python  هست، ولی تعصب خاصی ندارم، اینکه چرا از java خوشم نمیاد دلیلش برای خودمم مشخص نیست

اگر دوست دارید بدونید تو سال ۲۰۱۶ چه زبان های برنامه نویسی ای مناسب هستند و بازار کار خوبی دارند پیشنهاد میکنم عکس زیر رو مشاهده کنید!

و اگر مایل هستین بدونید درآمد کدوم زبان برنامه نویسی بیشتر است به عکس زیر دقت کنید که درآمد هر زبان رو در سال ۲۰۱۶ در آمریکا نشان میدهد.

و جمله ی پایانی