Monday, February 19, 2007

Coder, Programmer or Engineer

I came across an article on digg which discussed about coder Vs programmer.

The article seems to suggest that coders are brainless code churning machine, programmers are thoughtful, intelligent and agile developers. Here is my take on this issue.

The article seems to ignore engineers. I believe engineers are at higher food chain than programmers. The word sfotware engineer is widelys misused. Anybody even remotely writing /doing something on computer considers himself/herself as software engineer.

Software engineer has to have expertise in following four disciplines.

1) Programming Langauge : It can be any language. Be it C, C++, Java, Perl, Python or more fundamental like LISP or Assembly. Programming language gives engineer all the necessary tools to implement ideas into working products. Engineer must be able to take advantage of some of the powerful abstractions provided by programming language.

2) Operating Systems: This does not mean that you know how to use an operating system. It means you understand the design & issues involved in designing an operating system and take them into consideration while writing a software. E.g If you know an OS scheduler is biased towards I/O jobs instead of processor intensive jobs, then you know that your routing protocol software computing shortest path algorithm will suffer. Hence you will set the expectations for the performance of your software.

3) Theoretical Computer Science (Data Structures & algorithms, TOC etc): You can write programs without knowledge of algorithms. But you can write good & efficient programs with knowledge of theoretical computer science. Writing a single threaded program might be the simplest way and anybody can write one. But to select between a finite state machine or multi-threaded master-slave approach requires sound understanding of theory.

4) Domain specific (Computer Networking, Databases, Compilers, AI, Robotics etc): This refers to your field of specialization in computer science. These domains are a layer above the first 3 disciplines.

If you are missing knowledge of any of the 2,3 or 4, then you are not an engineer. But just a programmer. Coder lacks knowledge of more disciplines than programmer.

This is just my opinion. YMMV.


Saturday, February 10, 2007

Articles by C++ gurus

I am big fan of C++ language. Even though I code in C at work, I never miss an article about C++, if I happen to find one on Internet.

I found a good list of articles by C++ experts
Source: C++ Truths Blog

Tuesday, February 06, 2007

Attributes of a programmer

With all the latest attention again on what does and doesn’t make a good programmer, I couldn’t help but put together my own top 10 list.

  1. Being a great problem solver.
  2. Being driven and lazy at the same time.
  3. Ability to understand other people’s code
  4. Having a passion for programming
  5. Loving learning for the sake of learning
  6. Being good at math
  7. Having good communications skills
  8. Strong debating skills
  9. Extreme optimism
  10. Extreme pessimism
Source : Attributes of a great programmer

Here is my addition to the list

11. Mind peaking at certain hours of the day. (Specially at nights for me)
12. Desire to implement in correct way (though sometimes infeasible due to timing constraints, rather than hacking few chunks of code.
13. Ability to not only understand other people's code, but find bugs thereby exposing other programmer's weakness :-) and get a feeling of superiority.
14. Strong tool preferences (Vim Vs Emacs, xterm Vs Konsole Vs gnome-terminal, less Vs more etc)
15. Jack of all languages, but master of only ONE :-).