badrinex بدون دیدگاه

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

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

هوشمند سازی و اینترنت اشیا:


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

شبکه:


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

مجازی سازی:


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


‏ KVM یک ابزار مجازی سازی تحت لینوکس می باشد که به عنوان یک ابزار مجازی سازی محبوب شناخته شده است که دانستن آن در مواردی بسیار کمک کننده است.
این تخصص در اکثر دیتا سنتر ها و شرکت های که خدمات سرویس VPS دارند کاربرد دارند و این شرکت ها به افراد دارای تخصص مذکور نیاز دارند.

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

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

لینوکس:


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

امنیت:


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

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

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

 

Drcain ۱ دیدگاه

تست نرم افزار با پایتون

تست سنتی و کلاسیک! 

اکثر برنامه نویس ها از طریق یک پرینت ساده به تست متد و فانکشن ها میپردازند مثلا در مثال قبلی به   خروجی 8 میرسند و به نظر درست میاید ولی چند مشکل دارد

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

پس برای همین است که سراغ Unit test  می رویم.

 

 

 

 

فریم ورک یونیت تست

فریم ورک یونیت تست پایتون، گاهی اوقات با نام “PyUnit”، یک ورژن زبان پایتون از Junit است که توسط کنت بک و اریک گاما نوشته شده است. جی یونیت نیز یک تست فریم ورک ساده در زبان جاوا است.

یونیت تست از ویژگی های مختلفی پشتیبانی میکند مانند automation، setup و shutdown  (همانند setup teardown در جی یونیت)  و اگریگیت  کردن تست ها در کالکشن ها.

یونیت تست برای سادگی کار، متد ها و کلاس هایی را نیز در اختیار میگذارد که تست های زیادی را به راحتی انجام دهیم.

مثال

حال برای نمونه یک ماشین حساب ساده می نویسم و به تست آن میپردازیم.

4 تابع جمع، تفریق، ضرب و تقسیم و نیز یک اکسپشن تقسیم صفر در تابع تقسیم

 

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

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

کد روبرو نیز برای اجرای راحت تر استفاده میشود

if __name__ == ‘__main__’:

    unittest.main()

  (بدون آن باید از -m unittest استفاده کرد)

در نهایت خروجی در شکل روبرو قابل مشاهده است که OK  به معنی موفقیت در تست است.

برای مثال فرض کنید تابع جمع خوب 10 با 5 برابر 14 است  و تابع کم خو 10 با 5 برابر 6

 self.assertEqual(calc.addkhob(10, 5), 14)

self.assertEqual(calc.subtractkhob(10, 5), 6)

تغییرات روبرو را انجام میدهیم(تابع های مربوط در ماشین حساب را نیز تغییر میدهیم)

خروجی را در  میبینیم.

انتظارمان از تابع اددخوب 14 بود ولی 15 خروجی داد و همین طور برای سابترکت خوب که 5 است.

در نهایت 2 تابع فیل شدند.

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

 

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

raise ValueError(‘Can not divide by zero!’)

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

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

که مانند حالت درست پیام Ok را نمایش میدهد.

with self.assertRaises(ValueError):

            calc.divide(10, 0)

 

اگر ارور ریز نشود طبیعتا AssertionError: ValueError not raised را خواهیم داشت.

  • شما میتوانید از متد های متنوعی استفاده کنید ولی من با توجه به نیاز از اسرت ایکوال استفاده کردم
  • Document

موفق باشید

Drcain بدون دیدگاه

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

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

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

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

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

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

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

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

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

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

موفق باشید

حسین شفیعیان بدون دیدگاه

آموزش پایتون [گام 4] ورودی و خروجی داده ها

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

بیشتر بدانید

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

آموزش پایتون [گام 3] عملگر ها و دستورات شرطی

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

از طریق عملگر ها در برنامه نویسی برای پردازش استفاده میشه ، مواردی مثل جمع ، ضرب ، تقسیم و … رو در ریاضی دبستان ( اگه یادتون باشه 🙂 ) خوندین

بیشتر بدانید