What do programmers really do?

Computers are useless. They can only give you answers. – Picasso

Many people (including my mother-in-law) think that computers are becoming so smart that programmers will be no longer needed in the near future. Other people think that programmers are geniuses who constantly solve sophisticated math puzzles in front of their monitors. Even many programmers don’t have clear idea what they do.

In this post I want to provide some explanation to uninformed people what programmers really do:

Programmers are translators of human ideas into the language of computers.

They are a link between two worlds – human and computers. Do you think it is easy to maintain this link?

 

Human World Background

The problem with people is that they’re only human. -  Bill Watterson

Humans are product of biological evolution and have a unique and precious organ for producing ideas for programmers – the brain. The brain is a complex combination of neocortex (unique to humans) and older structures inherited from mammals and reptiles. Older brain structures are mostly responsible for reproduction (sex) and survival (finding food or escaping danger). Neocortex evolved to support these function better, however it started to cause strange side effects – consciousness, thinking and curiosity. Thanks to these effects humans invented civilization and thousands years later computers.

Somebody could believe that after thousands years of development humans should become completely dull, predictable and rational species, but it didn’t happen – their old brain structures, complex psychology and social behavior often make people irrational, unpredictable and deceiving. In addition, humans have poor memory, strong emotions and personal interests. However, programmers don’t have choice of working with more rational species and have to work with human beigns to translate their ideas into the language of computers.

Computer World Background

Part of the inhumanity of the computer is that, once it is competently programmed and working smoothly, it is completely honest. – Isaac Asimov

A computer is the best invention of human civilization. It consist of CPU, motherboard, memory, hard drive, monitor and some other parts. Computers moved our civilization to the new level, filled our life with meaning and entertainment and compensated weaknesses of our brains. There are good chances that computers will become more intelligent than humans. (However, I am a bit concerned if computers need human programmers after it happens.)

Modern computers are completely logical, straightforward and obedient. It is pleasure to work with a computer if you know what it should do and how to instruct it. The only problem is that computers will do exactly what you tell them to do. Therefore, you should have very clear ideas and instructions for a computer to avoid feeling miserable when you see your boss or customer.

Translation Between Humans and Computers

There are three main challenges in translation:

  1. Language ambiguity. Human language is vague, complex and ambiguous – for example: “This program doesn’t provide good user experience”. Culture, background and context affect communication and meaning. On the contrary, any computer language is exact, straightforward and context-free.
  2. Levels of details. Humans communicate often in general terms without many details – for example: “I want this f* program work right”. It allows them to save time and energy, but cause two big problems – misinterpretation and possibility that important details are missing. And a computer requires all details – everything should be spelled out.
  3. Thinking style. Humans often think in terms of needs, outcomes and solutions – for example, “This report should run in 2 seconds instead of 2 hours”. However, computers need algorithms – sequence of steps how to achieve desired outcomes.

In order to write good software, programmers have to overcome these challenges, understand humans and translate their ideas into the computer language.

Skills of a Super Programmer


As we can see a super programmer should have two distinct sets of skills to deal with both worlds.

Understand humans and create solutions:

  1. Communication -ability to establish contact with humans, talk with them without alienating and even heroic attempts to share own opinion.
  2. Meaning - extract useful information from conversations with humans, decode and make sense from it
  3. Logic - clearing, removing ambiguity and controversy from human ideas for uncompromising reality of computers
  4. Creativity - dig, twist and play with human ideas to create good solutions
  5. Design - wrap programming ideas with human friendly interfaces and convenient interactions
  6. Big Picture – know how solutions fit into world of users, business and Universe to make your program useful.

Tell computers what to do and build solutions:

  1. Logic (again) – organize programmer’s thoughts into cohesive software ideas and instructions for computers
  2. Technology - uncovering and understanding the black box of technology (black box for 99% of population)
  3. Programming Languages – learn the beautiful, logical and unambiguous languages for feeding computers with programmer’s ideas
  4. Algorithms - master the most effective ways how a computer can accomplish a task
  5. Modeling  - create abstractions and models for grasping and manipulating ideas in software code
  6. Practices (as Refactoring, Unit Testing, Continuous Integration) – recurrent activities to keep system solid, healthy and possible to change

There is a big difference between a human-oriented and hardcore object / system – oriented programmer.
A programmer who is specialized to work with computers only is a half of the good programmer. Great solutions require skills for computers and human worlds.  Connect both worlds and become a super good programmer!

CD Lamp 2 From Jim Watters

Inspiration

After having my site mentioned on the likes of Gizmodo with “DIY CD Lamp” and Hack a Day with “lamp o’ cds” in June of 2005, I decided I must complete my second CD Lamp.  I have been wanting to create another lamp for quite a while now.  I received over 30,000 hits in about 3 days because of those two sites alone.

 

Materials

I had collected more than enough discs to create a new lamp.  I purchased trouble light with a fluorescent dual tube bulb.  It plugs directly into the wall so no need for external transformer.

 

Original light off Original light on

 

Here is the trouble light both on and off.  Like the last lamp, I also found this one at Canadian Tire, part # 52-5096-8 for about 30 dollars(Cnd).  The reflector at the back of the bulb makes it very bright.

Key points include:

  • On/Off rocker switch
  • 13W twin tube fluorescent bulb
  • 6 foot (1.8 m) cord

 

Original light taken apart

 

My next step was to take the light apart to see what was hidden inside.  It came apart very easily with only a couple of screws.

Just about everything is not needed.

 

Light circuit

 

This is all that is needed.  A very simple circuit.

  • Cord
  • Switch
  • Contacts
  • Holder
  • Coil
  • Bulb

If I was to try to buy these parts separately the hardest thing to find would probably be the coil.

 

Caution!

 

The same caution should also apply to my lamp.

 

Test fit

 

I laid out the parts (coil, holder, and switch) to see how they fit within the confines of the disc circle.  With the coil under the lamp the lamp base will be too tall.

 

Test fit

 

With the coil beside the lamp there is no room to manoeuvre .  By removing a little of the base it will work.

Putting it together

Plywood with circles

 

I used some plywood I already had.  3/8 inch is the thickest I had.  I needed 6 layers of this 3 ply plywood to get enough height for the holder and electronics.

 

Circles of plywood

 

I cut them out a little bigger than the circle, with a jig saw.

 

Base glued together

 

I glued and clamped all the layers together to dry.  I did not add any glue in the center, just about one inch around the outside edge.  I needed to drill out all but one layer (3/8 of inch) of the plywood from the center.  It will be much easier if they are not glued together there, and therefore can be removed one layer at a time.

 

Base finished

 

I drilled out the plywood at the top of the base, which will contain most of the hardware.  Two more holes in the side of the base.  One is for the power cord and one for the switch.  Another hole was drilled for securing of the power cord.  The power cord was secured by two screws to the base to prevent the cord from being accidently pulled out.  I protected the base with at least 7 layers of Varathane with a light sanding in between coats.

 

Test base fit

 

To place the electronics into the base I had to unsolder the power cord and the switch from the coil.  Here is the holder and coil positioned in the base for a “dry fit” before soldering.

 

Back of base

 

I fed the switch and power cord into the base and then soldered it all back together.

 

Drillpress setup jig

 

I setup a jig to cutout a larger hole in the CDs.  I later used a similar jig to drill the 3 holes for the rods.  Setting up and all the drilling took about 3 hours.  The plastic of the CDs melted a bit and left a bit of a ridge on both sides.  I then used a grinding bit and files to clean up the edges.  This took another 2 to 2.5 hours. 
CD with hole

 

There will be plenty of breathing room around the CD when it is finished.  It is possible to see some of the burr that is left behind after first drilling.

 

Stack of cut CDs

 

I need a stack at least 2/3 the height of the bulb.  I might use all the holes I drilled out as spacers on my next project.

 

 

The finished Product

CD lamp off

 

Here it is turned off.  In the end I used 61 CDs.  The CDs are grouped in pairs with the shiny side out.  I used washers between the pairs of CD’S as spacers.  To start the stack of CDs I used a single CD on the base of the unit.  To finish I covered the stack with two pairs (4 CD) on the top without their centers enlarged (untouched).

 

CD lamp off

 

I used the same nuts on top and on bottom as legs.  To change the bulb just remove the nuts from the bottom and slide the base and CDs apart.

 

CD lamp on

 

And finally the finished product and all lit up.

 

CD lamp on

 

Finished and all lit up again but at a different angle.

 

 

What I Would do Different Next Time

I have been doing a little reading on the internet about ballast for fluorescent lights.  The next time I use a fluorescent bulb, I would use a non magnetic ballast.  They turn on quicker, hum less, and use less power.  The switch on this circuit does stop all flow of power unlike most transformers that are still completing a circuit even though the device may be off.

But my next lamp will not be a fluorescent light.  I also want my next lamp to run off the 12v DC of the PC.  It will be either a LED or Cold Cathode.

My first choice is to use one of these Agilight type z-LED lights.  The rod is 14mm, which should fit snuggly over the CD without any enlarging.  The CD hole is 15mm.  If I use the “hole” bits from this project as spacers I wont need to make any holes for rods.  I am not sure how bright they actually are.  If I make one I’ll do a comparison between it and this current lamp.

The problem I see with the Cold Cathode tube or CCFL is that they have a square blocks at the end and the tubes themselves may be a little too wide.  There is even a USB version but it does not produce a bright enough light.

From: http://photocreations.ca/cd_lamp2/index.html

How Do U.S., Indian Developers Really Match Up?

If we were to look past all the stereotypes, perceptions, biases and rhetoric, and dispassionately rate U.S. and Indian programmers, which group would we find to be the more highly skilled?

 

The results of what appears to be the first quantifiable study to address that question have been released by GILD, a social networking and career advancement site for developers worldwide. The key finding: Indian developers have better math and logic skills, and U.S. developers have better Web programming skills. Here are some of the particulars:

 

  • Indian developers outscore U.S. developers on analytical skills like math and logic by 11 percent.
  • U.S. programmers slightly outperform Indian programmers on mainstream programming languages including C (8 percent higher), Java (9 percent higher) and SQL (9 percent higher).
  • U.S. professionals score significantly higher on Web programming languages: 53 percent higher on advanced PHP; 27 percent higher on advanced HTML.
  • U.S. tech professionals are 33 percent better than their Indian counterparts at English communication skills.

 

The study was based on over 1 million examinations taken by nearly 500,000 developers. I spoke on Tuesday with GILD CEO Sheeroy Desai (who, in case you’re wondering, is a U.S. citizen born in Pakistan), and he explained where the data came from:

This is data that we have collected over the course of the past couple of years. These are developers, users on GILD, taking our tests – the tests have all been developed by us. We’ve been developing these tests for a number of years, in different technology fields. … We’ve worked with companies like Oracle, SAP and Sapient to prove that these tests are representative of how people perform on the job.

In GILD’s announcement of the study, Desai stated that “America still holds a strong lead when it comes to Web development, but I suspect the gap will narrow over the next few years.” I asked him what it is that makes him suspect the gap will narrow, and he said that assessment is based on what has happened historically:

Unfortunately we don’t have the benefit of having done a study with the more mainstream programming languages, say, five years ago. But I guarantee you – and this is anecdotal, from my own experience – if we had had access to this data five years ago and done a similar study, we probably would have found that U.S. programmers were quite a distance ahead of Indian programmers on languages like C, Java and SQL. And today that gap has narrowed considerably. Through that experience, I believe that when it comes to newer technologies, five years from now that gap will have narrowed quite a bit as well. At the same time, I think new technologies will develop over that period of time, and I’m pretty sure U.S. programmers will have an edge with those newer technologies as they’re developed. So it’s really looking at what has happened historically, and predicting what I think is going to happen in the future.

That the gap has narrowed, Desai said, is attributable simply to Indian programmers having gained more experience:

More programmers in India over the last few years have been using the more mainstream programming languages like C, C++, Java. As more and more programmers come into the market, they get the opportunity to program in those languages, and get proficient. I still say the biggest advantage the U.S. has over India is that the U.S. has a lot more programmers in an environment where they’re using these newer technologies. If you look at Web technologies, the reason there’s such a big gap is that right now in the U.S., there are so many programmers in Silicon Valley, Boston and other parts of the country who are spending most of their time programming in these newer technologies. Whereas in India, people are still using more traditional technologies. Companies in India say they’re looking for Java programmers. You come to Silicon Valley, companies are looking for [skills in] PHP and Ruby on Rails. So it’s really a matter of how much practice people are getting.

I asked Desai if the findings of the study would indicate that jobs requiring skills in math and logic are best outsourced to India, while jobs requiring skills in Web programming are best kept onshore. He said he wouldn’t make the distinction that way:

There are a lot of perceptions out there — and I really think “perceptions” is the right word – about what programmers and developers in the U.S. are stronger at, and what programmers and developers in India are stronger at. What we are trying to do is really go past some of those perceptions, some of those myths, and look at hard data. We really believe this is the first study done by anyone that is this comprehensive. When we look at this hard data, what we have discovered is when it comes to math and logic skills, Indian developers definitely seem to outperform U.S. developers. When it comes to programming, U.S. developers are better. The fact is, for any given job, you need a mix of those skills. So I would look at this data and say, if you have jobs that require strong analytical skills and you’re looking for more mainstream programmers, you probably can’t go wrong in India. On the other hand, if you’re looking at jobs that require a more creative skill set, and are more Web technology-oriented, you’re probably better off sticking with the U.S.

So it seems that more than anything, the study lent credence to a lot of existing perceptions. Desai said none of the findings really surprised him:

I think it’s fairly consistent with some of the perceptions that are out there. I think it was good to get some real hard data around it. … I don’t think most people will look at these findings and say they’re dramatically surprising. I think all we have really done is quantify the gap in skill sets. And I think that’s a good thing.

From: http://www.itbusinessedge.com/cm/blogs/tennant/how-do-us-indian-developers-really-match-up/?cs=47610