برنامهنویس 10x افسانه ای
دوشنبه 27 فروردین 1397یک برنامهنویس 10x، برنامهنویسی است که میتواند در جایی که یک برنامهنویس معمولی یک کار خوب انجام میدهد، او 10 برابر برنامهنویسان معمولی کار کند. در واقع بهتر است بگوییم برنامهنویس معمولی در میان برنامهنویسان حرفهای در این رشته، خروجی متوسطی را ارائه میدهد.
جامعه برنامهنویسی در مورد وجود یا عدم وجود چنین افرادی نظرات متفاوتی دارد. بعضیها میگویند چیزی به عنوان برنامهنویس x10 وجود ندارد، افرادی دیگر میگویند نه تنها وجود دارد بلکه اگر بدانید در کجا و چه موقعیتی باید به این موضوع نگاه کنید، برنامهنویس x100 هم وجود دارد.
اگر به برنامهنویسی به عنوان یک رشته خطی نگاه کنید، واضح است که برنامهنویس x10 غیرمنطقی به نظر میرسد. چگونه یک دونده میتواند 10 برابر سریعتر از دیگران بدود؟ یا یک کارگر ساختمان میتواند 10 برابر کارگران دیگر که در همان زمان به ساخت و ساز مشغول هستند، کار کند؟ با این حال برنامهنویسی رشتهای مربوط به طرح و نقشه، با شیوهای بسیار خاص، است.
بنابراین اگر طراحی و پیادهسازی برنامه قابلیتی خطی نباشد، به نظر ما چیزهایی مانند تجربه، تواناییهای برنامهنویسی، دانش، شناخت بخشهای بیفایده وجود دارند، که نه تنها مزایای خطی هستند، بلکه با شیوهای چندگانه در عملکرد ایجاد یک برنامه در کنار هم کار میکنند. البته این پدیده وقتی برنامهنویس میتواند طراحی و پیادهسازی برنامه را با هم مدیریت کند، بیشتر صورت میگیرد. بیشتر هدفگرایی مدنظر است. برنامهنویس x10 به مراتب بیشتر میتواند تواناییهای خودش را برای رسیدن به هدف با تلاشهای کمتر به کار گیرد.
در زیر لیستی از ویژگیهایی که معتقدیم بیشترین تفاوت را در بهرهوری برنامهنویسان ایجاد میکند را بیان کردهایم.
قابلیتهای ساده برنامهنویسی: فراهم کردن زیرمجموعهای از کارهای انجامشده
یکی از آشکارترین محدودیتها، یا نقاط قوت یک برنامهنویس این است که با زیر مجموعه کارهایی که بخش پیادهسازی برنامه هستند، مثل تابع، الگوریتم یا هر چیز دیگری، سر و کار داشته باشد. با توجه به تجربهای که ما داریم، به طرز شگفتانگیزی توانایی استفاده از ساختارهای پایهای برنامهنویسی برای پیادهسازی هر چیزی بسیار مؤثر هستند. گاهی اوقات در یک تیم برنامهنویسان بیکفایتی را مشاهده میکردیم که حتی الگوریتم ساده مرتبسازی هم بلد نبودند، کسانی که در تئوری بسیار خوب بودند اما در اجرای راهحلهای پیادهسازی خیلی ضعیف عمل میکردند.
تجربه: تطابق الگو
تجربه به معنی مجموعهای از کارهایی است که قبلا برای تعدادی از کارهای که انجامشده کشف شدهاند. برنامهنویسان باتجربه در نهایت میدانند چگونه با انواع کارها مقابله کنند. این امر از کار طراحی اجتناب نمیکند، بلکه یک سلاح بسیار قدرتمند علیه خطاهای طراحی است.
تمرکز: زمان واقعی در مقابل زمان فرضی
ساعاتی که صرف نوشتن کد میشود، بدون در نظر گرفتن کیفیت زمان بیاهمیت است. کمبود تمرکز میتواند با عوامل داخلی و خارجی ایجاد شود. عوامل داخلی عبارتند از تعویق، عدم علاقه به پروژهای که در حال کار کردن روی آن هستید (شما نمیتوانید کاری را انجام دهید که دوست ندارید)، کمبود ورزش/تندرستی، خواب کم یا نامناسب. عوامل خارجی عبارتند از جلسات مکرر، محیط کار بدون دفاتر واقعی، گسیختگی بین همکاران و غیره. طبیعی به نظر میرسد که تلاش برای بهبود تمرکز و کاهش وقفه تأثیر خوبی روی بهرهوری برنامهنویسی دارد. گاهی اوقات برای به دست آوردن تمرکز، انجام اقدامات زیادی ضروری میباشد، مثلا ما فقط ایمیلها را میخوانیم و به بیشتر آنها پاسخ نمیدهیم.
صرف نظر کردن بخشی از طراحی به خاطر بخشی دیگر
اغلب پیچیدگیها زمانی ایجاد میشود که هیچ تمایلی برای شناخت اهداف غیراساسی پروژه یا ساخت اهداف بسیار مهمی که به دست آوردنشان خیلی سخت است، وجود نداشته باشد، زیرا نوعی کشمکش طراحی در میان ویژگیهای اساسی و غیراساسی وجود دارد. برای طراح بسیار مهم است که تمام بخشهای طراحی که به راحتی به دست نمیآیند را بشناسد. پروژهای که به مراتب برای حداکثر خروجی اجرا میشود، کاملا روی جنبههای مهم تمرکز دارد و میتواند در زمان مناسبی اجرا شود.
سادگی
این یک نقطه آشکار است که به معنی همه چیز و هیچ چیز میباشد. به مراتب برای درک اینکه چه چیزی ساده است، ارزش دارد تا بررسی کنیم چه پیچیدگیهایی اغلب تولید میشوند. ما معتقدیم که دو عامل اصلی پیچیدگی، عدم تمایل به صرف نظر کردن بخشی از طراحی به خاطر بخشی دیگر و انباشتن خطاها در کار طراحی است.
اگر به فرآیند طراحی فکر کنید، هر بار که یک مسیر اشتباه دنبال میشود، ما از راهحل مطلوب بیشتر و بیشتر دور میشویم. یک خطای طراحی اولیه که در حال انجام است، منجر به طراحی یک راهحل پیچیده دیگر برای مقابله با خطای اولیه خواهد شد. بنابراین پروژه در هر مرحله اشتباهی که انجام میشود، پیچیدهتر شده و کارایی کمتری به دست میآورد.
استفاده از روش ساده میتواند حاصل شود به این دلیل که موارد کوچک "اثباتی از مفاهیم" است، بنابراین برنامهنویس میتواند تعداد وسیعی از طراحیهای ساده را کشف کند تا کارها را با شیوههای پایدارتر و سادهتر انجام دهد.
با این حال هر بار که یک راهحل پیچیده مورد نیاز است، مهم است تا مدت زمانی را صرف پیدا کردن راهی برای اجتناب از پیچیدگی کنیم و تها در صورتی که راهحل بهتری را پیدا نکردیم کار را همانگونه ادامه دهیم.
دانش: بعضی تئوریها کمککننده هستند
هنگام سر و کار داشتن با وظایف پیچیده، دانش در مورد ساختار دادهها، محدودیتهای اساسی محاسبات، الگوریتمهای غیربدیهی که بسیار مناسب برای ساخت کارهای معین میباشند، در توانایی یافتن یک طراحی مناسب بسیار مؤثر هستند. داشتن تخصص بسیار خوب در همه چیز لازم نیست، اما داشتن حداقل آگاهی از بسیاری از راهحلها برای مسائل قطعا ضروری است.
سطح پایین: درک دستگاه
برخی مشکلات در برنامهها، حتی هنگام استفاده از زبانهای سطح بالا، ناشی از درک اشتباه نحوه انجام کار کامپیوتر میباشد. این مسأله حتی ممکن است نیاز به طراحی مجدد و پیادهسازی مجدد از ابتدای پروژه داشته باشد زیرا یک مشکل اساسی در ابزار یا الگوریتمهای مورد استفاده وجود دارد. شایستگی خوب زبان C، درک نحوه کار پردازندهها و تصورات روشن در مورد چگونگی عملکرد هسته و شیوه اجرای فراخوانیهای سیستم، میتواند این مشکلات را از بین ببرد.
مهارتهای اشکالزدایی
خیلی آسان است تا مقدار زیادی از کار را برای پیدا کردن باگها صرف کنیم. در مجموع خوب است تا باگها را یافته و آنها را با مجموعهای از گامهای منطقی و نوشتن کدهای ساده که بعید است حاوی اشکالات بیشماری باشد، اصلاح کنیم. این امر میتواند تأثیر زیادی در بهرهوری برنامهنویس داشته باشد.
ما تعجب نمیکنیم اگر ببینیم چگونه کیفیت بالاتر یک برنامهنویس میتواند 10 برابر تأثیر بیشتری روی خروجی بگذارد. ترکیب کردن این موارد اجازه میدهد پیادهسازی خوبی از طراحی که از یک مدل پایدار شروع میشود و میتواند بسیار ساده باشد، داشته باشید. راهی برای تأکید بر سادگی وجود دارد که ما آن را "برنامهنویسی فرصتطلبانه" مینامیم. اساسا در هر مرحله از توسعه، مجموعهای از ویژگیهای پیادهسازی، برگزیده است تا بیشترین تأثیر را با حداقل نیاز به تلاش، بر کاربر برنامه داشته باشد.
- برنامه نویسان
- 2k بازدید
- 2 تشکر