Category Archives: Software Development

Building Single Page Applications using Web API and angularJS (Free e-book)

chsakell's Blog

Single Page Applications are getting more and more attractive nowadays for two basic reasons. Website users have always preferred a fluid user experience than one with page reloads and the incredible growth of several JavaScript frameworks such as angularJS. This growth in conjunction with all the powerful server side frameworks makes Single Page Application development a piece of cake. This post is the online version of the free e-book and describes step by step how to build a production-level SPA using ASP.NET Web API 2 and angularJS. You have two choices. Either grab a coffee and keep going on with this version or simply download the e-book and enjoy it whenever and wherever you want.
There are a lot of stuff to build in this application so I will break this post in the following sections:

View original post 9,862 more words

Software Engineer Interview Questions

Q.  What is an Interface? How does it differ from a Class?
A. An interface is a contract only. It only contains method description, no concrete method. It can’t be instantiated.

Q. Explain the basic functionality of garbage collector.
A. It manages the allocation and release of memory. It automatically releases the orphan objects from memory. It can’t be controlled. Sometime it can be executed by force.

Q. When re-throwing exceptions should you use throw ex; or throw;?
A. The good technique is to use throw ; to keep the stack trace intact.

Q. If a method is marked as protected internal who can access it?
A. This method can be accessed in derived classes and in the same assembly.

Q. What is a delegate?
A. The delegate is the pointer to function and is often used for callback events.

Q. What is the difference between a process and a thread?
A. A process is the program unit and there can be more than one processes in an application. The process in turn can have multiple threads which are allocated a processing time.

Q. What is Encapsulation?
A. Encapsulation is the term of OOP which has the same purpose as the literal meanings. Using encapsulation means keeping the object and its properties and behavior in single boundary.

Q. Describe a strategy for designing and building components that minimizes recompiling of client applications when the component is updated.
A. It can be handled by using distributed mechanism. In past it was done using DCOM and COM+ and recently it is achieved by WCF services.

Q. What are javascript events? What are they used for?
A. Javascripts events are triggers which are invoked by the user action in browser. They are used to facilitate the user by formulating the immediate response without consulting the server.

Q. What is a postback?
A. Postback is an event of sending a pre-loaded page back to server. Like writing the URL on browser loads the page for the first time and when user clicks to some button or do some operation and submits the form back to server, it is called postback.

Q. What is a cookie?
A. A cookie is client side mechanism to store state. The data is stored on client machine.

Q. If you had the opportunity to change your current software development processes what would you change and why?
A. It all depends on the circumstances. First of the all I would be looking into the problem areas (if there is any) and solve them first according to requirement.
If I would need to change the architecture, I would be moving towards scalable, reusable, optimized, maintainable type of approach.

Q. What do you find most frustrating about software development?
A. Talking about my previous experience, I feel frustrated when the things are done in chaotic manner like no process, no rule, not enough time as these all contribute to the poor quality product.

Q. What are the important items that should be defined in a Functional Design Specification (document to capture high level design to be signed off with a client)?
A. The functional design specification contains all the functional requirements of the system, so it should be focused on What approach rather than How. The requirement should be clear and precise. If required (according to the User), it should include Use Case diagrams and some cases the GUIs to clearly portray the requirement and get them vet.

Q. I want to store my compact disk collection in a database and I want to store the following information for each compact disk:-

  • Artist’s name
  • Album title
  • Date acquired
  • Genre or type of music
  • The name of each track
  • The duration of each track
  • If it is a single or a double CD
  • If I own the CD or I’ve “borrowed” it from a friend

Could you please create a normalised database design that will enable me to store this information? Please limit your answer to the tables and columns required including the data type of each column and if it is a primary or foreign key.

CaptureQ. Assuming the database has been created and the data has been populated. Write an SQL statement to find all the “Pink Floyd” albums I own.
A. Select Album.* from Album inner join Artist
On Album.ArtistID = Artist.ID
         Where ArtistName = ‘Pick Floyd’

Q. Write an SQL statement to count how many albums of each genre I have in my collection
A. Select Count(AlbumID) From Album Group by Genre

OOP Interview Questions

What is Encapsulation in OOPS?

  • Encapsulation is one of the fundamental principles of object-oriented programming.
  • Encapsulation is a process of hiding all the internal details of an object from the outside world
  • Encapsulation is the ability to hide its data and methods from outside the world and only expose data and methods that are required
  • Encapsulation is a protective barrier that prevents the code and data being randomly accessed by other code or by outside the class
  • Encapsulation gives us maintainability, flexibility and extensibility to our code.
  • Encapsulation makes implementation inaccessible to other parts of the program and protect from whatever actions might be taken outside the function or class.
  • Encapsulation provides a way to protect data from accidental corruption
  • Encapsulation hides information within an object
  • Encapsulation is the technique or process of making the fields in a class private and providing access to the fields using public methods
  • Encapsulation gives you the ability to validate the values before the object user change or obtain the value
  • Encapsulation allows us to create a “black box” and protects an objects internal state from corruption by its clients

What is Inheritance in OOPS?

  • Inheritance, together with encapsulation and polymorphism, is one of the three primary characteristics (concept) of object-oriented programming
  • Inheritance enables you to create new classes that reuse, extend, and modify the behavior that is defined in other classes
  • The Class whose methods and variables are defined is called super class or base class
  • The Class that inherits methods and variables are defined is called sub class or derived class
  • Sometimes base class known as generalized class and derived class known as specialized class
  • Keyword to declare inheritance is “:” (colon) in visual c#

Benefits of using Inheritance

  • Once a behavior (method) or property is defined in a super class(base class),that behavior or property is automatically inherited by all subclasses (derived class).
  • Code reusability increased through inheritance
  • Inheritance provide a clear model structure which is easy to understand without much complexity
  • Using inheritance, classes become grouped together in a hierarchical tree structure
  • Code are easy to manage and divided into parent and child classes

What is Polymorphism in OOPS?

  • Polymorphism is one of the primary characteristics (concept) of object-oriented programming
  • Poly means many and morph means form. Thus, polymorphism refers to being able to use many forms of a type without regard to the details
  • Polymorphism is the characteristic of being able to assign a different meaning specifically, to allow an entity such as a variable, a function, or an object to have more than one form
  • Polymorphism is the ability to process objects differently depending on their data types
  • Polymorphism is the ability to redefine methods for derived classes.

Types of Polymorphism

  • Compile time Polymorphism
    •  Compile time Polymorphism also known as method overloading
  • Run time Polymorphism
    • Run time Polymorphism also known as method overriding

What is Access Modifier in OOPS?

Access modifiers determine the extent to which a variable or method can be accessed from another class or object

The following five accessibility levels can be specified using the access modifiers
• Private
• Protected
• Internal
• Protected internal
• Public

What is Abstract Class?

An abstract class is a class that cannot be instantiated and is always used as a base class.

The following are the characteristics of an abstract class:

  • You cannot instantiate an abstract class directly. This implies that you cannot create an object of the abstract class; it must be inherited.
  • You can have abstract as well as non-abstract members in an abstract class.
  • You must declare at least one abstract method in the abstract class.
  • An abstract class is always public.
  • An abstract class is declared using the abstract keyword.

The basic purpose of an abstract class is to provide a common definition of the base class that multiple derived classes can share. Static, Value Types & interface doesn’t support abstract modifiers. Static members cannot be abstract. Classes with abstract member must also be abstract.


What is Instantiation?

When you make a new instance the process is called instantiation and is typically done using the new keyword. A pure virtual function or pure virtual method is a virtual function that is required to be implemented by a derived class, if that class is not abstract By default, C++ matches a function call with the correct function definition at compile time. This is called static binding. You can specify that the compiler match a function call with the correct function definition at run time; this is called dynamic binding. You declare a function with the keyword virtual if you want the compiler to use dynamic binding for that specific function.

Static classes and class members are used to create data and functions that can be accessed without creating an instance of the class. Static class members can be used to separate data and behavior that is independent of any object identity: the data and functions do not change regardless of what happens to the object. Static classes can be used when there is no data or behavior in the class that depends on object identity. When applied to a class, the sealed modifier prevents other classes from inheriting from it. In the following example, class B inherits from class A, but no class can inherit from class B.

class A {}
sealed class B : A {}

You can also use the sealed modifier on a method or property that overrides a virtual method or property in a base class. This enables you to allow classes to derive from your class and prevent them from overriding specific virtual methods or properties.

Delegate:Any method that matches the delegate’s signature, which consists of the return type and parameters, can be assigned to the delegate. This makes is possible to programmatically change method calls, and also plug new code into existing classes. As long as you know the delegate’s signature, you can assign your own delegated method.
Composition is “Has a” relation (objects contained in it destroys when the main object is destroyed)
Aggregation is also “Has a” relation but objects contained is it .. has their own identity

Usually, when using composition, the object instantiates the objects it has. Look at the Chair class above. You can see that Back , Seat , and Leg are instantiated in the Chair class. When using aggregation, the object does not instantiate the objects it has. Look at the code below. The DinnerChair class has a Person , but it does not instantiate Person .

Overriding is in Inheritance while Overloading is same function name with different signature (in the same scope or in derived class).
The signature of a method is the combination of the method’s name along with the number and types of the parameters (and their order).

Is-a relationship is called inheritance i.e. Pepperoni is a pizza
Has-a relationship defined already where One objects contains other objects.

This is object-oriented programming and UML terminology, not Java-specific. There are actually three cases you should be aware of:
1. A House is a Building (inheritance);
2. A House has a Room (composition);
3. A House has an occupant (aggregation).

The difference between (2) and (3) is subtle yet important to differentiate. Together they are forms of association. What’s the difference? Composition implies the child object cannot live out of the context of the parent (destroy the house and rooms disappear) whereas aggregation implies the child can exist on its own (destroy the house and the occupant goes elsewhere).

Can you specify the accessibility modifier for methods inside the interface?
All the methods inside an interface are always public, by default. You cannot specify any other access modifier for them.

Is it possible for a class to inherit the constructor of its base class?
No, a class cannot inherit the constructor of its base class.

How to set Icon for application .exe file

We have to follow the simple steps when changing an application’s exe file icon.

  • Go to Solution Explorer
  • Right Click on the Primary Project
  • Go to Properties
  • Go to Application tab
  • In Resources groupbox select the desired icon
This will set the application icon for you.
But if you create a setup of your project and there’s a shortcut of your primary .exe file on user’s desktop, you will find that the icon of that is not changed. For that you have to do the following steps.
  • Go to setup project in Solution Explorer
  • Open File System Editor
  • Go to your User’s Desktop folder
  • Select the shortcut of the primary .exe file (if you didn’t find any file here, then you have to create a shortcut of primary .exe file and put it here)
  • Go to properties of this shortcut
  • Select the desired icon for your application.
Now compile and install the application you will find the changed icon of your shortcut file too

Top 20 Programming Lessons I’ve Learned in 20 Years


— By: Jonathan Danylko

I’ve been programming since I was 11 and I’ve loved technology and programming every since. There are some hard and easy lessons I’ve learned over time. As a fellow programmer, you may not have experienced these, but I’m offering them to individuals who are interested in learning more from my experiences.

I’ll be updating this as time goes on. I may have more, but in my 20 year period, I don’t think there are any additional rules that this list doesn’t include. 🙂

Here are my most memorable lessons so far.

1.    Set a duration of how long you think it should take to solve a problem – C’mon, admit it! I’m just as guilty as the next programmer. I’ve seen programmers sit in front of a monitor for eight hours at a time trying to solve a particular problem. Set a time table for yourself of 1 hour, 30 minutes, or even 15 minutes. If you can’t figure out a solution to your problem within your time frame, ask for help or research your problem on the Internet instead of trying to be super-coder.

2.    A language is a language is a language – Over time, once you understand how one language works, you’ll notice similarities between other languages. The language you choose should provide you with a suitable “comfort” level, the ability to produce efficient (and clean) code, and, above all, allow the language to suit the project and vice-versa.

3.    Don’t over-“design pattern” applications – Sometimes it’s just easier to write a simple algorithm than it is to incorporate a singleton or facade pattern. For the most part, it even allows for cleaner, understandable code. 🙂

4.    Always backup your code – I’ve experienced a complete hard drive failue and lost a lot of code when I was younger and felt horrible because of what had happened. The one time you don’t back up your data may be the one time where you have a strict deadline with a client and they need it tomorrow. Source code/version control applies here as well.

5.    You are not the best at programming. Live with it. – I always thought that I knew so much about programming, but there is always someone out there better than you. Always. Learn from them.

6.    Learn to learn more – With number five explained, I’ve always had a magazine or book in my hand about computers or programming (ask my friends, they’ll confirm). True, there is a lot of technology out there and keeping up with it is a fulltime job, but if you have a smart way of receiving your news, you’ll learn about new technology every single day.

7.    Change is constant – Your knowledge of technology and/or programming should be similar to how you treat stocks: Diversify. Don’t get too comfortable with a particular technology. If there’s not enough support for that language or technology, you might as well start updating your resume now and start your training period. My general rule of thumb that has kept me going? Know at least two or three languages, so if one dies off, you have another one to fall back on while you train for a new technology.

8.    Support Junior – Assist and train the junior/entry-level developers on good programming guidelines and techniques. You never know…you may move up in rank and you’ll feel more confident having personally trained and prepared them for their next position.

9.    Simplify the algorithm – Code like a fiend, but once you’re done, go back through your code and optimize it. A little code improvement here and there will make support happier in the long run.

10.  Document your code – Whether its documenting a Web Service API or documenting a simple class, document as you go. I’ve been accused of over-commenting my code and that’s something I’m proud of. It only takes a second to add an additional comment line for each 3 lines of code. If it’s a harder technique to grasp, don’t be afraid to over-comment. This is one problem most architects, backup coders, and support groups don’t complain about if you’ve done your job right.

11.  Test, Test, Test – I’m a fan of Black Box Testing. When your routine is finished, your “stamp of approval” period starts. If you have a Quality Assurance department, you may be talking more to them than your project manager regarding errors in your code. If you don’t test your code thoroughly, you may develop more than code. Possibly a bad reputation.

12.  Celebrate every success – I’ve met a lot of programmers who have conquered headache-style problems with a great programming technique and celebrated with a fellow programmer by doing the “shake”, the high-five, or even a “happy dance.” Everyone has enlightening periods in their life and even though that one happy coder asked you to come and see his extraordinary piece of code and you’ve seen that one piece of code over 100 times in your experiences, celebrate the success of a fellow developer for the 101-st time.

13.  Have Code Reviews Frequently – On projects and personally. In the company, you will always have code reviews of how well you coded something. Don’t look at it as people crucifying your coding style. Think of it as constructive criticism. On the personal front, review your code and always ask, “How could I have done it better?” This will accelerate your learning and make you a better programmer.

14.  Reminisce about your code – There are two ways to looking at old code: “I can’t believe I wrote this code” and “I can’t believe I wrote this code.” The first statement is often of disgust and wondering how you can improve it. You’d be surprised at how old code can be resurrected into a possible and better routine, or maybe even an entire product. The second statement is of amazement and achievement. Developers have their one or two project code achievements that they completed and had everyone standing up and taking notice. Again, based on your excellent coding ability, you could take those past routines or projects and update them into a better product or idea.

15.  Humor is necessary – In my 20 years of development, I have never met a programmer who hasn’t had a decent sense of humor. Actually, in this industry, it’s a requirement.

16.  Beware the know-it-all, possessive coder, and the inexperienced coder – Humble yourself when you meet these types of coders. The know-it-all tries to upstage you instead of working as a team player, the defensive coder created code that he doesn’t want to share with anyone, and the inexperienced coder constantly asks for assistance every ten minutes where the finished code developed is yours, not theirs.

17.  No project is ever simple – I’ve been asked by friends, family, and associates to just “whip something up for me.” To “whip” up a program or web site, it takes planning from both parties to complete something that both sides can appreciate. If someone needs a 3-page web site with Microsoft Access from the start, it winds up becoming a 15-page web site with SQL Server, a forum, and a custom CMS (Content Management System).

18.  Never take anything for granted – If you take on a simple project, you may think that a certain section will be easy to complete. Don’t think that even for a moment. Unless you have a class, component, or piece of codealready coded…and has been tested thoroughly…and is in production from an existing project, don’t think it will be easy.

19.  Software is never finished – A fellow programmer once told me that software is never finished, it’s “temporarily completed.” Sound advice. If the client is still using a program you wrote and has stood the test of time, chances are, you are still updating it, which isn’t a bad thing. It keeps you working. 🙂

20.  Patience is definitely a virtue – When clients, friends, or family members use a PC, they get frustrated and proceed to hit a component of the PC or storm off. I keep telling everyone, “you are controlling the computer not the other way around.” You need to have a certain level of patience for programming computers. As soon as programmers understand what they did wrong, they look at it from the computers point of view and say, “Oh, that’s why it was doing that.”

I hope this list of lessons learned have either inspired or provided a chuckle for some people.

Coding :)

Always code as if the guy who ends up maintaining your code will be a violent psychopath who knows where you live.

Martin Golding

The trouble with programmers is that you can never tell what a programmer is doing until it’s too late.

Seymour Cray

Good code is its own best documentation.

Steve McConnell

Most software today is very much like an Egyptian pyramid with millions of bricks piled on top of each other, with no structural integrity, but just done by brute force and thousands of slaves.

Alan Kay

Microsoft Windows shortcut keys

Shortcut Keys 3.x 95 98 ME NT 2000 XP Vista Description
Alt + Tab X X X X X X X X Switch between open applications.
Alt + Shift + Tab X X X X X X X X Switch backwards between open applications.
Alt + double-click X X X X X X X Display the properties of the object you double-click on. For example, doing this on a file would display its properties.
Ctrl + Tab X X X X X X X X Switches between program groups or document windows in applications that support this feature.
Ctrl + Shift + Tab X X X X X X X X Same as above but backwards.
Alt + Print Screen X X X X X X X X Create a screen shot only for the program you are currently in.
Ctrl + Print Screen X X X Creates a screen shot of the entire screen
Ctrl + Alt + Del X X X X X X X X Reboot the computer and/or bring up the Windows task manager.
Ctrl + Esc X X X X X X X X Bring up the Windows Start menu. In Windows 3.x this would bring up the Task Manager.
Alt + Esc X X X X X X X Switch Between open applications on taskbar.
F1 X X X X X X X X Activates help for current open application.
F2 X X X X X X X X Renames selected Icon.
F3 X X X X X X X Starts find from desktop.
F4 X X X X X X X Opens the drive selection when browsing.
F5 X X X X X X X Refresh Contents to where you were on the page.
Ctrl + F5 X Refreshes page to the beginning of the page.
F10 X X X X X X X X Activates menu bar.
Shift + F10 X X X X X X X Simulates right-click on selected item.
F4 X X X X X X X Select a different location to browse in the Windows Explorer toolbar.
Alt + F4 X X X X X X X X Closes Current open program.
Ctrl + F4 X X X X X X X X Closes Window in Program.
F6 X X X X X X X Move cursor to different Windows Explorer pane.
Alt + Space bar X X X X X X X X Drops down the window control menu.
Ctrl + (the ‘+’ key on the keypad) X X X X X X Automatically adjust the widths of all the columns in Windows explorer
Alt + Enter X X X X X X X Opens properties window of selected icon or program.
Alt + Space bar X X X X X X X Open the control menu for the current window open.
Shift + Del X X X X X X X Delete programs/files without throwing them into the recycle bin.
Holding Shift X X X X X X X X Boot Safe Mode or by pass system files as the computer is booting.
Holding Shift X X X X X X X When putting in an audio CD, will prevent CD Player from playing.
Enter X X X X X X X X Activates the highlighted program.
Alt + Down arrow X X X X X X X Display all available options on drop down menu.
* (on the keypad) X X X X X X X Expands all folders on the currently selected folder or drive in Windows Explorer.
+ (on the keypad) X X X X X X X Expands only the currently selected folder in Windows Explorer.
– (on the keypad) X X X X X X X Collapses the currently selected folder in Windows Explorer.

Windows key keyboard shortcuts

Below is a listing of Windows keys that can be used on computers running a Microsoft Windows operating system and using a keyboard with a Windows key. In the below list of shortcuts, the Windows key is represented by “WINKEY”.

Shortcut Keys Description
WINKEY Pressing the Windows key alone will open Start.
WINKEY + F1 Opens the Microsoft Windows help and support center.
WINKEY + F3 Opens the Advanced find window in Microsoft Outlook.
WINKEY + D Brings the desktop to the top of all other windows.
WINKEY + M Minimizes all windows.
WINKEY + SHIFT + M Undo the minimize done by WINKEY + M and WINKEY + D.
WINKEY + E Open Microsoft Explorer.
WINKEY + Tab Cycle through open programs through the taskbar.
WINKEY + F Display the Windows Search / Find feature.
WINKEY + CTRL + F Display the search for computers window.
WINKEY + F1 Display the Microsoft Windows help.
WINKEY + R Open the run window.
WINKEY + Pause / Break key Open the system properties window.
WINKEY + U Open Utility Manager.
WINKEY + L Lock the computer (Windows XP and above only).
WINKEY + P Quickly change between monitor display types. (Windows 7 only)
WINKEY + LEFT ARROW Shrinks the window to 1/2 screen on the left side for side by side viewing. (Windows 7 only)
WINKEY + RIGHT ARROW Shrinks the window to 1/2 screen on the right side for side by side viewing. (Windows 7 only)
WINKEY + UP ARROW When in the side by side viewing mode, this shortcut takes the screen back to full size. (Windows 7 only)
WINKEY + DOWN ARROW Minimizes the screen.  Also, when in the side by side viewing mode, this shortcut takes the screen back to a minimized size. (Windows 7 only)

10 skills developers will need in the next five years

With the recent changes in the economy, a lot of developers are focused on their short-term job prospects. At the same time, it’s important to make sure that you get the most bang for your buck when it comes to taking the time and energy to learn new skills. Here is our list of 10 skills you should be learning right now to make sure that your resume is relevant for the next five years. The list is hardly exhaustive, and there are huge swaths of the industry it won’t cover (mainframe developers, for example). Nonetheless, for average mainstream development, you can’t go wrong learning at least seven of these skills — not only to the point where you can talk convincingly about them at a job interview, but actually use them on the job.

1: One of the “Big Three” (.NET, Java, PHP)

Unless there is a radical shift in the development world (akin to an asteroid hitting Redmond), most developers will need to know at least one of the Big Three development systems — .NET (VB.NET or C#), Java, or PHP — for the near future. It’s not enough to know the core languages, either. As projects encompass more and more disparate functionality, you’ll need to know the associated frameworks and libraries more deeply.

2: Rich Internet Applications (RIAs)

Love it or hate it, in the last few years, Flash is suddenly being used for more than just animations of politicians singing goofy songs. Flash has also sprouted additional functionality in the form or Flex and AIR. Flash’s competitors, such as JavaFx and Silverlight, are also upping the ante on features and performance. To make things even more complicated, HTML 5 is incorporating all sorts of RIA functionality, including database connectivity, and putting the formal W3C stamp on AJAX. In the near future, being an RIA pro will be a key resume differentiator.

3: Web development

Web development is not going away anytime soon. Many developers have been content to lay back and ignore the Web or to just stick to “the basics” their framework provides them with. But companies have been demanding more and more who really know how to work with the underlying technology at a “hand code” level. So bone up on JavaScript, CSS, and HTML to succeed over the next five years.

4: Web services

REST or SOAP? JSON or XML? While the choices and the answers depend on the project, it’s getting increasingly difficult to be a developer (even one not writing Web applications) without consuming or creating a Web service. Even areas that used to be ODBC, COM, or RPC domains are now being transitioned to Web services of some variety. Developers who can’t work with Web services will find themselves relegated to legacy and maintenance roles.

5: Soft skills

One trend that has been going for quite some time is the increasing visibility of IT within and outside the enterprise. Developers are being brought into more and more non-development meetings and processes to provide feedback. For example, the CFO can’t change the accounting rules without working with IT to update the systems. And an operations manager can’t change a call center process without IT updating the CRM workflow. Likewise, customers often need to work directly with the development teams to make sure that their needs are met. Will every developer need to go to Toastmasters or study How to Win Friends and Influence People? No. But the developers who do will be much more valuable to their employers — and highly sought after in the job market.

6: One dynamic and/or functional programming language

Languages like Ruby, Python, F#, and Groovy still aren’t quite mainstream –  but the ideas in them are. For example, the LINQ system in Microsoft’s .NET is a direct descendent of functional programming techniques. Both Ruby and Python are becoming hot in some sectors, thanks to the Rails framework and Silverlight, respectively. Learning one of these languages won’t just improve your resume, though; it will expand your horizons. Every top-flight developer I’ve met recommends learning at least one dynamic or functional programming language to learn new ways of thinking, and from personal experience, I can tell you that it works.

7: Agile methodologies

When Agile first hit mainstream awareness, I was a skeptic, along with many other folks I know. It seemed to be some sort of knee-jerk reaction to tradition, throwing away the controls and standards in favor of anarchy. But as time went on, the ideas behind Agile became both better defined and better expressed. Many shops are either adopting Agile or running proof-of-concept experiments with Agile. While Agile is not the ultimate panacea for project failure, it does indeed have a place on many projects. Developers with a proven track record of understanding and succeeding in Agile environments will be in increasingly high demand over the next few years.

8: Domain knowledge

Hand-in-hand with Agile methodologies, development teams are increasingly being viewed as partners in the definition of projects. This means that developers who understand the problem domain are able to contribute to the project in a highly visible, valuable way. With Agile, a developer who can say, “From here, we can also add this functionality fairly easily, and it will get us a lot of value,” or “Gee, that requirement really doesn’t match the usage patterns our logs show” will excel. As much as many developers resist the idea of having to know anything about the problem domain at all, it is undeniable that increasing numbers of organizations prefer (if not require) developers to at least understand the basics.

9: Development “hygiene”

A few years ago, many (if not most) shops did not have access to bug tracking systems, version control, and other such tools; it was just the developers and their IDE of choice. But thanks to the development of new, integrated stacks, like the Microsoft Visual Studio Team System, and the explosion in availability of high quality, open source environments, organizations without these tools are becoming much less common. Developers must know more than just how to check code in and out of source control or how to use the VM system to build test environments. They need to have a rigorous habit of hygiene in place to make sure that they are properly coordinating with their teams. “Code cowboys” who store everything on a personal USB drive, don’t document which changes correspond to which task item, and so on, are unwelcome in more traditional shops and even more unwelcome in Agile environments, which rely on a tight coordination between team members to operate.

10: Mobile development

The late 1990s saw Web development rise to mainstream acceptance and then begin to marginalize traditional desktop applications in many areas. In 2008, mobile development left the launch pad, and over the next five years, it will become increasingly important. There are, of course, different approaches to mobile development: Web applications designed to work on mobile devices, RIAs aimed at that market, and applications that run directly on the devices. Regardless of which of these paths you choose, adding mobile development to your skill set will ensure that you are in demand for the future.

source tech republic