رحلة مبرمج: كيف بنيت منتجاً برمجياً حقيقياً في 6 أشهر من الصفر
في رحلة ملهمة بدأت من الصفر، يشاركنا جوناثان أدلي تجربته الفريدة في تعلم البرمجة وبناء منتج برمجي حقيقي في غضون ستة أشهر فقط. في الحادي والعشرين من مايو عام 2020، خط جوناثان، الذي كان يبلغ من العمر 30 عامًا ويعمل بدوام كامل ولديه عائلة، أول سطر كود له على الإطلاق كجزء من دورة CS50 الشهيرة من جامعة هارفارد، دون أي خبرة سابقة في البرمجة أو الهندسة.

بعد ستة أشهر فقط، أطلق جوناثان تطبيق ويب جاهزًا للإنتاج (joyful.gifts: خدمة آلية لتقديم الهدايا) ليصبح متاحًا للعالم أجمع. في هذا المقال، سيكشف جوناثان عن منهجيته في تعلم البرمجة، وتفاصيل رحلته، ويقدم نصائح غير تقليدية لكل من يسعى لخوض غمار هذا المجال المثير.
كيف تعلمت البرمجة: منهجية مرنة وموجهة نحو البناء
منذ البداية، ارتكزت هذه الرحلة على المرونة كـ “بانٍ” (builder). كان هدفي هو استكشاف أفضل الأدوات المتاحة لحل المشكلات الواقعية. تجدر الإشارة إلى أن هذه النصائح قد لا تنطبق بالكامل إذا كان هدفك الأساسي هو الحصول على وظيفة كمطور برمجيات مبتدئ. إليك كيف اتبعت منهجيتي في التعلم:
التركيز على متعة البناء والإنجاز
لقد ركزت على عملية البناء نفسها، واستمددت المتعة من كل ما أنجزته. إذا شعرت أنني أسرع في استيعاب مجموعة من المواد التعليمية، أدركت أنني أسلك الطريق الخاطئ. أحد الأخطاء الشائعة للمبتدئين هو مشاهدة الدروس التعليمية دون تطبيق ما تعلموه عمليًا. لذلك، على سبيل المثال، بعد تعلم أساسيات HTML/CSS، حاولت بناء تطبيق يوميات أسبوعية. ربما كان هذا هدفًا غير واقعي تمامًا بالنظر إلى أنني لم أكن أعرف سوى بناء جملة HTML/CSS بسيطة في ذلك الوقت. لكنها كانت تجربة تعليمية رائعة ومفيدة للغاية.
تجنب المقارنات مع الآخرين
لم أقارن أبدًا بين ما وصلت إليه أو حزمة التقنيات (tech stack) التي كنت أستخدمها مع أي شخص آخر. إذا كانت التقنية تعمل بشكل جيد، وكانت موثوقة وممتعة في التعامل، فهذا يعني أنني كنت على المسار الصحيح. عندما تكون مبتدئًا وتواجه صعوبات في التعلم، يمكن أن تكون الأدوات والتقنيات الجديدة مصدر تشتيت أكثر من كونها مساعدة. على سبيل المثال، كانت الرغبة في التخلي عن لغتي C و Python لصالح أدوات أحدث وأكثر بريقًا قوية في كثير من الأحيان. في المراحل المبكرة، تعد مبادئ البرمجة أهم بكثير من اللغة أو الإطار (framework) الذي تستخدمه. التزم بما يناسبك، مهما بدا غير شائع.
البحث عن الخبراء والاستفادة من نصائحهم
بذلت الكثير من الجهد في البحث عن الخبراء الحقيقيين، وبمجرد أن وجدتهم، سعيت للحصول على نصائحهم. صناعة تعلم البرمجة ضخمة ومتشعبة؛ يبدو أن هناك درسًا تعليميًا أو إطار عمل جديدًا كل يوم، مع طابور طويل من المتحمسين الذين يرغبون في تعليمك إياه. ابحث عن الخبراء الذين يعملون فعليًا بهذه الأدوات. اسألهم عن المشكلات التي تحلها هذه الأدوات، وقيم ما إذا كنت ستواجه هذه المشكلات أم لا قبل أن تجربها.
الاستثمار في التقنيات الجديدة ذات الصلة باحتياجاتي
تعرفت على التقنيات الجديدة حسب الحاجة، لكنني لم أتعمق فيها إلا إذا كانت تحل مشكلة محددة كنت أواجهها بالفعل. إليك مثال على ذلك: تطبيقات الصفحة الواحدة (Single Page Applications) هي تقنية رائعة، والتقدم في بنائها عبر أطر عمل JavaScript المختلفة مثير للإعجاب. لذا، تعرفت على ما يمكنها فعله، لكنني لم أتعمق فيها أبدًا لأنني لم أواجه بعد مشكلة تتطلب حلها. كمبتدئ، ركز على المشكلات التي تحتاج إلى حلها، وعلى أبسط أداة ضرورية لحلها.
مواجهة التحديات التقنية الصعبة
لم أتهرب من الأشياء “الصعبة” إذا كانت تحل مشكلة. على سبيل المثال، من الصعب فهم Docker بشكل كامل، لكنه حل مشكلة كنت أواجهها. تثبيت وترقية مكتبات وحزم البرامج (software libraries and packages) للمبتدئين أمر معقد. ولا بأس في أن تكافح لفهم كيفية التنقل في قاموس Python (Python dictionary)؛ إنه جزء من العملية. لكن الاستسلام لأن نظام Windows ومكتبة معينة لا يتوافقان بشكل جيد ليس مثاليًا.
الالتزام بالتقنيات المجربة والموثوقة
عند الاختيار، كنت دائمًا أختار التقنيات المجربة والموثوقة على التقنيات الجديدة واللامعة. مع نضوج التقنيات، تصبح أشياء مثل أفضل الممارسات، ونقاط الضعف الأمنية، والقيود واضحة. كمبتدئ، هل تريد إعادة اختراع العجلة لمعرفة ما هو تزوير الطلبات عبر المواقع (Cross-Site Request Forgery - CSRF) وكيفية الحماية منه؟ على الأرجح لا. لذا، عندما تستطيع، التزم بما هو مثبت في البداية، ثم انطلق واستكشف.
رحلتي في البرمجة: الموارد التي اعتمدت عليها
يجب أن يكون هذا القسم بمثابة دليل عام بدلاً من توجيهات محددة خطوة بخطوة. يتطور تطوير البرمجيات بسرعة كبيرة، وتصبح الموارد قديمة. بالإضافة إلى ذلك، هناك مواضيع أصغر تحتاج إلى تعلمها على طول الطريق لإطلاق المنتجات. يكفي درس تعليمي بسيط لهذه المواضيع. تتضمن الأمثلة: GIT، Bootstrap، عمليات التكامل مع الأطراف الثالثة (third party integrations)، النشر (deployment)، ومحررات النصوص (text editors). إليك الموارد التي استخدمتها لتعلم البرمجة:
- C ومقدمة في الخوارزميات عبر
CS50- ما أعجبني فيه: إنه المقدمة المثالية لعلوم الكمبيوتر. لماذا وكيف تقوم أجهزة الكمبيوتر بالأشياء التي نطلبها منها.
- ما ستستفيده منه: ما هي أنواع وهياكل البيانات (
data types and structures)، ما هي الخوارزمية، ما هو ترميزbig O notationولماذا هو مهم. - كيف استخدمته: في تصميم وبناء عمليات قواعد البيانات الفعالة (
efficient database operations) والمنطق التجاري (business logic).
- أساسيات
HTML/CSSعبرfreeCodeCamp- ما أعجبني فيه:
freeCodeCampهي الأداة المثالية للتعرف على البرمجة. تبدأ في البرمجة على الفور وتبني مشاريع مفيدة على طول الطريق. - ما ستستفيده منه:
freeCodeCampهي أفضل طريقة لتعلمHTMLوCSSللمبتدئين. ما زلت أراجع وحداتCSSحتى يومنا هذا، وأتعلم أشياء جديدة في كل مرة. - كيف استخدمته: ساعدني في إنشاء المظهر والإحساس لتطبيق
joyful.gifts.
- ما أعجبني فيه:
JavaScriptعبرeloquentjavascript- ما أعجبني فيه: إذا كنت مرتاحًا مع الخوارزميات وأساسيات علوم الكمبيوتر وتحتاج فقط إلى تعلم بناء الجملة (
syntax) وخصائصJavaScriptالفريدة، فهذا مورد رائع. - ما ستستفيده منه: فهم السبب وراء سلوك
JavaScriptوممارسة بناء الجملة. - كيف استخدمته: يعتمد منطق الدفع في الواجهة الأمامية (
front-end payment logic) لتطبيقjoyful.giftsبشكل كبير علىJavaScript. بالإضافة إلى ذلك، تم تقليل احتكاك النماذج (forms friction) عبرJavaScript.
- ما أعجبني فيه: إذا كنت مرتاحًا مع الخوارزميات وأساسيات علوم الكمبيوتر وتحتاج فقط إلى تعلم بناء الجملة (
Python/FlaskعبرCS50- ما أعجبني فيه:
Pythonهي لغة جميلة حقًا تجعل بناء أي شيء ممكنًا. - ما ستستفيده منه: كيفية استخدام
Pythonلبناء تطبيقات ويب بسيطة عبر إطار عملFlask. - كيف استخدمته:
Pythonهي لغة خلفية (backend language) متعددة الاستخدامات، وهي جوهر تطبيقjoyful.gifts.
- ما أعجبني فيه:
Django— البداية عبر كتاب “Django for beginners“- ما أعجبني فيه: نهج مبسط لـ
Django. بشكل أساسي، نهج خطوة بخطوة لبناء تطبيقاتDjango. - ما ستستفيده منه: ما هو
Django، وكيف تبدأ في استخدامه، وما الذي يمكن بناؤه باستخدامه. - كيف استخدمته:
Djangoهو إطار عمل ويب مستقر وناضج يستخدمPython. مواقع مثلThe OnionوInstagramمبنية عليه، وكذلك تطبيقي الويب.
- ما أعجبني فيه: نهج مبسط لـ
- استخدام
Django+Modern JavaScriptعبرCS50W- ما أعجبني فيه: المشاريع عملية للغاية وقابلة للتطبيق في الحياة الواقعية. تمكنت من بناء تطبيق ويب شبيه بـ
Wikipedia، وعميل بريد إلكتروني (email client)، وموقع مزادات (auction site). - ما ستستفيده منه: كيفية بناء تطبيقات معقدة باستخدام لغات الواجهة الأمامية (
front-end) والخلفية (backend). - كيف استخدمته: تحتاج تطبيقات الويب الكبيرة إلى
JavaScriptلتعمل. ربط منطق الخلفية (backend logic) بسحر الواجهة الأمامية (frontend magic) أمر مهم لمطوري الـfullstack.
- ما أعجبني فيه: المشاريع عملية للغاية وقابلة للتطبيق في الحياة الواقعية. تمكنت من بناء تطبيق ويب شبيه بـ
Dockerعبر “Dive into docker“- ما أعجبني فيه: تصبح الأمور معقدة في البداية مع الغوص العميق في جميع تفاصيل
Docker، لكنها تبسطت في النهاية بدليل خطوة بخطوة. - ما ستستفيده منه: كيفية تحويل تطبيقات الويب الخاصة بك إلى حاويات
DockerواستخدامDockerللحصول على بيئة تطوير سليمة. - كيف استخدمته: كما ذكرت سابقًا، أثناء تعلم البرمجة، ستحتاج باستمرار إلى تنزيل أدوات ومكتبات مختلفة. يبسط
Dockerهذه العملية ويضمن أن برامجك تعمل على أي جهاز كمبيوتر محمول أو خادم.
- ما أعجبني فيه: تصبح الأمور معقدة في البداية مع الغوص العميق في جميع تفاصيل
Django— الممارسات الاحترافية وأفضل الممارسات عبر “Django for professionals” و “Two scoops of Django“- ما أعجبني فيه: إنه دليل رائع لنشر تطبيقات ويب جاهزة للإنتاج.
- ما ستستفيده منه: ما هي أفضل الممارسات التي يجب عليك اتباعها، وكيف تضمن أن تطبيقك قادر على التوسع (
scale). - كيف استخدمته: هناك فجوة كبيرة بين بناء شيء كأداة تعليمية، ونشر تطبيق ويب يستخدمه مستخدمون حقيقيون وتتم فيه معاملات مالية. في الحالة الأخيرة، تعد أفضل الممارسات مهمة جدًا لضمان الأمان وقابلية التوسع، وقد ساعدت هذه الموارد كثيرًا.
نصائح غير تقليدية للمبرمجين الطموحين
إلى جانب الموارد والمنهجيات، هناك بعض النصائح التي قد لا تجدها في كل مكان، ولكنها كانت حاسمة في رحلتي:
- إذا أردت أن تتعلم، فتعلم شيئًا جديدًا تمامًا. أما إذا أردت أن تبني، فابنِ باستخدام ما تعرفه بالفعل وما ثبتت فعاليته.
- هناك مساحة أكبر للتجربة والتعلم عندما تكون أنت الشخص الوحيد الذي سيستخدم هذا البرنامج. الأدوات الشائعة لا تعني دائمًا أنها الأدوات الأكثر فائدة. عند تقييم ما إذا كنت ستتعلم أداة جديدة أم لا، فكر في المشكلات التي تحلها. غالبًا ما لا تكون مشكلاتك كمبتدئ هي نفسها مشكلات الشركات الكبيرة.
- اطلب نصيحة المطورين الأكثر خبرة الذين شهدوا كارثة أو اثنتين.
- تجاهل أفضل الممارسات واستخدام الاختصارات أمر مقبول بينما تتعلم. بل إن إعادة اختراع العجلة (
reinventing the wheel) أمر مشجع، حتى تفهم تمامًا كيف يعمل الشيء. ولكن عندما تبدأ في بناء برامج ليستخدمها العالم، اتبع أفضل الممارسات كلما أمكن ذلك.
- تجاهل أفضل الممارسات واستخدام الاختصارات أمر مقبول بينما تتعلم. بل إن إعادة اختراع العجلة (
- تعلم البرمجة يشبه تعلم القراءة أو الكتابة. يصبح أقوى بكثير إذا كان لديك ما تقوله.
- أثناء تعلمك، راقب المشكلات من حولك وحاول التفكير في كيفية حل هذه المشكلات عن طريق كتابة الكود. سيجعل ذلك العملية أكثر متعة مع نتائج ملموسة.
الخلاصة التقنية
تُظهر رحلة جوناثان أدلي نموذجًا عمليًا وملهمًا لتعلم البرمجة وبناء منتج برمجي حقيقي في وقت قياسي. يكمن جوهر نجاحه في التركيز على البناء العملي، وتجنب التشتت، والبحث عن المعرفة من مصادر موثوقة، وتبني التقنيات المجربة مع عدم الخوف من التحديات. إن منهجه الذي يركز على حل المشكلات الحقيقية بدلاً من مجرد تعلم الأدوات، يقدم درسًا قيمًا لكل مبتدئ. كما أن استخدام أدوات مثل Docker لتبسيط بيئة التطوير، والالتزام بأفضل الممارسات عند الانتقال إلى الإنتاج، يسلط الضوء على أهمية التفكير الشامل في دورة حياة تطوير البرمجيات. هذه التجربة تؤكد أن الشغف والمثابرة، جنبًا إلى جنب مع منهجية تعلم ذكية، هما مفتاح التحول من مبتدئ إلى مطور قادر على إطلاق منتجات ذات قيمة.