بدأت الحواسيب الشخصية بالظهور والانتشار في بدايات الثمانينات من القرن الميلادي الماضي، كان الأمر مختلفاً في ذلك الوقت، بعض الحواسيب تأتي كاملة وكل ما عليك فعله هو توصيلها بمقبس الكهرباء وتشغيلها، وبعضها الآخر كان مخصصاً لهواة تجميع الحواسيب، وتجميع الحواسيب في ذلك الوقت كان يتطلب مهارة أكبر من تجميعها اليوم، حتى أن بعضها كان يأتي بدون هيكل خاص، وبعضها يحتاج إلى خبرة في البرمجة لكي تستطيع إنشاء نظام التشغيل الخاص بها، إلا أن ما يعجبني حقاً في الحواسيب القديمة هو أن معظمها يباع مع كتب للبرمجة، وغالباً البرمجة بلغة البيسك، كان مستخدمي الحاسوب في ذلك الوقت أكثر معرفة وخبرة في البرمجة من مستخدمي الحاسوب في هذه الأيام.
لم تكن شبكة الويب قد اخترعت بعد، وشبكة الإنترنت لا يستخدمها إلا القليل من الناس وهم في الغالب علماء ومدرسون وطلاب جامعات ومعاهد أبحاث، وكانت الخدمات المتوفرة هي المجموعات الإخبارية (newsgorups)، البريد الإلكتروني، خدمة نقل الملفات FTP وخدمات أخرى ربما لم يسمع بها الكثير من الناس مثل [Gopher](http://en.wikipedia.org/wiki/Gopher_protocol).
ولهذا كان على مستخدم الحاسوب أن يعتمد على نفسه، فإن كان يريد برنامجاً معيناً فعليه أن يبرمجه بنفسه، أو يبحث عنه بين أصدقائه، وكانت وسائل التخزين في ذلك الوقت بدائية مقارنة مع وسائل التخزين اليوم، كانت صغير الحجم وتكلف الكثير من المال، كان من الصعب نقل البرامج ونسخها على نطاق واسع، بسبب تكلفة وسائط التخزين وعدم وجود شبكة الويب وعدم تمكن معظم الناس من استخدام الإنترنت.
لهذه الأسباب كان الكثير من مستخدمي الحاسوب يتقنون البرمجة، في ذلك الوقت كانت هناك ثقافة منتشرة بين مستخدمي الحاسوب وهي ثقافة الهاكرز، للأسف وسائل الإعلام اليوم تسمي من يخترق الحواسيب ويخرب المواقع هاكرز، لكن التسمية الصحيحة هي كراكرز ([crackers](http://en.wikipedia.org/wiki/Hacker#Hacker:_Intruder_and_criminal))، أما الهاكرز فهم مبرمجون، وفي بداية عصر الحاسوب كان الهاكرز يتبادلون الخبرات في ما بينهم ويطورون البرامج بشكل مشترك ولم يكن هناك شيء اسمه البرامج الحرة لأن البرامج يفترض بها أصلاً أن تكون حرة، هذا أمر بديهي في ذلك الوقت، كانت بعض المجلات تنشر في صفحاتها برامج كثيرة، كل ما على المرء أن ينقل ما في المجلة ويكتبه في الحاسوب ليصبح لديه برنامج يستطيع أن يتعلم منه، يطوره، ويعطيه للآخرين.
باختصار كان ذلك الوقت نعمة بالنسبة للمبرمجين، جاءت الشركات وبدأت البرامج التجارية في الظهور، بدأت الحواسيب تصبح أكثرة سهولة وأكثر انتشاراً، لم تعد تأتي مع كتب للبرمجة، أصبح الحاسوب منتجاً يرغب الناس في شراءه كما يشترون الثلاجات والتلفاز، الكثير منهم ليس له أدنى علاقة بالبرمجة ولا يعرف شيئاً في الحاسوب إلا تشغيله كتابة بعض الأشياء في ملف ما ثم طباعته، وبالطبع اخترعت شبكة الويب ولم يعد عالم الحاسوب كما كان من قبل.
لماذا أذكر كل هذا؟ في اعتقادي أن دراسة تاريخ الحاسوب ولو بشكل عام يساعد المبرمج على فهم الحاسوب بشكل أفضل، صحيح أن ذلك لا يضمن للمبرمج أن يكتب برامج أفضل، لكن على الأقل يعطيه فكرة أوضح عن الحاسوب ويساعده على فهم الكثير من الجوانب في عالم الحواسيب والبرمجة، لذلك أول ما أنصح به هو دراسة تاريخ الحاسوب وهو بالمناسبة موضوع ممتع، على الأقل بالنسبة لي!
اليوم حتى لو لم تأتي الحواسيب مع كتب برمجة، يمكن لأي شخص الوصول إلى آلاف المصادر في شبكة الويب ويمكنه تبادل الخبرات مع أناس من مختلف أنحاء العالم، أصبح العلم متوفراً ويمكن الوصول له بسهولة، كل ما على المرء فعله هو أن يتحرك فعلاً ويتعلم.
### البرمجة ليست لغات البرمجة
يخطأ الكثير من الناس عندما يربطون بين البرمجة ولغات البرمجة، البرمجة هي أساسيات ومبادئ يمكن تطبيقها في أي لغة برمجة، من الخطأ أن يتعلم المرء لغة معينة ثم يقول أنه تعلم البرمجة، أن تتعلم البرمجة يعني أنك تستطيع تعلم أي لغة وأن تبرمج بها بدون أن يتطلب ذلك منك الكثير من الوقت والجهد، لغات البرمجة ما هي إلا أدوات ومن الخطأ الاعتماد على أداة واحدة لفعل كل شيء.
دعونا نشبه البرمجة بقيادة السيارات، لكي تقود السيارة عليك أن تتعلم أساسيات ومبادئ محددة وتتعلم قوانين المرور، وإذا اجتزت الاختبارات وحصلت على رخصة القيادة يمكنك وقتها أن تقود أي سيارة، لا يهم إن كانت غالية الثمن أو رخيصة، لا يهم إن كانت مصنوعة لدى مرسيدس أو كيا، المهم أنها تساعدك على الوصول من النقطة أ إلى النقطة ب، وبالتأكيد المرء يحتاج إلى سيارات مختلفة لأغراض مختلفة، فالسيارة المناسبة للطرق الوعرة ليست كالسيارة العادية المخصصة للسير في الطرق المعبدة.
البرمجة كذلك لا تختلف كثيراً عن عالم السيارات، هناك لغات برمجة مخصصة لأغراض معينة، فمثلاً لغة [PHP](http://www.php.net/) مخصصة لإنشاء المواقع، ويمكن استخدامها لإنشاء تطبيقات عادية، لكن لماذا أستخدمها لهذا الغرض في حين أن هناك لغات أخرى أكثر فعالية؟ المبرمج لا يخشى تعلم لغة جديدة، ومن المفترض أن يتعلم اللغات الجديدة بسرعة لأنه قد اكتسب الأساسيات ولا يحتاج إلى تعلمها من جديد، بعكس الشخص المبتدئ الذي يحتاج إلى تعلم الأساسيات.
لكي تتعلم البرمجة يجب أن تبدأ بتعلم لغة محددة، أي لغة، المهم أن تتعلم أساسيات البرمجة، ثم بعد ذلك خلص نفسك من تبعية الأدوات، أعني بذلك أن تكون مستعداً لتعلم لغات أخرى وتستخدمها متى شئت، لا تضيق على نفسك بلغات محددة، لأن عالم البرمجة يتطور باستمرار، تظهر لغات جديدة وتموت لغات قديمة، وتبقى بعض اللغات حية لوقت طويل.
### اقترب من العتاد
إذا بدأت في تعلم البرمجة ستصل إلى مرحلة تحتاج فيها إلى أن تفهم الحاسوب بشكل أفضل، وأعني بذلك ما يحدث في المعالج والذاكرة والقرص الصلب وكيف تنتقل البيانات بين هذه الأجزاء، وكيف تعمل هذه الأجزاء، ولكي تفهم ذلك بشكل جيد عليك أن تتعلم لغات قريبة من العتاد مثل لغة سي أو لغة التجميع (assembly)، وهي اللغات التي تستخدم لبرمجة الجزء الأساسي من نظام التشغيل وهي النواة، وتستخدم كذلك لكتابة مشغلات الأجهزة (drivers)،
### الواجهة هي البرنامج
تذكر أن الناس الذين سيستخدمون برامجك هم في الغالب لا يهتمون أبداً بالبرمجة وكل ما يريدون هو برنامج سهل الاستخدام ويحقق لهم ما يريدون، هذا يعني أن الناس يتعاملون فقط مع واجهة البرنامج وهي البرنامج بالنسبة لهم، لذلك عليك أن تتعلم كيفية إنشاء واجهات سهلة الاستخدام ومنسقة، وهذا يعني أن تتعلم قابلية الاستخدام (usability) وتقرأ عن هذا الجانب، وبالتأكيد القراءة عن واجهات البرامج وتاريخ واجهات أنظمة التشغيل سيساعدك على إنشاء واجهات سهلة الاستخدام.
وركز كثيراً على البساطة، لأن التعقيد عدو يجب القضاء عليه، التعقيد يكلفنا جميعاً الكثير من المال والوقت وربما الأعصاب، والبساطة لا تعني أبداً أن يكون البرنامج خالياً من الخصائص أو سخيفاً، بل يحوي أهم الخصائص التي تتوقع أن أغلب الناس يريدونها، تذكر جهاز iPod من أبل، هذا الجهاز يحوي خصائص أقل وواجهة أفضل، المنافسون له ركزوا على الخصائص كثيراً ولم تفلح شركة واحدة في منافسة أبل، والآن أبل تستحوذ على معظم سوق مشغلات MP3.
### تعلم XHTML وCSS
عاجلاً أو آجلاً ستنشر بعض الوثائق والمقالات والملفات في موقع ما، قد تقوم بإنشاء موقعك الشخصي، تعلم XHTML وCSS سيساعدك كثيراً على نشر ما تريد في المواقع، وهذه التقنيات ليست صعبة، إن كنت تتعلم البرمجة فبكل تأكيد يمكنك تعلم هذه التقنيات خلال ساعات قليلة.
### درب عضلات دماغك باستمرار
إن توقفت عن البرمجة والقراءة والتدرب سيحدث لك ما يحدث لأي لاعب رياضي يتكاسل عن التدريب، ستنسى ما تعلمته في السابق وقد تحتاج إلى إعادة دراسته لكي تسترجعه مرة أخرى، اقرأ كثيراً واشتري كتب البرمجة واقرأ أيضاً في مجالات أخرى بعيدة عن البرمجة، طبق ما تقرأه وعلمه للآخرين وسترسخ المعلومات في دماغك، أما إن أبقيتها لنفسك ولم تطبقها فلن تستطيع أن تحفظها.
حاول أن تتقن الكتابة، لأنك ستضطر للتعبير عن أفكارك وستدخل في نقاشات كثيرة، ومن الضروري أن تتقن الكتابة لكي تخبر الآخرين عن آراءك وأفكارك، من الضروري أن تنقل ما لديك من خبرات للآخرين سواء عن طريق المقالات أو الكتب.
أخيراً لتكن لديك مشاريع خاصة، إن لم تبرمج أي برنامج فعليك أن تبدأ من الآن في التفكير، حاول أن تأتي ببرنامج يحتاجه الآخرون، لا يجب أن تكون برامجك كبيرة، بل لتكن صغيرة وبسيطة، المهم أن تدرب نفسك باستمرار ولا تتوقف، وإن لم تجد أفكاراً مناسبة انضم إلى مشاريع البرامج الحرة الموجودة فعلاً ودرب نفسك، هناك الآلاف من المشاريع التي تحتاج إلى المزيد من المبرمجين، شارك في مشروع ما وقدم خدمة مفيدة للآخرين وفي نفس الوقت درب عضلاتك البرمجية.
### في الختام
هذا موضوع أحببت أن أضع فيه ملاحظات متفرقة حول البرمجة، تصلني بعض الأسئلة حول هذا الموضوع وأردت أن تكون الإجابة مفصلة بعض الشيء.
البرمجة عالم كبير، ولا أعتبر نفسي مبرمجاً لكنني قرأت الكثير حول هذا الموضوع، للمزيد من المعلومات أرجوا قراءة وزيارة هذه المواقع:
* [موضوع عن الهاكرز في ويكيبيديا](http://en.wikipedia.org/wiki/Hacker)
* [كيف تصبح هاكراً؟](http://www.catb.org/~esr/faqs/hacker-howto.html)
* [موقع المبرمج جول](http://www.joelonsoftware.com/)
* [مقالات Paul Graham](http://www.paulgraham.com/articles.html)