The Pitfalls of Outsourcing Programmers - Michael Bean

This was in January 2004 , check the link below for the original article , and you can see how the west has lost its edge in technology.

———————————————————————-

Clothing and toys are manufactured overseas. So why not make software there too, where labor is cheaper?

Many U.S. technology companies have outsourced their software development to India. Last year Hewlett-Packard became India’s largest multinational IT employer, with more than 10,000 employees.

The enthusiasm for overseas outsourcing and offshoring, mirrors the enthusiasm for Internet companies in the Nineties. In a recent article, Ravi Chiruvolu, a partner at Charter Venture Capital wrote that “Venture Capitalists decided that because of cheap engineering talent in countries like India it would be more cost effective to outsource software development. If Nike could outsource sneaker manufacturing, we could do the same with code.” Following similar logic, Oracle has announced it will more than double the number of software engineers it employs in India to 6,000.

Although the offshoring trend has resulted in a net transfer of jobs outside of the US, this article isn’t about job losses in the United States. We live in a global economy and people in India deserve jobs as much as people in the United States or anywhere else. It’s worrisome when companies are criticized solely because they have hired people overseas.

Offshoring is a mistake when technology companies confuse operational effectiveness and strategy. Operational effectiveness is about working cheaper or faster. Strategy is about the creation of a long-term competitive advantage, which for technology companies is usually the ability to create innovative software.

Outsourcing programmers works when the software developed isn’t a key part of the pipeline of innovation for products a company actually sells. For example, when website design or back-office software such as payroll or inventory control is outsourced, that can be good because it improves operational effectiveness.

But writing innovative software cannot be done on an assembly line. It requires hard-to-find development and design skills. Farming out development to legions of programmers overseas will not create a differentiation advantage. When a technology company outsources software development, that company loses its capacity to innovate and its competitive advantage.
Why Some Software Companies are Confusing the Box for the Chocolates

Recently, I bought some chocolates as a gift for some friends from a specialty shop. These chocolates are remarkable. Owner Jean-Marc Gorce makes them by-hand and his small shop has been rated as one of the top ten in the United States. In addition to being a chef, Jean-Marc is also an entrepreneur and an innovator.

gold and blue chocolate boxJean-Marc recently started selling his chocolates in gold and blue boxes. I told him I liked the new boxes. He explained that his wife designed the boxes and he found a company in the Philippines that could produce the boxes in the small volume they needed for a good price.

Jean-Marc’s gold and blue boxes are an example of successful outsourcing. Jean-Marc sells chocolates, not boxes. The design and production of chocolates is his core competency. Jean-Marc can outsource box production to improve his operational efficiency without sacrificing his reputation as a maker of superlative chocolates.

While outsourcing boxes improves chocolatier Jean-Marc’s operational effectiveness, he would never consider outsourcing chocolate production because he would lose his core differentiation advantage. Yet, in their enthusiasm for cost savings, several US technology companies have done precisely that– outsourcing their core technology and key strategic differentiator.
Design and Assembly are Different

This isn’t the first time companies have tried to commoditize software development. In the eighties, Japanese companies unsuccessfully attempted to set up software factories to manufacture programs. They discovered that just throwing a lot of programmers together doesn’t create innovative software.

Design is a small part of clothing production, but a big part of software production. Unlike software, it makes sense to outsource the manufacture of clothing and toys. Most of the cost of clothing and toy manufacturing is in the assembly, not the design. Those products can still be designed close to corporate headquarters but assembled elsewhere to keep costs low.

Programming is like design and nearly all of the costs of creating software come from writing the program, not the assembly. The assembly stage for software is really just copying the final program onto a disk and enclosing it with a manual in a box.

Harvard Business School’s Michael Porter, a world expert on strategy and competitive advantage, nicely summarized the problem with competing solely on operational effectiveness:

“If all you’re trying to do is essentially the same thing as your rivals, then it’s unlikely that you’ll be very successful. It’s incredibly arrogant for a company to believe that it can deliver the same sort of product that its rivals do and actually do better for very long. That’s especially true today, when the flow of information and capital is incredibly fast. It’s extremely dangerous to bet on the incompetence of your competitors — and that’s what you’re doing when you’re competing on operational effectiveness.”

Ultimately, the offshoring fad is bad for companies not because of the short-term programmer layoffs but because technology companies will lose their capacity to innovate. Tech companies that outsource their programming talent will ultimately be replaced by competition, and then everyone will be losing their jobs.

http://forio.com/resources/article/the-pitfalls-of-outsourcing-programmers/

Code & Play At The Same Time!

If you always been interested in computer programming , or already a programmer , and also an avid gamer , you would be interested in this news. It a game that let you do programming inside the game itself!

“If you’re bored with games where you run around shooting soldiers or monsters, how about a game where you shoot enemies to win computer code snippets that you can then use to shape the reality around you?

The idea behind Code Hero is twofold; to have a game that’s fun to play while also showing how to write video games. If you’ve been bored silly by ‘educational games’ in the past, Code Hero doesn’t fall into that trap. It’s good to play and good enough to win both the Editor’s Choice and Kid’s Choice at this year’s Bay Area Maker Faire.”

Source

Programming | Loops | If-Else

Introduction On Programming If-Else & Loops

Thats right. I forgot , again , to go through the simple matter of loops and if-else so I am going to have to touch up on these topics before we go any further into classes. This will be short I promise. There isn’t much to say about this. Once you read the codes below , you will be able to understand it without even reading my explanation.

Here is one example of if-else that we have actually looked at before previously ,

public int setGear(int newValue) {
       if ( newValue <= 24 ) {
       gear = newValue;
       return 0;
       }
       else {
        return 1;
        }
}

I think it is self-explanatory and if it is not for you , pls do refer to my previous post where I had gone through the code. There is one thing about if-else that I didn't go over in the last post however and that is about the scope. If the code after "if" is only 1 sentence , there is no need to place the curly braces "{ }" to wrap the code , it is understood that the statement would be executed if the condition is true.

public int setGear(int newValue)
{
       if ( newValue <= 24 )
       gear = newValue;
              else
        return 1;
}

So if the newValue is less than or equal to ( <= ) 24 , the following statement would be executed and if it were not , then the statement following else statement would be executed. Suppose you wish to have more than 1 if and else. Say you would like the code to change depending whether the value is less than 10 or less than 20 or less than 30. In this situation , you could either go through if-else nests or you would use elseif.

            if (Condition_1)
{
    // Statement_1;
}
else if (Condition_2)
{
    // Statement_2;
}
else if (Condition_3)
{
    // Statement_3;
}
else
{
    // Statement_n;
}

As you can see , the only change is that it has multitude of ifs and only one else at the bottom. There are a few more conditional branching methods but they fall along the if-else line of thinking so you shouldn't have much difficult time with them once you get familiar with using if-else.

Loops

Now for something thats much more enjoyable than if-else , that is looping. Basically you want something to be repeated over and over again till a certain condition is met. The simplest is a for loop. Here is how it looks like in Java ,

for (int i = 1; i< 10 ; i++)  {
    System.out.println(i);
}

We defined a variable called "i" which is of an integer type and it has no life outside of the for loop. A temporary variable if you will. Then we assigned it to value of 1 , and next statement separated by ";" says till it is less than 10 , which means until it is 10 before it goes over to loop statement , "i++". Here "++" means increment by 1 , same as i+1 . so 1++ = 2 , 2++ = 3 and so on. And then of course , it will be looped. This is what it looks like if you were to do it manually. Oh and "System.out.println" does the same thing as "System.Console.Writeln".

System.out.println(1);
System.out.println(2);
System.out.println(3);
System.out.println(4);
System.out.println(5);
System.out.println(6);
System.out.println(7);
System.out.println(8);
System.out.println(9);

Copy and paste 9 lines is no big deal but if you were to do the same for thousands of lines manipulating millions of values and you begin to see the power of loops which allows you to do the same in a few lines. Here is a more advanced example of a loop ,

for (int i = 1,  j = 100;  i < 100;  i = i+1, j = j-1)  {
    System.out.println(i + j);
}

So "i" is assigned the value of 1 and increment by 1 and "j" is assigned 100 and decrement by 1. The loop will then stops when "i" reaches 100. Take note that in the end , "i" will reach 100 and the loop will ends but not at when it reaches 99. So it would prints out ,

System.out.println(1 + 100);
System.out.println(2 + 99);
.
.
.
.
.
.
.
.
System.out.println(100 + 1); // then no more because 100 is not less than 100 and condition fails.

Again , there are other types of loops such as while loop and do while loops. But I think for now this will suffice. I hope you has a great time just as I did.

Moving Forward

I think more or less we are done with SQL for now. For 90% of the time using a database, what we been doing would suffice. The process of Creating , Reading , Updating , Deleting information is aka ‘CRUD’ in some programming and database textbooks. What we havn’t covered would be

  • ORDER BY
  • In-Depth details of SQL Functions
  • SQL Programming , eg T-SQL and PL/SQL
  • Database Administration
  • SQL Security

Before we go into those , I would like to take a detour around the whole ‘Relational Database’ and explore the shallow water of programming. Of course , both topics will overlap eventually. For example , Microsoft LINQ or Ruby on Rails require that you understand both the programming side , such as loops and functions as well as database statements such as SELECT. You will eventually have to know both. The higher you go , both are inseparable. In fact , you could say Google is nothing more than a giant database full of information on the websites. How do you extract data out of it? By using programming languages , Google uses Python extensively , if you want to know.

So here is what I plan to do for foreseeable future…

  • General Programming Topics , eg functions , loops ..
  • Dive deeper into 2 or 3 languages
  • See how both programming languages and database can be integrated
  • Have Fun!