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

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

عدم تمرکز کافی

یک مطالعه از موسسه فناوری Georgia اینگونه بیان می‌کند که توسعه دهندگان نرم افزار پس از قطع شدن تمرکزشان، میانگین ۱۰ تا ۱۵ دقیقه زمان تا ادامه دادن دوباره به کارشان نیاز دارند. طبق مجله هفتگی New York Times، متوسط دقت و توجه یک فرد از سال ۲۰۰۰ به بعد از ۱۲ ثانیه به ۸ ثانیه کاهش یافته است. حواسپرتی‌ها در بهره‌وری عملکرد کار ما به شدت تاثیر گذارند. ما زمانی که تمرکز خود را از دست می‌دهیم، دو برابر اشتباهات معمولی را انجام می‌دهیم و احساس اضطراب و استرس خواهیم داشت. به برخی از عواملی که باعث از دست رفتن تمرکز می‌باشند می‌پردازیم:

  • فضای مجازی

رئیس تحقیقات در توییتر کانادا، Alyson Gausby، اینطور بیان می‌کند که: “ما در جهانی زندگی می‌کنیم که همه در هر جای دنیا از طریق فضای مجازی با یکدیگر در ارتباط هستند. زمانی که از صفحه شبکه اجتماعی خود خارج می‌شویم این حس به ما دست می‌دهد که دیگر به دنیا متصل نیستیم. این مهم‌ترین عامل برای از دست رفتن تمرکز شما در حین کار می‌شود.

  • سر و صدا

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

  • عدم استراحت کافی

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

  • استرس

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

  • تغذیه نامناسب

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

جلوگیری از حواس‌پرتی

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

  • مدیریت استرس

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

  • غیر فعال کردن notification در شبکه‌های اجتماعی

“ابزار اجتماعی ما، پیشرفت برای یک جامعه مدرن نیست، بلکه یک چالش برای آن است.” – Clay Shirky، نویسنده کتاب Here Comes Everybody: The Power of Organizing without Organizations.

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

  • استراحت کافی

یادگیری نحوه کدنویسی سرگرمی است که ما گاهی اوقات فراموش می‌کنیم. چگونگی استراحت نیز یک مهارت است که ما باید یاد بگیریم. ما با داشتن خواب و استراحت کافی می‌توانیم با فکر باز و ذهن آزاد‌تر کار خود را ادامه دهیم و مسائل را بهتر و هوشمندانه‌تر حل کنیم.

  • تغذیه سالم و ورزش

“نگه داشتن بدن سالم و مناسب، از طریق ورزش و تغذیه، کلید زندگی بهتر، نه تنها در خانه بلکه در کار است.” – David Vollmer‌، مدیر عامل Isolator Fitness.

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

کد‌نویسی راحت و آسان

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

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

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

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

مهندس نرم افزار با برنامه نویس فرق دارد!!

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

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

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

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

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


چون اصول مهندسی نرم افزار رعایت نشده اند و مستندات دقیق و با وسواس زیاد تهیه نشده و صرفا یک سری کد پیوسته کپی پیست شده


http://karimiblog.ir/blog/2018/12/%d9%85%d9%87%d9%86%d8%af%d8%b3-%d9%86%d8%b1%d9%85-%d8%a7%d9%81%d8%b2%d8%a7%d8%b1-%d8%a8%d8%a7-%d8%a8%d8%b1%d9%86%d8%a7%d9%85%d9%87-%d9%86%d9%88%db%8c%d8%b3-%d9%81%d8%b1%d9%82-%d8%af%d8%a7%d8%b1%d8%af/

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

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

هرآنچه برای حمله به یک Legacy Code نیاز دارید!

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

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

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

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

اما برای Legacy Code ها با dependency های زیاد و پیچیده، چه نوع تستی باید نوشت؟ اصلا باید چطوری تست نوشت؟

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

وقتی با یک LegacyCode روبرو هستید در مرحله ای به این نتیجه میرسید که باید وضع موجود رو بهبود بدید و زندگی خودتون رو راحتر کنید! تو این مرحلست که باید راجع به Characterization Test یا Golden Master Test بدونید.

اما Charactrization Test یا همون Golden Master چیه ؟

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

اینجوری شما میتونید رفتار فعلی سیستمتون رو فریز کنید و شروع به تغییر در جهت بهبود سیستم یا همون Refactoring بکنید. این فرض وجود داره که هیچ تغییری در رفتار سیستم در نتیجه Refactoring نباید به وجود بیاد و با استفاده از Charactrization تسته که میتونید مطمئن بشید که این فرض درسته.

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

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

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

تو این پست سعی کردم یه تصویر خیلی کلی از CharactrizationTest بهتون بدم اگه دوست دارید بیشتر راجع به بهبود Legacy Code ها بدونید، بهتون پیشنهاد میکنم کتاب Working Effectively with Legacy Code رو بخونید و این تمرین رو انجام بدید.

نوشته هرآنچه برای حمله به یک Legacy Code نیاز دارید! اولین بار در ویرگول پدیدار شد.

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

۱۱ کانال برتر یوتیوب برای آموزش برنامه نویسی

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

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

۱- کانال Codecourse
قطعاً یکی از بهترین کانال ها برای شروع یادگیری زبانهای برنامه نویسی این کانال است و مطمئناً آموزش های برنامه نویسی آن در زبان PHP جزو بهترین هاست. همچنین آموزش های این ویدئو بروی اصول استاندارد نویسی بسیار تمرکز دارد و بهتر است که یاد بگیرید چگونه استاندارد تر کد بزنید.
حتماً به این کانال سر بزنید و تجربه خودتون رو با من در اشتراک بزارید.

۲- کانال JREAM
این کانال زبانهای برنامه نویسی زیادی را همانند Codecourse پوشش نمیدهد ولی یک بخش آموزشی ویژه ۵۴ قسمتی مخصوص PHP-Object-Oriented ( برنامه نویسی شی گرا ) که پیشنهاد میکنم از دستش ندید.

۳- کانال RebellionRider
این کانال دارای بیش از ۱۰۰ فیلم ضروری برنامه نویسی SQL است که سطح مبتدی تا پیشرفته میتوانید این زبان برنامه نویسی رو بیاموزید.
برنامه نویسی SQL مبتدی آن دارای ۸۹ ویدئو است و مرحله به مرحله پس از ارتقا خود در این زبان میتوانید با این کانال و ویدئوهای آموزشی اش همراه باشید.

۴- کانال PASStv
یک کانال آموزشی خوش ساخت از ویدئو های خوب در مورد تجربیات و زمینه های یادگیری SQL SERVER . این کانال خیلی به آموزش زبان برنامه نویسی نمیپردازد اما حضور مهندسان و متخصصان این زبان باعث میشود که ویدئو های خوبی از تجربیات مهندسان را بتوانید ببینید و فرا بگیرید.
اگر بدنبال یادگیری تجربی SQL SERVER هستید، توصیه میکنم این کانال رو ببینید.

۵- کانال MacKenzie Child
کانال جالب MacKenzie Child دارای ۱۲ سری آموزش مبتدی زبان برنامه نویسی Ruby است که طرفداران این زبان حتماً باید دیده باشند.
اما بیشتر از آن بخش ویژه “۱۲ وب سرویس در ۱۲ هفته” مخاطبان زیادی رو به خود اختصاص داده است. این بخش ویژه برای یادگیری تجربی برنامه نویسی وب سرویس ها در نظر گرفته شده است.

۶- کانال WildAcademy
کانال وایلدآکادمی توسط Jake Day Williams، برای گسترش دانش در زبان برنامه نویسی Ruby و PHP تاسیس شده است.این کانال برای مبتدیان و علاقه مندان به Ruby بسیار مفید است.

۷- کانال Corey Schafer
کوری شافر یک توسعه دهنده پایتون است که در دنیای پایتونی ها بسیار فعال است . سری ویدئوهای پایتون برای مبتدیان او بسیار مورد توجه و بازدید قرار گرفته است. اگر هر سری ویدئوهای اون ۲۲ قسمت طولانی هم باشد مطمئن باشید برایتان بسیار فراتر از مبتدیان خواهید آموخت.

۸- کانال Programming Knowledge
این کانال صرفاً آموزش پایتون نیست اما این کانال بالای ۱۶۰ ویدئو در زمینه آموزش پایتون منتشر کرده است . اگر بدنبال آموزش ASP.NET هستید این کانال را با ویدئو های آموزشی جذابش از دست ندهید.

۹- کانال Cave of Programming
این کانال دارای لیست پخش هایی با دسته بندی مبتدی – متوسطه – پیشرفته دارد که پوشش آموزشی در بخش های مختلفی را میدهد اما بسیار تمرکز زیادی بروی زبان برنامه نویسی Java دارد که در ایران هم بسیار طرفدار و برنامه نویس دارد.

۱۰- کانال Telusko
در این کانال آموزشی واقعاً با یک دوره حرفه ای از زبان Java مواجه هستید. درست است که ویدئو های آموزشی این کانال در هر مقطعی از یادگیری جاوا آموزش میدهد اما توسط پیشرفته ترین اساتید روز جاوا در دنیا تهیه و انتشار میگردد.
علاقه مندان و برنامه نویسان جاوا این کانال را جدی بگیرید…

۱۱- کانال The New Boston
The New Boston به عنوان مرجع آموزشی برای زبانهایی که با آن در حال کار هستید بوجود آمده است. این کانال ۲ میلیون دنبال کننده دارد و حدود نیم میلیارد بازدید از ویدئو رو به نام خود ثبت کرده است. در این کانال تمامی زبان های برنامه نویسی که توسعه back-end نرم افزار ها را بر عهده دارند آموزش داده میشود.

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

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

دانلود Visual Studio 2019 Preview 1

سلام بلاخره امروز ماکروسافت نسخه پیشنمایش ویژوال استودیو ۲۰۱۹ رو منتشر کرد.

قبلا یه پست راجب تغییرات ظاهری نسخه ۲۰۱۹ نوشته بودم که میتونید از اینجا مطالعه کنین.

اما تغییراتی که انجام شده رو بصورت خلاصه مرور میکنیم هنوز خودم فرصت نکردم دانلود و تست کنم و مطالبی رو که مینویسم به نقل از بلاگ ویژوال استودیو هستش:

تمرکز روی کار، همه چیز ساده و خلاصه شده

موتور جستجوی جدید و قدرتمند

ویژوال استودیو حالا از موتور جستجوی جدیدی به جای Quick Launch استفاده میکنه که توانایی جستجو در تنظیمات، دستورات، و گزینه های قابل نصب رو داره.

بهبود ویژگی Refactor کردن کدها

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

بهبود Source Control
در این نسخه ویژگی سورس کنترل بهبود پیدا کرده و میشه پول ریکوئست هارو مدیریت کرد.

پشتیبانی از Net Core 3

در حال حاظر چون خود دات نت کور۳ درحال توسعه هستش نسخه پیشنمایش دات نت کور ۳ پشتیبانی میشه ولی با نسخه نهایی، نسخه نهایی دات نت کور ۳ هم بصورت پیشفرض پشتیبانی میشه

تغییرات نسخه ۲۰۱۹ بسیار زیاده و من سعی کردم بصورت خلاصه برخی قابلیت های جذاب و مهم رو اینجا بهش اشاره کنم، برای دیدن تمام تغییرات میتونین به این بلاگ ماکروسافت یا اینجا مراجعه کنین.

موفق و پیروز باشین.

نوشته دانلود Visual Studio 2019 Preview 1 اولین بار در ویرگول پدیدار شد.

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

تفاوت بین زبان‌های HTML و CSS

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

تفاوت بین HTML و CSS

بطور ساده و مختصر (HTML (Hypertext Markup Language یک زبان نشانه‌گذاری سمت کاربر می‌باشد که بر اساس تعدادی از tagها (برچسب‌ها) شکل گرفته است. HTML پایه‌ترین و مهم‌ترین بلوک سازنده‌ای است که برای ساخت یک صفحه وب به آن نیاز دارید و تمام زبان‌های برنامه‌نویسی تحت وب به آن وابسته هستند. از آنجایی که HTML فقط تشکیل دهنده اجزاء یک سایت می‌باشد و از فرم و شکل خاصی برخوردار نیست شما با استفاده از (CSS (Cascading Style Sheets قادر به ارائه زیباتر و قابل فهم‌تر یک صفحه وب می‌باشید. در حقیقت CSS مشخص می‌کند که هر عنصر HTML برروی صفحه نمایش چطور ظاهر شود. برخی از قابلیت‌های CSS عبارتند از تایین فونت، رنگ پیش زمینه و پس زمینه، فاصله‌ها، عکس پس زمینه، چپ چین/راست چین بودن سایت و غیره می‌باشد.

تعدادی از مزایا و معایب هر دو زبان:

مزایا HTML:

  • یادگیری آسان
  • استفاده رایگان و بدون لایسنس
  • تفسیر درست توسط مرورگرها
  • پشتیبانی از چندین زبان
  • پشتیبانی از چندین پلتفرم

معایب HTML:

  • ویژگی‌های محدود امنیتی
  • پیشرفت فنی آهسته و تدریجی
  • یک زبان استاتیک و عدم خروجی پویا

مزایا CSS:

  • طیف گسترده‌ای از attributeها نسبت به HTML
  • بهبود بخشیدن به سرعت وب سایت و زمان بارگذاری کمتر برای صفحات وب
  • سازگار با دستگاه‌های مختلف
  • نگه‌داری آسان
  • ارائه فرمت و استایل بهتر نسبت به HTML

معایب CSS:

  • دیده شدن بی نظمی و پیچیدگی در کد نوشته شده
  • یک سیستم مبتنی بر متن و عدم وجود امنیت درونی
  • واریانس عملکرد بین دو مرورگر

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

نوشته تفاوت بین زبان‌های HTML و CSS اولین بار در ویرگول پدیدار شد.

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

یک فنجان جاوا – دیزاین پترن ها – Iterator

میتونین برای آشنایی با الگوهای طراحی (یا همون دیزاین پترن های) زبان جاوا به مقاله ی یک فنجان جاوا – دیزاین پترن ها Design Patterns مراجعه کنین.

(همونطور که گفته شده این الگو زیرمجموعه ی الگوهای رفتاری (Behavioral) هست)

الگوی Iterator

واژه Iterate به معنی تکرار کردن هست. توی iteration ما نیاز به ساختاری داریم که object فعلی رو نگهداریم و در عین حال بدونیم object بعدی یا قبلی (و نه کل مجموعه) چیه. در حقیقت Iterator زمانی استفاده میشه که میخوایم توی چرخه (یا روند رفت یا برگشتی) به اجزای یک مجموعه دسترسی داشته باشیم.
به عبارت دیگه iterator الگوییه که به ما اجازه دسترسی و پیمایش یه تجمع از اشیاء رو میده بدون نیاز به افشا کردن کل مجموعه.

خب با یه مثال ببینیم منظورمون چیه:

اول یه اینترفیس به اسم Iterator تعریف میکنیم

interface Iterator{
	public boolean hasNext();
	public Object next();
}

توابع hasNext و next اجزای لازمی هستن که توی پیاده سازی این پترن همیشه ازشون استفاده میکنیم (و طبیعتا مشخصه که hasNext به ما میگه عنصر بعدی ای وجود داره یا نه و تابع next باید عنصر بعدی رو برگردونه).
خب توی قدم بعدی یه اینترفیس دیگه به اسم Container تعریف میکنیم که کارش ساخت یه شی از Iterator هست

interface Container{
	public Iterator createIterator();
}

خب حالا نگاهی به کلاس زیر بندازیم

class BooksCollection implements Container{
	private String m_titles[] = {"test0","test1","test2","test3","test4"};

	public Iterator createIterator(){
		BookIterator result = new BookIterator();
		return result;
	}
	
	private class BookIterator implements Iterator{
		private int m_position;

		public boolean hasNext(){
			if (m_position < m_titles.length)
				return true;
			else
				return false;
		}
		public Object next(){
			if (this.hasNext())
				return m_titles[m_position++];
			else
				return null;
		}
	}
}

اول ببینیم کلاس BookIterator چیه. خب ما میخوایم مجموعه از کتاب ها داشته باشم و همونطور که گفتیم این الگو نیاز به یه Iterator داره. پس کلاس BookIterator رو تعریف کردیم که یه عضو داره به اسم m_position که داره ایندکس فعلی کتابمون رو داخل مجموعه نگه میداره٬ و البته Iteratorمون رو implement و طبیعتا توابع hasNext (میبینه بعد از m_position عضوی وجود داره یا نه) و next (اگه عنصری بعد از m_position باشه٬ m_position یدونه زیاد میشه و عضو بعدی رو برمیگردونیم) رو پیاده سازی کرده.

و این کلاس خودش داخل کلاسی به اسم BooksCollection هست که آرایه ی m_titles رو بصورت پیشفرض با چند مقدار داره٬ و تابع createIterator رو هم بواسطه ی implement کردن کلاس Container پیاده سازی کرده و یه BookIterator برمیگردونه.

و در نهایت برای تست کد زیر رو اجرا میکنیم:

Iterator iterator = new BooksCollection().createIterator();
while (name.hasNext() ){
    System.out.println(name.next());
}

و خروجی این کد بصورت زیره:

test0
test1
test2
test3
test4

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

BooksCollection booksRepository = new BooksCollection();

for(Iterator iter = booksRepository.createIterator(); iter.hasNext();)
    System.out.println(iter.next());

و ما به همین راحتی یه مثال ساده از الگوی Iterator رو پیاده سازی کردیم.

میشه به این الگو توابع remove یا insertAfter یا insertBefore رو هم اضافه کرد. خود جاوا کلاسی داره به اسم Iterator که خوبه نگاهی بهش بندازین و ما هم توی مثال بعدی از این کلاس استفاده خواهیم کرد.

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

public class Shape {

	private int id;
	private String name;
	
	public Shape(int id, String name){
		this.id = id;
		this.name = name;
	}
	
	public int getId() {
		return id;
	}
	public void setId(int id) {
		this.id = id;
	}
	public String getName() {
		return name;
	}
	public void setName(String name) {
		this.name = name;
	}
}

و یه کلاس دیگه هم تعریف میکنیم برای اضافه کردن و نگهداری شکلها:

public class ShapeStorage {
	
	private Shape []shapes = new Shape[5];
	private int index;
	
	public void addShape(String name){
		int i = index++;
		shapes[i] = new Shape(i,name);
	}
	
	public Shape[] getShapes(){
		return shapes;
	}
}

خب میریم سراغ تعریف یه Iterator برای مجموعه ی شکلهامون:

public class ShapeIterator implements Iterator{

	private Shape [] shapes;
	int pos;
	
	public ShapeIterator(Shape []shapes){
		this.shapes = shapes;
	}
	@Override
	public boolean hasNext() {
		if(pos >= shapes.length || shapes[pos] == null)
			return false;
		return true;
	}

	@Override
	public Shape next() {
		return shapes[pos++];
	}

	@Override
	public void remove() {
		if(pos <=0 )
			throw new IllegalStateException("Illegal position");
		if(shapes[pos-1] !=null){
			for (int i= pos-1; i<(shapes.length-1);i++){
				shapes[i] = shapes[i+1];
			}
			shapes[shapes.length-1] = null;
		}
	}
}

همونطور که میبینیم این کلاس یه آرایه از Shapeها داره و Iterator رو implement کرده (توابع hasNext و next و remove پیاده سازی شده). مشخصه که تابع hasNext به ما میگه شکل بعدی ای وجود داره یا نه٬ تابع next در صورت وجود شکل بعدی رو برمیگردونه و تابع remove اگه توی pos (یا همون position) فعلی توی آرایمون شکلی وجود داشته باشه اونو حذف میکنه!

و برای تست کد زیر رو اجرا میکنیم:

ShapeStorage storage = new ShapeStorage();
storage.addShape("Polygon");
storage.addShape("Hexagon");
storage.addShape("Circle");
storage.addShape("Rectangle");
storage.addShape("Square");
		
ShapeIterator iterator = new ShapeIterator(storage.getShapes());
while(iterator.hasNext()){
    System.out.println(iterator.next());
}

اتفاقی که اینجا میفته به این صورته که اول میایم یه ShapeStorage تعریف میکنیم که داخلش یه آرایه از shapeها رو نگه میداره. و به کمک تابع addShape بهش شکل های Polygon و Hexagon و Circle و Rectangle و Square رو اضافه میکنیم (با توجه به نوع پیاده سازی تابع addShape فقط کافیه اسم شکلمون رو بدیم و اون خودش اتوماتیک id هر شکل که اضافه میشه رو یکی یکی افزایش میده).
توی قدم بعدی یه شی از ShapeIterator ساختیم و آرایه ی شکلهای موجود توی storage رو بهش دادیم.
و در آخر هم رفتیم سراغ نمایش یا به اصطلاح iterate کردن آرایه ی شکل هامون.
و همونطور که انتظار داریم خروجی بصورت زیر هست:

ID: 0 Shape: Polygon
ID: 1 Shape: Hexagon
ID: 2 Shape: Circle
ID: 3 Shape: Rectangle
ID: 4 Shape: Square

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

ShapeIterator removeTestIterator = new ShapeIterator(storage.getShapes()); while(removeTestIterator.hasNext()){
    System.out.println(removeTestIterator.next());
    removeTestIterator.remove();
}

خب شما بگین انتظار داریم توی خروجی چی ببینیم

.

.

.

.

.

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

removeTestIterator.next();

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

return shapes[pos++];

اول کد زیر اجرا میشه

return shapes[pos];

و بعدش با اجرای دستور زیر یدونه به pos اضافه میشه

pos++

پس ما توی خروجی عنصر اول رو میبینیم (که Polygon هست) و pos داره به عنصر دوم (Hexagon) اشاره میکنه. حالا با رسیدن به دستور زیر

removeTestIterator.remove();

جایی که pos داره بهش اشاره میکنه (یعنی Hexagon) حذف میشه. و این روند همینطور ادامه پیدا میکنه و در حقیقت ما داریم یکی در میون شکلهای با pos زوج (۰ و ۲ و ۴) رو نشون میدیم و شکلهای با pos فرد (۱ و ۳) رو حذف میکنیم! بنابراین خروجی به صورت زیر خواهد بود:

ID: 0 Shape: Polygon
ID: 2 Shape: Circle
ID: 4 Shape: Square

خب فکر کنم به خوبی با مفهوم Iterate کردن و الگوی Iterator آشنا شدیم. به عنوان آخرین مثال هم بدونیم که بعضی کلاسای جاوا مثل کلاس ArrayList خودش تابعی داره به اسم iterator که میتونیم بدون اینکه خودمون بخوایم الگوی iterator رو پیاده سازی و کلاس هاش رو تعریف کنیم٬ ازش براحتی استفاده کنیم. مثالش هم بصورت زیر خواهد بود:

 ArrayList al = new ArrayList();

al.add("M");
al.add("I");
al.add("S");
al.add("A");
al.add("G");
al.add("H");


System.out.print("Original list: ");
Iterator itr = al.iterator();
while (itr.hasNext()) {
    String element = itr.next();
    System.out.print(element + " ");
}
System.out.println();


System.out.print("Modified contents: ");
ListIterator litr = al.listIterator();
while (litr.hasNext()) {
    String element = litr.next();
    String newElement = "*" + element + "+";
    litr.set(newElement);
    System.out.print(newElement + " ");
}
System.out.println();


System.out.print("Modified list backwards: ");
while (litr.hasPrevious()) {
    String element = litr.previous();
    System.out.print(element + " ");
}

و خروجی به این صورته:

Original list: M I S A G H
Modified contents: *M+ *I+ *S+ *A+ *G+ *H+
Modified list backwards: *H+ *G+ *A+ *S+ *I+ *M+


منتشر شده در ویرگول توسط محمد قدسیان https://virgool.io/@mohammad.ghodsian

https://virgool.io/@mohammad.ghodsian/java-iterator-design-pattern-d8x2pyrv3vdi

نوشته یک فنجان جاوا – دیزاین پترن ها – Iterator اولین بار در ویرگول پدیدار شد.

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

پشیمانی های فارغ التحصیلان کامپیوتر

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

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


۰:چرا از کد زدن ترسیدم؟

مهم ترین بخش ماجرا همینه!!

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

به هیچ وجه پروژه هاتون رو از بقیه نگیرید این خیلی مهمه و البته مهم تر ازون پروژه های شخصی خودتون رو پیش ببرید اگه زیاد کد نزنید دقیقا مثل کسی میشید که مهندس معماری میشید که حتی نمیتونه یه خونه ی سادرو طراحی کنه درواقع لیسانس خوندن جز عقب انداختن سربازی و کلاسش چیز دیگه برای شما نخواهد داشت!!

۱:چرا وقت کشی کردم؟

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

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

۲:خودتون رو با دیگران مقایسه نکنید

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

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

۳:چرا تکنولوژی های کمی یادگرفتم؟

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

۴:چرا بجای اینکه در یک زمینه عمیق شم در چندین زمینه سطحی کار کردم؟

درسته!!شاید فکر کنید موضوع ۴ با موضوع ۳ در تناقضه اما اینجور نیست!!

این هم نکته ی قابل بحثیه دوستای زیادی دارم که توی مباحث(اندروید ,بازی سازی,هوش مصنوعی,طراحی سایت و …) به صورت سطحی کار کردن اما توی هیچکدوم عمیق نشدن باید حواستون باشه که تعادل رو رعایت کنید اینکه ۱۰ تا زبان برنامه نویسی بلد باشید اما توی هیچکدوم عمیق نشده باشین بدونید که کارتون داره اشتباه پیش میره بهتره با ۳ تا زبان اشنایی داشته باشید و توی دو زبان بصورت عمیق کار کنید یا توی زمینه ی برنامه نویسی سمت سرور عمیق کار کنید وبا لینوکس و برنامه نویسی فرانت – اند اشنایی داشته باشید اینطوری بهتر میتونید زمینه ای که بهش علاقه دارید رو پیدا کنید و اگر هم اون زمینه قدیمی شد بتونید به زمینه های دیگه مهاجرت کنید

۵:چرا توی پروژه های متن باز مشارکت نکردم؟

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

۶:چرا بیشتر روی طراحی الگوریتم ها و ساختمان داده ها کار نکردم؟

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

۷: نیم نگاهی به design pattern ها هم داشته باشید:

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

۸:حتما گیت رو یاد بگیرین!!

بنظرم گیت بشدت مهمهاگه بلد نیستین همین الان شروع کنید به یادگیریش منابع خوبی توی یوتیوب هست و البته به فارسی هم گوگل کنید نتایج خوبی رو میاره و البته بهتون میگه چی هست و به چه دردی میخوره

۹:ریاضیات رو جدی بگیرید!!

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

۱۰:فکر نکنید چون لینوکس رو (به صورت سطحی) بلدید خیلی خفنید!!

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

۱۱:در اسرع وقت کار پیدا کنید!!

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

۱۲:اگه میخواید برید خارج حتما معدل خوبی بیارید


امیدوارم توصیه های من رو بخونید و خوشتون بیاد اگه غلط املایی یا غلط انشایی دارم به بزرگی خودتون ببخشید و اگه نکته ای هست که اشتباه گفتم یا کم گذاشتم خیلی ممنون میشم بهم تذکر بدین حتی اگه این متن باعث بشه یک نفر هم راه درست رو بره و از گذشتش راضی باشه من به هدفم ازین متن رسیدم

نوشته پشیمانی های فارغ التحصیلان کامپیوتر اولین بار در ویرگول پدیدار شد.

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

۴ دوره آموزشی آنلاین رایگان برای کسب مهارت و تخصص در بلاکچین

توی پست قبلی‌م گفتم که چرا از کریپتوکارنسی‌ها خوشم میاد و توی این پست میخوام یه مقدار جلوتر برم…

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

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

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

چرا باید یه آدم فنی توی تکنولوژی بلاکچین شد؟

  1. مارکت کریپتوکارنسی‌ها و قیمت کوین‌هاش خیلی افت و خیز داره، اکثر کوین‌ها تبدیل شدن به ابزاری برای پامپ و دامپ ولی داشتن یه شغل مرتبط توی این صنعت جوان و آینده‌دار میتونه خیلی باثبات و کم‌خطرتر باشه.
  2. پول خوبی توش هست، چون تکنولوژی بلاکچین جوان هستش و آدمای فنی صاحب تخصص توش کمه خیلی خوب پول میدن و معمولن آدمای فنی توش ۴۰-۵۰ درصد بیشتر از سایر آدمای فنی توی دنیای کامپیوتر و اینترنت پول میگیرن که البته نیاز نیست حتمن برنامه‌نویس باشن، شما میتونید مدیر محصول باشین اینجا یا مدیر شبکه بشین و یا از کارهای امنیتی توش کسب درآمد کنید و… ولی باید شناخت فنی به این حوزه داشته باشین.

قانع شدین؟ امیدوارم که شده باشین چون میخوام شروع کنم به معرفی دوره‌ها 🙂

دوره اول: تکنولوژی بیتکوین و بلاکچین

از دانشگاه پرینستون

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

دوره دوم: شناخت بنیادین از بلاکچین برای توسعه‌دهندگان

از شرکت IBM

این دوره که به ۲ بخش میشه تقسیمش کرد توی بخش اول یه شناخت اولیه از بلاکچین میده و بعد یه مقدار بحث رو فنی‌تر میکنه، برای برنامه‌نویس‌ها و توسعه‌دهندگان تولید شده و کمک‌تون میکنه تا بتونید بیتکوین رو از میون کدها یاد بگیرین، کمی باهاش بازی کنید و ببینید چطور میشه یه شبکه توی سایز کوچیک برای خودتون راه بندازین و کشف کنید پشت این زیبای رمزآلود چی هست و چه خبره؟ چه چیزی اینقدر توسعه‌دهنده‌ها رو بهش علاقمند کرده؟ شما میتونید کل محتوای این دوره رو به رایگان استفاده کنید ولی خبر خوب اینکه اگر میخواین به رزومه‌تون چیزی اضافه کنید با پرداخت ۴۲ دلار (آخ آخ! دلار!) یه گواهینامه هم بگیرین از IBM که توی این دوره شرکت کردین، بهتر از مدرک فولان دانشگاه فولان نیست جدن؟ 🙂

دوره سوم: ساختن و راه‌اندازی کرپیتوکارنسی خودتون روی شبکه اتریوم

از گرگوری مک‌کوبین

این یه دوره ۰ تا ۱۰۰ هستش، این دوستمون آقای گرگوری توی چند ساعت بهتون یاد میده که چطور یه کریپتوکارنسی بسازید برای خودتون بر روی شبکه اتریوم، مفاهیم اولیه شبکه اتریوم رو بهتون توضیح میده و میگه که توکن‌های ERC-20 چی هستن و چطور میشه باهاشون اپلیکیشن‌های غیرمتمرکز نوشت، از یه طرف دیگه میگه چطور یه وبسایت راه بندازین برای پروژه‌تون، چطور ICO برگزار کنید و چطور به دیگران پیش‌فروش کنید پروژه‌تون رو و تقسیم کنید توکن‌ها رو و… اگر شما یه توسعه دهنده و برنامه‌نویس هستید میتونید یه بخش‌هایی ازش رو بی‌خیال میشین و برین سراغ بخش‌های جالب‌تر و تازه‌تر… دوره‌اش چون متمرکز هست روی کد نوشتن و کار عملی یه مقدار داستان داره، مثلن اینکه از زبون برنامه‌نویسی solidity استفاده کرده و یا نشون میده که چطور لپ‌تاپ و سیستم‌عامل مک رو کانفیگ کنید و این برای کاربرهای ویندوزی ممکنه کمی پیچیدگی داشته باشه ولی خب اگر واقعن بخواین یاد بگیرین اینا بهانه‌ست، یوتیوب کنید و یاد بگیرین از این خان‌ها چطور میشه گذشت؟ 🙂

دوره چهارم: فین‌تک یا فناوری‌های مالی

از دانشگاه هنگ‌کنگ

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

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

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

نوشته ۴ دوره آموزشی آنلاین رایگان برای کسب مهارت و تخصص در بلاکچین اولین بار در ویرگول پدیدار شد.

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

نگاهی به تغییرات ظاهری Visual Studio 2019 Preview

نسخه بعدی Visual Studio، در نیمه اول سال ۲۰۱۹ منتشر میشه این نسخه نسبت به نسخه های قبلی تغییرات بسیار خوبی رو هم در عملکرد و هم در ظاهر به خود دیده، تو این پست سعی میکنم تغییرات ظاهری که تا کنون در نسخه ۲۰۱۹ اعمال شده رو با هم مرور کنیم البته این انتهای کار نیست و طبق اعلام خود ماکروسافت تغییرات بیشتر و بهتری در راه هستن.

آیکون»

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

آیکون سمت چپ نسخه ۲۰۱۷ و سمت راست نسخه ۲۰۱۹

باز کردن آسان تر پروژه ها»

پنجره استارتر شیک و ساده تر برای باز کردن هرچه ساده تر پروژه ها

سمت چپ ویژوال استودیو مک سمت راست ویژوال استودیو

تم آبی (رفرش شده)»

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

تم رفرش شده سمت چپ / تم کنونی سمت راست

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

بهره وری و فضای کار بیشتر»

نسخه ۲۰۱۹ تمرکز بیشتری روی رابط کاربری و تجربه کاربری داشته برای همین سعی کردن تا منوها رو بیشتر جمع و جور کنن همینطور که توی تصویر مشخصه توی نسخه ۲۰۱۹ برنامه نویس فضای کار بیشتری برای کد نویسی در اختیار داره (تایتل بار حذف شده و منو ها به تایتل بار منتقل شدن)

بالا نسخه ۲۰۱۷ / پایین نسخه ۲۰۱۹

اطلاعیه ها»

مدیریت و نمایش بهتر اطلاعیه ها

نوشته نگاهی به تغییرات ظاهری Visual Studio 2019 Preview اولین بار در ویرگول پدیدار شد.

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