از بچگی هم به کامپیوتر علاقه داشتم و هم از دیدن فیلمهای بروسلی و جکی چان لذت میبردم. در هر دو، مهارت و تسلط و توانایی وجود داشت. دانشآموز راهنمایی که بودم با تایپ کردن از روی یک دفترچه راهنمای Commodore Plus/4 و تغییر مقادیر و شلنگ تخته انداختن سعی کردم برنامه بنویسم. اما هنر رزمی را به لطف دوست قدیمیام بابک، در بیست و چند سالگی شروع کردم. سبکی که یاد میگرفتم کوک سول وان، یک هنر رزمی کرهای قدیمی بود، چیزی شبیه کونگ فوی چینی. تا امروز علاقهام به هیچکدام کمتر نشده است. دریای دانشی پشت هر کدام است که اگر همهی عمر هم صرفشان کنم باز هم چیز جدیدی برای یادگرفتن وجود خواهد داشت.
قبلاً از قول شخص معروفی خوانده بودم که برنامهنویسها میتوانند هر چیزی را راحت یاد بگیرند. تا حدود زیادی با این گفته موافقم چرا که ما الگوها را راحتتر تشخیص میدهیم و عاشق خلاقیت و ماجراجوییهای کوچک در حین پیروی از مجموعهای از قواعد هستیم. همینطور وقتی با گیر و گورهای یک سیستم، محکم به دیوار میخوریم باز هم مصمم هستیم راه حلی برایش پیدا کنیم.
بنابراین غیر از بروسلی، این ویژگیها به طور مشخص در یادگرفتن کوک سول وان به کارم آمدند. با انگیزهی تمام، تمرینها را انجام میدادم و به دقت به اصولی که استاد و ارشدها میگفتند گوش میدادم، درست مثل یادگرفتن یک فریمورک. بعد از گذشت چندماه یک روز که شاد و خوشحال و البته خسته و کوفته از باشگاه برمیگشتم، در ذهنم جرقه زد که راه و روش هنرهای رزمی هم میتواند به برنامهنویس شدن کمک کند. رابطههای زیادی پیدا کردم که سه تا از مهمترینهایشان را مینویسم.
استاد و الگو
آیا میتوانید رزمیکاری را تصور کنید که استاد و الگو نداشته باشد؟ امکان ندارد. هر استادی که ببینید خودش استادی داشته است. حتی اساتیدی که سبک جدیدی ایجاد میکنند قبلا حداقل یک استاد در یک سبک دیگر داشتهاند. در بیشتر رشتههایی که به کسب مهارت و دانش مربوط هستند نقش مربی انکارناپذیر است. حتماً به شما هم گفته شده برای اینکه برنامهنویس بهتری باشید باید نمونه کدها را بخوانید. احتمالاً با برنامهنویسهایی برخورد کردهاید که نه کتابی خواندهاند و نه نمونه کدی را بررسی کردهاند و دست خط کدنویسیشان خرچنگ قورباغه است و به جای برنامه، ماکارونی درست میکنند. برای هر زبان و فریمورک Coding Style Guide و Best Practiceهایی وجود دارد که باید رعایت شوند. برای راحتی کار ابزارهایی ساختهاند که کد نوشته شده را مثل یک معلم املا با این قواعد تطبیق میدهد.
اما تنها مطالعه و تحقیق کافی نیست. برای پیشرفت به یک مربی هم نیاز دارید. پیشنهاد میکنم از یک برنامهنویس حرفهای درخواست کنید که نقش مربیتان را بر عهده بگیرد. او مسیر صحیح را بهتر از شما میشناسد، نقاط ضعفتان را نشانتان میدهد و میتواند شما را راهنمایی کند که در مرحلهی بعد چه مبحثی را مطالعه کنید. از او بخواهید ابزارهایی که استفاده میکند و منابعی را که مطالعه میکند به شما معرفی کند.
در دو سال اول کارم فقط با مطالعه و خواندن نمونهکدها برنامهنویسی میکردم. بیشتر وقتها نمیدانستم بهتر است برای پیشرفت چه مبحثی را مطالعه کنم و یا روشم برای نوشتن برنامهها درست است یا نه. تا اینکه با یکی از سالبالاییهای دانشگاهم، آقای محسن طاهری آشنا شدم. او در یک شرکت نرمافزاری دلفی مینوشت و وقتی فهمیدم به مراتب از من بیشتر میداند از او کمک گرفتم. برای مدتی نقش مربیام را داشت و نگرشم را به برنامهنویسی تغییر داد. فهمیدم خیلی از چیزهایی که نوشتهام خوب هستند و برای بعضی دیگر روشهای بهتری وجود دارد.
محسن عزیز یک دنیا ممنونم!
اصول پایهای از همه مهمترند
در هنرهای رزمی اصولی پایهای وجود دارند که همیشه باید آنها را رعایت کنید. به عنوان مثال باید موقع مشت و لگد زدن فریاد بزنید، گارد را بالا نگه دارید و موقع وارد شدن به زمین (دوجو یا دوجانگ) احترام بگذارید. این اصول خیلی ساده و مقدماتی هستند اما در هر سطحی که باشید نباید دورشان بزنید. حتی استاد هم موقع ورود به زمین، احترام میگذارد.
برنامهنویسی هم پر از این اصول اولیه است. مثلاً همیشه ورودیهای کاربر را validate و بعد sanitize کنید. Exceptionهای سیستمی و کتابخانههایی را که استفاده میکنید تا جای ممکن شناسایی کنید و در برنامه در نظر بگیرید. مستندات را بخوانید. کلاسها، متغیرها و متدها را شفاف و گویا نامگذاری کنید و اگر این کافی نبود comment بنویسید. از نوشتن کد اضافی پرهیز کنید.
حتی اگر آخر فریمورکبازها، زباندانها و متدولوژیشناسها هم باشید و اصول اولیه را رعایت نکنید، دانش شما فقط به درد پز دادن به همکار بینوایتان میخورد. بنابراین از روزهای اول برنامهنویسی تا روزی که به عنوان برنامهنویس ارشد مشغول به کار میشوید این قوانین را باید رعایت کنید و در رعایت آنها بهتر عمل کنید.
کاتا: تمرین صد بارهی مجموعهای از حرکات مشخص
بیشتر هنرهای رزمی قدیمی برای هر سطح یک یا چند کاتای مشخص دارند. کاتا شامل مجموعهای از حرکات از پیش طراحی شده است که آنها را به ترتیب مشخص و تا جای ممکن صحیح و با دقت اجرا میکنند. کاتاها شامل تمام حرکات پایهای فنهای مختلف دفاعی و حملهای هستند. هر چه سطح بالاتر میرود این کاتاها هم سختتر و پیچیدهتر میشوند.
با گذشت زمان و تمرین کاتاهای مختلف روی بدن کنترل بیشتری بدست میآورید. برای صحیح و دقیق انجام دادن آنها باید صدها بار تمرینشان کنید و قدرت بدنی و تمرکزتان را به مرور افزایش دهید. هر کمربندی که داشته باشید باید کاتاهای قبلی را هم تمرین کنید و به آنها مسلطتر شوید.
خبر خوب این است که برای برنامهنویسی هم کاتا وجود دارد. کافی است «programming kata» را در گوگل جستجو کنید. حتی یک سایت هیجانانگیز به اسم codewars وجود دارد که پر از مسئلههای جالب است و به شما کمربند هم میدهد. اول با مسئلههای ساده و پایهای شروع میکند. شما راه حل خود را مینویسید و درستی برنامه با تستهای از قبل پیشبینی شده سنجیده میشود. بعد از حل چند مسئله سطح شما بالاتر میرود و مسئلهها هم سختتر میشوند.
البته این یک نوعش است. جای دیگری خوانده بودم که بهتر است کاتای برنامهنویسی، پروژهای بزرگتر از یک مسئله باشد تا برای پیادهسازی امکانات بیشتری وجود داشته باشد. برنامهنویس کارکشتهای گفته بود بازی مونوپولی را تا به حال بیشتر از ۵۰ بار بازنویسی کرده است و هر بار توانسته سریعتر و سادهتر پیادهسازیش کند. من یکی دو پروژه شبیه این دارم که هر چند وقت یک بار با یکی از زبانهایی که بلدم یا با زبان جدیدی که یاد گرفتهام پیادهسازیشان میکنم.
هدف این است که درگیر فهم و هضم صورتمساله نباشیم و مجموعهای از کارها و الگوها را تکرار کنیم. اول به نظر میرسد از این فرآیند چیز جدیدی عایدمان نمیشود اما بعد از چند بار متوجه میشویم ذهن و دستهای ما در برنامهنویسی به مراتب چابکتر عمل میکنند.
برنامهنویسی رزمی خوش بگذرد.