1. Chào mừng Khách đã đến với diễn đàn java, nơi hội tụ tất cả những kỹ năng trong lập trình, chia sẻ những kinh nghiệm, bài viết, quý báu. Các bạn chỉ post bài về lập trình trong forum này. Xin Cảm Ơn!
    Dismiss Notice
  2. Trung Tâm Java - Chuyên sâu lĩnh vực đào tạo lập trình viên Java kinh nghiệm thực tế trong công việc. tìm hiểu thêm tại http://trungtamjava.com/
    Dismiss Notice

Software Developer or just a Code-Writer ?

Thảo luận trong 'Tâm sự nghề' bắt đầu bởi Joe, 25/2/17.

  1. Joe

    Joe New Member


    it's provocative to ask this question. But it's certainly justified to raise such a question, isn't it? Since the "democratization" of computer (everyone owns a PC) and of free development tools (e.g. free download of JAVA, C/C++, PYTHON, etc.) everyone can "develop" something. Furthermore: the Internet is also affordable for everyone so that everybody can "show off" his or her "work" on the web...Yes. The web is full of them. Github is, for example, the place where you can collect such "free works." BUT: Is free software good ? Well, not everything that glitters is gold. It could be very ...

    Computer Science (Hardware and Software) is the only science that effects us the most. In the past Computer was exorbitantly expensive, available only in some public educational institution (i.e. university) and only for those who studied. These people were highly educated and smart. And today? Thanks to the "Computer Democratization," everyone can afford a PC, everyone can "work with computer". Not bad at all ! However, the more people "write software", the more "useless software" emerges. It's trash. Yes, trash ! Why ? Well, the answer is complex and could be very offensive. I'm sorry if someone does feel insulted.

    The world poulation is ~7+ billion. Millions of them study Physics or Mathematics. How many physicists are as famous as Stephen Hawking ? Or how many mathematicians are as brillant as Ngo Bao Chau ? Only one Stephen Hawking and only one Ngo Bao Chau. Millions of "software workers"... Millions of "brillant" developers ? So, what now ? The solution is simple: Good education. If "millions" of software workers had an adequate education they would do a better job than they do today. As I mentioned that Computer Science (CS) was for those who studied. Today CS is taught everywhere, and the level is somehow falling. Even some "students" in the 4th year still don't know how to do a division or multiplication of 2 binary numbers. Can you ? Binary operations are the basic knowledge that every Software Developer has to know by heart. Try to solve the following example:
    15 : 5 = 3           // decimal <<< Easy, isn't it ?
    01111 : 0101 = 0011  // binary <<< HOW ?
    From the binary basics to something higher: Object Oriented thinking. OO for short. Software development means abstract thinking. Physics and Mathematics require an ability of abstract thinking that leads to some way or some method to materialize the abtractness. For example: E = mc² is very abstract. The question is how to make this equation visible. The best (and most useful) way or method to materialize and to visualize the power of E = mc² is to build a nuclear powerplant... Similar to that, Software development requires a great deal of abstract thinking. If you are bad in math or physics you should look for a less stressful job other than Software development. It's like repairing a car without knowing anything about screws, bolts and nuts. The following example shows you how to be creative or to be robotic (in C/C++):
    struct time
        int hour;
        int minus;
        int second;
    time SetTime(int gio, int phut, int giay);
    void Output(time tg);
    time operator + (time time1, time time2);
    time operator - (time time1, time time2);
    The "developer" wondered why his codes failed to work. He asked around for the reasons. His problem is his robotic learning. The learning teaches him how to build a "struct" and how to overload the operators. But he failed to master the learned basics: Keywords and reserved words cannot be used unbiasedly. And if he was creative he could see the OO realtionship between objects (struct time <> function time. Click HERE for more.) Similar to that, some JAVA newbies start to learn coding like the bots that just perform what they were taught. Also, lack of creative thinking. Example: Every newbie must learn how to read an input from a console (java.util.Scanner) or from a file (java.io.InputStream). This LINK of Stackoverflow shows how a bunch of advisors jump in...and act as if they were themselves the bots. None of them tells the newbie how to be more creative than being a robot that just codes what it has been taugh. All the newbie wanted was:
    If he was creative he could see how easy to complete the task in 3 simple lines:
    byte[] line = new byte[80];
    int n = System.in.read(line);
    String username = new String(line,0,n-System.getProperty("line.separator").length());
    With Scanner:
    Scanner sc = new Scanner(System.in);
    String name = sc.nextLine();
    At the first glance the piece of codes with scanner looks "small" and "smart", but it contains more redundancy than the previous version. Reasons:
    - byte array of 80 characters versus Instantiation of Scanner Object
    - read() versus nextLine().
    Check the source java.util.Scanner.java (in the devlivered scr.zip of your jdk) for the implementation of nextLine() and you'll see the "hidden redundancy":
        public String nextLine() {
            if (hasNextPattern == linePattern())
                return getCachedResult();
            String result = findWithinHorizon(linePattern, 0);
            if (result == null)
                throw new NoSuchElementException("No line found");
            MatchResult mr = this.match();
            String lineSep = mr.group(1);
            if (lineSep != null)
                result = result.substring(0, result.length() - lineSep.length());
            if (result == null)
                throw new NoSuchElementException();
                return result;
    Software Developer is the one who masters the basics of Computer Science and is creative and capable to materialize something abstract to something real -just like from E = mc² to a nuclear powerplant. The understanding of mathematics and physics, the creativeness of extrapolation of object and the ability to visualize and to materialize an abstractness are the three preconditioned characters for a good Software Developer. If you lack one of them you are simply a mediocre Code-Writer.
    Chỉnh sửa cuối: 25/2/17

Chia sẻ trang này