به دنبال انگیزه – انجمن DEV

این پست در مورد کد نیست. حتی اگر برنامه نویسی بلد نیستید، نباید به سختی ادامه دهید 😄
من بازخوردهای زیادی در مورد کارم شنیده ام. ثابت ترین پیشرفت ها در ارتباطات است که امروز هم مشکل خاصی با آن دارم.
مشکلی که اغلب پیش می آمد این بود که توضیحات من خیلی فنی بود. در گفتگوی من با تیم محصول، این همه چیز را پیچیده کرد. به عنوان مثال، من تمام زمینه های پیرامون اجرای یک ویژگی جدید را توضیح دادم. او امکاناتی را که میتوانست به آن فکر کند مطرح کرد و امکانات و مشکلاتی را که در پیادهسازی و نگهداری اولیه کد ایجاد میکرد، به همراه آورد. با خودم فکر می کردم و با همه شفاف می گفتم.
اگر قرار بود با افراد ارشدتر بحث کنید، این موضوع مرتبط بود، اما به ندرت اینطور بود. چیزی که در طول زمان یاد گرفتم این بود که دامنه افراد را درک کنم مورد نیاز است بدانند و برایشان بیاور. درک کنید که چرا آن ارتباط وجود دارد، و مشخص کنید که دقیقاً به چه چیزی نیاز داشتم تا با آن دلیل ارتباط برقرار کنم.
با استفاده از این، پیامهای Slack که 5 پاراگراف غولپیکر بودند و جزئیات تحویل را توضیح میدادند، به 5 جمله کوتاه تبدیل شدند که بر آنچه فرد باید بداند تمرکز میکرد. برای نوشتن 5 جمله، هنوز کمی طول می کشد، اما ارتباط از این طریق بسیار روان تر است.
زمانی را به یاد میآورم که با استفاده از Enzyme تستهای React Component ایجاد میکردم. یادگیری دنیای فرانتاند با او بسیار عالی بود، زیرا آنها ساده بودند و هر کسی میتوانست بدون زحمت تستهایی را ایجاد کند.
it('renders', () => {
const wrapper = shallow(<Component />);
expect(wrapper).toMatchSnapshot();
})
من دوست دارم این تست ها را به عنوان “میان وعده” در نظر بگیرم، آنها سریع می نویسند و می فهمند و به ندرت شکسته می شوند. اگر خراب میشدند، تعمیر آنها یک فرآیند ساده بود، معمولاً U را روی صفحه کلید میزدم و عکس فوری خود بهروزرسانی میشد، حتی نیازی به بررسی هم نداشتم.
اما یک چیزی که از من پنهان بود این بود که تست ها در عین سادگی که نگهداری می شوند، همچنین هستند خیلی بلا استفاده. بسیاری از اشکالات از این روش عبور کردند و در نهایت ارزش آزمایش بسیار محدود شد.
React Testing Library وارد زندگی من شد. با یک اصل همراه است:
هرچه تستهای شما بیشتر شبیه روش استفاده از نرمافزار شما باشد، اعتماد به نفس بیشتری میتوانند به شما بدهند.
همین جمله کوچک خیلی تاثیر می گذارد. برای پیروی از این اصل، React Testing Library دارای است کمتر احتمالات نسبت به آنزیم وجود داشت، اما چیزی که به نظر من یک مزیت به نظر می رسید یک مزیت بود. این امر تمرکز بر ساختار کد را کاهش می دهد و تمرکز روی کاربر را به عنوان ارزش اصلی آزمایش افزایش می دهد.
من فقط تستها را اجرا کردم زیرا این تمرین خوب تلقی میشد، اما یک بار هم به هدف آزمایشی فکر نکرده بودم، که برای خود آزمونها ارزش قائل بود. من حتی برای اعمال این اصل نیازی به React Testing Library نداشتم. با محدود کردن خودم در آنزیم، آزمایشهایی با ارزش بیشتری ایجاد کردم.
خشک (خودت را تکرار نکن یا خودت را تکرار نکن) مخفف بسیار محبوب برای بهترین تمرین در دنیای برنامه نویسی است. ایده او کاهش دوباره کاری با قانون عدم تکرار کد است.
این قانون نه فقط در قسمت جلو، بلکه برای هر سطحی از برنامه نویسی که من دیده ام اعمال می شود. و تا حد زیادی محبوب ترین و بیشترین پیاده سازی توسط تیم ها است. انتقاد اخیر از این “بهترین روش” این است که کدهای بسیار پیچیده را در طول زمان معرفی می کند.
فرآیند به شرح زیر است: با معرفی یک انتزاع از تکرار کد جلوگیری می شود. شخص دیگری با توجه به اینکه به این انتزاع نیاز دارد از آن استفاده می کند و آن را برای پرونده خود تغییر می دهد. و یک نفر دیگر و دیگری و غیره. تا اینکه انتزاع دیگر معنی ندارد، اما همه از آن استفاده می کنند.
قوانین دیگری برای کاهش این مشکل معرفی شده است. مرطوب (همه چیز را دوبار بنویس یا همه چیز را دوبار بنویس) قانونی است که می گوید: “همه کدها نباید بیش از دو بار نوشته شوند”. این یک قانون است که این مشکلات را کاهش می دهد، اما به نظر من قانون دیگری وجود دارد، یا بهتر است بگوییم ایده ای که پیچیدگی کد را کاهش می دهد، AHA: “Avoid Hasty Abstractions”.
ایده برنامه نویسی AHA این است که انتزاعات را در مواقع نیاز به کد وارد کند و استفاده از انتزاعات را به سادگی با انتزاع کاهش دهد.
مزیت (و معایب) AHA این است که قانون آسانی برای پیروی ارائه نمی دهد. این یک قانون تعریف شده را رها می کند تا توسعه دهنده بتواند چندین عامل را تعیین کند که تعیین می کند آیا چنین انتزاعی ضروری است یا خیر. این باعث می شود برخی از موارد کمی عجیب به نظر برسند، به عنوان مثال:
const DEBUG_QUERY_PARAM = 'shouldDebug'
function Component() {
const { search } = useLocation()
// ...
const doSomething = () => {
const shouldDebug = new URLQueryParams(location.search)
.has(DEBUG_QUERY_PARAM);
if (shouldDebug) {
console.log('debugging happening');
}
// ...
}
}
این کد دو انتزاع مرتبط دارد: DEBUG_QUERY_PARAM
ه shouldDebug
. هر دو وجود دارند اما فقط یک بار استفاده می شوند.
اگر قرار است فقط به قوانین DRY یا WET تکیه کنید، هر دو انتزاع معنی ندارند، آنها فقط یک بار در کد استفاده می شوند. اما مهم است که قبل از حذف آنها، هدف واقعی پشت آنها را به تصویر بکشید.
DEBUG_QUERY_PARAM
ارزش مستندسازی رفتار را دارد. به هر کسی که در حال خواندن است اطلاع می دهد که تابعی برای اشکال زدایی کد وجود دارد و توسط پارامتر query کنترل می شود. shouldDebug
. هدف کد استفاده مجدد نیست، بلکه مستندسازی یک ویژگی است.
shouldDebug
هدف آن انتزاع یک کد پیچیده به کدی است که برای انسان به راحتی قابل درک است، حتی می تواند از طریق این رابط دوستانه آموزش دهد. همچنین، بهتر نشان دهنده هدف شخصی است که آن را ایجاد کرده است و در صورت وجود اشکال، کار تعمیر و نگهداری را آسان تر می کند.
⚠️ لزوماً نمی گویم کد نوشته شده کد خوبی است. قبل از اعمال همان منطق، زمینه آن را در نظر بگیرید.
چرا؟
این داستانها توسط یک ایده به هم متصل میشوند که با یک یا دو کلمه ترکیب شدهاند: “چرا؟” برای ارزش بخشیدن به یک کار، باید دلیل آن را بفهمم.
من تکنیکی به نام “5 چرا” را دیده ام که برای ریشه یابی مشکل طراحی شده است. در آن یک بازگشت وارد میکنید: میپرسید چرا یک مشکل رخ میدهد و پس از آن سعی میکنید دلیل وجود این دلیل را و به طور مداوم توضیح دهید.
این تکنیک را می توان در جاهایی که هنوز مشکلی مشاهده نمی کنید اعمال می شود. سعی کنید انگیزه پشت آن را درک کنید. این انگیزه لازم نیست بهترین در جهان باشد، اما باید صادقانه باشد. اگر می خواهید به جای JS از TypeScript استفاده کنید، نیازی نیست در مورد کیفیت بهتر یا همان آرگومان های قدیمی صحبت کنید. آرگومان ها می توانند بر اساس زمینه شما باشند: شاید می خواهید TS را در پروژه خود امتحان کنید یا می خواهید نمونه کار حرفه ای خود را بهبود بخشید.
پس از نوشته شده است
کمی متا بودن در اینجا و اعمال پست روی خودش. من خیلی سعی کردم بنویسم، اما هرگز نوشتن را تمام نکردم. من در مورد این موضوع در پست صحبت کردم زیرا موضوعی است که باید در مورد آن صحبت کنم و نوشتن را آسان تر می کند. و در پایان، من می خواهم چنین پست هایی را به عنوان بخشی از زندگی حرفه ای خود بنویسم.