<?xml version="1.0" encoding="UTF-8"?><rss version="2.0"><channel><title>نوشته های حسین درخشان</title><link>https://virgool.ir/feed/@derakhshanfar.hossein</link><description>یک برنامه نویس فول استک با گرایش به بک اند و عاشق یادگیری و کشف چیز هایی جدید</description><language>fa</language><pubDate>2026-11-11 10:11:03</pubDate><image><url>https://files.virgool.ir/upload/users/723746/avatar/pAxIj5.jpeg</url><title>حسین درخشان</title><link>https://virgool.ir/@derakhshanfar.hossein</link></image><item><title>چند تا نکته جالب راجب  Hash-table ها</title><link>https://virgool.ir/@derakhshanfar.hossein/چند-تا-نکته-جالب-راجب-hash-table-ها-fat8vw46myke</link><description>یکی از پرکاربرد ترین Data Structure هایی که احتمالا همه ما باهاش سرو کار داشتیم فارغ از اینکه با چه زبانی کد مینویسم Hash-table ها هستند که اسم های مختلقی هم دارند مثل Hash-map یا maps یا unordered maps یا dictionaries و یا Objects . توی زبان جاوا اسکریپت، Object ها از جنس Hash-table هستند. در واقع این Data structure زمانی خیلی مفید هست که میخواید یک دسترسی سریع به یک مقدار مشخص داشته باشی. در دیتابیس ها زیاد از این Data Structure استفاده میشه.اولین نکته ای که راجب Hash-table ها باید بدونیم اینه که دلیل این اسم چی هست.لازمه اول یک توضیح کلی و سریع هم بدم راجب Hash . در واقع Hash کردن یک فانکشن هستش که  یک ورودی داره و به ازای ورودی که بهش میدیم  بر اساس الگریتم های مختلفی مثل md5 و یا SHA1 و یا الگریتم دلخواه خودتون همیشه یک خروجی ثابت برامون تولید میکنه. مثل این الگریتم من.همونطور که میبینید فانکشن بالایی که به زبان جاوا اسکریپت هم هستش یک ورودی به اسم key داره و یک خروجی بر اساس ورودی (و البته توی این مثال سایز Hash-table) تولید میکنه.  خوب حالا فرض کنید که میخوایم یک داده ای رو توی Hash-table ذخیره کنیم.  هر ردیف از Hashtable شامل یک کلید هست و مقدار اون کلید. Hash-table ها اون کلید رو با یک فانکشن Hash میکنند و اون فانکشن به ازای اون کلید یک آدرس از Ram رو بر میگردونه. پس اسم Hash-table از اینجا میادش.مثال پایین رو نگاه کنید:اول یک آبجکت تعریف کردم. توی خط بعدی یک کلید به اسم my_key و مقدار 10000 رو بهش assign کردم. اتفاقی که در background رخ میده اینه که جاواسکریپت my_key رو با Hash function خودش، Hash میکنه   و بعدش با توجه به اون Hash، یک آدرس توی بازه ای که برای اون متغییر در نظر گرفته شده تولید میشه ( که در واقع آدرسی از shelves های Ram ما هستش( مثلا توی مثال بالا شده 711 ) و بعدش مقدار اون که ۱۰۰۰ هستش رو ذخیره میکنه در اون shelve. توی خط بعد اون رو log کردم. درواقع برای دسترسی به کلید my_key ، همین فرایند بالا اتفاق می افته.خوب اینجا یک اتفاق جالب هم ممکنه بیافته که شاید کمتر  بدونند.وقتی من یک متغییر رو تعریف میکنم، سیستم یک مقدار مشخصی از Ram رو به اون متغییر اختصاص میده. منطقیه دیگه نیست؟ نمیاد که کل فضای Ram رو اختصاص بده به اون متغییر. البته توی بعضی از زبان ها شما خودتون باید سایز آرایه و یا Hash-table رو مشخص کنید و توی بعضی از زبان های دیگه نیازی به تعریف سایز ندارید که هر دو نوع مزایا معایب خودشون رو دارند. بهشون میگن Static &amp; Dynamic Array.در واقع وقتی یک آرایه Static تعریف میکنید، سایز اون آرایه رو مشخص میکنید و اون زبان موقع تعریف اون آرایه به ازای سایزی که موقع تعریفش مشخص کردید، یک قسمت از Ram رو بهش اختصاص میده ولی توی حالت Dynamic سایز اون متغییر بسته به تعداد آیتم هایی که درون اون هستند تعغییر میکنه.فرض کنید Ram ما ۱۰۰۰ تا بلاک داره. وقتی یک متغییر رو تعریف میکنیم، مثلا از بلاک ۲ تا بلاک ۱۰، به اون متغیر اختصاص داده میشه. حالا اون Hash function باید بر اساس ورودی که بهش داده میشه یک آدرس توی اون بازه ای که برای اون متغییر به اختصای داده شده تولید کنه. یعنی مثلا توی این مثال هر کلیدی رو به عنوان ورودی به این Hash function بدیم باید یک آدرس بین بلاک ۲ تا ۱۰ رو تولید کنه.به همین دلیل ممکنه بر اساس اون کلیدی که به Hash function داده میشه آدرس تکراری تولید کنه و در واقع یک Collision اتفاق بیافته. عکس بالا رو نگاه کنید. یک متغییر تعریف کردیم که از آدرس ۰۰۰ تا آدرس ۲۵۵ به اون متغیر اختصاص داده شده.بار اول کلید John Smith رو به Hash function میدیم و آدرس ۱۵۲ رو بر میگردونه. همین اتفاق برای کلید های بعدی هم رخ میده تا میرسیم به کلید Sandra Dee. اینجا هم Hash Function ما برای این کلید آدرس ۱۵۲ رو بر میگردونه! و اینجاست که Collision به وجود میاد. روش های مختلفی هستش که این Collision رو بتونیم حل بکنیم که توی این لینک میتونید یک نگاهی بهش بندازید (مثلا یکی از روش ها که توی عکس بالا هم هستش استفاده از Link list ها هست) ولی نکته ای که مهم هستش اینه که وقتی Collision اتفاق میافته خواندن و نوشتن توی اون بلاک از RAM، کند تر میشه.درواقع توی این حالت، Big O عملیات خواندن و نوشتن (O(N میشه.اگه راجب Big O خیلی اطلاع ندارید بعدا راجب بهش یک پست میذارم ولی در همین حد بدونید که سرعت میاد پایین تر.امیدوارم مفید بوده باشه واستون.</description><category>حسین درخشان</category><author>حسین درخشان</author><pubDate>Thu, 05 Aug 2021 16:10:20 +0430</pubDate></item><item><title>درد تمرکز نداشتن (قسمت یک)</title><link>https://virgool.ir/@derakhshanfar.hossein/چطوری-استاد-تمرکز-کردن-بشیم-توی-این-اوضاع-خراب-قسمت-یک-ssz4lg0rqggz</link><description>تمرکز کردن یک مهارت هستش ولی متاسفانه مثل خیلی چیز هایی که ما فقط ارثی یاد گرفتمیش و هیچوقت دنبال بهبودش نبودیم تبدیل به یک مشکل اساسی برای زندگی مدرن شده. درواقع شاید کمتر کسی رفته باشه دنبال بهبود فلان مهارت (مثل مهارت متقاعد کردن آدم ها، کار تیمی، کتاب خوانی، خلاصه برداری، مدیریت زمان و ....) چرا که اصلا فکر نمیکنه اون موضوع یک مهارت هستش و با تمرین و تلاش میشه بهبودش داد. مگه اینکه دیگه به جایی برسیم که ببینم کارها خوب پیش نمیره و احساس درماندگی کنیم. شاید بعضی از ماها وقتی به این حالت رسیدیم بریم و دنبال جواب برای اون مشکل بگردیم. شایدم خیلی هامون بیخیال شیم کاملا و بگیم خوب این یک قسمت از زندگی هستش دیگه. درواقع عادت کنیم به بدبختی.اول از همه باید بگم من خودم شدیدا مشکل تمرکز کردن رو داشتم و برای همین شروع کردم به گوگل کردن و جستجو کردند برای این موضوع و خوب طبیعتا دیدم خیلی های دیگه هم سراسر دنیا درگیرش هستند. متاسفانه با رشد تکنولوژی و هوشمند تر شدن موبایل ها کمپانی هایی زیادی میخوان که تمرکز ما بره به سمت محتوا و محصولات و آگهی های اون ها که در واقع به اونها کمک میکنه نه به من و شما.  من  توی این راه مطالب باحالی رو پیدا کردم که انجام بعضی هاش واقعا سخت نیستند و میخوام اونا رو واستون به اشتراک بذارم توی یک سری پست.از اول بشریت تا الان، تمرکز کردن روی چیزهای مهم، هیچوقت سخت تر  از الان نبودهتوی صد هزار سال اخیر هیچ وقت انقدر این مشکل بزرگ نبوده. قبل از ظهور این تکنولوژی ها همیشه انسان ها روی یک چیزی تمرکز میکردیم. مثلا روی آتیش روش کردن. حتی مثلا حدود صد سال پیش خیلی از آدم ها اگه  دیگه خفن بودند یک کتابی داشتند که سال ها اون رو مطالعه و راجب بهش فکر میکردند.  به نظر خوب میرسه ولی خوب مشکل این بود که اشتراک گذاری ایده شون خیلی سخت بود و خوب اکثرا کارگر و یا کشاورز میموندند. من که خودم دلم نمیخواد به اون سال ها برگردم. ولی خوب خوشبختانه الان هیچ وقت انقدر ساده نبوده که بتونی از ایده ای که داری پول در بیاری. از اون طرف متاسفانه هیچ وقت انقدر تمرکز کردن سخت نبوده مخصوصا از حدود ۱۵ سال پیش تا الان. خوب باید بدونیم که ذهن ما هزاران سال توی تکاملش اصلا همچین پدیده ای رو تجربه نکرده و حق داره که انقدر ضعیف عمل کنه. هر جا که میریم پر هستش از هزاران تبلیغات و یا اخباری که ذهن ما رو بمبارون میکنند و هر تیکه از ذهن ما رو درگیر خودشون میکنند. همه این ها باعث میشه یادمون بره چی واسه من و شما مهم بوده و دوستش داشتیم. من نمیخوام بگم که گوشی موبایلتون رو بندازید دور این واقع گرایانه نیستش ولی میخوام بگم که یاد بگیرید کنترل کنید چیزهایی رو به ذهن شما وارد میکنند. یک نکته کوچیک ولی خیلی خیلی مهم گوشی مبایلتون رو خاموش کنید. (حتی پنج دقیقه)اگه میخواید دوباره تمرکزتون رو بدست بیارید موبایلتون رو خاموش کنید. حتی اگه شده فقط برای پنج دقیقه این کار رو کنید. مشکلی که خیلی وقت ها ما داریم اینه که موبایلمون همیشه جلومون هستش وقتی نیاز داریم تمرکز کنیم و متاسفانه تمرکز ما همش میره به سمت پیام ها ، ایمیل و توییت ها و در عمل کارهای دیگران. من از یک تکنیک استفاده میکنم به اسم pomodoro. خیلی از اپلیکیشن هاش هم هستند که میتونید گوگل کنید و ببینید. توی این تکنیک شما ۲۵ دقیقه تمرکز کامل میکنید در واقع گوشی مبایل رو خاموش میکنید و بعدش ۵ دقیقه به خودتون هر پاداشی رو که دوست دارید بدید. در واقع من کارهام رو میشکونم به تسک های ۲۵ دقیقه ای و خوبی این روش اینه که توی طول روز میتونم کلی زمان ۲۵ دقیقه ای پیدا کنم بین کارهای اصلیم.چند کار رو همزمان انجام ندیدهیچی بدتر از این نیست که بخواید چند تا کار رو همزمان با هم انجام بدید. اگه مثلا دارید این پست من رو میخوانید ازتون خواهش میکنم موبایلتون رو خاموش کنید. زات ما اینشکلیه هستش که میتونیم همزمان روی یک موضوع به خوبی تمرکز کنیم. اصلا هم مهم نیست چه قدر باهوش هستید و یا مدرک تحصیلیتون چی هستش. بار ها و بارها ثابت شده که چند کار رو همزمان کردن واقعا بهره وری شما رو می اره پایین. مشکل شاید اینه که چند کار رو هم زمان کردن رو نمیفهمیم بس بهش عادت کردیم. مثلا رانندگی و مسیج دادن یعنی چند کاره گی. آدم ها میگن مثلا من میتونم هم صحبت کنم یا تکست بدم و هم رانندگی کنم تا زمانی که یک تصادف کنند و ...مثلا به عنوان یک برنامه نویس ما از یک ابزار به اسم اسلک استفاده میکنیم. این که همزمان کد بزنیم و توی اسلک آنلاین باشیم و اگه کسی پیام داد به ما جوابش بدیم یعنی multi tasking. به همین سادگیشما فقط خودتون رو گول میزنید اگه فکر میکنید میتونید هم ایمیل بزنید هم مثلا گوگل کنید و هم جواب تلفن رو بدید و ...هر بار که یک کار دیگه ای دارید وسط اون کار انجام میدید یک قسمت از انرژی که مغذ شما مصرف میکنه میره به سمت سوییچ کردن به اون موضوع و باعث میشه کلی انرژی از دست بره. پس با چند کاره گی زمانی رو ذخیره نمیکنید اتفاقا بیشتر زمان رو از دست میدید.اگرچه موقع هایی هم هستش که دارید کاری رو انجام میدید که نیاز با تمام تمرکز شما نداره. مثلا آشپزی و پادکست گوش دادن. ولی اگه میخواید از تمام ظرفیت ذهنتون استفاده کنید لطفا چند تا کار رو همزمان انجام ندید.(چند تا کار رو همزمان انجام دادن رو بار دیگه به تعریفش دقت کنید. هر چیزی که تمرکزتون رو از اون موضوع حتی برای چند ثانیه بگیره یعنی مولتی تسک بودن)مدیتیشن یا یوگا یا هر دوبرای سالها من از مدیتیش کردن بدم میومد ولی وقتی نگاه میکنی به آدم های خفن میبینید که همشون این کار رو انجام میدادند. نکته اینکه راه های بسیار زیادی برای مدیتیشن وجود داره و هر راهی برای یک کسی مناسبه هستش. پس اون راهی رو پیدا کنید که واسه شما مناسبه و جواب میده بهتون. درواقع یک چیزی که توی همه انواع میدتیشن ها مشترک هستش اینه که شما موقع مدیتیشن، روزنامه خوندن و یا پیام  چک کردن و یا هیچ کار دیگه ای رو انجام نمیدید. درواقع خودتون هستید و خودتون. این به شما این اجازه رو میده که بتونید تمرکز کنید. یکی از بهترین کار هایی رو که میتونید بکنید مثلا اینه روز خودتون رو با ۱۰ دقیقه مدیتیشن شروع کنید.  اگه فکر میکنید تایم این کار رو ندارید دارید خودتون رو گول میزنید. در ادامه نکته هایی رو بهتون میگم چه طوری و کی مدیتیت کنید.قبل از شروع هر روز برنامه داشته باشیدکسایی به این درجه میرسند که بتونند تمرکز کنند روی چیزهایی که خودشون میخوان، واسه  روز هاشون برنامه میریزند. بعضی آدم ها برنامه سالانه دارند، بعضیهاشون برنامه ماهانه دارند. بعضی ها هفتگی برنامه ریزی میکنند. بعضی ها مثلا روز قبلش برای فرداشون و یا صبح همون روز حتی. میخوام بگم هر کسی به روش خودش واسش راحت تر هستش که برنامه ریزی کنه. هیچ راه عالی و خفن کلی وجود نداره.بدترین کاری که میتونید بکنید اینه که برنامه ای نداشته باشید.خیلی ساده از خواب بلندشید و برید سر کار و ... و  در آخر روز ببینی که هیچ کاری رو در جهت اهداف خودت نکردی. انگار شما جزیی از برنامه یکی دیگه هستید و فقط دارید این ور و اون ور میچرخید.حتما حتما یک زمان بذارید و برای روزتون برنامه ریزی کنید. لزوما نیاز نیستش بگید دقیقه به دقیقه میخواید چه کار کنید. از خودتون بپرسید مهمترین  چیز واسه شما چی هستش که دوست دارید روش تمرکز کنید. وقتی آماده شد اون رو یک جا بچسبونید. مثلا روی دیوار و یا توی گوگل کلندرد و یا ... شما با داشتن برنامه میتونید یک سری کارها رو تبدیل به عادتش کنید و تبدیل به عادت شدند اون یعنی این که با انرژی خیلی کمتری اون کار رو انجام میدید و در نتیجه زمان بیشتری برای کارهای دیگه دارید.باز تاکید کنم اگه مثلا امروز مشخص کردید ۴ ساعت روی فلان موضوع میخواید وقت بزارید یا گوشیتون رو خاموش کنید و یا مثلا اگه کسی بهتون زنگ زد جواب ندید چون شما نمیخواید که برنامه یکی دیگه رو اجرا کنید. شما اولویتهای  خودتون رو دارید. درواقع اولویت های شما مهمتر هستش از کارهای دیگران که از شما میخوان واسشون انجام بدید.سعی کنید یک موضوعی رو عمیقا دنبال و درکش کنیدحتما خیلی از شما ها افرادی رو دیدید که شبیه آچار فرانسه هستند. اونا همه کاری رو تقریبا بلد هستند انجام بدند. (توی زمینه شغلی خودم مثل برنامه نویس های full stack میمونه) متاسافنه این افراد توی همه چیز های در یک حد متوسط خواهند موند و با کمترین حقوق ها مجبور هستند کار کنند چرا که یک موضوعی رو به صورت تخصصی روی اون تمرکز نکردند. یک کمپانی خیلی خفن کمتر دنبال یک نیرویی هستش که هر چیزی رو در یک سطح متوسط میدونه.  اگه یک برنامه نویس full stack هستید این رو بدونید که احتمالا موقعیت های کمتری رو برای کار کردن توی یک کمپانی های خفن دنیا رو خواهید داشت اگه یک موضوع رو عمیقا دنبال نکرده باشید. اشکال نداره که full stack هستید ولی سعی کنید بیشتر روی علاقه خودتون تمرکز کنید و رشد کنید. وقتی که متوجه شدید به چه چیزی علاقه بیشتری دارید و روی اون تمرکز کردید اون موقع بقیه پول خیلی بیشتری به شما خواهند داد.گاهی ممکنه گزینه های زیادی توی سرتون باشه برای تمرکز کردن روی اون ها. اگه این شکلی هستش سعی کنید اولویت بندیشون کنید و تعداد موضوع های مختلفی رو که باید روی اون ها تمرکز کنید رو به حداقل  و در بهترین حالی به یک مورد برسونید. این موضوع شامل کسب و کارها ها هم میشه. مثلا خودم شخصا بار ها تجربه کردم خیلی از وب سایت ها سعی میکنند کلی فیچر به کاربر ها بدند که همین موضوع باعث میشه تمرکزشون از موضوع اصلی و نیاز مشتری خارج بشه و خوب شکست بخورند.توی قسمت های بعدی به موضوع های دیگه ای اشاره میکنم که میتونه بسیار کمک کننده باشه. یک نکته بگم زندگی خوب فقط با ساختن عادت های کوچک به وجود میادش. هیچ راه میانبری نیستش. گاهی بعضی کارهای کوچک انقدر ساده میاد که ما اون رو اصلا انجامش نمیدیم و مشکل از همینجا شروع میشه.</description><category>حسین درخشان</category><author>حسین درخشان</author><pubDate>Wed, 21 Jul 2021 18:42:38 +0430</pubDate></item><item><title>قبل از استخدام برنامه نویس به این نکات توجه کنید</title><link>https://virgool.ir/@derakhshanfar.hossein/قبل-از-استخدام-برنامه-نویس-به-این-نکات-توجه-کنید-pydqpdi5rkue</link><description>اگر یک شرکت تولید نرم افزار داشته باشید احتمالا یکی از چالش های اصلی که بهش برخوردید، استخدام نیروی انسانی متخصص هستش. توی این پست میخوام راجب تجربیات خودم از استخدام برنامه نویس ها صحبت کنم. متاسافنه خیلی از برنامه نویس های خوب و با تجربه ما مهاجرت کردند و کم کم داره جای خالی اون ها توی کشور حس میشه. احتمالا اگه آگهی استخدامی برنامه نویس زده باشید، رزومه هایی که دریافت میکنید اکثرا جوان های کم سن و سال تر هستش که خوب خبر خوبی هم میتونه باشه.ولی مشکل کجاست..اولین مشکل به اعتقاد من این هستش که خیلی از این دوستان جوانی که وارد کار شده اند، اونقدری که به یادگیری یک مهارت توی حوزه برنامه نویسی توجه میکنند، توی مهارت های اخلاقی و تیمی پیشرفت نکرده اند و توی سال های اخیر من خیلی زیاد مشاهده کردم که کارفرما ها آسیب های جدی دیدند از این موضوع.مشکل بعدی اثر دانینگ کروگر هستش، به این معنا که ارزیابی غلطی از مهارت خودشون دارند و اکثرا خودشون رو خیلی بیشتر از سطح واقعیشون میدونند.خوشبختانه و یا متاسفانه حقوق برنامه نویس ها به دلیل کمبود نیروی کار خوب، رشد نسبتا خوبی رو توی سال های اخیر در مقایسه با خیلی از شغل های دیگه توی ایران خودمون داشته و از طرف دیگه ویروس کووید باعث شده که اکثر دوستان از راه دور کار کنند.این دو مورد بالا، یعنی حقوق نسبتا خوب به دلیل کمبود نیرو و همچنین دورکاری باعث شده بعضی از برنامه نویس ها، با یک شرکت به صورت تمام وقت وارد همکاری شند و  چون از منزل کار میکنند، یک پروژه دیگه حتی گاهی تمام وقت با یک شرکت دیگه داشته باشند و در نتیجه چون کار برنامه نویسی، کار فکری هستش و دو تا پروژه فول تایم و یا گاهی پارت تایم همزمان با هم انرژی بسیار زیادی رو میگیره، متاسافنه شاهد کارایی بسیار پایینی از بعضی از نیروها بودیم.خوب بریم سراغ مصاحبه...نکته اول این که مصاحبه کننده باید مهارت مصاحبه کردن رو آموزش دیده باشه چرا که صرف این که شما برنامه نویس خوبی هستید، لزوما مصاحبه کننده خوبی نمیتونید باشید. دوره های بسیار زیادی هست که میتونید این مهارت رو بهترش کنید.با این وجود حتی بهترین مصاحبه گر ها هم ممکنه اشتباه کنند پس روی دوره آموزشی با اون نیرو تاکید فراوان کنید.  توی دوره آموزشی، سعی کنید به دقت اون نیرو رو ارزیابی کنید.مثلا ببینید چه قدر به زمان بندیهایی که میگه، کیفیت کدهاش، رشد خودش و کار تیمی توجه میکنه.واسش چالش بزارید، ببینید چه جوری اون چالش رو حل میکنه.یا یک بار نقدش کنید حتی نقد الکی، ببینید رفتارش چه شکلی میشه.ترجیهتون این باشه و به نیروتون بگید که واسه کمپانی شما مهم هستش که نیروی برنامه نویس ترجیها شغل برنامه نویسی دیگه ای نداشته باشند چرا که فکر میکنید دو تا پروژه همزمان برنامه نویسی میتونه روی کیفیت کار تاثیر زیادی بزاره.اگه کارایی نیروتون توی دوره آموزشی پایین بودش، مثلا یک بار ازش بخواید تایم بیشتری رو توی هفته بزاره واسه شرکت و اگه شاهد مخالفت های شدیدی بودید، میتونه یک زنگ خطر باشه.توی مصاحبه یکی از سوال های خوب، دلیل عدم همکاری اون نیرو با شرکت قبلیش هستش. این رو از خود طرف بپرسید و تمام تلاشتون رو کنید که با شرکت و یا شرکت های قبلی اون نفر ارتباط برقرار کنید و بپرسید آیا از عملکرد اون نفر راضی بودید و یا نه و در واقع دلیل خروج اون نفر رو از نگاه کارفرمای قبلی بپرسید.آیا با هم تفاوتی میکنند؟ اگه آره یکم بیشتر حواستون جمع باشه.نکته بعدی سن نیروتون هستش. اگه طرفتون مثلا سی سالش هست و پیشرفت قابل توجهی تو کارش نداشته، شاید و باز تاکید میکنم شاید، شغل برنامه نویسی رو فقط از سر اجبار انتخاب کرده و علاقه خاصی به این کار نداره.اگه این شکلی باشه، بیچاره میشید چون این شما هستید که هر روز باید بهش مسیر رو بگید و عملا اون نفر شبیه تایپیست ممکنه بشه.پس مثلا  همیشه یکی از سوال های خوب اینه که بپرسید چرا برنامه نویس فرانت اند شده و ببینید چه قدر شوق داره نسبت با کارش.نکته بعدی این که متاسافانه شاهد این بودم که بعضی از افراد بعد از این که حقوق  ماه قبلی رو گرفتند، دیگه پاسخگو نبودند. به این موضوع توجه کنید و پرداخت حقوق رو وابسته کنید به کارایی اون نفر و همچنین مثلا میتونید یک ماه حقوق رو به عنوان ضمانت، نگه دارید و یا هر روش دیگه ای که از پاسخگو بودن اون نفر مطمئن باشید و همچنین داکیومنت کردن رو جزیی از کار بدونید و نه یک موضوع فانتزی.در نهایت دوستان بگم که تمام گزینه ها بالا واسه شرکت هایی هستش که نیروی انسانی خودشون رو سرمایه شرکت میدونند و واسه رشد نیروشون ارزش قائل هستند. قاعدتا نیرو های جوان تجربه کمتری دارند و شما به عنوان کارفرما باید در جهت رشد نیروتون تلاش کنید.یکی از کتاب های بسیار عالی که من دیدم توی زمینه اخلاق کاری برنامه نویس ها کتاب clean coder هستش. بسیار پیشنهاد میکنم این کتاب رو تهیه کنید و از نکات خیلی مهمی که نویسنده کتاب بیان میکنه یک منشور اخلاقی درست کنید که همه تیم فنی تون باید بهش متعهد باشند. همچنین اگه نیروی متعهدی دارید، واقعا قدرش رو بدونید و تلاش کنید که شرایط خوبی رو واسش فراهم کنید. کارهایی خوبی رو که انجام میده رو ببینید و همچنین وظایف خودتون مثل پرداخت حقوق به موقع و یا بیمه به عنوان پاداش کارشون، بیانش نکنید.</description><category>حسین درخشان</category><author>حسین درخشان</author><pubDate>Sat, 01 May 2021 21:35:25 +0430</pubDate></item><item><title>چرا من‌ فکر میکنم طراحی الگریتم و ساختمان داده میتونه خیلی مهم نباشه</title><link>https://virgool.ir/@derakhshanfar.hossein/چرا-من-فکر-میکنم-طراحی-الگریتم-و-ساختمان-داده-میتونه-خیلی-مهم-نباشه-nbozpt4us1is</link><description>توی خیلی از مصاحبه ها معمولا دیدیم سوال هایی راجب الگریتم و ساختمان داده ها پرسیده میشه. خیلی از دوستام رو میبینم که با پرسیدن سوال های این شکلی فکر میکنند که اندازه کافی خوب نیستند و شاید همین موضوع باعث بشه حتی دست از شغل برنامه نویسی بردارند. اول اینکه بچه ها این رو بدونید که یکی از تکنیک های مصاحبه کننده ها این هستش که سوال هایی از شما بپرسند که شما اون رو ندونید و بعد ببیند توی همچین شرایطی واکنش شما چی هستش که توی یک پست دیگه راجب این موضوع صحبت میکنم.بیاید برنامه ها بک اند رو به دو نوع زیر تقسیم کنیم:یا شما به عنوان یک برنامه نویس بک اند میتونید integrator باشید که در واقع راه حل های موجود رو integrate میکنه که جلوتر مثالش رو میزنم و یا کسی باشید که قرار هستش یک برنامه core مثل دیتابیس و یا web server بسازه.فرض کنید که شما قرار هست یک برنامه CRUD بنویسید مثلا یک فروشگاه اینترنتی و یا یک سایت سمینار آموزش و یا ...شما توی این نوع وبسایت ها قرار هست از دیتابیس ها و فریم ورک هایی که دیگران ساختند استفاده کنید و برنامه خودتون رو بنویسید.  شما قرار نیستش که دیتابیس جدید خودتون رو اختراع کنید درست میگم؟ شما قرار هست یک وب سرور و یک دیتابیس و یک زبان رو انتخاب کنید و در عمل با هم دیگه integrate کنید.تجربه شخصی من این بوده که در این نوع برنامه ها شما معمولا خیلی کم ممکن هست درگیر موضوعات ساختمان داده و الگریتم بشید (البته واضح هستش که ممکنه استثنا هایی هم باشه) ولی شاید بیشتر از ۸۰ درصد وقت شما صرف نوشت لاجیک ها  یا مثلا کوئوری زدن به دیتابیس یا concurrency ها و .. میشه.فرض کنید مثلا قرار هست یک برنامه شبکه اجتماعی بسازید. آیا این نوع برنامه از جنس integration هستش و یا از جنس core هستش؟ (بر اساس نیازمندیهای پروژه میتونه از هر دو نوع باشه)برنامه های شبکه های اجتماعی میتونه خیلی پیچیده بشه. در واقع شما یک سری دنبال کننده دارید که اونا هم یک سری دنبال کننده دارند و و .. که در نهایت یک گراف رو تشکیل میده و بسیار الگریتم های پیچیده ای رو میتونه شامل بشه. شما میتونید تصیم بگیرید که یک تکنولوژی بک اندی که توی زمینه گراف ها خوب باشه رو انتخاب کنید ( مثل انتخاب یک دیتابیس گراف مثل Neo4j ) و در نهایت لاجیک خودتون رو روی این نوع دیتابیس بنویسید.و یا همچنین شما ممکنه به جایی برسید که متوجه بشید اون دیتابیس برای شما کافی نیستش و باید راه حل خودتون رو داشته باشید. اگه شما توی این دسته از گروه ها قرار میگیرید بی شک باید الگریتم و فلوچارت ها و همچنین خیلی خیلی موضوعات دیگه مثل کرنل سیستم عامل و ..خوب بلد باشید. که البته این موضوعات هرکدوم انقدر تخصصی میشه که دنیای خودش رو داره.ولی بچه ها  حتی توی همین کیس هم نترسید چون کسایی که توی این زمینه ها دارند کار میکنند  هیچ وقت نمیان بشینند این الگریتم ها رو حفظ کنند! واسه همین من اصلا طرفدار این نیستم که توی مصاحبه ها سوال های الگریتمی پرسیده بشه  چون به برکت دوره های بسیار زیادی که توی اینترنت میتونید پیدا کنید چند روز وقت بزارید کلی از الگریتم ها رو یاد میگیرید و نیازی به حفظ کردنشون نداره اصلا!مثلا دیدم طرف میاد توی مصاحبه میگه بیا این آرایه رو مرتب کن.جواب من این هستش که من چرا باید حفظ کنم این الگریتم ها رو!  اگه حتی قرار هست توی اون شرکت مثلا یک دیتابیس جدید بسازید آیا مدیرتون میاد بالای سرتون و میگه یک ساعت وقت داری بیا بشین و دیتابیس جدید رو بساز بدون دسترسی به اینترنت؟ نههه !!! معلومه که نه!! این کار یک عملیات پیچیده هستش و نیاز به هفته ها google کردن داره!پس بسته به اینکه شما توی کدوم یکی از این دو نوع میخواید کار بکنید اهمیت دونستن ساختمان داده ها و طراحی الگریتم میتونه متفاوت باشه.البته باز تاکید میکنم که شما ممکنه توی برنامه هایی از نوع integration نیاز داشته باشید از الگریتم ها استفاده کنید و قطعا دونستن هر چیزی میتونه بسیار مفید باشه. اینجا بحث سر اولویت های یادگیری هستش.عملا نیاز داره یکم واقع گرایانه نگاه کنیم به ساختمان داده ها و الگریتم ها. خیلی موقع ها یک الگوریتم بهتر همیشه راه حل اون مشکل نیستش. مثلا فرض کنید شما یک الگریتم مرتب سازی مثل quick sort رو دارید و قرار هستش با اون یک آرایه یک ملیونی رو مرتب کنید. توی این حالت شاید بگید خوب مثلا الگریتم merge sort میتونه دو درصد سرعت رو بهتر کنه. ولی سوال اینجاست! آیا ما یک کوئری میزنم و یک ملیون رکورد رو از دیتابیس fetch میکنیم و بعد نتیجه رو توی برنامه sort میکنیم؟! نه!! چرا باید این کار رو کنیم خوب! این کار رو میسپاریم به دیتابیس و اون مرتب سازی رو واسه ما انجام میده!در آخر بگم که یادگیری الگریتم ها و ساختمان داده ها بسیار موضوع شیرینی هستش فارغ از اینکه توی کدوم نوع از برنامه ها دارید کار میکنید و اصلا نیازی نیستش حفظشون کنید و یا بترسید ازشون. فقط کافی بدونید مثلا فلان الگریتم هستش که فلان کار رو واسه شما بهتر انجام میده. هر وقت نیاز شد میرید سمتش و یادش میگیرید. این در واقع یک دانش هست و دانش یک موضوع کلیدی هستش توی همه بخش های زندگی.</description><category>حسین درخشان</category><author>حسین درخشان</author><pubDate>Thu, 18 Mar 2021 00:34:23 +0330</pubDate></item></channel></rss>