تجربیات دولوپری که ۳۰ سال کد زده است!

تجربیات دولوپری که ۳۰ سال کد زده است!

مثلی در زبان فرهنگ ایرانی داریم با این مضمون که «تجربه را تجربه کردن خطا است!» و در همین راستا، در این مقاله قصد داریم تا تجارب -درست و نادرست- ۳۰ سالهٔ یک برنامه‌نویس را در اختیار شما قرار دهیم که حاوی اطلاعات مفیدی برای دولوپرها است.

وقتی شما بیش از ۳۰ سال کد بزنید، مسلماً تجربیات تلخ و شیرین فراوانی کسب خواهید کرد که برای دولوپرهای تازه‌کار می‌توانند الهام‌بخش باشند اما درعین‌‌حال به یاد داشته باشیم که حتی پس از ۳۰ سال کدنویسی هم کماکان مطالب زیادی برای یادگیری هست و بیش از پیش می‌توان دست به کسب تجربه زد.

مشتریان تا قبل از دیدن سفارش‌شان، نمی‌دانند چه می‌خواهند!
پس از شروع برنامه‌نویسی، دیر یا زود به این واقعیت پی خواهید برد؛ اکثر مشتری‌ها تا وقتی شما آن‌ها را راهنمایی نکنید، نمی‌‌دانند که درواقع به چه چیزهایی نیاز دارند. در همین راستا، استفاده از Functional Prototyping (نمونه‌سازی‌های کاربردی) همیشه باعث کاهش حجم کاری شما می‌شود (این تجربه ما را به یاد یکی از گفته‌های استیو جابز -یکی از ۲ بنیانگذار اپل- می‌اندازد که می‌گفت این مشتری نیست که می‌گوید چه می‌خواهد بلکه این شما -به‌عنوان خالق محصول- هستید که به مشتری نشان می‌دهید که به چه چیزی نیاز دارد).

همیشه برای ایجاد امنیت وقت بگذارید
امروزه، امنیت یکی از چالش برانگیزترین موضوعات در دنیا است؛ اگر در حرفهٔ برنامه‌نویسی فعالیت می‌کنید، باید در حوزهٔ امنیت به قول معروف همیشه کارتان درست باشد. سعی کنید در این حوزه بی‌عیب و نقص عمل کنید و همیشه این موضوع را به‌خاطر داشته باشید که تنها یک‌بار موفقیت هکرها، به منزلهٔ شکست شما تلقی می‌شود.

در ارتباط با مسئلهٔ امنیت، آینده‌نگر باشید
اگر این تصور را دارید که بالاخره روزی یک هکر به سیستم شما نفوذ خواهد کرد، سعی کنید نقشه‌ای برای این‌گونه موقعیت‌ها داشته باشید! مثلا می‌توانید از این ایده استفاده کنید که اگر روزی هکری اطلاعات شما را به سرقت برد، نتواند از آن‌ها استفاده کند چراکه شما از قبل تدابیر امنیتی را برای این‌چنین شرایطی اندیشیده‌اید و داده‌ها را به‌اصطلاح Undecipherable (غیرقابل تفسیر) کرده‌اید.

امنیت ضعیف ضربه‌ای پرهزینه به سرمایهٔ شما است
بسیاری از فعالان حوزهٔ آی‌تی دربارهٔ هزینه‌های بالای ایجاد امنیت در صنعت برنامه‌نویسی شکایت می‌کنند اما اگر این امنیت از دست برود یا به‌خوبی تأمین نشود، باعث به‌وجود آمدن میلیون‌ها تومان خسارت می‌شود. خواهشاً به‌خاطر چند پاپاسی، آیندهٔ کسب و کار خود و یا مشتریان‌تان را به مخاطره نیندازید!

تا دلتان بخواهد، پیچیده‌تر نشان دادن مسائل پیچیده آسان است!
این مطلب در برنامه‌نویسی، طراحی یا هر حرفهٔ خلاقانهٔ دیگری صدق می‌کند؛ همیشه باید سعی‌مان بر این باشد که کدها را به ساده‌ترین شکل ممکن بنویسم تا چه برای خودمان و چه برای دیگران قابل‌فهم باشند. اگر سعی بر پیچیده کردن کدها کنید، احتمال کارکرد بهینهٔ آن‌ها هم پایین می‌آید و بدتر هم این‌که در حین فرایند دیباگینگ، به مشکلات زیادی بر خواهید خورد (البته لازم به‌ذکر است که دولوپرهایی در بازار فعال هستند که کدهایشان را به گونه‌ای می‌نویسند که تا حد امکان غیرقابل‌فهم باشد).

شکست حاصل این تفکر است که اشتباه کردن طبیعی است و می‌توان با آن کنار آمد!
بارها از افراد مختلفی می‌شنویم که می‌گویند «چون برنامه‌نویسی کار سختی است، اشتباه کردن و به موجب آن وجود نقص در نرم‌افزارها نیز طبیعی است». به‌نظر می‌رسد برخی مشتریان ساده هم چون این جمله را زیاد شنیده‌اند، سعی می‌کنند با این موضوع کنار بیایند.

اما شما به‌عنوان یک برنامه‌نویس حرفه‌ای نباید این جمله را بپذیرید! شما باید هر اشتباه را تنها یک‌بار تکرار کنید. هیچ‌کس هرگز بی‌عیب و نقص نیست اما حداقل باید تلاش کرد تا در مسیر درست گام برداشت.

تنها چیزی که هرگز تغییر نمی‌کند خود «تغییر» است
برنامه‌ریزی برای فردا بر این اساس که فردا هم مثل امروز است کاری است بس بیهوده! باید توجه داشته باشید که در دنیا و به‌ویژه دنیای برنامه‌نویسی هیچ چیز همیشگی نیست. اگر برخلاف این مسئله فکر می‌کنید، باید بدانید که تصور مخربی دارید!

هرگز از یادگیری دست نکشید
اگر بخواهید به‌عنوان یک برنامه‌نویس به شغل خود ادامه دهید، تنها راهش این است که همیشه به سمت جلو حرکت کنید؛ به‌محض این‌که استراحت کنید و خیال برتان دارد که همه‌چیزدان شده‌اید، آن‌وقت یک مهرهٔ سوخته در حوزهٔ توسعهٔ نرم‌افزار خواهید بود.

به‌ حدسیات خود در حوزهٔ برنامه‌نویسی اعتماد نکنید
باتوجه به ماهیت صنعت IT و به‌خصوص حوزهٔ توسعهٔ نرم‌افزار، تغییر و تحولات دیگر به صورت سالانه نیستند بلکه به‌صورت ماهانه و حتی بدتر، هفتگی و روزانه تبدیل شده‌اند؛ کار در چنین شرایط بی‌ثباتی باعث می‌شود که اکثر حدسیات ما دولوپرها در ارتباط با آیندهٔ صنعت توسعهٔ نرم‌افزار اشتباه از آب درآید که این اصلاً خبر خوبی نیست اما درعین‌حال باز هم جای امیدواری است چراکه حتی بزرگان دنیای IT هم به‌خاطر شرایط موجود اشتباه می‌کنند و این قضیه فقط مختص ما نیست!

آنچه برای شما مفید بوده، الزاماً برای دیگران مثمرثمر واقع نخواهد شد
در هر پروژهٔ نرم‌افزاری، شما با بی‌نهایت انتخاب روبه‌رو هستید؛ برخی از این انتخاب‌ها در اولویت قرار دارند، برخی نیز قابل‌قبولند و برخی دیگر مشکل آفرینند. اما آنچه برای شما مفید بوده و انتخاب خوبی به‌شمار می‌رود، لزوماً برای دیگران نیز مفید نخواهد بود! 

پس به‌خاطر داشته باشید که همیشه یک رویکرد به‌خصوص -که معمولاً ساده‌ترین بوده و همان چیزی است که به آن تسلط داریم- را برای مشتریان مختلف به‌ کار نبندیم و همان‌طور که یک پزشک برای تک‌تک بیماران خود نسخه‌ای متفاوت می‌پیچد، یک دولوپر حرفه‌ای نیز می‌بایست دقیقأ چنین رویکردی را اتخاذ نماید.

مهم‌ترین مهارت در دنیای همیشه در حال تغییر، مهارت ارزیابی است
اکثر مردم به این نکته توجه نمی‌کنند، اما توانایی دیدن یک مسئله به شیوه‌ای نوین یا مشاهدهٔ آنچه دیگران مشغول به انجام آنند و مقایسهٔ روش‌های مختلف انجام یک کار و انتخاب بهترین روش برای انجام آن، مهارتی است که برای شما، تیم‌تان، پروژه‌ٔتان و حتی کل شرکت بسیار ارزشمند و حیاتی است.

اما خبر ناامیدوارکننده این‌که اکثر دولوپرها در انجام این کار، مهارت چندانی ندارند و خبر بدتر این‌که اکثر مدیران و رهبران حوزهٔ آی‌تی در این زمینه عملکردی بسیار ضعیف دارند؛ انجام یک کار به روشی که دیگران می‌گویند یا در یک وبلاگ می‌خوانید یا به روشی که دیگران انجام می‌دهند، اصلاً کار سختی نیست. اگر توانستید به یک مسئله از جنبه‌های مختلف نگاه کنید و همهٔ روش‌های ممکن برای انجام کار را درنظر بگیرید و سپس باتوجه به شرایط و موقعیت و نیاز خود بهترین روش را انتخاب کنید، آن‌وقت کار شاقی کرده‌اید.

البته مجبور خواهید شد که در این راستا تصمیماتی نیز اتخاذ کنید؛ غالباً مردم هنگام اتخاذ تصمیمی که نیاز به ارزیابی موقعیت دارد، دچار نوعی ترس می‌شوند که درنهایت منجر به انتخاب یک روش به‌صورت تصادفی می‌شود و یا در بهترین حالت، آن‌ها هم پا جای پای دیگران می‌گذارند.

برای ترشی انداختن، صدها راه مختلف وجود دارد
برای مشتری‌ها اهمیتی ندارد که شما برای نوشتن یک برنامه با چه مشکلاتی مواجه می‌شوید؛ آنچه برای آن‌ها مهم است این می‌باشد که نرم‌افزار شما کارهای مورد نظرشان را انجام دهد (همان‌طور که وقتی برای مهمان‌تان سر سفره ترشی سرو می‌کنید، او کاری ندارد که ترشی را به چه روشی درست کرده‌اید بلکه چیزی که برایش مهم است، مزهٔ ترشی است).

اگر سیستم شما با خطا مواجه می‌شود، اکسپشن زیاد دارد، برنامه‌هایی که نوشته‌اید افتضاح هستند و مدام مورد حملهٔ هکرها قرار می‌گیرند، بدانید در شرایطی هستید که اصلاً باب‌میل مشتری‌ها نیست! اگر مشکلی پیش آمد، خیلی خوب است که صداقت داشته باشید و آن‌را بیان کنید؛ مطمئناً برای همه گاهی‌اوقات مشکلاتی پیش می‌آید، اما بهتر است قبل از این‌که مشتری شما را در چنین وضعی ببیند، اطمینان حاصل کنید که اوضاع به‌مدت طولانی آشفته نخواهد ماند.

مشتری بهترین مسئول کنترل کیفیت (QC) است
مهم نیست برای نوشتن یک برنامه چقدر زحمت بکشید، چند خط کد بنویسید، چندبار این کدها را مرور کنید، چند چک لیست داشته باشید و غیره و غیره؛ همهٔ این‌ها بی‌اهمیت‌اند مگر این‌که نرم‌افزار شما تمام آنچه مشتری انتظار دارد را انجام دهد و تمام آنچه لازم نیست را انجام ندهد! درنهایت این نظر مشتری است که کیفیت عملکرد، طراحی و کارآمدی نرم‌افزار شما را مشخص می‌کند.

ناشناخته‌ها دشمن شما هستند و باعث شکست‌تان می‌شوند
حتی امروزه هم که صنعت نرم‌افزاری کلی پیشرفت کرده است، اکثر دولوپرها نه به‌اندازهٔ کافی لاگ و گزارش تهیه می‌کنند و نه از اطلاعات موجود استفاده می‌کنند. افرادی که چنین اطلاعاتی را جمع‌آوری نمی‌کنند، معمولاً برنامه‌هایی با کیفیت پایین به بازار عرضه‌ کرده‌اند.

شما از کیفیت کارتان مطلع نخواهید شد مگر این‌که در این‌ باره اطلاعات کافی جمع‌آوری کنید و آن‌ها را ثبت و ارزیابی کنید. اما مشتری‌ها این‌کار را می‌کنند؛ یک دولوپر حرفه‌ای همیشه بعد از نوشتن یک برنامه، پیگیر کامنت‌ها، نظرات و گزارشات مشتریان می‌شود و به‌محض بروز یک مشکل، سعی در برطرف سازی آن می‌کند. با این حال، هستند کسانی که انجام چنین کارهایی را در شأن یک برنامه‌نویس باتجربه نمی‌دانند (برای کسب اطلاعات بیشتر در مورد اهمیت لاگ‌ها در توسعهٔ نرم‌افزار، به مقالهٔ آشنایی با مفهوم Structured Logging در توسعهٔ نرم‌افزار مراجعه نمایید).

برای انجام یک کار همیشه راه‌های بهتری هم هست اما مسئله زمان را نیز مدنظر داشته باشید
همیشه سخت‌ترین کار این است که بدانیم چه‌موقع باید دست از گشتن و جستجو برداریم و کار را شروع کنیم؛ این کار ممکن است این شانس را از بین ببرد که راه بهتری برای انجام یک کار پیدا کنیم اما درعین‌حال باید توجه داشته باشیم اگر وقت زیادی صرف پیدا کردن روش مناسبی برای انجام کاری کرده‌ایم، دیگر لزومی ندارد بیش از این وقت تلف کنیم!

انجام دادن یک کار به روش صحیح کار دشواری است اما باید توجه داشت که گاهی‌اوقات ممکن است تصمیم بدی که امروز می‌گیریم ما را به‌سوی تصمیمات بهتری در سال آینده راهنمایی کند.

۲ مورد آخری که برایتان شرح می‌دهیم، شاید نه اخلاقی باشند و نه حرفه‌ای اما به‌هرحال مدنظر قرار دادن مواردی این‌چنینی هم خالی از لطف نیست.

همیشه دنبال مشتریان پول‌دار بگردید
از دید برخی دولوپرها یا شرکت‌های برنامه‌نویسی، پیدا کردن مشتریان ثروتمندی که با تکنولوژی آشنایی ندارند نهایت شانس است؛ افراد باهوش زیاد سوال می‌پرسند و افرادی هم با توان مالی ضعیف از پس هزینه‌ها برنمی‌آیند! 

هرگز به مشتری نه نگویید
برخی مدیران بازاریابی عاشق این هستند که قول‌های غیرممکن به مشتری‌ها بدهند و وقتی دولوپرها درواقع با هزار سختی این غیرممکن را ممکن می‌کنند، پاداش کار را به‌جیب می‌زنند! قبول داریم که انجام غیرممکن‌ها خود نوعی چالش است -و اکثر دولوپرها هم از چالش استقبال می‌کنند- اما انجام زیادی آن‌‌را به‌هیچ‌وجه توصیه نمی‌کنیم! 

حال نوبت به نظرات شما می‌رسد؛ شما با کدام‌یک از تجربیات ۳۰ سالهٔ این دولوپر موافقید و کدام موارد را قبول ندارید؟ نظرات و دیدگاه‌های خود را با ما و سایر کاربران سکان آکادمی به اشتراک بگذارید.

منبع