The confusion prevails. According to Joe, I work in Information Technology (IT) sector (and certainly I do). But my job is not IT, it is in Computer Science (CS) field. I work (in team, of course) on development of products which are used by IT professionals. This is kind of similar to difference between Aeronautical Engineer (the one who makes airplanes) & Pilot (and one who makes them fly).
I don't blame Joe for this confusion. After all, I have Bachelors degree in IT and Masters degree in CS.
Here is an excellent discussion on the difference between CS and IT on slashdot.
Slashdot Link
Many on Slashdot think that CS is superset of IT. I concur.
Showing posts with label computer science. Show all posts
Showing posts with label computer science. Show all posts
Sunday, July 15, 2007
Friday, July 13, 2007
Memory Management Techniques
Just last week, I was discussing with my colleague about different memory management techniques and which one should be used (apart from vanilla malloc/free implementations).
Since malloc/free are implemented in user space library, it is beneficial to optimize (or change them entirely) their implementation to take advantage of program behavior & cache locality
IBM developer works has an excellent article on this, particularly comparison table at the end.
Since malloc/free are implemented in user space library, it is beneficial to optimize (or change them entirely) their implementation to take advantage of program behavior & cache locality
IBM developer works has an excellent article on this, particularly comparison table at the end.
Wednesday, May 16, 2007
Software Engineering Methodology
In the beginning was the plan
And then came the assumptions
And the assumptions were without form
And the plan was completely without substance
And the darkness was upon the face of workers
–Excerpt from The Plan, early Internet folklore
And then came the assumptions
And the assumptions were without form
And the plan was completely without substance
And the darkness was upon the face of workers
–Excerpt from The Plan, early Internet folklore
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.
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
I found a good list of articles by C++ experts
- Bjarne Stroustrup
- Scott Meyers
- Steve Dewhurst
- Andrei Alexandrescu
- Douglas Schmidt
- Herb Sutter
- Kevlin Henney
- Matthew Wilson
- Dan Saks
- Robert C. Martin
- Chuck Allison
- Andrew Koenig
- Nathan Myers
- James Coplien
- John Vlissides
Sunday, January 21, 2007
More video lectures online
Here is the link from RPI. High quality video lectures on computer networking
Networking Videos @ RPI
Here is a link of compiler construction course from University of Washington
Compiler Construction @ UW
Another one from programming language course from UW
Programming Language @ UW
You can keep checking PMP website on UW, if they keep updating it with more video lectures
http://pmp.cs.washington.edu/courses.shtml
Networking Videos @ RPI
Here is a link of compiler construction course from University of Washington
Compiler Construction @ UW
Another one from programming language course from UW
Programming Language @ UW
You can keep checking PMP website on UW, if they keep updating it with more video lectures
http://pmp.cs.washington.edu/courses.shtml
Subscribe to:
Posts (Atom)