Ever wondered what does it take to be a successful and highly productive software developer??? Well, The success lies in not just being good at what you do but having a fair knowledge across wide spectrum of technologies and constantly learning new stuff and applying those things in your day to day life to improve the efficiency of applications you write.
Somebody once said - "A programmer who hasn't been exposed to all four of the imperative, functional, objective, and logical programming styles has one or more conceptual blindspots. It's like knowing how to boil but not fry".
He was spot on. There are lot of technologies/methodologies involved in the design and development of Application Software. Quite frankly, each one of those software development methodologies/technologies/languages are designed to solve a problem situation in a better way than other ones. There is no one size fits all. It all depends on the problem at hand, developer expertise, budget and most importantly, the available time frame to deliver the project.
Here's what I think are the must have skills :
- Expertise in Object Oriented Programming languages like C#, Java, VB.NET along with their associated frameworks like Asp.net/ J2EE.
- Legacy languages like C, C++; C++ is mother of all modern day programming languages like C# and Java, which inturn was derived from C. If you are new to software development, I would suggest you to start learning languages in the following order, provided you have time. C --> C++ --> C#/Java. The reason being C# and Java borrow lot of concepts from C++. Thorough understanding of these legacy languages will only strengthen your understanding of C#/Java and you can borrow most of the coding style etc/.,
- Data Modeling Languages like UML and their associated tools like Rational Rose or Microsoft Visio. Before you get down to writing code, you have to design the application and put it down on paper using various models for pictorial representation of your application architecture. Unified Modeling Language is a must have skill.
- Relational Databases : Sql Server and Oracle are the most widely used databases for Enterprise Applications. You've got to know how to Design/Architect database tables, the relation between them, apply constraints and also to normalize them to maintain integrity and reduce redundancy.
- Programming T-SQL/PL-SQL : Database is an integral part of majority of the applications. To be a good developer/architect, you not only need to have a very good understanding of relational databases but also how to program them. You've got to know how to perform various operations, write complex queries to process data, apply business rules etc., And for that, you've got to master the art of Sql Stored Procedures.,
- ORM Technologies : Object Relational Mapping technologies like NHibernate, Entity Framework, Linq To SQL or LLBNGen Pro helps you in developing your database intensive applications rapidly by abstractiong out most of the plumbing code to access your database objects. Each one of the technologies mentioned above have their pro's and con's. Some of them are open source and other's are licensed. Depending on your need and the kind of features you are looking for, one of them can fit your needs. My favourite in NHibernate.
- Third Party Frameworks : Depending upon the complexity of your application, you might need to leverage some of the benifits of third party frameworks to help your build quality applications. One of my favourite is Spring.NET which a port of Java's Spring Framework. Spring.NET is lot of things for lot of people. It has lot of components that aim to improve the speed and efficiency of your applications. My favourite feature is Dependency Injection (Inversion of Control). There are other IOC frameworks too. Once you get the hand of them, you'll never go back to your normal style.
- CSS : Cascading Sytle Sheets for the look and feel of your website.
- JavaScript Libraries : JQuery, Scriptalacious, Prototype and YUI are the most popular ones. My favourite ones are YUI (Yahoo User Interface) and jQuery.
- Ajile Development Methodologies : Scrum / Kanban using TDD ( Test Driven Development).
- Mobile Phone : Let's face it. Mobile PDA's are the future of internet. You don't want to be left behind in area. With Monotouch, you could develop iPhone/iPad applications using C#.
- EAI : Enterprise Application Integration Tools like BizTalk / Business Objects. A good software engineer knows how to leverage best tools in the market to integrate applications developed in different platforms. Although you can make use of MSMQ and Windows Work Flows to perform most of the tasks needed for application integration, using tools like BizTalk provide you with support for Load Balancing, Applying Transformations, Dynamic Routing that are required for large scale applications.
- RIA : Rich Internet Applications are the order of the day. If your web-applications are target at consumers, you've got to master atleast one of the following technologies : Silverlight/WPF/Flash.
- Azure/oData/Oslo anyone????
Although the above list looks very long, in-reality its not. Most good developers have a fair knowledge of most of the technologies mentioned above and I don't see any reason why you should not!!!
2 comments:
Hey preetham. You've forgot the most important skill... faking it! From what I have heared, in the it industry, ppl who fake it survive better than the ppl who know it!!!!
Thanks Preetham, this is really good one, it motivates many developers like me. Yes, you are right to be a good programmer we need to have knowledge on all the aspects you mentioned about.
Post a Comment