Thursday, September 2, 2010

Top 10 Programming Languages to Keep You Employed


1 Java

For the enterprise, Java and Microsoft's .NET rule. However, Java has the edge, as it is No. 1 language in terms of number of developers. According to Evans Data, there are more than 9 million Java developers in the world. That means there are tons of Java applications out there that will have to be supported, updated and maintained. Furthermore, Java is the language of the Android mobile operating system. Android provides the tools and APIs necessary to begin developing applications for the Android OS using the Java programming language. Java ranks No. 1 on the TIOBE Programming Community Index for June 2010 (after a brief stint at No. 2, behind C, in May). The need for Java developers to build new Java applications is not about to wane.


2. C#

C# is a multi paradigm programming language encompassing imperative, functional, generic, object-oriented and component-oriented programming disciplines. Microsoft developed C# within its .NET initiative and the language was later approved as a standard by Ecma and ISO. C# also is slated by Microsoft to become the primary development language for Windows Phone 7. Like Java, C# is big in the enterprise. However there are considerably fewer C# developers than there are Java developers. But the importance of C# as part of the Microsoft .NET strategy and its support through the Visual Studio tools suite make C# a formidable contender in the programming language race. C# ranked No. 6 on the most-recent TIOBE Index.



3.C / C++

We know they are not the same language, though C++ builds on C and began as an extension of the C language. Though sometimes viewed as "nichey," C++ is widely used in the software industry. Some of its key application domains include systems software, application software, device drivers, embedded software, high-performance server and client applications, and entertainment software such as video games. C++ has greatly influenced many other popular programming languages, most notably Java. Furthermore, C and C++ ranked No. 2 and 3, respectively, on the most-recent TIOBE Index.



4.JavaScript with CSS and HTML

JavaScript is the language of the Web. It powers all of the popular Web browsers and that says it all.



5.VisualBasic

Like the BASIC programming language, Visual Basic was designed to be easily learned and used by beginner programmers. The language not only allows programmers to create simple GUI applications, but it can also be used to develop complex applications. Programming in VB is a combination of visually arranging components or controls on a form specifying attributes and actions of those components, and writing additional lines of code for more functionality. With ease of use as a selling point, Visual Basic caught on like wildfire. There is simply too much VB code out there to ignore this language in any list of 10 programming languages.



6.PHP

PHP is very popular for corporate applications and for Web design. If you want to be a freelancer it's a good language to know. PHP was designed as a general-purpose scripting language that was originally designed for Web development to produce dynamic Web pages.


7.Objective-C

If you want to make a lot of money, but probably also work on very intense high-pressure projects where risk is often involved—as in a lot can go wrong—learn Objective-C. Objective-C borrows from Smalltalk and the C language, and it influenced the creation of Java. Objective-C is used primarily on Apple's Mac OS X and iOS. With the wild popularity of Apple's iPhone, iPod Touch and iPad, there are simply not enough Objective-C developers out there to meet the needs of users hungry for more apps for these devices. Objective-C ranked No. 9 on the most-recent TIOBE survey, but that is up from being No. 45 in the survey in June of 2009.


8.Perl

Many say Perl is the new COBOL. Perl is also viewed as "the duct tape of the Internet" and is used to integrate databases and other systems together. While demand for the dynamic or scripting languages such as Perl, Python, PHP and Ruby lags behind that of Java and more mainstream languages, the popularity of these languages is growing and there is a need for programmers in each of those communities. However, according to Indeed.com, the demand for Perl programmers is tracking higher than that for PHP, Python and Ruby developers, in that order



9.Python

Want to work on the leading edge and build applications for the cloud? Dynamic languages, especially Python, are being used to create Web/cloud applications on frameworks such as Django. Google App Engine is built with Python and originally only supported Python. The advantage of Perl and Python over PHP among the dynamic languages is that while PHP is a Web-only, server-side language, Perl and Python are both general purpose languages with usage in multiple industries, from aerospace and defense to sciences and to financial to hi-tech.



10.Ruby

Ruby is a language of careful balance. Its creator, Yukihiro "Matz" Matsumoto blended parts of his favorite languages (Perl, Smalltalk, Eiffel, Ada and Lisp) to form a new language that balanced functional programming with imperative programming. The popular Ruby on Rails framework has helped to promote the use of Ruby. Since its public release in 1995, Ruby has drawn devoted coders worldwide. In 2006, Ruby achieved mass acceptance. Active user groups have formed in the world's major cities and Ruby-related conferences are filled to capacity. Ruby is used for building Web apps, simulations, 3D modeling, business apps, robotics, networking, telephony and system administration systems among other uses. Companies such as Engine Yard, Heroku and New Relic provide Ruby with cloud hosting and developer tools support. And demand for Ruby developers is strong. As Yehuda Katz, a core Ruby on Rails contributor and an architect at Engine Yard said at RailsConf 2010: "I don't know any Ruby developers who are unemployed.

HungryMinds
Hunger Of Knowledge

Wednesday, March 10, 2010

How to be a good programmer

This article has been cross posted from my personal blog : http://www.itsallpartoftheplan.wordpress.com



At the very onset, let me make it clear that I DO NOT consider myself a good programmer. I rate my coding skills as average and I am still learning and have a long way to go before I am even slightly pleased with my programming skills. Yes I am better than quite a few people when it comes to programming, but thats merely because they are lazy and like to sit on idly all day and never bother about programming. Their horrible skills make my less horrible skills look marvellous. I have performed abysmally in ICPC and have never done well in any coding contest worth mentioning (I DO NOT consider college level contests worth mentioning). I havent succeeded yet in Google Summer of Code and my Imagine Cup moderate success (and glorious failure) isn't much to write home about.



So most of the tips I will mention below are lessons learnt from failed endeavours, they are what I have wanted to be and I am not. So lets dive in.



1.Decide why you want to become a good programmer: Is it because you want a job, preferably in a high paying software firm? Great. Then you are set to reach NOWHERE. All good programmers I know are good because they loved what they did. Develop interest in programming. See, programming is the only branch in engineering where you can straightway apply what you learn. Your dad may have a car but he certainly wont allow you to tweak the V2 or swap it for a v6 just to see what happens. But with computers you can do whatever you want. You want to simulate a virus? Cool. Install a virtual OS and run it. Then, when you are done, remove the virtual hard disk. If you are good at what you do, you will get paid and surely get that dream job. Yes, even I want to work in a big software company. But thats not because of the fat paycheck. Its because of the work they do. Because of the exposure I will have. Have you ever bothered to find out what all these companies do and the enabling technologies behind their products or the kind of R&D they do? Jobs will come. Dont make yourself a sucker for one. Sachin is not a great cricketer today because he decided to play cricket to earn money and get dozens of endoresements.



2. Programming languages: Very often people equate good coding skills with number of programming langauges known. Thats just damn untrue. While knowing a lot of programming language is good and sometimes, even, essential; it is more important that you know one or two lanugages very well. I 'know' and have used more than a dozen programming languages and yet C and Java are the ones I am truly comfortable at. Thats sad of course. I really wanted to be good at Assembly and Lisp as well. Never got the time or chance to develop those skills. To be good at a language takes years (at least 2 years). Being good at a language means, you understand where it is best used and where using that language makes no damn sense. On the other hand, knowing a language takes anywhere from 3 days to a week. If you are a beginner, learn C first. Don't buy Yashawant Kanetkar. Buy the book "The C Programming Language" by Brian W Kernighan and Dennis M Ritchie (If you don't know who they are, do this 1. Slap yourself 2. Google their names). This book is not the easiest but is the best. Its a small book but it is the most powerful. Generations of programmers have been brought up on it. And if you think this book is tough for you, please do not harbour any misplaced desires of being a good programmer and do not waste your time by reading this post further. Programming is an art (not a science. Yes you read it correctly), and like any art it requires painstaking effort.



Some people suggest Python as the first language to be learnt. Python is certainly a good language and is easy too. But you will have to rely mostly on the internet for help as not many around you would know Python. Also C has the broadest usage among all programming languages. Also please DO NOT use Turbo C. Its so damn outdated. Use GCC. If you are in Windows download Dev C++. It has GCC



Read this (small) essay by Peter Norvig Teach yourself programming in 10 years . Again, do a Google [ ]search and find out who Peter Norvig is.



3. Algorithms: Any good programmer has a good understanding of algorithms. Its not necessary that you know each algo by heart (in fact good programmers never learn things by rote) but you must understand when to use what. Algos will broaden your understanding and give you new ways to tackle problems. Another important thing is Data Structures. Its more important than algo. Once you have chosen (or developed) the correct data structure, the algorithm becomes self evident. For algo, read the book "Introduction to Algorithm" by Thomas H Cormen et al. You may also refer Andy Tanenbaum's "Data Structures in C and C++". Also if you have desires to participate in coding contests (the respectable ones), "The Art of Programming Vol I to V" by Donald E Knuth are mandatory. Also may be "Concrete Mathematics" by Donald Knuth. Again reading does not mean remembering everything. Just try and understand whats written.



4. Coding contests: Coding contests are good for developing your algorithmic skills and they make you think fast. Its a good idea to participate in ACM ICPC or Topcoder.com. Then there are coding contests (like Sun's Code for Freedom, Google's Summer of Code, Microsoft's Imagine Cup) where you develop a complete software. Such contests are spread over many months. Both require different sort of skills. You may be good in one and bad in another and yet you could be a good programmer. Contests like ICPC require lot of practice, fast thinking and you are expected to keep algos at the back of your mind. CFF, GSoC, on the other hand, requires creativity and focus spread over a long period of time. You dont have to come up with solutions too fast and you dont have to mug up algos. ICPC is like T10 while CFF,GSoc and Imagine Cup are like Test Matches. I would suggest you to participate in both types and then decide if you want to focus on either or both.



5. Participating in FOSS projects: You MUST participate in some free software projects. There are just too many. I am working on SCALASCA right now and then I will move on to Sun Grid Engine and Sun xVM Hypervisor and contribute code there. You learn a lot from these. You get to see a lot of code and learn the best practices. And did I mention, it looks good on your CV too. Most people catch cold feet when they go through some of the prerequities of such projects. Take Thunderbird for example. You would need to know a lot of C/C++ and Javascript (for developing modules). Now don't wait till the day you are an expert in these languages before contributing. Programming is an art, don't waste time sharpening your pencil when you should be drawing. You can ask me for directions.



6. Design Patterns: Any art is learnt by emulating. And therefore, you must emulate the best. Design Patterns are tried and tested architectural (of the software kind) solutions to some commonly encountered software design issues. And therefore, a basic knowledge of some common design patters in needed if you are planning to develop something that is even moderately complex. I suggest "Head First Design Patterns" from Oreilly as the first step.



7. Learning by emulation: Emulate the best. And this is possible by reading books written by the best and/or going through code from some of the best free software projects. I would urge anyone serious about programming to read the book "The Art of Unix Programming" by Eric S Raymond (dont forget to first slap yourself for not knowing who Eric Raymond is and then googling his name). You are not a programmer if you have not read that book. Period.



Now let me address a few common grouses



a. I dont find any interest in computers and want to do an MBA:Mainly a statement often repeated by Second Year(sophomore) students. Thats really your problem. I did not ask you to take Computers or even to join Engineering. You did not know, or bothered to find out, what you were getting into when you took up this branch of engineering and I am pretty sure you have NOT bothered to find out what awaits you in a MBA course either. I am also quite sure that 2 years after an MBA (if not earlier) you will also say pretty much the same thing about your job. Well what can I say. All the best blogs.sun.com/images/smileys/smile.gif" class="smiley" alt=":)" title=":)" />



b. I dont like reading the books (or any books for that matter) that you mentioned above: Well this is not yet the world of Matrix where I can just feed in programming skills to your brain. Dont force yourself to read them. You can't . Do it only if you want to. And if you don't, please forget about being a good programmer. May be its time for you to use the excuse mentioned above (point a).



c. Give me one programming language that does all: There is none. Each has a different purpose. And thats how things are gonna remain buddy.



d. I want to a 'real' project: Thats great. You can do two things:1. Start one of your own 2. Join a FOSS project. But most people are not happy with this. They expect me to 'give' them a project, one thats easy (read, should not involve anything other than C and the only files you need to include should be stdio.h, conio.h (yes people here still use Turbo C) and may be string.h and math.h) and I should tell them what to learn. When people say this,they expect to go on a Autopilot ride.



e. I will learn X programming language by this sem/year/decade :There is no way you can sit with a book and learn a language. You need to do some real work with it, develop some real software and not just do those exercises in the book (that is necessary of course but not sufficient). Most of the languages I have learnt are because I was forced to do so as part of some project. Just pick up the basics in a day or two and then apply it to a real life project. Need ideas? Come to me.



Finally as Larry Wall says in Programming Perl : "We will encourage you to develop the three great virtues of a programmer: laziness, impatience, and hubris."



Laziness:So that you go to great effort to reduce overall energy expenditure. It makes you write labor-saving programs that other people will find useful, and document what you wrote so you don't have to answer so many questions about it. Hence, the first great virtue of a programmer



Impatience: The anger you feel when the computer is being lazy. This makes you write programs that don't just react to your needs, but actually anticipate them. Or at least pretend to. Hence, the second great virtue of a programmer



Hubris: Excessive pride, the sort of thing Zeus zaps you for. Also the quality that makes you write (and maintain) programs that other people won't want to say bad things about. Hence, the third great virtue of a programmer.



So get set on your way to become a great programmer, the likes of Richard Stallman, Rithcie, Brian, Raymond, Torvalds. All the best.

Friday, August 21, 2009

The Words First Computer Programmer Ada Byron



Ada Byron died one hundred and fifty years before the dawn of the computer revolution, but the theoretical work of this eccentric, dark-haired noblewoman would lay the foundations for the world's first computer program.

Byron was born in 1816 to the English poet George Gordon Noel Byron (Lord Byron) and Anna Isabella Milbanke Byron. Her parents separated when she was still an infant, and Lady Byron saw to it that her daughter's education would follow the path of her own interests. Ada studied math and the sciences to the exclusion of her father's bailiwick, literature and poetry. The young girl showed an immediate passion for mathematics and eventually was tutored by Mary Somerville--the first female member of the Royal Astronomical Society.

At age 18, while attending a dinner party at Mary Somerville's house, Ada met the highly respected professor of mathematics, Charles Babbage. Ada was profoundly drawn to Babbage's ideas and he himself was impressed by the young woman's intelligence. Later, Ada wrote to Babbage expressing her interest in working with him on his then-current pursuit: the Analytical Engine.

Babbage's diagrams and plans, up to this point, had been incapable of communicating the true genius of the engine. Into this interpretive void stepped Ada Byron. This machine, which at that time only existed only in theory, was to operate on the punch card principle. Byron immediately saw how these cards could be re-used to access and compute data.

Babbage asked Byron to translate and interpret his ideas for the Engine. In particular, Babbage agreed to Byron's request to add "Notes" to his text. These "notes," comprised of seven brief essays, 40 pages long, became an invaluable set of complex instructions for the operation of the Analytical Engine. More importantly, the notes included Byron's own speculations on the potential of such a machine.

Ada concentrated on what today we could call the "software" applications of the Analytical Engine. In this sense, one can call Byron a true visionary, for she was able to foresee that the Babbage's engine could have vast applications in the area of graphics, artificial intelligence, and the composition of complex computer music. All this more than a century before these disciplines were revolutionized by the modern computer!

Byron's accomplishments took place during an era that saw women as unfit for scientific pursuits. Of course, her upper-class standing provided her with resources and time to study and think, and also with entry into the scientific and intellectual circles of the time. Byron's husband, William King (who later became the Earl of Lovelace) and Charles Babbage, who was sympathetic to the plight of women involved in the sciences, also enabled and encouraged her work. It is interesting to note that Byron, given her social standing, was moved more out of the spirit of pure imagination than social rebelliousness.

Ada Byron was plagued by an asthmatic condition and manic depression. She also became an obsessive gambler in her later years, which caused her family much financial stress. Sadly, Byron developed cancer of the uterus and on November 27, 1852, Augusta Ada Byron died at the young age of thirty-six, the same age that her famous poet father, Lord Byron, had died.

Unfortunately, Ada Byron's accomplishments were subsumed into those of Charles Babbage. It was not until 1952, when Lord Bowen published a text that cited her accomplishments, that the world would reacquaint itself with this wonderful visionary. Today, Ada Byron receives the recognition she deserves. The Department of Defense honored her by naming a 1979 programming language ADA.

The field of computer science, and the computer revolution, owes much to the interpretative insight that Ada Byron contributed in her notes to Babbage's Analytical Engine.Like all true visionaries, Byron overcame the limitations of her era, and the results of her work appear everywhere, from the Internet to the concert hall.

By Rajendra