تفاوت برنامه نویسی و کد نویسی
بیا بشینیم یه قهوهای بخوریم، کمی هم حرف بزنیم؛ میخوام برات توضیح بدم چرا «کدنویس» بودن با «برنامهنویس» بودن، مثلِ فرق «نقاشِ خونهکشی» و «معمارِ ساختمان»ه. هر دو رنگ میزنن، ولی یهتاش فقط دیوارِ آماده رو رنگ میکنه، اون یکی قبل از هر چیزی نقشه میکِشه، بار محاسبه میکنه، میگه کجا پنجره لازم داری، کجا نباید دیوار بکشی. بریم ببینیم توی دنیای کد هم این فرق دقیقاً کجاست.
۱) کدنویسی (Coding) = مینویسم تا «کار کنه»
- هدفِ کوتاهمدت: «همین حالا اجرا شه، خروجی بده.»
- تمرکز روی سینتکس: کجا پرانتز بذارم، چندتا حلقه بنویسم، چه متغیری تعریف کنم.
- مثال: یه صفحهی HTML میسازی، یه دکمه میذاری، با جاوااسکریپت میگی «وقتی کلیک شد یه آلرت بده». تمام!
- ابزار معمول: ادیتور + گوگل + کپی-پیست سریع.
- نتیجه: معمولاً کد کوتاه، سریع آماده، ولی اگر فردا بخوای یه قابلیت اضافه کنی، یا یه باگ پیدا بشه، ممکنه کلِ فایل رو بههم بریزی.
۲) برنامهنویسی (Programming) = میسازم تا «درست کار کنه، درست نگهداری بشه، درست بزرگ بشه»
- هدفِ میانمدت و بلندمدت: «حل مسئله» درست و حسابی.
- تمرکز روی «طراحی» قبل از نوشتن: تحلیل نیازمندیها، انتخاب الگوریتم مناسب، طراحی ساختار داده، لایهبندی کد، تستپذیری.
- مثال: همون صفحهی بالا رو در نظر بگیر؛ ولی حالا باید:
– لاگین کاربر رو چک کنه،
– با سرور ارتباط ایمن (HTTPS) داشته باشه،
– ارورهاش مدیریت بشن،
– کدت تست واحد داشته باشه،
– اگر فردا ۱۰۰ برابر کاربر اومد، سرور بالا نیاد! - ابزار: دیزاینپترنها، نسخهگذاری (Git)، CI/CD، تست، Code Review، مستندسازی.
- نتیجه: کد خوانا، قابلِ توسعه، کمباگ، ولی زمان اولیهی توسعهاش بیشترِ.
۳) یه شِبهکدِ کوچیک ببین تفاوت رو
فرض کن باید «میانگین اعداد» یه آرایه رو حساب کنیم.
کدنویسِ سریع:
nums = [4, 7, 1, 9]
print(sum(nums)/len(nums))
خب کار کرد؛ تمام. اما اگر آرایه خالی باشه؟ اگر اعضاش رشته باشن؟ اگر تعداد elementها خیلی زیاد باشه و sum نتونه باهاشون کنار بیاد؟ هیچکدومو چک نکردیم.
برنامهنویسِ حسابی:
from typing import List
def average(nums: List[float]) -> float:
"""Return arithmetic mean of nums; raise ValueError on empty input."""
if not nums:
raise ValueError("Input list must not be empty")
return sum(nums) / len(nums)
حالا unit-test هم مینویسی، ورودی غیرمجاز میدی میبینی استثنا پرتاب میشه، بعدش میری سراغ بهینهسازی اگر لازم شد.
۴) یه تستِ کوچیکِ ذهنی
به کدی که تازه نوشتی نگاه کن، بپرس:
۱) اگر فردا یه نفر دیگه (یا خودِ تو) خواست یه قابلیت اضافه کنه، چندتا جا باید دست ببرد؟
۲) اگر دیتا ۱۰۰ برابر شد، بازم همین سرعت رو داره؟
۳) اگر یه خطا اتفاق افتاد، کاربر یه پیامِ «رفرش کن» میبینه یا یه خطای مفید؟
اگر جوابهات «خیلی»، «نه» و «رفرش کن» بود، داری «کدنویسی» میکنی؛ اگر «کم»، «اره» و «پیام مفید» بود، داری «برنامهنویسی» میکنی.
۵) پس چه جوری از کدنویس به برنامهنویس ارتقا پیدا کنیم؟
۱) قبل از نوشتن، ۱۰ دقیقه فکر کن و بکِش روی کاغذ:
ورودی چیه؟ خروجی چیه؟ چه حالتی میتونه خراب بشه؟
۲) ساختار داده مناسب انتخاب کن:
قرار نیست همهچیو بندازی توی یه لیست! گاهی یه دیکشنری یا یه کلاس کوچیک کلی از کدِ اضافی کم میکنه.
۳) الگوریتم رو در حد نیاز بهینه کن:
نه اینکه همیشه سریعترین باشه؛ ولی بدون اگر دیتا بزرگ شد، کجا میخواد قوز بالا قوز بشه.
۴) تست بنویس:
حتی یه تابع ساده رو با دو تا ورودی مرزی چک کن؛ مطمئن باش ۸۰٪ باگها همونجا گیر میافتن.
۵) کدت رو «بویِ بد» نده (Code Smell):
تابع ۲۰۰ خطی؟ متغیری که اسمش x1, x2 شده؟ وقتِ ریفکتورِ.
۶) مستندسازی و گیتهاب:
یه README کوچیک، یه commit منظم؛ همینا باعث میشه بگی «من برنامهنویسم» نه «من کدنویسم».
خلاصهی یکخطی
کدنویس = مینویسم تا بچرخه؛ برنامهنویس = میسازم تا بچرخه، بمونه، بزرگ بشه، بفهمه، نترکه!
پست های مرتبط
27 آبان 1404
27 آبان 1404
27 آبان 1404
27 آبان 1404