Something about mobile applications and more tips for those who don’t want to be a retrograde

#11 Software development for mobile devices

In the late 1990’s, Web development became mainstream in programming and obtained universal recognition, standing apart traditional desktop applications in many areas. In the year 2008 year the development of mobile applications has left the launching pad. The development of this type of programming will become extremely important over the next 5 years. Of course, there are many approaches to develop software for mobile devices: web applications, RIA, and also the applications that can run on the device itself. It doesn’t matter which of these directions you choose. What is really important is that adding skills of development for mobile devices in your resume you can be definitely sure that your experience will be great demand in the labor market in the future.

#12 Newsletter subscriptions and self-education

Nowadays it’s not enough to get the diploma of any profession in IT. Some years without experience and self-education and you will become a retrograde. Of course it’s a sad tendency, sword of Damocles for all the programmers, but fortunately it’s not so difficult to change the situation. Reading news and studying articles about new technologies and the last tendencies in software development will allow you to be always sitting pretty.

to be continued…

How to practice good “hygiene” of software development?

#10 “Hygiene” of software development (the list starts in the previous posts)

Several years ago, many software development companies didn’t use such tools as bug-tracking systems, version control and other similar tools. They just worked in Integrated Development Environment (IDE), and that was all. But, thanks to new approaches to integration, tools such as Microsoft Visual Studio Team System and advent of high-quality systems with open source communities programmers discovered new methods and new “hygiene” of software development.

Nowadays developers should know not only how to put the code in repository, or get it from it, or how to use virtual machines to create test environment. They have to be sure that they properly coordinate their activities in their team. Those software developers who copy everything to their personal USB flash without documenting changes in program code doesn’t welcome not only in “traditional” companies, but also in Agile-commands, where coordination and communication between team members are considered as a key factor of quality software development.

to be continued…

Oxagile believes in the bonanza future of Agile methodologies

#9. Flexible methodology (рlease, read the beginning of the list in the previous posts)

When Agile appeared in mainstream development, many IT-companies and certain specialists were rather skeptical. We think that such sentiments showed intention to protect the traditional approach. It was “fear of the unknown” discarding all the tools, which could lead to anarchy in software development.

By that time the ideas of Agile methodologies have become defined much better. Today they expressed rather clear in numerous books, articles and (it is the most important thing) in practical experience of many companies and well-known specialists. So IT-world could learn a new methodology at first hand.

Many teams nowadays use and experiment with Agile. Of course, Agile is not a panacea that can save the project from failure, but flexible methodologies actually were used in many successful software projects.

Agile developers who understand and work effectively with flexible development tools will be in great demand on the labor market. And you can be sure that their popularity will only grow over the next 5 years.

to be continued…

Dynamic and functional languages – a new way of thinking

#8. Dynamic and functional programming languages (Please, read the beginning of the list in the previous posts)

You would be surprised, but the next point in our “look-ahead list” is dynamic language. It can be functional language as well, we can’t decide it exactly. :) Of course such languages as Python, F#, Ruby, and Groovy don’t belong to mainstream; nevertheless software professionals can find good ideas in them. Take LINQ from .NET as an example, this language is an “offspring” of the functional programming. Ruby and Python are becoming more and more popular in some areas (owing to good programming for Silverlight).

Your programming skills in these “informal” languages will not only make your résumé more impressive, but also liberalize, helping to find more non-typical and unusual decisions for everyday tasks.
For example, you can read the book “Programming Python” by Mark Lutz. It will show you all power of this language and help to unveil your potential. No doubt this book is one of the most comprehensive and detailed edition for advanced Python programmers available nowadays.

to be continued…

Do programmers need to speak «human language»?

Speaking about 14 most promising IT technologies of the next five years we cannot but mention social skills (the previous posts - Rich Internet Applications for “rich” software development and 14 technologies that won’t become obsolete before 2014: foundations of software development).

#7. Social skills.

Of course we don’t mean such tings as psychological and oratorical skills for programmers. Software developers may not need books like «How to win friends and influence people». Nevertheless they often face with customers and need to speak common language with them.

Business and software are closely connected with each other. Specialists can’t change their business processes without proper changes in their software. For example, Chief Financial Officer can’t change the accounting rules without working with IT department to update the system. And call center can’t optimize its work without IT specialists updating the CRM workflow. So customers often need to work directly with the development team to make sure that their requirements were properly reflected in developed software products.

So developers are more and more involved in non-development meetings and processes to provide feedback control. And those specialists who can acquire skills of affective communication will be highly valued in labor market.

Rich Internet Applications for “rich” software development

Today we continue our list of 14 the most relevant technologies for software developers adding some Web-oriented technologies to it:

#4. Rich Internet Applications (RIA)
No matter you can love RIA or hate it, today developers use Flash not only for cartoons about politicians who sing silly songs, but also for more serious things. Flash has rich functionality to create applications using technologies such as Flex and AIR. Companies that develop Flash analogues, for example JavaFx and Silverlight, also improve similar features and increase productivity.

HTML5 soon will combine the full functionality of RIA, including connection to the databases and putting the official seal of W3C on AJAX technology.

It means that in the near future, the differences between RIA platforms will be decreased.


#5. Web Development
Web development won’t sink into oblivion in the near future. :) Many Web developers ignore, or at least only familiar with the basics, providing frameworks. However, companies want more and more people who able to work with these technologies. So, JavaScript, CSS, and HTML will be still successful even in 2014.


#6. Web Services

JSON or XML? REST or SOAP? This choice depends on the project, and work complexity increases without Web services technologies. Even those areas, where developers used ODBC, COM, or RPC, are gradually moving towards Web services.

to be continued…

14 technologies that won’t become obsolete before 2014: foundations of software development

The impact of recent changes in the world economy changed the situation in world of software. Now the majority of developers are focused on short-term work. But it doesn’t mean that they are careless about their prospects. Self-education and  experience are still the only way to success. That is why it’s so important to be constantly analyzing existing technologies and methodologies trying to keep step with changeable IT- world, not wasting valuable time for unnecessary knowledge and superseded information.

So we will try to forecast the most essential skills for developers that won’t become obsolete in the next five-six years. In this and the next posts we will list 14 the most relevant technologies for software developers.

#1-3: Java, PHP, .NET

It’s highly unlikely that three foundations of software development, Java, PHP, .NET, will be in less demand in the near future. Developers need to know at least one of these programming languages and development platforms: Java, .NET (VB.NET or C #), or PHP. Nevertheless only one programming language syntax is not enough. Usually projects cover a wide range of different functions, so developers need to know the frameworks and libraries associated with the necessary functionality in more details.

to be continued…

Abnormal programming: LISP-like programming is our new art

Lisp (or LISP – LISt Processing Language) is a family of programming languages with a distinctive, parenthesized syntax. It has very old history (was specified in 1958 year, only Fortran is older). Nevertheless programmers use it even nowadays!

Of course, Lisp has undergone a great changes since its appearance, it originated some dialects (today the most popular of them are Common Lisp and Scheme).

The Lisp-code is written as s-expressions (parenthesized lists), the operator’s name or function goes first, and then we use arguments. But it’s better to see it all in practice. Especially in this unrealistic performance that was possible with the help of LISP and OpenGL (enjoy the internet-video).

Be patient and you will see something impressive, it will start somewhere after the 5th minute. This real work of art was created by the winner of international awards, programmer Ivan Lyambdin:


Day of the Triffords from Andrew Sorensen on Vimeo.

How do you like the video? As you see LISP-like programming can be used not only for software development, but also for creation of real beauty. :)

Configuration management or how to develop large software (part 3 - the last)

I’ve started this topic in the previous 2 posts (part 1 and part 2). Here are some more thought regarding the project management for large software projects.

Usually software development doesn’t imply the use of any version control system. All other approaches could be applied or not to individual projects. It dependents on the specifics of developed system, on many other factors, the most important of which, in our opinion, ability to control all the approaches, availability of necessary skills and resources and quality of the developed system.

There is a separate discipline of software engineering, which deals with this kind of organizational objectives without any reference to methodology — it is a configuration management. Configuration Management is a core discipline that helps to manage and control requirements specification, the process of software project development and information on the status of individual tasks and the entire project as a unit. The project success largely depends on how the process of configuration management was streamlined. On the one hand it can save the project, but on the other hand it can bury it.

Glossary of IEEE 610 describes configuration management as “a discipline applying technical and administrative direction and surveillance to: identify and document the functional and physical characteristics of a configuration item, control changes to those characteristics, record and report change processing and implementation status, and verify compliance with specified requirements”.

But it’s a rather formal definition. The following software and tools that programmers face on duty every day will allow you to understand how this definition works in practice:

* Subversion; CVS; Git; Mercurial; Bazaar; Microsoft Visual SourceSafe; ClearCase; Perforce.
* Ant; Nant; Maven; Phing; make; nmake; Cmake; MSBuild; Rake.
* JUnit; NUnit; CPPUnit; DUnit; PHPUnit; PyUnit; Test:: Unit; vbUnit; JsUnit.
* PMD; FxCop; PHP_CodeSniffer; PyChecker, lint.
* JavaDoc; phpDocumentor; CppDoc; RDoc; PyDoc; NDoc; Doxygen.
* CruiseControl; CruiseControl.NET; TeamCity; xinc; Atlassian Bamboo; Hudson.
* Jira, Trac, Mantis, Bugzilla, TrackStudio.

I hope this information was useful for at least some of you and will highly appreciate comments and any other kind of feedback.

Configuration management or how to develop large software (part 2)

Beginning of the article read here.

Programmers look at the same project from the different position (in comparison with managers) and they focus their attention on other issues: architectural design, database, UML-diagrams and all these stuff. In theory it means “to spend the whole day in order to fly in 5 minutes”. If you take these steps as number “0” in software development process, in practice the project will begin with the step number “1” – with the development. It is not quite correct approach, but it’s the only possible approach when developers can’t give the exact answers to the questions put at the very beginning of software development. (Tell us about the other possible way out, if you know it :)
Agile methodologies are known as attempt to solve these problems (and we like this approach, we even used it in our corporate brand – Oxagile). But agile methodologies work mainly on organizational level. Programming level is connected with other issues.