22

كمبرمج سوف أنصحك بأنه من الضروري أن تفعل التالي:

  • زد من قوة لغتك الإنقليزية قدر الإمكان؛ فللأسف فإن الإنقليزية هي مصب العلم البشري عامةً و البرمجي خاصةً، و لا يمكنك متابعة الجديد (و أغلب القديم) إلا إذا كانت لغتك الإنقليزية قوية (أو علي الأقل متوسطة مثل حالتي).

  • تعلم لغة برمجة قوية، أنا أفضِّل أن تكون الـjava أو الـ#C بدلاً من الـ++C، لكن إن كنت تفضل الأخيرة أو فُرضَت عليك في التعليم فلا مشكلة، و يمكنك مراجعة مقالي الذي أوضحتُ فيه سبب تفضيلي للـjava علي غيرها:

http://abo-eyas.blogspot.com/2013/06/c-java.html

و من نافلة القول أنه يجب عليك أن تتعلم كيفية استخدام بيئة برمجة متكاملة IDE تدعم لغة البرمجة التي اخترتَها، فلو اخترتَ الـjava فيمكنك أن تتعلم بيئة الـnetbeans، و لو اخترتَ الـ#C فيمكنك أن تتعلم الـvisual studio، و هكذا. و تعلُّم بيئة البرمجة لا يعني مجرد استخدامها لكتابة البرامج فيها و تنفيذها فقط، بل يعني علي الأقل (بالإضافة إلي ما سبق ذكره) كيفية عمل تنقيح debug لبرامجك، و كيفية استغلال الإمكانيات المختلفة للبيئة لتسريع عملية البرمجة قدر الاستطاعة.

  • تعلم هندسة البرمجيات software engineering، و من الأفضل أن تقوم في البداية بالتركيز علي الأمور التي تخدمك عملياً، و أن تؤجل الأمور النظرية المحضة لما بعد. و أعني بالأمور التي تخدمك عملياً العديد من الأشياء، كنماذج التطوير البرمجية (مثل نموذج الشلال waterfull ، و البرمجة الرشيقة agile)، و الأدوات البرمجية التي ستخدمك في زيادة إنتاجيتك، إلخ. أما الأمور النظرية فأعني بها الأمور التي ليست لها علاقة كبيرة بالواقع، أو التي لا تحتاجها أنت بصفة شخصية، مثل طريقة تنظيم عمل الفرق البرمجية و إدارتها، فهذا أمر يمكنك تأجيله لما بعد الوصول لمرحلة جيدة في البرمجة بدون أن تخسر الكثير (بل و ربما لا تحتاجه من الأصل إن عملتَ منفرداً).

  • تعلم هياكل البيانات data structures، و هو من العلوم الغاية في الأهمية بالنسبة لك كمبرمج، و لا يمكن الاستغناء عنه. و يرتبط ارتباطاً وثيقاً بتعلم لغة البرمجة القوية؛ حيث أنه سيجعلك تتعمق أكثر و أكثر في تعلم تلك اللغة و تتقنها أكثر لتكون قادراً علي بناء الهياكل المختلفة.

  • تعلم الخوارزمات algorithms، و هو علمٌ له نفس ما لهياكل البيانات من أهمية. و ستجد شروحات بالعربية له علي موقع kutub.info، مثل ما علي الروابط التالية:

http://kutub.info/library/book/6889

http://kutub.info/library/book/11102

http://kutub.info/library/book/9589

http://kutub.info/library/book/9173

http://kutub.info/library/book/786

http://kutub.info/library/book/2285

http://kutub.info/library/book/837

  • جرب مختلف أنواع أنظمة التشغيل التي يمكنك أن تجربها، لا تكتف بالـwindows أو الـgnu/linux، بل جرب هذه الأنظمة و تعود عليها، ثم ابحث عن الجديد لتجربه إن استطعت.

  • تعلم أساسيات التعامل مع قواعد البيانات databases (يمكنك تأجيل هذا لما بعد التمكن مما ذكرتُه بالأعلي)،

  • تعلم أساسيات إنشاء مواقع الويب (يمكنك تأجيل هذا لما بعد التمكن مما ذكرتُه بالأعلي)

  • النصيحة الغاية في الأهمية هي أن تقرأ بنهم في مختلف المواضيع الحاسوبية، اقرأ كأنك لا تجد شيئاً آخر لتفعله؛ حتي تتكون لديك صورة شاملة تربط بها بين كل ما تعلمتَه و ما لم تتعلمه بعد، و يكون بإمكانك ساعتها أن تعرف العلاقة بين مختلف العلوم الحاسوبية و التداخلات بينهن. و يمكنك أن تبدأ بمتابعة المواقع الإخبارية التقنية العربية، ثم بعدما تقوي لغتك الإنقليزية يمكنك متابعة المواقع الغربية المشهورة.

في النهاية: خذ الأمور بالتدريج و لا تتعجل، و من الأفضل أن تتمرن عملياً علي كل ما تدرسه حتي تجيده:

http://abo-eyas.blogspot.com/2012/06/blog-post_15.html

16

طالب علوم حاسب يختلف عن مبرمج سأتكلم هنا من وجهة نظر علوم الحاسب ك تخصص وعلم.

اهم مهارة تكتسبها هي الcritical thinking تعلم كيف تحلل مشكلة ما.. problem solving هي المفتاح هنا. مالمعطى مالمطلوب وكيف اصل اليه.

بالنسبة للتخصص من أهم الأمور/

١. data structure مثلاً/ متى تستخدم queue ومتى تستخدم stack

٢. Graph theory القراف موجود في كل مكان في الحاسب. الفهم العام لمعنى قراف وكيف تمثلها مهم.

٣. البحث search tree ..

٤. complexity analysis كيف تقيم خوارزميتين مختلفتين ؟

٥. فهم معنى ال function الرياضي. ماأقصدة هنا ان كثير من المفاهيم في علوم الحاسب تمثل على انها فنكشن mapping from one set to another

٦. Think abstract دعك من البرمجة ولغات البرمجة. افهم المعنى الرياضي mathematical model للمسألة. البرمجة سهل تتعلمها لكن الفهم العميق - الذي يتيح لك التطوير الحقيقي- هو عن طريق فهمك للمسائل كمسائل رياضية.

13

1- هيكلية الحاسوب

2 - رياضيات التراكيب المتقطعة ( Discrete Math )

2- الخوارزميات و هياكل البيانات وهي اهم موضوع لطالب علم الحاسوب

3- اساسيات بروتوكولات الشبكات

4- اساسيات خوارزميات الذكاء الصناعي ( اختياري )

5- خوارزميات البرمجة المتوازية ( اختياري )

12

من الأشياء التي يجب معرفتها أن هناك أشياء لا تدرس وانما يتم تعلمها بالاحتراف. من الأشياء المهمة أيضا معرفة أن التكنولجيا تتطور باستمرار و بالتالي يجب عدم التوقف عن التعلم باستمرار. من أهم الأشياء أيضا التمكن من اللغة الانجليزية

بلاضافة الى الاهتمام في الجانب العملي:

  • مرن نفسك على تطبيق الخوارزميات التي تقرئها.

  • حاول عدم نسخ اي كود من الانترنت اثناء حل الواجبات والمسائل وقلل استخدامك للمكتبات البرمجية الخارجية وان كان لابد من استخدامها افهم كيف تعمل من الداخل، تذكر لن يكون سوف يكون لديك وقت اقل في المستقبل لعمل هذه.

  • انت طالب وتمتلك الكثير من وقت الفراغ لن يتوفر معك في المستقبل بعد الجامعة حاول ان تقرا وتستغل وقتك اقرء كتب عملية مثل كتاب the pragmatic programmer وغيره.

  • تعلم كيفية التعامل مع برامج ادارة المصادر مثل git.

  • تعلم المنهجيات Methodologies تطوير البرامج مثل Test Driven Development .

  • حاول ربط ما تتعلمه مع الجانب العملي و لاتجعل دراستك للحاسوب نظرية.

  • اعمل مع فريق وتعلم فن التعامل مع اعضاء الفريق.

في نظري أن ما يحتاجه كل طالب أولاً هو معرفة صفات المجال الذي يعمل به، ثم التخصصات و تداخلاتها و الوظائف المتوقعة بعد التخرج.

حتى إذا ما حدد مجاله فإنه يستطيع الإجتهاد في مجاله قدر الإمكان.

فيما يخص الجزء الأول فقد دونت عنه هنا http://www.oolom.com/?p=1511

أما الجزء الثاني فيعتمد على التخصص الذي تدرسه و هو حال مختلف

برمجة

المواضيع والنقاشات المتعلقة بالبرمجة بشكل عام او لغات البرمجة التي لايوجد لها مجتمعات فرعية.

15.7 ألف متابع