Saturday, 26 November 2016

Microsoft Interview Questions (part 1)

Microsoft Interview Question 

Q1. The interviewer first discussed about my projects ?

 especially what your role in every project , what are you use from technologies to implement ?
 team size in every project  

Q2. Convert a Binary Tree to Doubly Link List (DLL) in place?

 first the order of DLL must be in the same inorder of  binary tree left most in BT see pic 1

                                                                     pic 1
in-order method go to deep left at first from the head 10 then go left treat it as tree head 12 go left a gain then 25 the end leaf no left and right come back take 12 move right take 30 go to parent of 12 has 10 take if and i has leaf right  15 head of sub tree then go to 36 take it and last take 15

secondly using recursive to fill doubly linked list from tree by in-order predecessor that is 
find in-order predecessor of root in left sub-tree (in-order predecessor is rightmost node in left sub-tree). then  
Make in-order predecessor as previous of root and root as next of in-order predecessor. and so on 
this code describe that written in java 

class Node 
    int data;
    Node left, right;
    Node(int item) 
        data = item;
        left = right = null;
class BinaryTree 
    Node root;
    /* This is the core function to convert Tree to list. This function
       follows steps 1 and 2 of the above algorithm */
    Node bintree2listUtil(Node node) 
        // Base case
        if (node == null)
            return node;
        // Convert the left subtree and link to root
        if (node.left != null) 
            // Convert the left subtree
            Node left = bintree2listUtil(node.left);
            // Find inorder predecessor. After this loop, left
            // will point to the inorder predecessor
            for (; left.right != null; left = left.right);
            // Make root as next of the predecessor
            left.right = node;
            // Make predecssor as previous of root
            node.left = left;
        // Convert the right subtree and link to root
        if (node.right != null) 
            // Convert the right subtree
            Node right = bintree2listUtil(node.right);
            // Find inorder successor. After this loop, right
            // will point to the inorder successor
            for (; right.left != null; right = right.left);
            // Make root as previous of successor
            right.left = node;
            // Make successor as next of root
            node.right = right;
        return node;
    // The main function that first calls bintree2listUtil(), then follows
    // step 3 of the above algorithm
    Node bintree2list(Node node) 
        // Base case
        if (node == null)
            return node;
        // Convert to DLL using bintree2listUtil()
        node = bintree2listUtil(node);
        // bintree2listUtil() returns root node of the converted
        // DLL.  We need pointer to the leftmost node which is
        // head of the constructed DLL, so move to the leftmost node
        while (node.left != null)
            node = node.left;
        return node;
    /* Function to print nodes in a given doubly linked list */
    void printList(Node node) 
        while (node != null) 
            System.out.print( + " ");
            node = node.right;
    /* Driver program to test above functions*/
    public static void main(String[] args) 
        BinaryTree tree = new BinaryTree();
        // Let us create the tree shown in above diagram
        tree.root = new Node(10);
        tree.root.left = new Node(12);
        tree.root.right = new Node(15);
        tree.root.left.left = new Node(25);
        tree.root.left.right = new Node(30);
        tree.root.right.left = new Node(36);
        // Convert to DLL
        Node head = tree.bintree2list(tree.root);
        // Print the converted list

Q3. One DBMS query select 2nd max salary from table,
 SELECT MAX(Salary) FROM Employee
  WHERE Salary != (SELECT MAX(Salary) FROM Employee )
 SELECT MAX(Salary) FROM Employee
  WHERE Salary NOT IN (SELECT MAX(Salary) FROM Employee )
Q4. OS questions from deadlock, synchronization, scheduling, diff between process and thread.
Q5. What happens when you type URL in browser and hit enter? Explain in detail.
Q4 and Q5 and others will answered in next part follow to get latest update 
written by 

Friday, 25 November 2016

Crazy Code (Part 2)

Decode String Problem

If a=1, b=2, c=3,….z=26. Given a string, find all possible codes that string
can generate. Give a count as well as print the strings.
For example:
Input: “1123″. You need to general all valid alphabet codes from this string.
what will be ?
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace testCodes
    class Program
        static void Main(string[] args)
          Console.WriteLine("Enter number :");
          string nums  = Console.ReadLine();
          Program prog = new Program();
      public  void ProcessString(string number,string code)
    if (number == null ||
        number.Length == 0)
        if (code != null && code.Length > 0)
    ProcessString(number.Substring(1), code +
        (Convert.ToChar('a' + (number[0] - '0') - 1)).ToString());
    if (number.Length > 1)
        int n = Convert.ToInt32(number.Substring(0, 2));
        if (n <= 26)
            ProcessString(number.Substring(2), code +
                (Convert.ToChar('a' + n - 1)).ToString());

this program work correctly but what you notice on output is it complete or not ?
if any one has question on code or misunderstand  i will answer in his comment
written by

Sunday, 16 October 2016

Crazy Code (Part 1)

This is first Crazy Code about reflect in java this code when run the out put is
love love love love yes it is due to reflection and java string treat the same value of string also same offset in memory so it replace all try to run
import java.lang.reflect.Field;
public class TestCodes {

     * @param args the command line arguments
    public static void main(String[] args) {
        // TODO code application logic here
        String str = "hate";
        String str2 = "hate";
        String str3 ="hate";
        String str4 = "hate";
        System.out.println(str + " " + str2 +" "+str3+" "+str4);
    public static void Change(String original) {
        try {
            Field stringValue = String.class.getDeclaredField("value");
            stringValue.set(original, "love".toCharArray());
            stringValue.setInt(original, 5);
        } catch (Exception ex) {
            // Ignore exceptions

the second code in C++ it print I Love you
void main()
system("color fc");
Every week I will posted some crazy or open source code for developers if there are any misunderstand write comment and i will replay 

Saturday, 15 October 2016

مستقبل البرمجه في مصر *الاسبوع الرابع

كيفيه تطوير المبرمجين لانفسهم

ثم تبدا مرحله جديده مرحله البحث عن عمل بعد التخرج وكيفيه  التعامل مع هذه الفتره الصعبه ان طالت واليائسه ان امتدت فلذلك لابد من استغلالها افضل استغلال وتتعامل معها بعده اشياء ثابته منها لاتضيع وقت في التردد في اي مجال تعمل استثمر في اي شي انت تعرف فيه بمعني لو كنت تفهم اكثر في مجال معين طور نفسك فيه بجميع مشتقاته حتي تذيد فرصتك في العمل في فرص افضل واستخدم مواقع مفتوحه المصدر (Open source)مثل   وغيرها مثل  الخ.. ليس من الضروري ان تفهم كل المكتوب في الكود انما ان تعدل عليه وتجعله كمصدر سابقه اعمال لك (portfolio) ومع متابعه اكثر الوظائف الموجوده في بدايه عملك  من صفحات المواقع الاجتماعيه اومواقع التوظيف او  ولا تبحث عن المال كبدايه وايضا لا تبحث عن الهلكه والاستعباد في العمل حتي تكون سعيدا علي الاقل في اول سنه عمل حاول بقدر الامكان الا تعمل خدمه عملاء وان عملت قلل ساعات عملك واجعلها دائما فتره انتقاليه ان سائت الظروف لذلك حتي توفق في ايجاد فرصه عمل مناسبة .

وتبدا بعد ذلك مرحله العمل حسب اختياراتك الاولي لاتفكر في تغيير التكنولوجي التي اشتغلت بها في بدايه مشوارك المهني وتطوير نفسك في مجال اخر الا بعد ان تتمكن في عملك الاساسي  ويصبح اغلبه روتين بالنسبه لك حتي لا تترك شي ورائك اجتهدت فيه لا تعرف عنه الكثير وايضا حتي لاتشتت نفسك في فتره تقييمك الوظيفي و حاول دائما ان تستغل كل وقت فراغ وراحتك ان كانت ساعه  فنصف ساعه تكفي وان تخرج يوميا بالاسبوع  فثلاثه تكفي وان كان مره في الاسبوع  فمره في الشهر تكفي وهكذا ولكن هذا الوقت يكون في تطوير نفسك  ليس في راحتك ونومك وقرارك وعملك هو ما يدفعك الي العلا اما طريق التطوير فلابد ان تضع عده اشياء منها الا تفوت عليك فرصه تطوير (open source)  منها (php,android,jquery,…)  ثم تتمكن في مجال اخر ولكن لاتفوت ابدا تعلم (open source ) هذه الاولي  اما الثانيه عمل freelancer  حاول ان تبدا فيه من اي اتجاه لانه يطور تفكيرك واحتكاكك اكثر بسوق العمل ومتطلبات العميل لاتدخل مجال اداري قبل ان تبدا في العمل كموظف اولاا حتي تكون ابعد من الفشل اذا فهمت سيكلوجيه الموظفين والتكنولوجيا الموجوده بمجالك ولاتنس تعلم لغه واحده علي الاقل واخذ شهاده دوليه فيها حتي تواكب مجالك بصوره افضل من فديوهات بغير العربيه 

الغريب انه من الصعوبه تطوير نفسك في لحظه يائس فيها وفعليا قليل جدا من الخريجين الجدد من يطور نفسه قبل العمل واقل منهم من يطور نفسه في العمل يرجع لعده اسباب منها قبل العمل ومنها في العمل اما قبل العمل اولها  يكون الخريج في حاله تفاؤل في الغالب وانه تعلم الكثير في فتره الجامعه حتي لو كان عنده فكره ان الدارسة الجامعيه لاتستمد مناهجها من سوق العمل الا قليلاا  وثانيها ان كل فتره تمر بدون عمل تذيدك ياس واحباط وتقليل سقف الاماني وثالثها ان اهدافك كثيره بدون تركيز منها ما يهدف الي شهرة ومنها الي اموال ومنها الي علم وذكاء وقوه عمل  اما في العمل اولها انه لايوجد وقت كافي ثانيها المواصلات والزحام والتعب والارهاق ثالثها انه بيوم الاجازه الراحه شي مقدس مالحل لقد ذكرت قبل ذلك اننا نضع اولاا المشاكل كلها في كل مرحله حتي تتوحد رؤيه المشكله ثم نضع الحلول   .. يتبع 
Written by Technical Manager at highcoder

Tuesday, 4 October 2016

مستقبل البرمجة في مصر *الأسبوع الثالث

كيفيه تطوير المبرمجين لانفسهم وتحديد اقسام عملهم 

تبدا قصه التطوير في الكلية بدون  خبره في التطوير ذاته عن طريق حلول البرامج المطلوبة في المادة لكل محاضره عملي ثم التخرج ويبقي في اي شركه بعد ذلك ويشتغل بدون راحه بدون تفكير الا في حل مشكله معينه لن يفيق الا بعد فوات الاوان او يفيق في مشروع ذو خبره مختلفة في شغله او شركته وقد يرجع لغيبوبته مره اخري و من المؤسف ان التطور والخبره في مجالنا هذا  لمعظم الشباب مجرد سنين تمر ولا يذيد خبره الا سرعه عمل لمجموعه مشاريع عمل بها من قبل بدون تطويرها وايضا سرعه في كتابه الكود وزياده عليها خبره افضل في السيرش لكن بدون قدره علي حل مشكلات عالميه لن اقل غير محلوله انما محلوله اصلاا وايضا غير قادر علي كتابه ما هو افضل في نفس مجاله وطريقه كوده واحده من بدايه كتابته للكود لم تتغير الا طفيفا ربما في التنظيم ربما في التركيب مجرد عامل هندي يجيد سرعه وانجاز مشروع روتيني هل تسائلت بكل التعب الذي انت به وكل الخبره التي تراها في نفسك وكل المشاريع التي عملت بها والمشاريع التي تكبرت بها  ان سوق مصر برمجيا صفر  وان ليس لك كود مستخدم علي مستوي عالمي او حتي محلي دعني ولا تتعبني زوجتي  وقلة ووقتي وولدي وتعبي وفشلي كلها امور واهيه ليس لانها سهله انما لانها طبيعة عاديه في الكل ليس بك وحدك و ان النجاح ليس مجرد انك تاخذ مرتب محترم وفي شركه قواعدها سليمة وليس الفشل ايضا انك في البيت يائس الامور محبط كل شي حتي تشك في دينك ونفسك امسح الماضي وارحم نفسك ودعنا نكمل مجدا سعينا اليه 
 اكثر الامور شيوعا في تطوير المبرمج لنفسه هو كيف يبدا واي لغه برمجيه يتعلمها الحقيقه ان هذا اتفه امر قد تواجه في بدايه وكل بدايه لكن مالذي يجعله صعبا هو واقع الحال الذي نحن فيه بأن المبرمج ينظر الي كسب المال فقط ثم توافر العمل ليس علي اساس شغفه او امل هو اراد ان يفعله العيش بمعني ادق ولكن السعي وراء المال فقط متعب وصاحبه متردد متاخر في قراراته وبالتالي حياته واي مجال ابدعت فيه يخلق لك المال والعمل وتبدا اختياراتك بعده اشياء.
      اولا اقسام الكليه شبكات(IT) او علوم حاسب (CS)او نظم معلومات (IS) او  الانظمه المدمجة ( (Embedded System
قسم الشبكات : هو نظام توصيل الاجهزه او سيرفرات ووضع احسن تركيب لها بوضع عده اعتبارات منها الحمايه منها السرعه منها التحمل(reliability) ولكن لاتوجد كليه  في مصر تعطيك كل مادتها العمليه بمعني ستكمل بعد ذلك فتره كورسات و قد تطيل المده كي تبحث عن عمل فلا يدخل هذا المجال الا اكاديمي في الغالب ولكن اذا اردت الاستمرار فيه لابد ان يكون لديك عده قواعد اولها انك لاتبحث سرعه التوظيف ثانيا ان يكون عند اهلك سيوله اموال لكي تعلمك باقي الكورسات ثالثها انك علي درايه بالمجال قبل الكليه في البحث عن اخر تطوراته  رابعها ان هذا المجال ليس له علاقه بالبرمجة اصلاا  فان توافر بك كل هذه الشروط  ادخل المجال بلا تردد
علوم الحاسب : هو المعني الحقيقي لكلمه مبرمج بمعني انه مجال برمجه في المقام الاول سواء desktop   system, services, database ,web application, وغير ذلك ايضا حتي برمجه الموبايل ولكي تدخل هذا المجال لابد ان تتوافر بك عده اشياء اولها انك تحب البرمجه عموما بغض النظر اي لغه برمجيه تعمل بها ثانيها انك تحب التعرف كل مايخص لغه برمجه معينه وتحب الكتابه بها ثالثها انك محترف في البرمجه ومعروف بين زملائك علي الاقل وليس في نفسك ليس الحب وحده يكفي بمعني ان البرامج المطلوبه في الكليه سابقا  تحلها بنفسك في الغالب وليس تاخذها جميعا من زملائك فكن بهذا المجال بدون تردد ولن تندم فأن كنت غير ذلك لاتدخل هذا المجال الا اكاديمي فقط
نظم المعلومات : المشهور عنه برمجه الويب عموما و وقواعد البيانات (database)  هذا المجال مناسب جدا لعموم المبرمجين لتوافر العمل فيه وقله التفكير فيه من ناحيه حل المشكلات واذا ايضا كنت ضعيف في البرمجة ولكن تحبها فسيكون هذا المجال تطوير لك وربما تتفوق فيه وهذا الغالب ومعظم عمله تركيب اكواد وهذا المجال تدخله اذا توافر فيك عده اشياء ايضا منها اولها انك تحب البرمجه عموما  ثانيها ان يكون مستواك مقبول او فوق المقبول فيها ثالثها انك تحب انجاز العمل السريع وتحب ان تري ناتج عملك في وقت قليل اما ان كنت غير ذلك فلا تدخل هذا المجال
الانظمه المدمجه :  هذا المجال مخصوص لمن يحب الهاردوير والسوفت وير ودقيق اكثر في عمله لا يتطلب ان تكون محترف كثيرا ولكنه مجال مختلف عموما بحيث انك تري ما صممت من برامج علي واقع الطبيعه من ربوت يتحرك او آلات معينه له عمل كثير ولكن ليس في مصر الا قليل واذا اردت ان تدخل هذا المجال له عده اعتبارت لابد ان تتوفر فيك اولها هو ان تاخذ كورسات لكي تذيد فرصتك في الحصول علي عمل ثانيها ان تكون مستعد ان تصرف علي فعل شي اذا تطلب الامر ذلك ثالثها شغفك بهذا المجال
اما اذا كنت بدون هدف او متردد في كل شي وتخاف ان تاخذ قرارا خاطئا فادخل مع اصحابك في نفس قسمهم ربما تحدد بعد ذلك ولان اصحابك غالبا في نفسك تفكيرك وايضا لان اختيارت الكليه ليست مصيريه لهذه الدرجه ويوم تحدد هدفك هو يوم صيامك عن لذاتك ومتطلباتك في سبيل الحصول عليه ويوم تحصل عليه هو يوم فرحك بالعيد ليس بالضروري ان يكون لك هدف في البدايه انما تجعل هدفك هو العمل  لذلك ساكمل الاسبوع القادم كيفه قضاء وقت البطاله حتي تحصل علي عمل وكيفيه تطوير نفسك في العمل لانه هذا هو الاساس وهي ايضا القرارات المصيريه منها يجعلك في كندا واوربا ومنها مايجعلك في مصر ومنها مايجعلك في دول اكثر تخلفا منا .
       يتبع الاسبوع القادم في باقي العوامل في الاختيار
Written by Technical Manager at highcoder

Saturday, 24 September 2016

Face Detection(Java)

Face Detection Is The Most Popular Application  in Many System Like The Observer or photo editor So i Will Introduce this program in java using Open CV technology
1- Download    OpenCV  3.0 Library  
2- Download    NetBeans IDE 

1- Add opencv jar file as in the image after right click on libraries 
(img 1)
2- go To jar File you already download in bin folder e from opencv extracted download folder
3- add Path of .dl file x86 or x64 from opencv downloaded folder as your machine to NetBeans
  like in the image 2

 (img 2)
4- Start The Java Code
import java.awt.Graphics;
import java.awt.Image;
import java.awt.image.BufferedImage;
import javax.imageio.ImageIO;
import javax.swing.ImageIcon;
import javax.swing.JFrame;
import javax.swing.JLabel;
import org.opencv.core.*;
import org.opencv.imgcodecs.Imgcodecs;
import org.opencv.imgproc.Imgproc;
import org.opencv.objdetect.CascadeClassifier;
import org.opencv.videoio.VideoCapture;

public class FaceDetection extends javax.swing.JFrame {
    private DaemonThread myThread = null;
    int count = 0;
     int i1  = 0;
    VideoCapture webSource = null;
    Mat frame = new Mat();
    MatOfByte mem = new MatOfByte();
    CascadeClassifier faceDetector = new CascadeClassifier(FaceDetection.class.getResource("haarcascade_frontalface_alt.xml").getPath().substring(1));
    MatOfRect faceDetections = new MatOfRect();
    class DaemonThread implements Runnable {
        protected volatile boolean runnable = false;
        public void run() {
            synchronized (this) {
                while (runnable) {
                    if (webSource.grab()) {
                        try {
                            Graphics g = jPanel1.getGraphics();
                            faceDetector.detectMultiScale(frame, faceDetections);
                            for (Rect rect : faceDetections.toArray()) {
                           // Highgui.imencode(".bmp", frame, mem);
                            Imgcodecs.imencode(".bmp", frame, mem);
                            Image im = ByteArrayInputStream(mem.toArray()));
                            BufferedImage buff = (BufferedImage) im;
                            if (g.drawImage(buff, 0, 0, getWidth(), getHeight()-150 , 0, 0, buff.getWidth(), buff.getHeight(), null)) {
                                if (runnable == false) {
                                    System.out.println("Paused ..... ");
                        } catch (Exception ex) {
       public  void showResult(Mat img) {
    Imgproc.resize(img, img, new Size(640, 480));
    MatOfByte matOfByte = new MatOfByte();
    Imgcodecs.imencode(".jpg", img, matOfByte);
    byte[] byteArray = matOfByte.toArray();
    BufferedImage bufImage = null;
    try {
        InputStream in = new ByteArrayInputStream(byteArray);
        bufImage =;
        JFrame frame = new JFrame();
        frame.getContentPane().add(new JLabel(new ImageIcon(bufImage)));
    } catch (Exception e) {
     * Creates new form FaceDetection
    public FaceDetection() {
     * This method is called from within the constructor to initialize the form.
     * WARNING: Do NOT modify this code. The content of this method is always
     * regenerated by the Form Editor.
    private void initComponents() {
        jPanel1 = new javax.swing.JPanel();
        jButton1 = new javax.swing.JButton();
        jButton2 = new javax.swing.JButton();
        javax.swing.GroupLayout jPanel1Layout = new javax.swing.GroupLayout(jPanel1);
            .addGap(0, 0, Short.MAX_VALUE)
            .addGap(0, 376, Short.MAX_VALUE)
        jButton1.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
        jButton2.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
        javax.swing.GroupLayout layout = new javax.swing.GroupLayout(getContentPane());
                .addGap(24, 24, 24)
                .addComponent(jPanel1, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
                .addGap(255, 255, 255)
                .addGap(86, 86, 86)
                .addContainerGap(258, Short.MAX_VALUE))
                .addComponent(jPanel1, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
                .addContainerGap(javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE))
    private void jButton2ActionPerformed(java.awt.event.ActionEvent evt) {                                         
        myThread.runnable = false;            // stop thread
        jButton2.setEnabled(false);   // activate start button 
        jButton1.setEnabled(true);     // deactivate stop button
        webSource.release();  // stop caturing fron cam

    private void jButton1ActionPerformed(java.awt.event.ActionEvent evt) {                                         
        webSource = new VideoCapture(0); // video capture from default cam
        myThread = new DaemonThread(); //create object of threat class
        Thread t = new Thread(myThread);
        myThread.runnable = true;
        t.start();                 //start thrad
        jButton1.setEnabled(false);  // deactivate start button
        jButton2.setEnabled(true);  //  activate stop button

     * @param args the command line arguments
    public static void main(String args[]) {
        /* Set the Nimbus look and feel */
        /* If Nimbus (introduced in Java SE 6) is not available, stay with the default look and feel.
         * For details see 
        try {
            for (javax.swing.UIManager.LookAndFeelInfo info : javax.swing.UIManager.getInstalledLookAndFeels()) {
                if ("Nimbus".equals(info.getName())) {
        } catch (ClassNotFoundException ex) {
            java.util.logging.Logger.getLogger(FaceDetection.class.getName()).log(java.util.logging.Level.SEVERE, null, ex);
        } catch (InstantiationException ex) {
            java.util.logging.Logger.getLogger(FaceDetection.class.getName()).log(java.util.logging.Level.SEVERE, null, ex);
        } catch (IllegalAccessException ex) {
            java.util.logging.Logger.getLogger(FaceDetection.class.getName()).log(java.util.logging.Level.SEVERE, null, ex);
        } catch (javax.swing.UnsupportedLookAndFeelException ex) {
            java.util.logging.Logger.getLogger(FaceDetection.class.getName()).log(java.util.logging.Level.SEVERE, null, ex);
        java.awt.EventQueue.invokeLater(new Runnable() {
            public void run() {
                new FaceDetection().setVisible(true);
    private javax.swing.JButton jButton1;
    private javax.swing.JButton jButton2;
    private javax.swing.JPanel jPanel1;

If any problem in running code on your PC write a Comment and i will Replay

Written By Technical Manager at

*مستقبل البرمجة في مصر* الاسبوع الثاني

سياسه عمل الشركات في اختيار الموظفين
تنقسم سياسه إختيار اي موظف في اي شركه علي المدير المالك و المدير الفني وان تواجد موظف الموارد البشريه وكل واحد له وجه نظره التي تخدم عمله من تخيلات موظف الموارد مرورا  للفني الذي يأتيك بأسئله من خبراته التي تعلمها في سنين ليختبرك فيها وانت مازلت بدايه مشوارك لتقليل طموحك في راتبك وآخرا المالك الذي يقترح من الاجر ماهو زهيد جدا في مقابل تعليمك تفاهات وغالبا ما يكون اعتمادك علي نفسك في التعلم باي شركه .
 وهذه السياسه  ترجع لأسباب عده منها خوف الشركة من دفع ملبغ لموظف قد لا يكون بالدرجه المطلوبه ومنها ايضا انه غير مستعد لان يدفع أجرا لتعليم موظف قد يذهب منه في اي لحظه فلذلك هي حلقه مفرغه  من هذا الجانب أما ثانيها رغبه المالك في زياده ربحه عاجلاا وليس اجلاا وثالثها وجود الكثير من الشباب المطحون الذي يرضي باي وضع في هذه المعيشه ولكن هذا  كله ليس مشكلة كبيره فهناك ماهو أسوأ في سياسة الاختيار نبدائها اولاا بموظف (HR) ينقسموا الي ثلاث اقسام اولهم من يسالك في خبراتك ومدي توافقك في العمل لديهم سواء من سياده الفرديه في المشاريع او فريق عمل وغالبا هذا القسم يكون مستمع أكتر من السؤال ويري مدي توافق خبراتك السابقة
 مع متطلبات الشركة في الوظيفه المطلوبة و هذا افضل موظف من وجه نظري  وغالبا ما يوفق في اختيارمن هو أكثر كفائه بين اثنين  اما القسم التاني فهذا الذي يكون عباره عن سلسلة امتحانات من (IQ)  ولغة(English) وامتحان (Technical)  وقبولك في هذا يدخلك في المرحله الاخري من الانترفيو قد تكمل القسم الاول او تكون هناك مقابله اخري (Technical) وهذا لا اعيب عليه كثيرا الا انني اري امتحانات (IQ) لافائده لها كثيرا لان كل مجال عمل له ذكاء مختلف فليس بالضروره من يحل السدوكو في ساعه اقل ذكاء ممن يحلها في دقائق قد يكون الاخير لايفعل في حياته الا ان يلعبها والشطرنج ايضا لعبه ذكاء إلا انها ممارسة  فليس ضروري من هو بطل العالم في الشطرنج ان يشغل اي وظيفة في مجال عمل له فالذكاء اقسام وليس عام فهناك من هو ذكي في تعداد الاحتمالات لحدوث مشكله وهناك من هو ذكي في اختيار الحل الانسب بدون احتمالات الا احتمال المشكله ذاتها وهناك ما هو ذكي في معرفه (BUGS) في سوفت وير وهناك من هو ذكي في حل مسائل رياضيه لشغل وقته  اذا تعسر امامه  (BUGS) واذكي رجل في العالم يعمل اداريا  لايقدر ان يبتكر حل لمشكله فنيا  اما القسم الاخير هو الذي يحاول ان يكون مبدعا او يسال اسئله غريبه نوعا ما مثل 
أين تري نفسك بعد عدة سنين ؟ ماالذي يجعلك سعيدا لاستقبال العمل صباحا ليلة السبت ؟ كيف تعامل مديرك اذا كان لايوفقك في الرائ؟ عدد صيدليات المنصوره وبنها؟ وزن بيتكم كام ؟ ..الخ .
 ليس المشكلة في الأسئله حرفيا انما المشكله في السائل لها فمثلاا لو كانت اجابه السؤال الاول ان اكون مديرا لهذه الشركة اجابه منطقية ولكنها قد تغضب الموظف لعده اسباب منها انه يحب مديره أوأنه لا يري فيك مديرا اذا كنت اصغر منه و غالبا سينظر اليك بتقزز وينسي انه يسال اسئله ليري اجاباتك فقط وربما ايضا تسالي ليس لانه يحب منك اجابه معينه بمعني ان معظمهم غير مستعد لاي اجابه غير متوقعه منك وانت ايضا تخاف ان تجيب اجابه منطقية لا تعجبه رغم ان اي أجابه منطقيه صحيحه  توافق سياسه الشركة .
اما الباقي اجابته متعدده وليس هذه الاسئله ايضا التي تجعل موظف اقوي من اخر حتي لو كانت هناك شركات كبيره عالميه تتبع هذه السياسه ليس ضرويا ان تكون سياسه صحيحه لانه فكر كل بلد مختلف بمعني مستوي الذكاء العام في النمسا يختلف كثيرا عن مصر يختلف عن السودان لان المعرفه والاحتكاك بالعالم المتقدم يذيد الذكاء تلقائيا فرجل نشاء في صحراء قاحله يكتسب خبرة او ذكاء الترحال او اختيار الكهوف ونحت الصخور لاختراع ادواته مثلاا بلطة للدفاع عن نفسه ؛ يختلف عن رجل نشاء في الغابة  يكستب ذكاء وخبره في تسلق الشجر ونحت الخشب لاختراع ادواته وقد تكون ايضا بلطة ولكنها من الخشب فكل يرتفع ذكائه من بيئته غالبا والذكاء الفطري غير قابل لحل مشكلات العالم انما المكتسب.
 وهناك سياسة اخري في اختيار الموظفين في الشركات لم ادرجها لانها لاتستحق لسؤها اولاا لانها غالبا ما تكون اسئله خبرات السنين لشاب خريج فلا يعرفها حتي يقل طموحه في راتبه او موظفين فقط يستقبلون ويحكون مع المتقدم للوظفيه بدون اي نية في توظيفه فقط لشهره الشركه او تدريب (HR)
او اخرون لا يعرفون سوي مطلوب موظف it خبره عشر سنين بدون اي تحديد وانني اري السوفت وير في مصر مازال ناشئا فلا داعي لموظف(HR) الا اذا كانت شركه كبيره و متطلباتها كثيره فالغرب لم يفكر في (HR)  الا بعد سيادتهم في صناعه السوفت وير ونحن ليس لنا ترتيب عالمي حتي نفكر في الشكليات قبل الخبرات 
يتبع.. وسنكمل الاسبوع القادم في كتابة كيفيه تطوير المبرمجين لانفسهم

written by: Technical Manager at

Wednesday, 21 September 2016

مستقبل البرمجة في مصر *الأسبوع الاول*

  بسم الله بداية كل شي اما بعد 

بداية هدفي من كتابة هذا المقال رؤيتي للهاوية في مصر مبكرا في عمل حر مازال في بدايه نشأته بمعني أنه خطأ من الأفراد الفنية والإدارية معا  قبل البدء فإنني عملت في هذا المجال بمعظم تفاصيله لأكثر من ثلاث سنين ولذلك فانني أكتب علي رؤية إستنتاجية ليس أكثر وليس من طريق الهواه وسابدا بدايه بعرض المشكله قبل الحلول حتي تتوحد علي الأقل وجه النظر في  المشكله ذاتها للوصول لافضل حل .

مستقبل البرمجة في مصر يترتب علي عدة عوامل خاصة واخري عامة

اما الخاصة
v      سياسه عمل الشركات في إختيار الموظفين
v      كيفية تطور المبرمجين لانفسهم
v      توفر المادة العلمية لاي تكنولوجيا جديده في هذا المجال
v      كيفيه العمل في الشركات وكيفيه اداره الموارد الفنيه البشريه
v      نوع التخصصات المطلوبه وكيفيه تحسين الشركات للعاملين بها

اما العوامل العامه
v      بيئه مصر عموما في مجال العمل والي اي مدي تؤثر علي مجال البرمجة خصيصا
v      البيئه العلميه و الدراسية الحكومية في تطوير هذا المجال
v      طرق التدريس العامه في الجامعات والمؤسسات الخاصه
v       وعي المصريين بهذا المجال غير العاملين فيه

كل هذه عوامل تفسد مستقبل شباب مصر المبرمجين  فأكثر من 80 في المائه من الخريجين ليس عندهم أدني فكرة عن سوق العمل إلا أنه ان يقع فريسة لمستثمرين بأجور زهيده لأعمال معروفة وأفكار قديمه لا مجال لها للتنافس في سوق عالمي ولكن صعوبه العيش تدفع لأكثر من ذلك فيبدأ الشاب بتقديم سلسلة تنازلات لكل مرحله حياتية بضغط إحتياجاته الأوليه ولا تقف هذه التنازلات إلا عند فوات الأوان أو عند الموت فلذلك بنفس نسبه الخريجين تقريباً هي نسبه العمل الروتيني في شركات تطوير السوفت وير فلذلك نري دائما كل سنة تتخرج دفعه جديده بأقل أو تساوي نفس إمكانيات الدفعه الأقدم فقط مجرد نسخ متكرره لخطأ لن ينصلح في المستقبل القريب ولكن هناك نسبة أمل تكاد ان تكون ضيئله ان الشباب تستخدم مواقع التورنت(torrents) للتعلم او اليوتويب(YouTube) او كورسات من مواقع مثل ليندا(  فلذلك في إغلاق هذه المواقع لمصر سنعود بلا فائده مثل ما كنا او ربما مازلنا .
ولكن ليس كل الشباب حالته ماديا تسمح لذلك بل انها النسبه الكبري وايضا قبل ذلك يحتاج الي لغه لكي يفهم علي الاقل سبعين بالمائه من هذه الكورسات  فهناك عمر يضيع قبل البدء من الصفر وهذه حقيقه مره؛ الا انها موجوده وليس الكل من الشباب له موجه في عمله هذا ربما كنت محظوظا اذا وجدت من يوجهك فيه في بدايه حياتك اما المبرمجين في مصر اكثر من 60 في المائه منهم يتجه الي برمجه الويب لسهولتها بغض النظر عن اللغه المستخدمه  فيها سواء أنصار ميكروسوفت او أنصار غيرهم ولكن الويب عموما بعد خبره معينه يصير به رتابه وملل ومعظمه متاح علي الانترنت أكوادا وأفكارا لأي شخص لدرجه انه قد يعمل  شخص في مجال تركيب اكواد فقط مهما كانت في مجال السوشيال او التوظيف او التجاره او الخدمات المدفوعه اونلاين (online) الخ.
 اما باقي الاربعين في المائه ثلاثين منهم يعمل في صيانه سوفت وير موجوده اصلاا لعملائها  فقط وتحديثات لانظمه كانت في بدايه تطويرها  ممتعه مثل المجال الطبي والمخازن والمحلات والمدارس وحسابات الربح و الخدمات البتروليه وحساب الاجور وتعاملات الموظفين... الخ معظمها انظمه معتمده علي تفاعل  للعميل(interaction) علي البرنامج مما جعل اكثر من تسعين في المائه لمبرمجين مصر لايعرفون شيئا في عملهم عن الالجورزمات(Algorithms) الا مجرد تجربه  وخبره الخطأ (try and error)حتي يعمل البرنامج صحيحا لفتره مدتها شهور علي الاكثر لكسب ثقه العميل بالتالي اخذ امولاا اكثر فلذلك لا تجد ابدا مبرمجين العاب في مصر ذوي خبره أو كفاءة إلا تركيب او تصميم الا في الخارج.
 وغالبا اي نجاح يتطلب كثيرا من العلم والعمل وقليلاا من الحظ لا ننكر ذلك لأنه جزء من واقعنا فتري من هم اقل معرفه وخبره في مواقع أفضل ممن هم اكثر منهم خبره  ولكن ليس هذا بمعني اليأس انما هناك أسباب أشد صفعة منها مثل عدم كتابه الالجوزمات و هاكر رانك ( وغيره  يقول ذلك عندما تكتب برنامج بسيط فتجد نسبه نجاحه لاتتعدي الخمسين في المئه  فلذلك ان كنت تعمل في أنظمه كبيره تجد بعد فتره قد تصل الي شهور من العمل عليها من العميل تجدها تخرج نتائج غير مرغوب  فيها (Bugs)وهذا ضرر سببه  قلة وعي بالاوبجكت أورينتد(OOP) و(Design Patterns)  وهذه مقدمه بسيطه لوضع مؤلم ثم نبدا في النظر الي العوامل المذكوره سلفا سنتناول فقط هذا الاسبوع اول عامل في العوامل الخاصه ألا وهي:
سياسه عمل الشركات في اختيار الموظفين
تنقسم سياسه إختيار اي موظف في اي شركه علي المدير المالك و المدير الفني وان تواجد موظف الموارد البشريه وكل واحد له وجه نظره التي تخدم عمله من تخيلات موظف الموارد مرورا  للفني الذي يأتيك بأسئله من خبراته التي تعلمها في سنين ليختبرك فيها وانت مازلت بدايه مشوارك لتقليل طموحك في راتبك وآخرا المالك الذي يقترح من الاجر ماهو زهيد جدا في مقابل تعليمك تفاهات وغالبا ما يكون اعتمادك علي نفسك في التعلم باي شركه .
 وهذه السياسه  ترجع لأسباب عده منها خوف الشركة من دفع ملبغ لموظف قد لا يكون بالدرجه المطلوبه ومنها ايضا انه غير مستعد لان يدفع أجرا لتعليم موظف قد يذهب منه في اي لحظه فلذلك هي حلقه مفرغه  من هذا الجانب اما ثانيها رغبه المالك في زياده ربحه عاجلاا وليس اجلاا وثالثها وجود الكثير من الشباب المطحون الذي يرضي باي وضع في هذه المعيشه ولكن هذا  كله ليس مشكلة كبيره فهناك ماهو أسوأ  
written by: Technical Manager at

Oracle requires a subscription to use Java SE NOW

May be licenses won’t be available for Java SE 8 or later, but separate support contracts also go away after Microsoft acquire G ithub...