🔍 تفاوت string و String در سی شارپ — نکتهای ساده ولی مهم
اگه تازه با سی شارپ شروع کرده باشی، احتمالاً دیدی که بعضیها از string استفاده میکنن و بعضیها از String.
شاید فکر کنی فرق دارن، ولی واقعیت اینه که:
🔹 string یه کلمه کلیدی توی زبان سی شارپ
🔹 String یه کلاس توی فضای نام System
در واقع، string فقط یه میانبر برای System.String ـ. یعنی این دو کاملاً معادلان:
string name = "Hamed";
String city = "Tehran";
هر دو متغیر از نوع System.String هستن و میتونی روی هر دو از متدهایی مثل .Length, .ToUpper(), .Contains() و غیره استفاده کنی.
📌 نکتهی مهم:
برای تعریف متغیرها، استفاده از string رایجتر و خواناتر هست.
ولی وقتی میخوای از متدهای کلاس String استفاده کنی (مثل String.IsNullOrEmpty())، باید از String استفاده کنی چون به کلاس اشاره داره.
این تفاوت کوچیک شاید توی اجرا تأثیری نداشته باشه، ولی توی سبک کدنویسی و خوانایی پروژه خیلی مهمه.
اگه تازه با سی شارپ شروع کرده باشی، احتمالاً دیدی که بعضیها از string استفاده میکنن و بعضیها از String.
شاید فکر کنی فرق دارن، ولی واقعیت اینه که:
🔹 string یه کلمه کلیدی توی زبان سی شارپ
🔹 String یه کلاس توی فضای نام System
در واقع، string فقط یه میانبر برای System.String ـ. یعنی این دو کاملاً معادلان:
string name = "Hamed";
String city = "Tehran";
هر دو متغیر از نوع System.String هستن و میتونی روی هر دو از متدهایی مثل .Length, .ToUpper(), .Contains() و غیره استفاده کنی.
📌 نکتهی مهم:
برای تعریف متغیرها، استفاده از string رایجتر و خواناتر هست.
ولی وقتی میخوای از متدهای کلاس String استفاده کنی (مثل String.IsNullOrEmpty())، باید از String استفاده کنی چون به کلاس اشاره داره.
این تفاوت کوچیک شاید توی اجرا تأثیری نداشته باشه، ولی توی سبک کدنویسی و خوانایی پروژه خیلی مهمه.
👍2👨💻2❤1👏1
🧠 تفاوت Value Type و Reference Type در سی شارپ — پایهای ولی حیاتی
اگه بخوای کدنویسی سی شارپ رو عمیقتر یاد بگیری، باید بدونی که دادهها به دو دسته ی اصلی تقسیم میشن:
🔹 Value Type
🔹 Reference Type
ولی فرقشون چیه؟
✅ Value Type:
دادهها مستقیماً در حافظه ذخیره میشن.
وقتی یه متغیر رو به متغیر دیگه اختصاص میدی، یه کپی از مقدار ساخته میشه.
مثال ها: int, double, bool, struct
int a = 5;
int b = a;
b = 10;
// a هنوز 5 هست
✅ Reference Type:
دادهها به صورت ارجاعی ذخیره میشن—یعنی متغیر فقط یه آدرس به حافظه داره.
وقتی یه متغیر رو به متغیر دیگه اختصاص میدی، هر دو به یه محل حافظه اشاره میکنن.
مثال ها: class, string, array, object
int[] arr1 = {1, 2, 3};
int[] arr2 = arr1;
arr2[0] = 99;
// arr1 هم تغییر کرده
📌 نکته ی مهم: درک تفاوت این دو نوع داده، توی طراحی کلاس ها، مدیریت حافظه، و جلوگیری از باگ های عجیب خیلی مهمه.
اگه بخوای کدنویسی سی شارپ رو عمیقتر یاد بگیری، باید بدونی که دادهها به دو دسته ی اصلی تقسیم میشن:
🔹 Value Type
🔹 Reference Type
ولی فرقشون چیه؟
✅ Value Type:
دادهها مستقیماً در حافظه ذخیره میشن.
وقتی یه متغیر رو به متغیر دیگه اختصاص میدی، یه کپی از مقدار ساخته میشه.
مثال ها: int, double, bool, struct
int a = 5;
int b = a;
b = 10;
// a هنوز 5 هست
✅ Reference Type:
دادهها به صورت ارجاعی ذخیره میشن—یعنی متغیر فقط یه آدرس به حافظه داره.
وقتی یه متغیر رو به متغیر دیگه اختصاص میدی، هر دو به یه محل حافظه اشاره میکنن.
مثال ها: class, string, array, object
int[] arr1 = {1, 2, 3};
int[] arr2 = arr1;
arr2[0] = 99;
// arr1 هم تغییر کرده
📌 نکته ی مهم: درک تفاوت این دو نوع داده، توی طراحی کلاس ها، مدیریت حافظه، و جلوگیری از باگ های عجیب خیلی مهمه.
👍3❤2🔥1
🔄 تفاوت بین ==, .Equals(), و .CompareTo() در سی شارپ — مقایسهی حرفهای
اگه بخوای دو مقدار رو توی سی شارپ مقایسه کنی، گزینههای مختلفی داری: ولی هرکدوم رفتار خاص خودش رو داره.
✅ ==
برای مقایسهی مقدار استفاده میشه.
برای انواع پایه مثل int, string معمولاً خوب جواب میده.
ولی برای کلاسهای سفارشی ممکنه فقط آدرس حافظه رو مقایسه کنه.
✅ .Equals()
یه متد برای مقایسهی مقدار منطقی بین دو شیء.
میتونه Override بشه تا رفتار سفارشی داشته باشه.
✅ .CompareTo()
برای مقایسهی ترتیبی استفاده میشه.
خروجی عددی میده:
0 یعنی برابر
< 0 یعنی شیء اول کوچکتره
> 0 یعنی شیء اول بزرگتره
مثال:
string a = "apple";
string b = "banana";
Console.WriteLine(a == b); // false
Console.WriteLine(a.Equals(b)); // false
Console.WriteLine(a.CompareTo(b)); // -1
📌 نکتهی حرفهای: اگه میخوای فقط برابری رو بررسی کنی، == یا .Equals() کافیه. ولی اگه میخوای ترتیب یا مرتبسازی انجام بدی، .CompareTo() انتخاب درستیه.
اگه بخوای دو مقدار رو توی سی شارپ مقایسه کنی، گزینههای مختلفی داری: ولی هرکدوم رفتار خاص خودش رو داره.
✅ ==
برای مقایسهی مقدار استفاده میشه.
برای انواع پایه مثل int, string معمولاً خوب جواب میده.
ولی برای کلاسهای سفارشی ممکنه فقط آدرس حافظه رو مقایسه کنه.
✅ .Equals()
یه متد برای مقایسهی مقدار منطقی بین دو شیء.
میتونه Override بشه تا رفتار سفارشی داشته باشه.
✅ .CompareTo()
برای مقایسهی ترتیبی استفاده میشه.
خروجی عددی میده:
0 یعنی برابر
< 0 یعنی شیء اول کوچکتره
> 0 یعنی شیء اول بزرگتره
مثال:
string a = "apple";
string b = "banana";
Console.WriteLine(a == b); // false
Console.WriteLine(a.Equals(b)); // false
Console.WriteLine(a.CompareTo(b)); // -1
📌 نکتهی حرفهای: اگه میخوای فقط برابری رو بررسی کنی، == یا .Equals() کافیه. ولی اگه میخوای ترتیب یا مرتبسازی انجام بدی، .CompareTo() انتخاب درستیه.
❤2👍2🦄1
🧠 تفاوت بین readonly و const در سی شارپ — کنترل بهتر روی دادههای ثابت
اگه بخوای یه مقدار رو توی برنامه ت ثابت نگه داری، احتمالاً بین const و readonly شک میکنی. ولی تفاوتشون فقط توی اسم نیست—توی زمان مقداردهی و نوع استفاده فرق های مهمی دارن.
✅ const
مقدارش باید در زمان کامپایل مشخص باشه
فقط برای انواع پایه مثل int, string, double مناسبه
به صورت ضمنی static هست
نمیتونه مقدارش از بیرون کلاس یا در زمان اجرا تغییر کنه
const double Pi = 3.14;
✅ readonly
مقدارش میتونه در زمان اجرا تعیین بشه
معمولاً توی سازندهی کلاس مقداردهی میشه
میتونه برای انواع پیچیدهتر هم استفاده بشه
فقط یک بار مقداردهی میشه و بعدش قابل تغییر نیست
readonly DateTime createdAt;
public MyClass() {
createdAt = DateTime.Now;
}
📌 نکتهی حرفهای: اگه مقدار از قبل مشخصه و هیچ وقت تغییر نمیکنه، const انتخاب خوبیه. اگه مقدار باید در زمان اجرا تعیین بشه ولی بعدش ثابت بمونه، از readonly استفاده کن.
اگه بخوای یه مقدار رو توی برنامه ت ثابت نگه داری، احتمالاً بین const و readonly شک میکنی. ولی تفاوتشون فقط توی اسم نیست—توی زمان مقداردهی و نوع استفاده فرق های مهمی دارن.
✅ const
مقدارش باید در زمان کامپایل مشخص باشه
فقط برای انواع پایه مثل int, string, double مناسبه
به صورت ضمنی static هست
نمیتونه مقدارش از بیرون کلاس یا در زمان اجرا تغییر کنه
const double Pi = 3.14;
✅ readonly
مقدارش میتونه در زمان اجرا تعیین بشه
معمولاً توی سازندهی کلاس مقداردهی میشه
میتونه برای انواع پیچیدهتر هم استفاده بشه
فقط یک بار مقداردهی میشه و بعدش قابل تغییر نیست
readonly DateTime createdAt;
public MyClass() {
createdAt = DateTime.Now;
}
📌 نکتهی حرفهای: اگه مقدار از قبل مشخصه و هیچ وقت تغییر نمیکنه، const انتخاب خوبیه. اگه مقدار باید در زمان اجرا تعیین بشه ولی بعدش ثابت بمونه، از readonly استفاده کن.
❤3👍3💅1
🧱 تفاوت بین class و struct در سی شارپ — انتخاب درست برای طراحی بهتر
اگه بخوای یه نوع دادهی جدید بسازی، معمولاً بین class و struct باید انتخاب کنی. ولی این انتخاب فقط ظاهری نیست—تأثیر زیادی روی عملکرد و رفتار برنامه ت داره.
✅ class
Reference Type
در حافظهی Heap ذخیره میشه
وقتی به متغیر دیگه ای اختصاص داده بشه، فقط آدرسش منتقل میشه
میتونه دارای سازنده، وراثت، و رفتار پیچیده باشه
✅ struct
Value Type
در حافظهی Stack ذخیره میشه
وقتی به متغیر دیگه ای اختصاص داده بشه، یه کپی کامل ساخته میشه
سبک تره، ولی محدودتر: نمیتونه از کلاس دیگه ارث بری کنه
مثال:
struct Point {
public int X;
public int Y;
}
class Person {
public string Name;
public int Age;
}
📌 نکتهی حرفهای: اگه نوع داده ت ساده، سبک، و بدون رفتار پیچیده ست (مثل مختصات یا رنگ)، از struct استفاده کن. اگه نیاز به انعطاف، وراثت، یا مدیریت حافظه داری، class انتخاب بهتریه.
اگه بخوای یه نوع دادهی جدید بسازی، معمولاً بین class و struct باید انتخاب کنی. ولی این انتخاب فقط ظاهری نیست—تأثیر زیادی روی عملکرد و رفتار برنامه ت داره.
✅ class
Reference Type
در حافظهی Heap ذخیره میشه
وقتی به متغیر دیگه ای اختصاص داده بشه، فقط آدرسش منتقل میشه
میتونه دارای سازنده، وراثت، و رفتار پیچیده باشه
✅ struct
Value Type
در حافظهی Stack ذخیره میشه
وقتی به متغیر دیگه ای اختصاص داده بشه، یه کپی کامل ساخته میشه
سبک تره، ولی محدودتر: نمیتونه از کلاس دیگه ارث بری کنه
مثال:
struct Point {
public int X;
public int Y;
}
class Person {
public string Name;
public int Age;
}
📌 نکتهی حرفهای: اگه نوع داده ت ساده، سبک، و بدون رفتار پیچیده ست (مثل مختصات یا رنگ)، از struct استفاده کن. اگه نیاز به انعطاف، وراثت، یا مدیریت حافظه داری، class انتخاب بهتریه.
❤3👍1👾1
🧩 تفاوت بین interface و abstract class در سی شارپ — طراحی منعطف تر، کدنویسی تمیزتر
اگه بخوای یه ساختار پایه برای کلاس هات تعریف کنی، معمولاً بین interface و abstract class باید انتخاب کنی. ولی این انتخاب فقط به ظاهر نیست—روی انعطاف پذیری، تست پذیری، و توسعهپذیری پروژه ت تأثیر مستقیم داره.
✅ interface
فقط شامل تعریف متدها و پراپرتی ها هست
هیچ پیاده سازی نداره (تا قبل از C# 8)
یه کلاس میتونه چندین اینترفیس رو پیادهسازی کنه
مناسب برای تعریف قراردادهای رفتاری
public interface IShape {
double GetArea();
}
✅ abstract class
میتونه هم تعریف داشته باشه، هم پیادهسازی
فقط یه کلاس پایه میتونه ازش ارث بری کنه
میتونه فیلد، سازنده، و متدهای کامل داشته باشه
مناسب برای اشتراک گذاری منطق پایه بین کلاسها
public abstract class Animal {
public abstract void Speak();
public void Eat() {
Console.WriteLine("Eating...");
}
}
📌 نکتهی حرفهای: اگه فقط یه قرارداد رفتاری میخوای، از interface استفاده کن. اگه نیاز به منطق پایه و اشتراک گذاری کد داری، abstract class انتخاب بهتریه.
اگه بخوای یه ساختار پایه برای کلاس هات تعریف کنی، معمولاً بین interface و abstract class باید انتخاب کنی. ولی این انتخاب فقط به ظاهر نیست—روی انعطاف پذیری، تست پذیری، و توسعهپذیری پروژه ت تأثیر مستقیم داره.
✅ interface
فقط شامل تعریف متدها و پراپرتی ها هست
هیچ پیاده سازی نداره (تا قبل از C# 8)
یه کلاس میتونه چندین اینترفیس رو پیادهسازی کنه
مناسب برای تعریف قراردادهای رفتاری
public interface IShape {
double GetArea();
}
✅ abstract class
میتونه هم تعریف داشته باشه، هم پیادهسازی
فقط یه کلاس پایه میتونه ازش ارث بری کنه
میتونه فیلد، سازنده، و متدهای کامل داشته باشه
مناسب برای اشتراک گذاری منطق پایه بین کلاسها
public abstract class Animal {
public abstract void Speak();
public void Eat() {
Console.WriteLine("Eating...");
}
}
📌 نکتهی حرفهای: اگه فقط یه قرارداد رفتاری میخوای، از interface استفاده کن. اگه نیاز به منطق پایه و اشتراک گذاری کد داری، abstract class انتخاب بهتریه.
❤2👍2
🔁 تفاوت بین override, new, و virtual در سی شارپ — کنترل دقیقتر روی وراثت
اگه با وراثت در سی شارپ کار کرده باشی، حتماً با کلمات کلیدی virtual, override, و new برخورد داشتی. ولی تفاوتشون فقط توی اسم نیست—هرکدوم رفتار متفاوتی در زمان اجرا دارن.
✅ virtual
به متدی در کلاس پایه اجازه میده که قابل بازنویسی باشه
یعنی کلاسهای فرزند میتونن اون متد رو با override تغییر بدن
public class Animal {
public virtual void Speak() {
Console.WriteLine("Animal sound");
}
}
✅ override
برای بازنویسی متد virtual در کلاس فرزند استفاده میشه
رفتار متد پایه رو تغییر میده
public class Dog : Animal {
public override void Speak() {
Console.WriteLine("Bark");
}
}
✅ new
برای مخفی کردن متد پایه استفاده میشه
یعنی متد جدیدی تعریف میکنی که مستقل از متد پایه عمل میکنه
در زمان اجرای شیء به صورت کلاس پایه، متد پایه اجرا میشه
public class Cat : Animal {
public new void Speak() {
Console.WriteLine("Meow");
}
}
📌 نکتهی حرفهای: اگه میخوای رفتار متد پایه رو تغییر بدی، از override استفاده کن. اگه میخوای متد جدیدی تعریف کنی که مستقل باشه، از new استفاده کن. و برای اینکه متد پایه قابل بازنویسی باشه، باید virtual باشه.
🔗 LinkedIn Post
اگه با وراثت در سی شارپ کار کرده باشی، حتماً با کلمات کلیدی virtual, override, و new برخورد داشتی. ولی تفاوتشون فقط توی اسم نیست—هرکدوم رفتار متفاوتی در زمان اجرا دارن.
✅ virtual
به متدی در کلاس پایه اجازه میده که قابل بازنویسی باشه
یعنی کلاسهای فرزند میتونن اون متد رو با override تغییر بدن
public class Animal {
public virtual void Speak() {
Console.WriteLine("Animal sound");
}
}
✅ override
برای بازنویسی متد virtual در کلاس فرزند استفاده میشه
رفتار متد پایه رو تغییر میده
public class Dog : Animal {
public override void Speak() {
Console.WriteLine("Bark");
}
}
✅ new
برای مخفی کردن متد پایه استفاده میشه
یعنی متد جدیدی تعریف میکنی که مستقل از متد پایه عمل میکنه
در زمان اجرای شیء به صورت کلاس پایه، متد پایه اجرا میشه
public class Cat : Animal {
public new void Speak() {
Console.WriteLine("Meow");
}
}
📌 نکتهی حرفهای: اگه میخوای رفتار متد پایه رو تغییر بدی، از override استفاده کن. اگه میخوای متد جدیدی تعریف کنی که مستقل باشه، از new استفاده کن. و برای اینکه متد پایه قابل بازنویسی باشه، باید virtual باشه.
🔗 LinkedIn Post
👍3❤2
📝 String Interpolation در سی شارپ — نوشتن رشتهها ساده، خوانا و حرفهای!
یکی از مشکلاتی که خیلی وقتها تو کدنویسی پیش میاد، ترکیب متن و مقادیر متغیره. قبلاً مجبور بودیم با + یا String.Format همه چیزو کنار هم بذاریم، که هم طولانی میشد، هم گاهی کدمون شلوغ و سخت خوانا میشد.
اینجاست که String Interpolation تو سی شارپ به کمک ما میاد! کد رو هم کوتاهتر میکنه، هم خواناتر.
✅ چرا String Interpolation جذابه؟
1️⃣خوانایی بیشتر کد: میتونی متغیرها رو مستقیم داخل {} بذاری.
2️⃣کد کوتاهتر: نیازی به concat طولانی یا String.Format پیچیده نیست.
3️⃣قابلیت گذاشتن محاسبه و متد داخل {}: یعنی میتونی کارای ساده یا محاسبات رو مستقیم تو رشته داشته باشی.
مثال ساده:
string name = "Hamed";
int age = 20;
Console.WriteLine($"Hi! My name is {name} and I am {age} years old.");
خروجی:
Hi! My name is Hamed and I am 20 years old.
مثال حرفهایتر: محاسبه داخل Interpolation
int currentYear = 2025;
int birthYear = 2005;
Console.WriteLine($"Next year, I will be {currentYear - birthYear} years old.");
خروجی:
Next year, I will be 20 years old.
نکات کاربردی:
میتونی فرمت عدد و تاریخ رو هم تو {} مشخص کنی:
double price = 1234.567;
Console.WriteLine($"Product price: {price:C2}");
// C2 برای نمایش به صورت Currency
تو پروژههای بزرگ، String Interpolation باعث میشه کد خواناتر و کم خطاتر باشه.
جایگزین عالی برای String.Format هست، مخصوصاً وقتی readability اهمیت داره.
🔗 LinkedIn Post
یکی از مشکلاتی که خیلی وقتها تو کدنویسی پیش میاد، ترکیب متن و مقادیر متغیره. قبلاً مجبور بودیم با + یا String.Format همه چیزو کنار هم بذاریم، که هم طولانی میشد، هم گاهی کدمون شلوغ و سخت خوانا میشد.
اینجاست که String Interpolation تو سی شارپ به کمک ما میاد! کد رو هم کوتاهتر میکنه، هم خواناتر.
✅ چرا String Interpolation جذابه؟
1️⃣خوانایی بیشتر کد: میتونی متغیرها رو مستقیم داخل {} بذاری.
2️⃣کد کوتاهتر: نیازی به concat طولانی یا String.Format پیچیده نیست.
3️⃣قابلیت گذاشتن محاسبه و متد داخل {}: یعنی میتونی کارای ساده یا محاسبات رو مستقیم تو رشته داشته باشی.
مثال ساده:
string name = "Hamed";
int age = 20;
Console.WriteLine($"Hi! My name is {name} and I am {age} years old.");
خروجی:
Hi! My name is Hamed and I am 20 years old.
مثال حرفهایتر: محاسبه داخل Interpolation
int currentYear = 2025;
int birthYear = 2005;
Console.WriteLine($"Next year, I will be {currentYear - birthYear} years old.");
خروجی:
Next year, I will be 20 years old.
نکات کاربردی:
میتونی فرمت عدد و تاریخ رو هم تو {} مشخص کنی:
double price = 1234.567;
Console.WriteLine($"Product price: {price:C2}");
// C2 برای نمایش به صورت Currency
تو پروژههای بزرگ، String Interpolation باعث میشه کد خواناتر و کم خطاتر باشه.
جایگزین عالی برای String.Format هست، مخصوصاً وقتی readability اهمیت داره.
🔗 LinkedIn Post
❤4👍2
در این هفته قرار از دو پروژه جدید که یکی از اون ها تکمیل شده رونمایی کنیم 🔥
یکی مربوط به ترجمه کتاب هاست.😉
و دیگری هم، دوره های آموزشی رایگان دات نت.😍
یکی مربوط به ترجمه کتاب هاست.😉
و دیگری هم، دوره های آموزشی رایگان دات نت.😍
👏3❤1👍1
📘 کتاب "C# 12 in a Nutshell" – ترجمه فارسی
بعد از مدتها تلاش، ترجمه کامل این کتاب ارزشمند رو آماده کردم.
این کتاب یکی از جامعترین منابع یادگیری و مرجع زبان سیشارپ 12 هست که حالا میتونید نسخه فارسی اون رو رایگان از گیتهاب بخونید.
🔗 لینک دسترسی:
github.com/hheydarian/csharp-12-in-a-nutshell-persian
امیدوارم به درد علاقهمندان داتنت و برنامهنویسهای فارسیزبان بخوره 💙
بعد از مدتها تلاش، ترجمه کامل این کتاب ارزشمند رو آماده کردم.
این کتاب یکی از جامعترین منابع یادگیری و مرجع زبان سیشارپ 12 هست که حالا میتونید نسخه فارسی اون رو رایگان از گیتهاب بخونید.
🔗 لینک دسترسی:
github.com/hheydarian/csharp-12-in-a-nutshell-persian
امیدوارم به درد علاقهمندان داتنت و برنامهنویسهای فارسیزبان بخوره 💙
❤11🔥3👨💻1🆒1
«ما لازم نیست از بقیه باهوشتر باشیم.
ما باید از بقیه منظمتر باشیم.»
— وارن بافت
این اصل، هم در سرمایهگذاری و هم در فلسفه رواقیگری بنیادین است.
موضوع نبوغ نیست؛ موضوع رفتار است.
چگونه میتوان هر روز انضباط رواقی را تمرین کرد:
🧘♂️ واکنش هایت را کنترل کن
همهچیز ارزش پاسخ دادن ندارد.
📆 ثبات بساز
روالهای منظم مهمتر از تلاشهای پراکندهاند.
📵 از حواسپرتی دوری کن
از زمانت مثل ارزشمندترین داراییات محافظت کن — چون همین است.
🧭 به هدفت پایبند بمان
دنبال نکن — انتخاب کن.
🛠 کار را انجام بده، حتی وقتی خستهکننده است
بیشتر مردم در این نقطه متوقف میشوند. این همان برتری توست.
ذهن، مانند یک عضله، با تکرار قویتر میشود.
و انضباط همان تمرین روزانه است.
(با سپاس از @Lara R در پینترست)
ما باید از بقیه منظمتر باشیم.»
— وارن بافت
این اصل، هم در سرمایهگذاری و هم در فلسفه رواقیگری بنیادین است.
موضوع نبوغ نیست؛ موضوع رفتار است.
چگونه میتوان هر روز انضباط رواقی را تمرین کرد:
🧘♂️ واکنش هایت را کنترل کن
همهچیز ارزش پاسخ دادن ندارد.
📆 ثبات بساز
روالهای منظم مهمتر از تلاشهای پراکندهاند.
📵 از حواسپرتی دوری کن
از زمانت مثل ارزشمندترین داراییات محافظت کن — چون همین است.
🧭 به هدفت پایبند بمان
دنبال نکن — انتخاب کن.
🛠 کار را انجام بده، حتی وقتی خستهکننده است
بیشتر مردم در این نقطه متوقف میشوند. این همان برتری توست.
ذهن، مانند یک عضله، با تکرار قویتر میشود.
و انضباط همان تمرین روزانه است.
(با سپاس از @Lara R در پینترست)
👍2
۵۰ کانال یوتیوب آموزش برنامه نویسی
🟢 Python
1. Core Schafer
2. Sentdex
3. Tech with Time
4. Code with Harry
5. Real Python
🟠 Java
1. Alex Lee
2. Programming with Mosh
3. Java Brains
4. Coding with John
⚪ ML
1. Krish Naik
2. Stat Quest with Josh Starmer
3. Data School
4. Connor Shorten
🔵 Go
1. Just For Func
2. Matt Kodyb
3. Nic Jackson
⚪ Rust
1. Let's Get Rusty
2. Chris Biscardi
🟡 JavaScript
1. Traversy Media
2. JavaScript Mastery
3. Code Volution
4. Web Dev Simplified
5. Fun Fun Function
🟣 C#
1. I Am Tim Corey
2. Nick Chapsas
3. tutorials EU
🟠 Swift / IOS
1. Sean Allen
2. Kodeco
🔵 Flutter / Dart
1. Flutter
2. Reso Coder
🟤 PHP
1. Traversy Media
🟠 Ruby
1. GoRails
🔵 SQL & Database
1. Net Ninja
2. Caleb Curry
🔴 Web Frameworks
1. Acadmind
2. Net Ninja
3. Fireship
⚪ DevOps & Cloud
1. Tech World with Nana
2. A Cloud Guru
🔵 C / C ++
1. Caleb Curry
2. The Cherno
🔴 Kotlin
1. Philipp Lackner
2. Kotlin by JetBrains
❤3👍2
یادآوری کوتاه به شرکتهایی که بر اساس سبز بودن نمودار مشارکت GitHub استخدام میکنند:
- همهی توسعهدهندگان در پروژههای متنباز مشارکت نمیکنند.
- همهی توسعهدهندگان آخر هفتههایشان را صرف پوش کردن کد در GitHub نمیکنند.
- همهی توسعهدهندگان بعد از کار، ساعتها وقت برای ساخت پروژههای جانبی ندارند.
- همهی توسعهدهندگان نمیتوانند یا نمیخواهند بیرون از شغلشان کدنویسی کنند.
- همهی توسعهدهندگان باور ندارند که «خانههای سبز بیشتر» به معنای استعداد بیشتر است.
و واقعاً هم اشکالی ندارد.
چون کدنویسی در محیط کار خودش درسهای زیادی دارد:
1. نتایجی که ارائه میدهی، مسیر رشد، نفوذ و اعتمادی را شکل میدهد که نزد تیم، ذینفعان و مشتریان میسازی.
2. بازخورد سریع میگیری. همکارانت در موفقیت تو سرمایهگذاری کردهاند و مسائلی که حل میکنی اهمیت واقعی دارند—روی مشتریان اثر میگذارند، نه فقط روی تئوری.
پروژههای جانبی میتوانند فوقالعاده باشند برای کشف فناوریهای جدید یا ارضای خلاقیت.
اما نگذار کسی قانعت کند که آنها برای اثبات ارزش تو بهعنوان توسعهدهنده ضروریاند.
ارزش تو بهعنوان توسعهدهنده در تفاوتی است که در کار ایجاد میکنی، مسائلی که حل میکنی و اثری که بر جای میگذاری.
مسیر شغلی تو با رنگ نمودار GitHub تعریف نمیشود.
بلکه با اثری تعریف میشود که در جایی که واقعاً اهمیت دارد خلق میکنی.
🔗 LinkedIn Post
- همهی توسعهدهندگان در پروژههای متنباز مشارکت نمیکنند.
- همهی توسعهدهندگان آخر هفتههایشان را صرف پوش کردن کد در GitHub نمیکنند.
- همهی توسعهدهندگان بعد از کار، ساعتها وقت برای ساخت پروژههای جانبی ندارند.
- همهی توسعهدهندگان نمیتوانند یا نمیخواهند بیرون از شغلشان کدنویسی کنند.
- همهی توسعهدهندگان باور ندارند که «خانههای سبز بیشتر» به معنای استعداد بیشتر است.
و واقعاً هم اشکالی ندارد.
من از وقتی کارم را شروع کردم، بیرون از شغل روزانهام خیلی کد ننوشتهام.
اما این هیچوقت مانع رشد، یادگیری یا حل مسائل سخت دنیای واقعی نشد.
چون کدنویسی در محیط کار خودش درسهای زیادی دارد:
1. نتایجی که ارائه میدهی، مسیر رشد، نفوذ و اعتمادی را شکل میدهد که نزد تیم، ذینفعان و مشتریان میسازی.
2. بازخورد سریع میگیری. همکارانت در موفقیت تو سرمایهگذاری کردهاند و مسائلی که حل میکنی اهمیت واقعی دارند—روی مشتریان اثر میگذارند، نه فقط روی تئوری.
پروژههای جانبی میتوانند فوقالعاده باشند برای کشف فناوریهای جدید یا ارضای خلاقیت.
اما نگذار کسی قانعت کند که آنها برای اثبات ارزش تو بهعنوان توسعهدهنده ضروریاند.
ارزش تو بهعنوان توسعهدهنده در تفاوتی است که در کار ایجاد میکنی، مسائلی که حل میکنی و اثری که بر جای میگذاری.
مسیر شغلی تو با رنگ نمودار GitHub تعریف نمیشود.
بلکه با اثری تعریف میشود که در جایی که واقعاً اهمیت دارد خلق میکنی.
🔗 LinkedIn Post
❤6👍2🆒1
چرا مفاهیم پایه مهماند
احتمالاً خیلیهامان این حس را تجربه کردهایم؛ وقتی وارد دنیای معماری و تکنولوژیهای جدید میشویم، حجم مطالب آنقدر زیاد است که گیج میشویم. هر منبعی را که باز میکنیم پر از الگوهای طراحی و فریمورکهای پیچیده است.
بسیاری از ما یکبار این اشتباه را کردهایم؛ مستقیم سراغ Clean Architecture و DDD رفتیم، بدون آنکه ابتدا پایهها را درست بلد باشیم. در یک پروژهی ASP .NET Core، تنها به خاطر ندانستن درست async/await یا Dependency Injection، ساعتها زمان از دست رفته است. در ظاهر مشکل از معماری به نظر میرسد، اما ریشهی اصلی در ضعف مفاهیم پایه بوده است.
چرا این اتفاق رخ میدهد؟
وقتی زبان C# را خوب بلد نباشیم، هر خطا میتواند ما را متوقف کند.
وقتی اصول شیگرایی یا SOLID را درک نکرده باشیم، پروژهای که کمی بزرگ میشود بهسرعت به کدهای بههمریخته تبدیل میشود.
وقتی ساختار اصلی .NET را نشناسیم، معماریهای پیشرفته بیشتر شبیه معما به نظر میرسند تا راهحل.
راهحل
راهحل ساده ولی حیاتی این است که یک قدم به عقب برگردیم و روی پایهها تمرکز کنیم. حوزههایی مانند:
- ویژگیهای C# مثل generics، delegates، LINQ، async/await
- اصول شیگرایی و SOLID
- مبانی .NET Core مثل middleware و DI
- ساختمان دادهها و الگوریتمها
- مدیریت خطا و دیباگ
نتیجه
وقتی مفاهیم پایه تقویت شوند، معماریهای مدرن هم معنای واقعی خود را پیدا میکنند. جداسازی لایهها در Clean Architecture دیگر یک شعار نیست، بلکه نیاز طبیعی کد است. مدل دامنه در DDD دیگر پیچیده به نظر نمیرسد، چون میدانیم بر چه اساسی ارزشمند است.
ابزارها و تکنولوژیها هر روز تغییر میکنند، اما مفاهیم پایهای همیشه ثابت باقی میمانند. اگر در میان پیچیدگیهای امروز احساس سردرگمی داشتهایم، پاسخ اغلب در همان اصول ساده و بنیادی نهفته است.
🔗 LinkedIn Post
احتمالاً خیلیهامان این حس را تجربه کردهایم؛ وقتی وارد دنیای معماری و تکنولوژیهای جدید میشویم، حجم مطالب آنقدر زیاد است که گیج میشویم. هر منبعی را که باز میکنیم پر از الگوهای طراحی و فریمورکهای پیچیده است.
بسیاری از ما یکبار این اشتباه را کردهایم؛ مستقیم سراغ Clean Architecture و DDD رفتیم، بدون آنکه ابتدا پایهها را درست بلد باشیم. در یک پروژهی ASP .NET Core، تنها به خاطر ندانستن درست async/await یا Dependency Injection، ساعتها زمان از دست رفته است. در ظاهر مشکل از معماری به نظر میرسد، اما ریشهی اصلی در ضعف مفاهیم پایه بوده است.
چرا این اتفاق رخ میدهد؟
وقتی زبان C# را خوب بلد نباشیم، هر خطا میتواند ما را متوقف کند.
وقتی اصول شیگرایی یا SOLID را درک نکرده باشیم، پروژهای که کمی بزرگ میشود بهسرعت به کدهای بههمریخته تبدیل میشود.
وقتی ساختار اصلی .NET را نشناسیم، معماریهای پیشرفته بیشتر شبیه معما به نظر میرسند تا راهحل.
راهحل
راهحل ساده ولی حیاتی این است که یک قدم به عقب برگردیم و روی پایهها تمرکز کنیم. حوزههایی مانند:
- ویژگیهای C# مثل generics، delegates، LINQ، async/await
- اصول شیگرایی و SOLID
- مبانی .NET Core مثل middleware و DI
- ساختمان دادهها و الگوریتمها
- مدیریت خطا و دیباگ
نتیجه
وقتی مفاهیم پایه تقویت شوند، معماریهای مدرن هم معنای واقعی خود را پیدا میکنند. جداسازی لایهها در Clean Architecture دیگر یک شعار نیست، بلکه نیاز طبیعی کد است. مدل دامنه در DDD دیگر پیچیده به نظر نمیرسد، چون میدانیم بر چه اساسی ارزشمند است.
ابزارها و تکنولوژیها هر روز تغییر میکنند، اما مفاهیم پایهای همیشه ثابت باقی میمانند. اگر در میان پیچیدگیهای امروز احساس سردرگمی داشتهایم، پاسخ اغلب در همان اصول ساده و بنیادی نهفته است.
🔗 LinkedIn Post
👍7❤2