كيف تصبح مبرمجًا؟

نوفمبر 30, 2010
السلام عليكم ورحمة الله وبركاته
هذا سؤال مهم يطرحه كل من يبدء في طريق البرمجة، وإجابة هذا السؤال تعطى على هيئة نصائح تعطى للأشخاص، فلا تعتمد على مجموعة من النقاط تعمل على تحصيلها ودراستها أو كتب تقرئها أو لغة معينة تتقنها لتصبح مبرمجًا بعد ذلك؛ وإنما تعتمد على مجموعة من المهارات يجب عليك تعلمها وإتقانها، وطريقة تفكير معينة تفكر بها عند كتابة البرمجيات وذلك قبل إطلاق كلمة مبرمج على نفسك. هذه العملية تأخذ وقتًا ليس بسيطًا لتتقنها، إنما يحتاج منك هذا إلى مجهود وصبر يصل لعدة سنوات لتحصل على هذا اللقب.
وكتجربة شخصية أذكر انه في مرة كنت بداخل غرفة الروبي ببرنامج الـ IRC وسئلت هذا السؤال لأحد المتواجدين : ” كيف أصبح مبرمج؟ “، فكان رد أحد الموجودين بأنه قال لي أنه مبرمج منذ 12 عامًا ولكنه لا يستطيع أن يجيبني على هذا السؤال، ولكن ما يستطيع أن يقدمه لي نصيحتان :
1- أكتب الشفرة البرمجية
2- أقرء الشفرة البرمجية
كذلك كانت الإجابة من معظم من راسلتهم من المبرمجين المشهورين، فكلهم كانوا يقولون لي بأن كثرة كتابة الشفرات وقراءة شفرات الغير هي التي ستجعلك مبرمجًا محترفًا.
لغات البرمجة تتشابه في كثير من الأساسيات، وتعلمك للغة الأولى وتعمقك بها هي التي ستأخذ منك وقتًا، أما أي لغة أخرى ستعمل على تعلمها لن تأخذ منك هذا الوقت، ولغات البرمجة مثلها مثل اللغات الحية في كثير من الجوانب، فكل منها له قواعد كتابية خاصة به أو ما يعرف باسم الـ Syntax – أو الـ Grammar في اللغات الحية – الخاص باللغة، فأنت تكتب الجمل الألمانية بطريقة تختلف عن الجمل العربية من حيث التركيب النحوي، وكل منهما يعطي نفس المعنى، نضرب مثالًا لهذا
في العربية أقول :
أنا أحب لعب كرة القدم
أما في الألمانية أقول :
Ich spiele gerne Fußball
الجملتان يعطيان نفس المعنى، ويتشابهان في وجود نفس الاسماء و الأفعال في كل منها، ولكن تركيبة الجملتان بهما إختلاف من حيث ترتيب الأفعال، نطبق هذه القاعدة على لغات البرمجة، هم يختلفوا في شكل كتابة الأوامر والرموز بينهم، ولكن يتشابهان في وجود ما يسمى بالمتغيرات والثوابت والدوال والكلاسات. مثال:
require 'fileutils'

ARGV[0].each do |dir|
  FileUtils.rmtree(dir)
end
import shutil
shutil.rmtree(path)

import os, sys
def DeleteDir(dir):
    for name in os.listdir(dir):
        file = os.path.join(dir, name)
        unless os.path.islink(file) && os.path.isdir(file):
            DeleteDir(file)
        else:
            os.remove(file)
    os.rmdir(dir)
المثال الأول بالروبي والثاني بالبايثون، والإثنان يقومان بنفس المهمة وهي حذف دليل بما يحتويه من ملفات، فنلاحظ تشابه بين سطور الشفرة في الروبي والبايثون من حيث كتابة الأوامر فالسطر الأول في المثالان يعملان على إستدعاء مكتبة برمجية ( المكتبة هي مجموعة من الأوامر موجودة في ملفات يتم إستدعائها لتطوير برمجيات أو القيام بعمل معين ) بها دوال ( الدالة هي مجموعة من الأوامر بداخل البرنامج يتم إستدعائها لتُنفذ دفعة واحدة ) تُستخدم في حذف الأدلة والملفات، في روبي تسمى FileUtils وفي البايثون تسمى shutil كذلك السطر الثاني من سكربت الروبي به دالة تعمل على جمع ما يحتوي الدليل الذي أدخلته من اسماء ثم بعد ذلك نستخدم الدالة rmtree من المكتبة FileUtils والقيام بحذف كل هذه الأسماء، وآلية العمل هي هي تعمل في سكربت البايثون فنحن نقوم بتعريف الدالة DeleteDir والقيام بجلب كل ما يحتويه المسار الذي أدخلته للإسكربت من أسماء وحذفها كلها ومن ثم حذف الدليل بعد ذلك.
نضرب مثال آخر على التشابه بين لغات البرمجة : أنت في بداية تعلمك الإنگليزية مثلًا قد يكون الأمر صعب عليك، ولكن مع مرور الوقت ستصبح اللغة بالنسبة لك سهلة، وإن أردت الإنتقال إلى الفرنسية بعد ذلك، ستجد كثيرًا من الكلمات التي تتشابه بين اللغتان علمًا بأن حوالي 30% من كلمات الإنگليزية ذات أصل فرنسي، كذلك الحال بين العربية و الإسپانية فأنت إن كنت تعلم العربية فسيسهل عليك تعلم الإسپانية؛ نظرًا للتركيب الجملي الذي يتشابه بين الإثنان، كذلك وجود ما يقرب من 6000 الآف كلمة عربية بداخل اللغة الإسپانية.
التشابه أيضًا بين اللغات يمكن تشبيهه بذلك، فهناك دوال تتشابه بين اللغات بينهم البعض، وكلمات محجوزة (الكلمات المحجوزة هي عبارة عن كلمات ثابتة تستخدم في حالات معينة لفعل أمر معين) في اللغات تتشابه فيما بينها، فلغات مثل الروبي والبايثون أخذت عن لغات أخرى مثل الـ Perl والـ Smalltalk والـ Lisp والـ Scheme بعض الطرق لكتابة الأوامر.

بعض النصائح المفيدة :

1- أنت في بداية تعلمك للغة تختار مصدرًا جيدًا يبسط لك اللغة وتتعلم منه أوامر اللغة وكيف تُكتب، وكن حريصًا في البداية على الإلمام بأوامر اللغة العامة ومعرفتها بصورة كاملة حتي يسهل عليك قراءة الشفرات الأخرى للمبرمجين (أنا لا أطلب منك حفظ اسماء الدوال كلها وماذا تفعل ولكن معرفة الكلمات المحجوزة والعبارات الشرطية وكيفية الإعلان عن دوال وما إلى ذلك من أساسيات اللغة).
2- احرص على تعلم لغات متعددة ولا تقتصر على لغة أو أثنتان أو ثلاثة، فلكل لغة نكهة خاصة بها، وتستخدم في بناء تطبيقات ذات طابع معين.
3- قم بعمل بحث عن حلول للمشاكل التي تواجهك، وعندما تجد الحل قم بتخزينه بصيغة تقوم أنت بكتابتها شارحًا فيها لنفسك هذا الحل وأحفظه في ملف خارجي، ومع الوقت ستجد مجموعة كبيرة من الحلول لمشاكل مستقبلية قد تواجهك.
4- اعمل على حفظ الدوال المشهورة التي تستخدم بكثرة بداخل البرامج، فستسهل عليك عملية كتابة البرامج.
5- قم بالإطلاع على مشاريع برمجية بلغات مستعينًا بموقع Github.
الآن نعرض لمجموعة من المقالات المهمة، التي تعطيك النصائح في بداية المشوار البرمجي، وهي مفيدة والأخذ بها سيساعدك بإذن الله.
كيف تصبح هاكر للمبرمج إيريك رايموند، مقالة بها مجموعة من النصائح الجيدة عامة و في الجزء البرمجي، المقالة العربية هي الترجمة للإنجليزية وقد ترجمت في 2005 وتفتقر إلى بعض النقاط الموجودة في المقالة الإنجليزية المحدثة. بعض النقاط الغير موجودة في النسخة العربية والتي من الممكن أن تأخذها بعين الإعتبار :
* من الممكن أن تبدء بالروبي بدلًا من البايثون، فالإثنتان عالميتان وتتوفر بكثرة الكتب والمصادر التي تستطيع بواسطتهما تعلم اللغتان بصورة سهلة.
* العمل في بيئة اللينوكس، ويمكنك البدء بتثبيت توزيعة أوبونتو، وستجد الدعم اللازم لكل مبتدء من البداية في مجتمع لينوكس العربي.
مقالة علم نفسك البرمجة في عشرة أعوام، أيضًا هذه المقالة بها نصائح هامة للمبرمج، وتوجد نسخة مترمجة منها للعربية ولكن وقت كتابة هذه السطور كان رابط النسخة العربية للمقالة لا يعمل.
مقالة TipsForReadingCode أيضًا ممتازة بها نصائح لتسهيل عملية قراءة الشفرة .
كتاب How to be a Programmar هو كتاب حصلت عليه أثناء قرائتي لتدوينات التويتر الخاصة بالأصدقاء الموجودون لدي في القائمة، وجدت حساب الأخ محمد زاهر غيبة به رابط لمدونة بها موضوع يخص ثتبيث الروبي في بيئة الويندوز، فقمت بإلقاء نظرة عليها ووجدت موضوعًا بها يتحدث عن كيف تصبح مبرمج، وهو ملف PDF لشخص يدعى Robert L.Read يعرض فيه ملخص لتجربته مع البرمجة وما هي المهارات التي يجب عليك تعلمها. قم بتحميله من هنـا
كتاب آخر يحمل اسم How to Become a Programmer يعرض فيه الكاتب لمجموعة من النصائح بجانب إخبارك ما هو الطريق الذي تسلكه للحصول على المال من البرمجة. حمله من هنـا
نختم بكتاب كبير هو كتاب How To Program Using Java، كتاب ممتاز أنصح كل فرد في بداية الطريق بقرائته فيه نصائح جميلة، هو ليس مجاني ولكن هناك نسخة PDF منه على الشبكة تستطيع بالبحث الحصول عليها.
في والنهاية أذكرك بأنه كلما بذلت مجهود أكبر كلما أصبحت مبرمج أكثر إحترافًا. وفقك الله

روابـــ(9)ــط

أكتوبر 22, 2010
السلام عليكم ورحمة الله وبركاته
* Programmer 101 : Teach your  self how to code – مقال للمبتدئين في طريق البرمجة للإجابة عن سؤال بأي لغة أبدء ؟
* RubyPulse – تسجيلات ڤيديو لشرح مكتبات روبي
* Read Ruby 1.9 – عمل ضخم ورائع كتوثيق وشرح للروبي في إصدارها 1.9 بطريقة منظمة
* تجربتي مع المصادر المفتوحة
* تعلم أساسيات الروبي – إرشادات لما بعد الأساسيات
* الفرق بين المتغيرات والرموز في روبي – توضيح الفرق بطريقة بسيطة وواضحة
* شرح الرموز في روبي – كإضافة للمقالة السابقة
* شجرة مشروع الروبي
* تحديات روبية للمبتدئين
* دروس لتعلم روبي بسهولة من البداية
* SetCode – فكرة عربية لحفظ الشفرات البرمجية
* ماذا يعتقد البايثونيون في روبي
* Teach me to code – مدونة مميزة لتعليم روبي وريلز وما يتعلق بهم
* Understanding Character Encoding – تعرف على ماهية ترميز الحروف

حل مشكلة الجيمس عند الإنتقال إلى روبي 1.9.2

أكتوبر 19, 2010
السلام عليكم ورحمة الله وبركاته
– في الثامن عشر من أغسطس الماضي، أطلت علينا إصدارة جديدة من روبي تحمل الرقم 1.9.2 بتصليح مجموعة من الأخطاء وإضافة دوال جديدة للإصدارة 1.9.1.
عند إستخدامك للروبي جيمس في جلب أو حذف أو تحديث أي من الجيمس الموجودة لديك مثل :
gem install ferret
فستظهر لك رسالة خطأ تشبه هذه الرسالة :
/usr/local/lib/ruby/site_ruby/1.9.1/rubygems/source_index.rb:68:in `installed_spec_directories': undefined method `path' for Gem:Module (NoMethodError)
from /usr/local/lib/ruby/site_ruby/1.9.1/rubygems/source_index.rb:58:in `from_installed_gems'
from /usr/local/lib/ruby/site_ruby/1.9.1/rubygems.rb:944:in `source_index'
from /usr/local/lib/ruby/site_ruby/1.9.1/rubygems/gem_path_searcher.rb:84:in `init_gemspecs'
from /usr/local/lib/ruby/site_ruby/1.9.1/rubygems/gem_path_searcher.rb:19:in `initialize'
from /usr/local/lib/ruby/site_ruby/1.9.1/rubygems.rb:889:in `new'
from /usr/local/lib/ruby/site_ruby/1.9.1/rubygems.rb:889:in `block in searcher'
from <internal:prelude>:10:in `synchronize'
from /usr/local/lib/ruby/site_ruby/1.9.1/rubygems.rb:888:in `searcher'
from /usr/local/lib/ruby/site_ruby/1.9.1/rubygems.rb:528:in `find_files'
from /usr/local/lib/ruby/site_ruby/1.9.1/rubygems.rb:1132:in `<top (required)>'
from <internal:lib/rubygems/custom_require>:29:in `require'
from <internal:lib/rubygems/custom_require>:29:in `require'
from /usr/local/bin/gem:8:in `<main>'
هذه المشكلة تحدث عندما يقوم الروبي جيمس بإصدارته التي تحمل الرقم 1.3.7 الملحقة باللغة بجلب الجيمس من المجلد site_ruby والذي لم يعد يُستخدم في هذه الإصدارة، وحل هذه المشكلة يتمثل في حذف المجلد site_ruby ليعتمد البرنامج على المسار الجديد الذي يحتوي على الجيمس والذي تستطيع معرفته عن طريق تنفيذ الأمر (بعد حذف المجلد)
gem env
ولحذف المجلد سنقوم بتطبيق الأمر الآتي :
sudo rm -rf /usr/local/lib/ruby/site_ruby
استخدمنا للحذف البرنامج rm لحذف الملفات مع إعطائه المعامل rf- لنتمكن من حذف المجلد بكل ما يحوي من ملفات حتى وإن كانت محمية.
بعد الحذف تستطيع إستخدام الروبي جيمس بصورة طبيعية، ولن تكون بحاجة لتثبيت الجيمس التي كانت موجودة لديك من جديد، فهي موجودة في مكان آخر.
ملحوظة : نلاحظ بعد تثبيتنا للإصدارة 1.9.2 ان مجلد اللغة ما زال يحمل الرقم 1.9.1، والسبب في هذا ان الإصدارة الجديدة في معظمها متوافقة مع الإصدارة 1.9.1 لذلك يتم إضافة الجديد إليها فقط.

العدد العاشر من مجلة مجتمع لينوكس العربي

أكتوبر 4, 2010
السلام عليكم ورحمة الله وبركاته
صدور العدد العاشر من المجلة بمجموعة من المقالات :
* عمل تطبيقات الويب – عكاشة
* شرح مبسط لكيفية تحميل وبدأ لينوكس
* التكامل بين Pure FTP و ClamAv
* مراقبة الخدمات بواسطة Monit
* نصيحة إلى هواة إرسال البريد الإلكتروني
بضع مقالات أخرى. حمل من هنا أو من هنا
ملحوظة : قد تواجه مشاكل في قراءة العدد بسبب تفرق الحروف، ولحل هذه المشكلة قم بتحميل برنامج FoxitReader وإستعرض منه العدد

العدد السادس من مجلة الريلز

أغسطس 31, 2010
السلام عليكم ورحمة الله وبركاته
مجموعة من المقالات تأتي مع هذا العدد :
1- Fake Data – The Secret of Great Testing
2- RVM – The Ruby Version Manager
3- Previous and Next Buttons
4- Scaling Rails
وغيرها من المقالات واللقائات.
حمل من هنا أو هنا

تثبيت مشغل الفلاش في فلوك

أغسطس 29, 2010
السلام عليكم ورحمة الله وبركاته
كل من يستخدم  فلوك في بيئة اللينُكس يواجه مشكلة عدم وجود مشغل فلاش به، مما يسبب مشكلة كبيرة قد يُعرض بسببها المستخدم عن المتصفح في بعض الأحيان، والحل المعتاد الذي يلجأ إليه المستخدمين لحل هذه المشكلة؛ هو جلب مشغل أدوبي للفلاش أدوبي أو إستخدام مشغل گنو Gnash وثبيتهم على الجهاز، ولكن تظل المشكلة قائمة، وهي أن المتصفح يريد الإضافة Plugin التي تسمح له بتشغيل الفلاش.
وكحل لهذه المشكلة سنقوم بالأعتماد على إضافة الفلاش الموجودة في متصفح الفايرفوكس لديك، وسننقلها إلى فلوك وبهذا يعمل الفلاش لديك في المتصفح .
1- قم بفتح نافذة سطر الأوامر -الترمينال- لديك Terminal
2- قم بنسخ الأمر القادم وضعه بداخل النافذة :
sudo cp /usr/lib/firefox/plugins/flashplugin-alternative.so /usr/share/flock/plugins
أنت في الأمر السابق قمت بإستخدام البرنامج (sudo -super user do) لأعطائك صلاحيات المستخدم الجذر أو صلاحيات مدير النظام،
قمت بعد ذلك باستدعاء البرنامج cp لعمل نسخة من الملف المسمى flashplugin-alternative.so الموجود في آخر السطر الذي أمامه، وهذا الملف هو إضافة الفلاش التي سنأخذ منها نسخة لنضيفها إلى فلوك ليعمل الفلاش.
الشطر الأخير من الأمر يختلف بحسب مكان تواجد فلوك لديك على الجهاز، فتصل إلى مكان تواجد فلوك لديك على الجهاز وتعمل نسخ لأمتداد الموجود به البرنامج وتضعه .
في هذه الصورة تجد أنني أضع فلوك في الأمتداد
/home/kareem/flock ومجلد الإضافات Plugins موجود بصورة افتراضية بداخل فولدر البرنامج .
بعد إكتمال نسخ الإضافة بنجاح قم بعمل إعادة تشغيل للمتصفح، وستجد الإضافة تعمل بنجاح بأذن الله .

العدد الخامس من مجلة الريلز

مارس 21, 2010
السلام عليكم ورحمة الله وبركاته
– يأتي العدد الجديد من المجلة بمجموعة من المقالات الجديدة الخاصة بالروبي والريلز ومنها :
* Ruby C Extension Development
* Using the Twitter API With Ruby
* Rails Background Processing
* Full Text Search With Xapian
ولتحميل العدد عبر هذا الرابط او هذا