اولین تجربه برنامه نویسی با کاتلین

یکی از ویژگی های من که هم خوبه هم بد این که دوست دارم همه چیز تست کنم خوب قاعدتا دنیای کامپیوتر و برنامه نویسی هم از  .این قاعده مثتسنی نیست

مدتی است زبان برنامه نویسی تازه ای پا به دنیای اندروید گذاشته و منم با خودم گفتم بد نیست تستش کنم و باهاش یه برنامه بنویسم و قصد دارم در این پست تجربه این کار با شما در میان بگذارم.

اولین کاری که من کردم باز کردن اندروید استادیو بود و زدن تیک استفاده از کاتلین در پروژه!

و همینجا بود که من به مشکل خوردم ! هیچی درست کار نکرد

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

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

اما خوب حالا پروژه کاتلینی ایجاد کردم اما مشکل این بود که کاتلین بلد نبودم پس رفتم به سایت

kotlinlang.org

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

اما تفاوت ها ساختار for , while و switch  که حتما باید بهش نگاه بندازید .

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

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

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

به جای اینترنفیس های تک متدی می تونید یک تابع به عنوان متغییر تعریف کنید ( مثل c++ زمانی که از اشاره گر ها استفاده می کنید یا حتی php ) و با لامبدا تابع تعریف کنید  که ساختار جالبی می شد و از نظر عملکرد تفاوت با اینترفیس تک تابعی نداره فقط کد نویسی کمتری داره.

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

تفاوت بعدی که خیلی متفاوت بود انواع لیست در کاتلین که حتما باید بخونیدش اگرمی خواید به کاتلین واقعی ( نه ترکیبی از جاوا و کاتلین ) کد بزنید

یکی دیگه از ویژگی های کاتلین هوش اندریود استادیو بود ( می دونم ربطی به هم ندارن)!!!!! اما این سازگاری کار براتون خیلی راحت می کنه.

اما نتیجه گیری :

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

اگر دل آزار شد بهتون می گم!

اگر خواستید نظر بدید و عضو ویرگول نبودید می توانید در وبلاگ من بدون عضویت نظرتون بگید

http://karimiblog.ir/blog/2019/01/اولین-تجربه-برنامه-نویسی-با-کاتلین/

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

گردآوری توسط ایده طلایی

آیا دوره‌های آموزشی بسیار طولانی میتوانند مفید باشند؟

نکاتی درباره‌ی بهترین و موثرترین دوره‌های آموزشی

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

http://aparat.com/v/uxNQ7

۶، ۶۰، یا ۶۰۰ ساعت؟ کدام دوره‌ی آموزشی را انتخاب کنم؟

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

  • یک دوره‌ی جمع و جور ۶ ساعته
  • یک دوره ی ۶۰ ساعته
  • یک دوره‌ی ۲ ساله و ۶۰۰ ساعته!

در تصمیم گیری نهایی دچار مشکل شده‌اید و نمیدونید که کدام یک از این دوره‌های آموزشی رو انتخاب کنید و یادگیری رو شروع کنید. در این مقاله میخوایم در خصوص این موضوع صحبت کنیم که بهترین دوره‌های آموزشی چه ویژگی هایی دارند.

سوال‌هایی که باید از خودمان بپرسیم

قبل از اینکه شروع کنیم به انتخاب یک منبع آموزشی و یادگیری، باید یک سری سوالاتی رو از خودمان بپرسیم:

تمام ساعت آموزشی دوره مفید است؟

مهم‌ترین سوالی که وجود دارد این است. آیا تمام آن ۶۰ تا ۶۰۰ ساعت آموزش مفید است؟

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

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

حوصله داریم؟ سنگ بزرگ نشونه‌ی …

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

ضرب المثلی وجود دارد که میگوید: «سنگ بزرگ نشانه‌ی نزدن است»

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

میشه توی زمان کمتری همین هارو یاد گرفت؟

سوال مهم بعدی این است. آیا میشود همین مباحث رو توی ۱۰ ساعت یاد گرفت؟

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

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

آیا واقعا به ۶۰ ساعت دانش نیاز داریم؟

نکته‌ای که باید دقت کنیم این است که آیا اصلا به چند ده ساعت آموزش نیاز داریم؟

شاید بخواهیم فقط بصورت مقدماتی با یک موضوع آشنا بشیم یا اینکه یک بخش خاص از یک موضوع رو یاد بگیریم. آیا واقعا نیازه که ۶۰ ساعت آموزش در خصوص اون تهیه کنیم؟

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

چرا یاد نمیگیرم؟ / چرا پیشرفت نمیکنم؟

اگه نتونیم یک فرایند یادگیری موثر داشته باشیم، اینجوری کلافه میشیم

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

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

مثلا میخوایم PHP یاد بگیریم

فرض کنید که میخواهیم شروع به یادگیری زبان برنامه نویسی PHP کنیم. قبل از هرچیز نیاز داریم به منابع آموزشی. به همین منظور:

  • دوره‌ی مهدی خسروی رو میخریم
  • دوره‌ی خسرو مهدوی رو دانلود میکنیم
  • ۴۰ تا مقاله رو بوک مارک میکنیم
  • توی ۵ تا کانال و گروه تلگرامی عضو میشیم
  • ۱۰ تا کتاب انگلیسی رایگان دانلود میکنیم
  • ۵ تا دوره‌ی انگلیسی لیندا رو از دوستون میگیریم
  • یه کتاب خیلی خوب از نمایشگاه کتاب میخریم
  • یه پلی لیست خوب از یوتیوب پیدا میکنیم، و نهایتا میگیم: خببببب،‌ حالا میخوام یادگیری رو شروع کنم

اما با یک سوال بزرگ مواجه میشیم: کدوم یکی از اینهارو اول شروع کنم؟ کدومشون برای یادگیری بهتره؟

مشکل اصلی: تعدد انتخاب

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

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

وقت ما ارزشمند است

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

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

قانون ۲۰ ساعت

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

اخیرا کتاب بسیار خوبی که متاسفانه هنوز به فارسی ترجمه نشده را خواندم. کتاب The First 20 Hours از Josh Jaufman، در این کتاب ایده‌های فوق العاده‌ای برای یادگیری سریع مطرح شده است.

آقای کافمن در این کتاب بر این عقیده است که برای یادگیری یک مهارت در حدی که بتوانیم از آن لذت ببریم، ۲۰ ساعت تمرین درست و اصولی کافی است.

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

اکثر مدرسان برنامه نویسی: من اینقدر بلدم که میتونم …

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

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

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

این افراد فقط به یک دلیل این کار را انجام میدهند. به این دلیل که این پیام را منتقل کنند که:

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

اما متاسفانه این افراد، یک اصل بزرگ که انیشتین به خوبی به آن اشاره کرده است را فراموش کرده‌اند:

بهترین مدرس‌های و دوره‌های آموزشی در دنیا چه ویژگی‌هایی دارند؟

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

بسیار ساده

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

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

بسیار کوتاه

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

بسیار خاص

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

  • آموزش HTML5
  • آموزش CSS3
  • آموزش طراحی وبسایت واکنش گرا
  • آموزش جاوا اسکریپت
  • آموزش جی کوئری
  • ترکیب جاوا اسکریپت و جی کوئری برای ساخت وبسایت
  • و…

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

کاملا عملی

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

حواسمون به اینا باشه:

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

صفر تا صد

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

پیشنهاد میکنم مقاله برنامه نویسی چیست؟ را هم حتما مطالعه کنید.

۶۰۰ ساعت آموزش کاربردی

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

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

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

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

این موضوع این نکته را دربر دارد که همانطور که یک فوتبالیست حرفه‌ای، شاید نتواند یک مربی حرفه‌ای باشد، یک برنامه نویس حرفه‌ای هم شاید توانایی تدریس حرفه‌ای نداشته باشد.

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

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

تدریس و توانایی انتقال مفاهیم، خود یک تخصص است که متاسفانه بسیاری از مدرسان ما از آن محروم هستند.

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

میانبر، ترفند، راز و…

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

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

حرف آخر 🙂

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

نظر شما دربا‌ره‌ی دوره‌های آموزش ناکارآمد چیست؟ آیا تجربه‌ی ناموفقی در خصوص انتخاب اشتباه یک دوره‌ی آموزشی اشتباه داشته‌اید؟

منبع: یادیفای

نوشته آیا دوره‌های آموزشی بسیار طولانی میتوانند مفید باشند؟ اولین بار در ویرگول پدیدار شد.

گردآوری توسط ایده طلایی

چطور پروژه برنامه نویسی بگیریم؟

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

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

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

۱.گرفتن پروژه از وب سایت های برون سپاری (فریلنسرینگ)

یکی از بهترین روش برای گرفتن سفارش پروژه برنامه نویسی است استفاده از اینترنت است یعنی شما میتوانید با استفاده از اینترنت به بازاری وصف ناشدنی دست پیدا کنید. فقط باید بدانید چطور و چگونه این کار رو انجام دهید.وب سایت های مانند پارسکدرز برای این منظور استفاده کنید.

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

۲٫گرفتن پروژه از شرکت ها

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

۳.گرفتن پروژه از دوستان و آشنایان

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

۴.ایجاد برندینگ شخصی

(منبع)وقتی شما به عنوان یک فریلنسر فعالیت می‌کنید, جریان درآمد شما تنها با انجام پروژه‌ها تأمین می‌شود. یعنی وقتی مشغول کار برروی یک پروژه نیستید, پولی هم در نخواهید آورد. از طرف دیگر برندینگ کاری وقت گیر و هزینه بر است. شما برای اینکه برند خودتان را به وجود بیاورید باید وبلاگ نویسی کنید, در شبکه‌های اجتماعی فعال باشید, برای شبکه سازی در رویدادهای مختلف مشارکت کنید و صدها کار دیگر که وقت و هزینه‌ی زیادی را از شما طلب می‌کند.

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

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

گردآوری توسط ایده طلایی

۵ زبان برنامه نویسی برتر در حوزه بلاک‌چین

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

بلاک چین چیست؟

بلاک چین (Blockchain) از دو کلمه Block (بلوک) و Chain (زنجیره) ایجاد شده است. این فناوری در حقیقت زنجیره‌ای از بلوک‌هاست.به طور کلی بلاک چین یک نوع سیستم ثبت اطلاعات و گزارش است.تفاوت آن با سیستم‌های دیگر این است که اطلاعات ذخیره شده روی این نوع سیستم، میان همه اعضای شبکه به اشتراک گذاشته می‌شوند و با استفاده از رمزنگاری امکان حذف و دستکاری اطلاعات ثبت شده تقریبا غیرممکن است.

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

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

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

بهترین زبان برنامه نویسی بلاک چین

چندین زبان برنامه نویسی وجود دارند که می‌توانند برای ایجاد اپلیکیشن هایی برای بلاک چین کمک کنند می‌توان از زبان‌های قدیمی مانند ++C، جاوا (Java) و پایتون (Python) استفاده کرد یا دیگر زبان‌هایی مانند Simplicity و Solidity که جدید هستند و برای بلاک چین اختصاصی شده‌اند.

۱.زبان سی پلاس پلاس (++C)

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

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

۲.زبان جاوا (Java)

جاوا به عنوان زبان جهانی اینترنت بسیار اهمیت دارد. زبان برنامه نویسی بلاک چین زبانی قدیمی و برای ایجاد پیج های اینترنتی فعال بسیار مفید است. همچنین برای ایجاد بلاک چین‌های ساده و تغییرناپذیر نیز کاربرد دارد. تغییر ناپذیری باعث می‌شود که هیچ کس نتواند اطلاعات یک بلوک را تغییر دهد هر بلوک تازه که بلاک چین اضافه می‌شود.

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

۳.زبان پایتون (Python)

زبان پایتون به وسیله یک برنامه نویس هلندی به نام گویدو وان روسام (guido van Rossum) در سال ۱۹۹۱ ابداع شد. هدف او تولید زبان برنامه نویسی آسان و مینی مالیستی بود. ترکیب و منطق این برنامه، نشان از روحیه بلندپرواز، ابداع کننده آن دارد. در نتیجه پایتون در زمینه توسعه نرم افزارها و وب، زبانی برتر است. این زبان در میان متخصصان کامپیوتری و دانشمندان زمینه دیتا بسیار معروف است. همچنین یکی از زبان‌های برتر برنامه نویسی بلاک چین است.

۴.زبان سیمپلیسیتی (Simplicity)

سیمپلیسیتی یک زبان برنامه نویسی بلاک چین است که برای تنظیم قراردادهای هوشمند به کار می‌رود. این زبان برنامه نویسی بلاک چین به گفته راسل اوکانر (Russell O’Connor) سازنده این برنامه بسیار ساده است. این زبان برای بهبود زبان‌های پایه‌ای ارزهای دیجیتال مانند بیت کوین و اتریوم به کار برده می‌شود.

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

۵.زبان سالیدیتی (Solidity)

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

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

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

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

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

گردآوری توسط ایده طلایی

اهمیت یادگیری زبان برنامه نویسی C برای برنامه نویسان

برنامه نویسان به دو دسته تقسیم می شوند؛ آنهایی که یک زبان را به صورت پایه ای یاد میگیرند تا با استفاده از لایبرری ها و فریمورک ها صرفاً تسک های یک پروژه را به اتمام برسانند، و آنهایی که کنجکاو هستند تا از روش کار لایبرری ها و فریمورک های مورد استفاده خود درک کامل پیدا کنند.

برنامه نویسان مصرف گرا، به اصطلاح «استک آورفلویی»

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

تقصیر ما یا دوستان ناباب؟

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

چرا C یاد بگیریم؟

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

کلاه خود را قاضی کنید

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

سر آخر

اگر برنامه نویسی بخواهد که توانایی حل مسائلی به غیر از مسائل روزمره و مرتبط با فیلد خاص شغل فعلی خود را داشته باشد، و نرم افزار های اکستندبل (توسعه پذیر از جهت نرم افزاری) و اسکلبل (توسعه پذیر از جهت افزایش توانایی پاسخگویی به حجم بیشتر درخواست و کاربر) تولید کند، باید به چم و خم توسعه نرم افزار در زبان نیمه-ابتدایی ای چون زبان C مسلط باشد. چون به حتم این تسلط در هر زبان دیگری راه گشای حل مسائل و درک بهتر وی از محصول تولیدی خود می شود.

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

گردآوری توسط ایده طلایی

آموزش مینی فریم ورک فلسک

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

کتاب آموزش فلسک

دو پاراگراف اول کتاب رو در ادامه می تونید بخونید.

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

فلسک، فریمورک توسعه برنامه های تحت وب برای زبان برنامه نویسی پایتون است. Ronacher Armin توسعه دهنده آن است که گروه علاقه مندان به پایتون با نام Pocco را نیز رهبری می کند. فلسک بر پایه ابزار WSGI Werkzeug و موتور نشانه گذاری Jinja٢ کار می کند که هر دو از پروژه های Ronacher هستند.

برای دانلود کتاب به پروژه متن باز آموزش فلسک بروید و فایل PDF رو برای خواندن آموزش و یا فایل TEX را برای ویرایش فایل لاتکس پروژه دانلود فرمایید.

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

گردآوری توسط ایده طلایی

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

ارلنگ چیست؟

اولش این رو بگم که ارلنگ یک زبان برنامه‌نویسی تابع‌گرا است.

اگه تا حالا با زبان‌های دستوری کار کرده باشین عباراتی مثل ++i ممکنه براتون عادی باشه اما در برنامه نویسی تابع‌گرا مجاز نیست. در واقع تغییر دادن مقدار یک متغیر شدیدا ممنوعه!‍‍‍ ممکنه عجیب و غریب به نظر بیاد ولی اگه کلاس ریاضی رو یادتون باشه چیزی که یادگرفتین این بود:‍‍‍‍‍‍

y = 2
x = y + 3
x = 2 + 3
x = 5

اگه اینو اضافه کنیم:

x = 5 + 1
x = x
∴ ۵ = ۶‍‍

گیج شدین؟! برنامه‌نویس‍‍ی تابع‌گرا این را به رسمیت میشناسه. اگه ما بگیم که x برابر است با ۵؛ منطقا نمتونیم مدعی باشیم برابر ۶ هم هست! و همچنین اینکه یک تابع با پارامتر یکسان همیشه یه چیز برمیگردونه:

x = add_two_to(3) = 5
∴ x = 5

خروجی توابع با پارمترهای یکسان همیشه یکی است و تغییر نمی‌کنه که به این اصل referential transparency میگیم. این اصل چیزیه که اجازه میده add_two_to(3) رو با ۵ جاگزین کنیم؛ در نتیجه ۳+۲ همیشه برابر با ۵ است. این به این معنی است که میتونیم چندین تابع رو به هم بچسبونیم تا یک مسئله پیچیده تر رو حل کنیم بدون اینکه مشکلی پیش بیاد. منطقی و تروتمیز. اینجوری نیست؟ مشکلی هست این وسط:

x = today() = 2018/10/22
-- یک روز صبر کنین --
x = today() = 2018/10/23
x = x
∴ ۲۰۱۸/۱۰/۲۲ = ۲۰۱۸/۱۰/۲۳

وای نه! معادله زیبای من! ناگهان همه چیز اشتباه میشه! چجوریه میشه وقتی که خروجی تابع من هر روز فرق می‌کنه؟

مشخصا مواردی وجود داره که خوبه referential transparency نقض بشه. ارلنگ رویکرد عملگرایی با برنامه نویسی تابع‌گرا داره: پیروی کنید از خالص ترین اصول( پرهیز کردن از تغییر دادن داده، referential transparency و غیره) اما وقتی به مسائل دنیای واقعی برخوردید این اصول رو نقض کنید .

الان ارلنگ رو تعریف میکنیم: ارلنگ یک زبان برنامه‌نویسی تابع‌گرا است، اما با تاکید بسیار زیاد روی همزمانی(concurrency) و قابلیت اطمینان بالا (high reliability). ارلنگ برای اینکه بتواند ده‌ها کار رو همزمان انجام بدهد از مدل بازیگر (actor model) بهره می‌برد و هر بازیگر یک فرایند (process) ماشین مجازی است. اگه شما یه بازیگر در جهان ارلنگ بودید، یک شخص تنهایی هستید که در یک اتاق تاریک بدون پنچره نشسته‌اید و منتظرین تا یک نامه‌ای رو از صندوق‌ پستی بگیرین. وقتی که نامه رو گرفتین، یک کار مشخصی میکنین: صورتحساب رو پرداخت میکنین وقتی که یک صورتحساب گرفتین؛ وقتی یه کارت تبربک گرفتین، یه نامه «تشکر» مینویسین و بی‌خیال نامه هایی میشین که درکی ازش ندارین.

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

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

وقتی ما ارلنگ رو تعریف میکردیم در سطح زبان بودیم ولی در یک معنای وسیعتر این همه اون چیزی نیست که وجود داره؛ ارلنگ یک محیط توسعه هم هست. کد به بایت‌کد ترجمه میشود و داخل ماشین مجازی اجرا می‌شود. بنابراین ارلنگ شبیه جاوا و بچه‌هاش همه جا میتونن اجرا بشن. توزیع استاندارد ارلنگ شامل ابزار‌های توسعه ( کامپایلر، دیباگر، پروفایلر و فریمورک تست)، فریمورک OTP، یک وب سرور،پایگاه داده mnesia؛ یک سیستم ذخیره سازی کلید-مقدار که میتونه خودشو روی چندین سرور توزیع کنه؛از تراکنش های چند سطحی پشتیبانی میکنه و اجازه میده بهتون هر نوع داده‌ی ارلنگ رو ذخیره کنین.

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

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

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

خیلی نوشابه نخورین!

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

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

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

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

یه چیز دیگه هم هست که تو ذهنتون داشته باشین: در حالی که ارلنگ بعضی کارها رو خوب انجام میده، میشه همون نتیجه رو با یک زبان دیگه هم گرفت، برعکسش هم درسته؛ نیاز هست که هر مسئله‌ای درست ارزیابی بشه و متناسب با اون ابزارش هم انتخاب بشه. ارلنگ در بعضی زمینه‌ها آش دهن سوزی نیست، مخصوصا برای کارهایی مثل پردازش تصویر، درایور سیستم عامل و غیره و در برخی زمینه ها هم عالیه مثل نرم‌افزاهای بزرگ سروری (مثل صف، نگاشت-کاهش)، پیاده سازی پروتکل های سطح بالاتر، پیام‌رسان و غیره. موضوعات این وسط بستگی به شما داره. الزاما خودتون رو در ارلنگ به نرم‌افزار های سروری محدود نکنین. مواردی وجود داره که افراد کارهای غیرمنتظره و شگفت‌انگیزی هم انجام دادن، مثلا ربات IANO که توسط تیم UNICT درست شده و برای هوش مصنوعی این ربات از ارلنگ استفاده شده و در مسابقات یوروبات ۲۰۰۹ مدال نقره رو هم برنده شده. مثال دیگه‌ش Wings 3D هست، یک مدل کننده سه بعدی (نه رندرکننده) که متن بازه و با ارلنگ نوشته شده و بنابراین چند سکویی هم هست.

برای شروع چه چیزی نیاز دارین؟

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

روی لینوکس هم به راحتی و با دستور زیر نصب کنین

apt-get install erlang # debain based linux
yum install erlang # redhat based linux

روز خوش یا هم شب بخیر!

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

گردآوری توسط ایده طلایی

فواید یادگیری الگوریتم و ساختمان داده (درک علوم کامپیوتر)

شاید عمده افراد (خودمم جزو همین دسته بودم) در اولین برخوردشون با زبان های برنامه نویسی برن به سمت یادگیری ابزار هایی که زبان در اختیارشون میگذاره و در واقع شروع به بازی با خود زبان و انواع داده ها، I/O و … بکنن.

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


به نظر من افرادی که میان به سمت این دنیا بزرگ و بی انتها دو دسته هستند:

۱-صرفا از این کار برای هدف اصلی دیگری استفاده میکنن.

۲-عاشق این کار هستند.

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

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

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

همونطوری که ادسخر دیکسترای فقید – خالق الگوریتم دیکسترا- میگه:

“علوم کامپیوتر همون قدر درباره کامپیوتر هست که اخترشناسی درمورد تلکسوپ هست.”


نتیجه گیری:

۱- به دونستن زبان بسنده نکنیم و تمرکزمون روی حل مسئله باشه.

۲- دانش مون رو مدام آپدیت کنیم.

۳-ریاضی بخونیم و الگوریتم هارو درک کنیم.

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

گردآوری توسط ایده طلایی

چگونه برنامه نویس حرفه ای بشویم ؟

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

افسانه اول درباره استعداد و انگیزه

دو افسانه ای که مردم را از یادگیری یک مهارت یا حرفه، باز می دارد عبارتند از :

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

واقعیت:‌ مردم در چیزی مهارت دارند بخاطر اینکه آنها بسیار تمرین کرده اند.

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

برنامه نویس

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

آیا در وجودتان بخاطر اینکه شما به حد کافی با استعداد نیستید یا چون به راحتی نمی توانید کاری ( کدنویسی ) انجام دهید، شما را از انجام آن باز می دارد؟ آیا فکر می کنید زمان زیادی برای کسب مهارت مورد نظر صرف می کنید؟ آیا این زمان بسیار طولانی است ؟‌

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

قبول کنید که برای مسافرت از شیراز تا تهران نیاز دارید که ۷۰۰ کیلومتر بروید. هیچ مسافری بدون طی کردن این مسافت به تهران نخواهد رسید. پس برای تبدیل به یک برنامه نویس ماهر قبول کنید که فاصله وجود دارد و با هیجان و شوق رسیدن به مقصدتان قدم بردارید.

در نهایت پاسخ به این سوال؛ آیا می دانید من چند ساله خواهم شد زمانیکه این مهارت را یاد بگیرم ؟ می تواند این باشد: همان سنی را خواهم داشت که اگر این مهارت را یاد نگیرم!

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

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

حقیقت: افرادی که سخت کار می کنند دارای انضباط شخصی هستند.

شما نمی توانید کار زیادی در زندگی اتان انجام دهید اگر تنها روزهایی که حس خوبی داشته باشید سر تمرین بروید. (جری وست – بازیکن حرفه ای بسکتبال)

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

ایجاد عادت تمرین

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

متشکرم از زمانی که برای یادگیری صرف کردید.

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

گردآوری توسط ایده طلایی

چگونه به یک هکر یا متخصص امنیت عالی تبدیل بشم

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

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

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

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

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

اما با داشتن بحث قبلی در ذهن، بذارین نگاهی هم بندازیم به انواع شغل‌هایی که یکه متخصص امنیت می تونه داشته باشه و ببینیم راه رسیدن به هر کدومش چه چیزیه:

  • تست کننده امنیت اپلیکیشن‌های وب:‌ یاد بگیرین برنامه بنویسین تا توی این بحث از آدم‌هایی که فقط بلدن اپلیکیشن تست کنن فاصله بگیرین. درک از سیستم‌عامل و دیتابیس بهتون کمک خواهد کرد و همینطور دونستن چیزهایی مثل پی اچ پی، جاوااسکریپت، پایتون و جاوا. اگر بتونین شیوه کار چیزی رو درک کنین، شکستنش راحتتر خواهد بود. بعد از اون دنبال OWASP بگردین و مسیر رو پیدا خواهید کرد.
  • متخصص امنیت شبکه:‌ بهتره برای خودتون یک لابراتوار درست کنین که اجزای متفاوتی داشته باشه. مثلا استک لمپ (لینوکس، آپاچی، مای اسکوئل، پی اچ پی) همیشه شروع خوب و مرسومی است و بعد بررسی کنین که هر جزء از این استک چطوری امن می‌شه. درک اولیه‌تون که کامل شد می‌تونین برین سراغ PTES (استاندارد اجرای پن تست) و شیوه‌هایی که هکرها به شبکه‌ها حمله می‌کنن رو یادبگیرین و مطمئنا راحت کشف خواهید کرد که علیه هر متد باید چه کاری انجام بشه.
  • Compliance and Auditing: برای اینکار باید در مورد تکنولوژی‌های پایه‌ای و بیزنس مدل‌ها آگاهی کسب کنین. افرادی که در این سمت هستن، بیزنس و امنیت را درک می کنن و مطمئن می‌شون که کارکرد بیزنس بدون صدمه زدن به توان خلاقیت و سرعت، امن می‌شه. خوبه در مورد کسب و کارها بخوانید و با مدیرعامل‌ها و طراحان کسب و کار حرف بزنید و درک واقعی از جهان داشته باشین. در مورد شرکت‌های بزرگ تحقیق کنین و به مواردی که در Center for Internet Security به آن‌ها اشاره شده نگاه کنین. همچنین قواعدی مثل HIPAA، PCI-DDS، DISA STIG و ایزو ۲۷۰۰۱ و SOC2 رو بخوانید و فراموش نکنین که قراره سازمان بدون صدمه زدن به قابلیت‌ها و کارکردهاش‌، امن می‌شه.
  • رمزنگاری/تحلیل رمز: اگر می‌خواهید در این حوزه کار کنید خوبه در زمینه‌های ریاضی و رمزنگاری، تحصیلات آکادمیک داشته باشین و منابع علمی را دنبال کنین. یک رمزنگار ممکنه تو دانشگاه تدریس کنه یا روی الگوریتم ها کار کنه ولی کمتر شرکتی معمولی هست که یک رمزنگار استخدام کنه.
  • مشاور امنیت: کسی که به عنوان مشاور امنیت کار می‌کند، لازم است دانشی گسترده و درک خوبی از محیط‌های کاری و ساز و کار شرکت‌ها داشته باشه. برای این شغل نیاز دارین دانشی به روز از تکنولوژی‌های مورد استفاده شرکت ها و استانداردهای مورد استفاده آن‌ها داشته باشین و با Best Practiceها آشنا بشین. همچنین باید در مورد قوانین محدود کننده و نیازمندی‌های بالا دستی هم آگاه باشین تا بتونین بهترین مشاوره رو به مشتریانتون بدین. اینجا انتظار می ره شما با افق دید بسیار گسترده‌ و آگاهتون، نقاط مورد نیاز برای تقویت امنیت شرکت‌ها و در عین حال حفظ کارایی اونها و سازگاری‌‌شون با قوانین رو پیشنهاد بدین.
  • محقق آسیب‌پذیری‌ها:‌ این شغل به طور خاص نیاز داره که شما حداقل توی یک حوزه بسیار باسواد و با تجربه باشین و حداقل یک زبون برنامه نویسی، فریم ورک یا سیستم عامل رو به خوبی بدونین. بعد با این دانش روی بخش کوچیکی از یک محصول یا شرکت تمرکز می‌کنین و سعی می‌کنین مشکلاتش رو پیدا کنین. مثلا ممکنه شما در سی یا اسمبلی بهترین باشین و با سواد و دانش کامل روی یک شکل از پروتکل، بیاین و روی شیوه کار یک کتابخونه ارتباطی تمرکز کنین و اشکالاتش رو کشف کنین.
  • متخصص امنیت نرم‌افزار: معمولا مهندسان و معماران با تجربه نرم‌افزار بعد از مدتی به متخصصان امنیت هم تبدیل می‌شوند. باید حداقل در یک استک نرم افزاری متخصص باشید و بعد دانش امنیتی خود را برای امن‌تر کردن یک برنامه در آن استک متمرکز کنید. شاید هم وظیفه شما در این شغل، بهتر شدن امنیت کل یک سازمان یا پاسخ دادن به نیازهای امنیتی بقیه کارمندان و برنامه نویسان باشد.

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

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

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

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

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

مرجع اصلی

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

گردآوری توسط ایده طلایی